summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2014-11-22 01:28:32 +0000
committerBen Murdoch <benm@google.com>2014-11-22 01:28:32 +0000
commite4256316f8b5e8d1ec0df1f7762771622a53fa63 (patch)
tree9d8282f7a323fad191129fddbcf5601903fa161c
parent165c68f9802332588874b0a207d7f49d03009ddf (diff)
downloadchromium_org-e4256316f8b5e8d1ec0df1f7762771622a53fa63.tar.gz
Merge from Chromium at DEPS revision 39.0.2171.90
This commit was generated by merge_to_master.py. Change-Id: I1bb301dcfe74249d8b66fb60ba577e9095c86b8d
-rw-r--r--android_webview/libwebviewchromium.target.darwin-arm.mk8
-rw-r--r--android_webview/libwebviewchromium.target.darwin-arm64.mk8
-rw-r--r--android_webview/libwebviewchromium.target.darwin-mips.mk8
-rw-r--r--android_webview/libwebviewchromium.target.darwin-x86.mk8
-rw-r--r--android_webview/libwebviewchromium.target.darwin-x86_64.mk8
-rw-r--r--android_webview/libwebviewchromium.target.linux-arm.mk8
-rw-r--r--android_webview/libwebviewchromium.target.linux-arm64.mk8
-rw-r--r--android_webview/libwebviewchromium.target.linux-mips.mk8
-rw-r--r--android_webview/libwebviewchromium.target.linux-x86.mk8
-rw-r--r--android_webview/libwebviewchromium.target.linux-x86_64.mk8
-rw-r--r--build/android/pylib/gtest/setup.py1
-rw-r--r--build/util/LASTCHANGE2
-rw-r--r--build/util/LASTCHANGE.blink2
-rw-r--r--cc/resources/picture_pile_unittest.cc427
-rw-r--r--chrome/VERSION2
-rw-r--r--chrome/app/generated_resources.grd36
-rw-r--r--chrome/browser/android/provider/chrome_browser_provider.cc39
-rw-r--r--chrome/browser/android/provider/chrome_browser_provider.h1
-rw-r--r--chrome/browser/component_updater/recovery_component_installer.cc5
-rw-r--r--chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.cc42
-rw-r--r--chrome/browser/extensions/api/screenlock_private/screenlock_private_api.cc6
-rw-r--r--chrome/browser/extensions/extension_tab_util.cc9
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.cc2
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.h8
-rw-r--r--chrome/browser/plugins/plugin_info_message_filter.cc55
-rw-r--r--chrome/browser/plugins/plugin_info_message_filter.h2
-rw-r--r--chrome/browser/resources/plugin_metadata/plugins_win.json23
-rw-r--r--chrome/browser/signin/easy_unlock_screenlock_state_handler.cc25
-rw-r--r--chrome/browser/signin/easy_unlock_screenlock_state_handler.h6
-rw-r--r--chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc38
-rw-r--r--chrome/browser/signin/easy_unlock_service.cc51
-rw-r--r--chrome/browser/signin/easy_unlock_service.h12
-rw-r--r--chrome/browser/signin/easy_unlock_service_signin_chromeos.cc7
-rw-r--r--chrome/browser/sync/test/integration/enable_disable_test.cc4
-rw-r--r--chrome/browser/ui/android/tab_model/tab_model.h1
-rw-r--r--chrome/browser/ui/android/tab_model/tab_model_list.cc3
-rw-r--r--chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc56
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm9
-rw-r--r--chrome/browser/ui/settings_window_manager.cc3
-rw-r--r--chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc23
-rw-r--r--chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc76
-rw-r--r--chrome/browser/ui/views/toolbar/browser_action_view.cc3
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc1
-rw-r--r--chrome/browser/ui/webui/signin/user_manager_screen_handler.cc2
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/chrome_tests_unit.gypi1
-rw-r--r--chromeos/ime/component_extension_ime_manager.cc22
-rw-r--r--chromeos/ime/component_extension_ime_manager_unittest.cc36
-rw-r--r--components/data_reduction_proxy_version_header.target.darwin-arm.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.darwin-arm64.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.darwin-mips.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.darwin-x86.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.darwin-x86_64.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.linux-arm.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.linux-arm64.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.linux-mips.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.linux-x86.mk2
-rw-r--r--components/data_reduction_proxy_version_header.target.linux-x86_64.mk2
-rw-r--r--components/domain_reliability/util.cc22
-rw-r--r--components/signin/core/common/profile_management_switches.cc8
-rw-r--r--components/sync_driver/sync_prefs.cc16
-rw-r--r--components/sync_driver/sync_prefs_unittest.cc22
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.cc4
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h7
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc3
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc15
-rw-r--r--content/browser/web_contents/web_contents_impl.cc8
-rw-r--r--content/browser/web_contents/web_contents_impl.h4
-rw-r--r--content/common/gpu/OWNERS1
-rw-r--r--content/common/gpu/image_transport_surface_calayer_mac.mm3
-rw-r--r--content/common/gpu/image_transport_surface_fbo_mac.h9
-rw-r--r--content/common/gpu/image_transport_surface_fbo_mac.mm52
-rw-r--r--content/common/gpu/media/dxva_video_decode_accelerator.cc9
-rw-r--r--content/content_tests.gypi15
-rw-r--r--content/content_unittests.isolate14
-rw-r--r--content/public/common/content_constants.cc1
-rw-r--r--content/public/common/content_constants.h1
-rw-r--r--content/renderer/media/media_stream_audio_processor.cc3
-rw-r--r--content/renderer/media/media_stream_audio_processor_options.cc11
-rw-r--r--media/audio/mac/audio_manager_mac.cc27
-rw-r--r--media/audio/mac/audio_manager_mac.h2
-rwxr-xr-xnative_client_sdk/src/build_tools/build_sdk.py11
-rw-r--r--sandbox/win/src/sandbox_policy_base.cc2
-rw-r--r--third_party/libjingle/BUILD.gn1
-rw-r--r--third_party/libjingle/libjingle.gyp1
-rw-r--r--third_party/libjingle/overrides/init_webrtc.cc22
-rw-r--r--third_party/libjingle/overrides/init_webrtc.h13
-rw-r--r--third_party/libjingle/overrides/initialize_module.cc6
-rw-r--r--tools/metrics/rappor/rappor.xml31
-rw-r--r--ui/login/account_picker/user_pod_row.css44
-rw-r--r--ui/login/account_picker/user_pod_row.js2
-rw-r--r--ui/login/account_picker/user_pod_template.html6
-rw-r--r--ui/views/controls/label.cc5
-rw-r--r--ui/views/controls/label_unittest.cc42
94 files changed, 1047 insertions, 538 deletions
diff --git a/android_webview/libwebviewchromium.target.darwin-arm.mk b/android_webview/libwebviewchromium.target.darwin-arm.mk
index 05354eeeb9..fff71662bf 100644
--- a/android_webview/libwebviewchromium.target.darwin-arm.mk
+++ b/android_webview/libwebviewchromium.target.darwin-arm.mk
@@ -345,14 +345,14 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_neon_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_neon_gyp.a \
$(call intermediates-dir-for,GYP,third_party_webrtc_modules_audio_processing_gen_nsx_core_neon_offsets_h_gyp,,,$(GYP_VAR_PREFIX))/gen_nsx_core_neon_offsets_h.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,lib_core_neon_offsets,,,$(GYP_VAR_PREFIX))/lib_core_neon_offsets.a \
$(call intermediates-dir-for,GYP,third_party_webrtc_modules_audio_processing_gen_aecm_core_neon_offsets_h_gyp,,,$(GYP_VAR_PREFIX))/gen_aecm_core_neon_offsets_h.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -865,12 +865,12 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_neon_gyp \
lib_core_neon_offsets \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-arm64.mk b/android_webview/libwebviewchromium.target.darwin-arm64.mk
index 017db3f2c4..f6d66750f3 100644
--- a/android_webview/libwebviewchromium.target.darwin-arm64.mk
+++ b/android_webview/libwebviewchromium.target.darwin-arm64.mk
@@ -336,10 +336,10 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -812,10 +812,10 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
- third_party_webrtc_modules_audio_processing_gyp \
- third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_voice_engine_voice_engine_gyp \
third_party_webrtc_modules_audio_conference_mixer_gyp \
+ third_party_webrtc_modules_audio_processing_gyp \
+ third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-mips.mk b/android_webview/libwebviewchromium.target.darwin-mips.mk
index 0de7f105f8..1e72dcfea6 100644
--- a/android_webview/libwebviewchromium.target.darwin-mips.mk
+++ b/android_webview/libwebviewchromium.target.darwin-mips.mk
@@ -334,10 +334,10 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -818,10 +818,10 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
- third_party_webrtc_modules_audio_processing_gyp \
- third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_voice_engine_voice_engine_gyp \
third_party_webrtc_modules_audio_conference_mixer_gyp \
+ third_party_webrtc_modules_audio_processing_gyp \
+ third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-x86.mk b/android_webview/libwebviewchromium.target.darwin-x86.mk
index 7ad018b564..d66cda1dc1 100644
--- a/android_webview/libwebviewchromium.target.darwin-x86.mk
+++ b/android_webview/libwebviewchromium.target.darwin-x86.mk
@@ -345,11 +345,11 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_sse2_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_sse2_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -847,11 +847,11 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_sse2_gyp \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-x86_64.mk b/android_webview/libwebviewchromium.target.darwin-x86_64.mk
index d3b5992c3a..e873c2f0fd 100644
--- a/android_webview/libwebviewchromium.target.darwin-x86_64.mk
+++ b/android_webview/libwebviewchromium.target.darwin-x86_64.mk
@@ -345,11 +345,11 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_sse2_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_sse2_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -845,11 +845,11 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_sse2_gyp \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-arm.mk b/android_webview/libwebviewchromium.target.linux-arm.mk
index 05354eeeb9..fff71662bf 100644
--- a/android_webview/libwebviewchromium.target.linux-arm.mk
+++ b/android_webview/libwebviewchromium.target.linux-arm.mk
@@ -345,14 +345,14 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_neon_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_neon_gyp.a \
$(call intermediates-dir-for,GYP,third_party_webrtc_modules_audio_processing_gen_nsx_core_neon_offsets_h_gyp,,,$(GYP_VAR_PREFIX))/gen_nsx_core_neon_offsets_h.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,lib_core_neon_offsets,,,$(GYP_VAR_PREFIX))/lib_core_neon_offsets.a \
$(call intermediates-dir-for,GYP,third_party_webrtc_modules_audio_processing_gen_aecm_core_neon_offsets_h_gyp,,,$(GYP_VAR_PREFIX))/gen_aecm_core_neon_offsets_h.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -865,12 +865,12 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_neon_gyp \
lib_core_neon_offsets \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-arm64.mk b/android_webview/libwebviewchromium.target.linux-arm64.mk
index 017db3f2c4..f6d66750f3 100644
--- a/android_webview/libwebviewchromium.target.linux-arm64.mk
+++ b/android_webview/libwebviewchromium.target.linux-arm64.mk
@@ -336,10 +336,10 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -812,10 +812,10 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
- third_party_webrtc_modules_audio_processing_gyp \
- third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_voice_engine_voice_engine_gyp \
third_party_webrtc_modules_audio_conference_mixer_gyp \
+ third_party_webrtc_modules_audio_processing_gyp \
+ third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-mips.mk b/android_webview/libwebviewchromium.target.linux-mips.mk
index 0de7f105f8..1e72dcfea6 100644
--- a/android_webview/libwebviewchromium.target.linux-mips.mk
+++ b/android_webview/libwebviewchromium.target.linux-mips.mk
@@ -334,10 +334,10 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -818,10 +818,10 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
- third_party_webrtc_modules_audio_processing_gyp \
- third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_voice_engine_voice_engine_gyp \
third_party_webrtc_modules_audio_conference_mixer_gyp \
+ third_party_webrtc_modules_audio_processing_gyp \
+ third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-x86.mk b/android_webview/libwebviewchromium.target.linux-x86.mk
index 7ad018b564..d66cda1dc1 100644
--- a/android_webview/libwebviewchromium.target.linux-x86.mk
+++ b/android_webview/libwebviewchromium.target.linux-x86.mk
@@ -345,11 +345,11 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_sse2_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_sse2_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -847,11 +847,11 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_sse2_gyp \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-x86_64.mk b/android_webview/libwebviewchromium.target.linux-x86_64.mk
index d3b5992c3a..e873c2f0fd 100644
--- a/android_webview/libwebviewchromium.target.linux-x86_64.mk
+++ b/android_webview/libwebviewchromium.target.linux-x86_64.mk
@@ -345,11 +345,11 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_video_render_module_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_video_render_module_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_usrsctp_usrsctplib_gyp,,,$(GYP_VAR_PREFIX))/third_party_usrsctp_usrsctplib_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_libjingle_libpeerconnection_gyp,,,$(GYP_VAR_PREFIX))/third_party_libjingle_libpeerconnection_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_processing_sse2_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_processing_sse2_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_voice_engine_voice_engine_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_voice_engine_voice_engine_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_conference_mixer_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_conference_mixer_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audio_device_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audio_device_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_bitrate_controller_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_bitrate_controller_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_rtp_rtcp_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_rtp_rtcp_gyp.a \
@@ -845,11 +845,11 @@ LOCAL_STATIC_LIBRARIES := \
third_party_webrtc_modules_video_render_module_gyp \
third_party_usrsctp_usrsctplib_gyp \
third_party_libjingle_libpeerconnection_gyp \
+ third_party_webrtc_voice_engine_voice_engine_gyp \
+ third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_processing_gyp \
third_party_webrtc_modules_audioproc_debug_proto_gyp \
third_party_webrtc_modules_audio_processing_sse2_gyp \
- third_party_webrtc_voice_engine_voice_engine_gyp \
- third_party_webrtc_modules_audio_conference_mixer_gyp \
third_party_webrtc_modules_audio_device_gyp \
third_party_webrtc_modules_bitrate_controller_gyp \
third_party_webrtc_modules_rtp_rtcp_gyp \
diff --git a/build/android/pylib/gtest/setup.py b/build/android/pylib/gtest/setup.py
index 2782859d0c..6a9e65b946 100644
--- a/build/android/pylib/gtest/setup.py
+++ b/build/android/pylib/gtest/setup.py
@@ -118,7 +118,6 @@ def _GenerateDepsDirUsingIsolate(suite_name, isolate_file_path=None):
'--config-variable', 'component', 'static_library',
'--config-variable', 'fastbuild', '0',
'--config-variable', 'icu_use_data_file_flag', '1',
- '--config-variable', 'libpeer_target_type', 'static_library',
# TODO(maruel): This may not be always true.
'--config-variable', 'target_arch', 'arm',
'--config-variable', 'use_openssl', '0',
diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE
index f546b375d9..3d80987909 100644
--- a/build/util/LASTCHANGE
+++ b/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=f2b9c18b2491
+LASTCHANGE=e3285d9d2071
diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink
index 38c6b0a3d4..c69e61a3dd 100644
--- a/build/util/LASTCHANGE.blink
+++ b/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=185006
+LASTCHANGE=185626
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc
index b2f0aae4c3..c9bc063171 100644
--- a/cc/resources/picture_pile_unittest.cc
+++ b/cc/resources/picture_pile_unittest.cc
@@ -614,11 +614,11 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
}
UpdateAndExpandInvalidation(
- &invalidation,
- grow_down_tiling_size,
+ &invalidation, grow_down_tiling_size,
CornerSinglePixelRect(corner, grow_down_tiling_size));
- // We should have lost the recordings in the bottom row.
+ // We should have lost all of the recordings in the bottom row as none of them
+ // are in the current interest rect (which is either the above or below it).
EXPECT_EQ(6, pile_->tiling().num_tiles_x());
EXPECT_EQ(8, pile_->tiling().num_tiles_y());
for (int i = 0; i < 6; ++i) {
@@ -643,11 +643,11 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
invalidation.Clear();
UpdateWholePile();
- UpdateAndExpandInvalidation(&invalidation,
- base_tiling_size,
+ UpdateAndExpandInvalidation(&invalidation, base_tiling_size,
CornerSinglePixelRect(corner, base_tiling_size));
- // We should have lost the recordings that are now outside the tiling only.
+ // When shrinking, we should have lost all the recordings in the bottom row
+ // not touching the interest rect.
EXPECT_EQ(6, pile_->tiling().num_tiles_x());
EXPECT_EQ(6, pile_->tiling().num_tiles_y());
for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
@@ -680,7 +680,7 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
// The whole bottom row of tiles (except any with the interest rect) are
// dropped.
gfx::Rect bottom_row_minus_existing_corner = gfx::UnionRects(
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5));
+ pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5));
switch (corner) {
case TOP_LEFT:
case TOP_RIGHT:
@@ -689,11 +689,11 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
break;
case BOTTOM_LEFT:
bottom_row_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(0, 5));
+ pile_->tiling().TileBounds(0, 5));
break;
case BOTTOM_RIGHT:
bottom_row_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(5, 5));
+ pile_->tiling().TileBounds(5, 5));
break;
}
@@ -703,11 +703,12 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
UpdateWholePile();
UpdateAndExpandInvalidation(
- &invalidation,
- grow_right_tiling_size,
+ &invalidation, grow_right_tiling_size,
CornerSinglePixelRect(corner, grow_right_tiling_size));
- // We should have lost the recordings in the right column.
+ // We should have lost all of the recordings in the right column as none of
+ // them are in the current interest rect (which is either entirely left or
+ // right of it).
EXPECT_EQ(8, pile_->tiling().num_tiles_x());
EXPECT_EQ(6, pile_->tiling().num_tiles_y());
for (int i = 0; i < 6; ++i) {
@@ -732,11 +733,11 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
invalidation.Clear();
UpdateWholePile();
- UpdateAndExpandInvalidation(&invalidation,
- base_tiling_size,
+ UpdateAndExpandInvalidation(&invalidation, base_tiling_size,
CornerSinglePixelRect(corner, base_tiling_size));
- // We should have lost the recordings that are now outside the tiling only.
+ // When shrinking, we should have lost all the recordings in the right column
+ // not touching the interest rect.
EXPECT_EQ(6, pile_->tiling().num_tiles_x());
EXPECT_EQ(6, pile_->tiling().num_tiles_y());
for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
@@ -771,18 +772,18 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
// The whole right column of tiles (except for ones with the interest rect)
// are dropped.
gfx::Rect right_column_minus_existing_corner = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5));
+ pile_->tiling().TileBounds(5, 0), pile_->tiling().TileBounds(5, 5));
switch (corner) {
case TOP_LEFT:
case BOTTOM_LEFT:
break;
case TOP_RIGHT:
right_column_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(5, 0));
+ pile_->tiling().TileBounds(5, 0));
break;
case BOTTOM_RIGHT:
right_column_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(5, 5));
+ pile_->tiling().TileBounds(5, 5));
break;
}
expected_invalidation.Union(right_column_minus_existing_corner);
@@ -791,8 +792,7 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
UpdateWholePile();
UpdateAndExpandInvalidation(
- &invalidation,
- grow_both_tiling_size,
+ &invalidation, grow_both_tiling_size,
CornerSinglePixelRect(corner, grow_both_tiling_size));
// We should have lost the recordings in the right column and bottom row.
@@ -826,7 +826,8 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
UpdateAndExpandInvalidation(&invalidation, base_tiling_size,
CornerSinglePixelRect(corner, base_tiling_size));
- // We should have lost the recordings that are now outside the tiling only.
+ // We should have lost the recordings in the right column and bottom row,
+ // except where it intersects the interest rect.
EXPECT_EQ(6, pile_->tiling().num_tiles_x());
EXPECT_EQ(6, pile_->tiling().num_tiles_y());
for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
@@ -869,15 +870,15 @@ TEST_P(PicturePileResizeCornerTest, ResizePileOutsideInterestRect) {
break;
case BOTTOM_LEFT:
right_column_and_bottom_row_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(0, 5));
+ pile_->tiling().TileBounds(0, 5));
break;
case TOP_RIGHT:
right_column_and_bottom_row_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(5, 0));
+ pile_->tiling().TileBounds(5, 0));
break;
case BOTTOM_RIGHT:
right_column_and_bottom_row_minus_existing_corner.Subtract(
- pile_.tiling().TileBounds(5, 5));
+ pile_->tiling().TileBounds(5, 5));
break;
}
expected_invalidation.Union(
@@ -926,33 +927,69 @@ TEST_P(PicturePileResizeCornerTest, SmallResizePileOutsideInterestRect) {
// this enum to repeat the test both ways.
enum ChangeDirection { GROW, SHRINK, LAST_DIRECTION = SHRINK };
- // We should have lost the recordings in the bottom row that do not intersect
- // the interest rect.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- bool expect_tile;
+ // Grow downward.
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) {
+ gfx::Size new_tiling_size =
+ dir == GROW ? grow_down_tiling_size : base_tiling_size;
+ UpdateWholePile();
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size,
+ CornerSinglePixelRect(corner, new_tiling_size));
+
+ // We should have lost the recordings in the bottom row that do not
+ // intersect the interest rect.
+ EXPECT_EQ(6, pile_->tiling().num_tiles_x());
+ EXPECT_EQ(6, pile_->tiling().num_tiles_y());
+ for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
+ for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
+ TestPicturePile::PictureMapKey key(i, j);
+ TestPicturePile::PictureMap& map = pile_->picture_map();
+ TestPicturePile::PictureMap::iterator it = map.find(key);
+ bool expect_tile;
+ switch (corner) {
+ case TOP_LEFT:
+ case TOP_RIGHT:
+ expect_tile = j < 5;
+ break;
+ case BOTTOM_LEFT:
+ // The interest rect in the bottom left tile means we'll record it.
+ expect_tile = j < 5 || (j == 5 && i == 0);
+ break;
+ case BOTTOM_RIGHT:
+ // The interest rect in the bottom right tile means we'll record it.
+ expect_tile = j < 5 || (j == 5 && i == 5);
+ break;
+ }
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
+ }
+ }
+
+ // We invalidated the bottom row outside the new interest rect. The tile
+ // that insects the interest rect in invalidated only on its newly
+ // exposed or previously exposed pixels.
+ if (dir == GROW) {
+ // Only calculate the expected invalidation while growing, as the tile
+ // bounds post-growing is the newly exposed / previously exposed sizes.
+ // Post-shrinking, the tile bounds are smaller, so can't be used.
switch (corner) {
case TOP_LEFT:
case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
+ pile_->tiling().TileBounds(5, 5));
break;
case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(1, 5), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(1, 5),
+ pile_->tiling().TileBounds(5, 5));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
break;
case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(0, 5), pile_.tiling().TileBounds(4, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
+ pile_->tiling().TileBounds(4, 5));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
break;
}
}
@@ -960,72 +997,66 @@ TEST_P(PicturePileResizeCornerTest, SmallResizePileOutsideInterestRect) {
invalidation.Clear();
}
- // We invalidated the bottom row outside the new interest rect. The tile that
- // insects the interest rect in invalidated only on its new pixels.
- switch (corner) {
- case TOP_LEFT:
- case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
- pile_->tiling().TileBounds(5, 5));
- break;
- case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(1, 5),
- pile_->tiling().TileBounds(5, 5));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
- break;
- case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
- pile_->tiling().TileBounds(4, 5));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
- break;
- }
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
- invalidation.Clear();
-
- UpdateWholePile();
- UpdateAndExpandInvalidation(&invalidation,
- base_tiling_size,
- CornerSinglePixelRect(corner, base_tiling_size));
-
- // We should have lost nothing.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- EXPECT_TRUE(it != map.end() && it->second.GetPicture());
+ // Grow right.
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) {
+ gfx::Size new_tiling_size =
+ dir == GROW ? grow_right_tiling_size : base_tiling_size;
+ UpdateWholePile();
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size,
+ CornerSinglePixelRect(corner, new_tiling_size));
+
+ // We should have lost the recordings in the right column.
+ EXPECT_EQ(6, pile_->tiling().num_tiles_x());
+ EXPECT_EQ(6, pile_->tiling().num_tiles_y());
+ for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
+ for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
+ TestPicturePile::PictureMapKey key(i, j);
+ TestPicturePile::PictureMap& map = pile_->picture_map();
+ TestPicturePile::PictureMap::iterator it = map.find(key);
+ bool expect_tile;
+ switch (corner) {
+ case TOP_LEFT:
+ case BOTTOM_LEFT:
+ expect_tile = i < 5;
+ break;
+ case TOP_RIGHT:
+ // The interest rect in the top right tile means we'll record it.
+ expect_tile = i < 5 || (j == 0 && i == 5);
+ break;
+ case BOTTOM_RIGHT:
+ // The interest rect in the bottom right tile means we'll record it.
+ expect_tile = i < 5 || (j == 5 && i == 5);
+ break;
+ }
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture());
+ }
}
- // We should have lost the recordings in the right column.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- bool expect_tile;
+ // We invalidated the right column outside the new interest rect. The tile
+ // that insects the interest rect in invalidated only on its new or
+ // previously exposed pixels.
+ if (dir == GROW) {
+ // Calculate the expected invalidation the first time through the loop.
switch (corner) {
case TOP_LEFT:
case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
+ pile_->tiling().TileBounds(5, 5));
break;
case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 1), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
+ pile_->tiling().TileBounds(5, 5));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
break;
case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 4));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
+ pile_->tiling().TileBounds(5, 4));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
break;
}
}
@@ -1033,160 +1064,92 @@ TEST_P(PicturePileResizeCornerTest, SmallResizePileOutsideInterestRect) {
invalidation.Clear();
}
- // We invalidated the right column outside the new interest rect. The tile
- // that insects the interest rect in invalidated only on its new pixels.
- switch (corner) {
- case TOP_LEFT:
- case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
- pile_->tiling().TileBounds(5, 5));
- break;
- case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
- pile_->tiling().TileBounds(5, 5));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
- break;
- case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
- pile_->tiling().TileBounds(5, 4));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
- break;
- }
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
- invalidation.Clear();
-
- UpdateWholePile();
- UpdateAndExpandInvalidation(&invalidation,
- base_tiling_size,
- CornerSinglePixelRect(corner, base_tiling_size));
-
- // We should have lost nothing.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- EXPECT_TRUE(it != map.end() && it->second.GetPicture());
+ // Grow both.
+ for (int dir = 0; dir <= LAST_DIRECTION; ++dir) {
+ gfx::Size new_tiling_size =
+ dir == GROW ? grow_both_tiling_size : base_tiling_size;
+ UpdateWholePile();
+ UpdateAndExpandInvalidation(&invalidation, new_tiling_size,
+ CornerSinglePixelRect(corner, new_tiling_size));
+
+ // We should have lost the recordings in the right column and bottom row.
+ // The tile that insects the interest rect in invalidated only on its new
+ // or previously exposed pixels.
+ EXPECT_EQ(6, pile_->tiling().num_tiles_x());
+ EXPECT_EQ(6, pile_->tiling().num_tiles_y());
+ for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
+ for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
+ TestPicturePile::PictureMapKey key(i, j);
+ TestPicturePile::PictureMap& map = pile_->picture_map();
+ TestPicturePile::PictureMap::iterator it = map.find(key);
+ bool expect_tile;
+ switch (corner) {
+ case TOP_LEFT:
+ expect_tile = i < 5 && j < 5;
+ break;
+ case TOP_RIGHT:
+ // The interest rect in the top right tile means we'll record it.
+ expect_tile = (i < 5 && j < 5) || (j == 0 && i == 5);
+ break;
+ case BOTTOM_LEFT:
+ // The interest rect in the bottom left tile means we'll record it.
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 0);
+ break;
+ case BOTTOM_RIGHT:
+ // The interest rect in the bottom right tile means we'll record it.
+ expect_tile = (i < 5 && j < 5) || (j == 5 && i == 5);
+ break;
+ }
+ EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture())
+ << i << "," << j;
+ }
}
- // We invalidated nothing.
- expected_invalidation.Clear();
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
- invalidation.Clear();
-
- UpdateWholePile();
- UpdateAndExpandInvalidation(
- &invalidation,
- grow_both_tiling_size,
- CornerSinglePixelRect(corner, grow_both_tiling_size));
-
- // We should have lost the recordings in the right column and bottom row. The
- // tile that insects the interest rect in invalidated only on its new pixels.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- bool expect_tile;
+ // We invalidated the right column and the bottom row outside the new
+ // interest rect. The tile that insects the interest rect in invalidated
+ // only on its new or previous exposed pixels.
+ if (dir == GROW) {
+ // Calculate the expected invalidation the first time through the loop.
switch (corner) {
case TOP_LEFT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
+ pile_->tiling().TileBounds(5, 5));
expected_invalidation.Union(
- gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
- pile_.tiling().TileBounds(5, 5)));
+ gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
+ pile_->tiling().TileBounds(5, 5)));
break;
case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 1), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
+ pile_->tiling().TileBounds(5, 5));
expected_invalidation.Union(
- gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
- pile_.tiling().TileBounds(5, 5)));
+ gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
+ pile_->tiling().TileBounds(5, 5)));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
break;
case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 5));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
+ pile_->tiling().TileBounds(5, 5));
expected_invalidation.Union(
- gfx::UnionRects(pile_.tiling().TileBounds(1, 5),
- pile_.tiling().TileBounds(5, 5)));
+ gfx::UnionRects(pile_->tiling().TileBounds(1, 5),
+ pile_->tiling().TileBounds(5, 5)));
expected_invalidation.Union(SubtractRects(
- pile_.tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
break;
case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(
- pile_.tiling().TileBounds(5, 0), pile_.tiling().TileBounds(5, 4));
+ expected_invalidation =
+ gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
+ pile_->tiling().TileBounds(5, 4));
expected_invalidation.Union(
- gfx::UnionRects(pile_.tiling().TileBounds(0, 5),
- pile_.tiling().TileBounds(4, 5)));
+ gfx::UnionRects(pile_->tiling().TileBounds(0, 5),
+ pile_->tiling().TileBounds(4, 5)));
expected_invalidation.Union(SubtractRegions(
- pile_.tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
+ pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
break;
}
- EXPECT_EQ(expect_tile, it != map.end() && it->second.GetPicture())
- << i << "," << j;
- }
- }
-
- // We invalidated the right column and the bottom row outside the new interest
- // rect. The tile that insects the interest rect in invalidated only on its
- // new pixels.
- switch (corner) {
- case TOP_LEFT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
- pile_->tiling().TileBounds(5, 5));
- expected_invalidation.Union(gfx::UnionRects(
- pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5)));
- break;
- case TOP_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 1),
- pile_->tiling().TileBounds(5, 5));
- expected_invalidation.Union(gfx::UnionRects(
- pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(5, 5)));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(5, 0), gfx::Rect(base_tiling_size)));
- break;
- case BOTTOM_LEFT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
- pile_->tiling().TileBounds(5, 5));
- expected_invalidation.Union(gfx::UnionRects(
- pile_->tiling().TileBounds(1, 5), pile_->tiling().TileBounds(5, 5)));
- expected_invalidation.Union(SubtractRects(
- pile_->tiling().TileBounds(0, 5), gfx::Rect(base_tiling_size)));
- break;
- case BOTTOM_RIGHT:
- expected_invalidation = gfx::UnionRects(pile_->tiling().TileBounds(5, 0),
- pile_->tiling().TileBounds(5, 4));
- expected_invalidation.Union(gfx::UnionRects(
- pile_->tiling().TileBounds(0, 5), pile_->tiling().TileBounds(4, 5)));
- expected_invalidation.Union(SubtractRegions(
- pile_->tiling().TileBounds(5, 5), gfx::Rect(base_tiling_size)));
- break;
- }
- EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
- invalidation.Clear();
-
- UpdateWholePile();
- UpdateAndExpandInvalidation(&invalidation,
- base_tiling_size,
- CornerSinglePixelRect(corner, base_tiling_size));
-
- // We should have lost nothing.
- EXPECT_EQ(6, pile_->tiling().num_tiles_x());
- EXPECT_EQ(6, pile_->tiling().num_tiles_y());
- for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
- for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
- TestPicturePile::PictureMapKey key(i, j);
- TestPicturePile::PictureMap& map = pile_->picture_map();
- TestPicturePile::PictureMap::iterator it = map.find(key);
- EXPECT_TRUE(it != map.end() && it->second.GetPicture());
}
EXPECT_EQ(expected_invalidation.ToString(), invalidation.ToString());
invalidation.Clear();
diff --git a/chrome/VERSION b/chrome/VERSION
index 65b94c3a53..cee52cba9f 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
MAJOR=39
MINOR=0
BUILD=2171
-PATCH=59
+PATCH=90
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index d9a1040ed7..aa72d53f1e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -13569,6 +13569,9 @@ After you create a new supervised user, you can manage their settings at any tim
<message name="IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT" desc="Text to display in the password field for user pod when no password has been entered.">
Enter password
</message>
+ <message name="IDS_LOGIN_POD_SIGNING_IN" desc="Text to display at the bottom of a user pod during signing in the user. The translation should be as short as possible because of limited UI space.">
+ Signing in
+ </message>
<message name="IDS_LOGIN_POD_PASSWORD_FIELD_ACCESSIBLE_NAME" desc="Text to be spoken when the focus is set to the password field of a user pod on the sign-in screen.">
Password for <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph>
</message>
@@ -14560,11 +14563,35 @@ Do you accept?
</message>
<!-- Strings for notification shown when the Chromebook is added to Easy Unlock -->
<message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE" desc="Title for notification shown when this Chromebook is added to Easy Unlock as an additional Easy Unlock device.">
- Smart Lock is now enabled
+ Smart Lock is almost ready
</message>
<message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE" desc="Message for the notification shown when this Chromebook is added to Easy Unlock as an additional Easy Unlock device.">
- Your phone can unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>, too.
+ It will be activated next time you unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. With Smart Lock, your phone will unlock this device&#8212;without a password. Bluetooth will be turned on to enable Smart Lock.
+ </message>
+ <message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_ABOUT_BUTTON" desc="Label of a button on the new chrome notification to bring user to smart lock settings.">
+ About Smart Lock
+ </message>
+ <!-- Strings for the phone changed (aka old Chromebook setup) notification -->
+ <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_TITLE" desc="Title for notification shown when the paired phone is changed.">
+ Smart Lock phone changed
</message>
+ <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_MESSAGE" desc="Message for notification shown when the paired phone is changed.">
+ Next time you unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>, Smart Lock will update and you can just click your picture to enter.
+ </message>
+ <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_UPDATE_BUTTON" desc="Label of a button on the notification shown when the paired phone is changed to update Smart lock now.">
+ Update now
+ </message>
+ <message name="IDS_EASY_UNLOCK_NOTIFICATION_LEARN_MORE_BUTTON" desc="Label of a button on the notification to show Smart lock settings.">
+ Learn more
+ </message>
+ <!-- Strings for the phone change applied notification -->
+ <message name="IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_TITLE" desc="Title for notification shown when the pairing change is applied.">
+ Phone change updated
+ </message>
+ <message name="IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_MESSAGE" desc="Message for notification shown when the pairing change is applied.">
+ Your <ph name="PHONE_NAME">$1<ex>Moto X</ex></ph> can now unlock this <ph name="DEVICE_TYPE">$2<ex>Chromebook</ex></ph> too.
+ </message>
+
<!-- Strings for the Easy Unlock setup dialog -->
<!-- Step 1: Intro -->
<message name="IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE" desc="The text to show as the header title of the Easy Unlock dialog during the first, introductory step.">
@@ -14672,7 +14699,10 @@ Do you accept?
Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> has been manually locked. You'll need to enter your password to unlock it.
</message>
<message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_CHANGED" desc="Tooltip text shown on a user's lock screen pod when Easy Unlock feature is enabled for the user, but the pairing data is changed. A password has to be entered to unlock the device.">
- One-time activation: Type your password to activate Chrome Smart Lock. Next time, you can just click your picture.
+ Your phone for Smart Lock changed. Type your password to update Smart Lock on this device. Next time, you can just click your picture to enter.
+ </message>
+ <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_ADDED" desc="Tooltip text shown on a user's lock screen pod when Easy Unlock pairing data is synced on a new Chromebook.">
+ One-time activation: Type your password to activate Smart Lock. With Smart Lock, your phone will unlock this Chromebook&#8212;without a password. To change or disable this feature, visit your Chromebook's settings.
</message>
<message name="IDS_SMART_LOCK_SCREENLOCK_TOOLTIP_HARDLOCK_REAUTH_USER" desc="Tooltip text shown on a user's lock screen pod to reauthenticate the user before setting up Smart Lock. A password has to be entered to unlock the device.">
To set up Chrome Smart Lock, Google needs to make sure it's you--type your password to get started.
diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc
index 6031f00267..10a73f212b 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.cc
+++ b/chrome/browser/android/provider/chrome_browser_provider.cc
@@ -649,10 +649,12 @@ class AsyncServiceRequest : protected BlockingUIThreadAsyncRequest {
// Base class for all asynchronous blocking tasks that use the favicon service.
class FaviconServiceTask : public AsyncServiceRequest<FaviconService> {
public:
- FaviconServiceTask(FaviconService* service,
- base::CancelableTaskTracker* cancelable_tracker,
+ FaviconServiceTask(base::CancelableTaskTracker* cancelable_tracker,
Profile* profile)
- : AsyncServiceRequest<FaviconService>(service, cancelable_tracker),
+ : AsyncServiceRequest<FaviconService>(
+ FaviconServiceFactory::GetForProfile(profile,
+ Profile::EXPLICIT_ACCESS),
+ cancelable_tracker),
profile_(profile) {}
Profile* profile() const { return profile_; }
@@ -666,15 +668,18 @@ class FaviconServiceTask : public AsyncServiceRequest<FaviconService> {
// Retrieves the favicon or touch icon for a URL from the FaviconService.
class BookmarkIconFetchTask : public FaviconServiceTask {
public:
- BookmarkIconFetchTask(FaviconService* favicon_service,
- base::CancelableTaskTracker* cancelable_tracker,
+ BookmarkIconFetchTask(base::CancelableTaskTracker* cancelable_tracker,
Profile* profile)
- : FaviconServiceTask(favicon_service, cancelable_tracker, profile) {}
+ : FaviconServiceTask(cancelable_tracker, profile) {}
favicon_base::FaviconRawBitmapResult Run(const GURL& url) {
float max_scale = ui::GetScaleForScaleFactor(
ResourceBundle::GetSharedInstance().GetMaxScaleFactor());
int desired_size_in_pixel = std::ceil(gfx::kFaviconSize * max_scale);
+
+ if (service() == NULL)
+ return favicon_base::FaviconRawBitmapResult();
+
RunAsyncRequestOnUIThreadBlocking(
base::Bind(&FaviconService::GetRawFaviconForPageURL,
base::Unretained(service()),
@@ -1160,8 +1165,6 @@ ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj)
bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_);
top_sites_ = profile_->GetTopSites();
service_.reset(new AndroidHistoryProviderService(profile_));
- favicon_service_.reset(FaviconServiceFactory::GetForProfile(profile_,
- Profile::EXPLICIT_ACCESS));
// Registers the notifications we are interested.
bookmark_model_->AddObserver(this);
@@ -1298,10 +1301,16 @@ ScopedJavaLocalRef<jobject> ChromeBrowserProvider::QueryBookmarkFromAPI(
if (!statement)
return ScopedJavaLocalRef<jobject>();
+ FaviconService* favicon_service = FaviconServiceFactory::GetForProfile(
+ profile_, Profile::EXPLICIT_ACCESS);
+
+ if (!favicon_service)
+ return ScopedJavaLocalRef<jobject>();
+
// Creates and returns org.chromium.chrome.browser.database.SQLiteCursor
// Java object.
return SQLiteCursor::NewJavaSqliteCursor(env, columns_name, statement,
- service_.get(), favicon_service_.get());
+ service_.get(), favicon_service);
}
// Updates the bookmarks with the given column values. The value is not given if
@@ -1434,10 +1443,17 @@ ScopedJavaLocalRef<jobject> ChromeBrowserProvider::QuerySearchTermFromAPI(
query_columns, where_clause, where_args, sort_clause);
if (!statement)
return ScopedJavaLocalRef<jobject>();
+
+ FaviconService* favicon_service = FaviconServiceFactory::GetForProfile(
+ profile_, Profile::EXPLICIT_ACCESS);
+
+ if (!favicon_service)
+ return ScopedJavaLocalRef<jobject>();
+
// Creates and returns org.chromium.chrome.browser.database.SQLiteCursor
// Java object.
return SQLiteCursor::NewJavaSqliteCursor(env, columns_name, statement,
- service_.get(), favicon_service_.get());
+ service_.get(), favicon_service);
}
// Updates the search terms with the given column values. The value is not
@@ -1548,8 +1564,7 @@ ScopedJavaLocalRef<jbyteArray> ChromeBrowserProvider::GetFaviconOrTouchIcon(
return ScopedJavaLocalRef<jbyteArray>();
GURL url = GURL(ConvertJavaStringToUTF16(env, jurl));
- BookmarkIconFetchTask favicon_task(
- favicon_service_.get(), &cancelable_task_tracker_, profile_);
+ BookmarkIconFetchTask favicon_task(&cancelable_task_tracker_, profile_);
favicon_base::FaviconRawBitmapResult bitmap_result = favicon_task.Run(url);
if (!bitmap_result.is_valid() || !bitmap_result.bitmap_data.get())
diff --git a/chrome/browser/android/provider/chrome_browser_provider.h b/chrome/browser/android/provider/chrome_browser_provider.h
index bb430e091c..d36ed99f3d 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.h
+++ b/chrome/browser/android/provider/chrome_browser_provider.h
@@ -191,7 +191,6 @@ class ChromeBrowserProvider : public BaseBookmarkModelObserver,
history::TopSites* top_sites_;
scoped_ptr<AndroidHistoryProviderService> service_;
- scoped_ptr<FaviconService> favicon_service_;
base::CancelableTaskTracker cancelable_task_tracker_;
diff --git a/chrome/browser/component_updater/recovery_component_installer.cc b/chrome/browser/component_updater/recovery_component_installer.cc
index de998cf38b..5c6056fc23 100644
--- a/chrome/browser/component_updater/recovery_component_installer.cc
+++ b/chrome/browser/component_updater/recovery_component_installer.cc
@@ -120,6 +120,11 @@ bool RecoveryComponentInstaller::Install(const base::DictionaryValue& manifest,
base::FilePath path;
if (!PathService::Get(DIR_RECOVERY_BASE, &path))
return false;
+ if (!base::PathExists(path)) {
+ if (!base::CreateDirectory(path)) {
+ return false;
+ }
+ }
path = path.AppendASCII(version.GetString());
if (base::PathExists(path) && !base::DeleteFile(path, true))
return false;
diff --git a/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.cc b/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.cc
index 52027a1a47..fb00590e4c 100644
--- a/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.cc
+++ b/chrome/browser/extensions/api/easy_unlock_private/easy_unlock_private_api.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
#include "chrome/browser/signin/easy_unlock_service.h"
+#include "chrome/browser/signin/screenlock_bridge.h"
#include "chrome/common/extensions/api/easy_unlock_private.h"
#include "chrome/grit/generated_resources.h"
#include "components/proximity_auth/bluetooth_util.h"
@@ -114,6 +115,7 @@ bool EasyUnlockPrivateGetStringsFunction::RunSync() {
strings->SetString(
"learnMoreLinkTitle",
l10n_util::GetStringUTF16(IDS_EASY_UNLOCK_LEARN_MORE_LINK_TITLE));
+ strings->SetString("deviceType", device_type);
// Setup notification strings.
strings->SetString(
@@ -144,10 +146,46 @@ bool EasyUnlockPrivateGetStringsFunction::RunSync() {
l10n_util::GetStringUTF16(
IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE));
strings->SetString(
- "chromebookAddedNotificationMessage",
- l10n_util::GetStringFUTF16(
+ "chromebookAddedNotificationMessage",
+ l10n_util::GetStringFUTF16(
IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE,
device_type));
+ strings->SetString(
+ "chromebookAddedNotificationAboutButton",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_ABOUT_BUTTON));
+
+ // Shared "Learn more" button for the pairing changed and pairing change
+ // applied notification.
+ strings->SetString(
+ "phoneChangedNotificationLearnMoreButton",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_NOTIFICATION_LEARN_MORE_BUTTON));
+
+ // Pairing changed notification strings.
+ strings->SetString(
+ "phoneChangedNotificationTitle",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_TITLE));
+ strings->SetString(
+ "phoneChangedNotificationMessage",
+ l10n_util::GetStringFUTF16(
+ IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_MESSAGE,
+ device_type));
+ strings->SetString(
+ "phoneChangedNotificationUpdateButton",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_UPDATE_BUTTON));
+
+ // Phone change applied notification strings.
+ strings->SetString(
+ "phoneChangeAppliedNotificationTitle",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_TITLE));
+ strings->SetString(
+ "phoneChangeAppliedNotificationMessage",
+ l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_MESSAGE));
// Setup dialog strings.
// Step 1: Intro.
diff --git a/chrome/browser/extensions/api/screenlock_private/screenlock_private_api.cc b/chrome/browser/extensions/api/screenlock_private/screenlock_private_api.cc
index dca37d5fd5..ef782295e0 100644
--- a/chrome/browser/extensions/api/screenlock_private/screenlock_private_api.cc
+++ b/chrome/browser/extensions/api/screenlock_private/screenlock_private_api.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/signin/easy_unlock_service.h"
#include "chrome/common/extensions/api/screenlock_private.h"
#include "chrome/common/extensions/extension_constants.h"
+#include "extensions/browser/app_window/app_window_registry.h"
#include "extensions/browser/event_router.h"
namespace screenlock = extensions::api::screenlock_private;
@@ -63,7 +64,10 @@ bool ScreenlockPrivateSetLockedFunction::RunAsync() {
screenlock::SetLocked::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
if (params->locked) {
- if (extension()->id() == extension_misc::kEasyUnlockAppId) {
+ if (extension()->id() == extension_misc::kEasyUnlockAppId &&
+ AppWindowRegistry::Get(browser_context())
+ ->GetAppWindowForAppAndKey(extension()->id(),
+ "easy_unlock_pairing")) {
// Mark the Easy Unlock behaviour on the lock screen as the one initiated
// by the Easy Unlock setup app as a trial one.
// TODO(tbarzic): Move this logic to a new easyUnlockPrivate function.
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
index 3d38e4f55d..9551132877 100644
--- a/chrome/browser/extensions/extension_tab_util.cc
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -94,12 +94,11 @@ Browser* CreateBrowser(ChromeUIThreadExtensionFunction* function,
int window_id,
std::string* error) {
content::WebContents* web_contents = function->GetAssociatedWebContents();
- DCHECK(web_contents);
- DCHECK(web_contents->GetNativeView());
- DCHECK(!chrome::FindBrowserWithWebContents(web_contents));
-
chrome::HostDesktopType desktop_type =
- chrome::GetHostDesktopTypeForNativeView(web_contents->GetNativeView());
+ web_contents && web_contents->GetNativeView()
+ ? chrome::GetHostDesktopTypeForNativeView(
+ web_contents->GetNativeView())
+ : chrome::GetHostDesktopTypeForNativeView(NULL);
Browser::CreateParams params(
Browser::TYPE_TABBED, function->GetProfile(), desktop_type);
Browser* browser = new Browser(params);
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.cc b/chrome/browser/extensions/extension_uninstall_dialog.cc
index b75ab73e8a..30c52d50ff 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.cc
+++ b/chrome/browser/extensions/extension_uninstall_dialog.cc
@@ -39,10 +39,8 @@ SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) {
ExtensionUninstallDialog::ExtensionUninstallDialog(
Profile* profile,
- gfx::NativeWindow parent,
ExtensionUninstallDialog::Delegate* delegate)
: profile_(profile),
- parent_(parent),
delegate_(delegate),
extension_(NULL),
triggering_extension_(NULL),
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.h b/chrome/browser/extensions/extension_uninstall_dialog.h
index 33e6c3b106..85e9811e17 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.h
+++ b/chrome/browser/extensions/extension_uninstall_dialog.h
@@ -63,17 +63,11 @@ class ExtensionUninstallDialog
protected:
// Constructor used by the derived classes.
- ExtensionUninstallDialog(Profile* profile,
- gfx::NativeWindow parent,
- Delegate* delegate);
+ ExtensionUninstallDialog(Profile* profile, Delegate* delegate);
// TODO(sashab): Remove protected members: crbug.com/397395
Profile* const profile_;
- // TODO(sashab): Investigate lifetime issue of this window variable:
- // crbug.com/397396
- gfx::NativeWindow parent_;
-
// The delegate we will call Accepted/Canceled on after confirmation dialog.
Delegate* delegate_;
diff --git a/chrome/browser/plugins/plugin_info_message_filter.cc b/chrome/browser/plugins/plugin_info_message_filter.cc
index d5b4ab33e3..38882c95d2 100644
--- a/chrome/browser/plugins/plugin_info_message_filter.cc
+++ b/chrome/browser/plugins/plugin_info_message_filter.cc
@@ -9,6 +9,8 @@
#include "base/metrics/histogram.h"
#include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/thread_task_runner_handle.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/content_settings_utils.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/plugins/chrome_plugin_service_filter.h"
@@ -16,12 +18,16 @@
#include "chrome/browser/plugins/plugin_metadata.h"
#include "chrome/browser/plugins/plugin_prefs.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_otr_state.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/render_messages.h"
#include "components/content_settings/core/common/content_settings.h"
+#include "components/rappor/rappor_service.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/plugin_service.h"
#include "content/public/browser/plugin_service_filter.h"
+#include "content/public/common/content_constants.h"
+#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "url/gurl.h"
#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
@@ -90,6 +96,41 @@ static void SendPluginAvailabilityUMA(const std::string& mime_type,
#endif // defined(ENABLE_PEPPER_CDMS)
+// Report usage metrics for Silverlight and Flash plugin instantiations to the
+// RAPPOR service.
+void ReportMetrics(const std::string& mime_type,
+ const GURL& url,
+ const GURL& origin_url) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ if (chrome::IsOffTheRecordSessionActive())
+ return;
+ rappor::RapporService* rappor_service = g_browser_process->rappor_service();
+ if (!rappor_service)
+ return;
+
+ if (StartsWithASCII(mime_type, content::kSilverlightPluginMimeTypePrefix,
+ false)) {
+ rappor_service->RecordSample(
+ "Plugins.SilverlightOriginUrl", rappor::ETLD_PLUS_ONE_RAPPOR_TYPE,
+ net::registry_controlled_domains::GetDomainAndRegistry(
+ origin_url,
+ net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES));
+ } else if (mime_type == content::kFlashPluginSwfMimeType ||
+ mime_type == content::kFlashPluginSplMimeType) {
+ rappor_service->RecordSample(
+ "Plugins.FlashOriginUrl", rappor::ETLD_PLUS_ONE_RAPPOR_TYPE,
+ net::registry_controlled_domains::GetDomainAndRegistry(
+ origin_url,
+ net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES));
+ rappor_service->RecordSample(
+ "Plugins.FlashUrl", rappor::ETLD_PLUS_ONE_RAPPOR_TYPE,
+ net::registry_controlled_domains::GetDomainAndRegistry(
+ url,
+ net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES));
+ }
+}
+
} // namespace
PluginInfoMessageFilter::Context::Context(int render_process_id,
@@ -113,12 +154,12 @@ PluginInfoMessageFilter::Context::Context(int render_process_id,
PluginInfoMessageFilter::Context::~Context() {
}
-PluginInfoMessageFilter::PluginInfoMessageFilter(
- int render_process_id,
- Profile* profile)
+PluginInfoMessageFilter::PluginInfoMessageFilter(int render_process_id,
+ Profile* profile)
: BrowserMessageFilter(ChromeMsgStart),
context_(render_process_id, profile),
- weak_ptr_factory_(this) {
+ weak_ptr_factory_(this),
+ main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
}
bool PluginInfoMessageFilter::OnMessageReceived(const IPC::Message& message) {
@@ -195,6 +236,12 @@ void PluginInfoMessageFilter::PluginsLoaded(
ChromeViewHostMsg_GetPluginInfo::WriteReplyParams(reply_msg, output);
Send(reply_msg);
+ if (output.status.value !=
+ ChromeViewHostMsg_GetPluginInfo_Status::kNotFound) {
+ main_thread_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&ReportMetrics, output.actual_mime_type,
+ params.url, params.top_origin_url));
+ }
}
#if defined(ENABLE_PEPPER_CDMS)
diff --git a/chrome/browser/plugins/plugin_info_message_filter.h b/chrome/browser/plugins/plugin_info_message_filter.h
index cc577c6015..4cc383893d 100644
--- a/chrome/browser/plugins/plugin_info_message_filter.h
+++ b/chrome/browser/plugins/plugin_info_message_filter.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/prefs/pref_member.h"
#include "base/sequenced_task_runner_helpers.h"
@@ -118,6 +119,7 @@ class PluginInfoMessageFilter : public content::BrowserMessageFilter {
Context context_;
base::WeakPtrFactory<PluginInfoMessageFilter> weak_ptr_factory_;
+ scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
DISALLOW_COPY_AND_ASSIGN(PluginInfoMessageFilter);
};
diff --git a/chrome/browser/resources/plugin_metadata/plugins_win.json b/chrome/browser/resources/plugin_metadata/plugins_win.json
index 6ba595e1d9..28853b4755 100644
--- a/chrome/browser/resources/plugin_metadata/plugins_win.json
+++ b/chrome/browser/resources/plugin_metadata/plugins_win.json
@@ -1,5 +1,5 @@
{
- "x-version": 13,
+ "x-version": 14,
"google-talk": {
"mime_types": [
],
@@ -137,9 +137,9 @@
],
"versions": [
{
- "version": "11.1.102",
+ "version": "15.0.0.189",
"status": "up_to_date",
- "reference": "http://www.adobe.com/support/security/bulletins/apsb12-03.html"
+ "reference": "http://helpx.adobe.com/security/products/flash-player/apsb14-22.html"
}
],
"lang": "en-US",
@@ -177,18 +177,18 @@
],
"versions": [
{
- "version": "10.1.11",
+ "version": "10.1.12",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/reader/apsb14-19.html"
+ "reference": "https://helpx.adobe.com/security/products/reader/apsb14-20.html"
},
{
"version": "11",
"status": "out_of_date"
},
{
- "version": "11.0.8",
+ "version": "11.0.9",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/reader/apsb14-19.html"
+ "reference": "https://helpx.adobe.com/security/products/reader/apsb14-20.html"
}
],
"lang": "en-US",
@@ -252,8 +252,9 @@
],
"versions": [
{
- "version": "7.6.9",
- "status": "requires_authorization"
+ "version": "7.7.5",
+ "status": "requires_authorization",
+ "reference": "http://support.apple.com/kb/HT6151"
}
],
"lang": "en-US",
@@ -296,9 +297,9 @@
],
"versions": [
{
- "version": "5.1.20125.0",
+ "version": "5.1.30214.0",
"status": "up_to_date",
- "reference": "https://support.microsoft.com/kb/2814124"
+ "reference": "https://support.microsoft.com/kb/2932677"
}
],
"lang": "en-US",
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc b/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
index df39b96d1a..75f3ffc82c 100644
--- a/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler.cc
@@ -198,8 +198,13 @@ void EasyUnlockScreenlockStateHandler::ShowHardlockUI() {
if (!screenlock_bridge_->IsLocked())
return;
- if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
- ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
+ // Do not override online signin.
+ const ScreenlockBridge::LockHandler::AuthType existing_auth_type =
+ screenlock_bridge_->lock_handler()->GetAuthType(user_email_);
+ if (existing_auth_type == ScreenlockBridge::LockHandler::ONLINE_SIGN_IN)
+ return;
+
+ if (existing_auth_type != ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
screenlock_bridge_->lock_handler()->SetAuthType(
user_email_,
ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
@@ -227,6 +232,9 @@ void EasyUnlockScreenlockStateHandler::ShowHardlockUI() {
} else if (hardlock_state_ == PAIRING_CHANGED) {
tooltip = l10n_util::GetStringUTF16(
IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_CHANGED);
+ } else if (hardlock_state_ == PAIRING_ADDED) {
+ tooltip = l10n_util::GetStringUTF16(
+ IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_ADDED);
} else {
LOG(ERROR) << "Unknown hardlock state " << hardlock_state_;
}
@@ -284,17 +292,22 @@ void EasyUnlockScreenlockStateHandler::UpdateScreenlockAuthType() {
if (!is_trial_run_ && hardlock_state_ != NO_HARDLOCK)
return;
+ // Do not override online signin.
+ const ScreenlockBridge::LockHandler::AuthType existing_auth_type =
+ screenlock_bridge_->lock_handler()->GetAuthType(user_email_);
+ if (existing_auth_type == ScreenlockBridge::LockHandler::ONLINE_SIGN_IN)
+ return;
+
if (state_ == STATE_AUTHENTICATED) {
- if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
- ScreenlockBridge::LockHandler::USER_CLICK) {
+ if (existing_auth_type != ScreenlockBridge::LockHandler::USER_CLICK) {
screenlock_bridge_->lock_handler()->SetAuthType(
user_email_,
ScreenlockBridge::LockHandler::USER_CLICK,
l10n_util::GetStringUTF16(
IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE));
}
- } else if (screenlock_bridge_->lock_handler()->GetAuthType(user_email_) !=
- ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
+ } else if (existing_auth_type !=
+ ScreenlockBridge::LockHandler::OFFLINE_PASSWORD) {
screenlock_bridge_->lock_handler()->SetAuthType(
user_email_,
ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler.h b/chrome/browser/signin/easy_unlock_screenlock_state_handler.h
index 3a37592294..3fe1f6d54d 100644
--- a/chrome/browser/signin/easy_unlock_screenlock_state_handler.h
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler.h
@@ -50,7 +50,11 @@ class EasyUnlockScreenlockStateHandler : public ScreenlockBridge::Observer {
NO_HARDLOCK = 0, // Hard lock is not enforced. This is default.
USER_HARDLOCK = 1 << 0, // Hard lock is requested by user.
PAIRING_CHANGED = 1 << 1, // Hard lock because pairing data is changed.
- NO_PAIRING = 1 << 2 // Hard lock because there is no pairing data.
+ NO_PAIRING = 1 << 2, // Hard lock because there is no pairing data.
+ LOGIN_FAILED = 1 << 3, // Transient hard lock caused by login attempt
+ // failure. Reset when screen is unlocked.
+ PAIRING_ADDED = 1 << 4, // Similar to PAIRING_CHANGED when it happens
+ // on a new Chromebook.
};
// |user_email|: The email for the user associated with the profile to which
diff --git a/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
index 2a36890b35..4758b09cae 100644
--- a/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
+++ b/chrome/browser/signin/easy_unlock_screenlock_state_handler_unittest.cc
@@ -747,4 +747,42 @@ TEST_F(EasyUnlockScreenlockStateHandlerTest, HardlockStatePersistsOverUnlocks) {
lock_handler_->GetAuthType(user_email_));
}
+TEST_F(EasyUnlockScreenlockStateHandlerTest, NoOverrideOnlineSignin) {
+ lock_handler_->SetAuthType(user_email_,
+ ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+ base::string16());
+
+ std::vector<EasyUnlockScreenlockStateHandler::State> states;
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
+ states.push_back(
+ EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
+ states.push_back(EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
+
+ for (size_t i = 0; i < states.size(); ++i) {
+ state_handler_->ChangeState(states[i]);
+ EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+ lock_handler_->GetAuthType(user_email_));
+ }
+
+ std::vector<EasyUnlockScreenlockStateHandler::HardlockState> hardlock_states;
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_HARDLOCK);
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_ADDED);
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_PAIRING);
+ hardlock_states.push_back(EasyUnlockScreenlockStateHandler::LOGIN_FAILED);
+
+ for (size_t i = 0; i < hardlock_states.size(); ++i) {
+ state_handler_->SetHardlockState(hardlock_states[i]);
+ EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
+ lock_handler_->GetAuthType(user_email_));
+ }
+}
+
} // namespace
diff --git a/chrome/browser/signin/easy_unlock_service.cc b/chrome/browser/signin/easy_unlock_service.cc
index ccfcdbb6e6..ff78226dc0 100644
--- a/chrome/browser/signin/easy_unlock_service.cc
+++ b/chrome/browser/signin/easy_unlock_service.cc
@@ -267,28 +267,50 @@ void EasyUnlockService::SetHardlockState(
EasyUnlockScreenlockStateHandler::HardlockState
EasyUnlockService::GetHardlockState() const {
+ EasyUnlockScreenlockStateHandler::HardlockState state;
+ if (GetPersistedHardlockState(&state))
+ return state;
+
+ return EasyUnlockScreenlockStateHandler::NO_HARDLOCK;
+}
+
+bool EasyUnlockService::GetPersistedHardlockState(
+ EasyUnlockScreenlockStateHandler::HardlockState* state) const {
std::string user_id = GetUserEmail();
if (user_id.empty())
- return EasyUnlockScreenlockStateHandler::NO_HARDLOCK;
+ return false;
PrefService* local_state = GetLocalState();
if (!local_state)
- return EasyUnlockScreenlockStateHandler::NO_HARDLOCK;
+ return false;
const base::DictionaryValue* dict =
local_state->GetDictionary(prefs::kEasyUnlockHardlockState);
- int state;
- if (!dict || !dict->GetIntegerWithoutPathExpansion(user_id, &state))
- return EasyUnlockScreenlockStateHandler::NO_HARDLOCK;
+ int state_int;
+ if (dict && dict->GetIntegerWithoutPathExpansion(user_id, &state_int)) {
+ *state =
+ static_cast<EasyUnlockScreenlockStateHandler::HardlockState>(state_int);
+ return true;
+ }
- return static_cast<EasyUnlockScreenlockStateHandler::HardlockState>(state);
+ return false;
}
-void EasyUnlockService::MaybeShowHardlockUI() {
- if (GetHardlockState() == EasyUnlockScreenlockStateHandler::NO_HARDLOCK)
+void EasyUnlockService::ShowInitialUserState() {
+ EasyUnlockScreenlockStateHandler::HardlockState state;
+ bool has_persisted_state = GetPersistedHardlockState(&state);
+ if (!has_persisted_state)
return;
- if (GetScreenlockStateHandler())
+
+ GetScreenlockStateHandler();
+
+ if (state == EasyUnlockScreenlockStateHandler::NO_HARDLOCK) {
+ // Show connecting icon early when there is a persisted non hardlock state.
+ UpdateScreenlockState(
+ EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
+ } else {
screenlock_state_handler_->MaybeShowHardlockUI();
+ }
}
EasyUnlockScreenlockStateHandler*
@@ -363,8 +385,10 @@ void EasyUnlockService::CheckCryptohomeKeysAndMaybeHardlock() {
}
// No need to compare if a change is already recorded.
- if (GetHardlockState() == EasyUnlockScreenlockStateHandler::PAIRING_CHANGED)
+ if (GetHardlockState() == EasyUnlockScreenlockStateHandler::PAIRING_CHANGED ||
+ GetHardlockState() == EasyUnlockScreenlockStateHandler::PAIRING_ADDED) {
return;
+ }
chromeos::EasyUnlockKeyManager* key_manager =
chromeos::UserSessionManager::GetInstance()->GetEasyUnlockKeyManager();
@@ -594,8 +618,11 @@ void EasyUnlockService::OnCryptohomeKeysFetchedForChecking(
if (paired_devices != devices_in_cryptohome ||
GetHardlockState() == EasyUnlockScreenlockStateHandler::NO_PAIRING) {
- SetHardlockStateForUser(user_id,
- EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
+ SetHardlockStateForUser(
+ user_id,
+ devices_in_cryptohome.empty()
+ ? EasyUnlockScreenlockStateHandler::PAIRING_ADDED
+ : EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
}
}
#endif
diff --git a/chrome/browser/signin/easy_unlock_service.h b/chrome/browser/signin/easy_unlock_service.h
index 48891e6f34..759fb461af 100644
--- a/chrome/browser/signin/easy_unlock_service.h
+++ b/chrome/browser/signin/easy_unlock_service.h
@@ -125,9 +125,15 @@ class EasyUnlockService : public KeyedService {
// Returns the hardlock state for the associated user.
EasyUnlockScreenlockStateHandler::HardlockState GetHardlockState() const;
- // Ensures the hardlock state is visible even when there is no cryptohome
- // keys and no state update from the app.
- void MaybeShowHardlockUI();
+ // Gets the persisted hardlock state. Return true if there is persisted
+ // hardlock state and the value would be set to |state|. Otherwise,
+ // returns false and |state| is unchanged.
+ bool GetPersistedHardlockState(
+ EasyUnlockScreenlockStateHandler::HardlockState* state) const;
+
+ // Shows the hardlock or connecting state as initial UI before cryptohome
+ // keys checking and state update from the app.
+ void ShowInitialUserState();
// Updates the user pod on the signin/lock screen for the user associated with
// the service to reflect the provided screenlock state.
diff --git a/chrome/browser/signin/easy_unlock_service_signin_chromeos.cc b/chrome/browser/signin/easy_unlock_service_signin_chromeos.cc
index eb0da7c078..53b57a29c2 100644
--- a/chrome/browser/signin/easy_unlock_service_signin_chromeos.cc
+++ b/chrome/browser/signin/easy_unlock_service_signin_chromeos.cc
@@ -270,9 +270,8 @@ bool EasyUnlockServiceSignin::IsAllowedInternal() {
}
void EasyUnlockServiceSignin::OnScreenDidLock() {
- // Ensure the hardlock UI is updated when the account picker on login screen
- // is ready.
- MaybeShowHardlockUI();
+ // Update initial UI is when the account picker on login screen is ready.
+ ShowInitialUserState();
}
void EasyUnlockServiceSignin::OnScreenDidUnlock() {
@@ -290,7 +289,7 @@ void EasyUnlockServiceSignin::OnFocusedUserChanged(const std::string& user_id) {
user_id_ = user_id;
ResetScreenlockState();
- MaybeShowHardlockUI();
+ ShowInitialUserState();
if (should_update_app_state) {
UpdateAppState();
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc
index fdb7f57ad6..957720e80d 100644
--- a/chrome/browser/sync/test/integration/enable_disable_test.cc
+++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -111,6 +111,10 @@ IN_PROC_BROWSER_TEST_F(EnableDisableSingleClientTest, DisableOneAtATime) {
it.Get() == syncer::SYNCED_NOTIFICATION_APP_INFO)
continue;
+ // Device info cannot be disabled.
+ if (it.Get() == syncer::DEVICE_INFO)
+ continue;
+
ASSERT_TRUE(GetClient(0)->DisableSyncForDatatype(it.Get()));
// AUTOFILL_PROFILE is lumped together with AUTOFILL.
diff --git a/chrome/browser/ui/android/tab_model/tab_model.h b/chrome/browser/ui/android/tab_model/tab_model.h
index 88bdc9681d..a4dd9190f3 100644
--- a/chrome/browser/ui/android/tab_model/tab_model.h
+++ b/chrome/browser/ui/android/tab_model/tab_model.h
@@ -38,6 +38,7 @@ class TabModel : public content::NotificationObserver {
virtual int GetTabCount() const = 0;
virtual int GetActiveIndex() const = 0;
virtual content::WebContents* GetWebContentsAt(int index) const = 0;
+ // This will return NULL if the tab has not yet been initialized.
virtual TabAndroid* GetTabAt(int index) const = 0;
virtual void SetActiveIndex(int index) = 0;
diff --git a/chrome/browser/ui/android/tab_model/tab_model_list.cc b/chrome/browser/ui/android/tab_model/tab_model_list.cc
index 42e24ec2c9..04985b715b 100644
--- a/chrome/browser/ui/android/tab_model/tab_model_list.cc
+++ b/chrome/browser/ui/android/tab_model/tab_model_list.cc
@@ -52,8 +52,7 @@ TabModel* TabModelList::GetTabModelForWebContents(
i != TabModelList::end(); ++i) {
TabModel* model = *i;
for (int index = 0; index < model->GetTabCount(); index++) {
- TabAndroid* tab = model->GetTabAt(index);
- if (web_contents == tab->web_contents())
+ if (web_contents == model->GetWebContentsAt(index))
return model;
}
}
diff --git a/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc b/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc
new file mode 100644
index 0000000000..1fb6b4b0fe
--- /dev/null
+++ b/chrome/browser/ui/android/tab_model/tab_model_list_unittest.cc
@@ -0,0 +1,56 @@
+// Copyright 2014 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 "chrome/browser/ui/android/tab_model/tab_model.h"
+#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/browser/web_contents.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+class TabModelListTest : public ChromeRenderViewHostTestHarness {};
+} // namespace
+
+class TestTabModel : public TabModel {
+ public:
+ explicit TestTabModel(Profile* profile) : TabModel(profile), tab_count_(0) {}
+
+ virtual int GetTabCount() const override { return tab_count_; }
+ virtual int GetActiveIndex() const override { return 0; }
+ virtual content::WebContents* GetWebContentsAt(int index) const override {
+ return nullptr;
+ }
+ virtual void CreateTab(content::WebContents* web_contents,
+ int parent_tab_id) override {}
+ virtual content::WebContents* CreateNewTabForDevTools(
+ const GURL& url) override {
+ return nullptr;
+ }
+ virtual bool IsSessionRestoreInProgress() const override { return false; }
+ virtual TabAndroid* GetTabAt(int index) const override { return nullptr; }
+ virtual void SetActiveIndex(int index) override {}
+ virtual void CloseTabAt(int index) override {}
+
+ // A fake value for the current number of tabs.
+ int tab_count_;
+};
+
+// Regression test for http://crbug.com/432685.
+TEST_F(TabModelListTest, TestGetTabModelForWebContents) {
+ TestTabModel tab_model(profile());
+ TabModelList::AddTabModel(&tab_model);
+
+ scoped_ptr<content::WebContents> contents(CreateTestWebContents());
+
+ // Should not crash when there are no tabs.
+ EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
+
+ // Should not crash when there is an uninitialized tab, i.e. when
+ // TabModel::GetTabAt returns NULL.
+ tab_model.tab_count_ = 1;
+ EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
+
+ TabModelList::RemoveTabModel(&tab_model);
+}
diff --git a/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
index 2eb6dc077b..d74c9cfd3f 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
@@ -25,9 +25,7 @@ namespace {
class ExtensionUninstallDialogCocoa
: public extensions::ExtensionUninstallDialog {
public:
- ExtensionUninstallDialogCocoa(Profile* profile,
- gfx::NativeWindow parent,
- Delegate* delegate);
+ ExtensionUninstallDialogCocoa(Profile* profile, Delegate* delegate);
virtual ~ExtensionUninstallDialogCocoa() OVERRIDE;
private:
@@ -36,9 +34,8 @@ class ExtensionUninstallDialogCocoa
ExtensionUninstallDialogCocoa::ExtensionUninstallDialogCocoa(
Profile* profile,
- gfx::NativeWindow parent,
extensions::ExtensionUninstallDialog::Delegate* delegate)
- : extensions::ExtensionUninstallDialog(profile, parent, delegate) {
+ : extensions::ExtensionUninstallDialog(profile, delegate) {
}
ExtensionUninstallDialogCocoa::~ExtensionUninstallDialogCocoa() {}
@@ -73,5 +70,5 @@ extensions::ExtensionUninstallDialog*
extensions::ExtensionUninstallDialog::Create(Profile* profile,
gfx::NativeWindow parent,
Delegate* delegate) {
- return new ExtensionUninstallDialogCocoa(profile, parent, delegate);
+ return new ExtensionUninstallDialogCocoa(profile, delegate);
}
diff --git a/chrome/browser/ui/settings_window_manager.cc b/chrome/browser/ui/settings_window_manager.cc
index c60d5aed54..dbe176a491 100644
--- a/chrome/browser/ui/settings_window_manager.cc
+++ b/chrome/browser/ui/settings_window_manager.cc
@@ -35,6 +35,8 @@ void SettingsWindowManager::RemoveObserver(
void SettingsWindowManager::ShowChromePageForProfile(Profile* profile,
const GURL& gurl) {
+ // Use the original (non off-the-record) profile for settings.
+ profile = profile->GetOriginalProfile();
// Look for an existing browser window.
Browser* browser = FindBrowserForProfile(profile);
if (browser) {
@@ -62,6 +64,7 @@ void SettingsWindowManager::ShowChromePageForProfile(Profile* profile,
params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
chrome::Navigate(&params);
settings_session_map_[profile] = params.browser->session_id().id();
+ DCHECK(params.browser->is_trusted_source());
FOR_EACH_OBSERVER(SettingsWindowManagerObserver,
observers_, OnNewSettingsWindow(params.browser));
diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
index ce14b02299..bbd5d17c2b 100644
--- a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/ui/views/constrained_window_views.h"
#include "chrome/grit/generated_resources.h"
#include "extensions/common/extension.h"
+#include "ui/aura/window_tracker.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer.h"
@@ -35,7 +36,7 @@ class ExtensionUninstallDialogViews
public:
ExtensionUninstallDialogViews(
Profile* profile,
- gfx::NativeWindow parent,
+ aura::Window* parent,
extensions::ExtensionUninstallDialog::Delegate* delegate);
virtual ~ExtensionUninstallDialogViews();
@@ -52,6 +53,12 @@ class ExtensionUninstallDialogViews
ExtensionUninstallDialogDelegateView* view_;
+ // The dialog's parent window.
+ aura::Window* parent_;
+
+ // Tracks whether |parent_| got destroyed.
+ aura::WindowTracker parent_window_tracker_;
+
DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialogViews);
};
@@ -103,10 +110,13 @@ class ExtensionUninstallDialogDelegateView : public views::DialogDelegateView {
ExtensionUninstallDialogViews::ExtensionUninstallDialogViews(
Profile* profile,
- gfx::NativeWindow parent,
+ aura::Window* parent,
extensions::ExtensionUninstallDialog::Delegate* delegate)
- : extensions::ExtensionUninstallDialog(profile, parent, delegate),
- view_(NULL) {
+ : extensions::ExtensionUninstallDialog(profile, delegate),
+ view_(NULL),
+ parent_(parent) {
+ if (parent_)
+ parent_window_tracker_.Add(parent_);
}
ExtensionUninstallDialogViews::~ExtensionUninstallDialogViews() {
@@ -118,6 +128,11 @@ ExtensionUninstallDialogViews::~ExtensionUninstallDialogViews() {
}
void ExtensionUninstallDialogViews::Show() {
+ if (parent_ && !parent_window_tracker_.Contains(parent_)) {
+ delegate_->ExtensionUninstallCanceled();
+ return;
+ }
+
view_ = new ExtensionUninstallDialogDelegateView(
this, extension_, triggering_extension_, &icon_);
CreateBrowserModalDialogViews(view_, parent_)->Show();
diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
new file mode 100644
index 0000000000..d06c02e8f9
--- /dev/null
+++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc
@@ -0,0 +1,76 @@
+// Copyright 2014 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/run_loop.h"
+#include "chrome/browser/extensions/extension_uninstall_dialog.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/test/test_utils.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/value_builder.h"
+
+namespace {
+
+scoped_refptr<extensions::Extension> BuildTestExtension() {
+ return extensions::ExtensionBuilder()
+ .SetManifest(extensions::DictionaryBuilder()
+ .Set("name", "foo")
+ .Set("version", "1.0"))
+ .Build();
+}
+
+class TestExtensionUninstallDialogDelegate
+ : public extensions::ExtensionUninstallDialog::Delegate {
+ public:
+ explicit TestExtensionUninstallDialogDelegate(
+ const base::Closure& quit_closure)
+ : quit_closure_(quit_closure), canceled_(false) {}
+
+ virtual ~TestExtensionUninstallDialogDelegate() {}
+
+ bool canceled() { return canceled_; }
+
+ private:
+ virtual void ExtensionUninstallAccepted() OVERRIDE { quit_closure_.Run(); }
+
+ virtual void ExtensionUninstallCanceled() OVERRIDE {
+ canceled_ = true;
+ quit_closure_.Run();
+ }
+
+ base::Closure quit_closure_;
+ bool canceled_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestExtensionUninstallDialogDelegate);
+};
+
+} // namespace
+
+typedef InProcessBrowserTest ExtensionUninstallDialogViewBrowserTest;
+
+// Test that ExtensionUninstallDialog cancels the uninstall if the aura::Window
+// which is passed to ExtensionUninstallDialog::Create() is destroyed.
+IN_PROC_BROWSER_TEST_F(ExtensionUninstallDialogViewBrowserTest,
+ TrackParentWindowDestruction) {
+ // Create a second browser to prevent the app from exiting when the browser is
+ // closed.
+ CreateBrowser(browser()->profile());
+
+ scoped_refptr<extensions::Extension> extension(BuildTestExtension());
+
+ base::RunLoop run_loop;
+ TestExtensionUninstallDialogDelegate delegate(run_loop.QuitClosure());
+ scoped_ptr<extensions::ExtensionUninstallDialog> dialog(
+ extensions::ExtensionUninstallDialog::Create(
+ browser()->profile(), browser()->window()->GetNativeWindow(),
+ &delegate));
+ browser()->window()->Close();
+ content::RunAllPendingInMessageLoop();
+
+ dialog->ConfirmUninstall(extension.get());
+ run_loop.Run();
+ EXPECT_TRUE(delegate.canceled());
+}
diff --git a/chrome/browser/ui/views/toolbar/browser_action_view.cc b/chrome/browser/ui/views/toolbar/browser_action_view.cc
index 2ae971d8dc..1de0c0f025 100644
--- a/chrome/browser/ui/views/toolbar/browser_action_view.cc
+++ b/chrome/browser/ui/views/toolbar/browser_action_view.cc
@@ -132,6 +132,8 @@ void BrowserActionView::UpdateState() {
if (!IsEnabled(tab_id))
SetState(views::CustomButton::STATE_DISABLED);
+ else if (state() == views::CustomButton::STATE_DISABLED)
+ SetState(views::CustomButton::STATE_NORMAL);
gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia();
@@ -154,6 +156,7 @@ void BrowserActionView::UpdateState() {
SetTooltipText(name);
SetAccessibleName(name);
+ Layout(); // We need to layout since we may have added an icon as a result.
SchedulePaint();
}
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index a16264413a..d5f4eab622 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -315,6 +315,7 @@ SigninScreenHandler::~SigninScreenHandler() {
void SigninScreenHandler::DeclareLocalizedValues(
LocalizedValuesBuilder* builder) {
builder->Add("passwordHint", IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT);
+ builder->Add("signingIn", IDS_LOGIN_POD_SIGNING_IN);
builder->Add("podMenuButtonAccessibleName",
IDS_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME);
builder->Add("podMenuRemoveItemAccessibleName",
diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
index 7512ce8096..f2823b514b 100644
--- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
+++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
@@ -554,6 +554,8 @@ void UserManagerScreenHandler::GetLocalizedValues(
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
localized_strings->SetString("passwordHint",
l10n_util::GetStringUTF16(IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT));
+ localized_strings->SetString("signingIn",
+ l10n_util::GetStringUTF16(IDS_LOGIN_POD_SIGNING_IN));
localized_strings->SetString("podMenuButtonAccessibleName",
l10n_util::GetStringUTF16(IDS_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME));
localized_strings->SetString("podMenuRemoveItemAccessibleName",
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 11610cd2d9..13c57846e1 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1492,6 +1492,7 @@
'browser/ui/views/autofill/password_generation_popup_view_tester_views.cc',
'browser/ui/views/autofill/password_generation_popup_view_tester_views.h',
'browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc',
+ 'browser/ui/views/extensions/extension_uninstall_dialog_view_browsertest.cc',
'browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc',
'browser/ui/views/frame/browser_view_browsertest.cc',
'browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index b0e1032605..b8fd6ab9fc 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -866,6 +866,7 @@
'browser/thumbnails/thumbnail_service_unittest.cc',
'browser/translate/translate_manager_render_view_host_unittest.cc',
'browser/translate/translate_service_unittest.cc',
+ 'browser/ui/android/tab_model/tab_model_list_unittest.cc',
'browser/ui/android/tab_model/tab_model_unittest.cc',
'browser/ui/app_list/app_list_positioner_unittest.cc',
'browser/ui/app_list/app_list_service_mac_unittest.mm',
diff --git a/chromeos/ime/component_extension_ime_manager.cc b/chromeos/ime/component_extension_ime_manager.cc
index feb0347718..49bd813b9c 100644
--- a/chromeos/ime/component_extension_ime_manager.cc
+++ b/chromeos/ime/component_extension_ime_manager.cc
@@ -55,6 +55,27 @@ const char* kLoginLayoutWhitelist[] = {
"us(intl)"
};
+// Gets the input method category according to the given input method id.
+// This is used for sorting a list of input methods.
+int GetInputMethodCategory(const std::string& id) {
+ const std::string engine_id =
+ chromeos::extension_ime_util::GetComponentIDByInputMethodID(id);
+ if (StartsWithASCII(engine_id, "xkb:", true))
+ return 0;
+ if (StartsWithASCII(engine_id, "vkd_", true))
+ return 1;
+ if (engine_id.find("-t-i0-") != std::string::npos &&
+ !StartsWithASCII(engine_id, "zh-", true)) {
+ return 2;
+ }
+ return 3;
+}
+
+bool InputMethodCompare(const input_method::InputMethodDescriptor& im1,
+ const input_method::InputMethodDescriptor& im2) {
+ return GetInputMethodCategory(im1.id()) < GetInputMethodCategory(im2.id());
+}
+
} // namespace
ComponentExtensionEngine::ComponentExtensionEngine() {
@@ -164,6 +185,7 @@ input_method::InputMethodDescriptors
ime.input_view_url));
}
}
+ std::stable_sort(result.begin(), result.end(), InputMethodCompare);
return result;
}
diff --git a/chromeos/ime/component_extension_ime_manager_unittest.cc b/chromeos/ime/component_extension_ime_manager_unittest.cc
index 9e8bdb3c19..840f3c473d 100644
--- a/chromeos/ime/component_extension_ime_manager_unittest.cc
+++ b/chromeos/ime/component_extension_ime_manager_unittest.cc
@@ -28,24 +28,24 @@ class ComponentExtensionIMEManagerTest : public testing::Test {
ext1.path = base::FilePath("ext1_file_path");
ComponentExtensionEngine ext1_engine1;
- ext1_engine1.engine_id = "ext1_engine1_engine_id";
+ ext1_engine1.engine_id = "zh-t-i0-pinyin";
ext1_engine1.display_name = "ext1_engine_1_display_name";
- ext1_engine1.language_codes.push_back("en");
+ ext1_engine1.language_codes.push_back("zh-CN");
ext1_engine1.layouts.push_back("us");
ext1.engines.push_back(ext1_engine1);
ComponentExtensionEngine ext1_engine2;
- ext1_engine2.engine_id = "ext1_engine2_engine_id";
+ ext1_engine2.engine_id = "mozc_us";
ext1_engine2.display_name = "ext1_engine2_display_name";
- ext1_engine2.language_codes.push_back("en");
+ ext1_engine2.language_codes.push_back("jp");
ext1_engine2.layouts.push_back("us");
ext1.engines.push_back(ext1_engine2);
ComponentExtensionEngine ext1_engine3;
- ext1_engine3.engine_id = "ext1_engine3_engine_id";
+ ext1_engine3.engine_id = "xkb:ru::rus";
ext1_engine3.display_name = "ext1_engine3_display_name";
- ext1_engine3.language_codes.push_back("ja");
- ext1_engine3.layouts.push_back("us");
+ ext1_engine3.language_codes.push_back("ru");
+ ext1_engine3.layouts.push_back("ru");
ext1.engines.push_back(ext1_engine3);
ime_list_.push_back(ext1);
@@ -56,24 +56,24 @@ class ComponentExtensionIMEManagerTest : public testing::Test {
ext2.path = base::FilePath("ext2_file_path");
ComponentExtensionEngine ext2_engine1;
- ext2_engine1.engine_id = "ext2_engine1_engine_id";
+ ext2_engine1.engine_id = "vkd_ru_phone_aatseel";
ext2_engine1.display_name = "ext2_engine_1_display_name";
- ext2_engine1.language_codes.push_back("en");
+ ext2_engine1.language_codes.push_back("ru");
ext2_engine1.layouts.push_back("us");
ext2.engines.push_back(ext2_engine1);
ComponentExtensionEngine ext2_engine2;
- ext2_engine2.engine_id = "ext2_engine2_engine_id";
+ ext2_engine2.engine_id = "vkd_vi_telex";
ext2_engine2.display_name = "ext2_engine2_display_name";
ext2_engine2.language_codes.push_back("hi");
ext2_engine2.layouts.push_back("us");
ext2.engines.push_back(ext2_engine2);
ComponentExtensionEngine ext2_engine3;
- ext2_engine3.engine_id = "ext2_engine3_engine_id";
+ ext2_engine3.engine_id = "xkb:us::eng";
ext2_engine3.display_name = "ext2_engine3_display_name";
- ext2_engine3.language_codes.push_back("ja");
- ext2_engine3.layouts.push_back("jp");
+ ext2_engine3.language_codes.push_back("us");
+ ext2_engine3.layouts.push_back("us");
ext2.engines.push_back(ext2_engine3);
ime_list_.push_back(ext2);
@@ -191,6 +191,16 @@ TEST_F(ComponentExtensionIMEManagerTest, GetAllIMEAsInputMethodDescriptor) {
total_ime_size += ime_list_[i].engines.size();
}
EXPECT_EQ(total_ime_size, descriptors.size());
+
+ // Verify order
+ for (size_t i = 0; i < descriptors.size(); ++i) {
+ const input_method::InputMethodDescriptor& d = descriptors[i];
+ if (i < 2) {
+ EXPECT_TRUE(d.id().find("xkb:") != std::string::npos);
+ } else if (i >= 2 && i < 4) {
+ EXPECT_TRUE(d.id().find("vkd_") != std::string::npos);
+ }
+ }
}
} // namespace
diff --git a/components/data_reduction_proxy_version_header.target.darwin-arm.mk b/components/data_reduction_proxy_version_header.target.darwin-arm.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-arm.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-arm.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.darwin-arm64.mk b/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-arm64.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.darwin-mips.mk b/components/data_reduction_proxy_version_header.target.darwin-mips.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-mips.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-mips.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.darwin-x86.mk b/components/data_reduction_proxy_version_header.target.darwin-x86.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-x86.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-x86.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk b/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
+++ b/components/data_reduction_proxy_version_header.target.darwin-x86_64.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.linux-arm.mk b/components/data_reduction_proxy_version_header.target.linux-arm.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.linux-arm.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-arm.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.linux-arm64.mk b/components/data_reduction_proxy_version_header.target.linux-arm64.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.linux-arm64.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-arm64.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.linux-mips.mk b/components/data_reduction_proxy_version_header.target.linux-mips.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.linux-mips.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-mips.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.linux-x86.mk b/components/data_reduction_proxy_version_header.target.linux-x86.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.linux-x86.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-x86.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/data_reduction_proxy_version_header.target.linux-x86_64.mk b/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
index a4ea39c468..b3e78d552d 100644
--- a/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
+++ b/components/data_reduction_proxy_version_header.target.linux-x86_64.mk
@@ -21,7 +21,7 @@ $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h:
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h: $(LOCAL_PATH)/chrome/VERSION $(LOCAL_PATH)/components/data_reduction_proxy/common/version.h.in $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating version header file: "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h" ($@)"
- $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.59\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
+ $(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common; python ../build/util/version.py -e "VERSION_FULL=\"39.0.2171.90\"" data_reduction_proxy/common/version.h.in "$(gyp_shared_intermediate_dir)/components/data_reduction_proxy/common/version.h"
diff --git a/components/domain_reliability/util.cc b/components/domain_reliability/util.cc
index 1fc38baccd..55b1cd315e 100644
--- a/components/domain_reliability/util.cc
+++ b/components/domain_reliability/util.cc
@@ -59,19 +59,37 @@ const struct NetErrorMapping {
{ net::ERR_CONNECTION_TIMED_OUT, "tcp.connection.timed_out" },
{ net::ERR_NAME_RESOLUTION_FAILED, "dns" },
{ net::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN,
- "ssl.pinned_key_not_in_cert_chain" },
+ "ssl.cert.pinned_key_not_in_cert_chain" },
{ net::ERR_CERT_COMMON_NAME_INVALID, "ssl.cert.name_invalid" },
{ net::ERR_CERT_DATE_INVALID, "ssl.cert.date_invalid" },
{ net::ERR_CERT_AUTHORITY_INVALID, "ssl.cert.authority_invalid" },
{ net::ERR_CERT_REVOKED, "ssl.cert.revoked" },
{ net::ERR_CERT_INVALID, "ssl.cert.invalid" },
- { net::ERR_EMPTY_RESPONSE, "http.empty_response" },
+ { net::ERR_EMPTY_RESPONSE, "http.response.empty" },
{ net::ERR_SPDY_PING_FAILED, "spdy.ping_failed" },
{ net::ERR_SPDY_PROTOCOL_ERROR, "spdy.protocol" },
{ net::ERR_QUIC_PROTOCOL_ERROR, "quic.protocol" },
{ net::ERR_DNS_MALFORMED_RESPONSE, "dns.protocol" },
{ net::ERR_DNS_SERVER_FAILED, "dns.server" },
{ net::ERR_DNS_TIMED_OUT, "dns.timed_out" },
+ { net::ERR_INSECURE_RESPONSE, "ssl" },
+ { net::ERR_CONTENT_LENGTH_MISMATCH, "http.response.content_length_mismatch" },
+ { net::ERR_INCOMPLETE_CHUNKED_ENCODING,
+ "http.response.incomplete_chunked_encoding" },
+ { net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH,
+ "ssl.version_or_cipher_mismatch" },
+ { net::ERR_BAD_SSL_CLIENT_AUTH_CERT, "ssl.bad_client_auth_cert" },
+ { net::ERR_INVALID_CHUNKED_ENCODING,
+ "http.response.invalid_chunked_encoding" },
+ { net::ERR_RESPONSE_HEADERS_TRUNCATED, "http.response.headers.truncated" },
+ { net::ERR_REQUEST_RANGE_NOT_SATISFIABLE,
+ "http.request.range_not_satisfiable" },
+ { net::ERR_INVALID_RESPONSE, "http.response.invalid" },
+ { net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION,
+ "http.response.headers.multiple_content_disposition" },
+ { net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH,
+ "http.response.headers.multiple_content_length" },
+ { net::ERR_SSL_UNRECOGNIZED_NAME_ALERT, "ssl.unrecognized_name_alert" }
};
} // namespace
diff --git a/components/signin/core/common/profile_management_switches.cc b/components/signin/core/common/profile_management_switches.cc
index 2785cf4e8e..7e8add30c3 100644
--- a/components/signin/core/common/profile_management_switches.cc
+++ b/components/signin/core/common/profile_management_switches.cc
@@ -24,6 +24,12 @@ enum State {
};
State GetProcessState() {
+ // Disables the new avatar menu if the web-based signin is turned on, because
+ // the new avatar menu always uses the inline signin, which may break some
+ // SAML users.
+ if (switches::IsEnableWebBasedSignin())
+ return STATE_OLD_AVATAR_MENU;
+
// Find the state of both command line args.
bool is_new_avatar_menu =
CommandLine::ForCurrentProcess()->HasSwitch(
@@ -126,7 +132,7 @@ bool IsEnableAccountConsistency() {
bool IsEnableWebBasedSignin() {
return CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableWebBasedSignin) && !IsNewProfileManagement();
+ switches::kEnableWebBasedSignin);
}
bool IsExtensionsMultiAccount() {
diff --git a/components/sync_driver/sync_prefs.cc b/components/sync_driver/sync_prefs.cc
index cc7914d74b..fd5ffb2734 100644
--- a/components/sync_driver/sync_prefs.cc
+++ b/components/sync_driver/sync_prefs.cc
@@ -66,9 +66,11 @@ void SyncPrefs::RegisterProfilePrefs(
// although they don't have sync representations.
user_types.PutAll(syncer::ProxyTypes());
- // Treat bookmarks specially.
+ // Treat bookmarks and device info specially.
RegisterDataTypePreferredPref(registry, syncer::BOOKMARKS, true);
+ RegisterDataTypePreferredPref(registry, syncer::DEVICE_INFO, true);
user_types.Remove(syncer::BOOKMARKS);
+ user_types.Remove(syncer::DEVICE_INFO);
// These two prefs are set from sync experiment to enable enhanced bookmarks.
registry->RegisterIntegerPref(
@@ -346,7 +348,7 @@ const char* SyncPrefs::GetPrefNameForDataType(syncer::ModelType data_type) {
default:
break;
}
- NOTREACHED();
+ NOTREACHED() << "Type is " << data_type;
return NULL;
}
@@ -451,6 +453,11 @@ bool SyncPrefs::GetDataTypePreferred(syncer::ModelType type) const {
NOTREACHED();
return false;
}
+
+ // Device info is always enabled.
+ if (pref_name == prefs::kSyncDeviceInfo)
+ return true;
+
if (type == syncer::PROXY_TABS &&
pref_service_->GetUserPrefValue(pref_name) == NULL &&
pref_service_->IsUserModifiablePreference(pref_name)) {
@@ -470,6 +477,11 @@ void SyncPrefs::SetDataTypePreferred(syncer::ModelType type,
NOTREACHED();
return;
}
+
+ // Device info is always preferred.
+ if (type == syncer::DEVICE_INFO)
+ return;
+
pref_service_->SetBoolean(pref_name, is_preferred);
}
diff --git a/components/sync_driver/sync_prefs_unittest.cc b/components/sync_driver/sync_prefs_unittest.cc
index 683d55a49f..fb8dddbb54 100644
--- a/components/sync_driver/sync_prefs_unittest.cc
+++ b/components/sync_driver/sync_prefs_unittest.cc
@@ -68,10 +68,11 @@ TEST_F(SyncPrefsTest, DefaultTypes) {
SyncPrefs sync_prefs(&pref_service_);
sync_prefs.SetKeepEverythingSynced(false);
- // Only bookmarks are enabled by default.
+ // Only bookmarks and device info are enabled by default.
+ syncer::ModelTypeSet expected(syncer::BOOKMARKS, syncer::DEVICE_INFO);
syncer::ModelTypeSet preferred_types =
sync_prefs.GetPreferredDataTypes(syncer::UserTypes());
- EXPECT_TRUE(preferred_types.Equals(syncer::ModelTypeSet(syncer::BOOKMARKS)));
+ EXPECT_TRUE(preferred_types.Equals(expected));
// Simulate an upgrade to delete directives + proxy tabs support. None of the
// new types or their pref group types should be registering, ensuring they
@@ -164,6 +165,10 @@ TEST_F(SyncPrefsTest, PreferredTypesNotKeepEverythingSynced) {
expected_preferred_types.Put(syncer::FAVICON_IMAGES);
expected_preferred_types.Put(syncer::FAVICON_TRACKING);
}
+
+ // Device info is always preferred.
+ expected_preferred_types.Put(syncer::DEVICE_INFO);
+
sync_prefs.SetPreferredDataTypes(user_types, preferred_types);
EXPECT_TRUE(expected_preferred_types.Equals(
sync_prefs.GetPreferredDataTypes(user_types)));
@@ -232,6 +237,19 @@ TEST_F(SyncPrefsTest, ClearPreferences) {
EXPECT_TRUE(sync_prefs.GetEncryptionBootstrapToken().empty());
}
+// Device info should always be enabled.
+TEST_F(SyncPrefsTest, DeviceInfo) {
+ SyncPrefs sync_prefs(&pref_service_);
+ EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(syncer::UserTypes())
+ .Has(syncer::DEVICE_INFO));
+ sync_prefs.SetKeepEverythingSynced(true);
+ EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(syncer::UserTypes())
+ .Has(syncer::DEVICE_INFO));
+ sync_prefs.SetKeepEverythingSynced(false);
+ EXPECT_TRUE(sync_prefs.GetPreferredDataTypes(syncer::UserTypes())
+ .Has(syncer::DEVICE_INFO));
+}
+
} // namespace
} // namespace sync_driver
diff --git a/content/browser/renderer_host/render_view_host_delegate.cc b/content/browser/renderer_host/render_view_host_delegate.cc
index 41a110e3f5..7c29b7f754 100644
--- a/content/browser/renderer_host/render_view_host_delegate.cc
+++ b/content/browser/renderer_host/render_view_host_delegate.cc
@@ -48,4 +48,8 @@ bool RenderViewHostDelegate::IsNeverVisible() {
return false;
}
+bool RenderViewHostDelegate::IsVirtualKeyboardRequested() {
+ return false;
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index f101be1216..15de7d1a59 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -282,6 +282,13 @@ class CONTENT_EXPORT RenderViewHostDelegate {
// created by the RenderViewHost.
virtual FrameTree* GetFrameTree();
+ // Optional state storage for if the Virtual Keyboard has been requested by
+ // this page or not. If it has, this can be used to suppress things like the
+ // link disambiguation dialog, which doesn't interact well with the virtual
+ // keyboard.
+ virtual void SetIsVirtualKeyboardRequested(bool requested) {}
+ virtual bool IsVirtualKeyboardRequested();
+
protected:
virtual ~RenderViewHostDelegate() {}
};
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 8135b99349..ed80017b1e 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -1243,6 +1243,7 @@ void RenderViewHostImpl::OnFocusedNodeChanged(bool is_editable_node) {
#if defined(OS_WIN)
if (!is_editable_node && virtual_keyboard_requested_) {
virtual_keyboard_requested_ = false;
+ delegate_->SetIsVirtualKeyboardRequested(false);
BrowserThread::PostDelayedTask(
BrowserThread::UI, FROM_HERE,
base::Bind(base::IgnoreResult(&DismissVirtualKeyboardTask)),
@@ -1467,8 +1468,10 @@ void RenderViewHostImpl::OnFocusedNodeTouched(bool editable) {
#if defined(OS_WIN)
if (editable) {
virtual_keyboard_requested_ = base::win::DisplayVirtualKeyboard();
+ delegate_->SetIsVirtualKeyboardRequested(true);
} else {
virtual_keyboard_requested_ = false;
+ delegate_->SetIsVirtualKeyboardRequested(false);
base::win::DismissVirtualKeyboard();
}
#endif
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 3e2466bdc2..60a0ed475c 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1257,6 +1257,14 @@ gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() {
void RenderWidgetHostViewAura::ShowDisambiguationPopup(
const gfx::Rect& rect_pixels,
const SkBitmap& zoomed_bitmap) {
+ RenderViewHostDelegate* delegate = NULL;
+ if (host_->IsRenderView())
+ delegate = RenderViewHost::From(host_)->GetDelegate();
+ // Suppress the link disambiguation popup if the virtual keyboard is currently
+ // requested, as it doesn't interact well with the keyboard.
+ if (delegate && delegate->IsVirtualKeyboardRequested())
+ return;
+
// |target_rect| is provided in pixels, not DIPs. So we convert it to DIPs
// by scaling it by the inverse of the device scale factor.
gfx::RectF screen_target_rect_f(rect_pixels);
@@ -1288,13 +1296,16 @@ void RenderWidgetHostViewAura::DisambiguationPopupRendered(
return;
// Use RenderViewHostDelegate to get to the WebContentsViewAura, which will
- // actually show the delegate.
+ // actually show the disambiguation popup.
RenderViewHostDelegate* delegate = NULL;
if (host_->IsRenderView())
delegate = RenderViewHost::From(host_)->GetDelegate();
RenderViewHostDelegateView* delegate_view = NULL;
- if (delegate)
+ if (delegate) {
delegate_view = delegate->GetDelegateView();
+ if (delegate->IsVirtualKeyboardRequested())
+ return;
+ }
if (delegate_view) {
delegate_view->ShowDisambiguationPopup(
disambiguation_target_rect_,
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index d9bfc9a02a..09e47aff20 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1825,6 +1825,14 @@ FrameTree* WebContentsImpl::GetFrameTree() {
return &frame_tree_;
}
+void WebContentsImpl::SetIsVirtualKeyboardRequested(bool requested) {
+ virtual_keyboard_requested_ = requested;
+}
+
+bool WebContentsImpl::IsVirtualKeyboardRequested() {
+ return virtual_keyboard_requested_;
+}
+
AccessibilityMode WebContentsImpl::GetAccessibilityMode() const {
return accessibility_mode_;
}
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index e794114f3e..a2b7277414 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -486,6 +486,8 @@ class CONTENT_EXPORT WebContentsImpl
SiteInstance* instance) OVERRIDE;
virtual SessionStorageNamespaceMap GetSessionStorageNamespaceMap() OVERRIDE;
virtual FrameTree* GetFrameTree() OVERRIDE;
+ virtual void SetIsVirtualKeyboardRequested(bool requested) OVERRIDE;
+ virtual bool IsVirtualKeyboardRequested() OVERRIDE;
// NavigatorDelegate ---------------------------------------------------------
@@ -1247,6 +1249,8 @@ class CONTENT_EXPORT WebContentsImpl
base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_;
+ bool virtual_keyboard_requested_;
+
DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
};
diff --git a/content/common/gpu/OWNERS b/content/common/gpu/OWNERS
index c454171381..4bc8abc917 100644
--- a/content/common/gpu/OWNERS
+++ b/content/common/gpu/OWNERS
@@ -1,3 +1,4 @@
+ccameron@chromium.org
jbauman@chromium.org
kbr@chromium.org
piman@chromium.org
diff --git a/content/common/gpu/image_transport_surface_calayer_mac.mm b/content/common/gpu/image_transport_surface_calayer_mac.mm
index 7531297ece..1b4166db76 100644
--- a/content/common/gpu/image_transport_surface_calayer_mac.mm
+++ b/content/common/gpu/image_transport_surface_calayer_mac.mm
@@ -128,9 +128,6 @@ bool CALayerStorageProvider::AllocateColorBufferStorage(
}
glFlush();
- // Disable the fade-in animation as the layer is changed.
- ScopedCAActionDisabler disabler;
-
// Set the parameters that will be used to allocate the CALayer to draw the
// texture into.
share_group_context_.reset(CGLRetainContext(context));
diff --git a/content/common/gpu/image_transport_surface_fbo_mac.h b/content/common/gpu/image_transport_surface_fbo_mac.h
index de501005a0..46209638b4 100644
--- a/content/common/gpu/image_transport_surface_fbo_mac.h
+++ b/content/common/gpu/image_transport_surface_fbo_mac.h
@@ -86,7 +86,7 @@ class ImageTransportSurfaceFBO
// ImageTransportSurface implementation
virtual void OnBufferPresented(
const AcceleratedSurfaceMsg_BufferPresented_Params& params) OVERRIDE;
- virtual void OnResize(gfx::Size size, float scale_factor) OVERRIDE;
+ virtual void OnResize(gfx::Size pixel_size, float scale_factor) OVERRIDE;
virtual void SetLatencyInfo(
const std::vector<ui::LatencyInfo>&) OVERRIDE;
virtual void WakeUpGpu() OVERRIDE;
@@ -99,7 +99,8 @@ class ImageTransportSurfaceFBO
void AdjustBufferAllocation();
void DestroyFramebuffer();
- void CreateFramebuffer();
+ void AllocateOrResizeFramebuffer(
+ const gfx::Size& pixel_size, float scale_factor);
scoped_ptr<StorageProvider> storage_provider_;
@@ -115,8 +116,8 @@ class ImageTransportSurfaceFBO
// Weak pointer to the context that this was last made current to.
gfx::GLContext* context_;
- gfx::Size size_;
- gfx::Size rounded_size_;
+ gfx::Size pixel_size_;
+ gfx::Size rounded_pixel_size_;
float scale_factor_;
// Whether or not we've successfully made the surface current once.
diff --git a/content/common/gpu/image_transport_surface_fbo_mac.mm b/content/common/gpu/image_transport_surface_fbo_mac.mm
index 343ee83bfc..2e02012a4a 100644
--- a/content/common/gpu/image_transport_surface_fbo_mac.mm
+++ b/content/common/gpu/image_transport_surface_fbo_mac.mm
@@ -77,7 +77,7 @@ bool ImageTransportSurfaceFBO::OnMakeCurrent(gfx::GLContext* context) {
if (made_current_)
return true;
- OnResize(gfx::Size(1, 1), 1.f);
+ AllocateOrResizeFramebuffer(gfx::Size(1, 1), 1.f);
made_current_ = true;
return true;
@@ -113,7 +113,7 @@ void ImageTransportSurfaceFBO::AdjustBufferAllocation() {
DestroyFramebuffer();
helper_->Suspend();
} else if (backbuffer_suggested_allocation_ && !has_complete_framebuffer_) {
- CreateFramebuffer();
+ AllocateOrResizeFramebuffer(pixel_size_, scale_factor_);
}
}
@@ -125,7 +125,7 @@ bool ImageTransportSurfaceFBO::SwapBuffers() {
// It is the responsibility of the storage provider to send the swap IPC.
is_swap_buffers_send_pending_ = true;
- storage_provider_->SwapBuffers(size_, scale_factor_);
+ storage_provider_->SwapBuffers(pixel_size_, scale_factor_);
return true;
}
@@ -153,7 +153,7 @@ bool ImageTransportSurfaceFBO::SupportsPostSubBuffer() {
}
gfx::Size ImageTransportSurfaceFBO::GetSize() {
- return size_;
+ return pixel_size_;
}
void* ImageTransportSurfaceFBO::GetHandle() {
@@ -170,17 +170,15 @@ void ImageTransportSurfaceFBO::OnBufferPresented(
storage_provider_->SwapBuffersAckedByBrowser();
}
-void ImageTransportSurfaceFBO::OnResize(gfx::Size size,
+void ImageTransportSurfaceFBO::OnResize(gfx::Size pixel_size,
float scale_factor) {
TRACE_EVENT2("gpu", "ImageTransportSurfaceFBO::OnResize",
- "old_width", size_.width(), "new_width", size.width());
+ "old_size", pixel_size_.ToString(),
+ "new_size", pixel_size.ToString());
// Caching |context_| from OnMakeCurrent. It should still be current.
DCHECK(context_->IsCurrent(this));
- size_ = size;
- scale_factor_ = scale_factor;
-
- CreateFramebuffer();
+ AllocateOrResizeFramebuffer(pixel_size, scale_factor);
}
void ImageTransportSurfaceFBO::SetLatencyInfo(
@@ -227,18 +225,29 @@ void ImageTransportSurfaceFBO::DestroyFramebuffer() {
has_complete_framebuffer_ = false;
}
-void ImageTransportSurfaceFBO::CreateFramebuffer() {
- gfx::Size new_rounded_size = storage_provider_->GetRoundedSize(size_);
+void ImageTransportSurfaceFBO::AllocateOrResizeFramebuffer(
+ const gfx::Size& new_pixel_size, float new_scale_factor) {
+ gfx::Size new_rounded_pixel_size =
+ storage_provider_->GetRoundedSize(new_pixel_size);
- // Only recreate surface when the rounded up size has changed.
- if (has_complete_framebuffer_ && new_rounded_size == rounded_size_)
- return;
+ // Only recreate the surface's storage when the rounded up size has changed,
+ // or the scale factor has changed.
+ bool needs_new_storage =
+ !has_complete_framebuffer_ ||
+ new_rounded_pixel_size != rounded_pixel_size_ ||
+ new_scale_factor != scale_factor_;
- TRACE_EVENT2("gpu", "ImageTransportSurfaceFBO::CreateFramebuffer",
- "width", new_rounded_size.width(),
- "height", new_rounded_size.height());
+ // Save the new storage parameters.
+ pixel_size_ = new_pixel_size;
+ rounded_pixel_size_ = new_rounded_pixel_size;
+ scale_factor_ = new_scale_factor;
+
+ if (!needs_new_storage)
+ return;
- rounded_size_ = new_rounded_size;
+ TRACE_EVENT2("gpu", "ImageTransportSurfaceFBO::AllocateOrResizeFramebuffer",
+ "width", new_rounded_pixel_size.width(),
+ "height", new_rounded_pixel_size.height());
// GL_TEXTURE_RECTANGLE_ARB is the best supported render target on
// Mac OS X and is required for IOSurface interoperability.
@@ -284,7 +293,8 @@ void ImageTransportSurfaceFBO::CreateFramebuffer() {
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,
depth_stencil_renderbuffer_id_);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT,
- rounded_size_.width(), rounded_size_.height());
+ rounded_pixel_size_.width(),
+ rounded_pixel_size_.height());
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_STENCIL_ATTACHMENT_EXT,
GL_RENDERBUFFER_EXT,
@@ -299,7 +309,7 @@ void ImageTransportSurfaceFBO::CreateFramebuffer() {
bool allocated_color_buffer = storage_provider_->AllocateColorBufferStorage(
static_cast<CGLContextObj>(context_->GetHandle()), texture_id_,
- rounded_size_, scale_factor_);
+ rounded_pixel_size_, scale_factor_);
if (!allocated_color_buffer) {
DLOG(ERROR) << "Failed to allocate color buffer storage.";
DestroyFramebuffer();
diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc
index d0e98b7457..530358e155 100644
--- a/content/common/gpu/media/dxva_video_decode_accelerator.cc
+++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc
@@ -323,7 +323,7 @@ bool DXVAVideoDecodeAccelerator::DXVAPictureBuffer::
glBindTexture(GL_TEXTURE_2D, picture_buffer_.texture_id());
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
base::win::ScopedComPtr<IDirect3DSurface9> d3d_surface;
hr = decoding_texture_->GetSurfaceLevel(0, d3d_surface.Receive());
@@ -362,7 +362,7 @@ bool DXVAVideoDecodeAccelerator::DXVAPictureBuffer::
egl_display,
decoding_surface_,
EGL_BACK_BUFFER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, current_texture);
return true;
}
@@ -456,10 +456,9 @@ bool DXVAVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile,
// TODO(ananta)
// H264PROFILE_HIGH video decoding is janky at times. Needs more
- // investigation.
+ // investigation. http://crbug.com/426707
if (profile != media::H264PROFILE_BASELINE &&
- profile != media::H264PROFILE_MAIN &&
- profile != media::H264PROFILE_HIGH) {
+ profile != media::H264PROFILE_MAIN) {
RETURN_AND_NOTIFY_ON_FAILURE(false,
"Unsupported h264 profile", PLATFORM_FAILURE, false);
}
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index ba9da064c0..e3119745d0 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -838,21 +838,6 @@
'../third_party/webrtc/modules/modules.gyp:desktop_capture',
],
}],
- ['enable_webrtc==1 and OS=="mac"', {
- 'variables': {
- 'libpeer_target_type%': 'static_library',
- },
- 'conditions': [
- ['libpeer_target_type!="static_library"', {
- 'copies': [{
- 'destination': '<(PRODUCT_DIR)/Libraries',
- 'files': [
- '<(PRODUCT_DIR)/libpeerconnection.so',
- ],
- }],
- }],
- ],
- }],
['enable_webrtc==1 and chromeos==1', {
'sources': [
'browser/media/capture/desktop_capture_device_aura_unittest.cc',
diff --git a/content/content_unittests.isolate b/content/content_unittests.isolate
index 87a4ee9a29..7f4f9c4332 100644
--- a/content/content_unittests.isolate
+++ b/content/content_unittests.isolate
@@ -56,13 +56,6 @@
],
},
}],
- ['OS=="linux" and libpeer_target_type=="loadable_module"', {
- 'variables': {
- 'isolate_dependency_tracked': [
- '<(PRODUCT_DIR)/lib/libpeerconnection.so',
- ],
- },
- }],
['OS=="mac"', {
'variables': {
'command': [
@@ -98,13 +91,6 @@
],
},
}],
- ['OS=="win" and libpeer_target_type=="loadable_module"', {
- 'variables': {
- 'isolate_dependency_tracked': [
- '<(PRODUCT_DIR)/libpeerconnection.dll',
- ],
- },
- }],
],
'includes': [
'../base/base.isolate',
diff --git a/content/public/common/content_constants.cc b/content/public/common/content_constants.cc
index 251db885e1..5034cb4d19 100644
--- a/content/public/common/content_constants.cc
+++ b/content/public/common/content_constants.cc
@@ -20,6 +20,7 @@ const char kFlashPluginSwfDescription[] = "Shockwave Flash";
const char kFlashPluginSplMimeType[] = "application/futuresplash";
const char kFlashPluginSplExtension[] = "spl";
const char kFlashPluginSplDescription[] = "FutureSplash Player";
+const char kSilverlightPluginMimeTypePrefix[] = "application/x-silverlight";
// This number used to be limited to 32 in the past (see b/535234).
const size_t kMaxRendererProcessCount = 82;
diff --git a/content/public/common/content_constants.h b/content/public/common/content_constants.h
index 9b3b0e3867..df9d557ff7 100644
--- a/content/public/common/content_constants.h
+++ b/content/public/common/content_constants.h
@@ -31,6 +31,7 @@ CONTENT_EXPORT extern const char kFlashPluginSwfDescription[];
CONTENT_EXPORT extern const char kFlashPluginSplMimeType[];
CONTENT_EXPORT extern const char kFlashPluginSplExtension[];
CONTENT_EXPORT extern const char kFlashPluginSplDescription[];
+CONTENT_EXPORT extern const char kSilverlightPluginMimeTypePrefix[];
CONTENT_EXPORT extern const size_t kMaxRendererProcessCount;
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc
index ac41187c83..4efc507918 100644
--- a/content/renderer/media/media_stream_audio_processor.cc
+++ b/content/renderer/media/media_stream_audio_processor.cc
@@ -19,7 +19,6 @@
#include "media/base/audio_fifo.h"
#include "media/base/channel_layout.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
-#include "third_party/libjingle/overrides/init_webrtc.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
#include "third_party/webrtc/modules/audio_processing/typing_detection.h"
@@ -424,7 +423,7 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule(
#endif
// Create and configure the webrtc::AudioProcessing.
- audio_processing_.reset(CreateWebRtcAudioProcessing(config));
+ audio_processing_.reset(webrtc::AudioProcessing::Create(config));
// Enable the audio processing components.
if (echo_cancellation) {
diff --git a/content/renderer/media/media_stream_audio_processor_options.cc b/content/renderer/media/media_stream_audio_processor_options.cc
index 8462a6550d..e386308fed 100644
--- a/content/renderer/media/media_stream_audio_processor_options.cc
+++ b/content/renderer/media/media_stream_audio_processor_options.cc
@@ -251,10 +251,15 @@ void EnableTypingDetection(AudioProcessing* audio_processing,
void StartEchoCancellationDump(AudioProcessing* audio_processing,
base::File aec_dump_file) {
DCHECK(aec_dump_file.IsValid());
- if (audio_processing->StartDebugRecordingForPlatformFile(
- aec_dump_file.TakePlatformFile())) {
- DLOG(ERROR) << "Fail to start AEC debug recording";
+
+ FILE* stream = base::FileToFILE(aec_dump_file.Pass(), "w");
+ if (!stream) {
+ LOG(ERROR) << "Failed to open AEC dump file";
+ return;
}
+
+ if (audio_processing->StartDebugRecording(stream))
+ DLOG(ERROR) << "Fail to start AEC debug recording";
}
void StopEchoCancellationDump(AudioProcessing* audio_processing) {
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index 336a8c4994..f8b78b5977 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -439,7 +439,7 @@ AudioParameters AudioManagerMac::GetInputStreamParameters(
DLOG(ERROR) << "Invalid device " << device_id;
return AudioParameters(
AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
- kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate));
+ kFallbackSampleRate, 16, ChooseBufferSize(true, kFallbackSampleRate));
}
int channels = 0;
@@ -459,7 +459,7 @@ AudioParameters AudioManagerMac::GetInputStreamParameters(
// Due to the sharing of the input and output buffer sizes, we need to choose
// the input buffer size based on the output sample rate. See
// http://crbug.com/154352.
- const int buffer_size = ChooseBufferSize(sample_rate);
+ const int buffer_size = ChooseBufferSize(true, sample_rate);
// TODO(xians): query the native channel layout for the specific device.
return AudioParameters(
@@ -640,7 +640,7 @@ AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters(
DLOG(ERROR) << "Invalid output device " << output_device_id;
return input_params.IsValid() ? input_params : AudioParameters(
AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
- kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate));
+ kFallbackSampleRate, 16, ChooseBufferSize(false, kFallbackSampleRate));
}
const bool has_valid_input_params = input_params.IsValid();
@@ -649,7 +649,7 @@ AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters(
// Allow pass through buffer sizes. If concurrent input and output streams
// exist, they will use the smallest buffer size amongst them. As such, each
// stream must be able to FIFO requests appropriately when this happens.
- int buffer_size = ChooseBufferSize(hardware_sample_rate);
+ int buffer_size = ChooseBufferSize(false, hardware_sample_rate);
if (has_valid_input_params) {
buffer_size =
std::min(kMaximumInputOutputBufferSize,
@@ -717,17 +717,26 @@ void AudioManagerMac::HandleDeviceChanges() {
NotifyAllOutputDeviceChangeListeners();
}
-int AudioManagerMac::ChooseBufferSize(int output_sample_rate) {
- int buffer_size = kMinimumInputOutputBufferSize;
+int AudioManagerMac::ChooseBufferSize(bool is_input, int sample_rate) {
+ // kMinimumInputOutputBufferSize is too small for the output side because
+ // CoreAudio can get into under-run if the renderer fails delivering data
+ // to the browser within the allowed time by the OS. The workaround is to
+ // use 256 samples as the default output buffer size for sample rates
+ // smaller than 96KHz.
+ // TODO(xians): Remove this workaround after WebAudio supports user defined
+ // buffer size. See https://github.com/WebAudio/web-audio-api/issues/348
+ // for details.
+ int buffer_size = is_input ?
+ kMinimumInputOutputBufferSize : 2 * kMinimumInputOutputBufferSize;
const int user_buffer_size = GetUserBufferSize();
if (user_buffer_size) {
buffer_size = user_buffer_size;
- } else if (output_sample_rate > 48000) {
+ } else if (sample_rate > 48000) {
// The default buffer size is too small for higher sample rates and may lead
// to glitching. Adjust upwards by multiples of the default size.
- if (output_sample_rate <= 96000)
+ if (sample_rate <= 96000)
buffer_size = 2 * kMinimumInputOutputBufferSize;
- else if (output_sample_rate <= 192000)
+ else if (sample_rate <= 192000)
buffer_size = 4 * kMinimumInputOutputBufferSize;
}
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h
index 490b0b6bbd..9af5c6d562 100644
--- a/media/audio/mac/audio_manager_mac.h
+++ b/media/audio/mac/audio_manager_mac.h
@@ -86,7 +86,7 @@ class MEDIA_EXPORT AudioManagerMac : public AudioManagerBase {
void InitializeOnAudioThread();
void ShutdownOnAudioThread();
- int ChooseBufferSize(int output_sample_rate);
+ int ChooseBufferSize(bool is_input, int sample_rate);
// Notify streams of a device change if the default output device or its
// sample rate has changed, otherwise does nothing.
diff --git a/native_client_sdk/src/build_tools/build_sdk.py b/native_client_sdk/src/build_tools/build_sdk.py
index c03afb03c4..12d8ddc630 100755
--- a/native_client_sdk/src/build_tools/build_sdk.py
+++ b/native_client_sdk/src/build_tools/build_sdk.py
@@ -138,10 +138,10 @@ def GetOutputToolchainLib(pepperdir, tcname, xarch):
return GetToolchainNaClLib(tcname, tcpath, xarch)
-def GetPNaClNativeLib(tcpath, arch):
+def GetPNaClTranslatorLib(tcpath, arch):
if arch not in ['arm', 'x86-32', 'x86-64']:
buildbot_common.ErrorExit('Unknown architecture %s.' % arch)
- return os.path.join(tcpath, 'lib-' + arch)
+ return os.path.join(tcpath, 'translator', arch, 'lib')
def BuildStepDownloadToolchains(toolchains):
@@ -612,9 +612,14 @@ def BuildStepBuildToolchains(pepperdir, toolchains):
'gen', 'tc_pnacl_translate',
'lib-' + nacl_arch)
+ pnacl_translator_lib_dir = GetPNaClTranslatorLib(pnacldir, nacl_arch)
+ if not os.path.isdir(pnacl_translator_lib_dir):
+ buildbot_common.ErrorExit('Expected %s directory to exist.' %
+ pnacl_translator_lib_dir)
+
buildbot_common.CopyFile(
os.path.join(release_build_dir, 'libpnacl_irt_shim.a'),
- GetPNaClNativeLib(pnacldir, nacl_arch))
+ pnacl_translator_lib_dir)
InstallNaClHeaders(GetToolchainNaClInclude('pnacl', pnacldir, 'x86'),
'newlib')
diff --git a/sandbox/win/src/sandbox_policy_base.cc b/sandbox/win/src/sandbox_policy_base.cc
index 4604bfdad6..267b9355fa 100644
--- a/sandbox/win/src/sandbox_policy_base.cc
+++ b/sandbox/win/src/sandbox_policy_base.cc
@@ -459,7 +459,7 @@ ResultCode PolicyBase::MakeTokens(HANDLE* initial, HANDLE* lockdown) {
// integrity label on the object is no higher than the sandboxed process's
// integrity level. So, we lower the label on the desktop process if it's
// not already low enough for our process.
- if (use_alternate_desktop_ &&
+ if (alternate_desktop_handle_ && use_alternate_desktop_ &&
integrity_level_ != INTEGRITY_LEVEL_LAST &&
alternate_desktop_integrity_level_label_ < integrity_level_ &&
base::win::OSInfo::GetInstance()->version() >= base::win::VERSION_VISTA) {
diff --git a/third_party/libjingle/BUILD.gn b/third_party/libjingle/BUILD.gn
index 69a744ecb9..02c2bf977b 100644
--- a/third_party/libjingle/BUILD.gn
+++ b/third_party/libjingle/BUILD.gn
@@ -548,7 +548,6 @@ if (enable_webrtc) {
deps = [
":libjingle_webrtc_common",
"//third_party/webrtc",
- "//third_party/webrtc/modules/audio_processing",
"//third_party/webrtc/system_wrappers",
"//third_party/webrtc/voice_engine",
]
diff --git a/third_party/libjingle/libjingle.gyp b/third_party/libjingle/libjingle.gyp
index 63a5230609..0eaf86c359 100644
--- a/third_party/libjingle/libjingle.gyp
+++ b/third_party/libjingle/libjingle.gyp
@@ -589,7 +589,6 @@
'<(libjingle_source)/talk/media/webrtc/webrtcvoiceengine.h',
],
'dependencies': [
- '<(DEPTH)/third_party/webrtc/modules/modules.gyp:audio_processing',
'<(DEPTH)/third_party/webrtc/system_wrappers/source/system_wrappers.gyp:system_wrappers',
'<(DEPTH)/third_party/webrtc/voice_engine/voice_engine.gyp:voice_engine',
'<(DEPTH)/third_party/webrtc/webrtc.gyp:webrtc',
diff --git a/third_party/libjingle/overrides/init_webrtc.cc b/third_party/libjingle/overrides/init_webrtc.cc
index 0004d8eb16..ab89d5884a 100644
--- a/third_party/libjingle/overrides/init_webrtc.cc
+++ b/third_party/libjingle/overrides/init_webrtc.cc
@@ -11,8 +11,6 @@
#include "base/metrics/field_trial.h"
#include "base/native_library.h"
#include "base/path_service.h"
-#include "third_party/webrtc/common.h"
-#include "third_party/webrtc/modules/audio_processing/include/audio_processing.h"
#include "webrtc/base/basictypes.h"
#include "webrtc/base/logging.h"
@@ -55,13 +53,6 @@ bool InitializeWebRtcModule() {
return true;
}
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
- const webrtc::Config& config) {
- // libpeerconnection is being compiled as a static lib, use
- // webrtc::AudioProcessing directly.
- return webrtc::AudioProcessing::Create(config);
-}
-
#else // !LIBPEERCONNECTION_LIB
// When being compiled as a shared library, we need to bridge the gap between
@@ -71,7 +62,6 @@ webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
// Global function pointers to the factory functions in the shared library.
CreateWebRtcMediaEngineFunction g_create_webrtc_media_engine = NULL;
DestroyWebRtcMediaEngineFunction g_destroy_webrtc_media_engine = NULL;
-CreateWebRtcAudioProcessingFunction g_create_webrtc_audio_processing = NULL;
// Returns the full or relative path to the libpeerconnection module depending
// on what platform we're on.
@@ -145,8 +135,8 @@ bool InitializeWebRtcModule() {
&AddTraceEvent,
&g_create_webrtc_media_engine,
&g_destroy_webrtc_media_engine,
- &init_diagnostic_logging,
- &g_create_webrtc_audio_processing);
+ &init_diagnostic_logging);
+
if (init_ok)
rtc::SetExtraLoggingInit(init_diagnostic_logging);
return init_ok;
@@ -170,12 +160,4 @@ void DestroyWebRtcMediaEngine(cricket::MediaEngineInterface* media_engine) {
g_destroy_webrtc_media_engine(media_engine);
}
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
- const webrtc::Config& config) {
- // The same as CreateWebRtcMediaEngine(), we call InitializeWebRtcModule here
- // for convenience of tests.
- InitializeWebRtcModule();
- return g_create_webrtc_audio_processing(config);
-}
-
#endif // LIBPEERCONNECTION_LIB
diff --git a/third_party/libjingle/overrides/init_webrtc.h b/third_party/libjingle/overrides/init_webrtc.h
index 4d06e9e549..c5c190c335 100644
--- a/third_party/libjingle/overrides/init_webrtc.h
+++ b/third_party/libjingle/overrides/init_webrtc.h
@@ -23,8 +23,6 @@ class WebRtcVideoEncoderFactory;
namespace webrtc {
class AudioDeviceModule;
-class AudioProcessing;
-class Config;
} // namespace webrtc
typedef std::string (*FieldTrialFindFullName)(const std::string& trial_name);
@@ -41,9 +39,6 @@ typedef void (*DestroyWebRtcMediaEngineFunction)(
typedef void (*InitDiagnosticLoggingDelegateFunctionFunction)(
void (*DelegateFunction)(const std::string&));
-typedef webrtc::AudioProcessing* (*CreateWebRtcAudioProcessingFunction)(
- const webrtc::Config& config);
-
// A typedef for the main initialize function in libpeerconnection.
// This will initialize logging in the module with the proper arguments
// as well as provide pointers back to a couple webrtc factory functions.
@@ -61,8 +56,7 @@ typedef bool (*InitializeModuleFunction)(
webrtc::AddTraceEventPtr trace_add_trace_event,
CreateWebRtcMediaEngineFunction* create_media_engine,
DestroyWebRtcMediaEngineFunction* destroy_media_engine,
- InitDiagnosticLoggingDelegateFunctionFunction* init_diagnostic_logging,
- CreateWebRtcAudioProcessingFunction* create_audio_processing);
+ InitDiagnosticLoggingDelegateFunctionFunction* init_diagnostic_logging);
#if !defined(LIBPEERCONNECTION_IMPLEMENTATION)
// Load and initialize the shared WebRTC module (libpeerconnection).
@@ -71,11 +65,6 @@ typedef bool (*InitializeModuleFunction)(
// If not called explicitly, this function will still be called from the main
// CreateWebRtcMediaEngine factory function the first time it is called.
bool InitializeWebRtcModule();
-
-// Return a webrtc::AudioProcessing object.
-webrtc::AudioProcessing* CreateWebRtcAudioProcessing(
- const webrtc::Config& config);
-
#endif
#endif // THIRD_PARTY_LIBJINGLE_OVERRIDES_INIT_WEBRTC_H_
diff --git a/third_party/libjingle/overrides/initialize_module.cc b/third_party/libjingle/overrides/initialize_module.cc
index b84e2d8745..ce11567d46 100644
--- a/third_party/libjingle/overrides/initialize_module.cc
+++ b/third_party/libjingle/overrides/initialize_module.cc
@@ -8,7 +8,6 @@
#include "base/logging.h"
#include "init_webrtc.h"
#include "talk/media/webrtc/webrtcmediaengine.h"
-#include "third_party/webrtc/modules/audio_processing/include/audio_processing.h"
#include "webrtc/base/basictypes.h"
#include "webrtc/base/logging.h"
@@ -72,9 +71,7 @@ bool InitializeModule(const CommandLine& command_line,
CreateWebRtcMediaEngineFunction* create_media_engine,
DestroyWebRtcMediaEngineFunction* destroy_media_engine,
InitDiagnosticLoggingDelegateFunctionFunction*
- init_diagnostic_logging,
- CreateWebRtcAudioProcessingFunction*
- create_audio_processing) {
+ init_diagnostic_logging) {
#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
g_alloc = alloc;
g_dealloc = dealloc;
@@ -85,7 +82,6 @@ bool InitializeModule(const CommandLine& command_line,
*create_media_engine = &CreateWebRtcMediaEngine;
*destroy_media_engine = &DestroyWebRtcMediaEngine;
*init_diagnostic_logging = &rtc::InitDiagnosticLoggingDelegateFunction;
- *create_audio_processing = &webrtc::AudioProcessing::Create;
if (CommandLine::Init(0, NULL)) {
#if !defined(OS_WIN)
diff --git a/tools/metrics/rappor/rappor.xml b/tools/metrics/rappor/rappor.xml
index 743f98a214..3ecf43035f 100644
--- a/tools/metrics/rappor/rappor.xml
+++ b/tools/metrics/rappor/rappor.xml
@@ -59,6 +59,37 @@ TODO(holte): Add validation and pretty printing scripts.
</summary>
</rappor-metric>
+<rappor-metric name="Plugins.SilverlightOriginUrl" type="ETLD_PLUS_ONE">
+ <owner>wfh@chromium.org</owner>
+ <summary>
+ The domain and registry of the top level URL of a page which attempts to
+ launch a Silverlight NPAPI plugin, if the client has Silverlight installed
+ and enabled. Recorded when the plugin frame appears for each Silverlight
+ object found on the page, even if the plugin is click-to-play.
+ </summary>
+</rappor-metric>
+
+<rappor-metric name="Plugins.FlashUrl" type="ETLD_PLUS_ONE">
+ <owner>wfh@chromium.org</owner>
+ <summary>
+ The domain and registry of the URL from where Flash SWF or SPL content is
+ being loaded from, while attempting to launch a Flash (NPAPI or PPAPI)
+ plugin that is installed and enabled. Recorded when the plugin frame
+ appears for each Flash object found in the page, even if the plugin is
+ click-to-play.
+ </summary>
+</rappor-metric>
+
+<rappor-metric name="Plugins.FlashOriginUrl" type="ETLD_PLUS_ONE">
+ <owner>wfh@chromium.org</owner>
+ <summary>
+ The domain and registry of the top level URL of a page which attempts to
+ launch a Flash NPAPI or PPAPI plugin, if the client has Flash installed
+ and enabled. Recorded when the plugin frame appears for each Flash object
+ found on the page, even if the plugin is click-to-play.
+ </summary>
+</rappor-metric>
+
</rappor-metrics>
</rappor-configuration>
diff --git a/ui/login/account_picker/user_pod_row.css b/ui/login/account_picker/user_pod_row.css
index b8c764dbfb..50805b4a0c 100644
--- a/ui/login/account_picker/user_pod_row.css
+++ b/ui/login/account_picker/user_pod_row.css
@@ -206,11 +206,14 @@ html[dir=rtl] .main-pane {
top: 11px;
}
-.password-label {
+.password-label,
+.signin-transition-container {
display: none;
}
-.pod[auth-type='userClick'] .password-label {
+.pod[auth-type='userClick']:not(.signing-in) .password-label,
+.pod[auth-type='userClick'].signing-in .signin-transition-container {
+ color: grey;
display: block;
flex: auto;
margin-top: 11px;
@@ -686,3 +689,40 @@ html[dir=rtl] .expanded-pane-contents {
.enter-button {
font-size: 14px;
}
+
+/* Animations for the animated ellipsis: */
+.animated-ellipsis-component0 {
+ -webkit-animation: ellipsis-component0 1.5s infinite;
+}
+
+@-webkit-keyframes ellipsis-component0 {
+ 0% { opacity: 0; }
+ 25% { opacity: 1; }
+ 50% { opacity: 1; }
+ 75% { opacity: 1; }
+ 100% { opacity: 0; }
+}
+
+.animated-ellipsis-component1 {
+ -webkit-animation: ellipsis-component1 1.5s infinite;
+}
+
+@-webkit-keyframes ellipsis-component1 {
+ 0% { opacity: 0; }
+ 25% { opacity: 0; }
+ 50% { opacity: 1; }
+ 75% { opacity: 1; }
+ 100% { opacity: 0; }
+}
+
+.animated-ellipsis-component2 {
+ -webkit-animation: ellipsis-component2 1.5s infinite;
+}
+
+@-webkit-keyframes ellipsis-component2 {
+ 0% { opacity: 0; }
+ 25% { opacity: 0; }
+ 50% { opacity: 0; }
+ 75% { opacity: 1; }
+ 100% { opacity: 0; }
+}
diff --git a/ui/login/account_picker/user_pod_row.js b/ui/login/account_picker/user_pod_row.js
index 3f87ee9de9..f6925136c4 100644
--- a/ui/login/account_picker/user_pod_row.js
+++ b/ui/login/account_picker/user_pod_row.js
@@ -1089,6 +1089,7 @@ cr.define('login', function() {
this.showSigninUI();
} else if (this.isAuthTypeUserClick) {
Oobe.disableSigninUI();
+ this.classList.toggle('signing-in', true);
chrome.send('attemptUnlock', [this.user.username]);
} else if (this.isAuthTypePassword) {
if (!this.passwordElement.value)
@@ -1157,6 +1158,7 @@ cr.define('login', function() {
*/
reset: function(takeFocus) {
this.passwordElement.value = '';
+ this.classList.toggle('signing-in', false);
if (takeFocus) {
if (!this.multiProfilesPolicyApplied)
this.focusInput(); // This will set a custom tab order.
diff --git a/ui/login/account_picker/user_pod_template.html b/ui/login/account_picker/user_pod_template.html
index 555c56c73f..d4b5cc29bf 100644
--- a/ui/login/account_picker/user_pod_template.html
+++ b/ui/login/account_picker/user_pod_template.html
@@ -28,6 +28,12 @@
</div>
<!-- User Click Authentication -->
<div class="password-label"></div>
+ <div class="signin-transition-container">
+ <span class="signing-in-label" i18n-content="signingIn"></span>
+ <span class="animated-ellipsis-component0">.</span>
+ <span class="animated-ellipsis-component1">.</span>
+ <span class="animated-ellipsis-component2">.</span>
+ </div>
<div class="custom-icon-container" hidden></div>
<div class="signin-button-container">
<button class="signin-button" i18n-content="signinButton"></button>
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index 4bf10163f7..3db4644a12 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -427,7 +427,10 @@ gfx::Rect Label::GetTextBounds() const {
NOTREACHED();
break;
}
- text_size.set_height(available.height());
+ if (!multi_line_)
+ text_size.set_height(available.height());
+ // Support vertical centering of multi-line labels: http://crbug.com/429595
+ origin.Offset(0, std::max(0, (available.height() - text_size.height())) / 2);
return gfx::Rect(origin, text_size);
}
diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc
index b60a7b9264..0d9cc417e3 100644
--- a/ui/views/controls/label_unittest.cc
+++ b/ui/views/controls/label_unittest.cc
@@ -502,9 +502,9 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(extra.width() / 2, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
int expected_flags = gfx::Canvas::MULTI_LINE |
gfx::Canvas::TEXT_ALIGN_CENTER |
gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -520,9 +520,9 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
expected_flags = gfx::Canvas::MULTI_LINE |
gfx::Canvas::TEXT_ALIGN_LEFT |
gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -537,9 +537,9 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(extra.width(), text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
expected_flags = gfx::Canvas::MULTI_LINE |
gfx::Canvas::TEXT_ALIGN_RIGHT |
gfx::Canvas::FORCE_LTR_DIRECTIONALITY;
@@ -563,7 +563,7 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
EXPECT_EQ(center_bounds.height(), text_bounds.height());
expected_flags = gfx::Canvas::MULTI_LINE |
@@ -580,7 +580,7 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(border.left(), text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
EXPECT_EQ(center_bounds.height(), text_bounds.height());
expected_flags = gfx::Canvas::MULTI_LINE |
@@ -597,7 +597,7 @@ TEST_F(LabelTest, DrawMultiLineString) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(extra.width() + border.left(), text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
EXPECT_EQ(center_bounds.height(), text_bounds.height());
expected_flags = gfx::Canvas::MULTI_LINE |
@@ -764,9 +764,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(extra.width() / 2, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
#if !defined(OS_WIN)
@@ -780,9 +780,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(extra.width(), text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
#if !defined(OS_WIN)
@@ -795,9 +795,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(0, text_bounds.x());
- EXPECT_EQ(0, text_bounds.y());
+ EXPECT_EQ(extra.height() / 2, text_bounds.y());
EXPECT_GT(text_bounds.width(), kMinTextDimension);
- EXPECT_EQ(text_bounds.height(), label.height());
+ EXPECT_GT(text_bounds.height(), kMinTextDimension);
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
#if !defined(OS_WIN)
@@ -819,9 +819,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(border.left() + extra.width() / 2, text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
- EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+ EXPECT_EQ(center_bounds.height(), text_bounds.height());
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_CENTER & flags);
#if !defined(OS_WIN)
@@ -834,9 +834,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(border.left() + extra.width(), text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
- EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+ EXPECT_EQ(center_bounds.height(), text_bounds.height());
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_RIGHT & flags);
#if !defined(OS_WIN)
@@ -849,9 +849,9 @@ TEST_F(LabelTest, DrawMultiLineStringInRTL) {
label.CalculateDrawStringParams(&paint_text, &text_bounds, &flags);
EXPECT_EQ(label.text(), paint_text);
EXPECT_EQ(border.left(), text_bounds.x());
- EXPECT_EQ(border.top(), text_bounds.y());
+ EXPECT_EQ(border.top() + extra.height() / 2, text_bounds.y());
EXPECT_EQ(center_bounds.width(), text_bounds.width());
- EXPECT_EQ(label.GetContentsBounds().height(), text_bounds.height());
+ EXPECT_EQ(center_bounds.height(), text_bounds.height());
EXPECT_TRUE(gfx::Canvas::MULTI_LINE & flags);
EXPECT_TRUE(gfx::Canvas::TEXT_ALIGN_LEFT & flags);
#if !defined(OS_WIN)