diff options
author | Ben Murdoch <benm@google.com> | 2014-11-22 01:28:32 +0000 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2014-11-22 01:28:32 +0000 |
commit | e4256316f8b5e8d1ec0df1f7762771622a53fa63 (patch) | |
tree | 9d8282f7a323fad191129fddbcf5601903fa161c | |
parent | 165c68f9802332588874b0a207d7f49d03009ddf (diff) | |
download | chromium_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
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—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—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(¶ms); 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) |