summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2014-06-03 10:58:34 +0100
committerTorne (Richard Coles) <torne@google.com>2014-06-03 10:58:34 +0100
commitcedac228d2dd51db4b79ea1e72c7f249408ee061 (patch)
treeaa4ff43d7fe316e95d12721ce5e17653a768a0dd /content
parent6a869ecff032b5bed299d661b078b0555034598b (diff)
downloadchromium_org-cedac228d2dd51db4b79ea1e72c7f249408ee061.tar.gz
Merge from Chromium at DEPS revision 273901
This commit was generated by merge_to_master.py. Change-Id: I45745444894df927ffc1045ab8de88b9e52636a3
Diffstat (limited to 'content')
-rw-r--r--content/BUILD.gn70
-rw-r--r--content/app/content_main_runner.cc7
-rw-r--r--content/browser/BUILD.gn379
-rw-r--r--content/browser/DEPS1
-rw-r--r--content/browser/accessibility/accessibility_tree_formatter_mac.mm2
-rw-r--r--content/browser/accessibility/android_hit_testing_browsertest.cc81
-rw-r--r--content/browser/accessibility/browser_accessibility_android.h3
-rw-r--r--content/browser/accessibility/browser_accessibility_cocoa.h3
-rw-r--r--content/browser/accessibility/browser_accessibility_cocoa.mm11
-rw-r--r--content/browser/accessibility/browser_accessibility_mac.h5
-rw-r--r--content/browser/accessibility/browser_accessibility_mac.mm15
-rw-r--r--content/browser/accessibility/browser_accessibility_manager.cc2
-rw-r--r--content/browser/accessibility/browser_accessibility_manager.h5
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_android.cc91
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_android.h16
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_mac.h5
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_mac.mm27
-rw-r--r--content/browser/accessibility/browser_accessibility_manager_unittest.cc1
-rw-r--r--content/browser/accessibility/dump_accessibility_tree_browsertest.cc9
-rw-r--r--content/browser/android/browser_jni_registrar.cc6
-rw-r--r--content/browser/android/child_process_launcher_android.cc52
-rw-r--r--content/browser/android/child_process_launcher_android.h1
-rw-r--r--content/browser/android/content_readback_handler.cc83
-rw-r--r--content/browser/android/content_readback_handler.h14
-rw-r--r--content/browser/android/content_view_core_impl.cc231
-rw-r--r--content/browser/android/content_view_core_impl.h30
-rw-r--r--content/browser/android/content_view_render_view.cc23
-rw-r--r--content/browser/android/content_view_render_view.h9
-rw-r--r--content/browser/android/in_process/synchronous_compositor_factory_impl.cc105
-rw-r--r--content/browser/android/in_process/synchronous_compositor_factory_impl.h11
-rw-r--r--content/browser/android/in_process/synchronous_compositor_impl.cc105
-rw-r--r--content/browser/android/in_process/synchronous_compositor_impl.h26
-rw-r--r--content/browser/android/in_process/synchronous_compositor_output_surface.cc57
-rw-r--r--content/browser/android/in_process/synchronous_compositor_output_surface.h21
-rw-r--r--content/browser/android/load_url_params.cc2
-rw-r--r--content/browser/android/surface_texture_peer_browser_impl.cc56
-rw-r--r--content/browser/android/surface_texture_peer_browser_impl.h2
-rw-r--r--content/browser/appcache/appcache_dispatcher_host.cc7
-rw-r--r--content/browser/appcache/appcache_dispatcher_host.h3
-rw-r--r--content/browser/appcache/appcache_unittest.cc6
-rw-r--r--content/browser/appcache/manifest_parser_unittest.cc76
-rw-r--r--content/browser/battery_status/battery_status_manager.h57
-rw-r--r--content/browser/battery_status/battery_status_manager_android.cc31
-rw-r--r--content/browser/battery_status/battery_status_manager_android.h40
-rw-r--r--content/browser/battery_status/battery_status_manager_default.cc31
-rw-r--r--content/browser/battery_status/battery_status_message_filter.cc56
-rw-r--r--content/browser/battery_status/battery_status_message_filter.h36
-rw-r--r--content/browser/battery_status/battery_status_service.cc101
-rw-r--r--content/browser/battery_status/battery_status_service.h66
-rw-r--r--content/browser/battery_status/battery_status_service_unittest.cc193
-rw-r--r--content/browser/browser.gni15
-rw-r--r--content/browser/browser_child_process_host_impl.cc21
-rw-r--r--content/browser/browser_child_process_host_impl.h4
-rw-r--r--content/browser/browser_context.cc16
-rw-r--r--content/browser/browser_main_loop.cc37
-rw-r--r--content/browser/browser_plugin/browser_plugin_embedder.cc53
-rw-r--r--content/browser/browser_plugin/browser_plugin_embedder.h14
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.cc722
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.h176
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest_manager.cc208
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest_manager.h118
-rw-r--r--content/browser/browser_plugin/browser_plugin_host_browsertest.cc482
-rw-r--r--content/browser/browser_plugin/browser_plugin_host_factory.h3
-rw-r--r--content/browser/browser_plugin/browser_plugin_message_filter.cc45
-rw-r--r--content/browser/browser_plugin/browser_plugin_message_filter.h9
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest.cc123
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest.h34
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc99
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest_delegate.h63
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest_manager.cc45
-rw-r--r--content/browser/browser_plugin/test_browser_plugin_guest_manager.h46
-rw-r--r--content/browser/browser_plugin/test_guest_manager.cc183
-rw-r--r--content/browser/browser_plugin/test_guest_manager.h64
-rw-r--r--content/browser/browser_plugin/test_guest_manager_delegate.cc86
-rw-r--r--content/browser/browser_plugin/test_guest_manager_delegate.h51
-rw-r--r--content/browser/browser_url_handler_impl.cc6
-rw-r--r--content/browser/browsing_instance.cc4
-rw-r--r--content/browser/browsing_instance.h15
-rw-r--r--content/browser/child_process_security_policy_impl.cc16
-rw-r--r--content/browser/child_process_security_policy_unittest.cc12
-rw-r--r--content/browser/compositor/browser_compositor_view_mac.h53
-rw-r--r--content/browser/compositor/browser_compositor_view_mac.mm174
-rw-r--r--content/browser/compositor/delegated_frame_host.cc76
-rw-r--r--content/browser/compositor/delegated_frame_host.h11
-rw-r--r--content/browser/compositor/gpu_process_transport_factory.cc33
-rw-r--r--content/browser/compositor/gpu_process_transport_factory.h6
-rw-r--r--content/browser/compositor/reflector_impl.cc3
-rw-r--r--content/browser/compositor/reflector_impl.h1
-rw-r--r--content/browser/compositor/software_browser_compositor_output_surface_unittest.cc8
-rw-r--r--content/browser/compositor/software_output_device_mac.h35
-rw-r--r--content/browser/compositor/software_output_device_mac.mm30
-rw-r--r--content/browser/compositor/software_output_device_ozone.cc13
-rw-r--r--content/browser/compositor/software_output_device_ozone.h3
-rw-r--r--content/browser/compositor/software_output_device_ozone_unittest.cc17
-rw-r--r--content/browser/compositor/software_output_device_win.cc16
-rw-r--r--content/browser/compositor/software_output_device_win.h5
-rw-r--r--content/browser/compositor/software_output_device_x11.cc10
-rw-r--r--content/browser/compositor/software_output_device_x11.h2
-rw-r--r--content/browser/database_quota_client_unittest.cc289
-rw-r--r--content/browser/database_util_unittest.cc75
-rw-r--r--content/browser/databases_table_unittest.cc152
-rw-r--r--content/browser/device_monitor_mac.mm173
-rw-r--r--content/browser/device_sensors/device_inertial_sensor_browsertest.cc2
-rw-r--r--content/browser/device_sensors/device_inertial_sensor_service.cc3
-rw-r--r--content/browser/device_sensors/device_inertial_sensor_service.h9
-rw-r--r--content/browser/device_sensors/device_motion_message_filter.cc10
-rw-r--r--content/browser/device_sensors/device_motion_message_filter.h7
-rw-r--r--content/browser/device_sensors/device_orientation_message_filter.cc9
-rw-r--r--content/browser/device_sensors/device_orientation_message_filter.h6
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.cc12
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.h2
-rw-r--r--content/browser/devtools/devtools_browser_target.cc1
-rw-r--r--content/browser/devtools/devtools_external_agent_proxy_impl.cc73
-rw-r--r--content/browser/devtools/devtools_external_agent_proxy_impl.h35
-rw-r--r--content/browser/devtools/devtools_http_handler_impl.cc7
-rw-r--r--content/browser/devtools/devtools_manager_impl.cc11
-rw-r--r--content/browser/devtools/devtools_manager_impl.h9
-rw-r--r--content/browser/devtools/devtools_manager_unittest.cc10
-rw-r--r--content/browser/devtools/devtools_protocol.cc31
-rw-r--r--content/browser/devtools/devtools_protocol.h15
-rw-r--r--content/browser/devtools/devtools_resources.gyp17
-rw-r--r--content/browser/devtools/devtools_resources.target.darwin-arm.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.darwin-arm64.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.darwin-mips.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.darwin-x86.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.darwin-x86_64.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.linux-arm.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.linux-arm64.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.linux-mips.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.linux-x86.mk4
-rw-r--r--content/browser/devtools/devtools_resources.target.linux-x86_64.mk4
-rw-r--r--content/browser/devtools/devtools_tracing_handler.cc25
-rw-r--r--content/browser/devtools/devtools_tracing_handler.h5
-rw-r--r--content/browser/devtools/embedded_worker_devtools_manager.cc88
-rw-r--r--content/browser/devtools/embedded_worker_devtools_manager.h60
-rw-r--r--content/browser/devtools/embedded_worker_devtools_manager_unittest.cc9
-rw-r--r--content/browser/devtools/forwarding_agent_host.cc41
-rw-r--r--content/browser/devtools/forwarding_agent_host.h39
-rw-r--r--content/browser/devtools/render_view_devtools_agent_host.cc30
-rw-r--r--content/browser/devtools/renderer_overrides_handler.cc13
-rw-r--r--content/browser/devtools/tethering_handler.cc2
-rw-r--r--content/browser/devtools/worker_devtools_message_filter.cc8
-rw-r--r--content/browser/devtools/worker_devtools_message_filter.h3
-rw-r--r--content/browser/dom_storage/dom_storage_message_filter.cc5
-rw-r--r--content/browser/dom_storage/dom_storage_message_filter.h3
-rw-r--r--content/browser/download/base_file.cc3
-rw-r--r--content/browser/download/base_file_unittest.cc17
-rw-r--r--content/browser/download/download_browsertest.cc14
-rw-r--r--content/browser/download/download_manager_impl_unittest.cc15
-rw-r--r--content/browser/download/download_resource_handler.cc27
-rw-r--r--content/browser/download/download_resource_handler.h30
-rw-r--r--content/browser/download/save_file_resource_handler.cc36
-rw-r--r--content/browser/download/save_file_resource_handler.h36
-rw-r--r--content/browser/download/save_package.cc4
-rw-r--r--content/browser/fileapi/blob_url_request_job_unittest.cc66
-rw-r--r--content/browser/fileapi/browser_file_system_helper.cc4
-rw-r--r--content/browser/fileapi/chrome_blob_storage_context.cc42
-rw-r--r--content/browser/fileapi/chrome_blob_storage_context.h5
-rw-r--r--content/browser/fileapi/file_system_dir_url_request_job_unittest.cc70
-rw-r--r--content/browser/fileapi/file_system_file_stream_reader_unittest.cc1
-rw-r--r--content/browser/fileapi/file_system_operation_runner_unittest.cc1
-rw-r--r--content/browser/fileapi/file_system_quota_client_unittest.cc1
-rw-r--r--content/browser/fileapi/file_system_url_request_job_unittest.cc75
-rw-r--r--content/browser/fileapi/file_writer_delegate_unittest.cc51
-rw-r--r--content/browser/fileapi/fileapi_message_filter.cc9
-rw-r--r--content/browser/fileapi/fileapi_message_filter.h4
-rw-r--r--content/browser/fileapi/fileapi_message_filter_unittest.cc35
-rw-r--r--content/browser/fileapi/local_file_stream_reader_unittest.cc258
-rw-r--r--content/browser/fileapi/local_file_util_unittest.cc62
-rw-r--r--content/browser/fileapi/mock_url_request_delegate.cc72
-rw-r--r--content/browser/fileapi/mock_url_request_delegate.h38
-rw-r--r--content/browser/fileapi/obfuscated_file_util_unittest.cc179
-rw-r--r--content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc1
-rw-r--r--content/browser/fileapi/transient_file_util_unittest.cc1
-rw-r--r--content/browser/frame_host/cross_process_frame_connector.cc44
-rw-r--r--content/browser/frame_host/cross_process_frame_connector.h3
-rw-r--r--content/browser/frame_host/debug_urls.cc18
-rw-r--r--content/browser/frame_host/debug_urls.h5
-rw-r--r--content/browser/frame_host/interstitial_page_impl.cc88
-rw-r--r--content/browser/frame_host/interstitial_page_impl.h10
-rw-r--r--content/browser/frame_host/navigation_controller_impl.cc35
-rw-r--r--content/browser/frame_host/navigation_controller_impl_unittest.cc2
-rw-r--r--content/browser/frame_host/navigator_impl.cc2
-rw-r--r--content/browser/frame_host/render_frame_host_delegate.h17
-rw-r--r--content/browser/frame_host/render_frame_host_impl.cc87
-rw-r--r--content/browser/frame_host/render_frame_host_impl.h39
-rw-r--r--content/browser/frame_host/render_frame_host_manager.cc190
-rw-r--r--content/browser/frame_host/render_frame_host_manager.h29
-rw-r--r--content/browser/frame_host/render_frame_host_manager_browsertest.cc69
-rw-r--r--content/browser/frame_host/render_frame_host_manager_unittest.cc148
-rw-r--r--content/browser/frame_host/render_frame_message_filter.cc7
-rw-r--r--content/browser/frame_host/render_frame_message_filter.h3
-rw-r--r--content/browser/frame_host/render_frame_proxy_host.cc49
-rw-r--r--content/browser/frame_host/render_frame_proxy_host.h56
-rw-r--r--content/browser/frame_host/render_widget_host_view_child_frame.cc10
-rw-r--r--content/browser/frame_host/render_widget_host_view_child_frame.h4
-rw-r--r--content/browser/frame_host/render_widget_host_view_guest.cc18
-rw-r--r--content/browser/frame_host/render_widget_host_view_guest.h3
-rw-r--r--content/browser/gamepad/raw_input_data_fetcher_win.cc28
-rw-r--r--content/browser/geolocation/geolocation_dispatcher_host.cc176
-rw-r--r--content/browser/geolocation/geolocation_dispatcher_host.h77
-rw-r--r--content/browser/geolocation/geolocation_provider_impl.cc121
-rw-r--r--content/browser/geolocation/geolocation_provider_impl.h37
-rw-r--r--content/browser/geolocation/geolocation_provider_unittest.cc35
-rw-r--r--content/browser/gpu/browser_gpu_channel_host_factory.cc110
-rw-r--r--content/browser/gpu/browser_gpu_channel_host_factory.h49
-rw-r--r--content/browser/gpu/compositor_util.cc2
-rw-r--r--content/browser/gpu/gpu_process_host.cc17
-rw-r--r--content/browser/histogram_message_filter.cc7
-rw-r--r--content/browser/histogram_message_filter.h3
-rw-r--r--content/browser/host_zoom_map_impl.cc120
-rw-r--r--content/browser/host_zoom_map_impl.h55
-rw-r--r--content/browser/indexed_db/indexed_db_backing_store.cc508
-rw-r--r--content/browser/indexed_db/indexed_db_backing_store.h61
-rw-r--r--content/browser/indexed_db/indexed_db_browsertest.cc7
-rw-r--r--content/browser/indexed_db/indexed_db_database.cc133
-rw-r--r--content/browser/indexed_db/indexed_db_database.h10
-rw-r--r--content/browser/indexed_db/indexed_db_database_unittest.cc199
-rw-r--r--content/browser/indexed_db/indexed_db_dispatcher_host.cc24
-rw-r--r--content/browser/indexed_db/indexed_db_dispatcher_host.h7
-rw-r--r--content/browser/indexed_db/indexed_db_fake_backing_store.cc23
-rw-r--r--content/browser/indexed_db/indexed_db_fake_backing_store.h9
-rw-r--r--content/browser/indexed_db/indexed_db_leveldb_coding.cc3
-rw-r--r--content/browser/indexed_db/indexed_db_transaction.cc18
-rw-r--r--content/browser/indexed_db/indexed_db_transaction.h2
-rw-r--r--content/browser/indexed_db/indexed_db_transaction_unittest.cc41
-rw-r--r--content/browser/indexed_db/mock_indexed_db_callbacks.cc2
-rw-r--r--content/browser/indexed_db/mock_indexed_db_callbacks.h1
-rw-r--r--content/browser/loader/async_resource_handler.cc64
-rw-r--r--content/browser/loader/async_resource_handler.h38
-rw-r--r--content/browser/loader/buffered_resource_handler.cc41
-rw-r--r--content/browser/loader/buffered_resource_handler.h14
-rw-r--r--content/browser/loader/certificate_resource_handler.cc40
-rw-r--r--content/browser/loader/certificate_resource_handler.h30
-rw-r--r--content/browser/loader/cross_site_resource_handler.cc37
-rw-r--r--content/browser/loader/cross_site_resource_handler.h15
-rw-r--r--content/browser/loader/detachable_resource_handler.cc49
-rw-r--r--content/browser/loader/detachable_resource_handler.h26
-rw-r--r--content/browser/loader/layered_resource_handler.cc41
-rw-r--r--content/browser/loader/layered_resource_handler.h25
-rw-r--r--content/browser/loader/offline_policy.cc96
-rw-r--r--content/browser/loader/offline_policy.h60
-rw-r--r--content/browser/loader/offline_policy_unittest.cc96
-rw-r--r--content/browser/loader/redirect_to_file_resource_handler.cc26
-rw-r--r--content/browser/loader/redirect_to_file_resource_handler.h18
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.cc108
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.h11
-rw-r--r--content/browser/loader/resource_dispatcher_host_unittest.cc301
-rw-r--r--content/browser/loader/resource_handler.h63
-rw-r--r--content/browser/loader/resource_loader.cc45
-rw-r--r--content/browser/loader/resource_loader.h1
-rw-r--r--content/browser/loader/resource_loader_unittest.cc71
-rw-r--r--content/browser/loader/resource_message_delegate.h3
-rw-r--r--content/browser/loader/resource_message_filter.cc6
-rw-r--r--content/browser/loader/resource_message_filter.h3
-rw-r--r--content/browser/loader/resource_scheduler.cc7
-rw-r--r--content/browser/loader/resource_scheduler_filter.cc3
-rw-r--r--content/browser/loader/resource_scheduler_filter.h3
-rw-r--r--content/browser/loader/resource_scheduler_unittest.cc4
-rw-r--r--content/browser/loader/stream_resource_handler.cc33
-rw-r--r--content/browser/loader/stream_resource_handler.h30
-rw-r--r--content/browser/loader/sync_resource_handler.cc26
-rw-r--r--content/browser/loader/sync_resource_handler.h30
-rw-r--r--content/browser/loader/temporary_file_stream.h1
-rw-r--r--content/browser/loader/throttling_resource_handler.cc30
-rw-r--r--content/browser/loader/throttling_resource_handler.h12
-rw-r--r--content/browser/mach_broker_mac.mm87
-rw-r--r--content/browser/media/android/browser_demuxer_android.cc10
-rw-r--r--content/browser/media/android/browser_demuxer_android.h3
-rw-r--r--content/browser/media/android/browser_media_player_manager.cc304
-rw-r--r--content/browser/media/android/browser_media_player_manager.h88
-rw-r--r--content/browser/media/android/media_drm_credential_manager.cc2
-rw-r--r--content/browser/media/android/media_resource_getter_impl.cc4
-rw-r--r--content/browser/media/android/media_web_contents_observer.cc131
-rw-r--r--content/browser/media/android/media_web_contents_observer.h55
-rw-r--r--content/browser/media/capture/desktop_capture_device_aura.cc3
-rw-r--r--content/browser/media/capture/desktop_capture_device_aura_unittest.cc5
-rw-r--r--content/browser/media/capture/web_contents_video_capture_device.cc3
-rw-r--r--content/browser/media/media_canplaytype_browsertest.cc316
-rw-r--r--content/browser/media/webrtc_browsertest.cc47
-rw-r--r--content/browser/media/webrtc_getusermedia_browsertest.cc49
-rw-r--r--content/browser/media/webrtc_identity_store_backend.cc74
-rw-r--r--content/browser/media/webrtc_identity_store_unittest.cc33
-rw-r--r--content/browser/media/webrtc_internals.cc2
-rw-r--r--content/browser/media/webrtc_internals_browsertest.cc1
-rw-r--r--content/browser/message_port_message_filter.cc7
-rw-r--r--content/browser/message_port_message_filter.h3
-rw-r--r--content/browser/mime_registry_message_filter.cc5
-rw-r--r--content/browser/mime_registry_message_filter.h3
-rw-r--r--content/browser/mojo/mojo_application_host.cc11
-rw-r--r--content/browser/mojo/mojo_application_host.h26
-rw-r--r--content/browser/net/browser_online_state_observer.cc5
-rw-r--r--content/browser/plugin_data_remover_impl.cc2
-rw-r--r--content/browser/plugin_process_host.cc3
-rw-r--r--content/browser/plugin_service_impl_browsertest.cc2
-rw-r--r--content/browser/profiler_message_filter.cc7
-rw-r--r--content/browser/profiler_message_filter.h3
-rw-r--r--content/browser/push_messaging_message_filter.cc6
-rw-r--r--content/browser/push_messaging_message_filter.h3
-rw-r--r--content/browser/quota_dispatcher_host.cc8
-rw-r--r--content/browser/quota_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/clipboard_message_filter.cc5
-rw-r--r--content/browser/renderer_host/clipboard_message_filter.h3
-rw-r--r--content/browser/renderer_host/compositing_iosurface_layer_mac.h34
-rw-r--r--content/browser/renderer_host/compositing_iosurface_layer_mac.mm102
-rw-r--r--content/browser/renderer_host/compositing_iosurface_mac.h10
-rw-r--r--content/browser/renderer_host/compositing_iosurface_mac.mm2
-rw-r--r--content/browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc2
-rw-r--r--content/browser/renderer_host/compositor_impl_android.cc215
-rw-r--r--content/browser/renderer_host/compositor_impl_android.h74
-rw-r--r--content/browser/renderer_host/database_message_filter.cc8
-rw-r--r--content/browser/renderer_host/database_message_filter.h3
-rw-r--r--content/browser/renderer_host/dip_util.cc21
-rw-r--r--content/browser/renderer_host/dip_util.h8
-rw-r--r--content/browser/renderer_host/file_utilities_message_filter.cc6
-rw-r--r--content/browser/renderer_host/file_utilities_message_filter.h3
-rw-r--r--content/browser/renderer_host/gamepad_browser_message_filter.cc9
-rw-r--r--content/browser/renderer_host/gamepad_browser_message_filter.h3
-rw-r--r--content/browser/renderer_host/gpu_message_filter.cc8
-rw-r--r--content/browser/renderer_host/gpu_message_filter.h3
-rw-r--r--content/browser/renderer_host/input/input_router_client.h3
-rw-r--r--content/browser/renderer_host/input/input_router_config_helper.cc2
-rw-r--r--content/browser/renderer_host/input/input_router_impl.cc39
-rw-r--r--content/browser/renderer_host/input/input_router_impl.h8
-rw-r--r--content/browser/renderer_host/input/input_router_impl_perftest.cc7
-rw-r--r--content/browser/renderer_host/input/input_router_impl_unittest.cc137
-rw-r--r--content/browser/renderer_host/input/mock_input_router_client.cc30
-rw-r--r--content/browser/renderer_host/input/mock_input_router_client.h5
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc53
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target.h6
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_android.cc9
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_android.h4
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_aura.cc6
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_aura.h4
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_base.cc11
-rw-r--r--content/browser/renderer_host/input/synthetic_gesture_target_base.h4
-rw-r--r--content/browser/renderer_host/input/synthetic_pinch_gesture.cc62
-rw-r--r--content/browser/renderer_host/input/synthetic_pinch_gesture.h1
-rw-r--r--content/browser/renderer_host/input/touch_action_browsertest.cc3
-rw-r--r--content/browser/renderer_host/input/touch_action_filter.cc4
-rw-r--r--content/browser/renderer_host/input/touch_action_filter_unittest.cc39
-rw-r--r--content/browser/renderer_host/input/touch_emulator.cc12
-rw-r--r--content/browser/renderer_host/input/touch_emulator_unittest.cc29
-rw-r--r--content/browser/renderer_host/input/touch_event_queue.cc21
-rw-r--r--content/browser/renderer_host/input/touch_event_queue.h5
-rw-r--r--content/browser/renderer_host/input/touch_event_queue_unittest.cc93
-rw-r--r--content/browser/renderer_host/input/touch_input_browsertest.cc11
-rw-r--r--content/browser/renderer_host/java/java_bridge_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc52
-rw-r--r--content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h22
-rw-r--r--content/browser/renderer_host/media/audio_input_device_manager.cc51
-rw-r--r--content/browser/renderer_host/media/audio_input_device_manager.h5
-rw-r--r--content/browser/renderer_host/media/audio_input_device_manager_unittest.cc21
-rw-r--r--content/browser/renderer_host/media/audio_input_renderer_host.cc32
-rw-r--r--content/browser/renderer_host/media/audio_input_renderer_host.h9
-rw-r--r--content/browser/renderer_host/media/audio_input_sync_writer.cc12
-rw-r--r--content/browser/renderer_host/media/audio_renderer_host.cc7
-rw-r--r--content/browser/renderer_host/media/audio_renderer_host.h3
-rw-r--r--content/browser/renderer_host/media/audio_renderer_host_unittest.cc21
-rw-r--r--content/browser/renderer_host/media/audio_sync_reader.cc2
-rw-r--r--content/browser/renderer_host/media/audio_sync_reader.h3
-rw-r--r--content/browser/renderer_host/media/device_request_message_filter.cc8
-rw-r--r--content/browser/renderer_host/media/device_request_message_filter.h3
-rw-r--r--content/browser/renderer_host/media/device_request_message_filter_unittest.cc6
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host.cc7
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc53
-rw-r--r--content/browser/renderer_host/media/media_stream_manager.cc24
-rw-r--r--content/browser/renderer_host/media/media_stream_manager_unittest.cc1
-rw-r--r--content/browser/renderer_host/media/media_stream_track_metrics_host.cc9
-rw-r--r--content/browser/renderer_host/media/media_stream_track_metrics_host.h3
-rw-r--r--content/browser/renderer_host/media/media_stream_ui_proxy.cc14
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.cc7
-rw-r--r--content/browser/renderer_host/media/midi_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/media/midi_host.cc7
-rw-r--r--content/browser/renderer_host/media/midi_host.h3
-rw-r--r--content/browser/renderer_host/media/peer_connection_tracker_host.cc7
-rw-r--r--content/browser/renderer_host/media/peer_connection_tracker_host.h3
-rw-r--r--content/browser/renderer_host/media/video_capture_controller.cc6
-rw-r--r--content/browser/renderer_host/media/video_capture_host.cc7
-rw-r--r--content/browser/renderer_host/media/video_capture_host.h3
-rw-r--r--content/browser/renderer_host/media/video_capture_host_unittest.cc1
-rw-r--r--content/browser/renderer_host/media/video_capture_manager.cc4
-rw-r--r--content/browser/renderer_host/media/webrtc_identity_service_host.cc7
-rw-r--r--content/browser/renderer_host/media/webrtc_identity_service_host.h3
-rw-r--r--content/browser/renderer_host/media/webrtc_identity_service_host_unittest.cc15
-rw-r--r--content/browser/renderer_host/memory_benchmark_message_filter.cc7
-rw-r--r--content/browser/renderer_host/memory_benchmark_message_filter.h3
-rw-r--r--content/browser/renderer_host/p2p/socket_dispatcher_host.cc13
-rw-r--r--content/browser/renderer_host/p2p/socket_dispatcher_host.h8
-rw-r--r--content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc10
-rw-r--r--content/browser/renderer_host/pepper/pepper_file_io_host.cc101
-rw-r--r--content/browser/renderer_host/pepper/pepper_file_io_host.h20
-rw-r--r--content/browser/renderer_host/pepper/pepper_file_ref_host.cc25
-rw-r--r--content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc27
-rw-r--r--content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc31
-rw-r--r--content/browser/renderer_host/pepper/pepper_gamepad_host.cc8
-rw-r--r--content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc8
-rw-r--r--content/browser/renderer_host/pepper/pepper_message_filter.cc15
-rw-r--r--content/browser/renderer_host/pepper/pepper_message_filter.h3
-rw-r--r--content/browser/renderer_host/pepper/pepper_network_proxy_host.cc8
-rw-r--r--content/browser/renderer_host/pepper/pepper_printing_host.cc9
-rw-r--r--content/browser/renderer_host/pepper/pepper_renderer_connection.cc21
-rw-r--r--content/browser/renderer_host/pepper/pepper_renderer_connection.h3
-rw-r--r--content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc16
-rw-r--r--content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc37
-rw-r--r--content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc16
-rw-r--r--content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc20
-rw-r--r--content/browser/renderer_host/pepper/quota_reservation.h1
-rw-r--r--content/browser/renderer_host/render_message_filter.cc79
-rw-r--r--content/browser/renderer_host/render_message_filter.h16
-rw-r--r--content/browser/renderer_host/render_process_host_browsertest.cc3
-rw-r--r--content/browser/renderer_host/render_process_host_impl.cc84
-rw-r--r--content/browser/renderer_host/render_process_host_impl.h21
-rw-r--r--content/browser/renderer_host/render_process_host_unittest.cc2
-rw-r--r--content/browser/renderer_host/render_sandbox_host_linux.cc38
-rw-r--r--content/browser/renderer_host/render_sandbox_host_linux.h15
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h17
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc118
-rw-r--r--content/browser/renderer_host/render_view_host_impl.h32
-rw-r--r--content/browser/renderer_host/render_view_host_unittest.cc44
-rw-r--r--content/browser/renderer_host/render_widget_helper.h8
-rw-r--r--content/browser/renderer_host/render_widget_helper_mac.mm58
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.cc70
-rw-r--r--content/browser/renderer_host/render_widget_host_impl.h22
-rw-r--r--content/browser/renderer_host/render_widget_host_unittest.cc79
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc79
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.h7
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc57
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h7
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura_unittest.cc118
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.cc15
-rw-r--r--content/browser/renderer_host/render_widget_host_view_base.h23
-rw-r--r--content/browser/renderer_host/render_widget_host_view_browsertest.cc27
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac.h61
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac.mm379
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac_unittest.mm21
-rw-r--r--content/browser/renderer_host/sandbox_ipc_linux.cc108
-rw-r--r--content/browser/renderer_host/sandbox_ipc_linux.h31
-rw-r--r--content/browser/renderer_host/socket_stream_dispatcher_host.cc35
-rw-r--r--content/browser/renderer_host/socket_stream_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/software_layer_mac.h22
-rw-r--r--content/browser/renderer_host/software_layer_mac.mm66
-rw-r--r--content/browser/renderer_host/text_input_client_mac_unittest.mm8
-rw-r--r--content/browser/renderer_host/text_input_client_message_filter.h3
-rw-r--r--content/browser/renderer_host/text_input_client_message_filter.mm8
-rw-r--r--content/browser/renderer_host/ui_events_helper.cc2
-rw-r--r--content/browser/renderer_host/websocket_dispatcher_host.cc5
-rw-r--r--content/browser/renderer_host/websocket_dispatcher_host.h3
-rw-r--r--content/browser/renderer_host/websocket_dispatcher_host_unittest.cc20
-rw-r--r--content/browser/renderer_host/websocket_host.cc7
-rw-r--r--content/browser/renderer_host/websocket_host.h3
-rw-r--r--content/browser/resolve_proxy_msg_helper.cc5
-rw-r--r--content/browser/resolve_proxy_msg_helper.h3
-rw-r--r--content/browser/resources/service_worker/OWNERS6
-rw-r--r--content/browser/resources/service_worker/serviceworker_internals.css5
-rw-r--r--content/browser/resources/service_worker/serviceworker_internals.html101
-rw-r--r--content/browser/resources/service_worker/serviceworker_internals.js406
-rw-r--r--content/browser/screen_orientation/screen_orientation_dispatcher_host.cc8
-rw-r--r--content/browser/screen_orientation/screen_orientation_dispatcher_host.h2
-rw-r--r--content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc13
-rw-r--r--content/browser/service_worker/OWNERS13
-rw-r--r--content/browser/service_worker/database_proto.target.darwin-arm.mk24
-rw-r--r--content/browser/service_worker/database_proto.target.darwin-arm64.mk10
-rw-r--r--content/browser/service_worker/database_proto.target.darwin-mips.mk12
-rw-r--r--content/browser/service_worker/database_proto.target.darwin-x86.mk12
-rw-r--r--content/browser/service_worker/database_proto.target.darwin-x86_64.mk10
-rw-r--r--content/browser/service_worker/database_proto.target.linux-arm.mk24
-rw-r--r--content/browser/service_worker/database_proto.target.linux-arm64.mk10
-rw-r--r--content/browser/service_worker/database_proto.target.linux-mips.mk12
-rw-r--r--content/browser/service_worker/database_proto.target.linux-x86.mk12
-rw-r--r--content/browser/service_worker/database_proto.target.linux-x86_64.mk10
-rw-r--r--content/browser/service_worker/embedded_worker_instance.cc178
-rw-r--r--content/browser/service_worker/embedded_worker_instance.h35
-rw-r--r--content/browser/service_worker/embedded_worker_instance_unittest.cc35
-rw-r--r--content/browser/service_worker/embedded_worker_registry.cc69
-rw-r--r--content/browser/service_worker/embedded_worker_registry.h16
-rw-r--r--content/browser/service_worker/embedded_worker_test_helper.cc29
-rw-r--r--content/browser/service_worker/service_worker_browsertest.cc42
-rw-r--r--content/browser/service_worker/service_worker_context_core.cc71
-rw-r--r--content/browser/service_worker/service_worker_context_core.h44
-rw-r--r--content/browser/service_worker/service_worker_context_observer.h2
-rw-r--r--content/browser/service_worker/service_worker_context_request_handler.cc30
-rw-r--r--content/browser/service_worker/service_worker_context_request_handler.h1
-rw-r--r--content/browser/service_worker/service_worker_context_unittest.cc42
-rw-r--r--content/browser/service_worker/service_worker_context_wrapper.cc54
-rw-r--r--content/browser/service_worker/service_worker_context_wrapper.h14
-rw-r--r--content/browser/service_worker/service_worker_controllee_request_handler.cc16
-rw-r--r--content/browser/service_worker/service_worker_controllee_request_handler.h1
-rw-r--r--content/browser/service_worker/service_worker_database.cc506
-rw-r--r--content/browser/service_worker/service_worker_database.h281
-rw-r--r--content/browser/service_worker/service_worker_database_unittest.cc619
-rw-r--r--content/browser/service_worker/service_worker_disk_cache.h18
-rw-r--r--content/browser/service_worker/service_worker_dispatcher_host.cc12
-rw-r--r--content/browser/service_worker/service_worker_dispatcher_host.h3
-rw-r--r--content/browser/service_worker/service_worker_dispatcher_host_unittest.cc42
-rw-r--r--content/browser/service_worker/service_worker_info.cc18
-rw-r--r--content/browser/service_worker/service_worker_info.h6
-rw-r--r--content/browser/service_worker/service_worker_internals_ui.cc723
-rw-r--r--content/browser/service_worker/service_worker_internals_ui.h22
-rw-r--r--content/browser/service_worker/service_worker_job_coordinator.cc11
-rw-r--r--content/browser/service_worker/service_worker_job_coordinator.h4
-rw-r--r--content/browser/service_worker/service_worker_process_manager.cc136
-rw-r--r--content/browser/service_worker/service_worker_process_manager.h86
-rw-r--r--content/browser/service_worker/service_worker_provider_host.cc23
-rw-r--r--content/browser/service_worker/service_worker_provider_host.h19
-rw-r--r--content/browser/service_worker/service_worker_provider_host_unittest.cc150
-rw-r--r--content/browser/service_worker/service_worker_read_from_cache_job.cc5
-rw-r--r--content/browser/service_worker/service_worker_read_from_cache_job.h6
-rw-r--r--content/browser/service_worker/service_worker_register_job.cc91
-rw-r--r--content/browser/service_worker/service_worker_register_job.h18
-rw-r--r--content/browser/service_worker/service_worker_registration.cc11
-rw-r--r--content/browser/service_worker/service_worker_registration.h16
-rw-r--r--content/browser/service_worker/service_worker_registration_status.cc8
-rw-r--r--content/browser/service_worker/service_worker_registration_unittest.cc17
-rw-r--r--content/browser/service_worker/service_worker_request_handler.cc29
-rw-r--r--content/browser/service_worker/service_worker_request_handler.h11
-rw-r--r--content/browser/service_worker/service_worker_script_cache_map.cc72
-rw-r--r--content/browser/service_worker/service_worker_script_cache_map.h62
-rw-r--r--content/browser/service_worker/service_worker_storage.cc747
-rw-r--r--content/browser/service_worker/service_worker_storage.h151
-rw-r--r--content/browser/service_worker/service_worker_storage_unittest.cc215
-rw-r--r--content/browser/service_worker/service_worker_url_request_job.cc129
-rw-r--r--content/browser/service_worker/service_worker_url_request_job.h46
-rw-r--r--content/browser/service_worker/service_worker_url_request_job_unittest.cc166
-rw-r--r--content/browser/service_worker/service_worker_utils.cc20
-rw-r--r--content/browser/service_worker/service_worker_utils_unittest.cc25
-rw-r--r--content/browser/service_worker/service_worker_version.cc66
-rw-r--r--content/browser/service_worker/service_worker_version.h40
-rw-r--r--content/browser/service_worker/service_worker_write_to_cache_job.cc320
-rw-r--r--content/browser/service_worker/service_worker_write_to_cache_job.h117
-rw-r--r--content/browser/shared_worker/shared_worker_host.cc45
-rw-r--r--content/browser/shared_worker/shared_worker_message_filter.cc17
-rw-r--r--content/browser/shared_worker/shared_worker_message_filter.h9
-rw-r--r--content/browser/shared_worker/shared_worker_service_impl_unittest.cc20
-rw-r--r--content/browser/site_instance_impl.cc12
-rw-r--r--content/browser/site_instance_impl.h12
-rw-r--r--content/browser/site_per_process_browsertest.cc22
-rw-r--r--content/browser/speech/proto/speech_proto.target.darwin-arm.mk24
-rw-r--r--content/browser/speech/proto/speech_proto.target.darwin-arm64.mk10
-rw-r--r--content/browser/speech/proto/speech_proto.target.darwin-mips.mk12
-rw-r--r--content/browser/speech/proto/speech_proto.target.darwin-x86.mk12
-rw-r--r--content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk10
-rw-r--r--content/browser/speech/proto/speech_proto.target.linux-arm.mk24
-rw-r--r--content/browser/speech/proto/speech_proto.target.linux-arm64.mk10
-rw-r--r--content/browser/speech/proto/speech_proto.target.linux-mips.mk12
-rw-r--r--content/browser/speech/proto/speech_proto.target.linux-x86.mk12
-rw-r--r--content/browser/speech/proto/speech_proto.target.linux-x86_64.mk10
-rw-r--r--content/browser/speech/speech_recognition_dispatcher_host.cc20
-rw-r--r--content/browser/speech/speech_recognition_dispatcher_host.h5
-rw-r--r--content/browser/speech/speech_recognizer_impl.h2
-rw-r--r--content/browser/storage_partition_impl_map.cc12
-rw-r--r--content/browser/streams/stream_handle_impl.cc18
-rw-r--r--content/browser/streams/stream_handle_impl.h4
-rw-r--r--content/browser/tracing/trace_message_filter.cc7
-rw-r--r--content/browser/tracing/trace_message_filter.h3
-rw-r--r--content/browser/tracing/tracing_controller_impl.cc53
-rw-r--r--content/browser/vibration/vibration_message_filter.cc9
-rw-r--r--content/browser/vibration/vibration_message_filter.h3
-rw-r--r--content/browser/web_contents/aura/gesture_nav_simple.cc1
-rw-r--r--content/browser/web_contents/aura/overscroll_navigation_overlay.cc5
-rw-r--r--content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc5
-rw-r--r--content/browser/web_contents/aura/shadow_layer_delegate.cc2
-rw-r--r--content/browser/web_contents/touch_editable_impl_aura.cc8
-rw-r--r--content/browser/web_contents/touch_editable_impl_aura_browsertest.cc31
-rw-r--r--content/browser/web_contents/web_contents_impl.cc506
-rw-r--r--content/browser/web_contents/web_contents_impl.h106
-rw-r--r--content/browser/web_contents/web_contents_impl_browsertest.cc86
-rw-r--r--content/browser/web_contents/web_contents_impl_unittest.cc108
-rw-r--r--content/browser/web_contents/web_contents_view_aura.cc76
-rw-r--r--content/browser/web_contents/web_contents_view_aura.h10
-rw-r--r--content/browser/web_contents/web_contents_view_aura_browsertest.cc39
-rw-r--r--content/browser/web_contents/web_drag_source_mac.mm4
-rw-r--r--content/browser/webui/url_data_manager_backend.cc6
-rw-r--r--content/browser/webui/web_ui_impl.cc2
-rw-r--r--content/browser/webui/web_ui_impl.h2
-rw-r--r--content/browser/webui/web_ui_mojo_browsertest.cc7
-rw-r--r--content/browser/worker_host/worker_message_filter.cc7
-rw-r--r--content/browser/worker_host/worker_message_filter.h3
-rw-r--r--content/browser/worker_host/worker_process_host.cc31
-rw-r--r--content/browser/worker_host/worker_process_host.h6
-rw-r--r--content/browser/zygote_host/zygote_host_impl_linux.cc4
-rw-r--r--content/browser/zygote_host/zygote_host_impl_linux.h1
-rw-r--r--content/child/blink_platform_impl.cc8
-rw-r--r--content/child/blink_platform_impl.h3
-rw-r--r--content/child/child_thread.cc2
-rw-r--r--content/child/child_thread.h11
-rw-r--r--content/child/content_child_helpers.cc4
-rw-r--r--content/child/fileapi/webfilewriter_impl.cc1
-rw-r--r--content/child/fling_animator_impl_android.cc5
-rw-r--r--content/child/ftp_directory_listing_response_delegate.cc12
-rw-r--r--content/child/ftp_directory_listing_response_delegate.h3
-rw-r--r--content/child/mojo/mojo_application.cc8
-rw-r--r--content/child/mojo/mojo_application.h12
-rw-r--r--content/child/multipart_response_delegate_unittest.cc676
-rw-r--r--content/child/npapi/plugin_url_fetcher.cc13
-rw-r--r--content/child/npapi/plugin_url_fetcher.h8
-rw-r--r--content/child/resource_dispatcher.cc88
-rw-r--r--content/child/resource_dispatcher.h14
-rw-r--r--content/child/resource_dispatcher_unittest.cc34
-rw-r--r--content/child/runtime_features.cc12
-rw-r--r--content/child/service_worker/OWNERS6
-rw-r--r--content/child/site_isolation_policy.cc13
-rw-r--r--content/child/site_isolation_policy.h14
-rw-r--r--content/child/sync_load_response.h4
-rw-r--r--content/child/web_url_loader_impl.cc29
-rw-r--r--content/child/web_url_loader_impl.h8
-rw-r--r--content/child/webcrypto/jwk.cc662
-rw-r--r--content/child/webcrypto/platform_crypto.h95
-rw-r--r--content/child/webcrypto/platform_crypto_nss.cc502
-rw-r--r--content/child/webcrypto/platform_crypto_openssl.cc71
-rw-r--r--content/child/webcrypto/shared_crypto.cc413
-rw-r--r--content/child/webcrypto/shared_crypto.h23
-rw-r--r--content/child/webcrypto/shared_crypto_unittest.cc1930
-rw-r--r--content/child/webcrypto/status.cc17
-rw-r--r--content/child/webcrypto/status.h21
-rw-r--r--content/child/webcrypto/webcrypto_impl.cc22
-rw-r--r--content/child/webcrypto/webcrypto_impl.h9
-rw-r--r--content/child/webcrypto/webcrypto_util.cc42
-rw-r--r--content/child/webcrypto/webcrypto_util.h13
-rw-r--r--content/child/webmessageportchannel_impl.cc3
-rw-r--r--content/common/BUILD.gn269
-rw-r--r--content/common/DEPS1
-rw-r--r--content/common/accessibility_messages.h6
-rw-r--r--content/common/android/OWNERS1
-rw-r--r--content/common/battery_status_messages.h32
-rw-r--r--content/common/browser_plugin/browser_plugin_constants.cc36
-rw-r--r--content/common/browser_plugin/browser_plugin_constants.h35
-rw-r--r--content/common/browser_plugin/browser_plugin_messages.h13
-rw-r--r--content/common/cc_messages.cc8
-rw-r--r--content/common/cc_messages_unittest.cc2
-rw-r--r--content/common/child_process_host_impl.cc7
-rw-r--r--content/common/child_process_host_impl.h1
-rw-r--r--content/common/common.gni14
-rw-r--r--content/common/content_message_generator.h4
-rw-r--r--content/common/content_param_traits_macros.h15
-rw-r--r--content/common/frame_messages.h38
-rw-r--r--content/common/geolocation_messages.h29
-rw-r--r--content/common/gpu/client/command_buffer_proxy_impl.cc1
-rw-r--r--content/common/gpu/client/gl_helper.cc11
-rw-r--r--content/common/gpu/client/gl_helper.h6
-rw-r--r--content/common/gpu/client/gl_helper_unittest.cc12
-rw-r--r--content/common/gpu/client/gpu_channel_host.cc13
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl.h6
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_android.cc6
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_linux.cc6
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_mac.cc6
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_shm.cc10
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_shm.h2
-rw-r--r--content/common/gpu/client/gpu_memory_buffer_impl_win.cc6
-rw-r--r--content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc987
-rw-r--r--content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h551
-rw-r--r--content/common/gpu/gpu_channel.cc61
-rw-r--r--content/common/gpu/gpu_channel.h12
-rw-r--r--content/common/gpu/gpu_channel_manager.cc20
-rw-r--r--content/common/gpu/gpu_channel_manager.h4
-rw-r--r--content/common/gpu/image_transport_surface.cc12
-rw-r--r--content/common/gpu/image_transport_surface_mac.cc3
-rw-r--r--content/common/gpu/media/dxva_video_decode_accelerator.cc2
-rw-r--r--content/common/gpu/media/exynos_v4l2_video_device.cc2
-rw-r--r--content/common/gpu/media/gpu_video_decode_accelerator.cc3
-rw-r--r--content/common/gpu/media/gpu_video_encode_accelerator.cc3
-rw-r--r--content/common/gpu/media/v4l2_image_processor.cc4
-rw-r--r--content/common/gpu/media/v4l2_video_decode_accelerator.cc15
-rw-r--r--content/common/gpu/media/v4l2_video_decode_accelerator.h5
-rw-r--r--content/common/gpu/media/v4l2_video_encode_accelerator.cc4
-rw-r--r--content/common/gpu/media/video_decode_accelerator_impl.cc4
-rw-r--r--content/common/gpu/media/video_decode_accelerator_impl.h22
-rw-r--r--content/common/gpu/media/video_decode_accelerator_unittest.cc2
-rw-r--r--content/common/gpu/media/video_encode_accelerator_unittest.cc108
-rw-r--r--content/common/gpu/sync_point_manager.cc13
-rw-r--r--content/common/gpu/sync_point_manager.h2
-rw-r--r--content/common/host_shared_bitmap_manager.cc21
-rw-r--r--content/common/input/input_param_traits_unittest.cc6
-rw-r--r--content/common/input/synthetic_pinch_gesture_params.cc6
-rw-r--r--content/common/input/synthetic_pinch_gesture_params.h3
-rw-r--r--content/common/input_messages.h32
-rw-r--r--content/common/media/media_player_messages_android.h8
-rw-r--r--content/common/p2p_messages.h4
-rw-r--r--content/common/page_state_serialization.cc14
-rw-r--r--content/common/page_state_serialization.h2
-rw-r--r--content/common/page_state_serialization_unittest.cc3
-rw-r--r--content/common/resource_messages.h16
-rw-r--r--content/common/sandbox_linux/bpf_gpu_policy_linux.cc4
-rw-r--r--content/common/sandbox_linux/sandbox_linux.cc13
-rw-r--r--content/common/sandbox_linux/sandbox_linux.h8
-rw-r--r--content/common/sandbox_win.cc11
-rw-r--r--content/common/savable_url_schemes.cc8
-rw-r--r--content/common/service_worker/OWNERS6
-rw-r--r--content/common/service_worker/embedded_worker_messages.h1
-rw-r--r--content/common/service_worker/service_worker_messages.h2
-rw-r--r--content/common/service_worker/service_worker_types.cc9
-rw-r--r--content/common/service_worker/service_worker_types.h6
-rw-r--r--content/common/swapped_out_messages.cc2
-rw-r--r--content/common/view_messages.h117
-rw-r--r--content/common/worker_messages.h2
-rw-r--r--content/common_aidl.target.darwin-arm.mk24
-rw-r--r--content/common_aidl.target.darwin-arm64.mk10
-rw-r--r--content/common_aidl.target.darwin-mips.mk12
-rw-r--r--content/common_aidl.target.darwin-x86.mk12
-rw-r--r--content/common_aidl.target.darwin-x86_64.mk10
-rw-r--r--content/common_aidl.target.linux-arm.mk24
-rw-r--r--content/common_aidl.target.linux-arm64.mk10
-rw-r--r--content/common_aidl.target.linux-mips.mk12
-rw-r--r--content/common_aidl.target.linux-x86.mk12
-rw-r--r--content/common_aidl.target.linux-x86_64.mk10
-rw-r--r--content/content.gyp51
-rw-r--r--content/content_app.gypi2
-rw-r--r--content/content_app_both.target.darwin-arm.mk40
-rw-r--r--content/content_app_both.target.darwin-arm64.mk26
-rw-r--r--content/content_app_both.target.darwin-mips.mk28
-rw-r--r--content/content_app_both.target.darwin-x86.mk28
-rw-r--r--content/content_app_both.target.darwin-x86_64.mk26
-rw-r--r--content/content_app_both.target.linux-arm.mk40
-rw-r--r--content/content_app_both.target.linux-arm64.mk26
-rw-r--r--content/content_app_both.target.linux-mips.mk28
-rw-r--r--content/content_app_both.target.linux-x86.mk28
-rw-r--r--content/content_app_both.target.linux-x86_64.mk26
-rw-r--r--content/content_browser.gypi2711
-rw-r--r--content/content_browser.target.darwin-arm.mk53
-rw-r--r--content/content_browser.target.darwin-arm64.mk39
-rw-r--r--content/content_browser.target.darwin-mips.mk41
-rw-r--r--content/content_browser.target.darwin-x86.mk41
-rw-r--r--content/content_browser.target.darwin-x86_64.mk39
-rw-r--r--content/content_browser.target.linux-arm.mk53
-rw-r--r--content/content_browser.target.linux-arm64.mk39
-rw-r--r--content/content_browser.target.linux-mips.mk41
-rw-r--r--content/content_browser.target.linux-x86.mk41
-rw-r--r--content/content_browser.target.linux-x86_64.mk39
-rw-r--r--content/content_child.gypi420
-rw-r--r--content/content_child.target.darwin-arm.mk40
-rw-r--r--content/content_child.target.darwin-arm64.mk26
-rw-r--r--content/content_child.target.darwin-mips.mk28
-rw-r--r--content/content_child.target.darwin-x86.mk28
-rw-r--r--content/content_child.target.darwin-x86_64.mk26
-rw-r--r--content/content_child.target.linux-arm.mk40
-rw-r--r--content/content_child.target.linux-arm64.mk26
-rw-r--r--content/content_child.target.linux-mips.mk28
-rw-r--r--content/content_child.target.linux-x86.mk28
-rw-r--r--content/content_child.target.linux-x86_64.mk26
-rw-r--r--content/content_common.gypi890
-rw-r--r--content/content_common.target.darwin-arm.mk55
-rw-r--r--content/content_common.target.darwin-arm64.mk41
-rw-r--r--content/content_common.target.darwin-mips.mk43
-rw-r--r--content/content_common.target.darwin-x86.mk43
-rw-r--r--content/content_common.target.darwin-x86_64.mk41
-rw-r--r--content/content_common.target.linux-arm.mk55
-rw-r--r--content/content_common.target.linux-arm64.mk41
-rw-r--r--content/content_common.target.linux-mips.mk43
-rw-r--r--content/content_common.target.linux-x86.mk43
-rw-r--r--content/content_common.target.linux-x86_64.mk41
-rw-r--r--content/content_common_mojo_bindings.gypi5
-rw-r--r--content/content_common_mojo_bindings.target.darwin-arm.mk28
-rw-r--r--content/content_common_mojo_bindings.target.darwin-arm64.mk14
-rw-r--r--content/content_common_mojo_bindings.target.darwin-mips.mk16
-rw-r--r--content/content_common_mojo_bindings.target.darwin-x86.mk16
-rw-r--r--content/content_common_mojo_bindings.target.darwin-x86_64.mk14
-rw-r--r--content/content_common_mojo_bindings.target.linux-arm.mk28
-rw-r--r--content/content_common_mojo_bindings.target.linux-arm64.mk14
-rw-r--r--content/content_common_mojo_bindings.target.linux-mips.mk16
-rw-r--r--content/content_common_mojo_bindings.target.linux-x86.mk16
-rw-r--r--content/content_common_mojo_bindings.target.linux-x86_64.mk14
-rw-r--r--content/content_gpu.gypi2
-rw-r--r--content/content_gpu.target.darwin-arm.mk40
-rw-r--r--content/content_gpu.target.darwin-arm64.mk26
-rw-r--r--content/content_gpu.target.darwin-mips.mk28
-rw-r--r--content/content_gpu.target.darwin-x86.mk28
-rw-r--r--content/content_gpu.target.darwin-x86_64.mk26
-rw-r--r--content/content_gpu.target.linux-arm.mk40
-rw-r--r--content/content_gpu.target.linux-arm64.mk26
-rw-r--r--content/content_gpu.target.linux-mips.mk28
-rw-r--r--content/content_gpu.target.linux-x86.mk28
-rw-r--r--content/content_gpu.target.linux-x86_64.mk26
-rw-r--r--content/content_jni.gypi1
-rw-r--r--content/content_jni_headers.target.darwin-arm.mk24
-rw-r--r--content/content_jni_headers.target.darwin-arm64.mk10
-rw-r--r--content/content_jni_headers.target.darwin-mips.mk12
-rw-r--r--content/content_jni_headers.target.darwin-x86.mk12
-rw-r--r--content/content_jni_headers.target.darwin-x86_64.mk10
-rw-r--r--content/content_jni_headers.target.linux-arm.mk24
-rw-r--r--content/content_jni_headers.target.linux-arm64.mk10
-rw-r--r--content/content_jni_headers.target.linux-mips.mk12
-rw-r--r--content/content_jni_headers.target.linux-x86.mk12
-rw-r--r--content/content_jni_headers.target.linux-x86_64.mk10
-rw-r--r--content/content_plugin.gypi2
-rw-r--r--content/content_ppapi_plugin.gypi2
-rw-r--r--content/content_renderer.gypi1331
-rw-r--r--content/content_renderer.target.darwin-arm.mk60
-rw-r--r--content/content_renderer.target.darwin-arm64.mk46
-rw-r--r--content/content_renderer.target.darwin-mips.mk48
-rw-r--r--content/content_renderer.target.darwin-x86.mk48
-rw-r--r--content/content_renderer.target.darwin-x86_64.mk46
-rw-r--r--content/content_renderer.target.linux-arm.mk60
-rw-r--r--content/content_renderer.target.linux-arm64.mk46
-rw-r--r--content/content_renderer.target.linux-mips.mk48
-rw-r--r--content/content_renderer.target.linux-x86.mk48
-rw-r--r--content/content_renderer.target.linux-x86_64.mk46
-rw-r--r--content/content_shell.gypi50
-rw-r--r--content/content_strings_grd.target.darwin-arm.mk141
-rw-r--r--content/content_strings_grd.target.darwin-arm64.mk141
-rw-r--r--content/content_strings_grd.target.darwin-mips.mk141
-rw-r--r--content/content_strings_grd.target.darwin-x86.mk141
-rw-r--r--content/content_strings_grd.target.darwin-x86_64.mk141
-rw-r--r--content/content_strings_grd.target.linux-arm.mk141
-rw-r--r--content/content_strings_grd.target.linux-arm64.mk141
-rw-r--r--content/content_strings_grd.target.linux-mips.mk141
-rw-r--r--content/content_strings_grd.target.linux-x86.mk141
-rw-r--r--content/content_strings_grd.target.linux-x86_64.mk141
-rw-r--r--content/content_tests.gypi110
-rw-r--r--content/content_utility.gypi2
-rw-r--r--content/content_utility.target.darwin-arm.mk28
-rw-r--r--content/content_utility.target.darwin-arm64.mk14
-rw-r--r--content/content_utility.target.darwin-mips.mk16
-rw-r--r--content/content_utility.target.darwin-x86.mk16
-rw-r--r--content/content_utility.target.darwin-x86_64.mk14
-rw-r--r--content/content_utility.target.linux-arm.mk28
-rw-r--r--content/content_utility.target.linux-arm64.mk14
-rw-r--r--content/content_utility.target.linux-mips.mk16
-rw-r--r--content/content_utility.target.linux-x86.mk16
-rw-r--r--content/content_utility.target.linux-x86_64.mk14
-rw-r--r--content/content_worker.gypi2
-rw-r--r--content/gesture_event_type_java.target.darwin-arm.mk24
-rw-r--r--content/gesture_event_type_java.target.darwin-arm64.mk10
-rw-r--r--content/gesture_event_type_java.target.darwin-mips.mk12
-rw-r--r--content/gesture_event_type_java.target.darwin-x86.mk12
-rw-r--r--content/gesture_event_type_java.target.darwin-x86_64.mk10
-rw-r--r--content/gesture_event_type_java.target.linux-arm.mk24
-rw-r--r--content/gesture_event_type_java.target.linux-arm64.mk10
-rw-r--r--content/gesture_event_type_java.target.linux-mips.mk12
-rw-r--r--content/gesture_event_type_java.target.linux-x86.mk12
-rw-r--r--content/gesture_event_type_java.target.linux-x86_64.mk10
-rw-r--r--content/gpu/gpu_child_thread.cc5
-rw-r--r--content/gpu/gpu_main.cc26
-rw-r--r--content/java_set_jni_headers.target.darwin-arm.mk24
-rw-r--r--content/java_set_jni_headers.target.darwin-arm64.mk10
-rw-r--r--content/java_set_jni_headers.target.darwin-mips.mk12
-rw-r--r--content/java_set_jni_headers.target.darwin-x86.mk12
-rw-r--r--content/java_set_jni_headers.target.darwin-x86_64.mk10
-rw-r--r--content/java_set_jni_headers.target.linux-arm.mk24
-rw-r--r--content/java_set_jni_headers.target.linux-arm64.mk10
-rw-r--r--content/java_set_jni_headers.target.linux-mips.mk12
-rw-r--r--content/java_set_jni_headers.target.linux-x86.mk12
-rw-r--r--content/java_set_jni_headers.target.linux-x86_64.mk10
-rw-r--r--content/motionevent_jni_headers.target.darwin-arm.mk24
-rw-r--r--content/motionevent_jni_headers.target.darwin-arm64.mk10
-rw-r--r--content/motionevent_jni_headers.target.darwin-mips.mk12
-rw-r--r--content/motionevent_jni_headers.target.darwin-x86.mk12
-rw-r--r--content/motionevent_jni_headers.target.darwin-x86_64.mk10
-rw-r--r--content/motionevent_jni_headers.target.linux-arm.mk24
-rw-r--r--content/motionevent_jni_headers.target.linux-arm64.mk10
-rw-r--r--content/motionevent_jni_headers.target.linux-mips.mk12
-rw-r--r--content/motionevent_jni_headers.target.linux-x86.mk12
-rw-r--r--content/motionevent_jni_headers.target.linux-x86_64.mk10
-rw-r--r--content/page_transition_types_java.target.darwin-arm.mk24
-rw-r--r--content/page_transition_types_java.target.darwin-arm64.mk10
-rw-r--r--content/page_transition_types_java.target.darwin-mips.mk12
-rw-r--r--content/page_transition_types_java.target.darwin-x86.mk12
-rw-r--r--content/page_transition_types_java.target.darwin-x86_64.mk10
-rw-r--r--content/page_transition_types_java.target.linux-arm.mk24
-rw-r--r--content/page_transition_types_java.target.linux-arm64.mk10
-rw-r--r--content/page_transition_types_java.target.linux-mips.mk12
-rw-r--r--content/page_transition_types_java.target.linux-x86.mk12
-rw-r--r--content/page_transition_types_java.target.linux-x86_64.mk10
-rw-r--r--content/plugin/webplugin_proxy.cc4
-rw-r--r--content/popup_item_type_java.target.darwin-arm.mk24
-rw-r--r--content/popup_item_type_java.target.darwin-arm64.mk10
-rw-r--r--content/popup_item_type_java.target.darwin-mips.mk12
-rw-r--r--content/popup_item_type_java.target.darwin-x86.mk12
-rw-r--r--content/popup_item_type_java.target.darwin-x86_64.mk10
-rw-r--r--content/popup_item_type_java.target.linux-arm.mk24
-rw-r--r--content/popup_item_type_java.target.linux-arm64.mk10
-rw-r--r--content/popup_item_type_java.target.linux-mips.mk12
-rw-r--r--content/popup_item_type_java.target.linux-x86.mk12
-rw-r--r--content/popup_item_type_java.target.linux-x86_64.mk10
-rw-r--r--content/ppapi_plugin/ppapi_plugin_main.cc7
-rw-r--r--content/public/android/java/resource_map/OWNERS2
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java4
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentReadbackHandler.java46
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentView.java49
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java94
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java95
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/JellyBeanContentView.java12
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/LoadUrlParams.java15
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java21
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java15
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java20
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java28
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java30
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/ChromeDatePickerDialog.java43
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/CursorController.java31
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/DateTimePickerDialog.java13
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/HandleView.java16
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java7
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java3
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/InsertionHandleController.java2
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java13
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java12
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/SelectionHandleController.java2
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java13
-rw-r--r--content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java5
-rw-r--r--content/public/android/java/strings/translations/android_content_strings_el.xtb4
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java5
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java4
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/MediaResourceGetterTest.java20
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java29
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java93
-rw-r--r--content/public/app/content_main_delegate.cc4
-rw-r--r--content/public/app/content_main_delegate.h8
-rw-r--r--content/public/browser/BUILD.gn9
-rw-r--r--content/public/browser/android/OWNERS1
-rw-r--r--content/public/browser/android/compositor.h10
-rw-r--r--content/public/browser/android/compositor_client.h9
-rw-r--r--content/public/browser/android/synchronous_compositor.h23
-rw-r--r--content/public/browser/android/synchronous_compositor_client.h14
-rw-r--r--content/public/browser/blob_handle.h25
-rw-r--r--content/public/browser/browser_child_process_host.h3
-rw-r--r--content/public/browser/browser_context.h23
-rw-r--r--content/public/browser/browser_message_filter.cc20
-rw-r--r--content/public/browser/browser_message_filter.h3
-rw-r--r--content/public/browser/browser_plugin_guest_delegate.cc44
-rw-r--r--content/public/browser/browser_plugin_guest_delegate.h119
-rw-r--r--content/public/browser/browser_plugin_guest_manager.cc31
-rw-r--r--content/public/browser/browser_plugin_guest_manager.h (renamed from content/public/browser/browser_plugin_guest_manager_delegate.h)43
-rw-r--r--content/public/browser/browser_plugin_guest_manager_delegate.cc25
-rw-r--r--content/public/browser/child_process_data.h5
-rw-r--r--content/public/browser/content_browser_client.cc19
-rw-r--r--content/public/browser/content_browser_client.h38
-rw-r--r--content/public/browser/devtools_agent_host.h10
-rw-r--r--content/public/browser/devtools_external_agent_proxy.h9
-rw-r--r--content/public/browser/devtools_external_agent_proxy_delegate.h9
-rw-r--r--content/public/browser/devtools_manager_delegate.h33
-rwxr-xr-xcontent/public/browser/devtools_protocol_constants_generator.py (renamed from content/browser/devtools/devtools_protocol_constants_generator.py)58
-rw-r--r--content/public/browser/geolocation_permission_context.h7
-rw-r--r--content/public/browser/geolocation_provider.h47
-rw-r--r--content/public/browser/host_zoom_map.h10
-rw-r--r--content/public/browser/navigation_controller.h20
-rw-r--r--content/public/browser/render_process_host.h8
-rw-r--r--content/public/browser/render_view_host.h3
-rw-r--r--content/public/browser/render_widget_host_view.h6
-rw-r--r--content/public/browser/service_worker_context.h5
-rw-r--r--content/public/browser/site_instance.h5
-rw-r--r--content/public/browser/stream_handle.h3
-rw-r--r--content/public/browser/web_contents.cc7
-rw-r--r--content/public/browser/web_contents.h45
-rw-r--r--content/public/browser/web_contents_delegate.cc2
-rw-r--r--content/public/browser/web_contents_delegate.h3
-rw-r--r--content/public/browser/web_contents_observer.cc6
-rw-r--r--content/public/browser/web_contents_observer.h4
-rw-r--r--content/public/browser/web_ui.h3
-rw-r--r--content/public/browser/zygote_host_linux.h3
-rw-r--r--content/public/child/request_peer.h22
-rw-r--r--content/public/common/BUILD.gn20
-rw-r--r--content/public/common/browser_plugin_permission_type.h21
-rw-r--r--content/public/common/common_param_traits_macros.h7
-rw-r--r--content/public/common/content_switches.cc51
-rw-r--r--content/public/common/content_switches.h17
-rw-r--r--content/public/common/page_state.cc1
-rw-r--r--content/public/common/resource_response.h4
-rw-r--r--content/public/common/resource_response_info.cc26
-rw-r--r--content/public/common/resource_response_info.h104
-rw-r--r--content/public/common/url_constants.cc9
-rw-r--r--content/public/common/url_constants.h8
-rw-r--r--content/public/common/zygote_fork_delegate_linux.h6
-rw-r--r--content/public/renderer/BUILD.gn30
-rw-r--r--content/public/renderer/media_stream_video_sink.cc3
-rw-r--r--content/public/renderer/media_stream_video_sink.h16
-rw-r--r--content/public/renderer/pepper_plugin_instance.h3
-rw-r--r--content/public/renderer/render_frame_observer.h10
-rw-r--r--content/public/renderer/render_view_observer.h3
-rw-r--r--content/public/renderer/renderer_ppapi_host.h17
-rw-r--r--content/public/renderer/v8_value_converter.h3
-rw-r--r--content/public/test/browser_test_utils.cc20
-rw-r--r--content/public/test/browser_test_utils.h3
-rw-r--r--content/public/test/content_browser_test.cc4
-rw-r--r--content/public/test/content_browser_test_utils.cc54
-rw-r--r--content/public/test/content_browser_test_utils.h30
-rw-r--r--content/public/test/javascript_test_observer.cc92
-rw-r--r--content/public/test/javascript_test_observer.h98
-rw-r--r--content/public/test/layouttest_support.h7
-rw-r--r--content/public/test/mock_download_item.cc25
-rw-r--r--content/public/test/mock_download_item.h20
-rw-r--r--content/public/test/mock_render_process_host.cc6
-rw-r--r--content/public/test/mock_render_process_host.h8
-rw-r--r--content/public/test/mock_render_thread.cc7
-rw-r--r--content/public/test/render_view_test.cc12
-rw-r--r--content/public/test/render_view_test.h8
-rw-r--r--content/public/test/test_browser_context.cc11
-rw-r--r--content/public/test/test_browser_context.h11
-rw-r--r--content/public/test/test_renderer_host.cc5
-rw-r--r--content/public/test/test_renderer_host.h1
-rw-r--r--content/public/test/unittest_test_suite.cc29
-rw-r--r--content/public/test/unittest_test_suite.h4
-rw-r--r--content/renderer/BUILD.gn182
-rw-r--r--content/renderer/accessibility/blink_ax_tree_source.cc10
-rw-r--r--content/renderer/accessibility/blink_ax_tree_source.h3
-rw-r--r--content/renderer/accessibility/renderer_accessibility.cc86
-rw-r--r--content/renderer/accessibility/renderer_accessibility.h7
-rw-r--r--content/renderer/accessibility/renderer_accessibility_browsertest.cc37
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.cc28
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.h11
-rw-r--r--content/renderer/android/synchronous_compositor_factory.h2
-rw-r--r--content/renderer/battery_status/OWNERS1
-rw-r--r--content/renderer/battery_status/battery_status_dispatcher.cc55
-rw-r--r--content/renderer/battery_status/battery_status_dispatcher.h44
-rw-r--r--content/renderer/battery_status/battery_status_dispatcher_unittest.cc123
-rw-r--r--content/renderer/browser_plugin/browser_plugin.cc24
-rw-r--r--content/renderer/browser_plugin/browser_plugin.h15
-rw-r--r--content/renderer/browser_plugin/browser_plugin_bindings.cc40
-rw-r--r--content/renderer/browser_plugin/browser_plugin_browsertest.cc23
-rw-r--r--content/renderer/browser_plugin/browser_plugin_manager_impl.cc1
-rw-r--r--content/renderer/browser_plugin/browser_plugin_manager_impl.h3
-rw-r--r--content/renderer/device_sensors/device_motion_event_pump_unittest.cc58
-rw-r--r--content/renderer/device_sensors/device_orientation_event_pump_unittest.cc93
-rw-r--r--content/renderer/devtools/devtools_agent.cc17
-rw-r--r--content/renderer/devtools/devtools_agent.h3
-rw-r--r--content/renderer/gpu/compositor_output_surface.cc2
-rw-r--r--content/renderer/gpu/compositor_software_output_device.cc28
-rw-r--r--content/renderer/gpu/compositor_software_output_device.h2
-rw-r--r--content/renderer/gpu/gpu_benchmarking_extension.cc289
-rw-r--r--content/renderer/gpu/render_widget_compositor.cc28
-rw-r--r--content/renderer/gpu/render_widget_compositor.h10
-rw-r--r--content/renderer/history_controller.cc16
-rw-r--r--content/renderer/history_controller.h2
-rw-r--r--content/renderer/history_serialization.cc3
-rw-r--r--content/renderer/ico_image_decoder_unittest.cc3
-rw-r--r--content/renderer/image_loading_helper.cc4
-rw-r--r--content/renderer/input/input_event_filter.cc69
-rw-r--r--content/renderer/input/input_event_filter.h14
-rw-r--r--content/renderer/input/input_event_filter_unittest.cc31
-rw-r--r--content/renderer/java/gin_java_bridge_dispatcher.cc125
-rw-r--r--content/renderer/java/gin_java_bridge_dispatcher.h72
-rw-r--r--content/renderer/java/gin_java_bridge_object.cc165
-rw-r--r--content/renderer/java/gin_java_bridge_object.h70
-rw-r--r--content/renderer/java/gin_java_bridge_value_converter.cc163
-rw-r--r--content/renderer/java/gin_java_bridge_value_converter.h46
-rw-r--r--content/renderer/java/gin_java_bridge_value_converter_unittest.cc138
-rw-r--r--content/renderer/java/java_bridge_dispatcher.cc10
-rw-r--r--content/renderer/java/java_bridge_dispatcher.h2
-rw-r--r--content/renderer/load_progress_tracker.cc110
-rw-r--r--content/renderer/load_progress_tracker.h48
-rw-r--r--content/renderer/media/android/media_source_delegate.cc74
-rw-r--r--content/renderer/media/android/media_source_delegate.h12
-rw-r--r--content/renderer/media/android/renderer_demuxer_android.cc8
-rw-r--r--content/renderer/media/android/renderer_demuxer_android.h1
-rw-r--r--content/renderer/media/android/renderer_media_player_manager.cc147
-rw-r--r--content/renderer/media/android/renderer_media_player_manager.h72
-rw-r--r--content/renderer/media/android/stream_texture_factory_impl.cc10
-rw-r--r--content/renderer/media/android/stream_texture_factory_impl.h6
-rw-r--r--content/renderer/media/android/stream_texture_factory_synchronous_impl.cc10
-rw-r--r--content/renderer/media/android/stream_texture_factory_synchronous_impl.h6
-rw-r--r--content/renderer/media/android/webmediaplayer_android.cc94
-rw-r--r--content/renderer/media/android/webmediaplayer_android.h25
-rw-r--r--content/renderer/media/buffered_data_source_host_impl.cc4
-rw-r--r--content/renderer/media/buffered_data_source_host_impl.h9
-rw-r--r--content/renderer/media/cdm_session_adapter.cc7
-rw-r--r--content/renderer/media/cdm_session_adapter.h7
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.cc8
-rw-r--r--content/renderer/media/crypto/content_decryption_module_factory.h4
-rw-r--r--content/renderer/media/crypto/ppapi_decryptor.cc2
-rw-r--r--content/renderer/media/crypto/ppapi_decryptor.h2
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.cc11
-rw-r--r--content/renderer/media/crypto/proxy_decryptor.h8
-rw-r--r--content/renderer/media/crypto/proxy_media_keys.cc (renamed from content/renderer/media/android/proxy_media_keys.cc)18
-rw-r--r--content/renderer/media/crypto/proxy_media_keys.h (renamed from content/renderer/media/android/proxy_media_keys.h)28
-rw-r--r--content/renderer/media/crypto/renderer_cdm_manager.cc143
-rw-r--r--content/renderer/media/crypto/renderer_cdm_manager.h90
-rw-r--r--content/renderer/media/media_stream_audio_processor.cc97
-rw-r--r--content/renderer/media/media_stream_audio_processor.h9
-rw-r--r--content/renderer/media/media_stream_audio_processor_options.cc186
-rw-r--r--content/renderer/media/media_stream_audio_processor_options.h87
-rw-r--r--content/renderer/media/media_stream_audio_processor_unittest.cc144
-rw-r--r--content/renderer/media/media_stream_audio_source.cc2
-rw-r--r--content/renderer/media/media_stream_audio_source.h6
-rw-r--r--content/renderer/media/media_stream_center.cc21
-rw-r--r--content/renderer/media/media_stream_center.h6
-rw-r--r--content/renderer/media/media_stream_client.h39
-rw-r--r--content/renderer/media/media_stream_constraints_util.cc132
-rw-r--r--content/renderer/media/media_stream_constraints_util.h87
-rw-r--r--content/renderer/media/media_stream_constraints_util_unittest.cc103
-rw-r--r--content/renderer/media/media_stream_impl.cc178
-rw-r--r--content/renderer/media/media_stream_impl.h60
-rw-r--r--content/renderer/media/media_stream_impl_unittest.cc14
-rw-r--r--content/renderer/media/media_stream_renderer_factory.cc197
-rw-r--r--content/renderer/media/media_stream_renderer_factory.h42
-rw-r--r--content/renderer/media/media_stream_source.cc2
-rw-r--r--content/renderer/media/media_stream_source.h4
-rw-r--r--content/renderer/media/media_stream_video_capture_source_unittest.cc46
-rw-r--r--content/renderer/media/media_stream_video_capturer_source.cc15
-rw-r--r--content/renderer/media/media_stream_video_capturer_source.h16
-rw-r--r--content/renderer/media/media_stream_video_source.cc330
-rw-r--r--content/renderer/media/media_stream_video_source.h26
-rw-r--r--content/renderer/media/media_stream_video_source_unittest.cc205
-rw-r--r--content/renderer/media/media_stream_video_track.cc51
-rw-r--r--content/renderer/media/media_stream_video_track.h29
-rw-r--r--content/renderer/media/media_stream_video_track_unittest.cc64
-rw-r--r--content/renderer/media/mock_media_constraint_factory.cc33
-rw-r--r--content/renderer/media/mock_media_constraint_factory.h4
-rw-r--r--content/renderer/media/mock_media_stream_video_sink.cc18
-rw-r--r--content/renderer/media/mock_media_stream_video_sink.h15
-rw-r--r--content/renderer/media/mock_media_stream_video_source.cc1
-rw-r--r--content/renderer/media/mock_peer_connection_impl.cc4
-rw-r--r--content/renderer/media/mock_peer_connection_impl.h7
-rw-r--r--content/renderer/media/mock_web_rtc_peer_connection_handler_client.h1
-rw-r--r--content/renderer/media/remote_media_stream_impl.cc4
-rw-r--r--content/renderer/media/renderer_webaudiodevice_impl.cc22
-rw-r--r--content/renderer/media/renderer_webaudiodevice_impl.h4
-rw-r--r--content/renderer/media/rtc_peer_connection_handler.cc63
-rw-r--r--content/renderer/media/rtc_peer_connection_handler.h10
-rw-r--r--content/renderer/media/rtc_peer_connection_handler_unittest.cc9
-rw-r--r--content/renderer/media/rtc_video_encoder.cc6
-rw-r--r--content/renderer/media/rtc_video_renderer.cc18
-rw-r--r--content/renderer/media/rtc_video_renderer.h8
-rw-r--r--content/renderer/media/video_frame_deliverer.cc21
-rw-r--r--content/renderer/media/video_frame_deliverer.h10
-rw-r--r--content/renderer/media/video_source_handler.cc59
-rw-r--r--content/renderer/media/video_source_handler.h14
-rw-r--r--content/renderer/media/video_source_handler_unittest.cc7
-rw-r--r--content/renderer/media/video_track_adapter.cc335
-rw-r--r--content/renderer/media/video_track_adapter.h88
-rw-r--r--content/renderer/media/webcontentdecryptionmodule_impl.cc14
-rw-r--r--content/renderer/media/webcontentdecryptionmodule_impl.h9
-rw-r--r--content/renderer/media/webcontentdecryptionmodulesession_impl.cc7
-rw-r--r--content/renderer/media/webcontentdecryptionmodulesession_impl.h2
-rw-r--r--content/renderer/media/webmediaplayer_impl.cc9
-rw-r--r--content/renderer/media/webmediaplayer_impl.h8
-rw-r--r--content/renderer/media/webmediaplayer_ms.cc25
-rw-r--r--content/renderer/media/webmediaplayer_ms.h14
-rw-r--r--content/renderer/media/webrtc/media_stream_remote_video_source.h1
-rw-r--r--content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc16
-rw-r--r--content/renderer/media/webrtc/media_stream_track_metrics_unittest.cc2
-rw-r--r--content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc (renamed from content/renderer/media/mock_media_stream_dependency_factory.cc)34
-rw-r--r--content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h (renamed from content/renderer/media/mock_media_stream_dependency_factory.h)22
-rw-r--r--content/renderer/media/webrtc/peer_connection_dependency_factory.cc (renamed from content/renderer/media/media_stream_dependency_factory.cc)101
-rw-r--r--content/renderer/media/webrtc/peer_connection_dependency_factory.h (renamed from content/renderer/media/media_stream_dependency_factory.h)24
-rw-r--r--content/renderer/media/webrtc/peer_connection_dependency_factory_unittest.cc (renamed from content/renderer/media/media_stream_dependency_factory_unittest.cc)12
-rw-r--r--content/renderer/media/webrtc/video_destination_handler.h2
-rw-r--r--content/renderer/media/webrtc/video_destination_handler_unittest.cc24
-rw-r--r--content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc21
-rw-r--r--content/renderer/media/webrtc/webrtc_media_stream_adapter.cc4
-rw-r--r--content/renderer/media/webrtc/webrtc_media_stream_adapter.h8
-rw-r--r--content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc8
-rw-r--r--content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc88
-rw-r--r--content/renderer/media/webrtc/webrtc_video_capturer_adapter.h12
-rw-r--r--content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc31
-rw-r--r--content/renderer/media/webrtc/webrtc_video_track_adapter.cc90
-rw-r--r--content/renderer/media/webrtc/webrtc_video_track_adapter.h8
-rw-r--r--content/renderer/media/webrtc_audio_capturer.cc13
-rw-r--r--content/renderer/media/webrtc_audio_capturer_unittest.cc29
-rw-r--r--content/renderer/media/webrtc_audio_device_impl.cc10
-rw-r--r--content/renderer/media/webrtc_audio_renderer.cc4
-rw-r--r--content/renderer/media/webrtc_audio_renderer_unittest.cc2
-rw-r--r--content/renderer/media/webrtc_local_audio_renderer.cc2
-rw-r--r--content/renderer/media/webrtc_local_audio_source_provider_unittest.cc11
-rw-r--r--content/renderer/media/webrtc_local_audio_track.cc2
-rw-r--r--content/renderer/media/webrtc_local_audio_track_unittest.cc14
-rw-r--r--content/renderer/net_info_helper.cc31
-rw-r--r--content/renderer/net_info_helper.h18
-rw-r--r--content/renderer/notification_provider.cc4
-rw-r--r--content/renderer/p2p/ipc_network_manager.cc16
-rw-r--r--content/renderer/p2p/ipc_socket_factory.cc4
-rw-r--r--content/renderer/p2p/port_allocator.cc7
-rw-r--r--content/renderer/pepper/content_decryptor_delegate.cc10
-rw-r--r--content/renderer/pepper/fake_pepper_plugin_instance.cc1
-rw-r--r--content/renderer/pepper/fake_pepper_plugin_instance.h1
-rw-r--r--content/renderer/pepper/message_channel.cc276
-rw-r--r--content/renderer/pepper/message_channel.h51
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.cc8
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.h2
-rw-r--r--content/renderer/pepper/pepper_audio_input_host.cc12
-rw-r--r--content/renderer/pepper/pepper_browser_connection.cc6
-rw-r--r--content/renderer/pepper/pepper_device_enumeration_host_helper.cc19
-rw-r--r--content/renderer/pepper/pepper_file_chooser_host.cc6
-rw-r--r--content/renderer/pepper/pepper_file_system_host.cc13
-rw-r--r--content/renderer/pepper/pepper_graphics_2d_host.cc32
-rw-r--r--content/renderer/pepper/pepper_graphics_2d_host.h4
-rw-r--r--content/renderer/pepper/pepper_graphics_2d_host_unittest.cc4
-rw-r--r--content/renderer/pepper/pepper_media_stream_track_host_base.cc12
-rw-r--r--content/renderer/pepper/pepper_media_stream_video_track_host.cc33
-rw-r--r--content/renderer/pepper/pepper_media_stream_video_track_host.h8
-rw-r--r--content/renderer/pepper/pepper_plugin_instance_impl.cc87
-rw-r--r--content/renderer/pepper/pepper_plugin_instance_impl.h14
-rw-r--r--content/renderer/pepper/pepper_truetype_font_host.cc16
-rw-r--r--content/renderer/pepper/pepper_url_loader_host.cc21
-rw-r--r--content/renderer/pepper/pepper_video_capture_host.cc21
-rw-r--r--content/renderer/pepper/pepper_video_destination_host.cc16
-rw-r--r--content/renderer/pepper/pepper_video_source_host.cc16
-rw-r--r--content/renderer/pepper/pepper_websocket_host.cc23
-rw-r--r--content/renderer/pepper/plugin_module.cc8
-rw-r--r--content/renderer/pepper/ppb_broker_impl.cc10
-rw-r--r--content/renderer/pepper/ppb_video_decoder_impl.cc3
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.cc18
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.h7
-rw-r--r--content/renderer/pepper/resource_converter.cc8
-rw-r--r--content/renderer/pepper/resource_converter.h2
-rw-r--r--content/renderer/pepper/v8_var_converter.cc64
-rw-r--r--content/renderer/pepper/v8_var_converter.h6
-rw-r--r--content/renderer/render_frame_impl.cc259
-rw-r--r--content/renderer/render_frame_impl.h80
-rw-r--r--content/renderer/render_frame_proxy.cc89
-rw-r--r--content/renderer/render_frame_proxy.h79
-rw-r--r--content/renderer/render_thread_impl.cc49
-rw-r--r--content/renderer/render_thread_impl.h16
-rw-r--r--content/renderer/render_thread_impl_browsertest.cc5
-rw-r--r--content/renderer/render_view_browsertest.cc132
-rw-r--r--content/renderer/render_view_impl.cc245
-rw-r--r--content/renderer/render_view_impl.h67
-rw-r--r--content/renderer/render_view_impl_android.cc19
-rw-r--r--content/renderer/render_view_impl_params.cc2
-rw-r--r--content/renderer/render_view_impl_params.h2
-rw-r--r--content/renderer/render_widget.cc293
-rw-r--r--content/renderer/render_widget.h83
-rw-r--r--content/renderer/render_widget_fullscreen_pepper.cc25
-rw-r--r--content/renderer/render_widget_unittest.cc22
-rw-r--r--content/renderer/renderer.gni14
-rw-r--r--content/renderer/renderer_clipboard_client.cc9
-rw-r--r--content/renderer/renderer_webcookiejar_impl.cc2
-rw-r--r--content/renderer/renderer_webkitplatformsupport_impl.cc54
-rw-r--r--content/renderer/renderer_webkitplatformsupport_impl.h24
-rw-r--r--content/renderer/screen_orientation/OWNERS1
-rw-r--r--content/renderer/screen_orientation/mock_screen_orientation_controller.cc127
-rw-r--r--content/renderer/screen_orientation/mock_screen_orientation_controller.h52
-rw-r--r--content/renderer/service_worker/OWNERS7
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.cc42
-rw-r--r--content/renderer/service_worker/embedded_worker_dispatcher.cc4
-rw-r--r--content/renderer/service_worker/service_worker_script_context.cc11
-rw-r--r--content/renderer/service_worker/service_worker_script_context.h8
-rw-r--r--content/renderer/v8_value_converter_impl.cc10
-rw-r--r--content/renderer/v8_value_converter_impl.h3
-rw-r--r--content/renderer/v8_value_converter_impl_unittest.cc6
-rw-r--r--content/renderer/web_preferences.cc16
-rw-r--r--content/renderer/web_ui_extension.cc2
-rw-r--r--content/renderer/web_ui_mojo.cc3
-rw-r--r--content/renderer/web_ui_mojo.h3
-rw-r--r--content/renderer/webclipboard_impl.cc9
-rw-r--r--content/result_codes_java.target.darwin-arm.mk24
-rw-r--r--content/result_codes_java.target.darwin-arm64.mk10
-rw-r--r--content/result_codes_java.target.darwin-mips.mk12
-rw-r--r--content/result_codes_java.target.darwin-x86.mk12
-rw-r--r--content/result_codes_java.target.darwin-x86_64.mk10
-rw-r--r--content/result_codes_java.target.linux-arm.mk24
-rw-r--r--content/result_codes_java.target.linux-arm64.mk10
-rw-r--r--content/result_codes_java.target.linux-mips.mk12
-rw-r--r--content/result_codes_java.target.linux-x86.mk12
-rw-r--r--content/result_codes_java.target.linux-x86_64.mk10
-rw-r--r--content/screen_orientation_values_java.target.darwin-arm.mk24
-rw-r--r--content/screen_orientation_values_java.target.darwin-arm64.mk10
-rw-r--r--content/screen_orientation_values_java.target.darwin-mips.mk12
-rw-r--r--content/screen_orientation_values_java.target.darwin-x86.mk12
-rw-r--r--content/screen_orientation_values_java.target.darwin-x86_64.mk10
-rw-r--r--content/screen_orientation_values_java.target.linux-arm.mk24
-rw-r--r--content/screen_orientation_values_java.target.linux-arm64.mk10
-rw-r--r--content/screen_orientation_values_java.target.linux-mips.mk12
-rw-r--r--content/screen_orientation_values_java.target.linux-x86.mk12
-rw-r--r--content/screen_orientation_values_java.target.linux-x86_64.mk10
-rw-r--r--content/shell/DEPS3
-rw-r--r--content/shell/android/browsertests_apk/content_browser_tests_android.cc1
-rw-r--r--content/shell/android/java/src/org/chromium/content_shell/Shell.java35
-rw-r--r--content/shell/app/shell_main_delegate.cc1
-rw-r--r--content/shell/browser/shell_android.cc4
-rw-r--r--content/shell/browser/shell_aura.cc6
-rw-r--r--content/shell/browser/shell_browser_context.cc21
-rw-r--r--content/shell/browser/shell_browser_context.h23
-rw-r--r--content/shell/browser/shell_browser_main_parts.cc6
-rw-r--r--content/shell/browser/shell_content_browser_client.cc21
-rw-r--r--content/shell/browser/shell_content_browser_client.h7
-rw-r--r--content/shell/browser/shell_message_filter.cc5
-rw-r--r--content/shell/browser/shell_message_filter.h3
-rw-r--r--content/shell/browser/shell_platform_data_aura.cc14
-rw-r--r--content/shell/browser/shell_url_request_context_getter.cc30
-rw-r--r--content/shell/browser/shell_url_request_context_getter.h4
-rw-r--r--content/shell/browser/shell_views.cc7
-rw-r--r--content/shell/common/webkit_test_helpers.cc2
-rw-r--r--content/shell/renderer/shell_content_renderer_client.cc9
-rw-r--r--content/shell/renderer/shell_content_renderer_client.h1
-rw-r--r--content/shell/renderer/shell_render_frame_observer.cc4
-rw-r--r--content/shell/renderer/shell_render_view_observer.cc4
-rw-r--r--content/shell/renderer/shell_render_view_observer.h3
-rw-r--r--content/shell/renderer/test_runner/MockColorChooser.cpp6
-rw-r--r--content/shell/renderer/test_runner/MockColorChooser.h2
-rw-r--r--content/shell/renderer/test_runner/MockConstraints.cpp59
-rw-r--r--content/shell/renderer/test_runner/MockGrammarCheck.cpp59
-rw-r--r--content/shell/renderer/test_runner/MockWebMIDIAccessor.cpp2
-rw-r--r--content/shell/renderer/test_runner/MockWebMIDIAccessor.h2
-rw-r--r--content/shell/renderer/test_runner/MockWebMediaStreamCenter.h2
-rw-r--r--content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h2
-rw-r--r--content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h2
-rw-r--r--content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.cpp4
-rw-r--r--content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h2
-rw-r--r--content/shell/renderer/test_runner/MockWebSpeechRecognizer.h2
-rw-r--r--content/shell/renderer/test_runner/SpellCheckClient.cpp10
-rw-r--r--content/shell/renderer/test_runner/SpellCheckClient.h2
-rw-r--r--content/shell/renderer/test_runner/TestInterfaces.cpp2
-rw-r--r--content/shell/renderer/test_runner/WebFrameTestProxy.h229
-rw-r--r--content/shell/renderer/test_runner/WebTask.h4
-rw-r--r--content/shell/renderer/test_runner/WebTestDelegate.h3
-rw-r--r--content/shell/renderer/test_runner/WebTestProxy.cpp1321
-rw-r--r--content/shell/renderer/test_runner/WebTestProxy.h380
-rw-r--r--content/shell/renderer/test_runner/WebTestRunner.h42
-rw-r--r--content/shell/renderer/test_runner/WebUserMediaClientMock.cpp6
-rw-r--r--content/shell/renderer/test_runner/WebUserMediaClientMock.h2
-rw-r--r--content/shell/renderer/test_runner/event_sender.cc129
-rw-r--r--content/shell/renderer/test_runner/event_sender.h8
-rw-r--r--content/shell/renderer/test_runner/mock_constraints.cc62
-rw-r--r--content/shell/renderer/test_runner/mock_constraints.h (renamed from content/shell/renderer/test_runner/MockConstraints.h)7
-rw-r--r--content/shell/renderer/test_runner/mock_grammar_check.cc63
-rw-r--r--content/shell/renderer/test_runner/mock_grammar_check.h (renamed from content/shell/renderer/test_runner/MockGrammarCheck.h)11
-rw-r--r--content/shell/renderer/test_runner/test_runner.cc52
-rw-r--r--content/shell/renderer/test_runner/test_runner.h21
-rw-r--r--content/shell/renderer/test_runner/web_frame_test_proxy.h287
-rw-r--r--content/shell/renderer/test_runner/web_test_proxy.cc1204
-rw-r--r--content/shell/renderer/test_runner/web_test_proxy.h389
-rw-r--r--content/shell/renderer/test_runner/web_test_runner.h42
-rw-r--r--content/shell/renderer/webkit_test_runner.cc71
-rw-r--r--content/shell/renderer/webkit_test_runner.h4
-rwxr-xr-xcontent/shell/tools/breakpad_integration_test.py147
-rw-r--r--content/speech_recognition_error_java.target.darwin-arm.mk24
-rw-r--r--content/speech_recognition_error_java.target.darwin-arm64.mk10
-rw-r--r--content/speech_recognition_error_java.target.darwin-mips.mk12
-rw-r--r--content/speech_recognition_error_java.target.darwin-x86.mk12
-rw-r--r--content/speech_recognition_error_java.target.darwin-x86_64.mk10
-rw-r--r--content/speech_recognition_error_java.target.linux-arm.mk24
-rw-r--r--content/speech_recognition_error_java.target.linux-arm64.mk10
-rw-r--r--content/speech_recognition_error_java.target.linux-mips.mk12
-rw-r--r--content/speech_recognition_error_java.target.linux-x86.mk12
-rw-r--r--content/speech_recognition_error_java.target.linux-x86_64.mk10
-rw-r--r--content/test/accessibility_browser_test_utils.cc9
-rw-r--r--content/test/accessibility_browser_test_utils.h7
-rw-r--r--content/test/content_test_launcher.cc1
-rw-r--r--content/test/data/accessibility/aria-labelledby-heading-expected-android.txt1
-rw-r--r--content/test/data/accessibility/aria-labelledby-heading-expected-mac.txt5
-rw-r--r--content/test/data/accessibility/aria-labelledby-heading-expected-win.txt1
-rw-r--r--content/test/data/accessibility/aria-labelledby-heading.html10
-rw-r--r--content/test/data/accessibility/aria-list-expected-android.txt1
-rw-r--r--content/test/data/accessibility/aria-list-expected-mac.txt8
-rw-r--r--content/test/data/accessibility/aria-list-expected-win.txt1
-rw-r--r--content/test/data/accessibility/aria-list.html12
-rw-r--r--content/test/data/browser_plugin_embedder.html30
-rw-r--r--content/test/data/browser_plugin_focus.html28
-rw-r--r--content/test/data/browser_plugin_focus_child.html6
-rw-r--r--content/test/data/browser_plugin_post_message_guest.html23
-rw-r--r--content/test/data/download/empty.binbin0 -> 20 bytes
-rw-r--r--content/test/data/download/empty.bin.mock-http-headers11
-rw-r--r--content/test/data/gpu/pixel_css3d.html5
-rw-r--r--content/test/data/media/blackwhite.html19
-rw-r--r--content/test/data/media/getusermedia.html56
-rw-r--r--content/test/data/media/peerconnection-call.html7
-rw-r--r--content/test/data/service_worker/fetch_event.js15
-rw-r--r--content/test/data/service_worker/sync.js11
-rw-r--r--content/test/data/webcrypto/rsa_es.json24
-rw-r--r--content/test/data/webcrypto/rsa_oaep.json71
-rw-r--r--content/test/gpu/gpu_tests/context_lost.py6
-rw-r--r--content/test/gpu/gpu_tests/maps.py2
-rw-r--r--content/test/gpu/gpu_tests/memory.py18
-rw-r--r--content/test/gpu/gpu_tests/memory_expectations.py8
-rw-r--r--content/test/gpu/gpu_tests/pixel.py16
-rw-r--r--content/test/gpu/gpu_tests/pixel_expectations.py2
-rw-r--r--content/test/gpu/gpu_tests/screenshot_sync.py2
-rw-r--r--content/test/gpu/gpu_tests/webgl_conformance.py2
-rw-r--r--content/test/gpu/gpu_tests/webgl_conformance_expectations.py127
-rw-r--r--content/test/gpu/gpu_tests/webgl_robustness.py2
-rw-r--r--content/test/gpu/page_sets/gpu_process_tests.py4
-rw-r--r--content/test/gpu/page_sets/gpu_rasterization_tests.py2
-rw-r--r--content/test/gpu/page_sets/memory_tests.py2
-rw-r--r--content/test/gpu/page_sets/page_set_unittest.py2
-rw-r--r--content/test/gpu/page_sets/pixel_tests.py14
-rw-r--r--content/test/layouttest_support.cc26
-rw-r--r--content/test/ppapi/OWNERS5
-rw-r--r--content/test/ppapi/ppapi_browsertest.cc122
-rw-r--r--content/test/ppapi/ppapi_test.cc122
-rw-r--r--content/test/ppapi/ppapi_test.h87
-rw-r--r--content/test/test_media_stream_client.h35
-rw-r--r--content/test/test_media_stream_renderer_factory.cc (renamed from content/test/test_media_stream_client.cc)21
-rw-r--r--content/test/test_media_stream_renderer_factory.h35
-rw-r--r--content/test/test_render_view_host.cc4
-rw-r--r--content/test/test_render_view_host.h3
-rw-r--r--content/test/test_web_contents.cc4
-rw-r--r--content/test/test_web_contents.h3
-rw-r--r--content/test/web_layer_tree_view_impl_for_testing.cc11
-rw-r--r--content/test/web_layer_tree_view_impl_for_testing.h2
-rw-r--r--content/test/webrtc_content_browsertest_base.cc1
-rw-r--r--content/webkit_version.target.darwin-arm.mk55
-rw-r--r--content/webkit_version.target.darwin-arm64.mk55
-rw-r--r--content/webkit_version.target.darwin-mips.mk55
-rw-r--r--content/webkit_version.target.darwin-x86.mk55
-rw-r--r--content/webkit_version.target.darwin-x86_64.mk55
-rw-r--r--content/webkit_version.target.linux-arm.mk55
-rw-r--r--content/webkit_version.target.linux-arm64.mk55
-rw-r--r--content/webkit_version.target.linux-mips.mk55
-rw-r--r--content/webkit_version.target.linux-x86.mk55
-rw-r--r--content/webkit_version.target.linux-x86_64.mk55
-rw-r--r--content/worker/shared_worker_permission_client_proxy.cc5
-rw-r--r--content/worker/shared_worker_permission_client_proxy.h2
-rw-r--r--content/worker/worker_webkitplatformsupport_impl.cc1
-rw-r--r--content/zygote/zygote_linux.cc61
-rw-r--r--content/zygote/zygote_linux.h19
-rw-r--r--content/zygote/zygote_main.h5
-rw-r--r--content/zygote/zygote_main_linux.cc49
1397 files changed, 38114 insertions, 24341 deletions
diff --git a/content/BUILD.gn b/content/BUILD.gn
new file mode 100644
index 0000000000..d065e1b751
--- /dev/null
+++ b/content/BUILD.gn
@@ -0,0 +1,70 @@
+# 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.
+
+import("//tools/grit/grit_rule.gni")
+
+# Applied by targets internal to content.
+config("content_implementation") {
+ defines = [ "CONTENT_IMPLEMENTATION" ]
+}
+
+grit("resources") {
+ source = "content_resources.grd"
+}
+
+# Stubs ------------------------------------------------------------------------
+
+# TODO(brettw) remove this and add a proper dependency on libjingle once that
+# target has been converted to GN. This config sets up the include directories
+# so content can compile in the meantime.
+config("libjingle_stub_config") {
+ include_dirs = [
+ "//third_party/libjingle/overrides",
+ "//third_party/libjingle/source",
+ "//third_party/libyuv/include",
+ "//third_party/usrsctp",
+
+
+ "//third_party/webrtc/overrides", # Must be before webrtc abd third_party.
+ "//third_party/webrtc",
+ "//third_party",
+ ]
+
+ defines = [
+ "FEATURE_ENABLE_SSL",
+ "FEATURE_ENABLE_VOICEMAIL",
+ "EXPAT_RELATIVE_PATH",
+ "GTEST_RELATIVE_PATH",
+ "NO_MAIN_THREAD_WRAPPING",
+ "NO_SOUND_SYSTEM",
+ ]
+
+ if (is_mac) {
+ defines += [ "OSX" ]
+ } else if (is_linux) {
+ defines += [ "LINUX" ]
+ } else if (is_android) {
+ defines += [ "ANDROID" ]
+ } else if (is_win) {
+ libs = [ "secur32.lib", "crypt32.lib", "iphlpapi.lib" ]
+ }
+
+ if (is_posix) {
+ defines += [ "POSIX" ]
+ }
+ if (is_chromeos) {
+ defines += [ "CHROMEOS" ]
+ }
+}
+
+# This config is a placeholder to set up the V8 include path while the V8 GN
+# build is being worked on.
+config("v8_stub_config") {
+ include_dirs = [ "//v8/include" ]
+}
+
+config("widevine_stub_config") {
+ # The real implementation does a copy rule to copy the header to the gen dir.
+ include_dirs = [ "//third_party/widevine/cdm" ]
+}
diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc
index 2593b28d6e..24a528929e 100644
--- a/content/app/content_main_runner.cc
+++ b/content/app/content_main_runner.cc
@@ -16,6 +16,7 @@
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
#include "base/metrics/stats_table.h"
#include "base/path_service.h"
#include "base/process/launch.h"
@@ -298,9 +299,9 @@ int RunZygote(const MainFunctionParams& main_function_params,
{ switches::kUtilityProcess, UtilityMain },
};
- scoped_ptr<ZygoteForkDelegate> zygote_fork_delegate;
+ ScopedVector<ZygoteForkDelegate> zygote_fork_delegates;
if (delegate) {
- zygote_fork_delegate.reset(delegate->ZygoteStarting());
+ delegate->ZygoteStarting(&zygote_fork_delegates);
// Each Renderer we spawn will re-attempt initialization of the media
// libraries, at which point failure will be detected and handled, so
// we do not need to cope with initialization failures here.
@@ -310,7 +311,7 @@ int RunZygote(const MainFunctionParams& main_function_params,
}
// This function call can return multiple times, once per fork().
- if (!ZygoteMain(main_function_params, zygote_fork_delegate.get()))
+ if (!ZygoteMain(main_function_params, zygote_fork_delegates.Pass()))
return 1;
if (delegate) delegate->ZygoteForked();
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
new file mode 100644
index 0000000000..1a2b8d3bbf
--- /dev/null
+++ b/content/browser/BUILD.gn
@@ -0,0 +1,379 @@
+# 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.
+
+import("//build/config/features.gni")
+import("//build/config/ui.gni")
+import("//content/browser/browser.gni")
+
+source_set("browser") {
+ # Only targets in the content tree can depend directly on this target.
+ visibility = [ "//content/*" ]
+
+ sources = rebase_path(content_browser_gypi_values.private_browser_sources,
+ ".", "//content")
+
+ # TODO(GYP) these generated files are listed as sources in content_browser.
+ # This is a bit suspicious. The GN grit template will make a source set
+ # containing the generated code so it should be sufficient to just depend
+ # on the grit rule. But maybe some of these will need to be added?
+ #
+ # Need this annoying rebase_path call to match what happened with the sources.
+ sources -= rebase_path([
+ "$root_gen_dir/webkit/grit/devtools_resources.h",
+ "$root_gen_dir/webkit/grit/devtools_resources_map.cc",
+ "$root_gen_dir/webkit/grit/devtools_resources_map.h",
+ "$root_gen_dir/content/browser/tracing/grit/tracing_resources.h",
+ "$root_gen_dir/ui/ui_resources/grit/webui_resources_map.cc",
+ "$root_gen_dir/content/browser/devtools/devtools_protocol_constants.cc",
+ "$root_gen_dir/content/browser/devtools/devtools_protocol_constants.h",
+ ], ".")
+
+ configs += [ "//content:content_implementation" ]
+
+ deps = [
+ "//base",
+ "//crypto",
+ "//google_apis",
+ "//net",
+ "//net:http_server",
+ "//skia",
+ "//sql",
+ "//third_party/leveldatabase",
+ "//third_party/re2",
+ "//third_party/WebKit/public:blink_headers",
+ "//third_party/zlib",
+ "//third_party/zlib:zip",
+ "//ui/accessibility",
+ "//ui/accessibility:ax_gen",
+ "//ui/base",
+ "//ui/events",
+ "//ui/events:gesture_detection",
+ "//ui/gfx",
+ "//ui/gfx/geometry",
+ "//ui/resources",
+ "//ui/surface",
+ "//webkit:resources",
+ "//webkit:strings",
+ "//webkit/browser:storage",
+ "//webkit/common",
+ "//webkit/common:storage",
+ # TODO(GYP)
+ #"//ui/snapshot",
+ #'browser/service_worker/service_worker_proto.gyp:database_proto',
+ #'browser/speech/proto/speech_proto.gyp:speech_proto',
+ #'browser/devtools/devtools_resources.gyp:devtools_resources',
+ #'content_common_mojo_bindings',
+ #'../cc/cc.gyp:cc',
+ #'../mojo/mojo.gyp:mojo_cpp_bindings',
+ #'../mojo/mojo.gyp:mojo_js_bindings',
+ #'../mojo/mojo.gyp:mojo_service_provider_bindings',
+ #'../third_party/angle/src/build_angle.gyp:commit_id',
+ ]
+
+ if (toolkit_views) {
+ deps += [ "//ui/events" ]
+ }
+
+ if (is_win) {
+ sources += [
+ "power_profiles/power_data_provider_ia_win.cc",
+ "power_profiles/power_data_provider_ia_win.h",
+ ]
+ deps += [ "//third_party/power_gadget" ]
+ } else {
+ sources += [ "power_profiler/power_data_provider_dummy.cc" ]
+ }
+
+ if (!is_win && !is_mac && (!is_linux || !use_udev)) {
+ sources += [ "browser/gamepad/gamepad_platform_data_fetcher.cc" ]
+ }
+
+ if (is_ios) {
+ # TODO(GYP) lots of inclusions and exclusions for iOS.
+ }
+
+ if (enable_printing != 0) {
+ #TODO(GYP)
+ #deps += [ "//printing" ]
+ }
+
+# TODO(GYP)
+# ['OS!="ios" and chrome_multiple_dll!=1', {
+# 'dependencies': [
+# '../third_party/WebKit/public/blink.gyp:blink',
+# ],
+# }],
+# ['OS!="mac" and OS!="ios"', {
+# 'dependencies': [
+# '../sandbox/sandbox.gyp:sandbox',
+# ],
+# }],
+# ['OS!="android" and OS!="ios"', {
+# 'dependencies': [
+# 'browser/tracing/tracing_resources.gyp:tracing_resources',
+# ],
+# }],
+# ['OS!="ios"', {
+# 'dependencies': [
+# '../third_party/libyuv/libyuv.gyp:libyuv',
+# ],
+# }],
+# ['enable_webrtc==1', {
+# 'dependencies': [
+# '../jingle/jingle.gyp:jingle_glue',
+# ],
+# 'sources': [
+# 'browser/renderer_host/media/peer_connection_tracker_host.cc',
+# 'browser/renderer_host/media/peer_connection_tracker_host.h',
+# 'browser/renderer_host/media/webrtc_identity_service_host.cc',
+# 'browser/renderer_host/media/webrtc_identity_service_host.h',
+# 'browser/renderer_host/p2p/socket_host.cc',
+# 'browser/renderer_host/p2p/socket_host.h',
+# 'browser/renderer_host/p2p/socket_host_tcp.cc',
+# 'browser/renderer_host/p2p/socket_host_tcp.h',
+# 'browser/renderer_host/p2p/socket_host_tcp_server.cc',
+# 'browser/renderer_host/p2p/socket_host_tcp_server.h',
+# 'browser/renderer_host/p2p/socket_host_throttler.cc',
+# 'browser/renderer_host/p2p/socket_host_throttler.h',
+# 'browser/renderer_host/p2p/socket_host_udp.cc',
+# 'browser/renderer_host/p2p/socket_host_udp.h',
+# 'browser/renderer_host/p2p/socket_dispatcher_host.cc',
+# 'browser/renderer_host/p2p/socket_dispatcher_host.h',
+# ],
+# }],
+# ['enable_webrtc==1 and OS=="linux"', {
+# 'dependencies': [
+# '../third_party/libjingle/libjingle.gyp:libjingle_webrtc',
+# ],
+# }],
+# ['enable_webrtc==1 and (OS=="linux" or OS=="mac" or OS=="win")', {
+# 'sources': [
+# 'browser/media/capture/desktop_capture_device.cc',
+# 'browser/media/capture/desktop_capture_device.h',
+# 'browser/media/capture/desktop_capture_device_aura.cc',
+# 'browser/media/capture/desktop_capture_device_aura.h',
+# 'browser/media/capture/desktop_capture_device_uma_types.cc',
+# 'browser/media/capture/desktop_capture_device_uma_types.h',
+# ],
+# 'dependencies': [
+# '../third_party/webrtc/modules/modules.gyp:desktop_capture',
+# ],
+# 'defines': [
+# 'ENABLE_SCREEN_CAPTURE=1',
+# ],
+# }],
+# ['OS=="win"', {
+# 'dependencies': [
+# # For accessibility
+# '../third_party/iaccessible2/iaccessible2.gyp:iaccessible2',
+# '../third_party/isimpledom/isimpledom.gyp:isimpledom',
+# ],
+# 'sources/': [
+# ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
+# ],
+# 'defines': [
+# # This prevents the inclusion of atlhost.h which paired
+# # with the windows 8 sdk it does the wrong thing.
+# '__ATLHOST_H__',
+# ],
+# 'link_settings': {
+# 'libraries': [
+# '-lcomctl32.lib',
+# '-ldinput8.lib',
+# '-ldwmapi.lib',
+# '-ldxguid.lib',
+# '-lsensorsapi.lib',
+# '-lportabledeviceguids.lib',
+# ],
+# 'msvs_settings': {
+# 'VCLinkerTool': {
+# 'DelayLoadDLLs': [
+# 'dinput8.dll',
+# 'user32.dll',
+# 'dwmapi.dll',
+# ],
+# },
+# },
+# },
+# }],
+# ['OS=="linux"', {
+# 'dependencies': [
+# '../sandbox/sandbox.gyp:libc_urandom_override',
+# ],
+# }],
+# ['use_udev == 1', {
+# 'dependencies': [
+# '../build/linux/system.gyp:udev',
+# ],
+# }, {
+# 'sources!': [
+# 'browser/device_monitor_udev.cc',
+# 'browser/device_monitor_udev.h',
+# 'browser/gamepad/gamepad_platform_data_fetcher_linux.cc',
+# 'browser/udev_linux.cc',
+# 'browser/udev_linux.h',
+# ],
+# }],
+# ['OS=="linux" and use_aura==1', {
+# 'dependencies': [
+# '../build/linux/system.gyp:fontconfig',
+# ],
+# }],
+# ['use_x11==1', {
+# 'dependencies': [
+# '../build/linux/system.gyp:x11',
+# ],
+# }],
+# ['use_pango==1', {
+# 'dependencies': [
+# '../build/linux/system.gyp:pangocairo',
+# ],
+# 'sources!': [
+# 'browser/renderer_host/pepper/pepper_truetype_font_list_ozone.cc',
+# ],
+# }],
+# ['OS=="android"', {
+# 'dependencies': [
+# '../media/media.gyp:media',
+# 'content.gyp:content_jni_headers',
+# ],
+# 'link_settings': {
+# 'libraries': [
+# '-ljnigraphics',
+# ],
+# },
+# 'sources/': [
+# ['exclude', '^browser/battery_status/battery_status_manager_default.cc$'],
+# ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
+# ['exclude', '^browser/geolocation/network_location_provider\\.(cc|h)$'],
+# ['exclude', '^browser/geolocation/network_location_request\\.(cc|h)$'],
+# ['exclude', '^browser/tracing/tracing_ui'],
+# ['exclude', '^browser/speech/'],
+# ['include', '^browser/speech/speech_recognition_dispatcher_host\\.(cc|h)$'],
+# ['include', '^browser/speech/speech_recognition_manager_impl\\.(cc|h)$'],
+# ['include', '^browser/speech/speech_recognizer\\.h$'],
+# ['include', '^browser/speech/speech_recognizer_impl_android\\.(cc|h)$'],
+# ],
+# 'sources!': [
+# 'browser/browser_ipc_logging.cc',
+# 'browser/font_list_async.cc',
+# 'browser/geolocation/device_data_provider.cc',
+# 'browser/geolocation/empty_device_data_provider.cc',
+# 'browser/geolocation/wifi_data_provider_common.cc',
+# 'browser/renderer_host/native_web_keyboard_event.cc',
+# ]
+# }, { # OS!="android"
+# 'sources/': [
+# ['exclude', '^browser/renderer_host/java/'],
+# ['exclude', '^browser/speech/speech_recognizer_impl_android\\.(cc|h)'],
+# ],
+# }],
+# ['OS=="mac"', {
+# 'sources/': [
+# ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
+# ],
+# 'sources!': [
+# 'browser/geolocation/empty_wifi_data_provider.cc',
+# ],
+# 'dependencies': [
+# '../third_party/mozilla/mozilla.gyp:mozilla',
+# '../third_party/sudden_motion_sensor/sudden_motion_sensor.gyp:sudden_motion_sensor',
+# ],
+# 'link_settings': {
+# 'libraries': [
+# '$(SDKROOT)/usr/lib/libbsm.dylib',
+# ],
+# },
+# }],
+# ['chromeos==1', {
+# 'dependencies': [
+# '../build/linux/system.gyp:dbus',
+# '../chromeos/chromeos.gyp:power_manager_proto',
+# ],
+# 'sources!': [
+# 'browser/geolocation/wifi_data_provider_linux.cc',
+# 'browser/power_save_blocker_ozone.cc',
+# 'browser/power_save_blocker_x11.cc',
+# ],
+# }],
+# ['os_bsd==1', {
+# 'sources/': [
+# ['exclude', '^browser/gamepad/gamepad_platform_data_fetcher_linux\\.cc$'],
+# ],
+# }],
+# ['use_aura==1', {
+# 'dependencies': [
+# '../ui/aura/aura.gyp:aura',
+# '../ui/strings/ui_strings.gyp:ui_strings',
+# ],
+# }, {
+# 'sources/': [
+# ['exclude', '^browser/renderer_host/render_widget_host_view_aura.cc'],
+# ['exclude', '^browser/renderer_host/render_widget_host_view_aura.h'],
+# ['exclude', '^browser/web_contents/touch_editable_impl_aura.cc'],
+# ['exclude', '^browser/web_contents/touch_editable_impl_aura.h'],
+# ['exclude', '^browser/renderer_host/ui_events_helper.cc'],
+# ['exclude', '^browser/renderer_host/ui_events_helper.h'],
+# ['exclude', '^browser/context_factory.cc'],
+# ['exclude', '^public/browser/context_factory.h'],
+# ],
+# }],
+# ['use_aura==1 or OS=="mac"', {
+# 'dependencies': [
+# '../ui/compositor/compositor.gyp:compositor',
+# ],
+# }, {
+# 'sources/': [
+# ['exclude', '^browser/compositor/'],
+# ]
+# }],
+# ['enable_plugins==1', {
+# 'dependencies': [
+# '../ppapi/ppapi_internal.gyp:ppapi_ipc',
+# '../ppapi/ppapi_internal.gyp:ppapi_shared',
+# ],
+# }, { # enable_plugins==0
+# 'sources!': [
+# 'browser/pepper_flash_settings_helper_impl.cc',
+# 'browser/pepper_flash_settings_helper_impl.h',
+# 'browser/plugin_data_remover_impl.cc',
+# 'browser/plugin_data_remover_impl.h',
+# 'browser/plugin_loader_posix.cc',
+# 'browser/plugin_loader_posix.h',
+# 'browser/plugin_process_host.cc',
+# 'browser/plugin_process_host.h',
+# 'browser/plugin_service_impl.cc',
+# 'browser/plugin_service_impl.h',
+# 'browser/ppapi_plugin_process_host.cc',
+# 'public/browser/plugin_service.h',
+# ],
+# 'sources/': [
+# ['exclude', '^browser/renderer_host/pepper/'],
+# ],
+# }],
+# ['input_speech==1', {
+# 'dependencies': [
+# '../third_party/flac/flac.gyp:libflac',
+# '../third_party/speex/speex.gyp:libspeex',
+# ],
+# }],
+# ['OS == "win"', {
+# 'sources!': [
+# 'browser/geolocation/empty_wifi_data_provider.cc',
+# ],
+# }],
+# ['OS == "linux" and use_dbus==1', {
+# 'sources!': [
+# 'browser/geolocation/empty_wifi_data_provider.cc',
+# ],
+# 'dependencies': [
+# '../build/linux/system.gyp:dbus',
+# '../dbus/dbus.gyp:dbus',
+# ],
+# }, { # OS != "linux" or use_dbus==0
+# 'sources!': [
+# 'browser/geolocation/wifi_data_provider_linux.cc',
+# ],
+# }],
+}
diff --git a/content/browser/DEPS b/content/browser/DEPS
index bd7a6023be..1af4237d1f 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -31,6 +31,7 @@ include_rules = [
# No inclusion of WebKit from the browser, other than strictly enum/POD,
# header-only types, and some selected common code.
"-third_party/WebKit",
+ "+third_party/WebKit/public/platform/WebBatteryStatus.h",
"+third_party/WebKit/public/platform/WebCursorInfo.h",
"+third_party/WebKit/public/platform/WebGamepad.h",
"+third_party/WebKit/public/platform/WebGamepads.h",
diff --git a/content/browser/accessibility/accessibility_tree_formatter_mac.mm b/content/browser/accessibility/accessibility_tree_formatter_mac.mm
index f9321ee14b..e037d4d01b 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_mac.mm
+++ b/content/browser/accessibility/accessibility_tree_formatter_mac.mm
@@ -97,7 +97,7 @@ scoped_ptr<base::StringValue> StringForBrowserAccessibility(
NSString* description = [obj role];
id value = [obj value];
id roleDescription = [obj roleDescription];
- if (value != nil && ![value isEqualToString:@""]) {
+ if (value && ![value isEqual:@""]) {
description = [NSString stringWithFormat:@"%@ %@", description, value];
} else if ([description isEqualToString:NSAccessibilityGroupRole] &&
roleDescription != nil &&
diff --git a/content/browser/accessibility/android_hit_testing_browsertest.cc b/content/browser/accessibility/android_hit_testing_browsertest.cc
new file mode 100644
index 0000000000..2f298fcbe5
--- /dev/null
+++ b/content/browser/accessibility/android_hit_testing_browsertest.cc
@@ -0,0 +1,81 @@
+// 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 <set>
+#include <string>
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/browser/accessibility/accessibility_tree_formatter.h"
+#include "content/browser/accessibility/browser_accessibility.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_base.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_paths.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/common/url_constants.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "content/test/accessibility_browser_test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class AndroidHitTestingBrowserTest : public ContentBrowserTest {
+ public:
+ AndroidHitTestingBrowserTest() {}
+ virtual ~AndroidHitTestingBrowserTest() {}
+};
+
+IN_PROC_BROWSER_TEST_F(AndroidHitTestingBrowserTest,
+ HitTestOutsideDocumentBoundsReturnsRoot) {
+ NavigateToURL(shell(), GURL(kAboutBlankURL));
+
+ // Load the page.
+ AccessibilityNotificationWaiter waiter(
+ shell(), AccessibilityModeComplete,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ const char url_str[] =
+ "data:text/html,"
+ "<!doctype html>"
+ "<html><head><title>Accessibility Test</title></head>"
+ "<body>"
+ "<a href='#'>"
+ "This is some text in a link"
+ "</a>"
+ "</body></html>";
+ GURL url(url_str);
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ // Get the BrowserAccessibilityManager.
+ RenderWidgetHostViewBase* host_view = static_cast<RenderWidgetHostViewBase*>(
+ shell()->web_contents()->GetRenderWidgetHostView());
+ BrowserAccessibilityManager* manager =
+ host_view->GetBrowserAccessibilityManager();
+
+ // Send a hit test request, and wait for the hover event in response.
+ AccessibilityNotificationWaiter hover_waiter(
+ shell(), AccessibilityModeComplete,
+ ui::AX_EVENT_HOVER);
+ manager->delegate()->AccessibilityHitTest(gfx::Point(-1, -1));
+ hover_waiter.WaitForNotification();
+
+ // Assert that the hover event was fired on the root of the tree.
+ int hover_target_id = hover_waiter.event_target_id();
+ BrowserAccessibility* hovered_node = manager->GetFromID(hover_target_id);
+ ASSERT_TRUE(hovered_node != NULL);
+ ASSERT_EQ(ui::AX_ROLE_ROOT_WEB_AREA, hovered_node->GetRole());
+}
+
+} // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h
index d0eb478ad1..f78a96dd54 100644
--- a/content/browser/accessibility/browser_accessibility_android.h
+++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -40,6 +40,8 @@ class BrowserAccessibilityAndroid : public BrowserAccessibility {
bool CanOpenPopup() const;
+ bool HasFocusableChild() const;
+
const char* GetClassName() const;
base::string16 GetText() const;
@@ -82,7 +84,6 @@ class BrowserAccessibilityAndroid : public BrowserAccessibility {
BrowserAccessibilityAndroid();
- bool HasFocusableChild() const;
bool HasOnlyStaticTextChildren() const;
bool IsIframe() const;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.h b/content/browser/accessibility/browser_accessibility_cocoa.h
index 8f38eaaa17..5fc708f867 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.h
+++ b/content/browser/accessibility/browser_accessibility_cocoa.h
@@ -48,6 +48,9 @@
// Return the method name for the given attribute. For testing only.
- (NSString*)methodNameForAttribute:(NSString*)attribute;
+// Swap the children array with the given scoped_nsobject.
+- (void)swapChildren:(base::scoped_nsobject<NSMutableArray>*)other;
+
// Internally-used method.
@property(nonatomic, readonly) NSPoint origin;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index b5a42ef04e..232e482775 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -847,11 +847,10 @@ NSDictionary* attributeToMethodNameMap = nil;
browserAccessibility_, ui::AX_ATTR_HTML_TAG);
if (browserAccessibilityRole == ui::AX_ROLE_LIST) {
- if ([htmlTag isEqualToString:@"ul"] ||
- [htmlTag isEqualToString:@"ol"]) {
- return @"AXContentList";
- } else if ([htmlTag isEqualToString:@"dl"]) {
+ if ([htmlTag isEqualToString:@"dl"]) {
return @"AXDescriptionList";
+ } else {
+ return @"AXContentList";
}
}
@@ -1030,6 +1029,10 @@ NSDictionary* attributeToMethodNameMap = nil;
return [attributeToMethodNameMap objectForKey:attribute];
}
+- (void)swapChildren:(base::scoped_nsobject<NSMutableArray>*)other {
+ children_.swap(*other);
+}
+
// Returns the accessibility value for the given attribute. If the value isn't
// supported this will return nil.
- (id)accessibilityAttributeValue:(NSString*)attribute {
diff --git a/content/browser/accessibility/browser_accessibility_mac.h b/content/browser/accessibility/browser_accessibility_mac.h
index dc04484b67..e1b5e384dc 100644
--- a/content/browser/accessibility/browser_accessibility_mac.h
+++ b/content/browser/accessibility/browser_accessibility_mac.h
@@ -27,6 +27,11 @@ class BrowserAccessibilityMac : public BrowserAccessibility {
return browser_accessibility_cocoa_;
}
+ // Detach the BrowserAccessibilityCocoa object and then recreate it.
+ // This is only used to work around VoiceOver bugs by forcing VoiceOver
+ // to rebuild its internal state.
+ void RecreateNativeObject();
+
private:
// This gives BrowserAccessibility::Create access to the class constructor.
friend class BrowserAccessibility;
diff --git a/content/browser/accessibility/browser_accessibility_mac.mm b/content/browser/accessibility/browser_accessibility_mac.mm
index 3d13ee8190..1d4c2f92a7 100644
--- a/content/browser/accessibility/browser_accessibility_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_mac.mm
@@ -48,6 +48,21 @@ bool BrowserAccessibilityMac::IsNative() const {
return true;
}
+void BrowserAccessibilityMac::RecreateNativeObject() {
+ if (!browser_accessibility_cocoa_)
+ return;
+
+ // Preserve the children so that recreating the native object doesn't
+ // end up recreating the whole subtree.
+ base::scoped_nsobject<NSMutableArray> children;
+ [browser_accessibility_cocoa_ swapChildren:&children];
+ [browser_accessibility_cocoa_ detach];
+ [browser_accessibility_cocoa_ release];
+ browser_accessibility_cocoa_ = [[BrowserAccessibilityCocoa alloc]
+ initWithObject:this];
+ [browser_accessibility_cocoa_ swapChildren:&children];
+}
+
BrowserAccessibilityCocoa* BrowserAccessibility::ToBrowserAccessibilityCocoa() {
return static_cast<BrowserAccessibilityMac*>(this)->
native_view();
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index ce0564faf0..6bdce2d907 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -175,6 +175,8 @@ void BrowserAccessibilityManager::OnAccessibilityEvents(
}
}
+ OnTreeUpdateFinished();
+
if (should_send_initial_focus &&
(!delegate_ || delegate_->AccessibilityViewHasFocus())) {
NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index f20b6517ac..ae0bc30b31 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -58,6 +58,8 @@ class CONTENT_EXPORT BrowserAccessibilityDelegate {
virtual gfx::Rect AccessibilityGetViewBounds() const = 0;
virtual gfx::Point AccessibilityOriginInScreen(
const gfx::Rect& bounds) const = 0;
+ virtual void AccessibilityHitTest(
+ const gfx::Point& point) = 0;
virtual void AccessibilityFatalError() = 0;
};
@@ -192,6 +194,9 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate {
BrowserAccessibilityDelegate* delegate,
BrowserAccessibilityFactory* factory);
+ // Called at the end of updating the tree.
+ virtual void OnTreeUpdateFinished() {}
+
private:
// The following states keep track of whether or not the
// on-screen keyboard is allowed to be shown.
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index 21c29c0aab..07f04e71b4 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -33,11 +33,6 @@ enum AndroidHtmlElementType {
HTML_ELEMENT_TYPE_ANY
};
-// Restricts |val| to the range [min, max].
-int Clamp(int val, int min, int max) {
- return std::min(std::max(val, min), max);
-}
-
// These are special unofficial strings sent from TalkBack/BrailleBack
// to jump to certain categories of web elements.
AndroidHtmlElementType HtmlElementTypeFromString(base::string16 element_type) {
@@ -127,6 +122,11 @@ void BrowserAccessibilityManagerAndroid::NotifyAccessibilityEvent(
if (event_type == ui::AX_EVENT_HIDE)
return;
+ if (event_type == ui::AX_EVENT_HOVER) {
+ HandleHoverEvent(node);
+ return;
+ }
+
// Always send AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED to notify
// the Android system that the accessibility hierarchy rooted at this
// node has changed.
@@ -196,25 +196,10 @@ jboolean BrowserAccessibilityManagerAndroid::IsNodeValid(
return GetFromID(id) != NULL;
}
-jint BrowserAccessibilityManagerAndroid::HitTest(
+void BrowserAccessibilityManagerAndroid::HitTest(
JNIEnv* env, jobject obj, jint x, jint y) {
- BrowserAccessibilityAndroid* result =
- static_cast<BrowserAccessibilityAndroid*>(
- GetRoot()->BrowserAccessibilityForPoint(gfx::Point(x, y)));
-
- if (!result)
- return GetRoot()->GetId();
-
- if (result->IsFocusable())
- return result->GetId();
-
- // Examine the children of |result| to find the nearest accessibility focus
- // candidate
- BrowserAccessibility* nearest_node = FuzzyHitTest(x, y, result);
- if (nearest_node)
- return nearest_node->GetId();
-
- return GetRoot()->GetId();
+ if (delegate())
+ delegate()->AccessibilityHitTest(gfx::Point(x, y));
}
jboolean BrowserAccessibilityManagerAndroid::PopulateAccessibilityNodeInfo(
@@ -416,55 +401,27 @@ void BrowserAccessibilityManagerAndroid::ScrollToMakeNodeVisible(
ScrollToMakeVisible(*node, gfx::Rect(node->GetLocation().size()));
}
-BrowserAccessibility* BrowserAccessibilityManagerAndroid::FuzzyHitTest(
- int x, int y, BrowserAccessibility* start_node) {
- BrowserAccessibility* nearest_node = NULL;
- int min_distance = INT_MAX;
- FuzzyHitTestImpl(x, y, start_node, &nearest_node, &min_distance);
- return nearest_node;
-}
-
-// static
-void BrowserAccessibilityManagerAndroid::FuzzyHitTestImpl(
- int x, int y, BrowserAccessibility* start_node,
- BrowserAccessibility** nearest_candidate, int* nearest_distance) {
- BrowserAccessibilityAndroid* node =
- static_cast<BrowserAccessibilityAndroid*>(start_node);
- int distance = CalculateDistanceSquared(x, y, node);
-
- if (node->IsFocusable()) {
- if (distance < *nearest_distance) {
- *nearest_candidate = node;
- *nearest_distance = distance;
- }
- // Don't examine any more children of focusable node
- // TODO(aboxhall): what about focusable children?
+void BrowserAccessibilityManagerAndroid::HandleHoverEvent(
+ BrowserAccessibility* node) {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (obj.is_null())
return;
- }
- if (!node->GetText().empty()) {
- if (distance < *nearest_distance) {
- *nearest_candidate = node;
- *nearest_distance = distance;
+ BrowserAccessibilityAndroid* ancestor =
+ static_cast<BrowserAccessibilityAndroid*>(node->GetParent());
+ while (ancestor) {
+ if (ancestor->PlatformIsLeaf() ||
+ (ancestor->IsFocusable() && !ancestor->HasFocusableChild())) {
+ node = ancestor;
+ // Don't break - we want the highest ancestor that's focusable or a
+ // leaf node.
}
- return;
- }
-
- for (uint32 i = 0; i < node->PlatformChildCount(); i++) {
- BrowserAccessibility* child = node->PlatformGetChild(i);
- FuzzyHitTestImpl(x, y, child, nearest_candidate, nearest_distance);
+ ancestor = static_cast<BrowserAccessibilityAndroid*>(ancestor->GetParent());
}
-}
-// static
-int BrowserAccessibilityManagerAndroid::CalculateDistanceSquared(
- int x, int y, BrowserAccessibility* node) {
- gfx::Rect node_bounds = node->GetLocalBoundsRect();
- int nearest_x = Clamp(x, node_bounds.x(), node_bounds.right());
- int nearest_y = Clamp(y, node_bounds.y(), node_bounds.bottom());
- int dx = std::abs(x - nearest_x);
- int dy = std::abs(y - nearest_y);
- return dx * dx + dy * dy;
+ Java_BrowserAccessibilityManager_handleHover(
+ env, obj.obj(), node->GetId());
}
jint BrowserAccessibilityManagerAndroid::FindElementType(
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h
index cc2757cf45..a40f7e7cf8 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.h
+++ b/content/browser/accessibility/browser_accessibility_manager_android.h
@@ -43,7 +43,7 @@ class CONTENT_EXPORT BrowserAccessibilityManagerAndroid
// Tree methods.
jint GetRootId(JNIEnv* env, jobject obj);
jboolean IsNodeValid(JNIEnv* env, jobject obj, jint id);
- jint HitTest(JNIEnv* env, jobject obj, jint x, jint y);
+ void HitTest(JNIEnv* env, jobject obj, jint x, jint y);
// Populate Java accessibility data structures with info about a node.
jboolean PopulateAccessibilityNodeInfo(
@@ -83,18 +83,8 @@ class CONTENT_EXPORT BrowserAccessibilityManagerAndroid
// ContentViewCore.
JavaObjectWeakGlobalRef java_ref_;
- // Searches through the children of start_node to find the nearest
- // accessibility focus candidate for a touch which has not landed directly on
- // an accessibility focus candidate.
- BrowserAccessibility* FuzzyHitTest(
- int x, int y, BrowserAccessibility* start_node);
-
- static void FuzzyHitTestImpl(int x, int y, BrowserAccessibility* start_node,
- BrowserAccessibility** nearest_candidate, int* min_distance);
-
- // Calculates the distance from the point (x, y) to the nearest point on the
- // edge of |node|.
- static int CalculateDistanceSquared(int x, int y, BrowserAccessibility* node);
+ // Handle a hover event from the renderer process.
+ void HandleHoverEvent(BrowserAccessibility* node);
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerAndroid);
};
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.h b/content/browser/accessibility/browser_accessibility_manager_mac.h
index 4659ff510a..fb2a0eb47b 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.h
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.h
@@ -31,12 +31,17 @@ class CONTENT_EXPORT BrowserAccessibilityManagerMac
NSView* parent_view() { return parent_view_; }
private:
+ virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE;
+ virtual void OnTreeUpdateFinished() OVERRIDE;
+
// This gives BrowserAccessibilityManager::Create access to the class
// constructor.
friend class BrowserAccessibilityManager;
NSView* parent_view_;
+ bool created_live_region_;
+
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerMac);
};
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
index fba13beada..53d776bc28 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -6,6 +6,7 @@
#import "base/logging.h"
#import "content/browser/accessibility/browser_accessibility_cocoa.h"
+#import "content/browser/accessibility/browser_accessibility_mac.h"
#include "content/common/accessibility_messages.h"
namespace content {
@@ -25,7 +26,8 @@ BrowserAccessibilityManagerMac::BrowserAccessibilityManagerMac(
BrowserAccessibilityDelegate* delegate,
BrowserAccessibilityFactory* factory)
: BrowserAccessibilityManager(initial_tree, delegate, factory),
- parent_view_(parent_view) {
+ parent_view_(parent_view),
+ created_live_region_(false) {
}
// static
@@ -154,4 +156,27 @@ void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
NSAccessibilityPostNotification(native_node, event_id);
}
+void BrowserAccessibilityManagerMac::OnNodeCreationFinished(ui::AXNode* node) {
+ BrowserAccessibility* obj = GetFromAXNode(node);
+ if (obj && obj->HasStringAttribute(ui::AX_ATTR_LIVE_STATUS))
+ created_live_region_ = true;
+}
+
+void BrowserAccessibilityManagerMac::OnTreeUpdateFinished() {
+ if (!created_live_region_)
+ return;
+
+ // This code is to work around a bug in VoiceOver, where a new live
+ // region that gets added is ignored. VoiceOver seems to only scan the
+ // page for live regions once. By recreating the NSAccessibility
+ // object for the root of the tree, we force VoiceOver to clear out its
+ // internal state and find newly-added live regions this time.
+ BrowserAccessibilityMac* root =
+ static_cast<BrowserAccessibilityMac*>(GetRoot());
+ root->RecreateNativeObject();
+ NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, root);
+
+ created_live_region_ = false;
+}
+
} // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
index 1fc2bc3642..ddff85fd80 100644
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
@@ -86,6 +86,7 @@ class TestBrowserAccessibilityDelegate
const gfx::Rect& bounds) const OVERRIDE {
return gfx::Point();
}
+ virtual void AccessibilityHitTest(const gfx::Point& point) OVERRIDE {}
virtual void AccessibilityFatalError() OVERRIDE {
got_fatal_error_ = true;
}
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 520215acd2..d54d0e6e82 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -288,10 +288,19 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaInvalid) {
RunTest(FILE_PATH_LITERAL("aria-invalid.html"));
}
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
+ AccessibilityAriaLabelledByHeading) {
+ RunTest(FILE_PATH_LITERAL("aria-labelledby-heading.html"));
+}
+
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaLevel) {
RunTest(FILE_PATH_LITERAL("aria-level.html"));
}
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaList) {
+ RunTest(FILE_PATH_LITERAL("aria-list.html"));
+}
+
IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaMenu) {
RunTest(FILE_PATH_LITERAL("aria-menu.html"));
}
diff --git a/content/browser/android/browser_jni_registrar.cc b/content/browser/android/browser_jni_registrar.cc
index c93cc91a1a..34314796c6 100644
--- a/content/browser/android/browser_jni_registrar.cc
+++ b/content/browser/android/browser_jni_registrar.cc
@@ -23,7 +23,7 @@
#include "content/browser/android/surface_texture_peer_browser_impl.h"
#include "content/browser/android/tracing_controller_android.h"
#include "content/browser/android/web_contents_observer_android.h"
-#include "content/browser/battery_status/battery_status_manager_android.h"
+#include "content/browser/battery_status/battery_status_manager.h"
#include "content/browser/device_sensors/sensor_manager_android.h"
#include "content/browser/frame_host/navigation_controller_android.h"
#include "content/browser/geolocation/location_api_adapter_android.h"
@@ -46,8 +46,8 @@ namespace {
base::android::RegistrationMethod kContentRegisteredMethods[] = {
{"AndroidLocationApiAdapter",
content::AndroidLocationApiAdapter::RegisterGeolocationService},
- {"BatteryStatusManagerAndroid",
- content::BatteryStatusManagerAndroid::Register},
+ {"BatteryStatusManager",
+ content::BatteryStatusManager::Register},
{"BrowserAccessibilityManager",
content::RegisterBrowserAccessibilityManager},
{"BrowserStartupController", content::RegisterBrowserStartupController},
diff --git a/content/browser/android/child_process_launcher_android.cc b/content/browser/android/child_process_launcher_android.cc
index 8c940da89e..06fa0cb520 100644
--- a/content/browser/android/child_process_launcher_android.cc
+++ b/content/browser/android/child_process_launcher_android.cc
@@ -8,7 +8,9 @@
#include "base/android/jni_array.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/media/android/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/browser_thread.h"
@@ -29,34 +31,52 @@ namespace content {
namespace {
// Pass a java surface object to the MediaPlayerAndroid object
-// identified by render process handle, render view ID and player ID.
+// identified by render process handle, render frame ID and player ID.
static void SetSurfacePeer(
const base::android::JavaRef<jobject>& surface,
base::ProcessHandle render_process_handle,
- int render_view_id,
+ int render_frame_id,
int player_id) {
- int renderer_id = 0;
+ int render_process_id = 0;
RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
while (!it.IsAtEnd()) {
if (it.GetCurrentValue()->GetHandle() == render_process_handle) {
- renderer_id = it.GetCurrentValue()->GetID();
+ render_process_id = it.GetCurrentValue()->GetID();
break;
}
it.Advance();
}
+ if (!render_process_id) {
+ DVLOG(1) << "Cannot find render process for render_process_handle "
+ << render_process_handle;
+ return;
+ }
- if (renderer_id) {
- RenderViewHostImpl* host = RenderViewHostImpl::FromID(
- renderer_id, render_view_id);
- if (host) {
- media::MediaPlayerAndroid* player =
- host->media_player_manager()->GetPlayer(player_id);
- if (player &&
- player != host->media_player_manager()->GetFullscreenPlayer()) {
- gfx::ScopedJavaSurface scoped_surface(surface);
- player->SetVideoSurface(scoped_surface.Pass());
- }
- }
+ RenderFrameHostImpl* frame =
+ RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
+ if (!frame) {
+ DVLOG(1) << "Cannot find frame for render_frame_id " << render_frame_id;
+ return;
+ }
+
+ RenderViewHostImpl* view =
+ static_cast<RenderViewHostImpl*>(frame->GetRenderViewHost());
+ BrowserMediaPlayerManager* player_manager =
+ view->media_web_contents_observer()->GetMediaPlayerManager(frame);
+ if (!player_manager) {
+ DVLOG(1) << "Cannot find the media player manager for frame " << frame;
+ return;
+ }
+
+ media::MediaPlayerAndroid* player = player_manager->GetPlayer(player_id);
+ if (!player) {
+ DVLOG(1) << "Cannot find media player for player_id " << player_id;
+ return;
+ }
+
+ if (player != player_manager->GetFullscreenPlayer()) {
+ gfx::ScopedJavaSurface scoped_surface(surface);
+ player->SetVideoSurface(scoped_surface.Pass());
}
}
diff --git a/content/browser/android/child_process_launcher_android.h b/content/browser/android/child_process_launcher_android.h
index 448abb8591..747649fc7a 100644
--- a/content/browser/android/child_process_launcher_android.h
+++ b/content/browser/android/child_process_launcher_android.h
@@ -9,7 +9,6 @@
#include "base/callback.h"
#include "base/command_line.h"
-#include "base/platform_file.h"
#include "base/process/process.h"
#include "content/public/browser/file_descriptor_info.h"
diff --git a/content/browser/android/content_readback_handler.cc b/content/browser/android/content_readback_handler.cc
index 432b23099e..841ef5f051 100644
--- a/content/browser/android/content_readback_handler.cc
+++ b/content/browser/android/content_readback_handler.cc
@@ -6,14 +6,36 @@
#include "base/android/jni_android.h"
#include "base/bind.h"
+#include "cc/output/copy_output_request.h"
+#include "cc/output/copy_output_result.h"
#include "content/browser/android/content_view_core_impl.h"
#include "jni/ContentReadbackHandler_jni.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/base/android/window_android.h"
+#include "ui/base/android/window_android_compositor.h"
#include "ui/gfx/android/java_bitmap.h"
#include "ui/gfx/rect.h"
namespace content {
+namespace {
+
+typedef base::Callback<void(bool, const SkBitmap&)> ResultCallback;
+
+void OnFinishCopyOutputRequest(
+ const ResultCallback& result_callback,
+ scoped_ptr<cc::CopyOutputResult> copy_output_result) {
+ if (!copy_output_result->HasBitmap()) {
+ result_callback.Run(false, SkBitmap());
+ return;
+ }
+
+ scoped_ptr<SkBitmap> bitmap = copy_output_result->TakeBitmap();
+ result_callback.Run(true, *bitmap.Pass());
+}
+
+} // anonymous namespace
+
// static
bool ContentReadbackHandler::RegisterContentReadbackHandler(JNIEnv* env) {
return RegisterNativesImpl(env);
@@ -24,24 +46,10 @@ ContentReadbackHandler::ContentReadbackHandler(JNIEnv* env, jobject obj)
java_obj_.Reset(env, obj);
}
-ContentReadbackHandler::~ContentReadbackHandler() {}
-
void ContentReadbackHandler::Destroy(JNIEnv* env, jobject obj) {
delete this;
}
-void ContentReadbackHandler::OnFinishContentReadback(int readback_id,
- bool success,
- const SkBitmap& bitmap) {
- JNIEnv* env = base::android::AttachCurrentThread();
- ScopedJavaLocalRef<jobject> java_bitmap;
- if (success)
- java_bitmap = gfx::ConvertToJavaBitmap(&bitmap);
-
- Java_ContentReadbackHandler_notifyGetContentBitmapFinished(
- env, java_obj_.obj(), readback_id, success, java_bitmap.obj());
-}
-
void ContentReadbackHandler::GetContentBitmap(JNIEnv* env,
jobject obj,
jint readback_id,
@@ -56,14 +64,55 @@ void ContentReadbackHandler::GetContentBitmap(JNIEnv* env,
ContentViewCore::GetNativeContentViewCore(env, content_view_core);
DCHECK(view);
- base::Callback<void(bool, const SkBitmap&)> result_callback =
- base::Bind(&ContentReadbackHandler::OnFinishContentReadback,
+ ResultCallback result_callback =
+ base::Bind(&ContentReadbackHandler::OnFinishReadback,
weak_factory_.GetWeakPtr(),
readback_id);
view->GetScaledContentBitmap(
scale, config, gfx::Rect(x, y, width, height), result_callback);
- return;
+}
+
+void ContentReadbackHandler::GetCompositorBitmap(JNIEnv* env,
+ jobject obj,
+ jint readback_id,
+ jlong native_window_android) {
+ ui::WindowAndroid* window_android =
+ reinterpret_cast<ui::WindowAndroid*>(native_window_android);
+ DCHECK(window_android);
+
+ ResultCallback result_callback =
+ base::Bind(&ContentReadbackHandler::OnFinishReadback,
+ weak_factory_.GetWeakPtr(),
+ readback_id);
+
+ base::Callback<void(scoped_ptr<cc::CopyOutputResult>)> copy_output_callback =
+ base::Bind(&OnFinishCopyOutputRequest,
+ result_callback);
+
+ ui::WindowAndroidCompositor* compositor = window_android->GetCompositor();
+
+ if (!compositor) {
+ copy_output_callback.Run(cc::CopyOutputResult::CreateEmptyResult());
+ return;
+ }
+
+ compositor->RequestCopyOfOutputOnRootLayer(
+ cc::CopyOutputRequest::CreateBitmapRequest(copy_output_callback));
+}
+
+ContentReadbackHandler::~ContentReadbackHandler() {}
+
+void ContentReadbackHandler::OnFinishReadback(int readback_id,
+ bool success,
+ const SkBitmap& bitmap) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> java_bitmap;
+ if (success)
+ java_bitmap = gfx::ConvertToJavaBitmap(&bitmap);
+
+ Java_ContentReadbackHandler_notifyGetBitmapFinished(
+ env, java_obj_.obj(), readback_id, success, java_bitmap.obj());
}
// static
diff --git a/content/browser/android/content_readback_handler.h b/content/browser/android/content_readback_handler.h
index 11d5aa3ebe..403bdd0a7a 100644
--- a/content/browser/android/content_readback_handler.h
+++ b/content/browser/android/content_readback_handler.h
@@ -13,6 +13,10 @@
class SkBitmap;
+namespace cc {
+class CopyOutputResult;
+}
+
namespace content {
// Native side of the ContentReadbackHandler.java, which issues content
@@ -35,13 +39,17 @@ class ContentReadbackHandler {
jfloat width,
jfloat height,
jobject content_view_core);
+ void GetCompositorBitmap(JNIEnv* env,
+ jobject obj,
+ jint readback_id,
+ jlong native_window_android);
private:
virtual ~ContentReadbackHandler();
- void OnFinishContentReadback(int readback_id,
- bool success,
- const SkBitmap& bitmap);
+ void OnFinishReadback(int readback_id,
+ bool success,
+ const SkBitmap& bitmap);
base::android::ScopedJavaGlobalRef<jobject> java_obj_;
base::WeakPtrFactory<ContentReadbackHandler> weak_factory_;
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index a091df6df5..35e27097f4 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -23,7 +23,8 @@
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/frame_host/navigation_controller_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
-#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/geolocation/geolocation_dispatcher_host.h"
+#include "content/browser/media/android/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/input/motion_event_android.h"
#include "content/browser/renderer_host/input/web_input_event_builders_android.h"
@@ -42,10 +43,6 @@
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/favicon_status.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_client.h"
@@ -210,11 +207,13 @@ ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env,
Java_ContentViewCore_getNativeContentViewCore(env, obj));
}
-ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env,
- jobject obj,
- WebContents* web_contents,
- ui::ViewAndroid* view_android,
- ui::WindowAndroid* window_android)
+ContentViewCoreImpl::ContentViewCoreImpl(
+ JNIEnv* env,
+ jobject obj,
+ WebContents* web_contents,
+ ui::ViewAndroid* view_android,
+ ui::WindowAndroid* window_android,
+ jobject java_bridge_retained_object_set)
: WebContentsObserver(web_contents),
java_ref_(env, obj),
web_contents_(static_cast<WebContentsImpl*>(web_contents)),
@@ -223,7 +222,6 @@ ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env,
view_android_(view_android),
window_android_(window_android),
device_orientation_(0),
- geolocation_needs_pause_(false),
accessibility_enabled_(false) {
CHECK(web_contents) <<
"A ContentViewCoreImpl should be created with a valid WebContents.";
@@ -245,6 +243,10 @@ ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env,
BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product);
web_contents->SetUserAgentOverride(spoofed_ua);
+ java_bridge_dispatcher_host_manager_.reset(
+ new JavaBridgeDispatcherHostManager(web_contents,
+ java_bridge_retained_object_set));
+
InitWebContents();
}
@@ -256,9 +258,6 @@ ContentViewCoreImpl::~ContentViewCoreImpl() {
Java_ContentViewCore_onNativeContentViewCoreDestroyed(
env, j_obj.obj(), reinterpret_cast<intptr_t>(this));
}
- // Make sure nobody calls back into this object while we are tearing things
- // down.
- notification_registrar_.RemoveAll();
}
base::android::ScopedJavaLocalRef<jobject>
@@ -274,16 +273,6 @@ void ContentViewCoreImpl::OnJavaContentViewCoreDestroyed(JNIEnv* env,
void ContentViewCoreImpl::InitWebContents() {
DCHECK(web_contents_);
- notification_registrar_.Add(
- this, NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
- Source<WebContents>(web_contents_));
- notification_registrar_.Add(
- this, NOTIFICATION_RENDERER_PROCESS_CREATED,
- content::NotificationService::AllBrowserContextsAndSources());
- notification_registrar_.Add(
- this, NOTIFICATION_WEB_CONTENTS_CONNECTED,
- Source<WebContents>(web_contents_));
-
static_cast<WebContentsViewAndroid*>(
static_cast<WebContentsImpl*>(web_contents_)->GetView())->
SetContentViewCore(this);
@@ -292,77 +281,44 @@ void ContentViewCoreImpl::InitWebContents() {
new ContentViewUserData(this));
}
-void ContentViewCoreImpl::Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- switch (type) {
- case NOTIFICATION_RENDER_VIEW_HOST_CHANGED: {
- std::pair<RenderViewHost*, RenderViewHost*>* switched_details =
- Details<std::pair<RenderViewHost*, RenderViewHost*> >(details).ptr();
- int old_pid = 0;
- if (switched_details->first) {
- old_pid = GetRenderProcessIdFromRenderViewHost(
- switched_details->first);
-
- RenderWidgetHostViewAndroid* view =
- static_cast<RenderWidgetHostViewAndroid*>(
- switched_details->first->GetView());
- if (view)
- view->SetContentViewCore(NULL);
-
- view = static_cast<RenderWidgetHostViewAndroid*>(
- switched_details->second->GetView());
-
- if (view)
- view->SetContentViewCore(this);
- }
- int new_pid = GetRenderProcessIdFromRenderViewHost(
- web_contents_->GetRenderViewHost());
- if (new_pid != old_pid) {
- // Notify the Java side of the change of the current renderer process.
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (!obj.is_null()) {
- Java_ContentViewCore_onRenderProcessSwap(env, obj.obj());
- }
- }
- SetFocusInternal(HasFocus());
- if (geolocation_needs_pause_)
- PauseOrResumeGeolocation(true);
+void ContentViewCoreImpl::RenderViewReady() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (!obj.is_null())
+ Java_ContentViewCore_onRenderProcessChange(env, obj.obj());
- SetAccessibilityEnabledInternal(accessibility_enabled_);
- break;
- }
- case NOTIFICATION_RENDERER_PROCESS_CREATED: {
- // Notify the Java side of the current renderer process.
- RenderProcessHost* source_process_host =
- Source<RenderProcessHost>(source).ptr();
- RenderProcessHost* current_process_host =
- web_contents_->GetRenderViewHost()->GetProcess();
-
- if (source_process_host == current_process_host) {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (!obj.is_null()) {
- Java_ContentViewCore_onRenderProcessSwap(env, obj.obj());
- }
- }
- break;
- }
- case NOTIFICATION_WEB_CONTENTS_CONNECTED: {
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (!obj.is_null()) {
- Java_ContentViewCore_onWebContentsConnected(env, obj.obj());
- }
- break;
+ if (device_orientation_ != 0)
+ SendOrientationChangeEventInternal();
+}
+
+void ContentViewCoreImpl::RenderViewHostChanged(RenderViewHost* old_host,
+ RenderViewHost* new_host) {
+ int old_pid = 0;
+ if (old_host) {
+ old_pid = GetRenderProcessIdFromRenderViewHost(old_host);
+
+ RenderWidgetHostViewAndroid* view =
+ static_cast<RenderWidgetHostViewAndroid*>(old_host->GetView());
+ if (view)
+ view->SetContentViewCore(NULL);
+
+ view = static_cast<RenderWidgetHostViewAndroid*>(new_host->GetView());
+ if (view)
+ view->SetContentViewCore(this);
+ }
+ int new_pid = GetRenderProcessIdFromRenderViewHost(
+ web_contents_->GetRenderViewHost());
+ if (new_pid != old_pid) {
+ // Notify the Java side that the renderer process changed.
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (!obj.is_null()) {
+ Java_ContentViewCore_onRenderProcessChange(env, obj.obj());
}
}
-}
-void ContentViewCoreImpl::RenderViewReady() {
- if (device_orientation_ != 0)
- SendOrientationChangeEventInternal();
+ SetFocusInternal(HasFocus());
+ SetAccessibilityEnabledInternal(accessibility_enabled_);
}
RenderWidgetHostViewAndroid*
@@ -409,29 +365,14 @@ void ContentViewCoreImpl::Hide() {
}
void ContentViewCoreImpl::PauseVideo() {
- RenderViewHost* host = web_contents_->GetRenderViewHost();
- if (host)
- host->Send(new ViewMsg_PauseVideo(host->GetRoutingID()));
+ RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(
+ web_contents_->GetRenderViewHost());
+ if (rvhi)
+ rvhi->media_web_contents_observer()->PauseVideo();
}
void ContentViewCoreImpl::PauseOrResumeGeolocation(bool should_pause) {
- geolocation_needs_pause_ = should_pause;
- RenderViewHostImpl* rvh =
- static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost());
- if (rvh) {
- scoped_refptr<GeolocationDispatcherHost> geolocation_dispatcher =
- static_cast<RenderProcessHostImpl*>(
- web_contents_->GetRenderProcessHost())->
- geolocation_dispatcher_host();
- if (geolocation_dispatcher.get()) {
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&GeolocationDispatcherHost::PauseOrResume,
- geolocation_dispatcher,
- rvh->GetRoutingID(),
- should_pause));
- geolocation_needs_pause_ = false;
- }
- }
+ web_contents_->geolocation_dispatcher_host()->PauseOrResume(should_pause);
}
// All positions and sizes are in CSS pixels.
@@ -603,10 +544,12 @@ void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event,
Java_ContentViewCore_onPinchEndEventAck(env, j_obj.obj());
break;
case WebInputEvent::GestureTap:
- if (ack_result != INPUT_EVENT_ACK_STATE_CONSUMED) {
- Java_ContentViewCore_onTapEventNotConsumed(
- env, j_obj.obj(), event.x * dpi_scale(), event.y * dpi_scale());
- }
+ Java_ContentViewCore_onSingleTapEventAck(
+ env,
+ j_obj.obj(),
+ ack_result == INPUT_EVENT_ACK_STATE_CONSUMED,
+ event.x * dpi_scale(),
+ event.y * dpi_scale());
break;
case WebInputEvent::GestureDoubleTap:
Java_ContentViewCore_onDoubleTapEventAck(env, j_obj.obj());
@@ -675,20 +618,6 @@ void ContentViewCoreImpl::OnSelectionBoundsChanged(
params.is_anchor_first);
}
-void ContentViewCoreImpl::OnSelectionRootBoundsChanged(
- const gfx::Rect& bounds) {
- JNIEnv* env = AttachCurrentThread();
-
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return;
-
- ScopedJavaLocalRef<jobject> rect_object(CreateJavaRect(env, bounds));
- Java_ContentViewCore_setSelectionRootBounds(env,
- obj.obj(),
- rect_object.obj());
-}
-
void ContentViewCoreImpl::ShowPastePopup(int x_dip, int y_dip) {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
@@ -919,7 +848,8 @@ void ContentViewCoreImpl::LoadUrl(
jbyteArray post_data,
jstring base_url_for_data_url,
jstring virtual_url_for_data_url,
- jboolean can_load_local_resources) {
+ jboolean can_load_local_resources,
+ jboolean is_renderer_initiated) {
DCHECK(url);
NavigationController::LoadURLParams params(
GURL(ConvertJavaStringToUTF8(env, url)));
@@ -958,6 +888,8 @@ void ContentViewCoreImpl::LoadUrl(
static_cast<blink::WebReferrerPolicy>(referrer_policy));
}
+ params.is_renderer_initiated = is_renderer_initiated;
+
LoadUrl(params);
}
@@ -1278,8 +1210,7 @@ void ContentViewCoreImpl::SetAllowJavascriptInterfacesInspection(
JNIEnv* env,
jobject obj,
jboolean allow) {
- web_contents_->java_bridge_dispatcher_host_manager()
- ->SetAllowObjectContentsInspection(allow);
+ java_bridge_dispatcher_host_manager_->SetAllowObjectContentsInspection(allow);
}
void ContentViewCoreImpl::AddJavascriptInterface(
@@ -1287,31 +1218,26 @@ void ContentViewCoreImpl::AddJavascriptInterface(
jobject /* obj */,
jobject object,
jstring name,
- jclass safe_annotation_clazz,
- jobject retained_object_set) {
+ jclass safe_annotation_clazz) {
ScopedJavaLocalRef<jobject> scoped_object(env, object);
ScopedJavaLocalRef<jclass> scoped_clazz(env, safe_annotation_clazz);
- JavaObjectWeakGlobalRef weak_retained_object_set(env, retained_object_set);
// JavaBoundObject creates the NPObject with a ref count of 1, and
// JavaBridgeDispatcherHostManager takes its own ref.
- JavaBridgeDispatcherHostManager* java_bridge =
- web_contents_->java_bridge_dispatcher_host_manager();
- java_bridge->SetRetainedObjectSet(weak_retained_object_set);
- NPObject* bound_object =
- JavaBoundObject::Create(scoped_object,
- scoped_clazz,
- java_bridge->AsWeakPtr(),
- java_bridge->GetAllowObjectContentsInspection());
- java_bridge->AddNamedObject(ConvertJavaStringToUTF16(env, name),
- bound_object);
+ NPObject* bound_object = JavaBoundObject::Create(
+ scoped_object,
+ scoped_clazz,
+ java_bridge_dispatcher_host_manager_->AsWeakPtr(),
+ java_bridge_dispatcher_host_manager_->GetAllowObjectContentsInspection());
+ java_bridge_dispatcher_host_manager_->AddNamedObject(
+ ConvertJavaStringToUTF16(env, name), bound_object);
blink::WebBindings::releaseObject(bound_object);
}
void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env,
jobject /* obj */,
jstring name) {
- web_contents_->java_bridge_dispatcher_host_manager()->RemoveNamedObject(
+ java_bridge_dispatcher_host_manager_->RemoveNamedObject(
ConvertJavaStringToUTF16(env, name));
}
@@ -1385,6 +1311,13 @@ void ContentViewCoreImpl::ScrollFocusedEditableNodeIntoView(JNIEnv* env,
host->GetRoutingID(), gfx::Rect()));
}
+void ContentViewCoreImpl::SelectWordAroundCaret(JNIEnv* env, jobject obj) {
+ RenderViewHost* host = web_contents_->GetRenderViewHost();
+ if (!host)
+ return;
+ host->SelectWordAroundCaret();
+}
+
namespace {
static void AddNavigationEntryToHistory(JNIEnv* env, jobject obj,
@@ -1684,12 +1617,14 @@ jlong Init(JNIEnv* env,
jobject obj,
jlong native_web_contents,
jlong view_android,
- jlong window_android) {
+ jlong window_android,
+ jobject retained_objects_set) {
ContentViewCoreImpl* view = new ContentViewCoreImpl(
env, obj,
reinterpret_cast<WebContents*>(native_web_contents),
reinterpret_cast<ui::ViewAndroid*>(view_android),
- reinterpret_cast<ui::WindowAndroid*>(window_android));
+ reinterpret_cast<ui::WindowAndroid*>(window_android),
+ retained_objects_set);
return reinterpret_cast<intptr_t>(view);
}
diff --git a/content/browser/android/content_view_core_impl.h b/content/browser/android/content_view_core_impl.h
index a00b67fbcd..919dad8d91 100644
--- a/content/browser/android/content_view_core_impl.h
+++ b/content/browser/android/content_view_core_impl.h
@@ -17,8 +17,6 @@
#include "content/browser/renderer_host/render_widget_host_view_android.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/android/content_view_core.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/web_contents_observer.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/gfx/rect.h"
@@ -31,12 +29,12 @@ class WindowAndroid;
}
namespace content {
+class JavaBridgeDispatcherHostManager;
class RenderWidgetHostViewAndroid;
struct MenuItem;
// TODO(jrg): this is a shell. Upstream the rest.
class ContentViewCoreImpl : public ContentViewCore,
- public NotificationObserver,
public WebContentsObserver {
public:
static ContentViewCoreImpl* FromWebContents(WebContents* web_contents);
@@ -44,7 +42,8 @@ class ContentViewCoreImpl : public ContentViewCore,
jobject obj,
WebContents* web_contents,
ui::ViewAndroid* view_android,
- ui::WindowAndroid* window_android);
+ ui::WindowAndroid* window_android,
+ jobject java_bridge_retained_object_set);
// ContentViewCore implementation.
virtual base::android::ScopedJavaLocalRef<jobject> GetJavaObject() OVERRIDE;
@@ -89,7 +88,8 @@ class ContentViewCoreImpl : public ContentViewCore,
jbyteArray post_data,
jstring base_url_for_data_url,
jstring virtual_url_for_data_url,
- jboolean can_load_local_resources);
+ jboolean can_load_local_resources,
+ jboolean is_renderer_initiated);
base::android::ScopedJavaLocalRef<jstring> GetURL(JNIEnv* env, jobject) const;
jboolean IsIncognito(JNIEnv* env, jobject obj);
void SendOrientationChangeEvent(JNIEnv* env, jobject obj, jint orientation);
@@ -164,6 +164,7 @@ class ContentViewCoreImpl : public ContentViewCore,
long GetNativeImeAdapter(JNIEnv* env, jobject obj);
void SetFocus(JNIEnv* env, jobject obj, jboolean focused);
void ScrollFocusedEditableNodeIntoView(JNIEnv* env, jobject obj);
+ void SelectWordAroundCaret(JNIEnv* env, jobject obj);
jint GetBackgroundColor(JNIEnv* env, jobject obj);
void SetBackgroundColor(JNIEnv* env, jobject obj, jint color);
@@ -184,8 +185,7 @@ class ContentViewCoreImpl : public ContentViewCore,
jobject obj,
jobject object,
jstring name,
- jclass safe_annotation_clazz,
- jobject retained_object_set);
+ jclass safe_annotation_clazz);
void RemoveJavascriptInterface(JNIEnv* env, jobject obj, jstring name);
int GetNavigationHistory(JNIEnv* env, jobject obj, jobject history);
void GetDirectedNavigationHistory(JNIEnv* env,
@@ -264,7 +264,6 @@ class ContentViewCoreImpl : public ContentViewCore,
void OnSelectionChanged(const std::string& text);
void OnSelectionBoundsChanged(
const ViewHostMsg_SelectionBounds_Params& params);
- void OnSelectionRootBoundsChanged(const gfx::Rect& bounds);
void StartContentIntent(const GURL& content_url);
@@ -312,13 +311,10 @@ class ContentViewCoreImpl : public ContentViewCore,
friend class ContentViewUserData;
virtual ~ContentViewCoreImpl();
- // NotificationObserver implementation.
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) OVERRIDE;
-
// WebContentsObserver implementation.
virtual void RenderViewReady() OVERRIDE;
+ virtual void RenderViewHostChanged(RenderViewHost* old_host,
+ RenderViewHost* new_host) OVERRIDE;
virtual void WebContentsDestroyed() OVERRIDE;
// --------------------------------------------------------------------------
@@ -351,8 +347,6 @@ class ContentViewCoreImpl : public ContentViewCore,
// A weak reference to the Java ContentViewCore object.
JavaObjectWeakGlobalRef java_ref_;
- NotificationRegistrar notification_registrar_;
-
// Reference to the current WebContents used to determine how and what to
// display in the ContentViewCore.
WebContentsImpl* web_contents_;
@@ -374,10 +368,12 @@ class ContentViewCoreImpl : public ContentViewCore,
// will be sent to Renderer once it is ready.
int device_orientation_;
- bool geolocation_needs_pause_;
-
bool accessibility_enabled_;
+ // Manages injecting Java objects.
+ scoped_ptr<JavaBridgeDispatcherHostManager>
+ java_bridge_dispatcher_host_manager_;
+
DISALLOW_COPY_AND_ASSIGN(ContentViewCoreImpl);
};
diff --git a/content/browser/android/content_view_render_view.cc b/content/browser/android/content_view_render_view.cc
index efda29d764..06590fa751 100644
--- a/content/browser/android/content_view_render_view.cc
+++ b/content/browser/android/content_view_render_view.cc
@@ -53,8 +53,7 @@ bool ContentViewRenderView::RegisterContentViewRenderView(JNIEnv* env) {
ContentViewRenderView::ContentViewRenderView(JNIEnv* env,
jobject obj,
gfx::NativeWindow root_window)
- : buffers_swapped_during_composite_(false),
- layer_tree_build_helper_(new LayerTreeBuildHelperImpl()),
+ : layer_tree_build_helper_(new LayerTreeBuildHelperImpl()),
root_window_(root_window),
current_surface_format_(0) {
java_obj_.Reset(env, obj);
@@ -118,31 +117,17 @@ void ContentViewRenderView::SurfaceChanged(JNIEnv* env, jobject obj,
compositor_->SetWindowBounds(gfx::Size(width, height));
}
-jboolean ContentViewRenderView::Composite(JNIEnv* env, jobject obj) {
- if (!compositor_)
- return false;
-
- buffers_swapped_during_composite_ = false;
- compositor_->Composite();
- return buffers_swapped_during_composite_;
-}
-
void ContentViewRenderView::SetOverlayVideoMode(
JNIEnv* env, jobject obj, bool enabled) {
compositor_->SetHasTransparentBackground(enabled);
- Java_ContentViewRenderView_requestRender(env, obj);
}
-void ContentViewRenderView::ScheduleComposite() {
+void ContentViewRenderView::Layout() {
JNIEnv* env = base::android::AttachCurrentThread();
- Java_ContentViewRenderView_requestRender(env, java_obj_.obj());
-}
-
-void ContentViewRenderView::OnSwapBuffersPosted() {
- buffers_swapped_during_composite_ = true;
+ Java_ContentViewRenderView_onCompositorLayout(env, java_obj_.obj());
}
-void ContentViewRenderView::OnSwapBuffersCompleted() {
+void ContentViewRenderView::OnSwapBuffersCompleted(int pending_swap_buffers) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_ContentViewRenderView_onSwapBuffersCompleted(env, java_obj_.obj());
}
diff --git a/content/browser/android/content_view_render_view.h b/content/browser/android/content_view_render_view.h
index 21e79ea18c..2f1bcc1e7c 100644
--- a/content/browser/android/content_view_render_view.h
+++ b/content/browser/android/content_view_render_view.h
@@ -42,18 +42,15 @@ class ContentViewRenderView : public CompositorClient {
jboolean Composite(JNIEnv* env, jobject obj);
void SetOverlayVideoMode(JNIEnv* env, jobject obj, bool enabled);
- // CompositorClient ---------------------------------------------------------
- virtual void ScheduleComposite() OVERRIDE;
- virtual void OnSwapBuffersPosted() OVERRIDE;
- virtual void OnSwapBuffersCompleted() OVERRIDE;
+ // CompositorClient implementation
+ virtual void Layout() OVERRIDE;
+ virtual void OnSwapBuffersCompleted(int pending_swap_buffers) OVERRIDE;
private:
virtual ~ContentViewRenderView();
void InitCompositor();
- bool buffers_swapped_during_composite_;
-
base::android::ScopedJavaGlobalRef<jobject> java_obj_;
scoped_ptr<LayerTreeBuildHelper> layer_tree_build_helper_;
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
index 3e5df8b7d6..c4fdb62f4b 100644
--- a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
@@ -32,23 +32,25 @@ blink::WebGraphicsContext3D::Attributes GetDefaultAttribs() {
using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl;
-scoped_ptr<gpu::GLInProcessContext> CreateContextWithAttributes(
- scoped_refptr<gfx::GLSurface> surface,
- scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
- gpu::GLInProcessContext* share_context,
+scoped_ptr<gpu::GLInProcessContext> CreateOffscreenContext(
const blink::WebGraphicsContext3D::Attributes& attributes) {
const gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
- if (!surface)
- surface = gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1));
-
gpu::GLInProcessContextAttribs in_process_attribs;
WebGraphicsContext3DInProcessCommandBufferImpl::ConvertAttributes(
attributes, &in_process_attribs);
in_process_attribs.lose_context_when_out_of_memory = 1;
+
scoped_ptr<gpu::GLInProcessContext> context(
- gpu::GLInProcessContext::CreateWithSurface(
- surface, service, share_context, in_process_attribs, gpu_preference));
+ gpu::GLInProcessContext::Create(NULL /* service */,
+ NULL /* surface */,
+ true /* is_offscreen */,
+ gfx::kNullAcceleratedWidget,
+ gfx::Size(1, 1),
+ NULL /* share_context */,
+ false /* share_resources */,
+ in_process_attribs,
+ gpu_preference));
return context.Pass();
}
@@ -56,8 +58,31 @@ scoped_ptr<gpu::GLInProcessContext> CreateContext(
scoped_refptr<gfx::GLSurface> surface,
scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
gpu::GLInProcessContext* share_context) {
- return CreateContextWithAttributes(
- surface, service, share_context, GetDefaultAttribs());
+ const gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
+ gpu::GLInProcessContextAttribs in_process_attribs;
+ WebGraphicsContext3DInProcessCommandBufferImpl::ConvertAttributes(
+ GetDefaultAttribs(), &in_process_attribs);
+ in_process_attribs.lose_context_when_out_of_memory = 1;
+
+
+ bool is_offscreen = false;
+ gfx::Size size(1, 1);
+ if (surface) {
+ is_offscreen = surface->IsOffscreen();
+ size = surface->GetSize();
+ }
+
+ scoped_ptr<gpu::GLInProcessContext> context(
+ gpu::GLInProcessContext::Create(service,
+ surface,
+ is_offscreen,
+ gfx::kNullAcceleratedWidget,
+ size,
+ share_context,
+ false /* share_resources */,
+ in_process_attribs,
+ gpu_preference));
+ return context.Pass();
}
scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> WrapContext(
@@ -107,8 +132,7 @@ class VideoContextProvider
using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl;
SynchronousCompositorFactoryImpl::SynchronousCompositorFactoryImpl()
- : wrapped_gl_context_for_compositor_thread_(NULL),
- num_hardware_compositors_(0) {
+ : num_hardware_compositors_(0) {
SynchronousCompositorFactory::SetInstance(this);
}
@@ -137,7 +161,7 @@ scoped_refptr<ContextProviderWebContext> SynchronousCompositorFactoryImpl::
if ((!offscreen_context_for_main_thread_.get() ||
offscreen_context_for_main_thread_->DestroyedOnMainThread())) {
scoped_ptr<gpu::GLInProcessContext> context =
- CreateContext(NULL, NULL, NULL);
+ CreateOffscreenContext(GetDefaultAttribs());
offscreen_context_for_main_thread_ =
webkit::gpu::ContextProviderInProcess::Create(
WrapContext(context.Pass()),
@@ -152,61 +176,38 @@ scoped_refptr<ContextProviderWebContext> SynchronousCompositorFactoryImpl::
return offscreen_context_for_main_thread_;
}
-// This is called on the renderer compositor impl thread (InitializeHwDraw) in
-// order to support Android WebView synchronously enable and disable hardware
-// mode multiple times in the same task.
-scoped_refptr<cc::ContextProvider> SynchronousCompositorFactoryImpl::
- GetOffscreenContextProviderForCompositorThread() {
- DCHECK(service_);
- bool failed = false;
- if (!offscreen_context_for_compositor_thread_.get() ||
- offscreen_context_for_compositor_thread_->DestroyedOnMainThread()) {
- scoped_ptr<gpu::GLInProcessContext> context =
- CreateContext(new gfx::GLSurfaceStub, service_, NULL);
- wrapped_gl_context_for_compositor_thread_ = context.get();
- offscreen_context_for_compositor_thread_ =
- webkit::gpu::ContextProviderInProcess::Create(
- WrapContext(context.Pass()),
- "Compositor-Offscreen-compositor-thread");
- failed = !offscreen_context_for_compositor_thread_.get() ||
- !offscreen_context_for_compositor_thread_->BindToCurrentThread();
- }
- if (failed) {
- offscreen_context_for_compositor_thread_ = NULL;
- wrapped_gl_context_for_compositor_thread_ = NULL;
- }
- return offscreen_context_for_compositor_thread_;
-}
-
scoped_refptr<cc::ContextProvider> SynchronousCompositorFactoryImpl::
CreateOnscreenContextProviderForCompositorThread(
scoped_refptr<gfx::GLSurface> surface) {
- DCHECK(surface);
DCHECK(service_);
- DCHECK(wrapped_gl_context_for_compositor_thread_);
+ if (!share_context_.get())
+ share_context_ = CreateContext(NULL, service_, NULL);
return webkit::gpu::ContextProviderInProcess::Create(
- WrapContext(CreateContext(
- surface, service_, wrapped_gl_context_for_compositor_thread_)),
- "Compositor-Onscreen");
+ WrapContext(CreateContext(surface, service_, share_context_.get())),
+ "Child-Compositor");
+}
+
+gpu::GLInProcessContext* SynchronousCompositorFactoryImpl::GetShareContext() {
+ DCHECK(share_context_.get());
+ return share_context_.get();
}
scoped_refptr<StreamTextureFactory>
-SynchronousCompositorFactoryImpl::CreateStreamTextureFactory(int view_id) {
+SynchronousCompositorFactoryImpl::CreateStreamTextureFactory(int frame_id) {
scoped_refptr<StreamTextureFactorySynchronousImpl> factory(
StreamTextureFactorySynchronousImpl::Create(
base::Bind(
&SynchronousCompositorFactoryImpl::TryCreateStreamTextureFactory,
base::Unretained(this)),
- view_id));
+ frame_id));
return factory;
}
blink::WebGraphicsContext3D*
SynchronousCompositorFactoryImpl::CreateOffscreenGraphicsContext3D(
const blink::WebGraphicsContext3D::Attributes& attributes) {
- return WrapContext(CreateContextWithAttributes(NULL, NULL, NULL, attributes))
- .release();
+ return WrapContext(CreateOffscreenContext(attributes)).release();
}
void SynchronousCompositorFactoryImpl::CompositorInitializedHardwareDraw() {
@@ -235,12 +236,10 @@ SynchronousCompositorFactoryImpl::TryCreateStreamTextureFactory() {
// will fail creation when all compositors release hardware draw.
if (CanCreateMainThreadContext() && !video_context_provider_) {
DCHECK(service_);
- DCHECK(wrapped_gl_context_for_compositor_thread_);
+ DCHECK(share_context_.get());
video_context_provider_ = new VideoContextProvider(
- CreateContext(new gfx::GLSurfaceStub,
- service_,
- wrapped_gl_context_for_compositor_thread_));
+ CreateContext(NULL, service_, share_context_.get()));
}
return video_context_provider_;
}
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.h b/content/browser/android/in_process/synchronous_compositor_factory_impl.h
index cafd6411a9..c7f1a3bf82 100644
--- a/content/browser/android/in_process/synchronous_compositor_factory_impl.h
+++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.h
@@ -46,11 +46,6 @@ class SynchronousCompositorFactoryImpl : public SynchronousCompositorFactory {
virtual blink::WebGraphicsContext3D* CreateOffscreenGraphicsContext3D(
const blink::WebGraphicsContext3D::Attributes& attributes) OVERRIDE;
- // This is called on the renderer compositor impl thread (InitializeHwDraw) in
- // order to support Android WebView synchronously enable and disable hardware
- // mode multiple times in the same task.
- scoped_refptr<cc::ContextProvider>
- GetOffscreenContextProviderForCompositorThread();
SynchronousInputEventFilter* synchronous_input_event_filter() {
return &synchronous_input_event_filter_;
@@ -64,6 +59,7 @@ class SynchronousCompositorFactoryImpl : public SynchronousCompositorFactory {
scoped_refptr<cc::ContextProvider>
CreateOnscreenContextProviderForCompositorThread(
scoped_refptr<gfx::GLSurface> surface);
+ gpu::GLInProcessContext* GetShareContext();
private:
bool CanCreateMainThreadContext();
@@ -74,12 +70,9 @@ class SynchronousCompositorFactoryImpl : public SynchronousCompositorFactory {
scoped_refptr<webkit::gpu::ContextProviderWebContext>
offscreen_context_for_main_thread_;
- // This is a pointer to the context owned by
- // |offscreen_context_for_main_thread_|.
- gpu::GLInProcessContext* wrapped_gl_context_for_compositor_thread_;
- scoped_refptr<cc::ContextProvider> offscreen_context_for_compositor_thread_;
scoped_refptr<gpu::InProcessCommandBuffer::Service> service_;
+ scoped_ptr<gpu::GLInProcessContext> share_context_;
scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider>
video_context_provider_;
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc
index 89d919eb28..0a0be1cd16 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -66,7 +66,8 @@ SynchronousCompositorImpl::SynchronousCompositorImpl(WebContents* contents)
: compositor_client_(NULL),
output_surface_(NULL),
contents_(contents),
- input_handler_(NULL) {
+ input_handler_(NULL),
+ weak_ptr_factory_(this) {
DCHECK(contents);
}
@@ -93,12 +94,8 @@ bool SynchronousCompositorImpl::InitializeHwDraw(
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
- // Create contexts in this order so that the share group gets passed
- // along correctly.
- scoped_refptr<cc::ContextProvider> offscreen_context =
- g_factory.Get().GetOffscreenContextProviderForCompositorThread();
scoped_refptr<cc::ContextProvider> onscreen_context =
- g_factory.Get().CreateOnscreenContextProviderForCompositorThread(surface);
+ g_factory.Get().CreateOnscreenContextProviderForCompositorThread(surface);
bool success = output_surface_->InitializeHwDraw(onscreen_context);
@@ -114,24 +111,58 @@ void SynchronousCompositorImpl::ReleaseHwDraw() {
g_factory.Get().CompositorReleasedHardwareDraw();
}
-bool SynchronousCompositorImpl::DemandDrawHw(
- gfx::Size surface_size,
- const gfx::Transform& transform,
- gfx::Rect viewport,
- gfx::Rect clip,
- bool stencil_enabled) {
+gpu::GLInProcessContext* SynchronousCompositorImpl::GetShareContext() {
+ DCHECK(CalledOnValidThread());
+ return g_factory.Get().GetShareContext();
+}
+
+scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw(
+ gfx::Size surface_size,
+ const gfx::Transform& transform,
+ gfx::Rect viewport,
+ gfx::Rect clip,
+ bool stencil_enabled) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
- return output_surface_->DemandDrawHw(
+ scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawHw(
surface_size, transform, viewport, clip, stencil_enabled);
+ if (frame.get())
+ UpdateFrameMetaData(frame->metadata);
+ return frame.Pass();
+}
+
+void SynchronousCompositorImpl::ReturnResources(
+ const cc::CompositorFrameAck& frame_ack) {
+ DCHECK(CalledOnValidThread());
+ output_surface_->ReturnResources(frame_ack);
}
bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
DCHECK(CalledOnValidThread());
DCHECK(output_surface_);
- return output_surface_->DemandDrawSw(canvas);
+ scoped_ptr<cc::CompositorFrame> frame = output_surface_->DemandDrawSw(canvas);
+ if (frame.get())
+ UpdateFrameMetaData(frame->metadata);
+ return !!frame.get();
+}
+
+void SynchronousCompositorImpl::UpdateFrameMetaData(
+ const cc::CompositorFrameMetadata& frame_metadata) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&SynchronousCompositorImpl::UpdateFrameMetaData,
+ weak_ptr_factory_.GetWeakPtr(),
+ frame_metadata));
+ return;
+ }
+ RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
+ contents_->GetRenderWidgetHostView());
+ if (rwhv)
+ rwhv->SynchronousFrameMetadata(frame_metadata);
}
void SynchronousCompositorImpl::SetMemoryPolicy(
@@ -211,33 +242,11 @@ InputEventAckState SynchronousCompositorImpl::HandleInputEvent(
contents_->GetRoutingID(), input_event);
}
-void SynchronousCompositorImpl::UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_metadata) {
- RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
- contents_->GetRenderWidgetHostView());
- if (rwhv)
- rwhv->SynchronousFrameMetadata(frame_metadata);
-}
-
void SynchronousCompositorImpl::DidActivatePendingTree() {
if (compositor_client_)
compositor_client_->DidUpdateContent();
}
-void SynchronousCompositorImpl::SetMaxScrollOffset(
- const gfx::Vector2dF& max_scroll_offset) {
- DCHECK(CalledOnValidThread());
- if (compositor_client_)
- compositor_client_->SetMaxRootLayerScrollOffset(max_scroll_offset);
-}
-
-void SynchronousCompositorImpl::SetTotalScrollOffset(
- const gfx::Vector2dF& new_value) {
- DCHECK(CalledOnValidThread());
- if (compositor_client_)
- compositor_client_->SetTotalRootLayerScrollOffset(new_value);
-}
-
gfx::Vector2dF SynchronousCompositorImpl::GetTotalScrollOffset() {
DCHECK(CalledOnValidThread());
if (compositor_client_)
@@ -252,21 +261,23 @@ bool SynchronousCompositorImpl::IsExternalFlingActive() const {
return false;
}
-void SynchronousCompositorImpl::SetTotalPageScaleFactorAndLimits(
+void SynchronousCompositorImpl::UpdateRootLayerState(
+ const gfx::Vector2dF& total_scroll_offset,
+ const gfx::Vector2dF& max_scroll_offset,
+ const gfx::SizeF& scrollable_size,
float page_scale_factor,
float min_page_scale_factor,
float max_page_scale_factor) {
DCHECK(CalledOnValidThread());
- if (compositor_client_)
- compositor_client_->SetRootLayerPageScaleFactorAndLimits(
- page_scale_factor, min_page_scale_factor, max_page_scale_factor);
-}
-
-void SynchronousCompositorImpl::SetScrollableSize(
- const gfx::SizeF& scrollable_size) {
- DCHECK(CalledOnValidThread());
- if (compositor_client_)
- compositor_client_->SetRootLayerScrollableSize(scrollable_size);
+ if (!compositor_client_)
+ return;
+
+ compositor_client_->UpdateRootLayerState(total_scroll_offset,
+ max_scroll_offset,
+ scrollable_size,
+ page_scale_factor,
+ min_page_scale_factor,
+ max_page_scale_factor);
}
// Not using base::NonThreadSafe as we want to enforce a more exacting threading
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.h b/content/browser/android/in_process/synchronous_compositor_impl.h
index 885db21904..544a533db1 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.h
+++ b/content/browser/android/in_process/synchronous_compositor_impl.h
@@ -51,13 +51,16 @@ class SynchronousCompositorImpl
virtual bool InitializeHwDraw(
scoped_refptr<gfx::GLSurface> surface) OVERRIDE;
virtual void ReleaseHwDraw() OVERRIDE;
- virtual bool DemandDrawHw(
+ virtual gpu::GLInProcessContext* GetShareContext() OVERRIDE;
+ virtual scoped_ptr<cc::CompositorFrame> DemandDrawHw(
gfx::Size surface_size,
const gfx::Transform& transform,
gfx::Rect viewport,
gfx::Rect clip,
bool stencil_enabled) OVERRIDE;
virtual bool DemandDrawSw(SkCanvas* canvas) OVERRIDE;
+ virtual void ReturnResources(
+ const cc::CompositorFrameAck& frame_ack) OVERRIDE;
virtual void SetMemoryPolicy(
const SynchronousCompositorMemoryPolicy& policy) OVERRIDE;
virtual void DidChangeRootLayerScrollOffset() OVERRIDE;
@@ -68,21 +71,17 @@ class SynchronousCompositorImpl
virtual void DidDestroySynchronousOutputSurface(
SynchronousCompositorOutputSurface* output_surface) OVERRIDE;
virtual void SetContinuousInvalidate(bool enable) OVERRIDE;
- virtual void UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_info) OVERRIDE;
virtual void DidActivatePendingTree() OVERRIDE;
// LayerScrollOffsetDelegate
- virtual void SetMaxScrollOffset(
- const gfx::Vector2dF& max_scroll_offset) OVERRIDE;
- virtual void SetTotalScrollOffset(const gfx::Vector2dF& new_value) OVERRIDE;
virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE;
+ virtual void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset,
+ const gfx::Vector2dF& max_scroll_offset,
+ const gfx::SizeF& scrollable_size,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) OVERRIDE;
virtual bool IsExternalFlingActive() const OVERRIDE;
- virtual void SetTotalPageScaleFactorAndLimits(
- float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) OVERRIDE;
- virtual void SetScrollableSize(const gfx::SizeF& scrollable_size) OVERRIDE;
void SetInputHandler(cc::InputHandler* input_handler);
void DidOverscroll(const DidOverscrollParams& params);
@@ -93,8 +92,7 @@ class SynchronousCompositorImpl
virtual ~SynchronousCompositorImpl();
friend class WebContentsUserData<SynchronousCompositorImpl>;
- void DidCreateSynchronousOutputSurface(
- SynchronousCompositorOutputSurface* output_surface);
+ void UpdateFrameMetaData(const cc::CompositorFrameMetadata& frame_info);
bool CalledOnValidThread() const;
SynchronousCompositorClient* compositor_client_;
@@ -102,6 +100,8 @@ class SynchronousCompositorImpl
WebContents* contents_;
cc::InputHandler* input_handler_;
+ base::WeakPtrFactory<SynchronousCompositorImpl> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorImpl);
};
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.cc b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
index de609c3c7e..4590ed3138 100644
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.cc
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.cc
@@ -12,6 +12,7 @@
#include "cc/output/output_surface_client.h"
#include "cc/output/software_output_device.h"
#include "content/browser/android/in_process/synchronous_compositor_impl.h"
+#include "content/browser/gpu/compositor_util.h"
#include "content/public/browser/browser_thread.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/common/gpu_memory_allocation.h"
@@ -39,7 +40,8 @@ class SynchronousCompositorOutputSurface::SoftwareDevice
SoftwareDevice(SynchronousCompositorOutputSurface* surface)
: surface_(surface) {
}
- virtual void Resize(const gfx::Size& size) OVERRIDE {
+ virtual void Resize(const gfx::Size& pixel_size,
+ float scale_factor) OVERRIDE {
// Intentional no-op: canvas size is controlled by the embedder.
}
virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) OVERRIDE {
@@ -47,7 +49,7 @@ class SynchronousCompositorOutputSurface::SoftwareDevice
NOTREACHED() << "BeginPaint with no canvas set";
return &null_canvas_;
}
- LOG_IF(WARNING, surface_->did_swap_buffer_)
+ LOG_IF(WARNING, surface_->frame_holder_.get())
<< "Mutliple calls to BeginPaint per frame";
return surface_->current_sw_canvas_;
}
@@ -71,14 +73,16 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface(
routing_id_(routing_id),
needs_begin_frame_(false),
invoking_composite_(false),
- did_swap_buffer_(false),
current_sw_canvas_(NULL),
memory_policy_(0),
- output_surface_client_(NULL),
- weak_ptr_factory_(this) {
+ output_surface_client_(NULL) {
capabilities_.deferred_gl_initialization = true;
capabilities_.draw_and_swap_full_viewport_every_frame = true;
capabilities_.adjust_deadline_for_parent = false;
+ if (IsDelegatedRendererEnabled()) {
+ capabilities_.delegated_rendering = true;
+ capabilities_.max_frames_pending = 1;
+ }
// Cannot call out to GetDelegate() here as the output surface is not
// constructed on the correct thread.
@@ -135,31 +139,15 @@ void SynchronousCompositorOutputSurface::SetNeedsBeginFrame(bool enable) {
void SynchronousCompositorOutputSurface::SwapBuffers(
cc::CompositorFrame* frame) {
DCHECK(CalledOnValidThread());
- if (!ForcedDrawToSoftwareDevice()) {
+ if (!ForcedDrawToSoftwareDevice() && !IsDelegatedRendererEnabled()) {
DCHECK(context_provider_);
context_provider_->ContextGL()->ShallowFlushCHROMIUM();
}
- UpdateFrameMetaData(frame->metadata);
- did_swap_buffer_ = true;
- client_->DidSwapBuffers();
-}
-
-void SynchronousCompositorOutputSurface::UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_info) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&SynchronousCompositorOutputSurface::UpdateFrameMetaData,
- weak_ptr_factory_.GetWeakPtr(),
- frame_info));
- return;
- }
+ frame_holder_.reset(new cc::CompositorFrame);
+ frame->AssignTo(frame_holder_.get());
- SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
- if (delegate)
- delegate->UpdateFrameMetaData(frame_info);
+ client_->DidSwapBuffers();
}
namespace {
@@ -183,7 +171,8 @@ void SynchronousCompositorOutputSurface::ReleaseHwDraw() {
cc::OutputSurface::ReleaseGL();
}
-bool SynchronousCompositorOutputSurface::DemandDrawHw(
+scoped_ptr<cc::CompositorFrame>
+SynchronousCompositorOutputSurface::DemandDrawHw(
gfx::Size surface_size,
const gfx::Transform& transform,
gfx::Rect viewport,
@@ -197,10 +186,11 @@ bool SynchronousCompositorOutputSurface::DemandDrawHw(
SetExternalStencilTest(stencil_enabled);
InvokeComposite(transform, viewport, clip, true);
- return did_swap_buffer_;
+ return frame_holder_.Pass();
}
-bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
+scoped_ptr<cc::CompositorFrame>
+SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
DCHECK(CalledOnValidThread());
DCHECK(canvas);
DCHECK(!current_sw_canvas_);
@@ -219,7 +209,7 @@ bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
InvokeComposite(transform, clip, clip, false);
- return did_swap_buffer_;
+ return frame_holder_.Pass();
}
void SynchronousCompositorOutputSurface::InvokeComposite(
@@ -228,8 +218,8 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
gfx::Rect clip,
bool valid_for_tile_management) {
DCHECK(!invoking_composite_);
+ DCHECK(!frame_holder_.get());
base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
- did_swap_buffer_ = false;
gfx::Transform adjusted_transform = transform;
AdjustTransform(&adjusted_transform, viewport);
@@ -250,7 +240,7 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
cached_hw_transform_, cached_hw_viewport_, cached_hw_clip_, true);
}
- if (did_swap_buffer_)
+ if (frame_holder_.get())
client_->DidSwapBuffersComplete();
SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
@@ -258,6 +248,11 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
delegate->SetContinuousInvalidate(needs_begin_frame_);
}
+void SynchronousCompositorOutputSurface::ReturnResources(
+ const cc::CompositorFrameAck& frame_ack) {
+ ReclaimResources(&frame_ack);
+}
+
void SynchronousCompositorOutputSurface::SetMemoryPolicy(
const SynchronousCompositorMemoryPolicy& policy) {
DCHECK(CalledOnValidThread());
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.h b/content/browser/android/in_process/synchronous_compositor_output_surface.h
index 61f546f01b..cc1f3be6cb 100644
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.h
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.h
@@ -9,6 +9,7 @@
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "cc/output/compositor_frame.h"
#include "cc/output/managed_memory_policy.h"
#include "cc/output/output_surface.h"
#include "content/public/browser/android/synchronous_compositor.h"
@@ -32,8 +33,6 @@ class SynchronousCompositorOutputSurfaceDelegate {
virtual void DidDestroySynchronousOutputSurface(
SynchronousCompositorOutputSurface* output_surface) = 0;
virtual void SetContinuousInvalidate(bool enable) = 0;
- virtual void UpdateFrameMetaData(
- const cc::CompositorFrameMetadata& frame_metadata) = 0;
virtual void DidActivatePendingTree() = 0;
protected:
@@ -66,12 +65,13 @@ class SynchronousCompositorOutputSurface
bool InitializeHwDraw(
scoped_refptr<cc::ContextProvider> onscreen_context_provider);
void ReleaseHwDraw();
- bool DemandDrawHw(gfx::Size surface_size,
- const gfx::Transform& transform,
- gfx::Rect viewport,
- gfx::Rect clip,
- bool stencil_enabled);
- bool DemandDrawSw(SkCanvas* canvas);
+ scoped_ptr<cc::CompositorFrame> DemandDrawHw(gfx::Size surface_size,
+ const gfx::Transform& transform,
+ gfx::Rect viewport,
+ gfx::Rect clip,
+ bool stencil_enabled);
+ void ReturnResources(const cc::CompositorFrameAck& frame_ack);
+ scoped_ptr<cc::CompositorFrame> DemandDrawSw(SkCanvas* canvas);
void SetMemoryPolicy(const SynchronousCompositorMemoryPolicy& policy);
private:
@@ -84,12 +84,10 @@ class SynchronousCompositorOutputSurface
bool valid_for_tile_management);
bool CalledOnValidThread() const;
SynchronousCompositorOutputSurfaceDelegate* GetDelegate();
- void UpdateFrameMetaData(const cc::CompositorFrameMetadata& frame_info);
int routing_id_;
bool needs_begin_frame_;
bool invoking_composite_;
- bool did_swap_buffer_;
gfx::Transform cached_hw_transform_;
gfx::Rect cached_hw_viewport_;
@@ -101,8 +99,7 @@ class SynchronousCompositorOutputSurface
cc::ManagedMemoryPolicy memory_policy_;
cc::OutputSurfaceClient* output_surface_client_;
-
- base::WeakPtrFactory<SynchronousCompositorOutputSurface> weak_ptr_factory_;
+ scoped_ptr<cc::CompositorFrame> frame_holder_;
DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorOutputSurface);
};
diff --git a/content/browser/android/load_url_params.cc b/content/browser/android/load_url_params.cc
index 2c49e975b8..d276622f55 100644
--- a/content/browser/android/load_url_params.cc
+++ b/content/browser/android/load_url_params.cc
@@ -39,7 +39,7 @@ bool RegisterLoadUrlParams(JNIEnv* env) {
jboolean IsDataScheme(JNIEnv* env, jclass clazz, jstring jurl) {
GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
- return url.SchemeIs(kDataScheme);
+ return url.SchemeIs(url::kDataScheme);
}
} // namespace content
diff --git a/content/browser/android/surface_texture_peer_browser_impl.cc b/content/browser/android/surface_texture_peer_browser_impl.cc
index 7935c9ab40..99e2c08ea0 100644
--- a/content/browser/android/surface_texture_peer_browser_impl.cc
+++ b/content/browser/android/surface_texture_peer_browser_impl.cc
@@ -4,7 +4,9 @@
#include "content/browser/android/surface_texture_peer_browser_impl.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/media/android/media_web_contents_observer.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
@@ -16,34 +18,52 @@ namespace content {
namespace {
// Pass a java surface object to the MediaPlayerAndroid object
-// identified by render process handle, render view ID and player ID.
+// identified by render process handle, render frame ID and player ID.
static void SetSurfacePeer(
scoped_refptr<gfx::SurfaceTexture> surface_texture,
base::ProcessHandle render_process_handle,
- int render_view_id,
+ int render_frame_id,
int player_id) {
- int renderer_id = 0;
+ int render_process_id = 0;
RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
while (!it.IsAtEnd()) {
if (it.GetCurrentValue()->GetHandle() == render_process_handle) {
- renderer_id = it.GetCurrentValue()->GetID();
+ render_process_id = it.GetCurrentValue()->GetID();
break;
}
it.Advance();
}
+ if (!render_process_id) {
+ DVLOG(1) << "Cannot find render process for render_process_handle "
+ << render_process_handle;
+ return;
+ }
- if (renderer_id) {
- RenderViewHostImpl* host = RenderViewHostImpl::FromID(
- renderer_id, render_view_id);
- if (host) {
- media::MediaPlayerAndroid* player =
- host->media_player_manager()->GetPlayer(player_id);
- if (player &&
- player != host->media_player_manager()->GetFullscreenPlayer()) {
- gfx::ScopedJavaSurface surface(surface_texture.get());
- player->SetVideoSurface(surface.Pass());
- }
- }
+ RenderFrameHostImpl* frame =
+ RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
+ if (!frame) {
+ DVLOG(1) << "Cannot find frame for render_frame_id " << render_frame_id;
+ return;
+ }
+
+ RenderViewHostImpl* view =
+ static_cast<RenderViewHostImpl*>(frame->GetRenderViewHost());
+ BrowserMediaPlayerManager* player_manager =
+ view->media_web_contents_observer()->GetMediaPlayerManager(frame);
+ if (!player_manager) {
+ DVLOG(1) << "Cannot find the media player manager for frame " << frame;
+ return;
+ }
+
+ media::MediaPlayerAndroid* player = player_manager->GetPlayer(player_id);
+ if (!player) {
+ DVLOG(1) << "Cannot find media player for player_id " << player_id;
+ return;
+ }
+
+ if (player != player_manager->GetFullscreenPlayer()) {
+ gfx::ScopedJavaSurface scoped_surface(surface_texture);
+ player->SetVideoSurface(scoped_surface.Pass());
}
}
@@ -58,14 +78,14 @@ SurfaceTexturePeerBrowserImpl::~SurfaceTexturePeerBrowserImpl() {
void SurfaceTexturePeerBrowserImpl::EstablishSurfaceTexturePeer(
base::ProcessHandle render_process_handle,
scoped_refptr<gfx::SurfaceTexture> surface_texture,
- int render_view_id,
+ int render_frame_id,
int player_id) {
if (!surface_texture.get())
return;
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
&SetSurfacePeer, surface_texture, render_process_handle,
- render_view_id, player_id));
+ render_frame_id, player_id));
}
} // namespace content
diff --git a/content/browser/android/surface_texture_peer_browser_impl.h b/content/browser/android/surface_texture_peer_browser_impl.h
index 4aa85634dc..ea3fd04655 100644
--- a/content/browser/android/surface_texture_peer_browser_impl.h
+++ b/content/browser/android/surface_texture_peer_browser_impl.h
@@ -25,7 +25,7 @@ class SurfaceTexturePeerBrowserImpl : public SurfaceTexturePeer {
virtual void EstablishSurfaceTexturePeer(
base::ProcessHandle render_process_handle,
scoped_refptr<gfx::SurfaceTexture> surface_texture,
- int render_view_id,
+ int render_frame_id,
int player_id) OVERRIDE;
private:
diff --git a/content/browser/appcache/appcache_dispatcher_host.cc b/content/browser/appcache/appcache_dispatcher_host.cc
index 827a1ee8a2..1ac788d722 100644
--- a/content/browser/appcache/appcache_dispatcher_host.cc
+++ b/content/browser/appcache/appcache_dispatcher_host.cc
@@ -37,10 +37,9 @@ void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) {
}
}
-bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(AppCacheDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(AppCacheDispatcherHost, message)
IPC_MESSAGE_HANDLER(AppCacheHostMsg_RegisterHost, OnRegisterHost)
IPC_MESSAGE_HANDLER(AppCacheHostMsg_UnregisterHost, OnUnregisterHost)
IPC_MESSAGE_HANDLER(AppCacheHostMsg_SetSpawningHostId, OnSetSpawningHostId)
@@ -56,7 +55,7 @@ bool AppCacheDispatcherHost::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER_DELAY_REPLY(AppCacheHostMsg_StartUpdate, OnStartUpdate)
IPC_MESSAGE_HANDLER_DELAY_REPLY(AppCacheHostMsg_SwapCache, OnSwapCache)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/appcache/appcache_dispatcher_host.h b/content/browser/appcache/appcache_dispatcher_host.h
index 29ed69ecf8..4ddb23685f 100644
--- a/content/browser/appcache/appcache_dispatcher_host.h
+++ b/content/browser/appcache/appcache_dispatcher_host.h
@@ -28,8 +28,7 @@ class AppCacheDispatcherHost : public BrowserMessageFilter {
// BrowserIOMessageFilter implementation
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~AppCacheDispatcherHost();
diff --git a/content/browser/appcache/appcache_unittest.cc b/content/browser/appcache/appcache_unittest.cc
index d1e4b6ed18..1bdcfba087 100644
--- a/content/browser/appcache/appcache_unittest.cc
+++ b/content/browser/appcache/appcache_unittest.cc
@@ -23,6 +23,8 @@ using appcache::Manifest;
using appcache::Namespace;
using appcache::NamespaceVector;
using appcache::NETWORK_NAMESPACE;
+using appcache::PARSE_MANIFEST_ALLOWING_INTERCEPTS;
+using appcache::PARSE_MANIFEST_PER_STANDARD;
using appcache::Status;
namespace content {
@@ -577,8 +579,8 @@ TEST(AppCacheTest, ToFromDatabaseRecords) {
new AppCacheGroup(service.storage(), kManifestUrl, kGroupId);
scoped_refptr<AppCache> cache(new AppCache(service.storage(), kCacheId));
Manifest manifest;
- EXPECT_TRUE(
- ParseManifest(kManifestUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kManifestUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
cache->InitializeWithManifest(&manifest);
EXPECT_EQ(NETWORK_NAMESPACE, cache->online_whitelist_namespaces_[0].type);
EXPECT_TRUE(cache->online_whitelist_namespaces_[0].is_pattern);
diff --git a/content/browser/appcache/manifest_parser_unittest.cc b/content/browser/appcache/manifest_parser_unittest.cc
index 7178d30512..7b88220c3f 100644
--- a/content/browser/appcache/manifest_parser_unittest.cc
+++ b/content/browser/appcache/manifest_parser_unittest.cc
@@ -13,6 +13,8 @@ using appcache::NamespaceVector;
using appcache::FALLBACK_NAMESPACE;
using appcache::INTERCEPT_NAMESPACE;
using appcache::NETWORK_NAMESPACE;
+using appcache::PARSE_MANIFEST_ALLOWING_INTERCEPTS;
+using appcache::PARSE_MANIFEST_PER_STANDARD;
namespace content {
@@ -22,8 +24,10 @@ class AppCacheManifestParserTest : public testing::Test {
TEST(AppCacheManifestParserTest, NoData) {
GURL url;
Manifest manifest;
- EXPECT_FALSE(ParseManifest(url, "", 0, manifest));
- EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, manifest)); // 0 len
+ EXPECT_FALSE(ParseManifest(url, "", 0,
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
+ EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, // Len is 0.
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
}
TEST(AppCacheManifestParserTest, CheckSignature) {
@@ -43,7 +47,8 @@ TEST(AppCacheManifestParserTest, CheckSignature) {
for (size_t i = 0; i < arraysize(kBadSignatures); ++i) {
const std::string bad = kBadSignatures[i];
- EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(), manifest));
+ EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
}
const std::string kGoodSignatures[] = {
@@ -60,7 +65,8 @@ TEST(AppCacheManifestParserTest, CheckSignature) {
for (size_t i = 0; i < arraysize(kGoodSignatures); ++i) {
const std::string good = kGoodSignatures[i];
- EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(), manifest));
+ EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
}
}
@@ -70,7 +76,8 @@ TEST(AppCacheManifestParserTest, NoManifestUrl) {
"relative/tobase.com\r"
"http://absolute.com/addme.com");
const GURL kUrl;
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.explicit_urls.empty());
EXPECT_TRUE(manifest.fallback_namespaces.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
@@ -97,7 +104,8 @@ TEST(AppCacheManifestParserTest, ExplicitUrls) {
" \t relative/four#stripme\n\r"
"*\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.fallback_namespaces.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
EXPECT_FALSE(manifest.online_whitelist_all);
@@ -112,6 +120,24 @@ TEST(AppCacheManifestParserTest, ExplicitUrls) {
// Wildcard is treated as a relative URL in explicit section.
EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
+
+ // We should get the same results with intercepts disallowed.
+ manifest = Manifest();
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_PER_STANDARD, manifest));
+ EXPECT_TRUE(manifest.fallback_namespaces.empty());
+ EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
+ EXPECT_FALSE(manifest.online_whitelist_all);
+
+ urls = manifest.explicit_urls;
+ ASSERT_EQ(kExpected, urls.size());
+ EXPECT_TRUE(urls.find("http://www.foo.com/relative/one") != urls.end());
+ EXPECT_TRUE(urls.find("http://www.foo.com/two") != urls.end());
+ EXPECT_TRUE(urls.find("http://www.diff.com/three") != urls.end());
+ EXPECT_TRUE(urls.find("http://www.foo.com/relative/four") != urls.end());
+
+ // Wildcard is treated as a relative URL in explicit section.
+ EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
}
TEST(AppCacheManifestParserTest, WhitelistUrls) {
@@ -134,7 +160,8 @@ TEST(AppCacheManifestParserTest, WhitelistUrls) {
"http://www.five.com\r\n"
"*foo\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.explicit_urls.empty());
EXPECT_TRUE(manifest.fallback_namespaces.empty());
EXPECT_TRUE(manifest.intercept_namespaces.empty());
@@ -180,7 +207,8 @@ TEST(AppCacheManifestParserTest, FallbackUrls) {
"relative/four#strip relative/fourfb#strip\r"
"http://www.glorp.com/notsame relative/skipped\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.explicit_urls.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
EXPECT_FALSE(manifest.online_whitelist_all);
@@ -230,7 +258,8 @@ TEST(AppCacheManifestParserTest, FallbackUrlsWithPort) {
"http://www.portme.com/noport http://www.portme.com:1234/skipped\r"
"http://www.portme.com:1234/skipme http://www.portme.com/noport\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.explicit_urls.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
EXPECT_FALSE(manifest.online_whitelist_all);
@@ -272,7 +301,8 @@ TEST(AppCacheManifestParserTest, InterceptUrls) {
"http://www.portme.com:1234/skipme return http://www.portme.com/noport\r"
"relative/wrong/again missing/intercept_type\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.fallback_namespaces.empty());
EXPECT_TRUE(manifest.explicit_urls.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
@@ -296,6 +326,16 @@ TEST(AppCacheManifestParserTest, InterceptUrls) {
intercepts[2].namespace_url);
EXPECT_EQ(GURL("http://www.portme.com:1234/int3"),
intercepts[2].target_url);
+
+ // Disallow intercepts ths time.
+ manifest = Manifest();
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_PER_STANDARD, manifest));
+ EXPECT_TRUE(manifest.fallback_namespaces.empty());
+ EXPECT_TRUE(manifest.explicit_urls.empty());
+ EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
+ EXPECT_TRUE(manifest.intercept_namespaces.empty());
+ EXPECT_FALSE(manifest.online_whitelist_all);
}
TEST(AppCacheManifestParserTest, ComboUrls) {
@@ -320,7 +360,8 @@ TEST(AppCacheManifestParserTest, ComboUrls) {
"NETWORK:\r\n"
"relative/whitelist-3#strip\r"
"http://combo.com:99/whitelist-4\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.online_whitelist_all);
base::hash_set<std::string> urls = manifest.explicit_urls;
@@ -366,8 +407,8 @@ TEST(AppCacheManifestParserTest, UnusualUtf8) {
const std::string kData("CACHE MANIFEST\r"
"\xC0" "invalidutf8\r"
"nonbmp" "\xF1\x84\xAB\xBC\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
-
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
base::hash_set<std::string> urls = manifest.explicit_urls;
EXPECT_TRUE(urls.find("http://bad.com/%EF%BF%BDinvalidutf8") != urls.end());
EXPECT_TRUE(urls.find("http://bad.com/nonbmp%F1%84%AB%BC") != urls.end());
@@ -379,7 +420,8 @@ TEST(AppCacheManifestParserTest, IgnoreAfterSpace) {
const std::string kData(
"CACHE MANIFEST\r"
"resource.txt this stuff after the white space should be ignored\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
base::hash_set<std::string> urls = manifest.explicit_urls;
EXPECT_TRUE(urls.find("http://smorg.borg/resource.txt") != urls.end());
@@ -395,7 +437,8 @@ TEST(AppCacheManifestParserTest, DifferentOriginUrlWithSecureScheme) {
"http://www.xyz.com/secureschemedifforigin\r"
"https://www.xyz.com/secureschemedifforigin\r");
- EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
+ EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.fallback_namespaces.empty());
EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
@@ -433,7 +476,8 @@ TEST(AppCacheManifestParserTest, PatternMatching) {
Manifest manifest;
EXPECT_TRUE(ParseManifest(kUrl, kManifestBody.c_str(),
- kManifestBody.length(), manifest));
+ kManifestBody.length(),
+ PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
EXPECT_TRUE(manifest.online_whitelist_all);
EXPECT_EQ(1u, manifest.explicit_urls.size());
EXPECT_EQ(3u, manifest.intercept_namespaces.size());
diff --git a/content/browser/battery_status/battery_status_manager.h b/content/browser/battery_status/battery_status_manager.h
new file mode 100644
index 0000000000..20e71edfbb
--- /dev/null
+++ b/content/browser/battery_status/battery_status_manager.h
@@ -0,0 +1,57 @@
+// 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.
+
+#ifndef CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_H_
+#define CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_H_
+
+#include "build/build_config.h"
+
+#if defined(OS_ANDROID)
+#include "base/android/scoped_java_ref.h"
+#endif
+
+#include "content/browser/battery_status/battery_status_service.h"
+
+namespace content {
+
+// Platform specific manager class for fetching battery status data.
+class CONTENT_EXPORT BatteryStatusManager {
+ public:
+ explicit BatteryStatusManager(
+ const BatteryStatusService::BatteryUpdateCallback& callback);
+ virtual ~BatteryStatusManager();
+
+ // Start listening for battery status changes. New updates are signalled
+ // by invoking the callback provided at construction time.
+ virtual bool StartListeningBatteryChange();
+
+ // Stop listening for battery status changes.
+ virtual void StopListeningBatteryChange();
+
+#if defined(OS_ANDROID)
+ // Must be called at startup.
+ static bool Register(JNIEnv* env);
+
+ // Called from Java via JNI.
+ void GotBatteryStatus(JNIEnv*, jobject, jboolean charging,
+ jdouble charging_time, jdouble discharging_time,
+ jdouble level);
+#endif
+
+ protected:
+ BatteryStatusManager();
+ BatteryStatusService::BatteryUpdateCallback callback_;
+
+ private:
+#if defined(OS_ANDROID)
+ // Java provider of battery status info.
+ base::android::ScopedJavaGlobalRef<jobject> j_manager_;
+#endif
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusManager);
+};
+
+} // namespace content
+
+#endif // CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_H_
diff --git a/content/browser/battery_status/battery_status_manager_android.cc b/content/browser/battery_status/battery_status_manager_android.cc
index e7769ca2ba..9d90fc44df 100644
--- a/content/browser/battery_status/battery_status_manager_android.cc
+++ b/content/browser/battery_status/battery_status_manager_android.cc
@@ -2,9 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/battery_status/battery_status_manager_android.h"
-
-#include <string.h>
+#include "content/browser/battery_status/battery_status_manager.h"
#include "base/android/jni_android.h"
#include "jni/BatteryStatusManager_jni.h"
@@ -13,33 +11,42 @@ using base::android::AttachCurrentThread;
namespace content {
-BatteryStatusManagerAndroid::BatteryStatusManagerAndroid() {
+BatteryStatusManager::BatteryStatusManager(
+ const BatteryStatusService::BatteryUpdateCallback& callback)
+ : callback_(callback) {
j_manager_.Reset(
Java_BatteryStatusManager_getInstance(
AttachCurrentThread(), base::android::GetApplicationContext()));
}
-BatteryStatusManagerAndroid::~BatteryStatusManagerAndroid() {
- StopListeningBatteryChange();
+BatteryStatusManager::BatteryStatusManager() {
+}
+
+BatteryStatusManager::~BatteryStatusManager() {
}
-bool BatteryStatusManagerAndroid::Register(JNIEnv* env) {
+bool BatteryStatusManager::Register(JNIEnv* env) {
return RegisterNativesImpl(env);
}
-void BatteryStatusManagerAndroid::GotBatteryStatus(JNIEnv*, jobject,
- jboolean charging, jdouble chargingTime, jdouble dischargingTime,
+void BatteryStatusManager::GotBatteryStatus(JNIEnv*, jobject,
+ jboolean charging, jdouble charging_time, jdouble discharging_time,
jdouble level) {
- NOTIMPLEMENTED();
+ blink::WebBatteryStatus status;
+ status.charging = charging;
+ status.chargingTime = charging_time;
+ status.dischargingTime = discharging_time;
+ status.level = level;
+ callback_.Run(status);
}
-bool BatteryStatusManagerAndroid::StartListeningBatteryChange() {
+bool BatteryStatusManager::StartListeningBatteryChange() {
return Java_BatteryStatusManager_start(
AttachCurrentThread(), j_manager_.obj(),
reinterpret_cast<intptr_t>(this));
}
-void BatteryStatusManagerAndroid::StopListeningBatteryChange() {
+void BatteryStatusManager::StopListeningBatteryChange() {
Java_BatteryStatusManager_stop(
AttachCurrentThread(), j_manager_.obj());
}
diff --git a/content/browser/battery_status/battery_status_manager_android.h b/content/browser/battery_status/battery_status_manager_android.h
deleted file mode 100644
index 04746de61b..0000000000
--- a/content/browser/battery_status/battery_status_manager_android.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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.
-
-#ifndef CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
-#define CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
-
-#include "base/android/scoped_java_ref.h"
-#include "content/common/content_export.h"
-
-namespace content {
-
-// Android implementation of Battery Status API.
-class CONTENT_EXPORT BatteryStatusManagerAndroid {
- public:
- // Must be called at startup.
- static bool Register(JNIEnv* env);
-
- // Called from Java via JNI.
- void GotBatteryStatus(JNIEnv*, jobject, jboolean charging,
- jdouble chargingTime, jdouble dischargingTime,
- jdouble level);
-
- bool StartListeningBatteryChange();
- void StopListeningBatteryChange();
-
- protected:
- BatteryStatusManagerAndroid();
- virtual ~BatteryStatusManagerAndroid();
-
- private:
- // Java provider of battery status info.
- base::android::ScopedJavaGlobalRef<jobject> j_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(BatteryStatusManagerAndroid);
-};
-
-} // namespace content
-
-#endif // CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
diff --git a/content/browser/battery_status/battery_status_manager_default.cc b/content/browser/battery_status/battery_status_manager_default.cc
new file mode 100644
index 0000000000..a8d066bdef
--- /dev/null
+++ b/content/browser/battery_status/battery_status_manager_default.cc
@@ -0,0 +1,31 @@
+// 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 "content/browser/battery_status/battery_status_manager.h"
+
+#include "base/logging.h"
+
+namespace content {
+
+BatteryStatusManager::BatteryStatusManager(
+ const BatteryStatusService::BatteryUpdateCallback& callback)
+ : callback_(callback) {
+}
+
+BatteryStatusManager::BatteryStatusManager() {
+}
+
+BatteryStatusManager::~BatteryStatusManager() {
+}
+
+bool BatteryStatusManager::StartListeningBatteryChange() {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+void BatteryStatusManager::StopListeningBatteryChange() {
+ NOTIMPLEMENTED();
+}
+
+} // namespace content
diff --git a/content/browser/battery_status/battery_status_message_filter.cc b/content/browser/battery_status/battery_status_message_filter.cc
new file mode 100644
index 0000000000..19a21b8078
--- /dev/null
+++ b/content/browser/battery_status/battery_status_message_filter.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 "content/browser/battery_status/battery_status_message_filter.h"
+
+#include "content/common/battery_status_messages.h"
+
+namespace content {
+
+BatteryStatusMessageFilter::BatteryStatusMessageFilter()
+ : BrowserMessageFilter(BatteryStatusMsgStart),
+ is_started_(false) {
+ callback_ = base::Bind(&BatteryStatusMessageFilter::SendBatteryChange,
+ base::Unretained(this));
+}
+
+BatteryStatusMessageFilter::~BatteryStatusMessageFilter() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (is_started_)
+ subscription_.reset();
+}
+
+bool BatteryStatusMessageFilter::OnMessageReceived(
+ const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(BatteryStatusMessageFilter, message)
+ IPC_MESSAGE_HANDLER(BatteryStatusHostMsg_Start, OnBatteryStatusStart)
+ IPC_MESSAGE_HANDLER(BatteryStatusHostMsg_Stop, OnBatteryStatusStop)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void BatteryStatusMessageFilter::OnBatteryStatusStart() {
+ DCHECK(!is_started_);
+ if (is_started_)
+ return;
+ is_started_ = true;
+ subscription_ = BatteryStatusService::GetInstance()->AddCallback(callback_);
+}
+
+void BatteryStatusMessageFilter::OnBatteryStatusStop() {
+ DCHECK(is_started_);
+ if (!is_started_)
+ return;
+ is_started_ = false;
+ subscription_.reset();
+}
+
+void BatteryStatusMessageFilter::SendBatteryChange(
+ const blink::WebBatteryStatus& status) {
+ Send(new BatteryStatusMsg_DidChange(status));
+}
+
+} // namespace content
diff --git a/content/browser/battery_status/battery_status_message_filter.h b/content/browser/battery_status/battery_status_message_filter.h
new file mode 100644
index 0000000000..9484114c57
--- /dev/null
+++ b/content/browser/battery_status/battery_status_message_filter.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MESSAGE_FILTER_H_
+#define CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MESSAGE_FILTER_H_
+
+#include "content/browser/battery_status/battery_status_service.h"
+#include "content/public/browser/browser_message_filter.h"
+
+namespace content {
+
+class BatteryStatusMessageFilter : public BrowserMessageFilter {
+ public:
+ BatteryStatusMessageFilter();
+
+ // BrowserMessageFilter implementation.
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ private:
+ virtual ~BatteryStatusMessageFilter();
+
+ void OnBatteryStatusStart();
+ void OnBatteryStatusStop();
+ void SendBatteryChange(const blink::WebBatteryStatus& status);
+
+ BatteryStatusService::BatteryUpdateCallback callback_;
+ scoped_ptr<BatteryStatusService::BatteryUpdateSubscription> subscription_;
+ bool is_started_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusMessageFilter);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MESSAGE_FILTER_H_
diff --git a/content/browser/battery_status/battery_status_service.cc b/content/browser/battery_status/battery_status_service.cc
new file mode 100644
index 0000000000..dc4c690ab0
--- /dev/null
+++ b/content/browser/battery_status/battery_status_service.cc
@@ -0,0 +1,101 @@
+// 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 "content/browser/battery_status/battery_status_service.h"
+
+#include "base/bind.h"
+#include "content/browser/battery_status/battery_status_manager.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace content {
+
+BatteryStatusService::BatteryStatusService()
+ : status_updated_(false),
+ is_shutdown_(false) {
+ update_callback_ = base::Bind(&BatteryStatusService::UpdateBatteryStatus,
+ base::Unretained(this));
+ callback_list_.set_removal_callback(
+ base::Bind(&BatteryStatusService::ConsumersChanged,
+ base::Unretained(this)));
+}
+
+BatteryStatusService::~BatteryStatusService() {
+}
+
+BatteryStatusService* BatteryStatusService::GetInstance() {
+ return Singleton<BatteryStatusService,
+ LeakySingletonTraits<BatteryStatusService> >::get();
+}
+
+scoped_ptr<BatteryStatusService::BatteryUpdateSubscription>
+BatteryStatusService::AddCallback(const BatteryUpdateCallback& callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(!is_shutdown_);
+
+ if (!battery_fetcher_)
+ battery_fetcher_.reset(new BatteryStatusManager(update_callback_));
+
+ if (callback_list_.empty())
+ battery_fetcher_->StartListeningBatteryChange();
+
+ if (status_updated_) {
+ // Send recent status to the new callback if already available.
+ callback.Run(status_);
+ }
+
+ return callback_list_.Add(callback);
+}
+
+void BatteryStatusService::ConsumersChanged() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(!is_shutdown_);
+
+ if (callback_list_.empty()) {
+ battery_fetcher_->StopListeningBatteryChange();
+ status_updated_ = false;
+ }
+}
+
+void BatteryStatusService::UpdateBatteryStatus(
+ const blink::WebBatteryStatus& status) {
+ DCHECK(!is_shutdown_);
+ BrowserThread::PostTask(BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&BatteryStatusService::NotifyConsumers,
+ base::Unretained(this), status));
+}
+
+void BatteryStatusService::NotifyConsumers(
+ const blink::WebBatteryStatus& status) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ if (callback_list_.empty())
+ return;
+
+ status_ = status;
+ status_updated_ = true;
+ callback_list_.Notify(status);
+}
+
+void BatteryStatusService::Shutdown() {
+ if (!callback_list_.empty())
+ battery_fetcher_->StopListeningBatteryChange();
+ battery_fetcher_.reset();
+ is_shutdown_ = true;
+}
+
+const BatteryStatusService::BatteryUpdateCallback&
+BatteryStatusService::GetUpdateCallbackForTesting() const {
+ return update_callback_;
+}
+
+void BatteryStatusService::SetBatteryManagerForTesting(
+ BatteryStatusManager* test_battery_manager) {
+ battery_fetcher_.reset(test_battery_manager);
+ blink::WebBatteryStatus status;
+ status_ = status;
+ status_updated_ = false;
+}
+
+} // namespace content
diff --git a/content/browser/battery_status/battery_status_service.h b/content/browser/battery_status/battery_status_service.h
new file mode 100644
index 0000000000..1c1e364836
--- /dev/null
+++ b/content/browser/battery_status/battery_status_service.h
@@ -0,0 +1,66 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_
+#define CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_
+
+#include "base/callback_list.h"
+#include "base/memory/singleton.h"
+#include "content/common/content_export.h"
+#include "third_party/WebKit/public/platform/WebBatteryStatus.h"
+
+namespace content {
+class BatteryStatusManager;
+
+class CONTENT_EXPORT BatteryStatusService {
+ public:
+ typedef base::Callback<void(const blink::WebBatteryStatus&)>
+ BatteryUpdateCallback;
+ typedef base::CallbackList<void(const blink::WebBatteryStatus&)>
+ BatteryUpdateCallbackList;
+ typedef BatteryUpdateCallbackList::Subscription BatteryUpdateSubscription;
+
+ // Returns the BatteryStatusService singleton.
+ static BatteryStatusService* GetInstance();
+
+ // Adds a callback to receive battery status updates.
+ // Must be called on the I/O thread.
+ scoped_ptr<BatteryUpdateSubscription> AddCallback(
+ const BatteryUpdateCallback& callback);
+
+ // Gracefully clean-up.
+ void Shutdown();
+
+ // Injects a custom battery status manager for testing purposes.
+ // This class takes ownership of the injected object.
+ void SetBatteryManagerForTesting(BatteryStatusManager* test_battery_manager);
+
+ // Returns callback to invoke when battery is changed. Used for testing.
+ const BatteryUpdateCallback& GetUpdateCallbackForTesting() const;
+
+ private:
+ friend struct DefaultSingletonTraits<BatteryStatusService>;
+
+ BatteryStatusService();
+ virtual ~BatteryStatusService();
+
+ // Updates current battery status and sends new status to interested
+ // render processes. Can be called on any thread via a callback.
+ void UpdateBatteryStatus(const blink::WebBatteryStatus& status);
+ void NotifyConsumers(const blink::WebBatteryStatus& status);
+ void ConsumersChanged();
+
+ scoped_ptr<BatteryStatusManager> battery_fetcher_;
+ BatteryUpdateCallbackList callback_list_;
+ BatteryUpdateCallback update_callback_;
+ blink::WebBatteryStatus status_;
+ bool status_updated_;
+ bool is_shutdown_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusService);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_BATTERY_STATUS_BATTERY_STATUS_SERVICE_H_
diff --git a/content/browser/battery_status/battery_status_service_unittest.cc b/content/browser/battery_status/battery_status_service_unittest.cc
new file mode 100644
index 0000000000..f92c8766fc
--- /dev/null
+++ b/content/browser/battery_status/battery_status_service_unittest.cc
@@ -0,0 +1,193 @@
+// 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 "content/browser/battery_status/battery_status_service.h"
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "content/browser/battery_status/battery_status_manager.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+
+namespace content {
+
+namespace {
+
+class FakeBatteryManager : public BatteryStatusManager {
+ public:
+ explicit FakeBatteryManager(
+ const BatteryStatusService::BatteryUpdateCallback& callback)
+ : start_invoked_count_(0),
+ stop_invoked_count_(0) {
+ callback_ = callback;
+ }
+ virtual ~FakeBatteryManager() { }
+
+ // Methods from Battery Status Manager
+ virtual bool StartListeningBatteryChange() OVERRIDE {
+ start_invoked_count_++;
+ return true;
+ }
+
+ virtual void StopListeningBatteryChange() OVERRIDE {
+ stop_invoked_count_++;
+ }
+
+ void InvokeUpdateCallback(const blink::WebBatteryStatus& status) {
+ callback_.Run(status);
+ }
+
+ int start_invoked_count() const { return start_invoked_count_; }
+ int stop_invoked_count() const { return stop_invoked_count_; }
+
+ private:
+ int start_invoked_count_;
+ int stop_invoked_count_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeBatteryManager);
+};
+
+class BatteryStatusServiceTest : public testing::Test {
+ public:
+ BatteryStatusServiceTest()
+ : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
+ battery_service_(0),
+ battery_manager_(0),
+ callback1_invoked_count_(0),
+ callback2_invoked_count_(0) {
+ }
+ virtual ~BatteryStatusServiceTest() { }
+
+ protected:
+ typedef BatteryStatusService::BatteryUpdateSubscription BatterySubscription;
+
+ virtual void SetUp() OVERRIDE {
+ callback1_ = base::Bind(&BatteryStatusServiceTest::Callback1,
+ base::Unretained(this));
+ callback2_ = base::Bind(&BatteryStatusServiceTest::Callback2,
+ base::Unretained(this));
+ battery_service_ = BatteryStatusService::GetInstance();
+ battery_manager_ = new FakeBatteryManager(
+ battery_service_->GetUpdateCallbackForTesting());
+ battery_service_->SetBatteryManagerForTesting(battery_manager_);
+ }
+
+ virtual void TearDown() OVERRIDE {
+ base::RunLoop().RunUntilIdle();
+ battery_service_->SetBatteryManagerForTesting(0);
+ }
+
+ FakeBatteryManager* battery_manager() {
+ return battery_manager_;
+ }
+
+ scoped_ptr<BatterySubscription> AddCallback(
+ const BatteryStatusService::BatteryUpdateCallback& callback) {
+ return battery_service_->AddCallback(callback);
+ }
+
+ int callback1_invoked_count() const {
+ return callback1_invoked_count_;
+ }
+
+ int callback2_invoked_count() const {
+ return callback2_invoked_count_;
+ }
+
+ const blink::WebBatteryStatus& battery_status() const {
+ return battery_status_;
+ }
+
+ const BatteryStatusService::BatteryUpdateCallback& callback1() const {
+ return callback1_;
+ }
+
+ const BatteryStatusService::BatteryUpdateCallback& callback2() const {
+ return callback2_;
+ }
+
+ private:
+ void Callback1(const blink::WebBatteryStatus& status) {
+ callback1_invoked_count_++;
+ battery_status_ = status;
+ }
+
+ void Callback2(const blink::WebBatteryStatus& status) {
+ callback2_invoked_count_++;
+ battery_status_ = status;
+ }
+
+ content::TestBrowserThreadBundle thread_bundle_;
+ BatteryStatusService* battery_service_;
+ FakeBatteryManager* battery_manager_;
+ BatteryStatusService::BatteryUpdateCallback callback1_;
+ BatteryStatusService::BatteryUpdateCallback callback2_;
+ int callback1_invoked_count_;
+ int callback2_invoked_count_;
+ blink::WebBatteryStatus battery_status_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusServiceTest);
+};
+
+TEST_F(BatteryStatusServiceTest, AddFirstCallback) {
+ scoped_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
+ EXPECT_EQ(1, battery_manager()->start_invoked_count());
+ EXPECT_EQ(0, battery_manager()->stop_invoked_count());
+ subscription1.reset();
+ EXPECT_EQ(1, battery_manager()->start_invoked_count());
+ EXPECT_EQ(1, battery_manager()->stop_invoked_count());
+}
+
+TEST_F(BatteryStatusServiceTest, AddCallbackAfterUpdate) {
+ scoped_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
+ blink::WebBatteryStatus status;
+ battery_manager()->InvokeUpdateCallback(status);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, callback1_invoked_count());
+ EXPECT_EQ(0, callback2_invoked_count());
+
+ scoped_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
+ EXPECT_EQ(1, callback1_invoked_count());
+ EXPECT_EQ(1, callback2_invoked_count());
+}
+
+TEST_F(BatteryStatusServiceTest, TwoCallbacksUpdate) {
+ scoped_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
+ scoped_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
+
+ blink::WebBatteryStatus status;
+ status.charging = true;
+ status.chargingTime = 100;
+ status.dischargingTime = 200;
+ status.level = 0.5;
+ battery_manager()->InvokeUpdateCallback(status);
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(1, callback1_invoked_count());
+ EXPECT_EQ(1, callback2_invoked_count());
+ EXPECT_EQ(status.charging, battery_status().charging);
+ EXPECT_EQ(status.chargingTime, battery_status().chargingTime);
+ EXPECT_EQ(status.dischargingTime, battery_status().dischargingTime);
+ EXPECT_EQ(status.level, battery_status().level);
+}
+
+TEST_F(BatteryStatusServiceTest, RemoveOneCallback) {
+ scoped_ptr<BatterySubscription> subscription1 = AddCallback(callback1());
+ scoped_ptr<BatterySubscription> subscription2 = AddCallback(callback2());
+
+ blink::WebBatteryStatus status;
+ battery_manager()->InvokeUpdateCallback(status);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, callback1_invoked_count());
+ EXPECT_EQ(1, callback2_invoked_count());
+
+ subscription1.reset();
+ battery_manager()->InvokeUpdateCallback(status);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, callback1_invoked_count());
+ EXPECT_EQ(2, callback2_invoked_count());
+}
+
+} // namespace
+
+} // namespace content
diff --git a/content/browser/browser.gni b/content/browser/browser.gni
new file mode 100644
index 0000000000..b7e8d7f1d5
--- /dev/null
+++ b/content/browser/browser.gni
@@ -0,0 +1,15 @@
+# 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.
+
+# This file defines the content browser gypi values. This file is read once and
+# cached, which is a performance optimization that allows us to share the
+# results of parsing the .gypi file between the public and private BUILD.gn
+# files. It also saves us from duplicating this exec_script call.
+content_browser_gypi_values = exec_script(
+ "//build/gypi_to_gn.py",
+ [ rebase_path("../content_browser.gypi"),
+ "--replace=<(SHARED_INTERMEDIATE_DIR)=$root_gen_dir" ],
+ "scope",
+ [ "../content_browser.gypi" ])
+
diff --git a/content/browser/browser_child_process_host_impl.cc b/content/browser/browser_child_process_host_impl.cc
index e1365f994b..dd7d600612 100644
--- a/content/browser/browser_child_process_host_impl.cc
+++ b/content/browser/browser_child_process_host_impl.cc
@@ -177,11 +177,6 @@ base::ProcessHandle BrowserChildProcessHostImpl::GetHandle() const {
return child_process_->GetHandle();
}
-void BrowserChildProcessHostImpl::SetNaClDebugStubPort(int port) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- data_.nacl_debug_stub_port = port;
-}
-
void BrowserChildProcessHostImpl::SetName(const base::string16& name) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
data_.name = name;
@@ -219,6 +214,12 @@ void BrowserChildProcessHostImpl::NotifyProcessInstanceCreated(
BrowserChildProcessInstanceCreated(data));
}
+void BrowserChildProcessHostImpl::HistogramBadMessageTerminated(
+ int process_type) {
+ UMA_HISTOGRAM_ENUMERATION("ChildProcess.BadMessgeTerminated", process_type,
+ PROCESS_TYPE_MAX);
+}
+
base::TerminationStatus BrowserChildProcessHostImpl::GetTerminationStatus(
bool known_dead, int* exit_code) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -252,6 +253,16 @@ void BrowserChildProcessHostImpl::OnChannelError() {
delegate_->OnChannelError();
}
+void BrowserChildProcessHostImpl::OnBadMessageReceived(
+ const IPC::Message& message) {
+ HistogramBadMessageTerminated(data_.process_type);
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableKillAfterBadIPC)) {
+ return;
+ }
+ base::KillProcess(GetHandle(), RESULT_CODE_KILLED_BAD_MESSAGE, false);
+}
+
bool BrowserChildProcessHostImpl::CanShutdown() {
return delegate_->CanShutdown();
}
diff --git a/content/browser/browser_child_process_host_impl.h b/content/browser/browser_child_process_host_impl.h
index 24bc1e78c3..b196551532 100644
--- a/content/browser/browser_child_process_host_impl.h
+++ b/content/browser/browser_child_process_host_impl.h
@@ -53,7 +53,6 @@ class CONTENT_EXPORT BrowserChildProcessHostImpl
virtual ChildProcessHost* GetHost() const OVERRIDE;
virtual base::TerminationStatus GetTerminationStatus(
bool known_dead, int* exit_code) OVERRIDE;
- virtual void SetNaClDebugStubPort(int port) OVERRIDE;
virtual void SetName(const base::string16& name) OVERRIDE;
virtual void SetHandle(base::ProcessHandle handle) OVERRIDE;
@@ -64,6 +63,7 @@ class CONTENT_EXPORT BrowserChildProcessHostImpl
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
virtual void OnChannelError() OVERRIDE;
+ virtual void OnBadMessageReceived(const IPC::Message& message) OVERRIDE;
// Removes this host from the host list. Calls ChildProcessHost::ForceShutdown
void ForceShutdown();
@@ -81,6 +81,8 @@ class CONTENT_EXPORT BrowserChildProcessHostImpl
// Called when an instance of a particular child is created in a page.
static void NotifyProcessInstanceCreated(const ChildProcessData& data);
+ static void HistogramBadMessageTerminated(int process_type);
+
BrowserChildProcessHostDelegate* delegate() const { return delegate_; }
typedef std::list<BrowserChildProcessHostImpl*> BrowserChildProcessList;
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index 170f8987ba..2758c5d1d2 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -6,10 +6,12 @@
#if !defined(OS_IOS)
#include "content/browser/download/download_manager_impl.h"
+#include "content/browser/fileapi/chrome_blob_storage_context.h"
#include "content/browser/indexed_db/indexed_db_context_impl.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/storage_partition_impl_map.h"
#include "content/common/child_process_host_impl.h"
+#include "content/public/browser/blob_handle.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/site_instance.h"
@@ -196,6 +198,20 @@ StoragePartition* BrowserContext::GetDefaultStoragePartition(
return GetStoragePartition(browser_context, NULL);
}
+void BrowserContext::CreateMemoryBackedBlob(BrowserContext* browser_context,
+ const char* data, size_t length,
+ const BlobCallback& callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ ChromeBlobStorageContext* blob_context =
+ ChromeBlobStorageContext::GetFor(browser_context);
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&ChromeBlobStorageContext::CreateMemoryBackedBlob,
+ make_scoped_refptr(blob_context), data, length),
+ callback);
+}
+
void BrowserContext::EnsureResourceContextInitialized(BrowserContext* context) {
// This will be enough to tickle initialization of BrowserContext if
// necessary, which initializes ResourceContext. The reason we don't call
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 39a1de3921..6aef2203bc 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -23,6 +23,7 @@
#include "base/thread_task_runner_handle.h"
#include "base/threading/thread_restrictions.h"
#include "base/timer/hi_res_timer_manager.h"
+#include "content/browser/battery_status/battery_status_service.h"
#include "content/browser/browser_thread_impl.h"
#include "content/browser/device_sensors/device_inertial_sensor_service.h"
#include "content/browser/download/save_file_manager.h"
@@ -67,6 +68,7 @@
#endif
#if defined(USE_AURA)
+#include "content/public/browser/context_factory.h"
#include "ui/aura/env.h"
#endif
@@ -122,11 +124,6 @@
#include "ui/gfx/x/x11_types.h"
#endif
-#if defined(USE_OZONE)
-#include "ui/ozone/ozone_platform.h"
-#include "ui/events/ozone/event_factory_ozone.h"
-#endif
-
// One of the linux specific headers defines this as a macro.
#ifdef DestroyAll
#undef DestroyAll
@@ -164,7 +161,7 @@ void SetupSandbox(const CommandLine& parsed_command_line) {
}
// Tickle the sandbox host and zygote host so they fork now.
- RenderSandboxHostLinux::GetInstance()->Init(sandbox_binary.value());
+ RenderSandboxHostLinux::GetInstance()->Init();
ZygoteHostImpl::GetInstance()->Init(sandbox_binary.value());
}
#endif
@@ -373,6 +370,12 @@ void BrowserMainLoop::EarlyInitialization() {
if (parts_)
parts_->PreEarlyInitialization();
+#if defined(OS_MACOSX)
+ // We use quite a few file descriptors for our IPC, and the default limit on
+ // the Mac is low (256), so bump it up.
+ base::SetFdLimit(1024);
+#endif
+
#if defined(OS_WIN)
net::EnsureWinsockInit();
#endif
@@ -754,8 +757,8 @@ void BrowserMainLoop::ShutdownThreadsAndCleanUp() {
resource_dispatcher_host_.get()->Shutdown();
}
-#if defined(USE_AURA)
- {
+#if defined(USE_AURA) || defined(OS_MACOSX)
+ if (ShouldInitializeBrowserGpuChannelAndTransportSurface()) {
TRACE_EVENT0("shutdown",
"BrowserMainLoop::Subsystem:ImageTransportFactory");
ImageTransportFactory::Terminate();
@@ -883,6 +886,10 @@ void BrowserMainLoop::ShutdownThreadsAndCleanUp() {
DeviceInertialSensorService::GetInstance()->Shutdown();
}
{
+ TRACE_EVENT0("shutdown", "BrowserMainLoop::Subsystem:BatteryStatusService");
+ BatteryStatusService::GetInstance()->Shutdown();
+ }
+ {
TRACE_EVENT0("shutdown", "BrowserMainLoop::Subsystem:DeleteDataSources");
URLDataManager::DeleteDataSources();
}
@@ -947,6 +954,12 @@ int BrowserMainLoop::BrowserThreadsStarted() {
}
BrowserGpuChannelHostFactory::Initialize(established_gpu_channel);
ImageTransportFactory::Initialize();
+#if defined(USE_AURA)
+ if (aura::Env::GetInstance()) {
+ aura::Env::GetInstance()->set_context_factory(
+ content::GetContextFactory());
+ }
+#endif
}
#elif defined(OS_ANDROID)
established_gpu_channel = true;
@@ -959,12 +972,6 @@ int BrowserMainLoop::BrowserThreadsStarted() {
device_monitor_mac_.reset(new DeviceMonitorMac());
#endif
-#if defined(USE_OZONE)
- ui::OzonePlatform::Initialize();
- ui::EventFactoryOzone::GetInstance()->SetFileTaskRunner(
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
-#endif
-
// RDH needs the IO thread to be created
{
TRACE_EVENT0("startup",
@@ -1058,7 +1065,7 @@ bool BrowserMainLoop::InitializeToolkit() {
config.dwSize = sizeof(config);
config.dwICC = ICC_WIN95_CLASSES;
if (!InitCommonControlsEx(&config))
- LOG_GETLASTERROR(FATAL);
+ PLOG(FATAL);
#endif
#if defined(USE_AURA)
diff --git a/content/browser/browser_plugin/browser_plugin_embedder.cc b/content/browser/browser_plugin/browser_plugin_embedder.cc
index 3591decaaf..1c0df05c94 100644
--- a/content/browser/browser_plugin/browser_plugin_embedder.cc
+++ b/content/browser/browser_plugin/browser_plugin_embedder.cc
@@ -6,7 +6,6 @@
#include "base/values.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
#include "content/browser/browser_plugin/browser_plugin_host_factory.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
@@ -15,6 +14,7 @@
#include "content/common/drag_messages.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/render_view_host.h"
@@ -68,51 +68,29 @@ WebContentsImpl* BrowserPluginEmbedder::GetWebContents() const {
BrowserPluginGuestManager*
BrowserPluginEmbedder::GetBrowserPluginGuestManager() const {
- return BrowserPluginGuestManager::FromBrowserContext(
- GetWebContents()->GetBrowserContext());
+ return GetWebContents()->GetBrowserContext()->GetGuestManager();
}
bool BrowserPluginEmbedder::DidSendScreenRectsCallback(
- BrowserPluginGuest* guest) {
+ WebContents* guest_web_contents) {
static_cast<RenderViewHostImpl*>(
- guest->GetWebContents()->GetRenderViewHost())->SendScreenRects();
+ guest_web_contents->GetRenderViewHost())->SendScreenRects();
// Not handled => Iterate over all guests.
return false;
}
void BrowserPluginEmbedder::DidSendScreenRects() {
- BrowserPluginGuestManager::FromBrowserContext(
- GetWebContents()->GetBrowserContext())->ForEachGuest(
+ GetBrowserPluginGuestManager()->ForEachGuest(
GetWebContents(), base::Bind(
&BrowserPluginEmbedder::DidSendScreenRectsCallback,
base::Unretained(this)));
}
-bool BrowserPluginEmbedder::UnlockMouseIfNecessaryCallback(
- const NativeWebKeyboardEvent& event,
- BrowserPluginGuest* guest) {
- return guest->UnlockMouseIfNecessary(event);
-}
-
-bool BrowserPluginEmbedder::HandleKeyboardEvent(
- const NativeWebKeyboardEvent& event) {
- if ((event.type != blink::WebInputEvent::RawKeyDown) ||
- (event.windowsKeyCode != ui::VKEY_ESCAPE) ||
- (event.modifiers & blink::WebInputEvent::InputModifiers)) {
- return false;
- }
-
- return GetBrowserPluginGuestManager()->ForEachGuest(
- GetWebContents(),
- base::Bind(&BrowserPluginEmbedder::UnlockMouseIfNecessaryCallback,
- base::Unretained(this),
- event));
-}
-
bool BrowserPluginEmbedder::SetZoomLevelCallback(
- double level, BrowserPluginGuest* guest) {
+ double level, WebContents* guest_web_contents) {
double zoom_factor = content::ZoomLevelToZoomFactor(level);
- guest->SetZoom(zoom_factor);
+ static_cast<WebContentsImpl*>(guest_web_contents)->GetBrowserPluginGuest()->
+ SetZoom(zoom_factor);
// Not handled => Iterate over all guests.
return false;
}
@@ -172,8 +150,10 @@ void BrowserPluginEmbedder::OnGuestCallback(
int instance_id,
const BrowserPluginHostMsg_Attach_Params& params,
const base::DictionaryValue* extra_params,
- BrowserPluginGuest* guest) {
- BrowserPluginGuestManager* guest_manager = GetBrowserPluginGuestManager();
+ WebContents* guest_web_contents) {
+ BrowserPluginGuest* guest = guest_web_contents ?
+ static_cast<WebContentsImpl*>(guest_web_contents)->
+ GetBrowserPluginGuest() : NULL;
if (guest) {
// There is an implicit order expectation here:
// 1. The content embedder is made aware of the attachment.
@@ -189,10 +169,15 @@ void BrowserPluginEmbedder::OnGuestCallback(
}
scoped_ptr<base::DictionaryValue> copy_extra_params(extra_params->DeepCopy());
- guest = guest_manager->CreateGuest(
+ guest_web_contents = GetBrowserPluginGuestManager()->CreateGuest(
GetWebContents()->GetSiteInstance(),
- instance_id, params,
+ instance_id,
+ params.storage_partition_id,
+ params.persist_storage,
copy_extra_params.Pass());
+ guest = guest_web_contents ?
+ static_cast<WebContentsImpl*>(guest_web_contents)->
+ GetBrowserPluginGuest() : NULL;
if (guest) {
GetContentClient()->browser()->GuestWebContentsAttached(
guest->GetWebContents(),
diff --git a/content/browser/browser_plugin/browser_plugin_embedder.h b/content/browser/browser_plugin/browser_plugin_embedder.h
index 4df3dc4358..fb93c676ac 100644
--- a/content/browser/browser_plugin/browser_plugin_embedder.h
+++ b/content/browser/browser_plugin/browser_plugin_embedder.h
@@ -50,12 +50,6 @@ class CONTENT_EXPORT BrowserPluginEmbedder : public WebContentsObserver {
// Called when embedder's |rwh| has sent screen rects to renderer.
void DidSendScreenRects();
- // Called when embedder's WebContentsImpl has unhandled keyboard input.
- // Returns whether the BrowserPlugin has handled the keyboard event.
- // Currently we are only interested in checking for the escape key to
- // unlock hte guest's pointer lock.
- bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
-
// Overrides factory for testing. Default (NULL) value indicates regular
// (non-test) environment.
static void set_factory_for_testing(BrowserPluginHostFactory* factory) {
@@ -90,19 +84,19 @@ class CONTENT_EXPORT BrowserPluginEmbedder : public WebContentsObserver {
BrowserPluginGuestManager* GetBrowserPluginGuestManager() const;
- bool DidSendScreenRectsCallback(BrowserPluginGuest* guest);
+ bool DidSendScreenRectsCallback(WebContents* guest_web_contents);
- bool SetZoomLevelCallback(double level, BrowserPluginGuest* guest);
+ bool SetZoomLevelCallback(double level, WebContents* guest_web_contents);
bool UnlockMouseIfNecessaryCallback(const NativeWebKeyboardEvent& event,
- BrowserPluginGuest* guest);
+ WebContents* guest);
// Called by the content embedder when a guest exists with the provided
// |instance_id|.
void OnGuestCallback(int instance_id,
const BrowserPluginHostMsg_Attach_Params& params,
const base::DictionaryValue* extra_params,
- BrowserPluginGuest* guest);
+ WebContents* guest_web_contents);
// Message handlers.
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 01060f5857..aca15a0216 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -7,44 +7,32 @@
#include <algorithm>
#include "base/message_loop/message_loop.h"
-#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/browser_plugin/browser_plugin_embedder.h"
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
#include "content/browser/browser_plugin/browser_plugin_host_factory.h"
#include "content/browser/browser_thread_impl.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/frame_host/render_widget_host_view_guest.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
-#include "content/browser/renderer_host/render_view_host_delegate_view.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/browser/web_contents/web_contents_view_guest.h"
-#include "content/common/browser_plugin/browser_plugin_constants.h"
#include "content/common/browser_plugin/browser_plugin_messages.h"
#include "content/common/content_constants_internal.h"
#include "content/common/drag_messages.h"
#include "content/common/input_messages.h"
#include "content/common/view_messages.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/context_menu_params.h"
#include "content/public/common/drop_data.h"
-#include "content/public/common/media_stream_request.h"
-#include "content/public/common/result_codes.h"
-#include "content/public/common/url_constants.h"
-#include "content/public/common/url_utils.h"
-#include "net/url_request/url_request.h"
#include "third_party/WebKit/public/platform/WebCursorInfo.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-#include "webkit/common/resource_type.h"
#if defined(OS_MACOSX)
#include "content/browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h"
@@ -55,116 +43,6 @@ namespace content {
// static
BrowserPluginHostFactory* BrowserPluginGuest::factory_ = NULL;
-// Parent class for the various types of permission requests, each of which
-// should be able to handle the response to their permission request.
-class BrowserPluginGuest::PermissionRequest :
- public base::RefCounted<BrowserPluginGuest::PermissionRequest> {
- public:
- void Respond(bool should_allow, const std::string& user_input) {
- if (!guest_)
- return;
- RespondImpl(should_allow, user_input);
- }
- virtual bool AllowedByDefault() const {
- return false;
- }
- protected:
- explicit PermissionRequest(const base::WeakPtr<BrowserPluginGuest>& guest)
- : guest_(guest) {
- RecordAction(
- base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest"));
- }
- virtual ~PermissionRequest() {}
-
- virtual void RespondImpl(bool should_allow,
- const std::string& user_input) = 0;
- // Friend RefCounted so that the dtor can be non-public.
- friend class base::RefCounted<BrowserPluginGuest::PermissionRequest>;
-
- base::WeakPtr<BrowserPluginGuest> guest_;
-};
-
-class BrowserPluginGuest::NewWindowRequest : public PermissionRequest {
- public:
- NewWindowRequest(const base::WeakPtr<BrowserPluginGuest>& guest,
- int instance_id)
- : PermissionRequest(guest),
- instance_id_(instance_id) {
- RecordAction(
- base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.NewWindow"));
- }
-
- virtual void RespondImpl(bool should_allow,
- const std::string& user_input) OVERRIDE {
- int embedder_render_process_id =
- guest_->embedder_web_contents()->GetRenderProcessHost()->GetID();
- guest_->GetBrowserPluginGuestManager()->
- MaybeGetGuestByInstanceIDOrKill(
- instance_id_,
- embedder_render_process_id,
- base::Bind(&BrowserPluginGuest::NewWindowRequest::RespondInternal,
- base::Unretained(this),
- should_allow));
- }
-
- private:
- virtual ~NewWindowRequest() {}
-
- void RespondInternal(bool should_allow,
- BrowserPluginGuest* guest) {
- if (!guest) {
- VLOG(0) << "Guest not found. Instance ID: " << instance_id_;
- return;
- }
-
- // If we do not destroy the guest then we allow the new window.
- if (!should_allow)
- guest->Destroy();
- }
-
- int instance_id_;
-};
-
-namespace {
-std::string WindowOpenDispositionToString(
- WindowOpenDisposition window_open_disposition) {
- switch (window_open_disposition) {
- case IGNORE_ACTION:
- return "ignore";
- case SAVE_TO_DISK:
- return "save_to_disk";
- case CURRENT_TAB:
- return "current_tab";
- case NEW_BACKGROUND_TAB:
- return "new_background_tab";
- case NEW_FOREGROUND_TAB:
- return "new_foreground_tab";
- case NEW_WINDOW:
- return "new_window";
- case NEW_POPUP:
- return "new_popup";
- default:
- NOTREACHED() << "Unknown Window Open Disposition";
- return "ignore";
- }
-}
-
-// Called on IO thread.
-static GURL RetrieveDownloadURLFromRequestId(
- int render_process_id,
- int url_request_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- GlobalRequestID global_id(render_process_id, url_request_id);
- net::URLRequest* url_request =
- ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id);
- if (url_request)
- return url_request->url();
- return GURL();
-}
-
-} // namespace
-
class BrowserPluginGuest::EmbedderWebContentsObserver
: public WebContentsObserver {
public:
@@ -176,11 +54,7 @@ class BrowserPluginGuest::EmbedderWebContentsObserver
virtual ~EmbedderWebContentsObserver() {
}
- // WebContentsObserver:
- virtual void WebContentsDestroyed() OVERRIDE {
- browser_plugin_guest_->EmbedderDestroyed();
- }
-
+ // WebContentsObserver implementation.
virtual void WasShown() OVERRIDE {
browser_plugin_guest_->EmbedderVisibilityChanged(true);
}
@@ -203,165 +77,46 @@ BrowserPluginGuest::BrowserPluginGuest(
embedder_web_contents_(NULL),
instance_id_(instance_id),
guest_device_scale_factor_(1.0f),
- guest_hang_timeout_(
- base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)),
focused_(false),
mouse_locked_(false),
pending_lock_request_(false),
+ guest_visible_(false),
+ guest_opaque_(true),
embedder_visible_(true),
auto_size_enabled_(false),
copy_request_id_(0),
- next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID),
has_render_view_(has_render_view),
last_seen_auto_size_enabled_(false),
is_in_destruction_(false),
last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
last_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT),
last_can_compose_inline_(true),
+ delegate_(NULL),
weak_ptr_factory_(this) {
DCHECK(web_contents);
- web_contents->SetDelegate(this);
- GetBrowserPluginGuestManager()->AddGuest(instance_id_, GetWebContents());
}
-bool BrowserPluginGuest::AddMessageToConsole(WebContents* source,
- int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id) {
- if (!delegate_)
- return false;
-
- delegate_->AddMessageToConsole(level, message, line_no, source_id);
- return true;
-}
-
-void BrowserPluginGuest::DestroyUnattachedWindows() {
- // Destroy() reaches in and removes the BrowserPluginGuest from its opener's
- // pending_new_windows_ set. To avoid mutating the set while iterating, we
- // create a copy of the pending new windows set and iterate over the copy.
- PendingWindowMap pending_new_windows(pending_new_windows_);
- // Clean up unattached new windows opened by this guest.
- for (PendingWindowMap::const_iterator it = pending_new_windows.begin();
- it != pending_new_windows.end(); ++it) {
- it->first->Destroy();
- }
- // All pending windows should be removed from the set after Destroy() is
- // called on all of them.
- DCHECK(pending_new_windows_.empty());
-}
-
-void BrowserPluginGuest::LoadURLWithParams(const GURL& url,
- const Referrer& referrer,
- PageTransition transition_type,
- WebContents* web_contents) {
- NavigationController::LoadURLParams load_url_params(url);
- load_url_params.referrer = referrer;
- load_url_params.transition_type = transition_type;
- load_url_params.extra_headers = std::string();
- if (delegate_ && delegate_->IsOverridingUserAgent()) {
- load_url_params.override_user_agent =
- NavigationController::UA_OVERRIDE_TRUE;
- }
- web_contents->GetController().LoadURLWithParams(load_url_params);
-}
-
-void BrowserPluginGuest::RespondToPermissionRequest(
- int request_id,
- bool should_allow,
- const std::string& user_input) {
- RequestMap::iterator request_itr = permission_request_map_.find(request_id);
- if (request_itr == permission_request_map_.end()) {
- VLOG(0) << "Not a valid request ID.";
- return;
- }
- request_itr->second->Respond(should_allow, user_input);
- permission_request_map_.erase(request_itr);
-}
-
-void BrowserPluginGuest::RequestPermission(
- BrowserPluginPermissionType permission_type,
- scoped_refptr<BrowserPluginGuest::PermissionRequest> request,
- const base::DictionaryValue& request_info) {
- if (!delegate_) {
- // Let the stack unwind before we deny the permission request so that
- // objects held by the permission request are not destroyed immediately
- // after creation. This is to allow those same objects to be accessed again
- // in the same scope without fear of use after freeing.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&BrowserPluginGuest::PermissionRequest::Respond,
- request, false, ""));
- }
-
- int request_id = ++next_permission_request_id_;
- permission_request_map_[request_id] = request;
-
- BrowserPluginGuestDelegate::PermissionResponseCallback callback =
- base::Bind(&BrowserPluginGuest::RespondToPermissionRequest,
- AsWeakPtr(),
- request_id);
- delegate_->RequestPermission(
- permission_type, request_info, callback, request->AllowedByDefault());
-}
-
-BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow(
- const OpenURLParams& params) {
- BrowserPluginGuestManager* guest_manager = GetBrowserPluginGuestManager();
-
- // Allocate a new instance ID for the new guest.
- int instance_id = guest_manager->GetNextInstanceID();
-
- // Set the attach params to use the same partition as the opener.
- // We pull the partition information from the site's URL, which is of the form
- // guest://site/{persist}?{partition_name}.
- const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL();
- BrowserPluginHostMsg_Attach_Params attach_params;
- attach_params.storage_partition_id = site_url.query();
- attach_params.persist_storage =
- site_url.path().find("persist") != std::string::npos;
-
- // The new guest gets a copy of this guest's extra params so that the content
- // embedder exposes the same API for this guest as its opener.
- scoped_ptr<base::DictionaryValue> extra_params(
- extra_attach_params_->DeepCopy());
- BrowserPluginGuest* new_guest =
- guest_manager->CreateGuest(GetWebContents()->GetSiteInstance(),
- instance_id,
- attach_params,
- extra_params.Pass());
- if (new_guest->delegate_)
- new_guest->delegate_->SetOpener(GetWebContents());
-
- // Take ownership of |new_guest|.
- pending_new_windows_.insert(
- std::make_pair(new_guest, NewWindowInfo(params.url, std::string())));
-
- // Request permission to show the new window.
- RequestNewWindowPermission(params.disposition, gfx::Rect(),
- params.user_gesture, new_guest->GetWebContents());
-
- return new_guest;
+void BrowserPluginGuest::WillDestroy() {
+ is_in_destruction_ = true;
+ embedder_web_contents_ = NULL;
+ delegate_ = NULL;
}
base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
-void BrowserPluginGuest::EmbedderDestroyed() {
- embedder_web_contents_ = NULL;
- if (delegate_)
- delegate_->EmbedderDestroyed();
- Destroy();
+bool BrowserPluginGuest::LockMouse(bool allowed) {
+ if (!attached() || (mouse_locked_ == allowed))
+ return false;
+
+ return embedder_web_contents()->GotResponseToLockMouseRequest(allowed);
}
void BrowserPluginGuest::Destroy() {
- is_in_destruction_ = true;
- if (!attached() && GetOpener())
- GetOpener()->pending_new_windows_.erase(this);
- DestroyUnattachedWindows();
- GetBrowserPluginGuestManager()->RemoveGuest(instance_id_);
- delete GetWebContents();
+ if (!delegate_)
+ return;
+ delegate_->Destroy();
}
bool BrowserPluginGuest::OnMessageReceivedFromEmbedder(
@@ -394,7 +149,6 @@ bool BrowserPluginGuest::OnMessageReceivedFromEmbedder(
IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent,
OnSetEditCommandsForNextKeyEvent)
IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetFocus, OnSetFocus)
- IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetName, OnSetName)
IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetContentsOpaque,
OnSetContentsOpaque)
IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetVisibility, OnSetVisibility)
@@ -413,8 +167,6 @@ void BrowserPluginGuest::Initialize(
guest_opaque_ = params.opaque;
guest_window_rect_ = params.resize_guest_params.view_rect;
- if (!params.name.empty())
- name_ = params.name;
auto_size_enabled_ = params.auto_size_params.enable;
max_auto_size_ = params.auto_size_params.max_size;
min_auto_size_ = params.auto_size_params.min_size;
@@ -465,10 +217,9 @@ void BrowserPluginGuest::Initialize(
if (!params.src.empty()) {
// params.src will be validated in BrowserPluginGuest::OnNavigateGuest.
OnNavigateGuest(instance_id_, params.src);
+ has_render_view_ = true;
}
- has_render_view_ = true;
-
WebPreferences prefs = GetWebContents()->GetWebkitPrefs();
prefs.navigate_on_drag_drop = false;
GetWebContents()->GetRenderViewHost()->UpdateWebkitPreferences(prefs);
@@ -489,7 +240,6 @@ void BrowserPluginGuest::Initialize(
ack_params.storage_partition_id = site_url.query();
ack_params.persist_storage =
site_url.path().find("persist") != std::string::npos;
- ack_params.name = name_;
SendMessageToEmbedder(
new BrowserPluginMsg_Attach_ACK(instance_id_, ack_params));
@@ -509,40 +259,50 @@ BrowserPluginGuest* BrowserPluginGuest::Create(
int instance_id,
SiteInstance* guest_site_instance,
WebContentsImpl* web_contents,
- scoped_ptr<base::DictionaryValue> extra_params) {
+ scoped_ptr<base::DictionaryValue> extra_params,
+ BrowserPluginGuest* opener) {
RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Create"));
BrowserPluginGuest* guest = NULL;
if (factory_) {
guest = factory_->CreateBrowserPluginGuest(instance_id, web_contents);
} else {
- guest = new BrowserPluginGuest(instance_id, false, web_contents);
+ guest = new BrowserPluginGuest(instance_id,
+ web_contents->opener() != NULL,
+ web_contents);
}
- guest->extra_attach_params_.reset(extra_params->DeepCopy());
web_contents->SetBrowserPluginGuest(guest);
+ WebContents* opener_web_contents = NULL;
+ if (opener) {
+ opener_web_contents = opener->GetWebContents();
+ guest_site_instance = opener_web_contents->GetSiteInstance();
+ }
BrowserPluginGuestDelegate* delegate = NULL;
GetContentClient()->browser()->GuestWebContentsCreated(
- guest_site_instance, web_contents, NULL, &delegate, extra_params.Pass());
- guest->SetDelegate(delegate);
+ instance_id,
+ guest_site_instance,
+ web_contents,
+ opener_web_contents,
+ &delegate,
+ extra_params.Pass());
+ if (delegate) {
+ delegate->RegisterDestructionCallback(
+ base::Bind(&BrowserPluginGuest::WillDestroy,
+ base::Unretained(guest)));
+ guest->set_delegate(delegate);
+ }
return guest;
}
// static
-BrowserPluginGuest* BrowserPluginGuest::CreateWithOpener(
- int instance_id,
- bool has_render_view,
- WebContentsImpl* web_contents,
- BrowserPluginGuest* opener) {
- BrowserPluginGuest* guest =
- new BrowserPluginGuest(
- instance_id, has_render_view, web_contents);
- web_contents->SetBrowserPluginGuest(guest);
- BrowserPluginGuestDelegate* delegate = NULL;
- GetContentClient()->browser()->GuestWebContentsCreated(
- opener->GetWebContents()->GetSiteInstance(),
- web_contents, opener->GetWebContents(), &delegate,
- scoped_ptr<base::DictionaryValue>());
- guest->SetDelegate(delegate);
- return guest;
+bool BrowserPluginGuest::IsGuest(WebContentsImpl* web_contents) {
+ return web_contents && web_contents->GetBrowserPluginGuest();
+}
+
+// static
+bool BrowserPluginGuest::IsGuest(RenderViewHostImpl* render_view_host) {
+ return render_view_host && IsGuest(
+ static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(
+ render_view_host)));
}
RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() {
@@ -551,17 +311,6 @@ RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() {
return embedder_web_contents_->GetRenderWidgetHostView();
}
-BrowserPluginGuest* BrowserPluginGuest::GetOpener() const {
- if (!delegate_)
- return NULL;
-
- WebContents* opener = delegate_->GetOpener();
- if (!opener)
- return NULL;
-
- return static_cast<WebContentsImpl*>(opener)->GetBrowserPluginGuest();
-}
-
void BrowserPluginGuest::UpdateVisibility() {
OnSetVisibility(instance_id_, visible());
}
@@ -578,8 +327,7 @@ void BrowserPluginGuest::CopyFromCompositingSurface(
BrowserPluginGuestManager*
BrowserPluginGuest::GetBrowserPluginGuestManager() const {
- return BrowserPluginGuestManager::FromBrowserContext(
- GetWebContents()->GetBrowserContext());
+ return GetWebContents()->GetBrowserContext()->GetGuestManager();
}
// screen.
@@ -594,106 +342,6 @@ void BrowserPluginGuest::EmbedderVisibilityChanged(bool visible) {
UpdateVisibility();
}
-void BrowserPluginGuest::AddNewContents(WebContents* source,
- WebContents* new_contents,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture,
- bool* was_blocked) {
- if (was_blocked)
- *was_blocked = false;
- RequestNewWindowPermission(disposition, initial_pos, user_gesture,
- static_cast<WebContentsImpl*>(new_contents));
-}
-
-void BrowserPluginGuest::CanDownload(
- RenderViewHost* render_view_host,
- int request_id,
- const std::string& request_method,
- const base::Callback<void(bool)>& callback) {
- if (!delegate_) {
- callback.Run(false);
- return;
- }
-
- BrowserThread::PostTaskAndReplyWithResult(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&RetrieveDownloadURLFromRequestId,
- render_view_host->GetProcess()->GetID(), request_id),
- base::Bind(&BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId,
- weak_ptr_factory_.GetWeakPtr(),
- request_method,
- callback));
-}
-
-void BrowserPluginGuest::LoadProgressChanged(WebContents* contents,
- double progress) {
- if (delegate_)
- delegate_->LoadProgressed(progress);
-}
-
-void BrowserPluginGuest::CloseContents(WebContents* source) {
- if (!delegate_)
- return;
-
- delegate_->Close();
-}
-
-JavaScriptDialogManager* BrowserPluginGuest::GetJavaScriptDialogManager() {
- if (!delegate_)
- return NULL;
- return delegate_->GetJavaScriptDialogManager();
-}
-
-ColorChooser* BrowserPluginGuest::OpenColorChooser(
- WebContents* web_contents,
- SkColor color,
- const std::vector<ColorSuggestion>& suggestions) {
- if (!embedder_web_contents_ || !embedder_web_contents_->GetDelegate())
- return NULL;
- return embedder_web_contents_->GetDelegate()->OpenColorChooser(
- web_contents, color, suggestions);
-}
-
-bool BrowserPluginGuest::HandleContextMenu(const ContextMenuParams& params) {
- if (delegate_) {
- WebContentsViewGuest* view_guest =
- static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
- ContextMenuParams context_menu_params =
- view_guest->ConvertContextMenuParams(params);
-
- return delegate_->HandleContextMenu(context_menu_params);
- }
-
- // Will be handled by WebContentsViewGuest.
- return false;
-}
-
-void BrowserPluginGuest::HandleKeyboardEvent(
- WebContents* source,
- const NativeWebKeyboardEvent& event) {
- if (!attached())
- return;
-
- if (UnlockMouseIfNecessary(event))
- return;
-
- if (delegate_ && delegate_->HandleKeyboardEvent(event))
- return;
-
- if (!embedder_web_contents_->GetDelegate())
- return;
-
- // Send the unhandled keyboard events back to the embedder to reprocess them.
- // TODO(fsamuel): This introduces the possibility of out-of-order keyboard
- // events because the guest may be arbitrarily delayed when responding to
- // keyboard events. In that time, the embedder may have received and processed
- // additional key events. This needs to be fixed as soon as possible.
- // See http://crbug.com/229882.
- embedder_web_contents_->GetDelegate()->HandleKeyboardEvent(
- web_contents(), event);
-}
-
void BrowserPluginGuest::SetZoom(double zoom_factor) {
if (delegate_)
delegate_->SetZoom(zoom_factor);
@@ -704,98 +352,6 @@ void BrowserPluginGuest::PointerLockPermissionResponse(bool allow) {
new BrowserPluginMsg_SetMouseLock(instance_id(), allow));
}
-void BrowserPluginGuest::FindReply(WebContents* contents,
- int request_id,
- int number_of_matches,
- const gfx::Rect& selection_rect,
- int active_match_ordinal,
- bool final_update) {
- if (!delegate_)
- return;
-
- // |selection_rect| is updated to incorporate embedder coordinates.
- delegate_->FindReply(request_id, number_of_matches,
- ToGuestRect(selection_rect),
- active_match_ordinal, final_update);
-}
-
-WebContents* BrowserPluginGuest::OpenURLFromTab(WebContents* source,
- const OpenURLParams& params) {
- // If the guest wishes to navigate away prior to attachment then we save the
- // navigation to perform upon attachment. Navigation initializes a lot of
- // state that assumes an embedder exists, such as RenderWidgetHostViewGuest.
- // Navigation also resumes resource loading which we don't want to allow
- // until attachment.
- if (!attached()) {
- PendingWindowMap::iterator it =
- GetOpener()->pending_new_windows_.find(this);
- if (it == GetOpener()->pending_new_windows_.end())
- return NULL;
- const NewWindowInfo& old_target_url = it->second;
- NewWindowInfo new_window_info(params.url, old_target_url.name);
- new_window_info.changed = new_window_info.url != old_target_url.url;
- it->second = new_window_info;
- return NULL;
- }
- if (params.disposition == CURRENT_TAB) {
- // This can happen for cross-site redirects.
- LoadURLWithParams(params.url, params.referrer, params.transition, source);
- return source;
- }
-
- return CreateNewGuestWindow(params)->GetWebContents();
-}
-
-void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents,
- int opener_render_frame_id,
- const base::string16& frame_name,
- const GURL& target_url,
- WebContents* new_contents) {
- WebContentsImpl* new_contents_impl =
- static_cast<WebContentsImpl*>(new_contents);
- BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest();
- if (guest->delegate_)
- guest->delegate_->SetOpener(GetWebContents());
- std::string guest_name = base::UTF16ToUTF8(frame_name);
- guest->name_ = guest_name;
- // Take ownership of the new guest until it is attached to the embedder's DOM
- // tree to avoid leaking a guest if this guest is destroyed before attaching
- // the new guest.
- pending_new_windows_.insert(
- std::make_pair(guest, NewWindowInfo(target_url, guest_name)));
-}
-
-void BrowserPluginGuest::RendererUnresponsive(WebContents* source) {
- RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Hung"));
- if (!delegate_)
- return;
- delegate_->RendererUnresponsive();
-}
-
-void BrowserPluginGuest::RendererResponsive(WebContents* source) {
- RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Responsive"));
- if (!delegate_)
- return;
- delegate_->RendererResponsive();
-}
-
-void BrowserPluginGuest::RunFileChooser(WebContents* web_contents,
- const FileChooserParams& params) {
- if (!attached())
- return;
-
- if (!embedder_web_contents_->GetDelegate())
- return;
-
- embedder_web_contents_->GetDelegate()->RunFileChooser(web_contents, params);
-}
-
-bool BrowserPluginGuest::ShouldFocusPageAfterCrash() {
- // Rather than managing focus in WebContentsImpl::RenderViewReady, we will
- // manage the focus ourselves.
- return false;
-}
-
WebContentsImpl* BrowserPluginGuest::GetWebContents() const {
return static_cast<WebContentsImpl*>(web_contents());
}
@@ -812,47 +368,6 @@ bool BrowserPluginGuest::InAutoSizeBounds(const gfx::Size& size) const {
size.height() <= max_auto_size_.height();
}
-void BrowserPluginGuest::RequestNewWindowPermission(
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_bounds,
- bool user_gesture,
- WebContentsImpl* new_contents) {
- BrowserPluginGuest* guest = new_contents->GetBrowserPluginGuest();
- PendingWindowMap::iterator it = pending_new_windows_.find(guest);
- if (it == pending_new_windows_.end())
- return;
- const NewWindowInfo& new_window_info = it->second;
-
- base::DictionaryValue request_info;
- request_info.Set(browser_plugin::kInitialHeight,
- base::Value::CreateIntegerValue(initial_bounds.height()));
- request_info.Set(browser_plugin::kInitialWidth,
- base::Value::CreateIntegerValue(initial_bounds.width()));
- request_info.Set(browser_plugin::kTargetURL,
- base::Value::CreateStringValue(new_window_info.url.spec()));
- request_info.Set(browser_plugin::kName,
- base::Value::CreateStringValue(new_window_info.name));
- request_info.Set(browser_plugin::kWindowID,
- base::Value::CreateIntegerValue(guest->instance_id()));
- request_info.Set(browser_plugin::kWindowOpenDisposition,
- base::Value::CreateStringValue(
- WindowOpenDispositionToString(disposition)));
-
- RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW,
- new NewWindowRequest(weak_ptr_factory_.GetWeakPtr(),
- guest->instance_id()),
- request_info);
-}
-
-bool BrowserPluginGuest::UnlockMouseIfNecessary(
- const NativeWebKeyboardEvent& event) {
- if (!mouse_locked_)
- return false;
-
- embedder_web_contents()->GotResponseToLockMouseRequest(false);
- return true;
-}
-
void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) {
if (!attached()) {
// Some pages such as data URLs, javascript URLs, and about:blank
@@ -879,11 +394,6 @@ void BrowserPluginGuest::EndSystemDrag() {
guest_rvh->DragSourceSystemDragEnded();
}
-void BrowserPluginGuest::SetDelegate(BrowserPluginGuestDelegate* delegate) {
- DCHECK(!delegate_);
- delegate_.reset(delegate);
-}
-
void BrowserPluginGuest::SendQueuedMessages() {
if (!attached())
return;
@@ -921,8 +431,6 @@ void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) {
void BrowserPluginGuest::RenderViewReady() {
RenderViewHost* rvh = GetWebContents()->GetRenderViewHost();
- // The guest RenderView should always live in a guest process.
- CHECK(rvh->GetProcess()->IsGuest());
// TODO(fsamuel): Investigate whether it's possible to update state earlier
// here (see http://crbug.com/158151).
Send(new InputMsg_SetFocus(routing_id(), focused_));
@@ -932,11 +440,10 @@ void BrowserPluginGuest::RenderViewReady() {
else
rvh->DisableAutoResize(full_size_);
- Send(new ViewMsg_SetName(routing_id(), name_));
OnSetContentsOpaque(instance_id_, guest_opaque_);
- RenderWidgetHostImpl::From(rvh)->
- set_hung_renderer_delay_ms(guest_hang_timeout_);
+ RenderWidgetHostImpl::From(rvh)->set_hung_renderer_delay_ms(
+ base::TimeDelta::FromMilliseconds(kHungRendererDelayMs));
}
void BrowserPluginGuest::RenderProcessGone(base::TerminationStatus status) {
@@ -955,10 +462,6 @@ void BrowserPluginGuest::RenderProcessGone(base::TerminationStatus status) {
default:
break;
}
- // TODO(fsamuel): Consider whether we should be clearing
- // |permission_request_map_| here.
- if (delegate_)
- delegate_->GuestProcessGone(status);
}
// static
@@ -981,7 +484,6 @@ bool BrowserPluginGuest::ShouldForwardToBrowserPluginGuest(
case BrowserPluginHostMsg_SetAutoSize::ID:
case BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent::ID:
case BrowserPluginHostMsg_SetFocus::ID:
- case BrowserPluginHostMsg_SetName::ID:
case BrowserPluginHostMsg_SetContentsOpaque::ID:
case BrowserPluginHostMsg_SetVisibility::ID:
case BrowserPluginHostMsg_UnlockMouse_ACK::ID:
@@ -1016,7 +518,6 @@ bool BrowserPluginGuest::OnMessageReceived(const IPC::Message& message) {
OnImeCompositionRangeChanged)
#endif
IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse)
- IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFrameName, OnUpdateFrameName)
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -1030,8 +531,6 @@ void BrowserPluginGuest::Attach(
if (attached())
return;
- extra_attach_params_.reset(extra_params.DeepCopy());
-
// Clear parameters that get inherited from the opener.
params.storage_partition_id.clear();
params.persist_storage = false;
@@ -1048,29 +547,6 @@ void BrowserPluginGuest::Attach(
new_view->CreateViewForWidget(web_contents()->GetRenderViewHost());
}
- // We need to do a navigation here if the target URL has changed between
- // the time the WebContents was created and the time it was attached.
- // We also need to do an initial navigation if a RenderView was never
- // created for the new window in cases where there is no referrer.
- PendingWindowMap::iterator it = GetOpener()->pending_new_windows_.find(this);
- if (it != GetOpener()->pending_new_windows_.end()) {
- const NewWindowInfo& new_window_info = it->second;
- if (new_window_info.changed || !has_render_view_)
- params.src = it->second.url.spec();
- } else {
- NOTREACHED();
- }
-
- // Once a new guest is attached to the DOM of the embedder page, then the
- // lifetime of the new guest is no longer managed by the opener guest.
- GetOpener()->pending_new_windows_.erase(this);
-
- // The guest's frame name takes precedence over the BrowserPlugin's name.
- // The guest's frame name is assigned in
- // BrowserPluginGuest::WebContentsCreated.
- if (!name_.empty())
- params.name.clear();
-
Initialize(params, embedder_web_contents);
SendQueuedMessages();
@@ -1244,38 +720,11 @@ void BrowserPluginGuest::OnLockMouseAck(int instance_id, bool succeeded) {
mouse_locked_ = true;
}
-void BrowserPluginGuest::OnNavigateGuest(
- int instance_id,
- const std::string& src) {
- GURL url = delegate_ ? delegate_->ResolveURL(src) : GURL(src);
-
- // Do not allow navigating a guest to schemes other than known safe schemes.
- // This will block the embedder trying to load unwanted schemes, e.g.
- // chrome://settings.
- bool scheme_is_blocked =
- (!ChildProcessSecurityPolicyImpl::GetInstance()->IsWebSafeScheme(
- url.scheme()) &&
- !ChildProcessSecurityPolicyImpl::GetInstance()->IsPseudoScheme(
- url.scheme())) ||
- url.SchemeIs(kJavaScriptScheme);
- if (scheme_is_blocked || !url.is_valid()) {
- if (delegate_) {
- std::string error_type;
- base::RemoveChars(net::ErrorToString(net::ERR_ABORTED), "net::",
- &error_type);
- delegate_->LoadAbort(true /* is_top_level */, url, error_type);
- }
+void BrowserPluginGuest::OnNavigateGuest(int instance_id,
+ const std::string& src) {
+ if (!delegate_)
return;
- }
-
- GURL validated_url(url);
- GetWebContents()->GetRenderProcessHost()->FilterURL(false, &validated_url);
- // As guests do not swap processes on navigation, only navigations to
- // normal web URLs are supported. No protocol handlers are installed for
- // other schemes (e.g., WebUI or extensions), and no permissions or bindings
- // can be granted to the guest process.
- LoadURLWithParams(validated_url, Referrer(), PAGE_TRANSITION_AUTO_TOPLEVEL,
- GetWebContents());
+ delegate_->NavigateGuest(src);
}
void BrowserPluginGuest::OnPluginDestroyed(int instance_id) {
@@ -1331,13 +780,6 @@ void BrowserPluginGuest::OnSetFocus(int instance_id, bool focused) {
}
}
-void BrowserPluginGuest::OnSetName(int instance_id, const std::string& name) {
- if (name == name_)
- return;
- name_ = name;
- Send(new ViewMsg_SetName(routing_id(), name));
-}
-
void BrowserPluginGuest::OnSetSize(
int instance_id,
const BrowserPluginHostMsg_AutoSize_Params& auto_size_params,
@@ -1378,14 +820,7 @@ void BrowserPluginGuest::OnSetEditCommandsForNextKeyEvent(
void BrowserPluginGuest::OnSetContentsOpaque(int instance_id, bool opaque) {
guest_opaque_ = opaque;
-
- SkBitmap background;
- if (!guest_opaque_) {
- background.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
- unsigned int color = 0;
- background.setPixels(&color);
- }
- Send(new ViewMsg_SetBackground(routing_id(), background));
+ Send(new ViewMsg_SetBackgroundOpaque(routing_id(), guest_opaque_));
}
void BrowserPluginGuest::OnSetVisibility(int instance_id, bool visible) {
@@ -1470,37 +905,6 @@ void BrowserPluginGuest::OnTakeFocus(bool reverse) {
new BrowserPluginMsg_AdvanceFocus(instance_id(), reverse));
}
-void BrowserPluginGuest::OnUpdateFrameName(int frame_id,
- bool is_top_level,
- const std::string& name) {
- if (!is_top_level)
- return;
-
- name_ = name;
- SendMessageToEmbedder(new BrowserPluginMsg_UpdatedName(instance_id_, name));
-}
-
-void BrowserPluginGuest::RequestMediaAccessPermission(
- WebContents* web_contents,
- const MediaStreamRequest& request,
- const MediaResponseCallback& callback) {
- if (!delegate_) {
- callback.Run(MediaStreamDevices(),
- MEDIA_DEVICE_INVALID_STATE,
- scoped_ptr<MediaStreamUI>());
- return;
- }
-
- delegate_->RequestMediaAccessPermission(request, callback);
-}
-
-bool BrowserPluginGuest::PreHandleGestureEvent(
- WebContents* source, const blink::WebGestureEvent& event) {
- return event.type == blink::WebGestureEvent::GesturePinchBegin ||
- event.type == blink::WebGestureEvent::GesturePinchUpdate ||
- event.type == blink::WebGestureEvent::GesturePinchEnd;
-}
-
void BrowserPluginGuest::OnUpdateRect(
const ViewHostMsg_UpdateRect_Params& params) {
BrowserPluginMsg_UpdateRect_Params relay_params;
@@ -1551,16 +955,4 @@ void BrowserPluginGuest::OnImeCompositionRangeChanged(
}
#endif
-void BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId(
- const std::string& request_method,
- const base::Callback<void(bool)>& callback,
- const GURL& url) {
- if (!url.is_valid()) {
- callback.Run(false);
- return;
- }
-
- delegate_->CanDownload(request_method, url, callback);
-}
-
} // namespace content
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index 7380e362bd..40326341d4 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -10,9 +10,9 @@
// messages about the guest render process that the embedder might be interested
// in receiving should be listened for here.
//
-// BrowserPluginGuest is a WebContentsDelegate and WebContentsObserver for the
-// guest WebContents. BrowserPluginGuest operates under the assumption that the
-// guest will be accessible through only one RenderViewHost for the lifetime of
+// BrowserPluginGuest is a WebContentsObserver for the guest WebContents.
+// BrowserPluginGuest operates under the assumption that the guest will be
+// accessible through only one RenderViewHost for the lifetime of
// the guest WebContents. Thus, cross-process navigation is not supported.
#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_H_
@@ -27,9 +27,7 @@
#include "content/common/edit_command.h"
#include "content/common/input/input_event_ack_state.h"
#include "content/public/browser/browser_plugin_guest_delegate.h"
-#include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/browser_plugin_permission_type.h"
#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
#include "third_party/WebKit/public/web/WebDragOperation.h"
#include "third_party/WebKit/public/web/WebDragStatus.h"
@@ -37,8 +35,8 @@
#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/rect.h"
-#include "ui/surface/transport_dib.h"
+class SkBitmap;
struct BrowserPluginHostMsg_AutoSize_Params;
struct BrowserPluginHostMsg_Attach_Params;
struct BrowserPluginHostMsg_ResizeGuest_Params;
@@ -61,11 +59,11 @@ namespace content {
class BrowserPluginGuestManager;
class BrowserPluginHostFactory;
+class RenderViewHostImpl;
class RenderWidgetHostView;
class SiteInstance;
class WebCursor;
struct DropData;
-struct MediaStreamRequest;
// A browser plugin guest provides functionality for WebContents to operate in
// the guest role and implements guest-specific overrides for ViewHostMsg_*
@@ -77,9 +75,7 @@ struct MediaStreamRequest;
// A BrowserPluginGuest can also create a new unattached guest via
// CreateNewWindow. The newly created guest will live in the same partition,
// which means it can share storage and can script this guest.
-class CONTENT_EXPORT BrowserPluginGuest
- : public WebContentsDelegate,
- public WebContentsObserver {
+class CONTENT_EXPORT BrowserPluginGuest : public WebContentsObserver {
public:
virtual ~BrowserPluginGuest();
@@ -94,20 +90,21 @@ class CONTENT_EXPORT BrowserPluginGuest
int instance_id,
SiteInstance* guest_site_instance,
WebContentsImpl* web_contents,
- scoped_ptr<base::DictionaryValue> extra_params);
-
- static BrowserPluginGuest* CreateWithOpener(
- int instance_id,
- bool has_render_view,
- WebContentsImpl* web_contents,
+ scoped_ptr<base::DictionaryValue> extra_params,
BrowserPluginGuest* opener);
+ // Returns whether the given WebContents is a BrowserPlugin guest.
+ static bool IsGuest(WebContentsImpl* web_contents);
+
+ // Returns whether the given RenderviewHost is a BrowserPlugin guest.
+ static bool IsGuest(RenderViewHostImpl* render_view_host);
+
// Returns a WeakPtr to this BrowserPluginGuest.
base::WeakPtr<BrowserPluginGuest> AsWeakPtr();
- // Called when the embedder WebContents is destroyed to give the
- // BrowserPluginGuest an opportunity to clean up after itself.
- void EmbedderDestroyed();
+ // Sets the lock state of the pointer. Returns true if |allowed| is true and
+ // the mouse has been successfully locked.
+ bool LockMouse(bool allowed);
// Called when the embedder WebContents changes visibility.
void EmbedderVisibilityChanged(bool visible);
@@ -140,9 +137,6 @@ class CONTENT_EXPORT BrowserPluginGuest
// Returns the BrowserPluginGuest that created this guest, if any.
BrowserPluginGuest* GetOpener() const;
- // Returns whether the mouse pointer was unlocked.
- bool UnlockMouseIfNecessary(const NativeWebKeyboardEvent& event);
-
void UpdateVisibility();
void CopyFromCompositingSurface(
@@ -166,63 +160,6 @@ class CONTENT_EXPORT BrowserPluginGuest
virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- // WebContentsDelegate implementation.
- virtual bool AddMessageToConsole(WebContents* source,
- int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id) OVERRIDE;
- // If a new window is created with target="_blank" and rel="noreferrer", then
- // this method is called, indicating that the new WebContents is ready to be
- // attached.
- virtual void AddNewContents(WebContents* source,
- WebContents* new_contents,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture,
- bool* was_blocked) OVERRIDE;
- virtual void CanDownload(RenderViewHost* render_view_host,
- int request_id,
- const std::string& request_method,
- const base::Callback<void(bool)>& callback) OVERRIDE;
- virtual void LoadProgressChanged(WebContents* source,
- double progress) OVERRIDE;
- virtual void CloseContents(WebContents* source) OVERRIDE;
- virtual JavaScriptDialogManager* GetJavaScriptDialogManager() OVERRIDE;
- virtual ColorChooser* OpenColorChooser(
- WebContents* web_contents,
- SkColor color,
- const std::vector<ColorSuggestion>& suggestions) OVERRIDE;
- virtual bool HandleContextMenu(const ContextMenuParams& params) OVERRIDE;
- virtual void HandleKeyboardEvent(
- WebContents* source,
- const NativeWebKeyboardEvent& event) OVERRIDE;
- virtual void FindReply(WebContents* contents,
- int request_id,
- int number_of_matches,
- const gfx::Rect& selection_rect,
- int active_match_ordinal,
- bool final_update) OVERRIDE;
- virtual WebContents* OpenURLFromTab(WebContents* source,
- const OpenURLParams& params) OVERRIDE;
- virtual void WebContentsCreated(WebContents* source_contents,
- int opener_render_frame_id,
- const base::string16& frame_name,
- const GURL& target_url,
- WebContents* new_contents) OVERRIDE;
- virtual void RendererUnresponsive(WebContents* source) OVERRIDE;
- virtual void RendererResponsive(WebContents* source) OVERRIDE;
- virtual void RunFileChooser(WebContents* web_contents,
- const FileChooserParams& params) OVERRIDE;
- virtual bool ShouldFocusPageAfterCrash() OVERRIDE;
- virtual void RequestMediaAccessPermission(
- WebContents* web_contents,
- const MediaStreamRequest& request,
- const MediaResponseCallback& callback) OVERRIDE;
- virtual bool PreHandleGestureEvent(
- content::WebContents* source,
- const blink::WebGestureEvent& event) OVERRIDE;
-
// Exposes the protected web_contents() from WebContentsObserver.
WebContentsImpl* GetWebContents() const;
@@ -258,8 +195,10 @@ class CONTENT_EXPORT BrowserPluginGuest
// Called when the drag started by this guest ends at an OS-level.
void EndSystemDrag();
- // |this| takes ownership of |delegate|.
- void SetDelegate(BrowserPluginGuestDelegate* delegate);
+ void set_delegate(BrowserPluginGuestDelegate* delegate) {
+ DCHECK(!delegate_);
+ delegate_ = delegate;
+ }
void RespondToPermissionRequest(int request_id,
bool should_allow,
@@ -279,56 +218,16 @@ class CONTENT_EXPORT BrowserPluginGuest
class EmbedderWebContentsObserver;
friend class TestBrowserPluginGuest;
- class DownloadRequest;
- class NewWindowRequest;
- class PermissionRequest;
-
- // Tracks the name, and target URL of the new window and whether or not it has
- // changed since the WebContents has been created and before the new window
- // has been attached to a BrowserPlugin. Once the first navigation commits, we
- // no longer track this information.
- struct NewWindowInfo {
- bool changed;
- GURL url;
- std::string name;
- NewWindowInfo(const GURL& url, const std::string& name) :
- changed(false),
- url(url),
- name(name) {}
- };
-
// BrowserPluginGuest is a WebContentsObserver of |web_contents| and
// |web_contents| has to stay valid for the lifetime of BrowserPluginGuest.
BrowserPluginGuest(int instance_id,
bool has_render_view,
WebContentsImpl* web_contents);
- // Destroy unattached new windows that have been opened by this
- // BrowserPluginGuest.
- void DestroyUnattachedWindows();
-
- void LoadURLWithParams(const GURL& url,
- const Referrer& referrer,
- PageTransition transition_type,
- WebContents* web_contents);
-
- // Returns the |request_id| generated for the |request| provided.
- void RequestPermission(
- BrowserPluginPermissionType permission_type,
- scoped_refptr<BrowserPluginGuest::PermissionRequest> request,
- const base::DictionaryValue& request_info);
-
- // Creates a new guest window, and BrowserPluginGuest that is owned by this
- // BrowserPluginGuest.
- BrowserPluginGuest* CreateNewGuestWindow(const OpenURLParams& params);
+ void WillDestroy();
bool InAutoSizeBounds(const gfx::Size& size) const;
- void RequestNewWindowPermission(WindowOpenDisposition disposition,
- const gfx::Rect& initial_bounds,
- bool user_gesture,
- WebContentsImpl* new_contents);
-
// Message handlers for messages from embedder.
void OnCompositorFrameSwappedACK(
@@ -367,11 +266,9 @@ class CONTENT_EXPORT BrowserPluginGuest
void OnNavigateGuest(int instance_id, const std::string& src);
void OnPluginDestroyed(int instance_id);
// Resizes the guest's web contents.
- // Overridden in tests.
- virtual void OnResizeGuest(
+ void OnResizeGuest(
int instance_id, const BrowserPluginHostMsg_ResizeGuest_Params& params);
- // Overridden in tests.
- virtual void OnSetFocus(int instance_id, bool focused);
+ void OnSetFocus(int instance_id, bool focused);
// Sets the name of the guest so that other guests in the same partition can
// access it.
void OnSetName(int instance_id, const std::string& name);
@@ -440,20 +337,12 @@ class CONTENT_EXPORT BrowserPluginGuest
void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params);
#endif
void OnShowWidget(int route_id, const gfx::Rect& initial_pos);
- // Overridden in tests.
- virtual void OnTakeFocus(bool reverse);
+ void OnTakeFocus(bool reverse);
void OnUpdateFrameName(int frame_id,
bool is_top_level,
const std::string& name);
void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params);
- // Requests download permission through embedder JavaScript API after
- // retrieving url information from IO thread.
- void DidRetrieveDownloadURLFromRequestId(
- const std::string& request_method,
- const base::Callback<void(bool)>& callback,
- const GURL& url);
-
// Forwards all messages from the |pending_messages_| queue to the embedder.
void SendQueuedMessages();
@@ -469,7 +358,6 @@ class CONTENT_EXPORT BrowserPluginGuest
float guest_device_scale_factor_;
gfx::Rect guest_window_rect_;
gfx::Rect guest_screen_rect_;
- base::TimeDelta guest_hang_timeout_;
bool focused_;
bool mouse_locked_;
bool pending_lock_request_;
@@ -489,16 +377,6 @@ class CONTENT_EXPORT BrowserPluginGuest
typedef std::map<int, const CopyRequestCallback> CopyRequestMap;
CopyRequestMap copy_request_callbacks_;
- typedef std::map<BrowserPluginGuest*, NewWindowInfo> PendingWindowMap;
- PendingWindowMap pending_new_windows_;
- // A counter to generate a unique request id for a permission request.
- // We only need the ids to be unique for a given BrowserPluginGuest.
- int next_permission_request_id_;
-
- // A map to store relevant info for a request keyed by the request's id.
- typedef std::map<int, scoped_refptr<PermissionRequest> > RequestMap;
- RequestMap permission_request_map_;
-
// Indicates that this BrowserPluginGuest has associated renderer-side state.
// This is used to determine whether or not to create a new RenderView when
// this guest is attached.
@@ -520,11 +398,7 @@ class CONTENT_EXPORT BrowserPluginGuest
// once the guest is attached to a particular embedder.
std::queue<IPC::Message*> pending_messages_;
- scoped_ptr<BrowserPluginGuestDelegate> delegate_;
-
- // These are parameters passed from JavaScript on attachment to the content
- // embedder.
- scoped_ptr<base::DictionaryValue> extra_attach_params_;
+ BrowserPluginGuestDelegate* delegate_;
// Weak pointer used to ask GeolocationPermissionContext about geolocation
// permission.
diff --git a/content/browser/browser_plugin/browser_plugin_guest_manager.cc b/content/browser/browser_plugin/browser_plugin_guest_manager.cc
deleted file mode 100644
index d36dc13e3d..0000000000
--- a/content/browser/browser_plugin/browser_plugin_guest_manager.cc
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
-
-#include "content/browser/browser_plugin/browser_plugin_guest.h"
-#include "content/browser/browser_plugin/browser_plugin_host_factory.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/common/browser_plugin/browser_plugin_constants.h"
-#include "content/common/browser_plugin/browser_plugin_messages.h"
-#include "content/common/content_export.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/browser_plugin_guest_manager_delegate.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/user_metrics.h"
-#include "content/public/common/content_client.h"
-#include "content/public/common/result_codes.h"
-#include "content/public/common/url_constants.h"
-#include "content/public/common/url_utils.h"
-#include "net/base/escape.h"
-
-namespace content {
-
-// static
-BrowserPluginHostFactory* BrowserPluginGuestManager::factory_ = NULL;
-
-BrowserPluginGuestManager::BrowserPluginGuestManager(BrowserContext* context)
- : context_(context) {}
-
-BrowserPluginGuestManagerDelegate*
-BrowserPluginGuestManager::GetDelegate() const {
- return context_->GetGuestManagerDelegate();
-}
-
-BrowserPluginGuestManager::~BrowserPluginGuestManager() {
-}
-
-// static.
-BrowserPluginGuestManager* BrowserPluginGuestManager::FromBrowserContext(
- BrowserContext* context) {
- BrowserPluginGuestManager* guest_manager =
- static_cast<BrowserPluginGuestManager*>(
- context->GetUserData(
- browser_plugin::kBrowserPluginGuestManagerKeyName));
- if (!guest_manager) {
- guest_manager = BrowserPluginGuestManager::Create(context);
- context->SetUserData(browser_plugin::kBrowserPluginGuestManagerKeyName,
- guest_manager);
- }
- return guest_manager;
-}
-
-// static
-BrowserPluginGuestManager* BrowserPluginGuestManager::Create(
- BrowserContext* context) {
- if (factory_)
- return factory_->CreateBrowserPluginGuestManager(context);
- return new BrowserPluginGuestManager(context);
-}
-
-int BrowserPluginGuestManager::GetNextInstanceID() {
- if (!GetDelegate())
- return 0;
- return GetDelegate()->GetNextInstanceID();
-}
-
-BrowserPluginGuest* BrowserPluginGuestManager::CreateGuest(
- SiteInstance* embedder_site_instance,
- int instance_id,
- const BrowserPluginHostMsg_Attach_Params& params,
- scoped_ptr<base::DictionaryValue> extra_params) {
- RenderProcessHost* embedder_process_host =
- embedder_site_instance->GetProcess();
- // Validate that the partition id coming from the renderer is valid UTF-8,
- // since we depend on this in other parts of the code, such as FilePath
- // creation. If the validation fails, treat it as a bad message and kill the
- // renderer process.
- if (!base::IsStringUTF8(params.storage_partition_id)) {
- content::RecordAction(
- base::UserMetricsAction("BadMessageTerminate_BPGM"));
- base::KillProcess(
- embedder_process_host->GetHandle(),
- content::RESULT_CODE_KILLED_BAD_MESSAGE, false);
- return NULL;
- }
-
- const GURL& embedder_site_url = embedder_site_instance->GetSiteURL();
- const std::string& host = embedder_site_url.host();
-
- std::string url_encoded_partition = net::EscapeQueryParamValue(
- params.storage_partition_id, false);
- // The SiteInstance of a given webview tag is based on the fact that it's
- // a guest process in addition to which platform application the tag
- // belongs to and what storage partition is in use, rather than the URL
- // that the tag is being navigated to.
- GURL guest_site(base::StringPrintf("%s://%s/%s?%s",
- kGuestScheme,
- host.c_str(),
- params.persist_storage ? "persist" : "",
- url_encoded_partition.c_str()));
-
- // If we already have a webview tag in the same app using the same storage
- // partition, we should use the same SiteInstance so the existing tag and
- // the new tag can script each other.
- SiteInstance* guest_site_instance = GetGuestSiteInstance(guest_site);
- if (!guest_site_instance) {
- // Create the SiteInstance in a new BrowsingInstance, which will ensure
- // that webview tags are also not allowed to send messages across
- // different partitions.
- guest_site_instance = SiteInstance::CreateForURL(
- embedder_site_instance->GetBrowserContext(), guest_site);
- }
-
- return WebContentsImpl::CreateGuest(
- embedder_site_instance->GetBrowserContext(),
- guest_site_instance,
- instance_id,
- extra_params.Pass());
-}
-
-static void BrowserPluginGuestByInstanceIDCallback(
- const BrowserPluginGuestManager::GuestByInstanceIDCallback& callback,
- WebContents* guest_web_contents) {
- if (!guest_web_contents) {
- callback.Run(NULL);
- return;
- }
- callback.Run(static_cast<WebContentsImpl*>(guest_web_contents)->
- GetBrowserPluginGuest());
-}
-
-void BrowserPluginGuestManager::MaybeGetGuestByInstanceIDOrKill(
- int instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) const {
- if (!GetDelegate()) {
- callback.Run(NULL);
- return;
- }
-
- GetDelegate()->MaybeGetGuestByInstanceIDOrKill(
- instance_id,
- embedder_render_process_id,
- base::Bind(&BrowserPluginGuestByInstanceIDCallback,
- callback));
-}
-
-void BrowserPluginGuestManager::AddGuest(int instance_id,
- WebContents* guest_web_contents) {
- if (!GetDelegate())
- return;
- GetDelegate()->AddGuest(instance_id, guest_web_contents);
-}
-
-void BrowserPluginGuestManager::RemoveGuest(int instance_id) {
- if (!GetDelegate())
- return;
- GetDelegate()->RemoveGuest(instance_id);
-}
-
-static void BrowserPluginGuestMessageCallback(const IPC::Message& message,
- BrowserPluginGuest* guest) {
- if (!guest)
- return;
- guest->OnMessageReceivedFromEmbedder(message);
-}
-
-void BrowserPluginGuestManager::OnMessageReceived(const IPC::Message& message,
- int render_process_id) {
- DCHECK(BrowserPluginGuest::ShouldForwardToBrowserPluginGuest(message));
- int instance_id = 0;
- // All allowed messages must have instance_id as their first parameter.
- PickleIterator iter(message);
- bool success = iter.ReadInt(&instance_id);
- DCHECK(success);
- MaybeGetGuestByInstanceIDOrKill(instance_id,
- render_process_id,
- base::Bind(&BrowserPluginGuestMessageCallback,
- message));
-}
-
-SiteInstance* BrowserPluginGuestManager::GetGuestSiteInstance(
- const GURL& guest_site) {
- if (!GetDelegate())
- return NULL;
- return GetDelegate()->GetGuestSiteInstance(guest_site);
-}
-
-static bool BrowserPluginGuestCallback(
- const BrowserPluginGuestManager::GuestCallback& callback,
- WebContents* guest_web_contents) {
- return callback.Run(static_cast<WebContentsImpl*>(guest_web_contents)
- ->GetBrowserPluginGuest());
-}
-
-bool BrowserPluginGuestManager::ForEachGuest(
- WebContents* embedder_web_contents, const GuestCallback& callback) {
- if (!GetDelegate())
- return false;
- return GetDelegate()->ForEachGuest(embedder_web_contents,
- base::Bind(&BrowserPluginGuestCallback,
- callback));
-}
-
-} // namespace content
diff --git a/content/browser/browser_plugin/browser_plugin_guest_manager.h b/content/browser/browser_plugin/browser_plugin_guest_manager.h
deleted file mode 100644
index 31210dd89e..0000000000
--- a/content/browser/browser_plugin/browser_plugin_guest_manager.h
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// A BrowserPluginGuestManager serves as a message router to BrowserPluginGuests
-// for all guests within a given profile.
-// Messages are routed to a particular guest instance based on an instance_id.
-
-#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_MANAGER_H_
-#define CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_MANAGER_H_
-
-#include "base/basictypes.h"
-#include "base/supports_user_data.h"
-#include "base/values.h"
-#include "content/common/content_export.h"
-#include "content/public/browser/browser_plugin_guest_manager_delegate.h"
-#include "ipc/ipc_message.h"
-
-struct BrowserPluginHostMsg_Attach_Params;
-struct BrowserPluginHostMsg_ResizeGuest_Params;
-class GURL;
-
-namespace gfx {
-class Point;
-}
-
-namespace IPC {
-class Message;
-} // namespace IPC
-
-namespace content {
-
-class BrowserContext;
-class BrowserPluginGuest;
-class BrowserPluginHostFactory;
-class RenderWidgetHostImpl;
-class SiteInstance;
-class WebContents;
-
-// WARNING: All APIs should be guarded with a process ID check like
-// CanEmbedderAccessInstanceIDMaybeKill, to prevent abuse by normal renderer
-// processes.
-class CONTENT_EXPORT BrowserPluginGuestManager :
- public base::SupportsUserData::Data {
- public:
- virtual ~BrowserPluginGuestManager();
-
- static BrowserPluginGuestManager* FromBrowserContext(BrowserContext* context);
-
- BrowserPluginGuestManagerDelegate* GetDelegate() const;
-
- static BrowserPluginGuestManager* Create(BrowserContext* context);
-
- // Overrides factory for testing. Default (NULL) value indicates regular
- // (non-test) environment.
- static void set_factory_for_testing(BrowserPluginHostFactory* factory) {
- content::BrowserPluginGuestManager::factory_ = factory;
- }
-
- // Gets the next available instance id. 0 is considered an invalid instance
- // ID.
- int GetNextInstanceID();
-
- // Creates a guest WebContents with the provided |instance_id| and |params|.
- // If params.src is present, the new guest will also be navigated to the
- // provided URL. Optionally, the new guest may be attached to a
- // |guest_opener|, and may be attached to a pre-selected |routing_id|.
- BrowserPluginGuest* CreateGuest(
- SiteInstance* embedder_site_instance,
- int instance_id,
- const BrowserPluginHostMsg_Attach_Params& params,
- scoped_ptr<base::DictionaryValue> extra_params);
-
- // Adds a new |guest_web_contents| to the embedder (overridable in test).
- virtual void AddGuest(int instance_id, WebContents* guest_web_contents);
-
- // Removes the guest with the given |instance_id| from this
- // BrowserPluginGuestManager.
- void RemoveGuest(int instance_id);
-
- typedef base::Callback<void(BrowserPluginGuest*)> GuestByInstanceIDCallback;
- void MaybeGetGuestByInstanceIDOrKill(
- int instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) const;
-
- typedef base::Callback<bool(BrowserPluginGuest*)> GuestCallback;
- bool ForEachGuest(WebContents* embedder_web_contents,
- const GuestCallback& callback);
-
- void OnMessageReceived(const IPC::Message& message, int render_process_id);
-
- private:
- friend class TestBrowserPluginGuestManager;
-
- explicit BrowserPluginGuestManager(BrowserContext* context);
-
- // Returns an existing SiteInstance if the current profile has a guest of the
- // given |guest_site|.
- SiteInstance* GetGuestSiteInstance(const GURL& guest_site);
-
- // Static factory instance (always NULL outside of tests).
- static BrowserPluginHostFactory* factory_;
-
- // The BrowserContext in which this manager this stored.
- BrowserContext* context_;
-
- // Contains guests' WebContents, mapping from their instance ids.
- typedef std::map<int, WebContents*> GuestInstanceMap;
- GuestInstanceMap guest_web_contents_by_instance_id_;
- int next_instance_id_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowserPluginGuestManager);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_MANAGER_H_
diff --git a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
index c054c4afac..2e3c4c89d4 100644
--- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
+++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
@@ -2,23 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/command_line.h"
#include "base/memory/singleton.h"
#include "base/run_loop.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
-#include "base/test/test_timeouts.h"
#include "content/browser/browser_plugin/browser_plugin_embedder.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
#include "content/browser/browser_plugin/browser_plugin_host_factory.h"
#include "content/browser/browser_plugin/test_browser_plugin_guest.h"
-#include "content/browser/browser_plugin/test_browser_plugin_guest_delegate.h"
-#include "content/browser/browser_plugin/test_browser_plugin_guest_manager.h"
-#include "content/browser/browser_plugin/test_guest_manager_delegate.h"
+#include "content/browser/browser_plugin/test_guest_manager.h"
#include "content/browser/child_process_security_policy_impl.h"
-#include "content/browser/frame_host/render_frame_host_impl.h"
-#include "content/browser/frame_host/render_widget_host_view_guest.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/browser_plugin/browser_plugin_messages.h"
@@ -28,7 +22,6 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents_observer.h"
-#include "content/public/common/content_switches.h"
#include "content/public/common/drop_data.h"
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
@@ -55,20 +48,6 @@ using content::WebContentsImpl;
const char kHTMLForGuest[] =
"data:text/html,<html><body>hello world</body></html>";
-const char kHTMLForGuestTouchHandler[] =
- "data:text/html,<html><body><div id=\"touch\">With touch</div></body>"
- "<script type=\"text/javascript\">"
- "function handler() {}"
- "function InstallTouchHandler() { "
- " document.getElementById(\"touch\").addEventListener(\"touchstart\", "
- " handler);"
- "}"
- "function UninstallTouchHandler() { "
- " document.getElementById(\"touch\").removeEventListener(\"touchstart\", "
- " handler);"
- "}"
- "</script></html>";
-
const char kHTMLForGuestAcceptDrag[] =
"data:text/html,<html><body>"
"<script>"
@@ -103,14 +82,6 @@ class TestBrowserPluginEmbedder : public BrowserPluginEmbedder {
// BrowserPluginGuest.
class TestBrowserPluginHostFactory : public BrowserPluginHostFactory {
public:
- virtual BrowserPluginGuestManager*
- CreateBrowserPluginGuestManager(BrowserContext* context) OVERRIDE {
- guest_manager_instance_count_++;
- if (message_loop_runner_)
- message_loop_runner_->Quit();
- return new TestBrowserPluginGuestManager(context);
- }
-
virtual BrowserPluginGuest* CreateBrowserPluginGuest(
int instance_id,
WebContentsImpl* web_contents) OVERRIDE {
@@ -129,19 +100,8 @@ class TestBrowserPluginHostFactory : public BrowserPluginHostFactory {
return Singleton<TestBrowserPluginHostFactory>::get();
}
- // Waits for at least one embedder to be created in the test. Returns true if
- // we have a guest, false if waiting times out.
- void WaitForGuestManagerCreation() {
- // Check if already have created an instance.
- if (guest_manager_instance_count_ > 0)
- return;
- // Wait otherwise.
- message_loop_runner_ = new MessageLoopRunner();
- message_loop_runner_->Run();
- }
-
protected:
- TestBrowserPluginHostFactory() : guest_manager_instance_count_(0) {}
+ TestBrowserPluginHostFactory() {}
virtual ~TestBrowserPluginHostFactory() {}
private:
@@ -149,80 +109,10 @@ class TestBrowserPluginHostFactory : public BrowserPluginHostFactory {
friend struct DefaultSingletonTraits<TestBrowserPluginHostFactory>;
scoped_refptr<MessageLoopRunner> message_loop_runner_;
- int guest_manager_instance_count_;
DISALLOW_COPY_AND_ASSIGN(TestBrowserPluginHostFactory);
};
-// Test factory class for browser plugin that creates guests with short hang
-// timeout.
-class TestShortHangTimeoutGuestFactory : public TestBrowserPluginHostFactory {
- public:
- virtual BrowserPluginGuest* CreateBrowserPluginGuest(
- int instance_id, WebContentsImpl* web_contents) OVERRIDE {
- TestBrowserPluginGuest* guest =
- new TestBrowserPluginGuest(instance_id, web_contents);
- guest->set_guest_hang_timeout(TestTimeouts::tiny_timeout());
- return guest;
- }
-
- // Singleton getter.
- static TestShortHangTimeoutGuestFactory* GetInstance() {
- return Singleton<TestShortHangTimeoutGuestFactory>::get();
- }
-
- protected:
- TestShortHangTimeoutGuestFactory() {}
- virtual ~TestShortHangTimeoutGuestFactory() {}
-
- private:
- // For Singleton.
- friend struct DefaultSingletonTraits<TestShortHangTimeoutGuestFactory>;
-
- DISALLOW_COPY_AND_ASSIGN(TestShortHangTimeoutGuestFactory);
-};
-
-// A transparent observer that can be used to verify that a RenderViewHost
-// received a specific message.
-class MessageObserver : public WebContentsObserver {
- public:
- MessageObserver(WebContents* web_contents, uint32 message_id)
- : WebContentsObserver(web_contents),
- message_id_(message_id),
- message_received_(false) {
- }
-
- virtual ~MessageObserver() {}
-
- void WaitUntilMessageReceived() {
- if (message_received_)
- return;
- message_loop_runner_ = new MessageLoopRunner();
- message_loop_runner_->Run();
- }
-
- void ResetState() {
- message_received_ = false;
- }
-
- // IPC::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
- if (message.type() == message_id_) {
- message_received_ = true;
- if (message_loop_runner_)
- message_loop_runner_->Quit();
- }
- return false;
- }
-
- private:
- scoped_refptr<MessageLoopRunner> message_loop_runner_;
- uint32 message_id_;
- bool message_received_;
-
- DISALLOW_COPY_AND_ASSIGN(MessageObserver);
-};
-
class BrowserPluginHostTest : public ContentBrowserTest {
public:
BrowserPluginHostTest()
@@ -236,8 +126,6 @@ class BrowserPluginHostTest : public ContentBrowserTest {
TestBrowserPluginHostFactory::GetInstance());
BrowserPluginGuest::set_factory_for_testing(
TestBrowserPluginHostFactory::GetInstance());
- BrowserPluginGuestManager::set_factory_for_testing(
- TestBrowserPluginHostFactory::GetInstance());
ContentBrowserTest::SetUp();
}
virtual void TearDown() OVERRIDE {
@@ -289,8 +177,8 @@ class BrowserPluginHostTest : public ContentBrowserTest {
shell()->web_contents());
static_cast<ShellBrowserContext*>(
embedder_web_contents->GetBrowserContext())->
- set_guest_manager_delegate_for_testing(
- TestGuestManagerDelegate::GetInstance());
+ set_guest_manager_for_testing(
+ TestGuestManager::GetInstance());
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
embedder_web_contents->GetRenderViewHost());
RenderFrameHost* rfh = embedder_web_contents->GetMainFrame();
@@ -313,20 +201,16 @@ class BrowserPluginHostTest : public ContentBrowserTest {
rfh, base::StringPrintf("SetSrc('%s');", guest_url.c_str()));
}
- // Wait to make sure embedder is created/attached to WebContents.
- TestBrowserPluginHostFactory::GetInstance()->WaitForGuestManagerCreation();
-
test_embedder_ = static_cast<TestBrowserPluginEmbedder*>(
embedder_web_contents->GetBrowserPluginEmbedder());
ASSERT_TRUE(test_embedder_);
- test_guest_manager_ = static_cast<TestBrowserPluginGuestManager*>(
- BrowserPluginGuestManager::FromBrowserContext(
- test_embedder_->GetWebContents()->GetBrowserContext()));
- ASSERT_TRUE(test_guest_manager_);
+ test_guest_manager_ =
+ static_cast<TestGuestManager*>(
+ embedder_web_contents->GetBrowserContext()->GetGuestManager());
- WebContentsImpl* test_guest_web_contents = static_cast<WebContentsImpl*>(
- test_guest_manager_->WaitForGuestAdded());
+ WebContentsImpl* test_guest_web_contents =
+ test_guest_manager_->WaitForGuestAdded();
test_guest_ = static_cast<TestBrowserPluginGuest*>(
test_guest_web_contents->GetBrowserPluginGuest());
@@ -335,56 +219,17 @@ class BrowserPluginHostTest : public ContentBrowserTest {
TestBrowserPluginEmbedder* test_embedder() const { return test_embedder_; }
TestBrowserPluginGuest* test_guest() const { return test_guest_; }
- TestBrowserPluginGuestManager* test_guest_manager() const {
+ TestGuestManager* test_guest_manager() const {
return test_guest_manager_;
}
private:
TestBrowserPluginEmbedder* test_embedder_;
TestBrowserPluginGuest* test_guest_;
- TestBrowserPluginGuestManager* test_guest_manager_;
+ TestGuestManager* test_guest_manager_;
DISALLOW_COPY_AND_ASSIGN(BrowserPluginHostTest);
};
-// This test ensures that if guest isn't there and we resize the guest (from
-// js), it remembers the size correctly.
-//
-// Initially we load an embedder with a guest without a src attribute (which has
-// dimension 640x480), resize it to 100x200, and then we set the source to a
-// sample guest. In the end we verify that the correct size has been set.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, NavigateAfterResize) {
- const gfx::Size nxt_size = gfx::Size(100, 200);
- const std::string embedder_code = base::StringPrintf(
- "SetSize(%d, %d);", nxt_size.width(), nxt_size.height());
- const char kEmbedderURL[] = "/browser_plugin_embedder.html";
- StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, embedder_code);
-
- // Wait for the guest to be resized to 100x200.
- test_guest()->WaitForResizeGuest(nxt_size);
-}
-
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AdvanceFocus) {
- const char kEmbedderURL[] = "/browser_plugin_focus.html";
- const char* kGuestURL = "/browser_plugin_focus_child.html";
- StartBrowserPluginTest(kEmbedderURL, kGuestURL, false, std::string());
-
- SimulateMouseClick(test_embedder()->web_contents(), 0,
- blink::WebMouseEvent::ButtonLeft);
- BrowserPluginHostTest::SimulateTabKeyPress(test_embedder()->web_contents());
- // Wait until we focus into the guest.
- test_guest()->WaitForFocus();
-
- // TODO(fsamuel): A third Tab key press should not be necessary.
- // The browser plugin will take keyboard focus but it will not
- // focus an initial element. The initial element is dependent
- // upon tab direction which WebKit does not propagate to the plugin.
- // See http://crbug.com/147644.
- BrowserPluginHostTest::SimulateTabKeyPress(test_embedder()->web_contents());
- BrowserPluginHostTest::SimulateTabKeyPress(test_embedder()->web_contents());
- BrowserPluginHostTest::SimulateTabKeyPress(test_embedder()->web_contents());
- test_guest()->WaitForAdvanceFocus();
-}
-
// This test opens a page in http and then opens another page in https, forcing
// a RenderViewHost swap in the web_contents. We verify that the embedder in the
// web_contents gets cleared properly.
@@ -451,36 +296,6 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, MAYBE_EmbedderSameAfterNav) {
ASSERT_EQ(test_embedder_after_nav, test_embedder());
}
-// Verifies that installing/uninstalling touch-event handlers in the guest
-// plugin correctly updates the touch-event handling state in the embedder.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AcceptTouchEvents) {
- const char kEmbedderURL[] = "/browser_plugin_embedder.html";
- StartBrowserPluginTest(
- kEmbedderURL, kHTMLForGuestTouchHandler, true, std::string());
-
- RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
- test_embedder()->web_contents()->GetRenderViewHost());
- // The embedder should not have any touch event handlers at this point.
- EXPECT_FALSE(rvh->has_touch_handler());
-
- // Install the touch handler in the guest. This should cause the embedder to
- // start listening for touch events too.
- MessageObserver observer(test_embedder()->web_contents(),
- ViewHostMsg_HasTouchEventHandlers::ID);
- ExecuteSyncJSFunction(test_guest()->web_contents()->GetMainFrame(),
- "InstallTouchHandler();");
- observer.WaitUntilMessageReceived();
- EXPECT_TRUE(rvh->has_touch_handler());
-
- // Uninstalling the touch-handler in guest should cause the embedder to stop
- // listening for touch events.
- observer.ResetState();
- ExecuteSyncJSFunction(test_guest()->web_contents()->GetMainFrame(),
- "UninstallTouchHandler();");
- observer.WaitUntilMessageReceived();
- EXPECT_FALSE(rvh->has_touch_handler());
-}
-
// This tests verifies that reloading the embedder does not crash the browser
// and that the guest is reset.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, DISABLED_ReloadEmbedder) {
@@ -586,127 +401,6 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, MAYBE_AcceptDragEvents) {
EXPECT_EQ(expected_title, actual_title);
}
-// This test verifies that round trip postMessage works as expected.
-// 1. The embedder posts a message 'testing123' to the guest.
-// 2. The guest receives and replies to the message using the event object's
-// source object: event.source.postMessage('foobar', '*')
-// 3. The embedder receives the message and uses the event's source
-// object to do one final reply: 'stop'
-// 4. The guest receives the final 'stop' message.
-// 5. The guest acks the 'stop' message with a 'stop_ack' message.
-// 6. The embedder changes its title to 'main guest' when it sees the 'stop_ack'
-// message.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, PostMessage) {
- const char* kTesting = "testing123";
- const char* kEmbedderURL = "/browser_plugin_embedder.html";
- const char* kGuestURL = "/browser_plugin_post_message_guest.html";
- StartBrowserPluginTest(kEmbedderURL, kGuestURL, false, std::string());
- RenderFrameHost* rfh = test_embedder()->web_contents()->GetMainFrame();
- {
- const base::string16 expected_title = ASCIIToUTF16("main guest");
- content::TitleWatcher title_watcher(test_embedder()->web_contents(),
- expected_title);
-
- // By the time we get here 'contentWindow' should be ready because the
- // guest has completed loading.
- ExecuteSyncJSFunction(
- rfh, base::StringPrintf("PostMessage('%s, false');", kTesting));
-
- // The title will be updated to "main guest" at the last stage of the
- // process described above.
- base::string16 actual_title = title_watcher.WaitAndGetTitle();
- EXPECT_EQ(expected_title, actual_title);
- }
-}
-
-// This is the same as BrowserPluginHostTest.PostMessage but also
-// posts a message to an iframe.
-// TODO(fsamuel): This test should replace the previous test once postMessage
-// iframe targeting is fixed (see http://crbug.com/153701).
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, DISABLED_PostMessageToIFrame) {
- const char* kTesting = "testing123";
- const char* kEmbedderURL = "/browser_plugin_embedder.html";
- const char* kGuestURL = "/browser_plugin_post_message_guest.html";
- StartBrowserPluginTest(kEmbedderURL, kGuestURL, false, std::string());
- RenderFrameHost* rfh = test_embedder()->web_contents()->GetMainFrame();
- {
- const base::string16 expected_title = ASCIIToUTF16("main guest");
- content::TitleWatcher title_watcher(test_embedder()->web_contents(),
- expected_title);
-
- ExecuteSyncJSFunction(
- rfh, base::StringPrintf("PostMessage('%s, false');", kTesting));
-
- // The title will be updated to "main guest" at the last stage of the
- // process described above.
- base::string16 actual_title = title_watcher.WaitAndGetTitle();
- EXPECT_EQ(expected_title, actual_title);
- }
- {
- content::TitleWatcher ready_watcher(test_embedder()->web_contents(),
- ASCIIToUTF16("ready"));
-
- RenderFrameHost* guest_rfh =
- test_guest()->web_contents()->GetMainFrame();
- GURL test_url = embedded_test_server()->GetURL(
- "/browser_plugin_post_message_guest.html");
- ExecuteSyncJSFunction(
- guest_rfh,
- base::StringPrintf(
- "CreateChildFrame('%s');", test_url.spec().c_str()));
-
- base::string16 actual_title = ready_watcher.WaitAndGetTitle();
- EXPECT_EQ(ASCIIToUTF16("ready"), actual_title);
-
- content::TitleWatcher iframe_watcher(test_embedder()->web_contents(),
- ASCIIToUTF16("iframe"));
- ExecuteSyncJSFunction(
- rfh, base::StringPrintf("PostMessage('%s', true);", kTesting));
-
- // The title will be updated to "iframe" at the last stage of the
- // process described above.
- actual_title = iframe_watcher.WaitAndGetTitle();
- EXPECT_EQ(ASCIIToUTF16("iframe"), actual_title);
- }
-}
-
-// This test verifies that if a browser plugin is hidden before navigation,
-// the guest starts off hidden.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, HiddenBeforeNavigation) {
- const char* kEmbedderURL = "/browser_plugin_embedder.html";
- const std::string embedder_code =
- "document.getElementById('plugin').style.visibility = 'hidden'";
- StartBrowserPluginTest(
- kEmbedderURL, kHTMLForGuest, true, embedder_code);
- EXPECT_FALSE(test_guest()->visible());
-}
-
-// This test verifies that if a browser plugin is focused before navigation then
-// the guest starts off focused.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, FocusBeforeNavigation) {
- const char* kEmbedderURL = "/browser_plugin_embedder.html";
- const std::string embedder_code =
- "document.getElementById('plugin').focus();";
- StartBrowserPluginTest(
- kEmbedderURL, kHTMLForGuest, true, embedder_code);
- RenderFrameHost* guest_rfh = test_guest()->web_contents()->GetMainFrame();
- // Verify that the guest is focused.
- scoped_ptr<base::Value> value =
- content::ExecuteScriptAndGetValue(guest_rfh, "document.hasFocus()");
- bool result = false;
- ASSERT_TRUE(value->GetAsBoolean(&result));
- EXPECT_TRUE(result);
-}
-
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, FocusTracksEmbedder) {
- const char* kEmbedderURL = "/browser_plugin_embedder.html";
- StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, std::string());
- // Blur the embedder.
- test_embedder()->web_contents()->GetRenderViewHost()->Blur();
- // Ensure that the guest is also blurred.
- test_guest()->WaitForBlur();
-}
-
// This test verifies that if IME is enabled in the embedder, it is also enabled
// in the guest.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, VerifyInputMethodActive) {
@@ -717,160 +411,6 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, VerifyInputMethodActive) {
EXPECT_TRUE(rvh->input_method_active());
}
-// Verify that navigating to an invalid URL (e.g. 'http:') doesn't cause
-// a crash.
-IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, DoNotCrashOnInvalidNavigation) {
- const char kEmbedderURL[] = "/browser_plugin_embedder.html";
- StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, std::string());
- TestBrowserPluginGuestDelegate* delegate =
- new TestBrowserPluginGuestDelegate();
- test_guest()->SetDelegate(delegate);
-
- const char kValidSchemeWithEmptyURL[] = "http:";
- ExecuteSyncJSFunction(
- test_embedder()->web_contents()->GetMainFrame(),
- base::StringPrintf("SetSrc('%s');", kValidSchemeWithEmptyURL));
- EXPECT_TRUE(delegate->load_aborted());
- EXPECT_FALSE(delegate->load_aborted_url().is_valid());
- EXPECT_EQ(kValidSchemeWithEmptyURL,
- delegate->load_aborted_url().possibly_invalid_spec());
-
- delegate->ResetStates();
-
- // Attempt a navigation to chrome-guest://abc123, which is a valid URL. But it
- // should be blocked because the scheme isn't web-safe or a pseudo-scheme.
- ExecuteSyncJSFunction(
- test_embedder()->web_contents()->GetMainFrame(),
- base::StringPrintf("SetSrc('%s://abc123');", kGuestScheme));
- EXPECT_TRUE(delegate->load_aborted());
- EXPECT_TRUE(delegate->load_aborted_url().is_valid());
-}
-
-// Tests involving the threaded compositor.
-class BrowserPluginThreadedCompositorTest : public BrowserPluginHostTest {
- public:
- BrowserPluginThreadedCompositorTest() {}
- virtual ~BrowserPluginThreadedCompositorTest() {}
-
- protected:
- virtual void SetUpCommandLine(CommandLine* cmd) OVERRIDE {
- BrowserPluginHostTest::SetUpCommandLine(cmd);
- cmd->AppendSwitch(switches::kEnableThreadedCompositing);
- }
-};
-
-class BrowserPluginThreadedCompositorPixelTest
- : public BrowserPluginThreadedCompositorTest {
- protected:
- virtual void SetUp() OVERRIDE {
- EnablePixelOutput();
- BrowserPluginThreadedCompositorTest::SetUp();
- }
-};
-
-static void CompareSkBitmaps(const SkBitmap& expected_bitmap,
- const SkBitmap& bitmap) {
- EXPECT_EQ(expected_bitmap.width(), bitmap.width());
- if (expected_bitmap.width() != bitmap.width())
- return;
- EXPECT_EQ(expected_bitmap.height(), bitmap.height());
- if (expected_bitmap.height() != bitmap.height())
- return;
- EXPECT_EQ(expected_bitmap.config(), bitmap.config());
- if (expected_bitmap.config() != bitmap.config())
- return;
-
- SkAutoLockPixels expected_bitmap_lock(expected_bitmap);
- SkAutoLockPixels bitmap_lock(bitmap);
- int fails = 0;
- const int kAllowableError = 2;
- for (int i = 0; i < bitmap.width() && fails < 10; ++i) {
- for (int j = 0; j < bitmap.height() && fails < 10; ++j) {
- SkColor expected_color = expected_bitmap.getColor(i, j);
- SkColor color = bitmap.getColor(i, j);
- int expected_alpha = SkColorGetA(expected_color);
- int alpha = SkColorGetA(color);
- int expected_red = SkColorGetR(expected_color);
- int red = SkColorGetR(color);
- int expected_green = SkColorGetG(expected_color);
- int green = SkColorGetG(color);
- int expected_blue = SkColorGetB(expected_color);
- int blue = SkColorGetB(color);
- EXPECT_NEAR(expected_alpha, alpha, kAllowableError)
- << "expected_color: " << std::hex << expected_color
- << " color: " << color
- << " Failed at " << std::dec << i << ", " << j
- << " Failure " << ++fails;
- EXPECT_NEAR(expected_red, red, kAllowableError)
- << "expected_color: " << std::hex << expected_color
- << " color: " << color
- << " Failed at " << std::dec << i << ", " << j
- << " Failure " << ++fails;
- EXPECT_NEAR(expected_green, green, kAllowableError)
- << "expected_color: " << std::hex << expected_color
- << " color: " << color
- << " Failed at " << std::dec << i << ", " << j
- << " Failure " << ++fails;
- EXPECT_NEAR(expected_blue, blue, kAllowableError)
- << "expected_color: " << std::hex << expected_color
- << " color: " << color
- << " Failed at " << std::dec << i << ", " << j
- << " Failure " << ++fails;
- }
- }
- EXPECT_LT(fails, 10);
-}
-
-static void CompareSkBitmapAndRun(const base::Closure& callback,
- const SkBitmap& expected_bitmap,
- bool *result,
- bool succeed,
- const SkBitmap& bitmap) {
- *result = succeed;
- if (succeed)
- CompareSkBitmaps(expected_bitmap, bitmap);
- callback.Run();
-}
-
-// Mac: http://crbug.com/171744
-// Aura/Ubercomp: http://crbug.com//327035
-#if defined(OS_MACOSX) || defined(USE_AURA)
-#define MAYBE_GetBackingStore DISABLED_GetBackingStore
-#else
-#define MAYBE_GetBackingStore GetBackingStore
-#endif
-IN_PROC_BROWSER_TEST_F(BrowserPluginThreadedCompositorPixelTest,
- MAYBE_GetBackingStore) {
- const char kEmbedderURL[] = "/browser_plugin_embedder.html";
- const char kHTMLForGuest[] =
- "data:text/html,<html><style>body { background-color: red; }</style>"
- "<body></body></html>";
- StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true,
- std::string("SetSize(50, 60);"));
-
- WebContentsImpl* guest_contents = test_guest()->web_contents();
- RenderWidgetHostImpl* guest_widget_host =
- RenderWidgetHostImpl::From(guest_contents->GetRenderViewHost());
-
- SkBitmap expected_bitmap;
- expected_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 50, 60);
- expected_bitmap.allocPixels();
- expected_bitmap.eraseARGB(255, 255, 0, 0); // #f00
- bool result = false;
- while (!result) {
- base::RunLoop loop;
- guest_widget_host->CopyFromBackingStore(
- gfx::Rect(),
- guest_widget_host->GetView()->GetViewBounds().size(),
- base::Bind(&CompareSkBitmapAndRun,
- loop.QuitClosure(),
- expected_bitmap,
- &result),
- SkBitmap::kARGB_8888_Config);
- loop.Run();
- }
-}
-
// This test exercises the following scenario:
// 1. An <input> in guest has focus.
// 2. User takes focus to embedder by clicking e.g. an <input> in embedder.
diff --git a/content/browser/browser_plugin/browser_plugin_host_factory.h b/content/browser/browser_plugin/browser_plugin_host_factory.h
index b3471006a8..e368fd4eff 100644
--- a/content/browser/browser_plugin/browser_plugin_host_factory.h
+++ b/content/browser/browser_plugin/browser_plugin_host_factory.h
@@ -23,9 +23,6 @@ class WebContentsImpl;
// Factory to create BrowserPlugin embedder and guest.
class CONTENT_EXPORT BrowserPluginHostFactory {
public:
- virtual BrowserPluginGuestManager* CreateBrowserPluginGuestManager(
- BrowserContext* context) = 0;
-
virtual BrowserPluginGuest* CreateBrowserPluginGuest(
int instance_id,
WebContentsImpl* web_contents) = 0;
diff --git a/content/browser/browser_plugin/browser_plugin_message_filter.cc b/content/browser/browser_plugin/browser_plugin_message_filter.cc
index 512f8a7df8..e82fb7a031 100644
--- a/content/browser/browser_plugin/browser_plugin_message_filter.cc
+++ b/content/browser/browser_plugin/browser_plugin_message_filter.cc
@@ -6,7 +6,6 @@
#include "base/supports_user_data.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/browser_plugin/browser_plugin_constants.h"
@@ -14,16 +13,15 @@
#include "content/common/gpu/gpu_messages.h"
#include "content/common/view_messages.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_view_host.h"
namespace content {
-BrowserPluginMessageFilter::BrowserPluginMessageFilter(int render_process_id,
- bool is_guest)
+BrowserPluginMessageFilter::BrowserPluginMessageFilter(int render_process_id)
: BrowserMessageFilter(BrowserPluginMsgStart),
- render_process_id_(render_process_id),
- is_guest_(is_guest) {
+ render_process_id_(render_process_id) {
}
BrowserPluginMessageFilter::~BrowserPluginMessageFilter() {
@@ -31,15 +29,11 @@ BrowserPluginMessageFilter::~BrowserPluginMessageFilter() {
}
bool BrowserPluginMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
// Any message requested by a BrowserPluginGuest should be routed through
// a BrowserPluginGuestManager.
if (BrowserPluginGuest::ShouldForwardToBrowserPluginGuest(message)) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- BrowserPluginGuestManager* guest_manager = GetBrowserPluginGuestManager();
- if (guest_manager)
- guest_manager->OnMessageReceived(message, render_process_id_);
+ ForwardMessageToGuest(message);
// We always swallow messages destined for BrowserPluginGuestManager because
// we're on the UI thread and fallback code is expected to be run on the IO
// thread.
@@ -65,18 +59,33 @@ void BrowserPluginMessageFilter::OverrideThreadForMessage(
*thread = BrowserThread::UI;
}
-BrowserPluginGuestManager*
- BrowserPluginMessageFilter::GetBrowserPluginGuestManager() {
+static void BrowserPluginGuestMessageCallback(const IPC::Message& message,
+ WebContents* guest_web_contents) {
+ if (!guest_web_contents)
+ return;
+ static_cast<WebContentsImpl*>(guest_web_contents)->GetBrowserPluginGuest()->
+ OnMessageReceivedFromEmbedder(message);
+}
+
+void BrowserPluginMessageFilter::ForwardMessageToGuest(
+ const IPC::Message& message) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>(
RenderProcessHost::FromID(render_process_id_));
if (!host)
- return NULL;
+ return;
- BrowserContext* browser_context = host->GetBrowserContext();
- return static_cast<BrowserPluginGuestManager*>(
- browser_context->GetUserData(
- browser_plugin::kBrowserPluginGuestManagerKeyName));
+ int instance_id = 0;
+ // All allowed messages must have instance_id as their first parameter.
+ PickleIterator iter(message);
+ bool success = iter.ReadInt(&instance_id);
+ DCHECK(success);
+ host->GetBrowserContext()->GetGuestManager()->
+ MaybeGetGuestByInstanceIDOrKill(
+ instance_id,
+ render_process_id_,
+ base::Bind(&BrowserPluginGuestMessageCallback,
+ message));
}
void BrowserPluginMessageFilter::OnSwapBuffersACK(
diff --git a/content/browser/browser_plugin/browser_plugin_message_filter.h b/content/browser/browser_plugin/browser_plugin_message_filter.h
index 778b3b4824..136c6cc58e 100644
--- a/content/browser/browser_plugin/browser_plugin_message_filter.h
+++ b/content/browser/browser_plugin/browser_plugin_message_filter.h
@@ -12,20 +12,18 @@ struct FrameHostMsg_BuffersSwappedACK_Params;
namespace content {
class BrowserContext;
-class BrowserPluginGuestManager;
// This class filters out incoming IPC messages for the guest renderer process
// on the IPC thread before other message filters handle them.
class BrowserPluginMessageFilter : public BrowserMessageFilter {
public:
- BrowserPluginMessageFilter(int render_process_id, bool is_guest);
+ BrowserPluginMessageFilter(int render_process_id);
// BrowserMessageFilter implementation.
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
private:
@@ -34,12 +32,11 @@ class BrowserPluginMessageFilter : public BrowserMessageFilter {
virtual ~BrowserPluginMessageFilter();
- BrowserPluginGuestManager* GetBrowserPluginGuestManager();
+ void ForwardMessageToGuest(const IPC::Message& message);
void OnSwapBuffersACK(const FrameHostMsg_BuffersSwappedACK_Params& params);
int render_process_id_;
- int is_guest_;
DISALLOW_COPY_AND_ASSIGN(BrowserPluginMessageFilter);
};
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest.cc b/content/browser/browser_plugin/test_browser_plugin_guest.cc
index ea51e91322..f4b124c9cd 100644
--- a/content/browser/browser_plugin/test_browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/test_browser_plugin_guest.cc
@@ -4,7 +4,6 @@
#include "content/browser/browser_plugin/test_browser_plugin_guest.h"
-#include "base/test/test_timeouts.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/browser_plugin/browser_plugin_messages.h"
@@ -18,10 +17,6 @@ TestBrowserPluginGuest::TestBrowserPluginGuest(
WebContentsImpl* web_contents)
: BrowserPluginGuest(instance_id, false, web_contents),
update_rect_count_(0),
- exit_observed_(false),
- focus_observed_(false),
- blur_observed_(false),
- advance_focus_observed_(false),
input_observed_(false),
load_stop_observed_(false),
ime_cancel_observed_(false) {
@@ -37,15 +32,9 @@ WebContentsImpl* TestBrowserPluginGuest::web_contents() const {
void TestBrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) {
if (msg->type() == BrowserPluginMsg_UpdateRect::ID) {
update_rect_count_++;
- int instance_id = 0;
- BrowserPluginMsg_UpdateRect_Params params;
- BrowserPluginMsg_UpdateRect::Read(msg, &instance_id, &params);
- last_view_size_observed_ = params.view_size;
- if (!expected_auto_view_size_.IsEmpty() &&
- expected_auto_view_size_ == params.view_size) {
- if (auto_view_size_message_loop_runner_)
- auto_view_size_message_loop_runner_->Quit();
- }
+ BrowserPluginMsg_UpdateRect::Param param;
+ BrowserPluginMsg_UpdateRect::Read(msg, &param);
+ BrowserPluginMsg_UpdateRect_Params params = param.b;
if (send_message_loop_runner_)
send_message_loop_runner_->Quit();
}
@@ -60,20 +49,6 @@ void TestBrowserPluginGuest::WaitForUpdateRectMsg() {
send_message_loop_runner_->Run();
}
-void TestBrowserPluginGuest::ResetUpdateRectCount() {
- update_rect_count_ = 0;
-}
-
-void TestBrowserPluginGuest::RenderProcessGone(base::TerminationStatus status) {
- exit_observed_ = true;
- if (status != base::TERMINATION_STATUS_NORMAL_TERMINATION &&
- status != base::TERMINATION_STATUS_STILL_RUNNING)
- VLOG(0) << "Guest crashed status: " << status;
- if (crash_message_loop_runner_)
- crash_message_loop_runner_->Quit();
- BrowserPluginGuest::RenderProcessGone(status);
-}
-
void TestBrowserPluginGuest::OnHandleInputEvent(
int instance_id,
const gfx::Rect& guest_window_rect,
@@ -86,42 +61,6 @@ void TestBrowserPluginGuest::OnHandleInputEvent(
input_message_loop_runner_->Quit();
}
-void TestBrowserPluginGuest::WaitForExit() {
- // Check if we already observed a guest crash, return immediately if so.
- if (exit_observed_)
- return;
-
- crash_message_loop_runner_ = new MessageLoopRunner();
- crash_message_loop_runner_->Run();
-}
-
-void TestBrowserPluginGuest::WaitForFocus() {
- if (focus_observed_) {
- focus_observed_ = false;
- return;
- }
- focus_message_loop_runner_ = new MessageLoopRunner();
- focus_message_loop_runner_->Run();
- focus_observed_ = false;
-}
-
-void TestBrowserPluginGuest::WaitForBlur() {
- if (blur_observed_) {
- blur_observed_ = false;
- return;
- }
- blur_message_loop_runner_ = new MessageLoopRunner();
- blur_message_loop_runner_->Run();
- blur_observed_ = false;
-}
-
-void TestBrowserPluginGuest::WaitForAdvanceFocus() {
- if (advance_focus_observed_)
- return;
- advance_focus_message_loop_runner_ = new MessageLoopRunner();
- advance_focus_message_loop_runner_->Run();
-}
-
void TestBrowserPluginGuest::WaitForInput() {
if (input_observed_) {
input_observed_ = false;
@@ -144,18 +83,6 @@ void TestBrowserPluginGuest::WaitForLoadStop() {
load_stop_observed_ = false;
}
-void TestBrowserPluginGuest::WaitForViewSize(const gfx::Size& view_size) {
- if (last_view_size_observed_ == view_size) {
- last_view_size_observed_ = gfx::Size();
- return;
- }
-
- expected_auto_view_size_ = view_size;
- auto_view_size_message_loop_runner_ = new MessageLoopRunner();
- auto_view_size_message_loop_runner_->Run();
- last_view_size_observed_ = gfx::Size();
-}
-
void TestBrowserPluginGuest::WaitForImeCancel() {
if (ime_cancel_observed_) {
ime_cancel_observed_ = false;
@@ -167,38 +94,6 @@ void TestBrowserPluginGuest::WaitForImeCancel() {
ime_cancel_observed_ = false;
}
-void TestBrowserPluginGuest::WaitForResizeGuest(const gfx::Size& view_size) {
- if (last_size_observed_in_resize_ == view_size) {
- last_size_observed_in_resize_ = gfx::Size();
- return;
- }
-
- expected_view_size_in_resize_ = view_size;
- resize_guest_message_loop_runner_ = new MessageLoopRunner();
- resize_guest_message_loop_runner_->Run();
- last_size_observed_in_resize_ = gfx::Size();
-}
-
-void TestBrowserPluginGuest::OnSetFocus(int instance_id, bool focused) {
- if (focused) {
- focus_observed_ = true;
- if (focus_message_loop_runner_)
- focus_message_loop_runner_->Quit();
- } else {
- blur_observed_ = true;
- if (blur_message_loop_runner_)
- blur_message_loop_runner_->Quit();
- }
- BrowserPluginGuest::OnSetFocus(instance_id, focused);
-}
-
-void TestBrowserPluginGuest::OnTakeFocus(bool reverse) {
- advance_focus_observed_ = true;
- if (advance_focus_message_loop_runner_)
- advance_focus_message_loop_runner_->Quit();
- BrowserPluginGuest::OnTakeFocus(reverse);
-}
-
void TestBrowserPluginGuest::DidStopLoading(
RenderViewHost* render_view_host) {
BrowserPluginGuest::DidStopLoading(render_view_host);
@@ -216,16 +111,4 @@ void TestBrowserPluginGuest::OnImeCancelComposition() {
BrowserPluginGuest::OnImeCancelComposition();
}
-void TestBrowserPluginGuest::OnResizeGuest(
- int instance_id,
- const BrowserPluginHostMsg_ResizeGuest_Params& params) {
- last_size_observed_in_resize_ = params.view_rect.size();
- if (last_size_observed_in_resize_ == expected_view_size_in_resize_ &&
- resize_guest_message_loop_runner_) {
- resize_guest_message_loop_runner_->Quit();
- }
-
- BrowserPluginGuest::OnResizeGuest(instance_id, params);
-}
-
} // namespace content
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest.h b/content/browser/browser_plugin/test_browser_plugin_guest.h
index 9d86192bda..300a602155 100644
--- a/content/browser/browser_plugin/test_browser_plugin_guest.h
+++ b/content/browser/browser_plugin/test_browser_plugin_guest.h
@@ -27,32 +27,17 @@ class TestBrowserPluginGuest : public BrowserPluginGuest {
WebContentsImpl* web_contents() const;
// Overridden methods from BrowserPluginGuest to intercept in test objects.
- virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
virtual void OnHandleInputEvent(int instance_id,
const gfx::Rect& guest_window_rect,
const blink::WebInputEvent* event) OVERRIDE;
- virtual void OnSetFocus(int instance_id, bool focused) OVERRIDE;
- virtual void OnTakeFocus(bool reverse) OVERRIDE;
virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE;
virtual void OnImeCancelComposition() OVERRIDE;
- virtual void OnResizeGuest(
- int instance_id,
- const BrowserPluginHostMsg_ResizeGuest_Params& params) OVERRIDE;
// Test utilities to wait for a event we are interested in.
// Waits until UpdateRect message is sent from the guest, meaning it is
// ready/rendered.
void WaitForUpdateRectMsg();
- void ResetUpdateRectCount();
- // Waits for focus to reach this guest.
- void WaitForFocus();
// Waits for blur to reach this guest.
- void WaitForBlur();
- // Waits for focus to move out of this guest.
- void WaitForAdvanceFocus();
- // Waits until guest exits.
- void WaitForExit();
- // Waits until input is observed.
void WaitForInput();
// Waits until 'loadstop' is observed.
void WaitForLoadStop();
@@ -60,12 +45,6 @@ class TestBrowserPluginGuest : public BrowserPluginGuest {
void WaitForViewSize(const gfx::Size& view_size);
// Waits until IME cancellation is observed.
void WaitForImeCancel();
- // Waits until we have seen a resize guest of size |view_size|.
- void WaitForResizeGuest(const gfx::Size& view_size);
-
- void set_guest_hang_timeout(const base::TimeDelta& timeout) {
- guest_hang_timeout_ = timeout;
- }
ui::TextInputType last_text_input_type() {
return last_text_input_type_;
@@ -76,28 +55,15 @@ class TestBrowserPluginGuest : public BrowserPluginGuest {
virtual void SendMessageToEmbedder(IPC::Message* msg) OVERRIDE;
int update_rect_count_;
- bool exit_observed_;
- bool focus_observed_;
- bool blur_observed_;
bool advance_focus_observed_;
bool input_observed_;
bool load_stop_observed_;
bool ime_cancel_observed_;
- gfx::Size last_view_size_observed_;
- gfx::Size expected_auto_view_size_;
- gfx::Size last_size_observed_in_resize_;
- gfx::Size expected_view_size_in_resize_;
scoped_refptr<MessageLoopRunner> send_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> crash_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> focus_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> blur_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> advance_focus_message_loop_runner_;
scoped_refptr<MessageLoopRunner> input_message_loop_runner_;
scoped_refptr<MessageLoopRunner> load_stop_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> auto_view_size_message_loop_runner_;
scoped_refptr<MessageLoopRunner> ime_cancel_message_loop_runner_;
- scoped_refptr<MessageLoopRunner> resize_guest_message_loop_runner_;
DISALLOW_COPY_AND_ASSIGN(TestBrowserPluginGuest);
};
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
index ec3c0d61c3..41aa7fed44 100644
--- a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
+++ b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.cc
@@ -1,64 +1,93 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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 "content/browser/browser_plugin/test_browser_plugin_guest_delegate.h"
+#include "content/browser/browser_plugin/browser_plugin_guest.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/common/referrer.h"
+
namespace content {
-TestBrowserPluginGuestDelegate::TestBrowserPluginGuestDelegate()
- : load_aborted_(false) {
-}
+// This observer ensures that the TestBrowserPluginGuestDelegate destroys itself
+// when its embedder goes away.
+class TestBrowserPluginGuestDelegate::EmbedderWebContentsObserver :
+ public WebContentsObserver {
+ public:
+ explicit EmbedderWebContentsObserver(TestBrowserPluginGuestDelegate* guest)
+ : WebContentsObserver(guest->GetEmbedderWebContents()),
+ guest_(guest) {
+ }
-TestBrowserPluginGuestDelegate::~TestBrowserPluginGuestDelegate() {
-}
+ virtual ~EmbedderWebContentsObserver() {
+ }
-void TestBrowserPluginGuestDelegate::ResetStates() {
- load_aborted_ = false;
- load_aborted_url_ = GURL();
-}
+ // WebContentsObserver implementation.
+ virtual void WebContentsDestroyed() OVERRIDE {
+ guest_->Destroy();
+ }
-void TestBrowserPluginGuestDelegate::AddMessageToConsole(
- int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id) {
+ private:
+ TestBrowserPluginGuestDelegate* guest_;
+
+ DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver);
+};
+
+TestBrowserPluginGuestDelegate::TestBrowserPluginGuestDelegate(
+ BrowserPluginGuest* guest) :
+ WebContentsObserver(guest->GetWebContents()),
+ guest_(guest) {
}
-void TestBrowserPluginGuestDelegate::Close() {
+TestBrowserPluginGuestDelegate::~TestBrowserPluginGuestDelegate() {
}
-void TestBrowserPluginGuestDelegate::GuestProcessGone(
- base::TerminationStatus status) {
+WebContents* TestBrowserPluginGuestDelegate::GetEmbedderWebContents() const {
+ return guest_->embedder_web_contents();
}
-bool TestBrowserPluginGuestDelegate::HandleKeyboardEvent(
- const NativeWebKeyboardEvent& event) {
- return BrowserPluginGuestDelegate::HandleKeyboardEvent(event);
+void TestBrowserPluginGuestDelegate::LoadURLWithParams(
+ const GURL& url,
+ const Referrer& referrer,
+ PageTransition transition_type,
+ WebContents* web_contents) {
+ NavigationController::LoadURLParams load_url_params(url);
+ load_url_params.referrer = referrer;
+ load_url_params.transition_type = transition_type;
+ load_url_params.extra_headers = std::string();
+ web_contents->GetController().LoadURLWithParams(load_url_params);
}
-void TestBrowserPluginGuestDelegate::LoadAbort(bool is_top_level,
- const GURL& url,
- const std::string& error_type) {
- load_aborted_ = true;
- load_aborted_url_ = url;
+void TestBrowserPluginGuestDelegate::WebContentsDestroyed() {
+ delete this;
}
-void TestBrowserPluginGuestDelegate::RendererResponsive() {
+void TestBrowserPluginGuestDelegate::DidAttach() {
+ embedder_web_contents_observer_.reset(
+ new EmbedderWebContentsObserver(this));
+
}
-void TestBrowserPluginGuestDelegate::RendererUnresponsive() {
+void TestBrowserPluginGuestDelegate::Destroy() {
+ if (!destruction_callback_.is_null())
+ destruction_callback_.Run();
+ delete guest_->GetWebContents();
}
-void TestBrowserPluginGuestDelegate::RequestPermission(
- BrowserPluginPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default) {
+void TestBrowserPluginGuestDelegate::NavigateGuest(const std::string& src) {
+ GURL url(src);
+ LoadURLWithParams(url,
+ Referrer(),
+ PAGE_TRANSITION_AUTO_TOPLEVEL,
+ guest_->GetWebContents());
}
-void TestBrowserPluginGuestDelegate::SizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) {
+void TestBrowserPluginGuestDelegate::RegisterDestructionCallback(
+ const DestructionCallback& callback) {
+ destruction_callback_ = callback;
}
+
} // namespace content
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.h b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.h
index 5839f014de..594f768cbf 100644
--- a/content/browser/browser_plugin/test_browser_plugin_guest_delegate.h
+++ b/content/browser/browser_plugin/test_browser_plugin_guest_delegate.h
@@ -1,4 +1,4 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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.
@@ -7,43 +7,46 @@
#include "content/public/browser/browser_plugin_guest_delegate.h"
+#include "base/callback.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/common/page_transition_types.h"
+#include "url/gurl.h"
+
namespace content {
-class TestBrowserPluginGuestDelegate : public BrowserPluginGuestDelegate {
+class BrowserPluginGuest;
+struct Referrer;
+
+class TestBrowserPluginGuestDelegate : public BrowserPluginGuestDelegate,
+ public WebContentsObserver {
public:
- TestBrowserPluginGuestDelegate();
+ explicit TestBrowserPluginGuestDelegate(BrowserPluginGuest* guest);
virtual ~TestBrowserPluginGuestDelegate();
- void ResetStates();
-
- bool load_aborted() const { return load_aborted_; }
- const GURL& load_aborted_url() const { return load_aborted_url_; }
+ WebContents* GetEmbedderWebContents() const;
private:
+ class EmbedderWebContentsObserver;
+
+ void LoadURLWithParams(const GURL& url,
+ const Referrer& referrer,
+ PageTransition transition_type,
+ WebContents* web_contents);
+
+ // WebContentsObserver implementation.
+ virtual void WebContentsDestroyed() OVERRIDE;
+
// Overridden from BrowserPluginGuestDelegate:
- virtual void AddMessageToConsole(int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id) OVERRIDE;
- virtual void Close() OVERRIDE;
- virtual void GuestProcessGone(base::TerminationStatus status) OVERRIDE;
- virtual bool HandleKeyboardEvent(
- const NativeWebKeyboardEvent& event) OVERRIDE;
- virtual void LoadAbort(bool is_top_level,
- const GURL& url,
- const std::string& error_type) OVERRIDE;
- virtual void RendererResponsive() OVERRIDE;
- virtual void RendererUnresponsive() OVERRIDE;
- virtual void RequestPermission(
- BrowserPluginPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default) OVERRIDE;
- virtual void SizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) OVERRIDE;
-
- bool load_aborted_;
- GURL load_aborted_url_;
+ virtual void DidAttach() OVERRIDE;
+ virtual void Destroy() OVERRIDE;
+ virtual void NavigateGuest(const std::string& src) OVERRIDE;
+ virtual void RegisterDestructionCallback(
+ const DestructionCallback& callback) OVERRIDE;
+
+ BrowserPluginGuest* guest_;
+ scoped_ptr<EmbedderWebContentsObserver> embedder_web_contents_observer_;
+
+ DestructionCallback destruction_callback_;
DISALLOW_COPY_AND_ASSIGN(TestBrowserPluginGuestDelegate);
};
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest_manager.cc b/content/browser/browser_plugin/test_browser_plugin_guest_manager.cc
deleted file mode 100644
index 4060905c56..0000000000
--- a/content/browser/browser_plugin/test_browser_plugin_guest_manager.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/browser_plugin/test_browser_plugin_guest_manager.h"
-
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/public/test/test_utils.h"
-
-namespace content {
-
-TestBrowserPluginGuestManager::TestBrowserPluginGuestManager(
- BrowserContext* context)
- : BrowserPluginGuestManager(context),
- last_guest_added_(NULL) {
-}
-
-TestBrowserPluginGuestManager::~TestBrowserPluginGuestManager() {
-}
-
-void TestBrowserPluginGuestManager::AddGuest(
- int instance_id,
- WebContents* guest_web_contents) {
- BrowserPluginGuestManager::AddGuest(instance_id, guest_web_contents);
- last_guest_added_ = guest_web_contents;
- if (message_loop_runner_.get())
- message_loop_runner_->Quit();
-}
-
-WebContents* TestBrowserPluginGuestManager::WaitForGuestAdded() {
- // Check if guests were already created.
- if (last_guest_added_) {
- WebContents* last_guest_added = last_guest_added_;
- last_guest_added_ = NULL;
- return last_guest_added;
- }
- // Wait otherwise.
- message_loop_runner_ = new MessageLoopRunner();
- message_loop_runner_->Run();
- WebContents* last_guest_added = last_guest_added_;
- last_guest_added_ = NULL;
- return last_guest_added;
-}
-
-} // namespace content
diff --git a/content/browser/browser_plugin/test_browser_plugin_guest_manager.h b/content/browser/browser_plugin/test_browser_plugin_guest_manager.h
deleted file mode 100644
index 227eed4855..0000000000
--- a/content/browser/browser_plugin/test_browser_plugin_guest_manager.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_TEST_BROWSER_PLUGIN_GUEST_MANAGER_H_
-#define CONTENT_BROWSER_BROWSER_PLUGIN_TEST_BROWSER_PLUGIN_GUEST_MANAGER_H_
-
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
-#include "content/public/test/test_utils.h"
-
-FORWARD_DECLARE_TEST(BrowserPluginHostTest, ReloadEmbedder);
-
-namespace content {
-
-class WebContentsImpl;
-
-// Test class for BrowserPluginGuestManager.
-//
-// Provides utilities to wait for certain state/messages in
-// BrowserPluginGuestManager to be used in tests.
-class TestBrowserPluginGuestManager : public BrowserPluginGuestManager {
- public:
- explicit TestBrowserPluginGuestManager(BrowserContext* context);
- virtual ~TestBrowserPluginGuestManager();
-
- // Waits until at least one guest is added to the guest manager.
- WebContents* WaitForGuestAdded();
-
- private:
- // BrowserPluginHostTest.ReloadEmbedder needs access to the GuestInstanceMap.
- FRIEND_TEST_ALL_PREFIXES(BrowserPluginHostTest, ReloadEmbedder);
-
- // Overriden to intercept in test.
- virtual void AddGuest(int instance_id,
- WebContents* guest_web_contents) OVERRIDE;
-
- WebContents* last_guest_added_;
- scoped_refptr<MessageLoopRunner> message_loop_runner_;
- DISALLOW_COPY_AND_ASSIGN(TestBrowserPluginGuestManager);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_BROWSER_PLUGIN_TEST_BROWSER_PLUGIN_GUEST_MANAGER_H_
diff --git a/content/browser/browser_plugin/test_guest_manager.cc b/content/browser/browser_plugin/test_guest_manager.cc
new file mode 100644
index 0000000000..e60f842fa2
--- /dev/null
+++ b/content/browser/browser_plugin/test_guest_manager.cc
@@ -0,0 +1,183 @@
+// 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 "content/browser/browser_plugin/test_guest_manager.h"
+
+#include "base/logging.h"
+#include "base/memory/singleton.h"
+#include "base/strings/stringprintf.h"
+#include "base/values.h"
+#include "content/browser/browser_plugin/browser_plugin_guest.h"
+#include "content/browser/browser_plugin/test_browser_plugin_guest_delegate.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/site_instance.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/common/url_constants.h"
+#include "content/public/test/test_utils.h"
+#include "net/base/escape.h"
+
+namespace content {
+
+class GuestWebContentsObserver
+ : public WebContentsObserver {
+ public:
+ explicit GuestWebContentsObserver(WebContents* guest_web_contents)
+ : WebContentsObserver(guest_web_contents) {
+ BrowserPluginGuest* guest =
+ static_cast<WebContentsImpl*>(guest_web_contents)->
+ GetBrowserPluginGuest();
+ guest_instance_id_ = guest->instance_id();
+ }
+
+ virtual ~GuestWebContentsObserver() {
+ }
+
+ virtual void WebContentsDestroyed() OVERRIDE {
+ TestGuestManager::GetInstance()->RemoveGuest(guest_instance_id_);
+ delete this;
+ }
+
+ private:
+ int guest_instance_id_;
+ DISALLOW_COPY_AND_ASSIGN(GuestWebContentsObserver);
+};
+
+TestGuestManager::TestGuestManager()
+ : last_guest_added_(NULL),
+ next_instance_id_(0) {
+}
+
+TestGuestManager::~TestGuestManager() {
+}
+
+// static.
+TestGuestManager* TestGuestManager::GetInstance() {
+ return Singleton<TestGuestManager>::get();
+}
+
+WebContentsImpl* TestGuestManager::WaitForGuestAdded() {
+ // Check if guests were already created.
+ if (last_guest_added_) {
+ WebContentsImpl* last_guest_added = last_guest_added_;
+ last_guest_added_ = NULL;
+ return last_guest_added;
+ }
+ // Wait otherwise.
+ message_loop_runner_ = new MessageLoopRunner();
+ message_loop_runner_->Run();
+ WebContentsImpl* last_guest_added = last_guest_added_;
+ last_guest_added_ = NULL;
+ return last_guest_added;
+}
+
+WebContents* TestGuestManager::CreateGuest(
+ SiteInstance* embedder_site_instance,
+ int instance_id,
+ const std::string& storage_partition_id,
+ bool persist_storage,
+ scoped_ptr<base::DictionaryValue> extra_params) {
+ const GURL& embedder_site_url = embedder_site_instance->GetSiteURL();
+ const std::string& host = embedder_site_url.host();
+
+ std::string url_encoded_partition = net::EscapeQueryParamValue(
+ storage_partition_id, false);
+ GURL guest_site(base::StringPrintf("%s://%s/%s?%s",
+ kGuestScheme,
+ host.c_str(),
+ persist_storage ? "persist" : "",
+ url_encoded_partition.c_str()));
+
+ // If we already have a webview tag in the same app using the same storage
+ // partition, we should use the same SiteInstance so the existing tag and
+ // the new tag can script each other.
+ SiteInstance* guest_site_instance = GetGuestSiteInstance(guest_site);
+ if (!guest_site_instance) {
+ // Create the SiteInstance in a new BrowsingInstance, which will ensure
+ // that webview tags are also not allowed to send messages across
+ // different partitions.
+ guest_site_instance = SiteInstance::CreateForURL(
+ embedder_site_instance->GetBrowserContext(), guest_site);
+ }
+ WebContents::CreateParams create_params(
+ embedder_site_instance->GetBrowserContext(),
+ guest_site_instance);
+ create_params.guest_instance_id = instance_id;
+ create_params.guest_extra_params.reset(extra_params.release());
+ WebContentsImpl* guest_web_contents = static_cast<WebContentsImpl*>(
+ WebContents::Create(create_params));
+ BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest();
+ guest_web_contents->GetBrowserPluginGuest()->set_delegate(
+ new TestBrowserPluginGuestDelegate(guest));
+ AddGuest(instance_id, guest_web_contents);
+ return guest_web_contents;
+}
+
+int TestGuestManager::GetNextInstanceID() {
+ return ++next_instance_id_;
+}
+
+void TestGuestManager::AddGuest(
+ int guest_instance_id,
+ WebContents* guest_web_contents) {
+ DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) ==
+ guest_web_contents_by_instance_id_.end());
+ guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents;
+ new GuestWebContentsObserver(guest_web_contents);
+ last_guest_added_ = static_cast<WebContentsImpl*>(guest_web_contents);
+ if (message_loop_runner_)
+ message_loop_runner_->Quit();
+}
+
+void TestGuestManager::RemoveGuest(
+ int guest_instance_id) {
+ GuestInstanceMap::iterator it =
+ guest_web_contents_by_instance_id_.find(guest_instance_id);
+ DCHECK(it != guest_web_contents_by_instance_id_.end());
+ guest_web_contents_by_instance_id_.erase(it);
+}
+
+void TestGuestManager::MaybeGetGuestByInstanceIDOrKill(
+ int guest_instance_id,
+ int embedder_render_process_id,
+ const GuestByInstanceIDCallback& callback) {
+ GuestInstanceMap::const_iterator it =
+ guest_web_contents_by_instance_id_.find(guest_instance_id);
+ if (it == guest_web_contents_by_instance_id_.end()) {
+ callback.Run(NULL);
+ return;
+ }
+ callback.Run(it->second);
+}
+
+SiteInstance* TestGuestManager::GetGuestSiteInstance(
+ const GURL& guest_site) {
+ for (GuestInstanceMap::const_iterator it =
+ guest_web_contents_by_instance_id_.begin();
+ it != guest_web_contents_by_instance_id_.end(); ++it) {
+ if (it->second->GetSiteInstance()->GetSiteURL() == guest_site)
+ return it->second->GetSiteInstance();
+ }
+ return NULL;
+}
+
+bool TestGuestManager::ForEachGuest(
+ WebContents* embedder_web_contents,
+ const GuestCallback& callback) {
+ for (GuestInstanceMap::iterator it =
+ guest_web_contents_by_instance_id_.begin();
+ it != guest_web_contents_by_instance_id_.end(); ++it) {
+ WebContentsImpl* guest_web_contents =
+ static_cast<WebContentsImpl*>(it->second);
+ BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest();
+ if (embedder_web_contents != guest->embedder_web_contents())
+ continue;
+
+ if (callback.Run(guest_web_contents))
+ return true;
+ }
+ return false;
+}
+
+} // namespace content
diff --git a/content/browser/browser_plugin/test_guest_manager.h b/content/browser/browser_plugin/test_guest_manager.h
new file mode 100644
index 0000000000..2ae967869a
--- /dev/null
+++ b/content/browser/browser_plugin/test_guest_manager.h
@@ -0,0 +1,64 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_H_
+#define CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_H_
+
+#include <map>
+
+#include "base/memory/singleton.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
+
+namespace content {
+
+class MessageLoopRunner;
+class WebContentsImpl;
+
+// This class is temporary until BrowserPluginHostTest.* tests are entirely
+// moved out of content.
+class TestGuestManager : public BrowserPluginGuestManager {
+ public:
+ virtual ~TestGuestManager();
+
+ static TestGuestManager* GetInstance();
+
+ void AddGuest(int guest_instance_id, WebContents* guest_web_contents);
+ void RemoveGuest(int guest_instance_id);
+ SiteInstance* GetGuestSiteInstance(const GURL& guest_site);
+
+ // Waits until at least one guest is added to this guest manager.
+ WebContentsImpl* WaitForGuestAdded();
+
+ // BrowserPluginGuestManager implementation.
+ virtual WebContents* CreateGuest(
+ SiteInstance* embedder_site_instance,
+ int instance_id,
+ const std::string& storage_partition_id,
+ bool persist_storage,
+ scoped_ptr<base::DictionaryValue> extra_params) OVERRIDE;
+ virtual int GetNextInstanceID() OVERRIDE;
+ virtual void MaybeGetGuestByInstanceIDOrKill(
+ int guest_instance_id,
+ int embedder_render_process_id,
+ const GuestByInstanceIDCallback& callback) OVERRIDE;
+ virtual bool ForEachGuest(WebContents* embedder_web_contents,
+ const GuestCallback& callback) OVERRIDE;
+
+ private:
+ friend struct DefaultSingletonTraits<TestGuestManager>;
+ TestGuestManager();
+
+ // Contains guests' WebContents, mapping from their instance ids.
+ typedef std::map<int, WebContents*> GuestInstanceMap;
+ GuestInstanceMap guest_web_contents_by_instance_id_;
+ WebContentsImpl* last_guest_added_;
+ int next_instance_id_;
+ scoped_refptr<MessageLoopRunner> message_loop_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestGuestManager);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_H_
diff --git a/content/browser/browser_plugin/test_guest_manager_delegate.cc b/content/browser/browser_plugin/test_guest_manager_delegate.cc
deleted file mode 100644
index 11d3b34af6..0000000000
--- a/content/browser/browser_plugin/test_guest_manager_delegate.cc
+++ /dev/null
@@ -1,86 +0,0 @@
-// 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 "content/browser/browser_plugin/test_guest_manager_delegate.h"
-
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-#include "content/public/browser/site_instance.h"
-#include "content/public/browser/web_contents.h"
-
-namespace content {
-
-TestGuestManagerDelegate::TestGuestManagerDelegate()
- : next_instance_id_(0) {
-}
-
-TestGuestManagerDelegate::~TestGuestManagerDelegate() {
-}
-
-// static.
-TestGuestManagerDelegate* TestGuestManagerDelegate::GetInstance() {
- return Singleton<TestGuestManagerDelegate>::get();
-}
-
-int TestGuestManagerDelegate::GetNextInstanceID() {
- return ++next_instance_id_;
-}
-
-void TestGuestManagerDelegate::AddGuest(
- int guest_instance_id,
- WebContents* guest_web_contents) {
- DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) ==
- guest_web_contents_by_instance_id_.end());
- guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents;
-}
-
-void TestGuestManagerDelegate::RemoveGuest(
- int guest_instance_id) {
- GuestInstanceMap::iterator it =
- guest_web_contents_by_instance_id_.find(guest_instance_id);
- DCHECK(it != guest_web_contents_by_instance_id_.end());
- guest_web_contents_by_instance_id_.erase(it);
-}
-
-void TestGuestManagerDelegate::MaybeGetGuestByInstanceIDOrKill(
- int guest_instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) {
- GuestInstanceMap::const_iterator it =
- guest_web_contents_by_instance_id_.find(guest_instance_id);
- if (it == guest_web_contents_by_instance_id_.end()) {
- callback.Run(NULL);
- return;
- }
- callback.Run(it->second);
-}
-
-SiteInstance* TestGuestManagerDelegate::GetGuestSiteInstance(
- const GURL& guest_site) {
- for (GuestInstanceMap::const_iterator it =
- guest_web_contents_by_instance_id_.begin();
- it != guest_web_contents_by_instance_id_.end(); ++it) {
- if (it->second->GetSiteInstance()->GetSiteURL() == guest_site)
- return it->second->GetSiteInstance();
- }
- return NULL;
-}
-
-bool TestGuestManagerDelegate::ForEachGuest(
- WebContents* embedder_web_contents,
- const GuestCallback& callback) {
- for (GuestInstanceMap::iterator it =
- guest_web_contents_by_instance_id_.begin();
- it != guest_web_contents_by_instance_id_.end(); ++it) {
- WebContents* guest = it->second;
- if (embedder_web_contents != guest->GetEmbedderWebContents())
- continue;
-
- if (callback.Run(guest))
- return true;
- }
- return false;
-}
-
-} // namespace content
diff --git a/content/browser/browser_plugin/test_guest_manager_delegate.h b/content/browser/browser_plugin/test_guest_manager_delegate.h
deleted file mode 100644
index 63f281133a..0000000000
--- a/content/browser/browser_plugin/test_guest_manager_delegate.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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.
-
-#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_DELEGATE_H_
-#define CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_DELEGATE_H_
-
-#include <map>
-
-#include "base/memory/singleton.h"
-#include "content/public/browser/browser_plugin_guest_manager_delegate.h"
-
-namespace content {
-
-// This class is temporary until BrowserPluginHostTest.* tests are entirely
-// moved out of content.
-class TestGuestManagerDelegate : public BrowserPluginGuestManagerDelegate {
- public:
- virtual ~TestGuestManagerDelegate();
-
- static TestGuestManagerDelegate* GetInstance();
-
- // BrowserPluginGuestManagerDelegate implementation.
- virtual int GetNextInstanceID() OVERRIDE;
- virtual void AddGuest(int guest_instance_id,
- WebContents* guest_web_contents) OVERRIDE;
- virtual void RemoveGuest(int guest_instance_id) OVERRIDE;
- virtual void MaybeGetGuestByInstanceIDOrKill(
- int guest_instance_id,
- int embedder_render_process_id,
- const GuestByInstanceIDCallback& callback) OVERRIDE;
- virtual SiteInstance* GetGuestSiteInstance(
- const GURL& guest_site) OVERRIDE;
- virtual bool ForEachGuest(WebContents* embedder_web_contents,
- const GuestCallback& callback) OVERRIDE;
-
- private:
- friend struct DefaultSingletonTraits<TestGuestManagerDelegate>;
- TestGuestManagerDelegate();
- // Contains guests' WebContents, mapping from their instance ids.
- typedef std::map<int, WebContents*> GuestInstanceMap;
- GuestInstanceMap guest_web_contents_by_instance_id_;
-
- int next_instance_id_;
-
- DISALLOW_COPY_AND_ASSIGN(TestGuestManagerDelegate);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_BROWSER_PLUGIN_TEST_GUEST_MANAGER_DELEGATE_H_
diff --git a/content/browser/browser_url_handler_impl.cc b/content/browser/browser_url_handler_impl.cc
index 21793a17f3..e67b51750d 100644
--- a/content/browser/browser_url_handler_impl.cc
+++ b/content/browser/browser_url_handler_impl.cc
@@ -26,11 +26,11 @@ static bool HandleViewSource(GURL* url, BrowserContext* browser_context) {
static const char* const default_allowed_sub_schemes[] = {
url::kHttpScheme,
url::kHttpsScheme,
- kFtpScheme,
+ url::kFtpScheme,
kChromeDevToolsScheme,
kChromeUIScheme,
- kFileScheme,
- kFileSystemScheme
+ url::kFileScheme,
+ url::kFileSystemScheme
};
// Merge all the schemes for which view-source is allowed by default, with
diff --git a/content/browser/browsing_instance.cc b/content/browser/browsing_instance.cc
index c70f38b9da..1d5f895376 100644
--- a/content/browser/browsing_instance.cc
+++ b/content/browser/browsing_instance.cc
@@ -15,7 +15,8 @@
namespace content {
BrowsingInstance::BrowsingInstance(BrowserContext* browser_context)
- : browser_context_(browser_context) {
+ : browser_context_(browser_context),
+ active_contents_count_(0u) {
}
bool BrowsingInstance::HasSiteInstance(const GURL& url) {
@@ -84,6 +85,7 @@ BrowsingInstance::~BrowsingInstance() {
// We should only be deleted when all of the SiteInstances that refer to
// us are gone.
DCHECK(site_instance_map_.empty());
+ DCHECK_EQ(0u, active_contents_count_);
}
} // namespace content
diff --git a/content/browser/browsing_instance.h b/content/browser/browsing_instance.h
index 60aa47b19d..60518b07c4 100644
--- a/content/browser/browsing_instance.h
+++ b/content/browser/browsing_instance.h
@@ -7,6 +7,7 @@
#include "base/containers/hash_tables.h"
#include "base/lazy_instance.h"
+#include "base/logging.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_context.h"
@@ -79,6 +80,14 @@ class CONTENT_EXPORT BrowsingInstance
// BrowsingInstance.
void UnregisterSiteInstance(SiteInstance* site_instance);
+ // Tracks the number of WebContents currently in this BrowsingInstance.
+ size_t active_contents_count() const { return active_contents_count_; }
+ void increment_active_contents_count() { active_contents_count_++; }
+ void decrement_active_contents_count() {
+ DCHECK_LT(0u, active_contents_count_);
+ active_contents_count_--;
+ }
+
friend class SiteInstanceImpl;
friend class SiteInstance;
@@ -89,6 +98,7 @@ class CONTENT_EXPORT BrowsingInstance
private:
// Map of site to SiteInstance, to ensure we only have one SiteInstance per
+ // site.
typedef base::hash_map<std::string, SiteInstance*> SiteInstanceMap;
// Common browser context to which all SiteInstances in this BrowsingInstance
@@ -100,8 +110,13 @@ class CONTENT_EXPORT BrowsingInstance
// obtained with SiteInstanceImpl::GetSiteForURL. Note that this map may not
// contain every active SiteInstance, because a race exists where two
// SiteInstances can be assigned to the same site. This is ok in rare cases.
+ // It also does not contain SiteInstances which have not yet been assigned a
+ // site, such as about:blank. See NavigatorImpl::ShouldAssignSiteForURL.
SiteInstanceMap site_instance_map_;
+ // Number of WebContentses currently using this BrowsingInstance.
+ size_t active_contents_count_;
+
DISALLOW_COPY_AND_ASSIGN(BrowsingInstance);
};
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 2dddca662e..57cb7fa96f 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -176,7 +176,7 @@ class ChildProcessSecurityPolicyImpl::SecurityState {
// file:// URLs are more granular. The child may have been given
// permission to a specific file but not the file:// scheme in general.
- if (url.SchemeIs(kFileScheme)) {
+ if (url.SchemeIs(url::kFileScheme)) {
base::FilePath path;
if (net::FileURLToFilePath(url, &path))
return ContainsKey(request_file_set_, path);
@@ -310,15 +310,15 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() {
// We know about these schemes and believe them to be safe.
RegisterWebSafeScheme(url::kHttpScheme);
RegisterWebSafeScheme(url::kHttpsScheme);
- RegisterWebSafeScheme(kFtpScheme);
- RegisterWebSafeScheme(kDataScheme);
+ RegisterWebSafeScheme(url::kFtpScheme);
+ RegisterWebSafeScheme(url::kDataScheme);
RegisterWebSafeScheme("feed");
- RegisterWebSafeScheme(kBlobScheme);
- RegisterWebSafeScheme(kFileSystemScheme);
+ RegisterWebSafeScheme(url::kBlobScheme);
+ RegisterWebSafeScheme(url::kFileSystemScheme);
// We know about the following pseudo schemes and treat them specially.
RegisterPseudoScheme(kAboutScheme);
- RegisterPseudoScheme(kJavaScriptScheme);
+ RegisterPseudoScheme(url::kJavaScriptScheme);
RegisterPseudoScheme(kViewSourceScheme);
}
@@ -434,7 +434,7 @@ void ChildProcessSecurityPolicyImpl::GrantRequestURL(
void ChildProcessSecurityPolicyImpl::GrantRequestSpecificFileURL(
int child_id,
const GURL& url) {
- if (!url.SchemeIs(kFileScheme))
+ if (!url.SchemeIs(url::kFileScheme))
return;
{
@@ -558,7 +558,7 @@ void ChildProcessSecurityPolicyImpl::GrantWebUIBindings(int child_id) {
state->second->GrantScheme(kChromeUIScheme);
// Web UI pages can contain links to file:// URLs.
- state->second->GrantScheme(kFileScheme);
+ state->second->GrantScheme(url::kFileScheme);
}
void ChildProcessSecurityPolicyImpl::GrantReadRawCookies(int child_id) {
diff --git a/content/browser/child_process_security_policy_unittest.cc b/content/browser/child_process_security_policy_unittest.cc
index 78bee5bf2e..d5115ebe25 100644
--- a/content/browser/child_process_security_policy_unittest.cc
+++ b/content/browser/child_process_security_policy_unittest.cc
@@ -69,7 +69,7 @@ class ChildProcessSecurityPolicyTest : public testing::Test {
// net::URLRequest::IsHandledURL() no longer claims support for default
// protocols as this is the responsibility of the browser (which is
// responsible for adding the appropriate ProtocolHandler).
- test_browser_client_.AddScheme(kFileScheme);
+ test_browser_client_.AddScheme(url::kFileScheme);
}
virtual void TearDown() {
@@ -122,11 +122,11 @@ TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) {
EXPECT_TRUE(p->IsWebSafeScheme(url::kHttpScheme));
EXPECT_TRUE(p->IsWebSafeScheme(url::kHttpsScheme));
- EXPECT_TRUE(p->IsWebSafeScheme(kFtpScheme));
- EXPECT_TRUE(p->IsWebSafeScheme(kDataScheme));
+ EXPECT_TRUE(p->IsWebSafeScheme(url::kFtpScheme));
+ EXPECT_TRUE(p->IsWebSafeScheme(url::kDataScheme));
EXPECT_TRUE(p->IsWebSafeScheme("feed"));
- EXPECT_TRUE(p->IsWebSafeScheme(kBlobScheme));
- EXPECT_TRUE(p->IsWebSafeScheme(kFileSystemScheme));
+ EXPECT_TRUE(p->IsWebSafeScheme(url::kBlobScheme));
+ EXPECT_TRUE(p->IsWebSafeScheme(url::kFileSystemScheme));
EXPECT_FALSE(p->IsWebSafeScheme("registered-web-safe-scheme"));
p->RegisterWebSafeScheme("registered-web-safe-scheme");
@@ -140,7 +140,7 @@ TEST_F(ChildProcessSecurityPolicyTest, IsPseudoSchemeTest) {
ChildProcessSecurityPolicyImpl::GetInstance();
EXPECT_TRUE(p->IsPseudoScheme(kAboutScheme));
- EXPECT_TRUE(p->IsPseudoScheme(kJavaScriptScheme));
+ EXPECT_TRUE(p->IsPseudoScheme(url::kJavaScriptScheme));
EXPECT_TRUE(p->IsPseudoScheme(kViewSourceScheme));
EXPECT_FALSE(p->IsPseudoScheme("registered-pseudo-scheme"));
diff --git a/content/browser/compositor/browser_compositor_view_mac.h b/content/browser/compositor/browser_compositor_view_mac.h
new file mode 100644
index 0000000000..f1988c26a5
--- /dev/null
+++ b/content/browser/compositor/browser_compositor_view_mac.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_
+#define CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/scoped_nsobject.h"
+#include "cc/output/software_frame_data.h"
+#include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
+#include "content/browser/renderer_host/software_layer_mac.h"
+#include "skia/ext/platform_canvas.h"
+#include "ui/compositor/compositor.h"
+#include "ui/gfx/geometry/size.h"
+
+@class BrowserCompositorViewMac;
+
+// Additions to the NSView interface for compositor frames.
+@interface NSView (BrowserCompositorView)
+- (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle
+ withPixelSize:(gfx::Size)pixel_size
+ withScaleFactor:(float)scale_factor;
+
+- (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data
+ withScaleFactor:(float)scale_factor
+ withCanvas:(SkCanvas*)canvas;
+@end
+
+// NSView drawn by a ui::Compositor. The superview of this view is responsible
+// for changing the ui::Compositor SizeAndScale and calling layoutLayers when
+// the size of the parent view may change. This interface is patterned after
+// the needs of RenderWidgetHostViewCocoa, and could change.
+@interface BrowserCompositorViewMac : NSView {
+ scoped_ptr<ui::Compositor> compositor_;
+ base::scoped_nsobject<CALayer> background_layer_;
+ base::scoped_nsobject<CompositingIOSurfaceLayer> accelerated_layer_;
+ base::scoped_nsobject<SoftwareLayer> software_layer_;
+}
+
+// Initialize to render the content of a specific superview.
+- (id)initWithSuperview:(NSView*)view;
+
+// Re-position the layers to the correct place when this view's superview
+// changes size, or when the accelerated or software content changes.
+- (void)layoutLayers;
+
+// Access the underlying ui::Compositor for this view.
+- (ui::Compositor*)compositor;
+@end
+
+#endif // CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_VIEW_MAC_H_
diff --git a/content/browser/compositor/browser_compositor_view_mac.mm b/content/browser/compositor/browser_compositor_view_mac.mm
new file mode 100644
index 0000000000..5ebeddd077
--- /dev/null
+++ b/content/browser/compositor/browser_compositor_view_mac.mm
@@ -0,0 +1,174 @@
+// 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 "content/browser/compositor/browser_compositor_view_mac.h"
+
+#include "base/debug/trace_event.h"
+#include "base/mac/scoped_cftyperef.h"
+#include "content/browser/renderer_host/compositing_iosurface_context_mac.h"
+#include "content/browser/renderer_host/compositing_iosurface_mac.h"
+#include "content/browser/renderer_host/software_layer_mac.h"
+#include "ui/base/cocoa/animation_utils.h"
+#include "ui/gl/scoped_cgl.h"
+
+// The default implementation of additions to the NSView interface for browser
+// compositing should never be called. Log an error if they are.
+@implementation NSView (BrowserCompositorView)
+
+- (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle
+ withPixelSize:(gfx::Size)pixel_size
+ withScaleFactor:(float)scale_factor {
+ DLOG(ERROR) << "-[NSView gotAcceleratedIOSurfaceFrame] called on "
+ << "non-overriden class.";
+}
+
+- (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data
+ withScaleFactor:(float)scale_factor
+ withCanvas:(SkCanvas*)canvas {
+ DLOG(ERROR) << "-[NSView gotSoftwareFrame] called on non-overridden class.";
+}
+
+@end // NSView (BrowserCompositorView)
+
+@implementation BrowserCompositorViewMac : NSView
+
+- (id)initWithSuperview:(NSView*)view {
+ if (self = [super init]) {
+ // Disable the fade-in animation as the layer and view are added.
+ ScopedCAActionDisabler disabler;
+
+ // Make this view host a transparent layer.
+ background_layer_.reset([[CALayer alloc] init]);
+ [background_layer_ setContentsGravity:kCAGravityTopLeft];
+ [self setLayer:background_layer_];
+ [self setWantsLayer:YES];
+
+ compositor_.reset(new ui::Compositor(self));
+ [view addSubview:self];
+ }
+ return self;
+}
+
+// This function closely mirrors RenderWidgetHostViewMac::LayoutLayers. When
+// only delegated rendering is supported, only one copy of this code will
+// need to exist.
+- (void)layoutLayers {
+ // Disable animation of the layers' resizing or repositioning.
+ ScopedCAActionDisabler disabler;
+
+ NSSize superview_frame_size = [[self superview] frame].size;
+ [self setFrame:NSMakeRect(
+ 0, 0, superview_frame_size.width, superview_frame_size.height)];
+
+ CGRect new_background_frame = CGRectMake(
+ 0,
+ 0,
+ superview_frame_size.width,
+ superview_frame_size.height);
+ [background_layer_ setFrame:new_background_frame];
+
+ // The bounds of the accelerated layer determine the size of the GL surface
+ // that will be drawn to. Make sure that this is big enough to draw the
+ // IOSurface.
+ if (accelerated_layer_) {
+ CGRect layer_bounds = CGRectMake(
+ 0,
+ 0,
+ [accelerated_layer_ iosurface]->dip_io_surface_size().width(),
+ [accelerated_layer_ iosurface]->dip_io_surface_size().height());
+ CGPoint layer_position = CGPointMake(
+ 0,
+ CGRectGetHeight(new_background_frame) - CGRectGetHeight(layer_bounds));
+ bool bounds_changed = !CGRectEqualToRect(
+ layer_bounds, [accelerated_layer_ bounds]);
+ [accelerated_layer_ setBounds:layer_bounds];
+ [accelerated_layer_ setPosition:layer_position];
+ if (bounds_changed) {
+ [accelerated_layer_ setNeedsDisplay];
+ [accelerated_layer_ displayIfNeeded];
+ }
+ }
+
+ // The content area of the software layer is the size of the image provided.
+ // Make the bounds of the layer match the superview's bounds, to ensure that
+ // the visible contents are drawn.
+ [software_layer_ setBounds:new_background_frame];
+}
+
+- (ui::Compositor*)compositor {
+ return compositor_.get();
+}
+
+- (void)gotAcceleratedIOSurfaceFrame:(uint64)surface_handle
+ withPixelSize:(gfx::Size)pixel_size
+ withScaleFactor:(float)scale_factor {
+ ScopedCAActionDisabler disabler;
+
+ // If there is not a layer for accelerated frames, create one.
+ if (!accelerated_layer_) {
+ // Disable the fade-in animation as the layer is added.
+ ScopedCAActionDisabler disabler;
+ scoped_refptr<content::CompositingIOSurfaceMac> iosurface =
+ content::CompositingIOSurfaceMac::Create();
+ accelerated_layer_.reset([[CompositingIOSurfaceLayer alloc]
+ initWithIOSurface:iosurface
+ withClient:NULL]);
+ [[self layer] addSublayer:accelerated_layer_];
+ }
+
+ {
+ bool result = true;
+ gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
+ [accelerated_layer_ context]->cgl_context());
+ result = [accelerated_layer_ iosurface]->SetIOSurfaceWithContextCurrent(
+ [accelerated_layer_ context], surface_handle, pixel_size, scale_factor);
+ // TODO(ccameron): On failure, poison the GL context, tear down the layers,
+ // and request a new frame.
+ ignore_result(result);
+ }
+ [accelerated_layer_ gotNewFrame];
+ [self layoutLayers];
+
+ // If there was a software layer, remove it.
+ if (software_layer_) {
+ // Disable the fade-out animation as the layer is removed.
+ ScopedCAActionDisabler disabler;
+ [software_layer_ removeFromSuperlayer];
+ software_layer_.reset();
+ }
+}
+
+- (void)gotSoftwareFrame:(cc::SoftwareFrameData*)frame_data
+ withScaleFactor:(float)scale_factor
+ withCanvas:(SkCanvas*)canvas {
+ if (!frame_data || !canvas)
+ return;
+
+ // If there is not a layer for software frames, create one.
+ if (!software_layer_) {
+ // Disable the fade-in animation as the layer is added.
+ ScopedCAActionDisabler disabler;
+ software_layer_.reset([[SoftwareLayer alloc] init]);
+ [[self layer] addSublayer:software_layer_];
+ }
+
+ SkImageInfo info;
+ size_t row_bytes;
+ const void* pixels = canvas->peekPixels(&info, &row_bytes);
+ [software_layer_ setContentsToData:pixels
+ withRowBytes:row_bytes
+ withPixelSize:gfx::Size(info.fWidth, info.fHeight)
+ withScaleFactor:scale_factor];
+ [self layoutLayers];
+
+ // If there was an accelerated layer, remove it.
+ if (accelerated_layer_) {
+ // Disable the fade-out animation as the layer is removed.
+ ScopedCAActionDisabler disabler;
+ [accelerated_layer_ removeFromSuperlayer];
+ accelerated_layer_.reset();
+ }
+}
+
+@end // BrowserCompositorViewMac
diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc
index eddedf4866..98918729f5 100644
--- a/content/browser/compositor/delegated_frame_host.cc
+++ b/content/browser/compositor/delegated_frame_host.cc
@@ -12,6 +12,7 @@
#include "cc/resources/single_release_callback.h"
#include "cc/resources/texture_mailbox.h"
#include "content/browser/compositor/resize_lock.h"
+#include "content/common/gpu/client/gl_helper.h"
#include "content/public/browser/render_widget_host_view_frame_subscriber.h"
#include "content/public/common/content_switches.h"
#include "media/base/video_frame.h"
@@ -24,7 +25,17 @@ namespace content {
// DelegatedFrameHostClient
bool DelegatedFrameHostClient::ShouldCreateResizeLock() {
+ // On Windows and Linux, holding pointer moves will not help throttling
+ // resizes.
+ // TODO(piman): on Windows we need to block (nested message loop?) the
+ // WM_SIZE event. On Linux we need to throttle at the WM level using
+ // _NET_WM_SYNC_REQUEST.
+ // TODO(ccameron): Mac browser window resizing is incompletely implemented.
+#if !defined(OS_CHROMEOS)
+ return false;
+#else
return GetDelegatedFrameHost()->ShouldCreateResizeLock();
+#endif
}
void DelegatedFrameHostClient::RequestCopyOfOutput(
@@ -40,17 +51,15 @@ DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client)
last_output_surface_id_(0),
pending_delegated_ack_count_(0),
skipped_frames_(false),
- can_lock_compositor_(YES),
+ can_lock_compositor_(YES_CAN_LOCK),
delegated_frame_evictor_(new DelegatedFrameEvictor(this)) {
ImageTransportFactory::GetInstance()->AddObserver(this);
}
void DelegatedFrameHost::WasShown() {
- RenderWidgetHostImpl* host = client_->GetHost();
delegated_frame_evictor_->SetVisible(true);
- if (host->is_accelerated_compositing_active() &&
- !released_front_lock_.get()) {
+ if (!released_front_lock_.get()) {
ui::Compositor* compositor = client_->GetCompositor();
if (compositor)
released_front_lock_ = compositor->GetCompositorLock();
@@ -76,7 +85,7 @@ void DelegatedFrameHost::MaybeCreateResizeLock() {
can_lock_compositor_ == NO_PENDING_RENDERER_FRAME ||
can_lock_compositor_ == NO_PENDING_COMMIT;
- if (can_lock_compositor_ == YES)
+ if (can_lock_compositor_ == YES_CAN_LOCK)
can_lock_compositor_ = YES_DID_LOCK;
resize_lock_ = client_->CreateResizeLock(defer_compositor_lock);
@@ -85,26 +94,14 @@ void DelegatedFrameHost::MaybeCreateResizeLock() {
bool DelegatedFrameHost::ShouldCreateResizeLock() {
RenderWidgetHostImpl* host = client_->GetHost();
- // On Windows while resizing, the the resize locks makes us mis-paint a white
- // vertical strip (including the non-client area) if the content composition
- // is lagging the UI composition. So here we disable the throttling so that
- // the UI bits can draw ahead of the content thereby reducing the amount of
- // whiteout. Because this causes the content to be drawn at wrong sizes while
- // resizing we compensate by blocking the UI thread in Compositor::Draw() by
- // issuing a FinishAllRendering() if we are resizing.
-#if defined(OS_WIN)
- return false;
-#else
if (resize_lock_)
return false;
if (host->should_auto_resize())
return false;
- if (!host->is_accelerated_compositing_active())
- return false;
gfx::Size desired_size = client_->DesiredFrameSize();
- if (desired_size == current_frame_size_in_dip_)
+ if (desired_size == current_frame_size_in_dip_ || desired_size.IsEmpty())
return false;
ui::Compositor* compositor = client_->GetCompositor();
@@ -112,7 +109,6 @@ bool DelegatedFrameHost::ShouldCreateResizeLock() {
return false;
return true;
-#endif
}
void DelegatedFrameHost::RequestCopyOfOutput(
@@ -120,14 +116,6 @@ void DelegatedFrameHost::RequestCopyOfOutput(
client_->GetLayer()->RequestCopyOfOutput(request.Pass());
}
-gfx::Rect DelegatedFrameHost::GetViewBoundsWithResizeLock(
- const gfx::Rect& bounds) const {
- if (resize_lock_.get())
- return gfx::Rect(bounds.origin(), resize_lock_->expected_size());
- else
- return bounds;
-}
-
void DelegatedFrameHost::CopyFromCompositingSurface(
const gfx::Rect& src_subrect,
const gfx::Size& dst_size,
@@ -209,10 +197,8 @@ bool DelegatedFrameHost::CanCopyToBitmap() const {
}
bool DelegatedFrameHost::CanCopyToVideoFrame() const {
- RenderWidgetHostImpl* host = client_->GetHost();
return client_->GetCompositor() &&
- client_->GetLayer()->has_external_content() &&
- host->is_accelerated_compositing_active();
+ client_->GetLayer()->has_external_content();
}
bool DelegatedFrameHost::CanSubscribeFrame() const {
@@ -230,6 +216,9 @@ void DelegatedFrameHost::EndFrameSubscription() {
}
bool DelegatedFrameHost::ShouldSkipFrame(gfx::Size size_in_dip) const {
+ // Should skip a frame only when another frame from the renderer is guaranteed
+ // to replace it. Otherwise may cause hangs when the renderer is waiting for
+ // the completion of latency infos (such as when taking a Snapshot.)
if (can_lock_compositor_ == NO_PENDING_RENDERER_FRAME ||
can_lock_compositor_ == NO_PENDING_COMMIT ||
!resize_lock_.get())
@@ -242,6 +231,13 @@ void DelegatedFrameHost::WasResized() {
MaybeCreateResizeLock();
}
+gfx::Size DelegatedFrameHost::GetRequestedRendererSize() const {
+ if (resize_lock_)
+ return resize_lock_->expected_size();
+ else
+ return client_->DesiredFrameSize();
+}
+
void DelegatedFrameHost::CheckResizeLock() {
if (!resize_lock_ ||
resize_lock_->expected_size() != current_frame_size_in_dip_)
@@ -296,6 +292,10 @@ void DelegatedFrameHost::SwapDelegatedFrame(
cc::CompositorFrameAck ack;
cc::TransferableResource::ReturnResources(frame_data->resource_list,
&ack.resources);
+
+ skipped_latency_info_list_.insert(skipped_latency_info_list_.end(),
+ latency_info.begin(), latency_info.end());
+
RenderWidgetHostImpl::SendSwapCompositorFrameAck(
host->GetRoutingID(), output_surface_id,
host->GetProcess()->GetID(), ack);
@@ -370,8 +370,15 @@ void DelegatedFrameHost::SwapDelegatedFrame(
if (!compositor) {
SendDelegatedFrameAck(output_surface_id);
} else {
- for (size_t i = 0; i < latency_info.size(); i++)
- compositor->SetLatencyInfo(latency_info[i]);
+ std::vector<ui::LatencyInfo>::const_iterator it;
+ for (it = latency_info.begin(); it != latency_info.end(); ++it)
+ compositor->SetLatencyInfo(*it);
+ // If we've previously skipped any latency infos add them.
+ for (it = skipped_latency_info_list_.begin();
+ it != skipped_latency_info_list_.end();
+ ++it)
+ compositor->SetLatencyInfo(*it);
+ skipped_latency_info_list_.clear();
AddOnCommitCallbackAndDisableLocks(
base::Bind(&DelegatedFrameHost::SendDelegatedFrameAck,
AsWeakPtr(),
@@ -514,7 +521,8 @@ void DelegatedFrameHost::PrepareTextureCopyOutputResult(
callback,
base::Passed(&release_callback),
base::Passed(&bitmap),
- base::Passed(&bitmap_pixels_lock)));
+ base::Passed(&bitmap_pixels_lock)),
+ GLHelper::SCALER_QUALITY_FAST);
}
// static
@@ -724,7 +732,7 @@ void DelegatedFrameHost::OnCompositingDidCommit(
ui::Compositor* compositor) {
RenderWidgetHostImpl* host = client_->GetHost();
if (can_lock_compositor_ == NO_PENDING_COMMIT) {
- can_lock_compositor_ = YES;
+ can_lock_compositor_ = YES_CAN_LOCK;
if (resize_lock_.get() && resize_lock_->GrabDeferredLock())
can_lock_compositor_ = YES_DID_LOCK;
}
diff --git a/content/browser/compositor/delegated_frame_host.h b/content/browser/compositor/delegated_frame_host.h
index 5b2588d34a..0095599e23 100644
--- a/content/browser/compositor/delegated_frame_host.h
+++ b/content/browser/compositor/delegated_frame_host.h
@@ -13,7 +13,6 @@
#include "content/browser/renderer_host/delegated_frame_evictor.h"
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/common/gpu/client/gl_helper.h"
#include "content/public/browser/render_process_host.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_observer.h"
@@ -29,6 +28,7 @@ class VideoFrame;
namespace content {
class DelegatedFrameHost;
+class ReadbackYUVInterface;
class RenderWidgetHostViewFrameSubscriber;
class RenderWidgetHostImpl;
class ResizeLock;
@@ -77,7 +77,6 @@ class CONTENT_EXPORT DelegatedFrameHost
DelegatedFrameHost(DelegatedFrameHostClient* client);
virtual ~DelegatedFrameHost();
- gfx::Rect GetViewBoundsWithResizeLock(const gfx::Rect& bounds) const;
bool CanCopyToBitmap() const;
// Public interface exposed to RenderWidgetHostView.
@@ -89,6 +88,7 @@ class CONTENT_EXPORT DelegatedFrameHost
void WasHidden();
void WasShown();
void WasResized();
+ gfx::Size GetRequestedRendererSize() const;
void AddedToWindow();
void RemovingFromWindow();
void CopyFromCompositingSurface(
@@ -110,12 +110,10 @@ class CONTENT_EXPORT DelegatedFrameHost
cc::DelegatedFrameProvider* FrameProviderForTesting() const {
return frame_provider_.get();
}
- gfx::Size CurrentFrameSizeInDIPForTesting() const {
- return current_frame_size_in_dip_;
- }
void OnCompositingDidCommitForTesting(ui::Compositor* compositor) {
OnCompositingDidCommit(compositor);
}
+ bool ShouldCreateResizeLockForTesting() { return ShouldCreateResizeLock(); }
private:
friend class DelegatedFrameHostClient;
@@ -234,6 +232,7 @@ class CONTENT_EXPORT DelegatedFrameHost
// True after a delegated frame has been skipped, until a frame is not
// skipped.
bool skipped_frames_;
+ std::vector<ui::LatencyInfo> skipped_latency_info_list_;
// Holds delegated resources that have been given to a DelegatedFrameProvider,
// and gives back resources when they are no longer in use for return to the
@@ -258,7 +257,7 @@ class CONTENT_EXPORT DelegatedFrameHost
scoped_refptr<ui::CompositorLock> released_front_lock_;
enum CanLockCompositorState {
- YES,
+ YES_CAN_LOCK,
// We locked, so at some point we'll need to kick a frame.
YES_DID_LOCK,
// No. A lock timed out, we need to kick a new frame before locking again.
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 42091ff09d..0123efe0ef 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -11,6 +11,7 @@
#include "base/location.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
+#include "base/threading/thread.h"
#include "cc/output/compositor_frame.h"
#include "cc/output/output_surface.h"
#include "content/browser/compositor/browser_compositor_output_surface.h"
@@ -46,6 +47,8 @@
#include "ui/gfx/ozone/surface_factory_ozone.h"
#elif defined(USE_X11)
#include "content/browser/compositor/software_output_device_x11.h"
+#elif defined(OS_MACOSX)
+#include "content/browser/compositor/software_output_device_mac.h"
#endif
using cc::ContextProvider;
@@ -62,6 +65,16 @@ GpuProcessTransportFactory::GpuProcessTransportFactory()
: callback_factory_(this) {
output_surface_proxy_ = new BrowserCompositorOutputSurfaceProxy(
&output_surface_map_);
+#if defined(OS_CHROMEOS)
+ bool use_thread = !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kUIDisableThreadedCompositing);
+#else
+ bool use_thread = false;
+#endif
+ if (use_thread) {
+ compositor_thread_.reset(new base::Thread("Browser Compositor"));
+ compositor_thread_->Start();
+ }
}
GpuProcessTransportFactory::~GpuProcessTransportFactory() {
@@ -87,6 +100,9 @@ scoped_ptr<cc::SoftwareOutputDevice> CreateSoftwareOutputDevice(
#elif defined(USE_X11)
return scoped_ptr<cc::SoftwareOutputDevice>(new SoftwareOutputDeviceX11(
compositor));
+#elif defined(OS_MACOSX)
+ return scoped_ptr<cc::SoftwareOutputDevice>(
+ new SoftwareOutputDeviceMac(compositor));
#else
NOTREACHED();
return scoped_ptr<cc::SoftwareOutputDevice>();
@@ -134,7 +150,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
UMA_HISTOGRAM_BOOLEAN("Aura.CreatedGpuBrowserCompositor", !!context_provider);
if (!context_provider.get()) {
- if (ui::Compositor::WasInitializedWithThread()) {
+ if (compositor_thread_.get()) {
LOG(FATAL) << "Failed to create UI context, but can't use software"
" compositing with browser threaded compositing. Aborting.";
}
@@ -150,7 +166,7 @@ scoped_ptr<cc::OutputSurface> GpuProcessTransportFactory::CreateOutputSurface(
}
scoped_refptr<base::SingleThreadTaskRunner> compositor_thread_task_runner =
- ui::Compositor::GetCompositorMessageLoop();
+ GetCompositorMessageLoop();
if (!compositor_thread_task_runner.get())
compositor_thread_task_runner = base::MessageLoopProxy::current();
@@ -178,8 +194,11 @@ scoped_refptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector(
PerCompositorData* data = per_compositor_data_[source];
DCHECK(data);
- data->reflector = new ReflectorImpl(
- source, target, &output_surface_map_, data->surface_id);
+ data->reflector = new ReflectorImpl(source,
+ target,
+ &output_surface_map_,
+ GetCompositorMessageLoop(),
+ data->surface_id);
return data->reflector;
}
@@ -226,6 +245,12 @@ ui::ContextFactory* GpuProcessTransportFactory::GetContextFactory() {
return this;
}
+base::MessageLoopProxy* GpuProcessTransportFactory::GetCompositorMessageLoop() {
+ if (!compositor_thread_)
+ return NULL;
+ return compositor_thread_->message_loop_proxy();
+}
+
gfx::GLSurfaceHandle GpuProcessTransportFactory::GetSharedSurfaceHandle() {
gfx::GLSurfaceHandle handle = gfx::GLSurfaceHandle(
gfx::kNullPluginWindow, gfx::TEXTURE_TRANSPORT);
diff --git a/content/browser/compositor/gpu_process_transport_factory.h b/content/browser/compositor/gpu_process_transport_factory.h
index 3fdeefab4d..cc35025c72 100644
--- a/content/browser/compositor/gpu_process_transport_factory.h
+++ b/content/browser/compositor/gpu_process_transport_factory.h
@@ -15,6 +15,10 @@
#include "content/browser/compositor/image_transport_factory.h"
#include "ui/compositor/compositor.h"
+namespace base {
+class Thread;
+}
+
namespace content {
class BrowserCompositorOutputSurface;
class BrowserCompositorOutputSurfaceProxy;
@@ -47,6 +51,7 @@ class GpuProcessTransportFactory
SharedMainThreadContextProvider() OVERRIDE;
virtual bool DoesCreateTestContexts() OVERRIDE;
virtual cc::SharedBitmapManager* GetSharedBitmapManager() OVERRIDE;
+ virtual base::MessageLoopProxy* GetCompositorMessageLoop() OVERRIDE;
// ImageTransportFactory implementation.
virtual ui::ContextFactory* GetContextFactory() OVERRIDE;
@@ -67,6 +72,7 @@ class GpuProcessTransportFactory
void OnLostMainThreadSharedContext();
typedef std::map<ui::Compositor*, PerCompositorData*> PerCompositorDataMap;
+ scoped_ptr<base::Thread> compositor_thread_;
PerCompositorDataMap per_compositor_data_;
scoped_refptr<ContextProviderCommandBuffer> shared_main_thread_contexts_;
scoped_ptr<GLHelper> gl_helper_;
diff --git a/content/browser/compositor/reflector_impl.cc b/content/browser/compositor/reflector_impl.cc
index 14e992b939..2ccded325f 100644
--- a/content/browser/compositor/reflector_impl.cc
+++ b/content/browser/compositor/reflector_impl.cc
@@ -17,10 +17,11 @@ ReflectorImpl::ReflectorImpl(
ui::Compositor* mirrored_compositor,
ui::Layer* mirroring_layer,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
+ base::MessageLoopProxy* compositor_thread_loop,
int surface_id)
: impl_unsafe_(output_surface_map),
main_unsafe_(mirrored_compositor, mirroring_layer),
- impl_message_loop_(ui::Compositor::GetCompositorMessageLoop()),
+ impl_message_loop_(compositor_thread_loop),
main_message_loop_(base::MessageLoopProxy::current()),
surface_id_(surface_id) {
GLHelper* helper = ImageTransportFactory::GetInstance()->GetGLHelper();
diff --git a/content/browser/compositor/reflector_impl.h b/content/browser/compositor/reflector_impl.h
index e20e4b92a9..0a9af98ca6 100644
--- a/content/browser/compositor/reflector_impl.h
+++ b/content/browser/compositor/reflector_impl.h
@@ -37,6 +37,7 @@ class ReflectorImpl : public base::SupportsWeakPtr<ReflectorImpl>,
ui::Compositor* mirrored_compositor,
ui::Layer* mirroring_layer,
IDMap<BrowserCompositorOutputSurface>* output_surface_map,
+ base::MessageLoopProxy* compositor_thread_loop,
int surface_id);
ui::Compositor* mirrored_compositor() {
diff --git a/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc b/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
index dc80da1a0f..79c3364d89 100644
--- a/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
+++ b/content/browser/compositor/software_browser_compositor_output_surface_unittest.cc
@@ -90,10 +90,11 @@ SoftwareBrowserCompositorOutputSurfaceTest::
void SoftwareBrowserCompositorOutputSurfaceTest::SetUp() {
bool enable_pixel_output = false;
- ui::InitializeContextFactoryForTests(enable_pixel_output);
- ui::Compositor::Initialize();
+ ui::ContextFactory* context_factory =
+ ui::InitializeContextFactoryForTests(enable_pixel_output);
- compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget));
+ compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget,
+ context_factory));
surface_proxy_ =
new content::BrowserCompositorOutputSurfaceProxy(&surface_map_);
}
@@ -106,7 +107,6 @@ void SoftwareBrowserCompositorOutputSurfaceTest::TearDown() {
surface_map_.Clear();
ui::TerminateContextFactoryForTests();
- ui::Compositor::Terminate();
}
scoped_ptr<content::BrowserCompositorOutputSurface>
diff --git a/content/browser/compositor/software_output_device_mac.h b/content/browser/compositor/software_output_device_mac.h
new file mode 100644
index 0000000000..8220a3bd14
--- /dev/null
+++ b/content/browser/compositor/software_output_device_mac.h
@@ -0,0 +1,35 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_COMPOSITOR_SOFTWARE_OUTPUT_DEVICE_MAC_H_
+#define CONTENT_BROWSER_COMPOSITOR_SOFTWARE_OUTPUT_DEVICE_MAC_H_
+
+#include "cc/output/software_output_device.h"
+
+namespace gfx {
+class Canvas;
+}
+
+namespace ui {
+class Compositor;
+}
+
+namespace content {
+
+class SoftwareOutputDeviceMac : public cc::SoftwareOutputDevice {
+ public:
+ explicit SoftwareOutputDeviceMac(ui::Compositor* compositor);
+ virtual ~SoftwareOutputDeviceMac();
+
+ virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE;
+
+ private:
+ ui::Compositor* compositor_;
+
+ DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceMac);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_COMPOSITOR_SOFTWARE_OUTPUT_DEVICE_MAC_H_
diff --git a/content/browser/compositor/software_output_device_mac.mm b/content/browser/compositor/software_output_device_mac.mm
new file mode 100644
index 0000000000..ab734078f7
--- /dev/null
+++ b/content/browser/compositor/software_output_device_mac.mm
@@ -0,0 +1,30 @@
+// 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.
+
+#import <Cocoa/Cocoa.h>
+
+#include "content/browser/compositor/software_output_device_mac.h"
+
+#include "content/browser/compositor/browser_compositor_view_mac.h"
+#include "ui/compositor/compositor.h"
+
+namespace content {
+
+SoftwareOutputDeviceMac::SoftwareOutputDeviceMac(ui::Compositor* compositor)
+ : compositor_(compositor) {
+}
+
+SoftwareOutputDeviceMac::~SoftwareOutputDeviceMac() {
+}
+
+void SoftwareOutputDeviceMac::EndPaint(cc::SoftwareFrameData* frame_data) {
+ SoftwareOutputDevice::EndPaint(frame_data);
+
+ NSView* view = compositor_->widget();
+ [view gotSoftwareFrame:frame_data
+ withScaleFactor:scale_factor_
+ withCanvas:canvas_.get()];
+}
+
+} // namespace content
diff --git a/content/browser/compositor/software_output_device_ozone.cc b/content/browser/compositor/software_output_device_ozone.cc
index 4beb0f6310..e5514a859f 100644
--- a/content/browser/compositor/software_output_device_ozone.cc
+++ b/content/browser/compositor/software_output_device_ozone.cc
@@ -30,17 +30,20 @@ SoftwareOutputDeviceOzone::SoftwareOutputDeviceOzone(ui::Compositor* compositor)
SoftwareOutputDeviceOzone::~SoftwareOutputDeviceOzone() {
}
-void SoftwareOutputDeviceOzone::Resize(const gfx::Size& viewport_size) {
- if (viewport_size_ == viewport_size)
+void SoftwareOutputDeviceOzone::Resize(const gfx::Size& viewport_pixel_size,
+ float scale_factor) {
+ scale_factor_ = scale_factor;
+
+ if (viewport_pixel_size_ == viewport_pixel_size)
return;
- viewport_size_ = viewport_size;
+ viewport_pixel_size_ = viewport_pixel_size;
- surface_ozone_->ResizeCanvas(viewport_size_);
+ surface_ozone_->ResizeCanvas(viewport_pixel_size_);
}
SkCanvas* SoftwareOutputDeviceOzone::BeginPaint(const gfx::Rect& damage_rect) {
- DCHECK(gfx::Rect(viewport_size_).Contains(damage_rect));
+ DCHECK(gfx::Rect(viewport_pixel_size_).Contains(damage_rect));
// Get canvas for next frame.
canvas_ = surface_ozone_->GetCanvas();
diff --git a/content/browser/compositor/software_output_device_ozone.h b/content/browser/compositor/software_output_device_ozone.h
index 07a617009e..74ef6fd086 100644
--- a/content/browser/compositor/software_output_device_ozone.h
+++ b/content/browser/compositor/software_output_device_ozone.h
@@ -28,7 +28,8 @@ class CONTENT_EXPORT SoftwareOutputDeviceOzone
explicit SoftwareOutputDeviceOzone(ui::Compositor* compositor);
virtual ~SoftwareOutputDeviceOzone();
- virtual void Resize(const gfx::Size& viewport_size) OVERRIDE;
+ virtual void Resize(const gfx::Size& viewport_pixel_size,
+ float scale_factor) OVERRIDE;
virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) OVERRIDE;
virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE;
diff --git a/content/browser/compositor/software_output_device_ozone_unittest.cc b/content/browser/compositor/software_output_device_ozone_unittest.cc
index fc9a6d3abd..009bd89fab 100644
--- a/content/browser/compositor/software_output_device_ozone_unittest.cc
+++ b/content/browser/compositor/software_output_device_ozone_unittest.cc
@@ -99,20 +99,20 @@ SoftwareOutputDeviceOzoneTest::~SoftwareOutputDeviceOzoneTest() {
}
void SoftwareOutputDeviceOzoneTest::SetUp() {
- ui::InitializeContextFactoryForTests(enable_pixel_output_);
- ui::Compositor::Initialize();
+ ui::ContextFactory* context_factory =
+ ui::InitializeContextFactoryForTests(enable_pixel_output_);
surface_factory_.reset(new MockSurfaceFactoryOzone());
- gfx::SurfaceFactoryOzone::SetInstance(surface_factory_.get());
const gfx::Size size(500, 400);
compositor_.reset(new ui::Compositor(
- gfx::SurfaceFactoryOzone::GetInstance()->GetAcceleratedWidget()));
+ gfx::SurfaceFactoryOzone::GetInstance()->GetAcceleratedWidget(),
+ context_factory));
compositor_->SetScaleAndSize(1.0f, size);
output_device_.reset(new content::SoftwareOutputDeviceOzone(
compositor_.get()));
- output_device_->Resize(size);
+ output_device_->Resize(size, 1.f);
}
void SoftwareOutputDeviceOzoneTest::TearDown() {
@@ -120,7 +120,6 @@ void SoftwareOutputDeviceOzoneTest::TearDown() {
compositor_.reset();
surface_factory_.reset();
ui::TerminateContextFactoryForTests();
- ui::Compositor::Terminate();
}
class SoftwareOutputDeviceOzonePixelTest
@@ -138,7 +137,7 @@ TEST_F(SoftwareOutputDeviceOzoneTest, CheckCorrectResizeBehavior) {
gfx::Rect damage(0, 0, 100, 100);
gfx::Size size(200, 100);
// Reduce size.
- output_device_->Resize(size);
+ output_device_->Resize(size, 1.f);
SkCanvas* canvas = output_device_->BeginPaint(damage);
gfx::Size canvas_size(canvas->getDeviceSize().width(),
@@ -147,7 +146,7 @@ TEST_F(SoftwareOutputDeviceOzoneTest, CheckCorrectResizeBehavior) {
size.SetSize(1000, 500);
// Increase size.
- output_device_->Resize(size);
+ output_device_->Resize(size, 1.f);
canvas = output_device_->BeginPaint(damage);
canvas_size.SetSize(canvas->getDeviceSize().width(),
@@ -160,7 +159,7 @@ TEST_F(SoftwareOutputDeviceOzonePixelTest, CheckCopyToBitmap) {
const int width = 6;
const int height = 4;
const gfx::Rect area(width, height);
- output_device_->Resize(area.size());
+ output_device_->Resize(area.size(), 1.f);
SkCanvas* canvas = output_device_->BeginPaint(area);
// Clear the background to black.
diff --git a/content/browser/compositor/software_output_device_win.cc b/content/browser/compositor/software_output_device_win.cc
index 3c938bf325..1a6b5f64b4 100644
--- a/content/browser/compositor/software_output_device_win.cc
+++ b/content/browser/compositor/software_output_device_win.cc
@@ -29,16 +29,20 @@ SoftwareOutputDeviceWin::~SoftwareOutputDeviceWin() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
-void SoftwareOutputDeviceWin::Resize(const gfx::Size& viewport_size) {
+void SoftwareOutputDeviceWin::Resize(const gfx::Size& viewport_pixel_size,
+ float scale_factor) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (viewport_size_ == viewport_size)
+ scale_factor_ = scale_factor;
+
+ if (viewport_pixel_size_ == viewport_pixel_size)
return;
- viewport_size_ = viewport_size;
- contents_.reset(new gfx::Canvas(viewport_size, 1.0f, true));
+ viewport_pixel_size_ = viewport_pixel_size;
+ contents_.reset(new gfx::Canvas(viewport_pixel_size, 1.0f, true));
memset(&bitmap_info_, 0, sizeof(bitmap_info_));
- gfx::CreateBitmapHeader(viewport_size_.width(), viewport_size_.height(),
+ gfx::CreateBitmapHeader(viewport_pixel_size_.width(),
+ viewport_pixel_size_.height(),
&bitmap_info_.bmiHeader);
}
@@ -61,7 +65,7 @@ void SoftwareOutputDeviceWin::EndPaint(cc::SoftwareFrameData* frame_data) {
SoftwareOutputDevice::EndPaint(frame_data);
gfx::Rect rect = damage_rect_;
- rect.Intersect(gfx::Rect(viewport_size_));
+ rect.Intersect(gfx::Rect(viewport_pixel_size_));
if (rect.IsEmpty())
return;
diff --git a/content/browser/compositor/software_output_device_win.h b/content/browser/compositor/software_output_device_win.h
index 30addbc51f..3724f0217f 100644
--- a/content/browser/compositor/software_output_device_win.h
+++ b/content/browser/compositor/software_output_device_win.h
@@ -25,7 +25,8 @@ class SoftwareOutputDeviceWin : public cc::SoftwareOutputDevice {
explicit SoftwareOutputDeviceWin(ui::Compositor* compositor);
virtual ~SoftwareOutputDeviceWin();
- virtual void Resize(const gfx::Size& viewport_size) OVERRIDE;
+ virtual void Resize(const gfx::Size& viewport_pixel_size,
+ float scale_factor) OVERRIDE;
virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) OVERRIDE;
virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE;
virtual void CopyToPixels(const gfx::Rect& rect, void* pixels) OVERRIDE;
@@ -35,6 +36,8 @@ class SoftwareOutputDeviceWin : public cc::SoftwareOutputDevice {
BITMAPINFO bitmap_info_;
scoped_ptr<gfx::Canvas> contents_;
bool is_hwnd_composited_;
+
+ DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceWin);
};
} // namespace content
diff --git a/content/browser/compositor/software_output_device_x11.cc b/content/browser/compositor/software_output_device_x11.cc
index 44267d4d31..ebaefd7550 100644
--- a/content/browser/compositor/software_output_device_x11.cc
+++ b/content/browser/compositor/software_output_device_x11.cc
@@ -47,7 +47,7 @@ void SoftwareOutputDeviceX11::EndPaint(cc::SoftwareFrameData* frame_data) {
SoftwareOutputDevice::EndPaint(frame_data);
gfx::Rect rect = damage_rect_;
- rect.Intersect(gfx::Rect(viewport_size_));
+ rect.Intersect(gfx::Rect(viewport_pixel_size_));
if (rect.IsEmpty())
return;
@@ -65,8 +65,8 @@ void SoftwareOutputDeviceX11::EndPaint(cc::SoftwareFrameData* frame_data) {
SkImageInfo info;
size_t rowBytes;
const void* addr = canvas_->peekPixels(&info, &rowBytes);
- image.width = viewport_size_.width();
- image.height = viewport_size_.height();
+ image.width = viewport_pixel_size_.width();
+ image.height = viewport_pixel_size_.height();
image.depth = 32;
image.bits_per_pixel = 32;
image.format = ZPixmap;
@@ -125,8 +125,8 @@ void SoftwareOutputDeviceX11::EndPaint(cc::SoftwareFrameData* frame_data) {
compositor_->widget(),
gc_,
static_cast<const uint8*>(addr),
- viewport_size_.width(),
- viewport_size_.height(),
+ viewport_pixel_size_.width(),
+ viewport_pixel_size_.height(),
rect.x(),
rect.y(),
rect.x(),
diff --git a/content/browser/compositor/software_output_device_x11.h b/content/browser/compositor/software_output_device_x11.h
index 0bd07c3c95..20ae6428e6 100644
--- a/content/browser/compositor/software_output_device_x11.h
+++ b/content/browser/compositor/software_output_device_x11.h
@@ -29,6 +29,8 @@ class SoftwareOutputDeviceX11 : public cc::SoftwareOutputDevice {
XDisplay* display_;
GC gc_;
XWindowAttributes attributes_;
+
+ DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceX11);
};
} // namespace content
diff --git a/content/browser/database_quota_client_unittest.cc b/content/browser/database_quota_client_unittest.cc
new file mode 100644
index 0000000000..4ac6cb3cb2
--- /dev/null
+++ b/content/browser/database_quota_client_unittest.cc
@@ -0,0 +1,289 @@
+// 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 <map>
+
+#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/run_loop.h"
+#include "base/strings/utf_string_conversions.h"
+#include "net/base/completion_callback.h"
+#include "net/base/net_errors.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/database/database_quota_client.h"
+#include "webkit/browser/database/database_tracker.h"
+#include "webkit/browser/database/database_util.h"
+#include "webkit/common/database/database_identifier.h"
+
+using webkit_database::DatabaseQuotaClient;
+using webkit_database::DatabaseTracker;
+using webkit_database::OriginInfo;
+
+namespace content {
+
+// Declared to shorten the line lengths.
+static const quota::StorageType kTemp = quota::kStorageTypeTemporary;
+static const quota::StorageType kPerm = quota::kStorageTypePersistent;
+
+// Mock tracker class the mocks up those methods of the tracker
+// that are used by the QuotaClient.
+class MockDatabaseTracker : public DatabaseTracker {
+ public:
+ MockDatabaseTracker()
+ : DatabaseTracker(base::FilePath(), false, NULL, NULL, NULL),
+ delete_called_count_(0),
+ async_delete_(false) {}
+
+ virtual bool GetOriginInfo(
+ const std::string& origin_identifier,
+ OriginInfo* info) OVERRIDE {
+ std::map<GURL, MockOriginInfo>::const_iterator found =
+ mock_origin_infos_.find(
+ webkit_database::GetOriginFromIdentifier(origin_identifier));
+ if (found == mock_origin_infos_.end())
+ return false;
+ *info = OriginInfo(found->second);
+ return true;
+ }
+
+ virtual bool GetAllOriginIdentifiers(
+ std::vector<std::string>* origins_identifiers) OVERRIDE {
+ std::map<GURL, MockOriginInfo>::const_iterator iter;
+ for (iter = mock_origin_infos_.begin();
+ iter != mock_origin_infos_.end();
+ ++iter) {
+ origins_identifiers->push_back(iter->second.GetOriginIdentifier());
+ }
+ return true;
+ }
+
+ virtual bool GetAllOriginsInfo(
+ std::vector<OriginInfo>* origins_info) OVERRIDE {
+ std::map<GURL, MockOriginInfo>::const_iterator iter;
+ for (iter = mock_origin_infos_.begin();
+ iter != mock_origin_infos_.end();
+ ++iter) {
+ origins_info->push_back(OriginInfo(iter->second));
+ }
+ return true;
+ }
+
+ virtual int DeleteDataForOrigin(
+ const std::string& origin_identifier,
+ const net::CompletionCallback& callback) OVERRIDE {
+ ++delete_called_count_;
+ if (async_delete()) {
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&MockDatabaseTracker::AsyncDeleteDataForOrigin, this,
+ callback));
+ return net::ERR_IO_PENDING;
+ }
+ return net::OK;
+ }
+
+ void AsyncDeleteDataForOrigin(const net::CompletionCallback& callback) {
+ callback.Run(net::OK);
+ }
+
+ void AddMockDatabase(const GURL& origin, const char* name, int size) {
+ MockOriginInfo& info = mock_origin_infos_[origin];
+ info.set_origin(webkit_database::GetIdentifierFromOrigin(origin));
+ info.AddMockDatabase(base::ASCIIToUTF16(name), size);
+ }
+
+ int delete_called_count() { return delete_called_count_; }
+ bool async_delete() { return async_delete_; }
+ void set_async_delete(bool async) { async_delete_ = async; }
+
+ protected:
+ virtual ~MockDatabaseTracker() {}
+
+ private:
+ class MockOriginInfo : public OriginInfo {
+ public:
+ void set_origin(const std::string& origin_identifier) {
+ origin_identifier_ = origin_identifier;
+ }
+
+ void AddMockDatabase(const base::string16& name, int size) {
+ EXPECT_TRUE(database_info_.find(name) == database_info_.end());
+ database_info_[name].first = size;
+ total_size_ += size;
+ }
+ };
+
+ int delete_called_count_;
+ bool async_delete_;
+ std::map<GURL, MockOriginInfo> mock_origin_infos_;
+};
+
+
+// Base class for our test fixtures.
+class DatabaseQuotaClientTest : public testing::Test {
+ public:
+ const GURL kOriginA;
+ const GURL kOriginB;
+ const GURL kOriginOther;
+
+ DatabaseQuotaClientTest()
+ : kOriginA("http://host"),
+ kOriginB("http://host:8000"),
+ kOriginOther("http://other"),
+ usage_(0),
+ mock_tracker_(new MockDatabaseTracker),
+ weak_factory_(this) {
+ }
+
+ int64 GetOriginUsage(
+ quota::QuotaClient* client,
+ const GURL& origin,
+ quota::StorageType type) {
+ usage_ = 0;
+ client->GetOriginUsage(
+ origin, type,
+ base::Bind(&DatabaseQuotaClientTest::OnGetOriginUsageComplete,
+ weak_factory_.GetWeakPtr()));
+ base::RunLoop().RunUntilIdle();
+ return usage_;
+ }
+
+ const std::set<GURL>& GetOriginsForType(
+ quota::QuotaClient* client,
+ quota::StorageType type) {
+ origins_.clear();
+ client->GetOriginsForType(
+ type,
+ base::Bind(&DatabaseQuotaClientTest::OnGetOriginsComplete,
+ weak_factory_.GetWeakPtr()));
+ base::RunLoop().RunUntilIdle();
+ return origins_;
+ }
+
+ const std::set<GURL>& GetOriginsForHost(
+ quota::QuotaClient* client,
+ quota::StorageType type,
+ const std::string& host) {
+ origins_.clear();
+ client->GetOriginsForHost(
+ type, host,
+ base::Bind(&DatabaseQuotaClientTest::OnGetOriginsComplete,
+ weak_factory_.GetWeakPtr()));
+ base::RunLoop().RunUntilIdle();
+ return origins_;
+ }
+
+ bool DeleteOriginData(
+ quota::QuotaClient* client,
+ quota::StorageType type,
+ const GURL& origin) {
+ delete_status_ = quota::kQuotaStatusUnknown;
+ client->DeleteOriginData(
+ origin, type,
+ base::Bind(&DatabaseQuotaClientTest::OnDeleteOriginDataComplete,
+ weak_factory_.GetWeakPtr()));
+ base::RunLoop().RunUntilIdle();
+ return delete_status_ == quota::kQuotaStatusOk;
+ }
+
+ MockDatabaseTracker* mock_tracker() { return mock_tracker_.get(); }
+
+
+ private:
+ void OnGetOriginUsageComplete(int64 usage) {
+ usage_ = usage;
+ }
+
+ void OnGetOriginsComplete(const std::set<GURL>& origins) {
+ origins_ = origins;
+ }
+
+ void OnDeleteOriginDataComplete(quota::QuotaStatusCode status) {
+ delete_status_ = status;
+ }
+
+ base::MessageLoop message_loop_;
+ int64 usage_;
+ std::set<GURL> origins_;
+ quota::QuotaStatusCode delete_status_;
+ scoped_refptr<MockDatabaseTracker> mock_tracker_;
+ base::WeakPtrFactory<DatabaseQuotaClientTest> weak_factory_;
+};
+
+
+TEST_F(DatabaseQuotaClientTest, GetOriginUsage) {
+ DatabaseQuotaClient client(base::MessageLoopProxy::current().get(),
+ mock_tracker());
+
+ EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kTemp));
+ EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm));
+
+ mock_tracker()->AddMockDatabase(kOriginA, "fooDB", 1000);
+ EXPECT_EQ(1000, GetOriginUsage(&client, kOriginA, kTemp));
+ EXPECT_EQ(0, GetOriginUsage(&client, kOriginA, kPerm));
+
+ EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kPerm));
+ EXPECT_EQ(0, GetOriginUsage(&client, kOriginB, kTemp));
+}
+
+TEST_F(DatabaseQuotaClientTest, GetOriginsForHost) {
+ DatabaseQuotaClient client(base::MessageLoopProxy::current().get(),
+ mock_tracker());
+
+ EXPECT_EQ(kOriginA.host(), kOriginB.host());
+ EXPECT_NE(kOriginA.host(), kOriginOther.host());
+
+ std::set<GURL> origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
+ EXPECT_TRUE(origins.empty());
+
+ mock_tracker()->AddMockDatabase(kOriginA, "fooDB", 1000);
+ origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
+ EXPECT_EQ(origins.size(), 1ul);
+ EXPECT_TRUE(origins.find(kOriginA) != origins.end());
+
+ mock_tracker()->AddMockDatabase(kOriginB, "barDB", 1000);
+ origins = GetOriginsForHost(&client, kTemp, kOriginA.host());
+ EXPECT_EQ(origins.size(), 2ul);
+ EXPECT_TRUE(origins.find(kOriginA) != origins.end());
+ EXPECT_TRUE(origins.find(kOriginB) != origins.end());
+
+ EXPECT_TRUE(GetOriginsForHost(&client, kPerm, kOriginA.host()).empty());
+ EXPECT_TRUE(GetOriginsForHost(&client, kTemp, kOriginOther.host()).empty());
+}
+
+TEST_F(DatabaseQuotaClientTest, GetOriginsForType) {
+ DatabaseQuotaClient client(base::MessageLoopProxy::current().get(),
+ mock_tracker());
+
+ EXPECT_TRUE(GetOriginsForType(&client, kTemp).empty());
+ EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
+
+ mock_tracker()->AddMockDatabase(kOriginA, "fooDB", 1000);
+ std::set<GURL> origins = GetOriginsForType(&client, kTemp);
+ EXPECT_EQ(origins.size(), 1ul);
+ EXPECT_TRUE(origins.find(kOriginA) != origins.end());
+
+ EXPECT_TRUE(GetOriginsForType(&client, kPerm).empty());
+}
+
+TEST_F(DatabaseQuotaClientTest, DeleteOriginData) {
+ DatabaseQuotaClient client(base::MessageLoopProxy::current().get(),
+ mock_tracker());
+
+ // Perm deletions are short circuited in the Client and
+ // should not reach the DatabaseTracker.
+ EXPECT_TRUE(DeleteOriginData(&client, kPerm, kOriginA));
+ EXPECT_EQ(0, mock_tracker()->delete_called_count());
+
+ mock_tracker()->set_async_delete(false);
+ EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA));
+ EXPECT_EQ(1, mock_tracker()->delete_called_count());
+
+ mock_tracker()->set_async_delete(true);
+ EXPECT_TRUE(DeleteOriginData(&client, kTemp, kOriginA));
+ EXPECT_EQ(2, mock_tracker()->delete_called_count());
+}
+
+} // namespace content
diff --git a/content/browser/database_util_unittest.cc b/content/browser/database_util_unittest.cc
new file mode 100644
index 0000000000..4b11a18da7
--- /dev/null
+++ b/content/browser/database_util_unittest.cc
@@ -0,0 +1,75 @@
+// 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/strings/string_piece.h"
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/database/database_util.h"
+#include "webkit/common/database/database_identifier.h"
+
+using base::ASCIIToUTF16;
+using webkit_database::DatabaseUtil;
+
+static void TestVfsFilePath(bool expected_result,
+ const char* vfs_file_name,
+ const char* expected_origin_identifier = "",
+ const char* expected_database_name = "",
+ const char* expected_sqlite_suffix = "") {
+ std::string origin_identifier;
+ base::string16 database_name;
+ base::string16 sqlite_suffix;
+ EXPECT_EQ(expected_result,
+ DatabaseUtil::CrackVfsFileName(ASCIIToUTF16(vfs_file_name),
+ &origin_identifier,
+ &database_name,
+ &sqlite_suffix));
+ EXPECT_EQ(expected_origin_identifier, origin_identifier);
+ EXPECT_EQ(ASCIIToUTF16(expected_database_name), database_name);
+ EXPECT_EQ(ASCIIToUTF16(expected_sqlite_suffix), sqlite_suffix);
+}
+
+static GURL ToAndFromOriginIdentifier(const GURL origin_url) {
+ std::string id = webkit_database::GetIdentifierFromOrigin(origin_url);
+ return webkit_database::GetOriginFromIdentifier(id);
+}
+
+static void TestValidOriginIdentifier(bool expected_result,
+ const std::string& id) {
+ EXPECT_EQ(expected_result,
+ DatabaseUtil::IsValidOriginIdentifier(id));
+}
+
+namespace content {
+
+// Test DatabaseUtil::CrackVfsFilePath on various inputs.
+TEST(DatabaseUtilTest, CrackVfsFilePathTest) {
+ TestVfsFilePath(true, "origin/#", "origin", "", "");
+ TestVfsFilePath(true, "origin/#suffix", "origin", "", "suffix");
+ TestVfsFilePath(true, "origin/db_name#", "origin", "db_name", "");
+ TestVfsFilePath(true, "origin/db_name#suffix", "origin", "db_name", "suffix");
+ TestVfsFilePath(false, "origindb_name#");
+ TestVfsFilePath(false, "origindb_name#suffix");
+ TestVfsFilePath(false, "origin/db_name");
+ TestVfsFilePath(false, "origin#db_name/suffix");
+ TestVfsFilePath(false, "/db_name#");
+ TestVfsFilePath(false, "/db_name#suffix");
+}
+
+TEST(DatabaseUtilTest, OriginIdentifiers) {
+ const GURL kFileOrigin(GURL("file:///").GetOrigin());
+ const GURL kHttpOrigin(GURL("http://bar/").GetOrigin());
+ EXPECT_EQ(kFileOrigin, ToAndFromOriginIdentifier(kFileOrigin));
+ EXPECT_EQ(kHttpOrigin, ToAndFromOriginIdentifier(kHttpOrigin));
+}
+
+TEST(DatabaseUtilTest, IsValidOriginIdentifier) {
+ TestValidOriginIdentifier(true, "http_bar_0");
+ TestValidOriginIdentifier(true, "");
+ TestValidOriginIdentifier(false, "bad..id");
+ TestValidOriginIdentifier(false, "bad/id");
+ TestValidOriginIdentifier(false, "bad\\id");
+ TestValidOriginIdentifier(false, std::string("bad\0id", 6));
+}
+
+} // namespace content
diff --git a/content/browser/databases_table_unittest.cc b/content/browser/databases_table_unittest.cc
new file mode 100644
index 0000000000..b82176fe24
--- /dev/null
+++ b/content/browser/databases_table_unittest.cc
@@ -0,0 +1,152 @@
+// 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/bind.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "sql/connection.h"
+#include "sql/statement.h"
+#include "sql/test/scoped_error_ignorer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/sqlite/sqlite3.h"
+#include "webkit/browser/database/databases_table.h"
+
+using base::ASCIIToUTF16;
+using webkit_database::DatabaseDetails;
+using webkit_database::DatabasesTable;
+
+namespace content {
+
+static void CheckDetailsAreEqual(const DatabaseDetails& d1,
+ const DatabaseDetails& d2) {
+ EXPECT_EQ(d1.origin_identifier, d2.origin_identifier);
+ EXPECT_EQ(d1.database_name, d2.database_name);
+ EXPECT_EQ(d1.description, d2.description);
+ EXPECT_EQ(d1.estimated_size, d2.estimated_size);
+}
+
+static bool DatabasesTableIsEmpty(sql::Connection* db) {
+ sql::Statement statement(db->GetCachedStatement(
+ SQL_FROM_HERE, "SELECT COUNT(*) FROM Databases"));
+ return (statement.is_valid() && statement.Step() && !statement.ColumnInt(0));
+}
+
+TEST(DatabasesTableTest, TestIt) {
+ // Initialize the 'Databases' table.
+ sql::Connection db;
+
+ sql::ScopedErrorIgnorer ignore_errors;
+ // TODO(shess): Suppressing SQLITE_CONSTRAINT because the code
+ // expects that and handles the resulting error. Consider revising
+ // the code to use INSERT OR IGNORE (which would not throw
+ // SQLITE_CONSTRAINT) and then check ChangeCount() to see if any
+ // changes were made.
+ ignore_errors.IgnoreError(SQLITE_CONSTRAINT);
+
+ // Initialize the temp dir and the 'Databases' table.
+ EXPECT_TRUE(db.OpenInMemory());
+ DatabasesTable databases_table(&db);
+ EXPECT_TRUE(databases_table.Init());
+
+ // The 'Databases' table should be empty.
+ EXPECT_TRUE(DatabasesTableIsEmpty(&db));
+
+ // Create the details for a databases.
+ DatabaseDetails details_in1;
+ DatabaseDetails details_out1;
+ details_in1.origin_identifier = "origin1";
+ details_in1.database_name = ASCIIToUTF16("db1");
+ details_in1.description = ASCIIToUTF16("description_db1");
+ details_in1.estimated_size = 100;
+
+ // Updating details for this database should fail.
+ EXPECT_FALSE(databases_table.UpdateDatabaseDetails(details_in1));
+ EXPECT_FALSE(databases_table.GetDatabaseDetails(
+ details_in1.origin_identifier,
+ details_in1.database_name,
+ &details_out1));
+
+ // Inserting details for this database should pass.
+ EXPECT_TRUE(databases_table.InsertDatabaseDetails(details_in1));
+ EXPECT_TRUE(databases_table.GetDatabaseDetails(
+ details_in1.origin_identifier,
+ details_in1.database_name,
+ &details_out1));
+ EXPECT_EQ(1, databases_table.GetDatabaseID(details_in1.origin_identifier,
+ details_in1.database_name));
+
+ // Check that the details were correctly written to the database.
+ CheckDetailsAreEqual(details_in1, details_out1);
+
+ // Check that inserting a duplicate row fails.
+ EXPECT_FALSE(databases_table.InsertDatabaseDetails(details_in1));
+
+ // Insert details for another database with the same origin.
+ DatabaseDetails details_in2;
+ details_in2.origin_identifier = "origin1";
+ details_in2.database_name = ASCIIToUTF16("db2");
+ details_in2.description = ASCIIToUTF16("description_db2");
+ details_in2.estimated_size = 200;
+ EXPECT_TRUE(databases_table.InsertDatabaseDetails(details_in2));
+ EXPECT_EQ(2, databases_table.GetDatabaseID(details_in2.origin_identifier,
+ details_in2.database_name));
+
+ // Insert details for a third database with a different origin.
+ DatabaseDetails details_in3;
+ details_in3.origin_identifier = "origin2";
+ details_in3.database_name = ASCIIToUTF16("db3");
+ details_in3.description = ASCIIToUTF16("description_db3");
+ details_in3.estimated_size = 300;
+ EXPECT_TRUE(databases_table.InsertDatabaseDetails(details_in3));
+ EXPECT_EQ(3, databases_table.GetDatabaseID(details_in3.origin_identifier,
+ details_in3.database_name));
+
+ // There should be no database with origin "origin3".
+ std::vector<DatabaseDetails> details_out_origin3;
+ EXPECT_TRUE(databases_table.GetAllDatabaseDetailsForOriginIdentifier(
+ "origin3", &details_out_origin3));
+ EXPECT_TRUE(details_out_origin3.empty());
+
+ // There should be only two databases with origin "origin1".
+ std::vector<DatabaseDetails> details_out_origin1;
+ EXPECT_TRUE(databases_table.GetAllDatabaseDetailsForOriginIdentifier(
+ details_in1.origin_identifier, &details_out_origin1));
+ EXPECT_EQ(size_t(2), details_out_origin1.size());
+ CheckDetailsAreEqual(details_in1, details_out_origin1[0]);
+ CheckDetailsAreEqual(details_in2, details_out_origin1[1]);
+
+ // Get the list of all origins: should be "origin1" and "origin2".
+ std::vector<std::string> origins_out;
+ EXPECT_TRUE(databases_table.GetAllOriginIdentifiers(&origins_out));
+ EXPECT_EQ(size_t(2), origins_out.size());
+ EXPECT_EQ(details_in1.origin_identifier, origins_out[0]);
+ EXPECT_EQ(details_in3.origin_identifier, origins_out[1]);
+
+ // Delete an origin and check that it's no longer in the table.
+ origins_out.clear();
+ EXPECT_TRUE(databases_table.DeleteOriginIdentifier(
+ details_in3.origin_identifier));
+ EXPECT_TRUE(databases_table.GetAllOriginIdentifiers(&origins_out));
+ EXPECT_EQ(size_t(1), origins_out.size());
+ EXPECT_EQ(details_in1.origin_identifier, origins_out[0]);
+
+ // Deleting an origin that doesn't have any record in this table should fail.
+ EXPECT_FALSE(databases_table.DeleteOriginIdentifier("unknown_origin"));
+
+ // Delete the details for 'db1' and check that they're no longer there.
+ EXPECT_TRUE(databases_table.DeleteDatabaseDetails(
+ details_in1.origin_identifier, details_in1.database_name));
+ EXPECT_FALSE(databases_table.GetDatabaseDetails(
+ details_in1.origin_identifier,
+ details_in1.database_name,
+ &details_out1));
+
+ // Check that trying to delete a record that doesn't exist fails.
+ EXPECT_FALSE(databases_table.DeleteDatabaseDetails(
+ "unknown_origin", ASCIIToUTF16("unknown_database")));
+
+ ASSERT_TRUE(ignore_errors.CheckIgnoredErrors());
+}
+
+} // namespace content
diff --git a/content/browser/device_monitor_mac.mm b/content/browser/device_monitor_mac.mm
index 5491aa640e..eb429afe64 100644
--- a/content/browser/device_monitor_mac.mm
+++ b/content/browser/device_monitor_mac.mm
@@ -11,6 +11,8 @@
#include "base/bind_helpers.h"
#include "base/logging.h"
#include "base/mac/scoped_nsobject.h"
+#include "base/threading/thread_checker.h"
+#include "content/public/browser/browser_thread.h"
#import "media/video/capture/mac/avfoundation_glue.h"
namespace {
@@ -208,22 +210,21 @@ void QTKitMonitorImpl::OnDeviceChanged() {
}
// Forward declaration for use by CrAVFoundationDeviceObserver.
-class AVFoundationMonitorImpl;
+class SuspendObserverDelegate;
} // namespace
// This class is a Key-Value Observer (KVO) shim. It is needed because C++
-// classes cannot observe Key-Values directly. This class is used by
-// AVfoundationMonitorImpl and executed in its |device_task_runner_|, a.k.a.
-// "Device Thread". -stopObserving is called dutifully on -dealloc on UI thread.
+// classes cannot observe Key-Values directly. Created, manipulated, and
+// destroyed on the Device Thread by SuspendedObserverDelegate.
@interface CrAVFoundationDeviceObserver : NSObject {
@private
- AVFoundationMonitorImpl* receiver_;
+ SuspendObserverDelegate* receiver_; // weak
// Member to keep track of the devices we are already monitoring.
std::set<CrAVCaptureDevice*> monitoredDevices_;
}
-- (id)initWithChangeReceiver:(AVFoundationMonitorImpl*)receiver;
+- (id)initWithChangeReceiver:(SuspendObserverDelegate*)receiver;
- (void)startObserving:(CrAVCaptureDevice*)device;
- (void)stopObserving:(CrAVCaptureDevice*)device;
@@ -231,10 +232,91 @@ class AVFoundationMonitorImpl;
namespace {
+// This class owns and manages the lifetime of a CrAVFoundationDeviceObserver.
+// Provides a callback for this device observer to indicate that there has been
+// a device change of some kind. Created by AVFoundationMonitorImpl in UI thread
+// but living in Device Thread.
+class SuspendObserverDelegate :
+ public base::RefCountedThreadSafe<SuspendObserverDelegate> {
+ public:
+ explicit SuspendObserverDelegate(DeviceMonitorMacImpl* monitor)
+ : avfoundation_monitor_impl_(monitor) {
+ device_thread_checker_.DetachFromThread();
+ }
+
+ void OnDeviceChanged();
+ void StartObserver();
+ void ResetDeviceMonitorOnUIThread();
+
+ private:
+ friend class base::RefCountedThreadSafe<SuspendObserverDelegate>;
+
+ virtual ~SuspendObserverDelegate() {}
+
+ void OnDeviceChangedOnUIThread(
+ const std::vector<DeviceInfo>& snapshot_devices);
+
+ base::ThreadChecker device_thread_checker_;
+ base::scoped_nsobject<CrAVFoundationDeviceObserver> suspend_observer_;
+ DeviceMonitorMacImpl* avfoundation_monitor_impl_;
+};
+
+void SuspendObserverDelegate::OnDeviceChanged() {
+ DCHECK(device_thread_checker_.CalledOnValidThread());
+ NSArray* devices = [AVCaptureDeviceGlue devices];
+ std::vector<DeviceInfo> snapshot_devices;
+ for (CrAVCaptureDevice* device in devices) {
+ [suspend_observer_ startObserving:device];
+ BOOL suspended = [device respondsToSelector:@selector(isSuspended)] &&
+ [device isSuspended];
+ DeviceInfo::DeviceType device_type = DeviceInfo::kUnknown;
+ if ([device hasMediaType:AVFoundationGlue::AVMediaTypeVideo()]) {
+ if (suspended)
+ continue;
+ device_type = DeviceInfo::kVideo;
+ } else if ([device hasMediaType:AVFoundationGlue::AVMediaTypeMuxed()]) {
+ device_type = suspended ? DeviceInfo::kAudio : DeviceInfo::kMuxed;
+ } else if ([device hasMediaType:AVFoundationGlue::AVMediaTypeAudio()]) {
+ device_type = DeviceInfo::kAudio;
+ }
+ snapshot_devices.push_back(DeviceInfo([[device uniqueID] UTF8String],
+ device_type));
+ }
+ // Post the consolidation of enumerated devices to be done on UI thread.
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&SuspendObserverDelegate::OnDeviceChangedOnUIThread,
+ this, snapshot_devices));
+}
+
+void SuspendObserverDelegate::StartObserver() {
+ DCHECK(device_thread_checker_.CalledOnValidThread());
+ suspend_observer_.reset([[CrAVFoundationDeviceObserver alloc]
+ initWithChangeReceiver:this]);
+ for (CrAVCaptureDevice* device in [AVCaptureDeviceGlue devices])
+ [suspend_observer_ startObserving:device];
+}
+
+void SuspendObserverDelegate::ResetDeviceMonitorOnUIThread() {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ avfoundation_monitor_impl_ = NULL;
+}
+
+void SuspendObserverDelegate::OnDeviceChangedOnUIThread(
+ const std::vector<DeviceInfo>& snapshot_devices) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ // |avfoundation_monitor_impl_| might have been NULLed asynchronously before
+ // arriving at this line.
+ if (avfoundation_monitor_impl_) {
+ avfoundation_monitor_impl_->ConsolidateDevicesListAndNotify(
+ snapshot_devices);
+ }
+}
+
// AVFoundation implementation of the Mac Device Monitor, registers as a global
// device connect/disconnect observer and plugs suspend/wake up device observers
-// per device. This class is created and lives in UI thread; device enumeration
-// and operations involving |suspend_observer_| happen on |device_task_runner_|.
+// per device. Owns a SuspendObserverDelegate living in |device_task_runner_|
+// and gets notified when a device is suspended/resumed. This class is created
+// and lives in UI thread;
class AVFoundationMonitorImpl : public DeviceMonitorMacImpl {
public:
AVFoundationMonitorImpl(
@@ -245,18 +327,14 @@ class AVFoundationMonitorImpl : public DeviceMonitorMacImpl {
virtual void OnDeviceChanged() OVERRIDE;
private:
- void OnDeviceChangedOnDeviceThread(
- const scoped_refptr<base::MessageLoopProxy>& ui_thread);
- void StartObserverOnDeviceThread();
-
base::ThreadChecker thread_checker_;
// {Video,AudioInput}DeviceManager's "Device" thread task runner used for
- // device enumeration, valid after MediaStreamManager calls StartMonitoring().
+ // posting tasks to |suspend_observer_delegate_|; valid after
+ // MediaStreamManager calls StartMonitoring().
const scoped_refptr<base::SingleThreadTaskRunner> device_task_runner_;
- // Created and executed in |device_task_runnner_|.
- base::scoped_nsobject<CrAVFoundationDeviceObserver> suspend_observer_;
+ scoped_refptr<SuspendObserverDelegate> suspend_observer_delegate_;
DISALLOW_COPY_AND_ASSIGN(AVFoundationMonitorImpl);
};
@@ -265,7 +343,8 @@ AVFoundationMonitorImpl::AVFoundationMonitorImpl(
content::DeviceMonitorMac* monitor,
const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner)
: DeviceMonitorMacImpl(monitor),
- device_task_runner_(device_task_runner) {
+ device_task_runner_(device_task_runner),
+ suspend_observer_delegate_(new SuspendObserverDelegate(this)) {
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
device_arrival_ =
[nc addObserverForName:AVFoundationGlue::
@@ -282,11 +361,13 @@ AVFoundationMonitorImpl::AVFoundationMonitorImpl(
usingBlock:^(NSNotification* notification) {
OnDeviceChanged();}];
device_task_runner_->PostTask(FROM_HERE,
- base::Bind(&AVFoundationMonitorImpl::StartObserverOnDeviceThread,
- base::Unretained(this)));
+ base::Bind(&SuspendObserverDelegate::StartObserver,
+ suspend_observer_delegate_));
}
AVFoundationMonitorImpl::~AVFoundationMonitorImpl() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ suspend_observer_delegate_->ResetDeviceMonitorOnUIThread();
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:device_arrival_];
[nc removeObserver:device_removal_];
@@ -295,52 +376,15 @@ AVFoundationMonitorImpl::~AVFoundationMonitorImpl() {
void AVFoundationMonitorImpl::OnDeviceChanged() {
DCHECK(thread_checker_.CalledOnValidThread());
device_task_runner_->PostTask(FROM_HERE,
- base::Bind(&AVFoundationMonitorImpl::OnDeviceChangedOnDeviceThread,
- base::Unretained(this),
- base::MessageLoop::current()->message_loop_proxy()));
-}
-
-void AVFoundationMonitorImpl::OnDeviceChangedOnDeviceThread(
- const scoped_refptr<base::MessageLoopProxy>& ui_thread) {
- DCHECK(device_task_runner_->BelongsToCurrentThread());
- NSArray* devices = [AVCaptureDeviceGlue devices];
- std::vector<DeviceInfo> snapshot_devices;
- for (CrAVCaptureDevice* device in devices) {
- [suspend_observer_ startObserving:device];
- BOOL suspended = [device respondsToSelector:@selector(isSuspended)] &&
- [device isSuspended];
- DeviceInfo::DeviceType device_type = DeviceInfo::kUnknown;
- if ([device hasMediaType:AVFoundationGlue::AVMediaTypeVideo()]) {
- if (suspended)
- continue;
- device_type = DeviceInfo::kVideo;
- } else if ([device hasMediaType:AVFoundationGlue::AVMediaTypeMuxed()]) {
- device_type = suspended ? DeviceInfo::kAudio : DeviceInfo::kMuxed;
- } else if ([device hasMediaType:AVFoundationGlue::AVMediaTypeAudio()]) {
- device_type = DeviceInfo::kAudio;
- }
- snapshot_devices.push_back(DeviceInfo([[device uniqueID] UTF8String],
- device_type));
- }
- // Post the consolidation of enumerated devices to be done on UI thread.
- ui_thread->PostTask(FROM_HERE,
- base::Bind(&DeviceMonitorMacImpl::ConsolidateDevicesListAndNotify,
- base::Unretained(this), snapshot_devices));
-}
-
-void AVFoundationMonitorImpl::StartObserverOnDeviceThread() {
- DCHECK(device_task_runner_->BelongsToCurrentThread());
- suspend_observer_.reset([[CrAVFoundationDeviceObserver alloc]
- initWithChangeReceiver:this]);
- for (CrAVCaptureDevice* device in [AVCaptureDeviceGlue devices])
- [suspend_observer_ startObserving:device];
+ base::Bind(&SuspendObserverDelegate::OnDeviceChanged,
+ suspend_observer_delegate_));
}
} // namespace
@implementation CrAVFoundationDeviceObserver
-- (id)initWithChangeReceiver:(AVFoundationMonitorImpl*)receiver {
+- (id)initWithChangeReceiver:(SuspendObserverDelegate*)receiver {
if ((self = [super init])) {
DCHECK(receiver != NULL);
receiver_ = receiver;
@@ -378,10 +422,15 @@ void AVFoundationMonitorImpl::StartObserverOnDeviceThread() {
std::set<CrAVCaptureDevice*>::iterator found =
std::find(monitoredDevices_.begin(), monitoredDevices_.end(), device);
DCHECK(found != monitoredDevices_.end());
- [device removeObserver:self
- forKeyPath:@"suspended"];
- [device removeObserver:self
- forKeyPath:@"connected"];
+ // Every so seldom, |device| might be gone when getting here, in that case
+ // removing the observer causes a crash. Try to avoid it by checking sanity of
+ // the |device| via its -observationInfo. http://crbug.com/371271.
+ if ([device observationInfo]) {
+ [device removeObserver:self
+ forKeyPath:@"suspended"];
+ [device removeObserver:self
+ forKeyPath:@"connected"];
+ }
monitoredDevices_.erase(found);
}
diff --git a/content/browser/device_sensors/device_inertial_sensor_browsertest.cc b/content/browser/device_sensors/device_inertial_sensor_browsertest.cc
index f76f1646d7..ff65895e5a 100644
--- a/content/browser/device_sensors/device_inertial_sensor_browsertest.cc
+++ b/content/browser/device_sensors/device_inertial_sensor_browsertest.cc
@@ -170,7 +170,7 @@ class DeviceInertialSensorBrowserTest : public ContentBrowserTest {
void SetUpOnIOThread() {
fetcher_ = new FakeDataFetcher();
DeviceInertialSensorService::GetInstance()->
- SetDataFetcherForTests(fetcher_);
+ SetDataFetcherForTesting(fetcher_);
io_loop_finished_event_.Signal();
}
diff --git a/content/browser/device_sensors/device_inertial_sensor_service.cc b/content/browser/device_sensors/device_inertial_sensor_service.cc
index 4ae9c9db16..cf96820649 100644
--- a/content/browser/device_sensors/device_inertial_sensor_service.cc
+++ b/content/browser/device_sensors/device_inertial_sensor_service.cc
@@ -8,7 +8,6 @@
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "content/browser/device_sensors/data_fetcher_shared_memory.h"
-#include "content/public/browser/render_process_host.h"
namespace content {
@@ -91,7 +90,7 @@ void DeviceInertialSensorService::Shutdown() {
is_shutdown_ = true;
}
-void DeviceInertialSensorService::SetDataFetcherForTests(
+void DeviceInertialSensorService::SetDataFetcherForTesting(
DataFetcherSharedMemory* test_data_fetcher) {
data_fetcher_.reset(test_data_fetcher);
}
diff --git a/content/browser/device_sensors/device_inertial_sensor_service.h b/content/browser/device_sensors/device_inertial_sensor_service.h
index df1df0af2e..1d8cfd1449 100644
--- a/content/browser/device_sensors/device_inertial_sensor_service.h
+++ b/content/browser/device_sensors/device_inertial_sensor_service.h
@@ -17,11 +17,10 @@
namespace content {
class DataFetcherSharedMemory;
-class RenderProcessHost;
-// Owns the DeviceMotionProvider (the background polling thread) and keeps
-// track of the number of consumers currently using the data (and pausing
-// the provider when not in use).
+// Owns the data fetcher for Device Motion and Orientation and keeps track of
+// the number of consumers currently using the data. The data fetcher is stopped
+// when there are no consumers.
class CONTENT_EXPORT DeviceInertialSensorService {
public:
// Returns the DeviceInertialSensorService singleton.
@@ -46,7 +45,7 @@ class CONTENT_EXPORT DeviceInertialSensorService {
// Injects a custom data fetcher for testing purposes. This class takes
// ownership of the injected object.
- void SetDataFetcherForTests(DataFetcherSharedMemory* test_data_fetcher);
+ void SetDataFetcherForTesting(DataFetcherSharedMemory* test_data_fetcher);
private:
friend struct DefaultSingletonTraits<DeviceInertialSensorService>;
diff --git a/content/browser/device_sensors/device_motion_message_filter.cc b/content/browser/device_sensors/device_motion_message_filter.cc
index 26a3962eff..2994c383f1 100644
--- a/content/browser/device_sensors/device_motion_message_filter.cc
+++ b/content/browser/device_sensors/device_motion_message_filter.cc
@@ -21,19 +21,15 @@ DeviceMotionMessageFilter::~DeviceMotionMessageFilter() {
CONSUMER_TYPE_MOTION);
}
-bool DeviceMotionMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+bool DeviceMotionMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(DeviceMotionMessageFilter,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(DeviceMotionMessageFilter, message)
IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StartPolling,
OnDeviceMotionStartPolling)
IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StopPolling,
OnDeviceMotionStopPolling)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/device_sensors/device_motion_message_filter.h b/content/browser/device_sensors/device_motion_message_filter.h
index 5bbce9b452..cd4859472d 100644
--- a/content/browser/device_sensors/device_motion_message_filter.h
+++ b/content/browser/device_sensors/device_motion_message_filter.h
@@ -5,21 +5,16 @@
#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_MOTION_MESSAGE_FILTER_H_
#define CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_MOTION_MESSAGE_FILTER_H_
-#include "base/compiler_specific.h"
#include "content/public/browser/browser_message_filter.h"
namespace content {
-class DeviceMotionService;
-class RenderProcessHost;
-
class DeviceMotionMessageFilter : public BrowserMessageFilter {
public:
DeviceMotionMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~DeviceMotionMessageFilter();
diff --git a/content/browser/device_sensors/device_orientation_message_filter.cc b/content/browser/device_sensors/device_orientation_message_filter.cc
index 622c685aff..402aa67a40 100644
--- a/content/browser/device_sensors/device_orientation_message_filter.cc
+++ b/content/browser/device_sensors/device_orientation_message_filter.cc
@@ -22,18 +22,15 @@ DeviceOrientationMessageFilter::~DeviceOrientationMessageFilter() {
}
bool DeviceOrientationMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(DeviceOrientationMessageFilter,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(DeviceOrientationMessageFilter, message)
IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartPolling,
OnDeviceOrientationStartPolling)
IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopPolling,
OnDeviceOrientationStopPolling)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/device_sensors/device_orientation_message_filter.h b/content/browser/device_sensors/device_orientation_message_filter.h
index afc3ec2971..56893c83a1 100644
--- a/content/browser/device_sensors/device_orientation_message_filter.h
+++ b/content/browser/device_sensors/device_orientation_message_filter.h
@@ -5,20 +5,16 @@
#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
#define CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
-#include "base/compiler_specific.h"
#include "content/public/browser/browser_message_filter.h"
namespace content {
-class RenderProcessHost;
-
class DeviceOrientationMessageFilter : public BrowserMessageFilter {
public:
DeviceOrientationMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~DeviceOrientationMessageFilter();
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc
index 087004296d..bcb60b55b7 100644
--- a/content/browser/devtools/devtools_agent_host_impl.cc
+++ b/content/browser/devtools/devtools_agent_host_impl.cc
@@ -10,6 +10,7 @@
#include "base/guid.h"
#include "base/lazy_instance.h"
#include "content/browser/devtools/devtools_manager_impl.h"
+#include "content/browser/devtools/forwarding_agent_host.h"
#include "content/public/browser/browser_thread.h"
namespace content {
@@ -31,6 +32,7 @@ DevToolsAgentHostImpl::~DevToolsAgentHostImpl() {
g_instances.Get().erase(g_instances.Get().find(id_));
}
+//static
scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId(
const std::string& id) {
if (g_instances == NULL)
@@ -41,6 +43,12 @@ scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId(
return it->second;
}
+//static
+scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::Create(
+ DevToolsExternalAgentProxyDelegate* delegate) {
+ return new ForwardingAgentHost(delegate);
+}
+
bool DevToolsAgentHostImpl::IsAttached() {
return !!DevToolsManagerImpl::GetInstance()->GetDevToolsClientHostFor(this);
}
@@ -60,6 +68,10 @@ void DevToolsAgentHostImpl::DisconnectRenderViewHost() {}
void DevToolsAgentHostImpl::ConnectRenderViewHost(RenderViewHost* rvh) {}
+bool DevToolsAgentHostImpl::IsWorker() const {
+ return false;
+}
+
void DevToolsAgentHostImpl::NotifyCloseListener() {
if (close_listener_) {
scoped_refptr<DevToolsAgentHostImpl> protect(this);
diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h
index 9bd800dc39..d0fad668b4 100644
--- a/content/browser/devtools/devtools_agent_host_impl.h
+++ b/content/browser/devtools/devtools_agent_host_impl.h
@@ -53,6 +53,8 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
virtual void ConnectRenderViewHost(RenderViewHost* rvh) OVERRIDE;
+ virtual bool IsWorker() const OVERRIDE;
+
protected:
DevToolsAgentHostImpl();
virtual ~DevToolsAgentHostImpl();
diff --git a/content/browser/devtools/devtools_browser_target.cc b/content/browser/devtools/devtools_browser_target.cc
index 1d83728c67..4a24254185 100644
--- a/content/browser/devtools/devtools_browser_target.cc
+++ b/content/browser/devtools/devtools_browser_target.cc
@@ -44,7 +44,6 @@ void DevToolsBrowserTarget::RegisterDomainHandler(
void DevToolsBrowserTarget::HandleMessage(const std::string& data) {
DCHECK_EQ(message_loop_proxy_, base::MessageLoopProxy::current());
-
std::string error_response;
scoped_refptr<DevToolsProtocol::Command> command =
DevToolsProtocol::ParseCommand(data, &error_response);
diff --git a/content/browser/devtools/devtools_external_agent_proxy_impl.cc b/content/browser/devtools/devtools_external_agent_proxy_impl.cc
deleted file mode 100644
index 0513dc238b..0000000000
--- a/content/browser/devtools/devtools_external_agent_proxy_impl.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/devtools/devtools_external_agent_proxy_impl.h"
-
-#include "content/browser/devtools/devtools_agent_host_impl.h"
-#include "content/browser/devtools/devtools_manager_impl.h"
-#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
-
-namespace content {
-
-class DevToolsExternalAgentProxyImpl::ForwardingAgentHost
- : public DevToolsAgentHostImpl {
- public:
- ForwardingAgentHost(DevToolsExternalAgentProxyDelegate* delegate)
- : delegate_(delegate) {
- }
-
- void ConnectionClosed() {
- NotifyCloseListener();
- }
-
- private:
- virtual ~ForwardingAgentHost() {
- }
-
- // DevToolsAgentHostImpl implementation.
- virtual void Attach() OVERRIDE {
- delegate_->Attach();
- };
-
- virtual void Detach() OVERRIDE {
- delegate_->Detach();
- };
-
- virtual void DispatchOnInspectorBackend(const std::string& message) OVERRIDE {
- delegate_->SendMessageToBackend(message);
- }
-
- DevToolsExternalAgentProxyDelegate* delegate_;
-};
-
-//static
-DevToolsExternalAgentProxy* DevToolsExternalAgentProxy::Create(
- DevToolsExternalAgentProxyDelegate* delegate) {
- return new DevToolsExternalAgentProxyImpl(delegate);
-}
-
-DevToolsExternalAgentProxyImpl::DevToolsExternalAgentProxyImpl(
- DevToolsExternalAgentProxyDelegate* delegate)
- : agent_host_(new ForwardingAgentHost(delegate)) {
-}
-
-DevToolsExternalAgentProxyImpl::~DevToolsExternalAgentProxyImpl() {
-}
-
-scoped_refptr<DevToolsAgentHost> DevToolsExternalAgentProxyImpl::
- GetAgentHost() {
- return agent_host_;
-}
-
-void DevToolsExternalAgentProxyImpl::DispatchOnClientHost(
- const std::string& message) {
- DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
- agent_host_.get(), message);
-}
-
-void DevToolsExternalAgentProxyImpl::ConnectionClosed() {
- agent_host_->ConnectionClosed();
-}
-
-} // content
diff --git a/content/browser/devtools/devtools_external_agent_proxy_impl.h b/content/browser/devtools/devtools_external_agent_proxy_impl.h
deleted file mode 100644
index cf025ec7b4..0000000000
--- a/content/browser/devtools/devtools_external_agent_proxy_impl.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
-#define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
-
-#include "base/memory/ref_counted.h"
-#include "content/public/browser/devtools_external_agent_proxy.h"
-
-namespace content {
-
-class DevToolsExternalAgentProxyImpl
- : public DevToolsExternalAgentProxy {
- public:
- explicit DevToolsExternalAgentProxyImpl(
- DevToolsExternalAgentProxyDelegate* delegate);
- virtual ~DevToolsExternalAgentProxyImpl();
-
- // DevToolsExternalAgentProxy implementation.
- virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() OVERRIDE;
- virtual void DispatchOnClientHost(const std::string& message) OVERRIDE;
- virtual void ConnectionClosed() OVERRIDE;
-
- private:
- class ForwardingAgentHost;
-
- scoped_refptr<ForwardingAgentHost> agent_host_;
-
- DISALLOW_COPY_AND_ASSIGN(DevToolsExternalAgentProxyImpl);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_EXTERNAL_AGENT_PROXY_IMPL_H
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc
index 90f5cebbba..8678848564 100644
--- a/content/browser/devtools/devtools_http_handler_impl.cc
+++ b/content/browser/devtools/devtools_http_handler_impl.cc
@@ -234,7 +234,12 @@ static std::string GetMimeType(const std::string& filename) {
return "image/png";
} else if (EndsWith(filename, ".gif", false)) {
return "image/gif";
+ } else if (EndsWith(filename, ".json", false)) {
+ return "application/json";
}
+ LOG(ERROR) << "GetMimeType doesn't know mime type for: "
+ << filename
+ << " text/plain will be returned";
NOTREACHED();
return "text/plain";
}
@@ -322,7 +327,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest(
browser_target_ = new DevToolsBrowserTarget(server_.get(), connection_id);
browser_target_->RegisterDomainHandler(
devtools::Tracing::kName,
- new DevToolsTracingHandler(),
+ new DevToolsTracingHandler(DevToolsTracingHandler::Browser),
true /* handle on UI thread */);
browser_target_->RegisterDomainHandler(
TetheringHandler::kDomain,
diff --git a/content/browser/devtools/devtools_manager_impl.cc b/content/browser/devtools/devtools_manager_impl.cc
index 56b2dd7d2f..0c560404e9 100644
--- a/content/browser/devtools/devtools_manager_impl.cc
+++ b/content/browser/devtools/devtools_manager_impl.cc
@@ -13,7 +13,9 @@
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_client_host.h"
+#include "content/public/browser/devtools_manager_delegate.h"
namespace content {
@@ -27,7 +29,8 @@ DevToolsManagerImpl* DevToolsManagerImpl::GetInstance() {
return Singleton<DevToolsManagerImpl>::get();
}
-DevToolsManagerImpl::DevToolsManagerImpl() {
+DevToolsManagerImpl::DevToolsManagerImpl()
+ : delegate_(GetContentClient()->browser()->GetDevToolsManagerDelegate()) {
}
DevToolsManagerImpl::~DevToolsManagerImpl() {
@@ -35,6 +38,12 @@ DevToolsManagerImpl::~DevToolsManagerImpl() {
DCHECK(client_to_agent_host_.empty());
}
+void DevToolsManagerImpl::Inspect(BrowserContext* browser_context,
+ DevToolsAgentHost* agent_host) {
+ if (delegate_)
+ delegate_->Inspect(browser_context, agent_host);
+}
+
DevToolsClientHost* DevToolsManagerImpl::GetDevToolsClientHostFor(
DevToolsAgentHostImpl* agent_host_impl) {
AgentToClientHostMap::iterator it =
diff --git a/content/browser/devtools/devtools_manager_impl.h b/content/browser/devtools/devtools_manager_impl.h
index a14b2f1ca1..19b6918518 100644
--- a/content/browser/devtools/devtools_manager_impl.h
+++ b/content/browser/devtools/devtools_manager_impl.h
@@ -24,6 +24,8 @@ class Message;
namespace content {
+class BrowserContext;
+class DevToolsManagerDelegate;
class RenderViewHost;
// This class is a singleton that manages DevToolsClientHost instances and
@@ -43,9 +45,14 @@ class CONTENT_EXPORT DevToolsManagerImpl
DevToolsManagerImpl();
virtual ~DevToolsManagerImpl();
+ // Opens the inspector for |agent_host|.
+ void Inspect(BrowserContext* browser_context, DevToolsAgentHost* agent_host);
+
void DispatchOnInspectorFrontend(DevToolsAgentHost* agent_host,
const std::string& message);
+ DevToolsManagerDelegate* delegate() const { return delegate_.get(); }
+
// DevToolsManager implementation
virtual bool DispatchOnInspectorBackend(DevToolsClientHost* from,
const std::string& message) OVERRIDE;
@@ -96,6 +103,8 @@ class CONTENT_EXPORT DevToolsManagerImpl
typedef std::vector<const Callback*> CallbackContainer;
CallbackContainer callbacks_;
+ scoped_ptr<DevToolsManagerDelegate> delegate_;
+
DISALLOW_COPY_AND_ASSIGN(DevToolsManagerImpl);
};
diff --git a/content/browser/devtools/devtools_manager_unittest.cc b/content/browser/devtools/devtools_manager_unittest.cc
index aac9b6cbb9..75c527388b 100644
--- a/content/browser/devtools/devtools_manager_unittest.cc
+++ b/content/browser/devtools/devtools_manager_unittest.cc
@@ -216,7 +216,7 @@ class TestExternalAgentDelegate: public DevToolsExternalAgentProxyDelegate {
EXPECT_EQ(count, event_counter_[name]);
}
- virtual void Attach() OVERRIDE {
+ virtual void Attach(DevToolsExternalAgentProxy* proxy) OVERRIDE {
recordEvent("Attach");
};
@@ -239,12 +239,10 @@ class TestExternalAgentDelegate: public DevToolsExternalAgentProxyDelegate {
};
TEST_F(DevToolsManagerTest, TestExternalProxy) {
- TestExternalAgentDelegate delegate;
+ TestExternalAgentDelegate* delegate = new TestExternalAgentDelegate();
- scoped_ptr<DevToolsExternalAgentProxy> proxy(
- DevToolsExternalAgentProxy::Create(&delegate));
-
- scoped_refptr<DevToolsAgentHost> agent_host = proxy->GetAgentHost();
+ scoped_refptr<DevToolsAgentHost> agent_host =
+ DevToolsAgentHost::Create(delegate);
EXPECT_EQ(agent_host, DevToolsAgentHost::GetForId(agent_host->GetId()));
DevToolsManager* manager = DevToolsManager::GetInstance();
diff --git a/content/browser/devtools/devtools_protocol.cc b/content/browser/devtools/devtools_protocol.cc
index f3c393d2c0..c5d163e143 100644
--- a/content/browser/devtools/devtools_protocol.cc
+++ b/content/browser/devtools/devtools_protocol.cc
@@ -216,13 +216,20 @@ scoped_refptr<DevToolsProtocol::Command> DevToolsProtocol::ParseCommand(
std::string* error_response) {
scoped_ptr<base::DictionaryValue> command_dict(
ParseMessage(json, error_response));
+ return ParseCommand(command_dict.get(), error_response);
+}
+
+// static
+scoped_refptr<DevToolsProtocol::Command> DevToolsProtocol::ParseCommand(
+ base::DictionaryValue* command_dict,
+ std::string* error_response) {
if (!command_dict)
return NULL;
int id;
std::string method;
bool ok = command_dict->GetInteger(kIdParam, &id) && id >= 0;
- ok = ok && ParseMethod(command_dict.get(), &method);
+ ok = ok && ParseMethod(command_dict, &method);
if (!ok) {
scoped_refptr<Response> response =
new Response(kNoId, kErrorInvalidRequest, "No such method");
@@ -244,6 +251,28 @@ DevToolsProtocol::CreateCommand(
return new Command(id, method, params);
}
+//static
+scoped_refptr<DevToolsProtocol::Response>
+DevToolsProtocol::ParseResponse(
+ base::DictionaryValue* response_dict) {
+ int id;
+ if (!response_dict->GetInteger(kIdParam, &id))
+ id = kNoId;
+
+ const base::DictionaryValue* error_dict;
+ if (response_dict->GetDictionary(kErrorParam, &error_dict)) {
+ int error_code = kErrorInternalError;
+ response_dict->GetInteger(kErrorCodeParam, &error_code);
+ std::string error_message;
+ response_dict->GetString(kErrorMessageParam, &error_message);
+ return new Response(id, error_code, error_message);
+ }
+
+ const base::DictionaryValue* result = NULL;
+ response_dict->GetDictionary(kResultParam, &result);
+ return new Response(id, result ? result->DeepCopy() : NULL);
+}
+
// static
scoped_refptr<DevToolsProtocol::Notification>
DevToolsProtocol::ParseNotification(const std::string& json) {
diff --git a/content/browser/devtools/devtools_protocol.h b/content/browser/devtools/devtools_protocol.h
index 15b0a8087b..65a49254a1 100644
--- a/content/browser/devtools/devtools_protocol.h
+++ b/content/browser/devtools/devtools_protocol.h
@@ -157,25 +157,32 @@ class DevToolsProtocol {
DISALLOW_COPY_AND_ASSIGN(Handler);
};
+ CONTENT_EXPORT static base::DictionaryValue* ParseMessage(
+ const std::string& json,
+ std::string* error_response);
+
CONTENT_EXPORT static scoped_refptr<Command> ParseCommand(
const std::string& json,
std::string* error_response);
+ CONTENT_EXPORT static scoped_refptr<Command> ParseCommand(
+ base::DictionaryValue* command_dict,
+ std::string* error_response);
+
CONTENT_EXPORT static scoped_refptr<Command> CreateCommand(
int id,
const std::string& method,
base::DictionaryValue* params);
+ CONTENT_EXPORT static scoped_refptr<Response> ParseResponse(
+ base::DictionaryValue* response_dict);
+
static scoped_refptr<Notification> ParseNotification(
const std::string& json);
static scoped_refptr<Notification> CreateNotification(
const std::string& method, base::DictionaryValue* params);
- private:
- static base::DictionaryValue* ParseMessage(const std::string& json,
- std::string* error_response);
-
DevToolsProtocol() {}
~DevToolsProtocol() {}
};
diff --git a/content/browser/devtools/devtools_resources.gyp b/content/browser/devtools/devtools_resources.gyp
index c4c3a9d195..72ae706054 100644
--- a/content/browser/devtools/devtools_resources.gyp
+++ b/content/browser/devtools/devtools_resources.gyp
@@ -47,24 +47,27 @@
'action_name': 'devtools_protocol_constants',
'variables': {
'blink_protocol': '../../../third_party/WebKit/Source/devtools/protocol.json',
- 'browser_protocol': 'browser_protocol.json'
+ 'browser_protocol': 'browser_protocol.json',
+ 'generator': '../../public/browser/devtools_protocol_constants_generator.py',
+ 'package': 'content'
},
'inputs': [
'<(blink_protocol)',
'<(browser_protocol)',
- 'devtools_protocol_constants_generator.py',
+ '<(generator)',
],
'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.cc',
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.h'
+ '<(SHARED_INTERMEDIATE_DIR)/<(package)/browser/devtools/devtools_protocol_constants.cc',
+ '<(SHARED_INTERMEDIATE_DIR)/<(package)/browser/devtools/devtools_protocol_constants.h'
],
'action':[
'python',
- 'devtools_protocol_constants_generator.py',
+ '<(generator)',
+ '<(package)',
+ '<(SHARED_INTERMEDIATE_DIR)/<(package)/browser/devtools/devtools_protocol_constants.cc',
+ '<(SHARED_INTERMEDIATE_DIR)/<(package)/browser/devtools/devtools_protocol_constants.h',
'<(blink_protocol)',
'<(browser_protocol)',
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.cc',
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.h',
],
'message': 'Generating DevTools protocol constants from <(blink_protocol)'
}
diff --git a/content/browser/devtools/devtools_resources.target.darwin-arm.mk b/content/browser/devtools/devtools_resources.target.darwin-arm.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.darwin-arm.mk
+++ b/content/browser/devtools/devtools_resources.target.darwin-arm.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.darwin-arm64.mk b/content/browser/devtools/devtools_resources.target.darwin-arm64.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.darwin-arm64.mk
+++ b/content/browser/devtools/devtools_resources.target.darwin-arm64.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.darwin-mips.mk b/content/browser/devtools/devtools_resources.target.darwin-mips.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.darwin-mips.mk
+++ b/content/browser/devtools/devtools_resources.target.darwin-mips.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.darwin-x86.mk b/content/browser/devtools/devtools_resources.target.darwin-x86.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.darwin-x86.mk
+++ b/content/browser/devtools/devtools_resources.target.darwin-x86.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.darwin-x86_64.mk b/content/browser/devtools/devtools_resources.target.darwin-x86_64.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.darwin-x86_64.mk
+++ b/content/browser/devtools/devtools_resources.target.darwin-x86_64.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.linux-arm.mk b/content/browser/devtools/devtools_resources.target.linux-arm.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.linux-arm.mk
+++ b/content/browser/devtools/devtools_resources.target.linux-arm.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.linux-arm64.mk b/content/browser/devtools/devtools_resources.target.linux-arm64.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.linux-arm64.mk
+++ b/content/browser/devtools/devtools_resources.target.linux-arm64.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.linux-mips.mk b/content/browser/devtools/devtools_resources.target.linux-mips.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.linux-mips.mk
+++ b/content/browser/devtools/devtools_resources.target.linux-mips.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.linux-x86.mk b/content/browser/devtools/devtools_resources.target.linux-x86.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.linux-x86.mk
+++ b/content/browser/devtools/devtools_resources.target.linux-x86.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_resources.target.linux-x86_64.mk b/content/browser/devtools/devtools_resources.target.linux-x86_64.mk
index 6e1130047e..e45666f306 100644
--- a/content/browser/devtools/devtools_resources.target.linux-x86_64.mk
+++ b/content/browser/devtools/devtools_resources.target.linux-x86_64.mk
@@ -35,9 +35,9 @@ $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_consta
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/browser/devtools/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/protocol.json $(LOCAL_PATH)/content/browser/devtools/browser_protocol.json $(LOCAL_PATH)/content/public/browser/devtools_protocol_constants_generator.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating DevTools protocol constants from ../../../third_party/WebKit/Source/devtools/protocol.json ($@)"
- $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python devtools_protocol_constants_generator.py ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h"
+ $(hide)cd $(gyp_local_path)/content/browser/devtools; mkdir -p $(gyp_shared_intermediate_dir)/content/browser/devtools; python ../../public/browser/devtools_protocol_constants_generator.py content "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc" "$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h" ../../../third_party/WebKit/Source/devtools/protocol.json browser_protocol.json
$(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.h: $(gyp_shared_intermediate_dir)/content/browser/devtools/devtools_protocol_constants.cc ;
diff --git a/content/browser/devtools/devtools_tracing_handler.cc b/content/browser/devtools/devtools_tracing_handler.cc
index ffe02c1df2..b20c146eb8 100644
--- a/content/browser/devtools/devtools_tracing_handler.cc
+++ b/content/browser/devtools/devtools_tracing_handler.cc
@@ -46,8 +46,9 @@ void ReadFile(
} // namespace
-DevToolsTracingHandler::DevToolsTracingHandler()
- : weak_factory_(this) {
+DevToolsTracingHandler::DevToolsTracingHandler(
+ DevToolsTracingHandler::Target target)
+ : weak_factory_(this), target_(target) {
RegisterCommandHandler(devtools::Tracing::start::kName,
base::Bind(&DevToolsTracingHandler::OnStart,
base::Unretained(this)));
@@ -168,10 +169,26 @@ DevToolsTracingHandler::OnStart(
}
}
+ // If inspected target is a render process Tracing.start will be handled by
+ // tracing agent in the renderer.
+ if (target_ == Renderer) {
+ TracingController::GetInstance()->EnableRecording(
+ categories, options, TracingController::EnableRecordingDoneCallback());
+ return NULL;
+ }
+
TracingController::GetInstance()->EnableRecording(
- categories, options, TracingController::EnableRecordingDoneCallback());
+ categories, options,
+ base::Bind(&DevToolsTracingHandler::OnTracingStarted,
+ weak_factory_.GetWeakPtr(),
+ command));
- return NULL;
+ return command->AsyncResponsePromise();
+}
+
+void DevToolsTracingHandler::OnTracingStarted(
+ scoped_refptr<DevToolsProtocol::Command> command) {
+ SendAsyncResponse(command->SuccessResponse(NULL));
}
void DevToolsTracingHandler::OnBufferUsage(float usage) {
diff --git a/content/browser/devtools/devtools_tracing_handler.h b/content/browser/devtools/devtools_tracing_handler.h
index 1d0c543b18..c41f1ec979 100644
--- a/content/browser/devtools/devtools_tracing_handler.h
+++ b/content/browser/devtools/devtools_tracing_handler.h
@@ -20,13 +20,15 @@ namespace content {
// infrastructure.
class DevToolsTracingHandler : public DevToolsProtocol::Handler {
public:
- DevToolsTracingHandler();
+ enum Target { Browser, Renderer };
+ explicit DevToolsTracingHandler(Target target);
virtual ~DevToolsTracingHandler();
private:
void BeginReadingRecordingResult(const base::FilePath& path);
void ReadRecordingResult(const scoped_refptr<base::RefCountedString>& result);
void OnTraceDataCollected(const std::string& trace_fragment);
+ void OnTracingStarted(scoped_refptr<DevToolsProtocol::Command> command);
void OnBufferUsage(float usage);
scoped_refptr<DevToolsProtocol::Response> OnStart(
@@ -38,6 +40,7 @@ class DevToolsTracingHandler : public DevToolsProtocol::Handler {
base::WeakPtrFactory<DevToolsTracingHandler> weak_factory_;
scoped_ptr<base::Timer> buffer_usage_poll_timer_;
+ Target target_;
DISALLOW_COPY_AND_ASSIGN(DevToolsTracingHandler);
};
diff --git a/content/browser/devtools/embedded_worker_devtools_manager.cc b/content/browser/devtools/embedded_worker_devtools_manager.cc
index fb58355427..bface64728 100644
--- a/content/browser/devtools/embedded_worker_devtools_manager.cc
+++ b/content/browser/devtools/embedded_worker_devtools_manager.cc
@@ -34,6 +34,25 @@ bool SendMessageToWorker(
} // namespace
+EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier(
+ const ServiceWorkerContextCore* const service_worker_context,
+ int64 service_worker_version_id)
+ : service_worker_context_(service_worker_context),
+ service_worker_version_id_(service_worker_version_id) {
+}
+
+EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier(
+ const ServiceWorkerIdentifier& other)
+ : service_worker_context_(other.service_worker_context_),
+ service_worker_version_id_(other.service_worker_version_id_) {
+}
+
+bool EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::Matches(
+ const ServiceWorkerIdentifier& other) const {
+ return service_worker_context_ == other.service_worker_context_ &&
+ service_worker_version_id_ == other.service_worker_version_id_;
+}
+
EmbeddedWorkerDevToolsManager::WorkerInfo::WorkerInfo(
const SharedWorkerInstance& instance)
: shared_worker_instance_(new SharedWorkerInstance(instance)),
@@ -42,10 +61,8 @@ EmbeddedWorkerDevToolsManager::WorkerInfo::WorkerInfo(
}
EmbeddedWorkerDevToolsManager::WorkerInfo::WorkerInfo(
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope)
- : storage_partition_path_(new base::FilePath(storage_partition_path)),
- service_worker_scope_(new GURL(service_worker_scope)),
+ const ServiceWorkerIdentifier& service_worker_id)
+ : service_worker_id_(new ServiceWorkerIdentifier(service_worker_id)),
state_(WORKER_UNINSPECTED),
agent_host_(NULL) {
}
@@ -58,12 +75,10 @@ bool EmbeddedWorkerDevToolsManager::WorkerInfo::Matches(
}
bool EmbeddedWorkerDevToolsManager::WorkerInfo::Matches(
- const base::FilePath& other_storage_partition_path,
- const GURL& other_service_worker_scope) {
- if (!storage_partition_path_ || !service_worker_scope_)
+ const ServiceWorkerIdentifier& other) {
+ if (!service_worker_id_)
return false;
- return *storage_partition_path_ == other_storage_partition_path &&
- *service_worker_scope_ == other_service_worker_scope;
+ return service_worker_id_->Matches(other);
}
EmbeddedWorkerDevToolsManager::WorkerInfo::~WorkerInfo() {
@@ -80,6 +95,9 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost
host->AddRoute(worker_id_.second, this);
}
+ // DevToolsAgentHost override.
+ virtual bool IsWorker() const OVERRIDE { return true; }
+
// IPCDevToolsAgentHost implementation.
virtual void SendMessageToAgent(IPC::Message* message) OVERRIDE {
if (worker_attached_)
@@ -160,8 +178,10 @@ DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker(
return NULL;
WorkerInfo* info = it->second;
- if (info->state() != WORKER_UNINSPECTED)
+ if (info->state() != WORKER_UNINSPECTED &&
+ info->state() != WORKER_PAUSED_FOR_DEBUG_ON_START) {
return info->agent_host();
+ }
EmbeddedWorkerDevToolsAgentHost* agent_host =
new EmbeddedWorkerDevToolsAgentHost(id);
@@ -172,16 +192,15 @@ DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker(
DevToolsAgentHost*
EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForServiceWorker(
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope) {
- WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(
- storage_partition_path, service_worker_scope);
+ const ServiceWorkerIdentifier& service_worker_id) {
+ WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(service_worker_id);
if (it == workers_.end())
return NULL;
return GetDevToolsAgentHostForWorker(it->first.first, it->first.second);
}
-EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() {
+EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager()
+ : debug_service_worker_on_start_(false) {
}
EmbeddedWorkerDevToolsManager::~EmbeddedWorkerDevToolsManager() {
@@ -206,17 +225,16 @@ bool EmbeddedWorkerDevToolsManager::SharedWorkerCreated(
bool EmbeddedWorkerDevToolsManager::ServiceWorkerCreated(
int worker_process_id,
int worker_route_id,
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope) {
+ const ServiceWorkerIdentifier& service_worker_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
const WorkerId id(worker_process_id, worker_route_id);
- WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(
- storage_partition_path, service_worker_scope);
+ WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(service_worker_id);
if (it == workers_.end()) {
- scoped_ptr<WorkerInfo> info(
- new WorkerInfo(storage_partition_path, service_worker_scope));
+ scoped_ptr<WorkerInfo> info(new WorkerInfo(service_worker_id));
+ if (debug_service_worker_on_start_)
+ info->set_state(WORKER_PAUSED_FOR_DEBUG_ON_START);
workers_.set(id, info.Pass());
- return false;
+ return debug_service_worker_on_start_;
}
MoveToPausedState(id, it);
return true;
@@ -231,6 +249,7 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id,
WorkerInfo* info = it->second;
switch (info->state()) {
case WORKER_UNINSPECTED:
+ case WORKER_PAUSED_FOR_DEBUG_ON_START:
workers_.erase(it);
break;
case WORKER_INSPECTED: {
@@ -254,7 +273,7 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id,
case WORKER_TERMINATED:
NOTREACHED();
break;
- case WORKER_PAUSED: {
+ case WORKER_PAUSED_FOR_REATTACH: {
scoped_ptr<WorkerInfo> worker_info = workers_.take_and_erase(it);
worker_info->set_state(WORKER_TERMINATED);
const WorkerId old_id = worker_info->agent_host()->worker_id();
@@ -271,10 +290,16 @@ void EmbeddedWorkerDevToolsManager::WorkerContextStarted(int worker_process_id,
WorkerInfoMap::iterator it = workers_.find(id);
DCHECK(it != workers_.end());
WorkerInfo* info = it->second;
- if (info->state() != WORKER_PAUSED)
- return;
- info->agent_host()->ReattachToWorker(id);
- info->set_state(WORKER_INSPECTED);
+ if (info->state() == WORKER_PAUSED_FOR_DEBUG_ON_START) {
+ RenderProcessHost* rph = RenderProcessHost::FromID(worker_process_id);
+ scoped_refptr<DevToolsAgentHost> agent_host(
+ GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id));
+ DevToolsManagerImpl::GetInstance()->Inspect(rph->GetBrowserContext(),
+ agent_host.get());
+ } else if (info->state() == WORKER_PAUSED_FOR_REATTACH) {
+ info->agent_host()->ReattachToWorker(id);
+ info->set_state(WORKER_INSPECTED);
+ }
}
void EmbeddedWorkerDevToolsManager::RemoveInspectedWorkerData(
@@ -289,7 +314,7 @@ void EmbeddedWorkerDevToolsManager::RemoveInspectedWorkerData(
for (WorkerInfoMap::iterator it = workers_.begin(); it != workers_.end();
++it) {
if (it->second->agent_host() == agent_host) {
- DCHECK_EQ(WORKER_PAUSED, it->second->state());
+ DCHECK_EQ(WORKER_PAUSED_FOR_REATTACH, it->second->state());
SendMessageToWorker(
it->first,
new DevToolsAgentMsg_ResumeWorkerContext(it->first.second));
@@ -313,11 +338,10 @@ EmbeddedWorkerDevToolsManager::FindExistingSharedWorkerInfo(
EmbeddedWorkerDevToolsManager::WorkerInfoMap::iterator
EmbeddedWorkerDevToolsManager::FindExistingServiceWorkerInfo(
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope) {
+ const ServiceWorkerIdentifier& service_worker_id) {
WorkerInfoMap::iterator it = workers_.begin();
for (; it != workers_.end(); ++it) {
- if (it->second->Matches(storage_partition_path, service_worker_scope))
+ if (it->second->Matches(service_worker_id))
break;
}
return it;
@@ -328,7 +352,7 @@ void EmbeddedWorkerDevToolsManager::MoveToPausedState(
const WorkerInfoMap::iterator& it) {
DCHECK_EQ(WORKER_TERMINATED, it->second->state());
scoped_ptr<WorkerInfo> info = workers_.take_and_erase(it);
- info->set_state(WORKER_PAUSED);
+ info->set_state(WORKER_PAUSED_FOR_REATTACH);
workers_.set(id, info.Pass());
}
diff --git a/content/browser/devtools/embedded_worker_devtools_manager.h b/content/browser/devtools/embedded_worker_devtools_manager.h
index ea075740e8..3b15c8f209 100644
--- a/content/browser/devtools/embedded_worker_devtools_manager.h
+++ b/content/browser/devtools/embedded_worker_devtools_manager.h
@@ -7,7 +7,6 @@
#include "base/basictypes.h"
#include "base/containers/scoped_ptr_hash_map.h"
-#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
#include "base/memory/scoped_vector.h"
#include "base/memory/singleton.h"
@@ -15,10 +14,10 @@
#include "content/browser/shared_worker/shared_worker_instance.h"
#include "content/common/content_export.h"
-class GURL;
-
namespace content {
+
class DevToolsAgentHost;
+class ServiceWorkerContextCore;
// EmbeddedWorkerDevToolsManager is used instead of WorkerDevToolsManager when
// "enable-embedded-shared-worker" flag is set.
@@ -28,30 +27,50 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
typedef std::pair<int, int> WorkerId;
class EmbeddedWorkerDevToolsAgentHost;
+ class ServiceWorkerIdentifier {
+ public:
+ ServiceWorkerIdentifier(
+ const ServiceWorkerContextCore* const service_worker_context,
+ int64 service_worker_version_id);
+ explicit ServiceWorkerIdentifier(const ServiceWorkerIdentifier& other);
+ ~ServiceWorkerIdentifier() {}
+
+ bool Matches(const ServiceWorkerIdentifier& other) const;
+
+ private:
+ const ServiceWorkerContextCore* const service_worker_context_;
+ const int64 service_worker_version_id_;
+ };
+
// Returns the EmbeddedWorkerDevToolsManager singleton.
static EmbeddedWorkerDevToolsManager* GetInstance();
DevToolsAgentHost* GetDevToolsAgentHostForWorker(int worker_process_id,
int worker_route_id);
DevToolsAgentHost* GetDevToolsAgentHostForServiceWorker(
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope);
+ const ServiceWorkerIdentifier& service_worker_id);
- // Returns true when the worker must be paused on start.
+ // Returns true when the worker must be paused on start because a DevTool
+ // window for the same former SharedWorkerInstance is still opened.
bool SharedWorkerCreated(int worker_process_id,
int worker_route_id,
const SharedWorkerInstance& instance);
- // Returns true when the worker must be paused on start.
- // TODO(horo): Currently we identify ServiceWorkers with the path of storage
- // partition and the scope of ServiceWorker. Consider having a class like
- // SharedWorkerInstance instead of the pair.
+ // Returns true when the worker must be paused on start because a DevTool
+ // window for the same former ServiceWorkerIdentifier is still opened or
+ // debug-on-start is enabled in chrome://serviceworker-internals.
bool ServiceWorkerCreated(int worker_process_id,
int worker_route_id,
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope);
+ const ServiceWorkerIdentifier& service_worker_id);
void WorkerContextStarted(int worker_process_id, int worker_route_id);
void WorkerDestroyed(int worker_process_id, int worker_route_id);
+ void set_debug_service_worker_on_start(bool debug_on_start) {
+ debug_service_worker_on_start_ = debug_on_start;
+ }
+ bool debug_service_worker_on_start() const {
+ return debug_service_worker_on_start_;
+ }
+
private:
friend struct DefaultSingletonTraits<EmbeddedWorkerDevToolsManager>;
friend class EmbeddedWorkerDevToolsManagerTest;
@@ -62,7 +81,8 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
WORKER_UNINSPECTED,
WORKER_INSPECTED,
WORKER_TERMINATED,
- WORKER_PAUSED,
+ WORKER_PAUSED_FOR_DEBUG_ON_START,
+ WORKER_PAUSED_FOR_REATTACH,
};
class WorkerInfo {
@@ -70,8 +90,7 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
// Creates WorkerInfo for SharedWorker.
explicit WorkerInfo(const SharedWorkerInstance& instance);
// Creates WorkerInfo for ServiceWorker.
- WorkerInfo(const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope);
+ explicit WorkerInfo(const ServiceWorkerIdentifier& service_worker_id);
~WorkerInfo();
WorkerState state() { return state_; }
@@ -81,13 +100,11 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
agent_host_ = agent_host;
}
bool Matches(const SharedWorkerInstance& other);
- bool Matches(const base::FilePath& other_storage_partition_path,
- const GURL& other_service_worker_scope);
+ bool Matches(const ServiceWorkerIdentifier& other);
private:
scoped_ptr<SharedWorkerInstance> shared_worker_instance_;
- scoped_ptr<base::FilePath> storage_partition_path_;
- scoped_ptr<GURL> service_worker_scope_;
+ scoped_ptr<ServiceWorkerIdentifier> service_worker_id_;
WorkerState state_;
EmbeddedWorkerDevToolsAgentHost* agent_host_;
};
@@ -102,8 +119,7 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
WorkerInfoMap::iterator FindExistingSharedWorkerInfo(
const SharedWorkerInstance& instance);
WorkerInfoMap::iterator FindExistingServiceWorkerInfo(
- const base::FilePath& storage_partition_path,
- const GURL& service_worker_scope);
+ const ServiceWorkerIdentifier& service_worker_id);
void MoveToPausedState(const WorkerId& id, const WorkerInfoMap::iterator& it);
@@ -112,6 +128,8 @@ class CONTENT_EXPORT EmbeddedWorkerDevToolsManager {
WorkerInfoMap workers_;
+ bool debug_service_worker_on_start_;
+
DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerDevToolsManager);
};
diff --git a/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc b/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc
index 49a6144134..04cb2e1013 100644
--- a/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc
+++ b/content/browser/devtools/embedded_worker_devtools_manager_unittest.cc
@@ -230,7 +230,8 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) {
CheckWorkerState(2, 1, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
manager_->SharedWorkerCreated(2, 3, instance1);
CheckWorkerNotExist(2, 1);
- CheckWorkerState(2, 3, EmbeddedWorkerDevToolsManager::WORKER_PAUSED);
+ CheckWorkerState(
+ 2, 3, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH);
EXPECT_EQ(agent_host1.get(), manager_->GetDevToolsAgentHostForWorker(2, 3));
manager_->WorkerContextStarted(2, 3);
CheckWorkerState(2, 3, EmbeddedWorkerDevToolsManager::WORKER_INSPECTED);
@@ -243,7 +244,8 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) {
CheckWorkerState(2, 2, EmbeddedWorkerDevToolsManager::WORKER_TERMINATED);
manager_->SharedWorkerCreated(2, 4, instance2);
CheckWorkerNotExist(2, 2);
- CheckWorkerState(2, 4, EmbeddedWorkerDevToolsManager::WORKER_PAUSED);
+ CheckWorkerState(
+ 2, 4, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH);
EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 4));
manager_->WorkerDestroyed(2, 4);
CheckWorkerNotExist(2, 4);
@@ -252,7 +254,8 @@ TEST_F(EmbeddedWorkerDevToolsManagerTest, AttachTest) {
// Re-created -> ClientHostClosing -> Destroyed
manager_->SharedWorkerCreated(2, 5, instance2);
CheckWorkerNotExist(2, 2);
- CheckWorkerState(2, 5, EmbeddedWorkerDevToolsManager::WORKER_PAUSED);
+ CheckWorkerState(
+ 2, 5, EmbeddedWorkerDevToolsManager::WORKER_PAUSED_FOR_REATTACH);
EXPECT_EQ(agent_host2.get(), manager_->GetDevToolsAgentHostForWorker(2, 5));
ClientHostClosing(client_host2.get());
CheckWorkerCount(1);
diff --git a/content/browser/devtools/forwarding_agent_host.cc b/content/browser/devtools/forwarding_agent_host.cc
new file mode 100644
index 0000000000..f1524e1b7e
--- /dev/null
+++ b/content/browser/devtools/forwarding_agent_host.cc
@@ -0,0 +1,41 @@
+// 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 "content/browser/devtools/forwarding_agent_host.h"
+
+#include "content/browser/devtools/devtools_manager_impl.h"
+
+namespace content {
+
+ForwardingAgentHost::ForwardingAgentHost(
+ DevToolsExternalAgentProxyDelegate* delegate)
+ : delegate_(delegate) {
+}
+
+ForwardingAgentHost::~ForwardingAgentHost() {
+}
+
+void ForwardingAgentHost::DispatchOnClientHost(const std::string& message) {
+ DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
+ this, message);
+}
+
+void ForwardingAgentHost::ConnectionClosed() {
+ NotifyCloseListener();
+}
+
+void ForwardingAgentHost::Attach() {
+ delegate_->Attach(this);
+}
+
+void ForwardingAgentHost::Detach() {
+ delegate_->Detach();
+}
+
+void ForwardingAgentHost::DispatchOnInspectorBackend(
+ const std::string& message) {
+ delegate_->SendMessageToBackend(message);
+}
+
+} // content
diff --git a/content/browser/devtools/forwarding_agent_host.h b/content/browser/devtools/forwarding_agent_host.h
new file mode 100644
index 0000000000..81e4aed541
--- /dev/null
+++ b/content/browser/devtools/forwarding_agent_host.h
@@ -0,0 +1,39 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVTOOLS_FORWARDING_AGENT_HOST_H
+#define CONTENT_BROWSER_DEVTOOLS_FORWARDING_AGENT_HOST_H
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/browser/devtools/devtools_agent_host_impl.h"
+#include "content/public/browser/devtools_external_agent_proxy.h"
+#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
+
+namespace content {
+
+class ForwardingAgentHost
+ : public DevToolsAgentHostImpl,
+ public DevToolsExternalAgentProxy {
+ public:
+ ForwardingAgentHost(DevToolsExternalAgentProxyDelegate* delegate);
+
+ private:
+ virtual ~ForwardingAgentHost();
+
+ // DevToolsExternalAgentProxy implementation.
+ virtual void DispatchOnClientHost(const std::string& message) OVERRIDE;
+ virtual void ConnectionClosed() OVERRIDE;
+
+ // DevToolsAgentHostImpl implementation.
+ virtual void Attach() OVERRIDE;
+ virtual void Detach() OVERRIDE;
+ virtual void DispatchOnInspectorBackend(const std::string& message) OVERRIDE;
+
+ scoped_ptr<DevToolsExternalAgentProxyDelegate> delegate_;
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_DEVTOOLS_FORWARDING_AGENT_HOST_H
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
index f3eaf3a76b..7d948d61fd 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc
@@ -20,6 +20,7 @@
#include "content/common/devtools_messages.h"
#include "content/common/view_messages.h"
#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/devtools_manager_delegate.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_widget_host_iterator.h"
@@ -160,13 +161,12 @@ bool RenderViewDevToolsAgentHost::DispatchIPCMessage(
return agent_host && agent_host->DispatchIPCMessage(message);
}
-RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(
- RenderViewHost* rvh)
+RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(RenderViewHost* rvh)
: render_view_host_(NULL),
overrides_handler_(new RendererOverridesHandler(this)),
- tracing_handler_(new DevToolsTracingHandler()),
- power_handler_(new DevToolsPowerHandler())
- {
+ tracing_handler_(
+ new DevToolsTracingHandler(DevToolsTracingHandler::Renderer)),
+ power_handler_(new DevToolsPowerHandler()) {
SetRenderViewHost(rvh);
DevToolsProtocol::Notifier notifier(base::Bind(
&RenderViewDevToolsAgentHost::OnDispatchOnInspectorFrontend,
@@ -185,12 +185,26 @@ RenderViewHost* RenderViewDevToolsAgentHost::GetRenderViewHost() {
void RenderViewDevToolsAgentHost::DispatchOnInspectorBackend(
const std::string& message) {
std::string error_message;
+
+ scoped_ptr<base::DictionaryValue> message_dict(
+ DevToolsProtocol::ParseMessage(message, &error_message));
scoped_refptr<DevToolsProtocol::Command> command =
- DevToolsProtocol::ParseCommand(message, &error_message);
+ DevToolsProtocol::ParseCommand(message_dict.get(), &error_message);
if (command) {
- scoped_refptr<DevToolsProtocol::Response> overridden_response =
- overrides_handler_->HandleCommand(command);
+ scoped_refptr<DevToolsProtocol::Response> overridden_response;
+
+ DevToolsManagerDelegate* delegate =
+ DevToolsManagerImpl::GetInstance()->delegate();
+ if (delegate) {
+ scoped_ptr<base::DictionaryValue> overridden_response_value(
+ delegate->HandleCommand(this, message_dict.get()));
+ if (overridden_response_value)
+ overridden_response = DevToolsProtocol::ParseResponse(
+ overridden_response_value.get());
+ }
+ if (!overridden_response)
+ overridden_response = overrides_handler_->HandleCommand(command);
if (!overridden_response)
overridden_response = tracing_handler_->HandleCommand(command);
if (!overridden_response)
diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc
index 1fd66da060..5f620084cf 100644
--- a/content/browser/devtools/renderer_overrides_handler.cc
+++ b/content/browser/devtools/renderer_overrides_handler.cc
@@ -43,6 +43,8 @@
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/gfx/codec/jpeg_codec.h"
#include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/display.h"
+#include "ui/gfx/screen.h"
#include "ui/gfx/size_conversions.h"
#include "ui/snapshot/snapshot.h"
#include "url/gurl.h"
@@ -204,13 +206,16 @@ void RendererOverridesHandler::InnerSwapCompositorFrame() {
double scale = 1;
ParseCaptureParameters(screencast_command_.get(), &format, &quality, &scale);
- RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
- host->GetView());
+ const gfx::Display& display =
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
+ float device_scale_factor = display.device_scale_factor();
gfx::Rect view_bounds = host->GetView()->GetViewBounds();
- gfx::Size snapshot_size = gfx::ToFlooredSize(
- gfx::ScaleSize(view_bounds.size(), scale));
+ gfx::Size snapshot_size(gfx::ToCeiledSize(
+ gfx::ScaleSize(view_bounds.size(), scale / device_scale_factor)));
+ RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
+ host->GetView());
view->CopyFromCompositingSurface(
view_bounds, snapshot_size,
base::Bind(&RendererOverridesHandler::ScreencastFrameCaptured,
diff --git a/content/browser/devtools/tethering_handler.cc b/content/browser/devtools/tethering_handler.cc
index d3e787d0c0..9b3b7fa005 100644
--- a/content/browser/devtools/tethering_handler.cc
+++ b/content/browser/devtools/tethering_handler.cc
@@ -149,7 +149,7 @@ class SocketPump : public net::StreamListenSocket::Delegate {
}
void SelfDestruct() {
- if (wire_buffer_->offset() != wire_buffer_size_) {
+ if (wire_buffer_ && wire_buffer_->offset() != wire_buffer_size_) {
pending_destruction_ = true;
return;
}
diff --git a/content/browser/devtools/worker_devtools_message_filter.cc b/content/browser/devtools/worker_devtools_message_filter.cc
index 2c72dfda08..23c068b540 100644
--- a/content/browser/devtools/worker_devtools_message_filter.cc
+++ b/content/browser/devtools/worker_devtools_message_filter.cc
@@ -21,18 +21,16 @@ WorkerDevToolsMessageFilter::~WorkerDevToolsMessageFilter() {
}
bool WorkerDevToolsMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
current_routing_id_ = message.routing_id();
- IPC_BEGIN_MESSAGE_MAP_EX(WorkerDevToolsMessageFilter, message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(WorkerDevToolsMessageFilter, message)
IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend,
OnDispatchOnInspectorFrontend)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_SaveAgentRuntimeState,
OnSaveAgentRumtimeState)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/devtools/worker_devtools_message_filter.h b/content/browser/devtools/worker_devtools_message_filter.h
index 73ba6f8442..c80658e8db 100644
--- a/content/browser/devtools/worker_devtools_message_filter.h
+++ b/content/browser/devtools/worker_devtools_message_filter.h
@@ -18,8 +18,7 @@ class WorkerDevToolsMessageFilter : public BrowserMessageFilter {
virtual ~WorkerDevToolsMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// Message handlers.
void OnDispatchOnInspectorFrontend(const std::string& message);
void OnSaveAgentRumtimeState(const std::string& state);
diff --git a/content/browser/dom_storage/dom_storage_message_filter.cc b/content/browser/dom_storage/dom_storage_message_filter.cc
index 282b71d94d..1ed4dd8890 100644
--- a/content/browser/dom_storage/dom_storage_message_filter.cc
+++ b/content/browser/dom_storage/dom_storage_message_filter.cc
@@ -68,15 +68,14 @@ base::TaskRunner* DOMStorageMessageFilter::OverrideTaskRunnerForMessage(
return NULL;
}
-bool DOMStorageMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool DOMStorageMessageFilter::OnMessageReceived(const IPC::Message& message) {
if (IPC_MESSAGE_CLASS(message) != DOMStorageMsgStart)
return false;
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
DCHECK(host_.get());
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(DOMStorageMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(DOMStorageMessageFilter, message)
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_OpenStorageArea, OnOpenStorageArea)
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_CloseStorageArea, OnCloseStorageArea)
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_LoadStorageArea, OnLoadStorageArea)
diff --git a/content/browser/dom_storage/dom_storage_message_filter.h b/content/browser/dom_storage/dom_storage_message_filter.h
index 3c82418842..dc63c1c165 100644
--- a/content/browser/dom_storage/dom_storage_message_filter.h
+++ b/content/browser/dom_storage/dom_storage_message_filter.h
@@ -44,8 +44,7 @@ class DOMStorageMessageFilter
virtual void OnFilterRemoved() OVERRIDE;
virtual base::TaskRunner* OverrideTaskRunnerForMessage(
const IPC::Message& message) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// Message Handlers.
void OnOpenStorageArea(int connection_id, int64 namespace_id,
diff --git a/content/browser/download/base_file.cc b/content/browser/download/base_file.cc
index 405dc10e55..362f64ea1e 100644
--- a/content/browser/download/base_file.cc
+++ b/content/browser/download/base_file.cc
@@ -185,9 +185,10 @@ void BaseFile::Cancel() {
if (!full_path_.empty()) {
bound_net_log_.AddEvent(net::NetLog::TYPE_DOWNLOAD_FILE_DELETED);
-
base::DeleteFile(full_path_, false);
}
+
+ Detach();
}
void BaseFile::Finish() {
diff --git a/content/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc
index 3788c613ec..8b45ce9ca0 100644
--- a/content/browser/download/base_file_unittest.cc
+++ b/content/browser/download/base_file_unittest.cc
@@ -619,4 +619,21 @@ TEST_F(BaseFileTest, CreatedInDefaultDirectory) {
base_file_->Finish();
}
+TEST_F(BaseFileTest, NoDoubleDeleteAfterCancel) {
+ ASSERT_TRUE(InitializeFile());
+ base::FilePath full_path = base_file_->full_path();
+ ASSERT_FALSE(full_path.empty());
+ ASSERT_TRUE(base::PathExists(full_path));
+
+ base_file_->Cancel();
+ ASSERT_FALSE(base::PathExists(full_path));
+
+ const char kData[] = "hello";
+ const int kDataLength = static_cast<int>(arraysize(kData) - 1);
+ ASSERT_EQ(kDataLength, base::WriteFile(full_path, kData, kDataLength));
+ // The file that we created here should stick around when the BaseFile is
+ // destroyed during TearDown.
+ expect_file_survives_ = true;
+}
+
} // namespace content
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc
index 9e8cab2fb8..8f35b63e57 100644
--- a/content/browser/download/download_browsertest.cc
+++ b/content/browser/download/download_browsertest.cc
@@ -1797,4 +1797,18 @@ IN_PROC_BROWSER_TEST_F(DownloadContentTest,
ASSERT_TRUE(origin_two.ShutdownAndWaitUntilComplete());
}
+// The file empty.bin is served with a MIME type of application/octet-stream.
+// The content body is empty. Make sure this case is handled properly and we
+// don't regress on http://crbug.com/320394.
+IN_PROC_BROWSER_TEST_F(DownloadContentTest, DownloadGZipWithNoContent) {
+ EmbeddedTestServer test_server;
+ ASSERT_TRUE(test_server.InitializeAndWaitUntilReady());
+
+ GURL url = test_server.GetURL("/empty.bin");
+ test_server.ServeFilesFromDirectory(GetTestFilePath("download", ""));
+
+ NavigateToURLAndWaitForDownload(shell(), url, DownloadItem::COMPLETE);
+ // That's it. This should work without crashing.
+}
+
} // namespace content
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index 2ee130da8b..091a7f8e6b 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -418,22 +418,21 @@ class MockBrowserContext : public BrowserContext {
int render_view_id,
int bridge_id,
const GURL& requesting_frame));
- MOCK_METHOD6(RequestProtectedMediaIdentifierPermission,
+ MOCK_METHOD4(RequestProtectedMediaIdentifierPermission,
void(int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback&
callback));
- MOCK_METHOD1(CancelProtectedMediaIdentifierPermissionRequests,
- void(int group_id));
+ MOCK_METHOD3(CancelProtectedMediaIdentifierPermissionRequests,
+ void(int render_process_id,
+ int render_view_id,
+ const GURL& origin));
MOCK_METHOD0(GetResourceContext, ResourceContext*());
MOCK_METHOD0(GetDownloadManagerDelegate, DownloadManagerDelegate*());
MOCK_METHOD0(GetGeolocationPermissionContext,
GeolocationPermissionContext* ());
- MOCK_METHOD0(GetGuestManagerDelegate,
- BrowserPluginGuestManagerDelegate* ());
+ MOCK_METHOD0(GetGuestManager, BrowserPluginGuestManager* ());
MOCK_METHOD0(GetSpecialStoragePolicy, quota::SpecialStoragePolicy*());
};
diff --git a/content/browser/download/download_resource_handler.cc b/content/browser/download/download_resource_handler.cc
index 32f372923b..0a19163c9c 100644
--- a/content/browser/download/download_resource_handler.cc
+++ b/content/browser/download/download_resource_handler.cc
@@ -135,14 +135,12 @@ DownloadResourceHandler::DownloadResourceHandler(
"Download in progress");
}
-bool DownloadResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
+bool DownloadResourceHandler::OnUploadProgress(uint64 position,
uint64 size) {
return true;
}
bool DownloadResourceHandler::OnRequestRedirected(
- int request_id,
const GURL& url,
ResourceResponse* response,
bool* defer) {
@@ -154,7 +152,6 @@ bool DownloadResourceHandler::OnRequestRedirected(
// Send the download creation information to the download thread.
bool DownloadResourceHandler::OnResponseStarted(
- int request_id,
ResourceResponse* response,
bool* defer) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -162,8 +159,7 @@ bool DownloadResourceHandler::OnResponseStarted(
DCHECK(!on_response_started_called_);
on_response_started_called_ = true;
- VLOG(20) << __FUNCTION__ << "()" << DebugString()
- << " request_id = " << request_id;
+ VLOG(20) << __FUNCTION__ << "()" << DebugString();
download_start_time_ = base::TimeTicks::Now();
// If it's a download, we don't want to poison the cache with it.
@@ -279,22 +275,18 @@ void DownloadResourceHandler::CallStartedCB(
started_cb_.Reset();
}
-bool DownloadResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool DownloadResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool DownloadResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool DownloadResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
return true;
}
// Create a new buffer, which will be handed to the download thread for file
// writing and deletion.
-bool DownloadResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool DownloadResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -309,8 +301,7 @@ bool DownloadResourceHandler::OnWillRead(int request_id,
}
// Pass the buffer to the download file writer.
-bool DownloadResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool DownloadResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
DCHECK(read_buffer_.get());
@@ -350,14 +341,12 @@ bool DownloadResourceHandler::OnReadCompleted(int request_id, int bytes_read,
}
void DownloadResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
int response_code = status.is_success() ? request()->GetResponseCode() : 0;
VLOG(20) << __FUNCTION__ << "()" << DebugString()
- << " request_id = " << request_id
<< " status.status() = " << status.status()
<< " status.error() = " << status.error()
<< " response_code = " << response_code;
@@ -466,9 +455,7 @@ void DownloadResourceHandler::OnResponseCompleted(
read_buffer_ = NULL;
}
-void DownloadResourceHandler::OnDataDownloaded(
- int request_id,
- int bytes_downloaded) {
+void DownloadResourceHandler::OnDataDownloaded(int bytes_downloaded) {
NOTREACHED();
}
diff --git a/content/browser/download/download_resource_handler.h b/content/browser/download/download_resource_handler.h
index fe1f64b355..de6efef2fe 100644
--- a/content/browser/download/download_resource_handler.h
+++ b/content/browser/download/download_resource_handler.h
@@ -15,7 +15,6 @@
#include "content/public/browser/download_manager.h"
#include "content/public/browser/download_save_info.h"
#include "content/public/browser/download_url_parameters.h"
-#include "content/public/browser/global_request_id.h"
namespace net {
class URLRequest;
@@ -47,47 +46,36 @@ class CONTENT_EXPORT DownloadResourceHandler
const DownloadUrlParameters::OnStartedCallback& started_cb,
scoped_ptr<DownloadSaveInfo> save_info);
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(int request_id,
- const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE;
// Send the download creation information to the download thread.
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
// Create a new buffer, which will be handed to the download thread for file
// writing and deletion.
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id, int bytes_read,
- bool* defer) OVERRIDE;
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
// N/A to this flavor of DownloadHandler.
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
void PauseRequest();
void ResumeRequest();
diff --git a/content/browser/download/save_file_resource_handler.cc b/content/browser/download/save_file_resource_handler.cc
index 18abc7dfd7..e1fc32b7fc 100644
--- a/content/browser/download/save_file_resource_handler.cc
+++ b/content/browser/download/save_file_resource_handler.cc
@@ -15,11 +15,12 @@
namespace content {
-SaveFileResourceHandler::SaveFileResourceHandler(int render_process_host_id,
+SaveFileResourceHandler::SaveFileResourceHandler(net::URLRequest* request,
+ int render_process_host_id,
int render_view_id,
const GURL& url,
SaveFileManager* manager)
- : ResourceHandler(NULL),
+ : ResourceHandler(request),
save_id_(-1),
render_process_id_(render_process_host_id),
render_view_id_(render_view_id),
@@ -31,14 +32,11 @@ SaveFileResourceHandler::SaveFileResourceHandler(int render_process_host_id,
SaveFileResourceHandler::~SaveFileResourceHandler() {
}
-bool SaveFileResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
+bool SaveFileResourceHandler::OnUploadProgress(uint64 position, uint64 size) {
return true;
}
bool SaveFileResourceHandler::OnRequestRedirected(
- int request_id,
const GURL& url,
ResourceResponse* response,
bool* defer) {
@@ -46,10 +44,8 @@ bool SaveFileResourceHandler::OnRequestRedirected(
return true;
}
-bool SaveFileResourceHandler::OnResponseStarted(
- int request_id,
- ResourceResponse* response,
- bool* defer) {
+bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response,
+ bool* defer) {
save_id_ = save_manager_->GetNextId();
// |save_manager_| consumes (deletes):
SaveFileCreateInfo* info = new SaveFileCreateInfo;
@@ -59,7 +55,7 @@ bool SaveFileResourceHandler::OnResponseStarted(
info->save_id = save_id_;
info->render_process_id = render_process_id_;
info->render_view_id = render_view_id_;
- info->request_id = request_id;
+ info->request_id = GetRequestID();
info->content_disposition = content_disposition_;
info->save_source = SaveFileCreateInfo::SAVE_FILE_FROM_NET;
BrowserThread::PostTask(
@@ -68,20 +64,16 @@ bool SaveFileResourceHandler::OnResponseStarted(
return true;
}
-bool SaveFileResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool SaveFileResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool SaveFileResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
return true;
}
-bool SaveFileResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
DCHECK(buf && buf_size);
@@ -93,8 +85,7 @@ bool SaveFileResourceHandler::OnWillRead(int request_id,
return true;
}
-bool SaveFileResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
DCHECK(read_buffer_.get());
// We are passing ownership of this buffer to the save file manager.
scoped_refptr<net::IOBuffer> buffer;
@@ -107,7 +98,6 @@ bool SaveFileResourceHandler::OnReadCompleted(int request_id, int bytes_read,
}
void SaveFileResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -118,9 +108,7 @@ void SaveFileResourceHandler::OnResponseCompleted(
read_buffer_ = NULL;
}
-void SaveFileResourceHandler::OnDataDownloaded(
- int request_id,
- int bytes_downloaded) {
+void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) {
NOTREACHED();
}
diff --git a/content/browser/download/save_file_resource_handler.h b/content/browser/download/save_file_resource_handler.h
index fceaee927c..5adbc5c229 100644
--- a/content/browser/download/save_file_resource_handler.h
+++ b/content/browser/download/save_file_resource_handler.h
@@ -11,63 +11,57 @@
#include "content/browser/loader/resource_handler.h"
#include "url/gurl.h"
+namespace net {
+class URLRequest;
+}
+
namespace content {
class SaveFileManager;
// Forwards data to the save thread.
class SaveFileResourceHandler : public ResourceHandler {
public:
- SaveFileResourceHandler(int render_process_host_id,
+ SaveFileResourceHandler(net::URLRequest* request,
+ int render_process_host_id,
int render_view_id,
const GURL& url,
SaveFileManager* manager);
virtual ~SaveFileResourceHandler();
// ResourceHandler Implementation:
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
// Saves the redirected URL to final_url_, we need to use the original
// URL to match original request.
- virtual bool OnRequestRedirected(int request_id,
- const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE;
// Sends the download creation information to the download thread.
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
// Creates a new buffer, which will be handed to the download thread for file
// writing and deletion.
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
// Passes the buffer to the download file writer.
- virtual bool OnReadCompleted(int request_id, int bytes_read,
- bool* defer) OVERRIDE;
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
// N/A to this flavor of SaveFileResourceHandler.
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
// If the content-length header is not present (or contains something other
// than numbers), StringToInt64 returns 0, which indicates 'unknown size' and
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc
index b60c354a4b..f98db115ac 100644
--- a/content/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -38,12 +38,12 @@
#include "content/public/browser/notification_types.h"
#include "content/public/browser/resource_context.h"
#include "content/public/browser/web_contents.h"
-#include "content/public/common/url_constants.h"
#include "net/base/filename_util.h"
#include "net/base/io_buffer.h"
#include "net/base/mime_util.h"
#include "net/url_request/url_request_context.h"
#include "third_party/WebKit/public/web/WebPageSerializerClient.h"
+#include "url/url_constants.h"
using base::Time;
using blink::WebPageSerializerClient;
@@ -1222,7 +1222,7 @@ base::FilePath SavePackage::GetSuggestedNameForSaveAs(
// similarly).
if (title_ == net::FormatUrl(page_url_, accept_langs)) {
std::string url_path;
- if (!page_url_.SchemeIs(kDataScheme)) {
+ if (!page_url_.SchemeIs(url::kDataScheme)) {
std::vector<std::string> url_parts;
base::SplitString(page_url_.path(), '/', &url_parts);
if (!url_parts.empty()) {
diff --git a/content/browser/fileapi/blob_url_request_job_unittest.cc b/content/browser/fileapi/blob_url_request_job_unittest.cc
index dd1ad1a6ac..5ce4312143 100644
--- a/content/browser/fileapi/blob_url_request_job_unittest.cc
+++ b/content/browser/fileapi/blob_url_request_job_unittest.cc
@@ -12,9 +12,9 @@
#include "base/numerics/safe_conversions.h"
#include "base/run_loop.h"
#include "base/time/time.h"
+#include "content/browser/fileapi/mock_url_request_delegate.h"
#include "content/public/test/async_file_test_helper.h"
#include "content/public/test/test_file_system_context.h"
-#include "net/base/io_buffer.h"
#include "net/base/request_priority.h"
#include "net/http/http_byte_range.h"
#include "net/http/http_request_headers.h"
@@ -54,70 +54,6 @@ const fileapi::FileSystemType kFileSystemType =
class BlobURLRequestJobTest : public testing::Test {
public:
-
- // Test Harness -------------------------------------------------------------
- // TODO(jianli): share this test harness with AppCacheURLRequestJobTest
-
- class MockURLRequestDelegate : public net::URLRequest::Delegate {
- public:
- MockURLRequestDelegate()
- : received_data_(new net::IOBuffer(kBufferSize)) {}
-
- virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE {
- if (request->status().is_success()) {
- EXPECT_TRUE(request->response_headers());
- ReadSome(request);
- } else {
- RequestComplete();
- }
- }
-
- virtual void OnReadCompleted(net::URLRequest* request,
- int bytes_read) OVERRIDE {
- if (bytes_read > 0)
- ReceiveData(request, bytes_read);
- else
- RequestComplete();
- }
-
- const std::string& response_data() const { return response_data_; }
-
- private:
- void ReadSome(net::URLRequest* request) {
- if (!request->is_pending()) {
- RequestComplete();
- return;
- }
-
- int bytes_read = 0;
- if (!request->Read(received_data_.get(), kBufferSize, &bytes_read)) {
- if (!request->status().is_io_pending()) {
- RequestComplete();
- }
- return;
- }
-
- ReceiveData(request, bytes_read);
- }
-
- void ReceiveData(net::URLRequest* request, int bytes_read) {
- if (bytes_read) {
- response_data_.append(received_data_->data(),
- static_cast<size_t>(bytes_read));
- ReadSome(request);
- } else {
- RequestComplete();
- }
- }
-
- void RequestComplete() {
- base::MessageLoop::current()->Quit();
- }
-
- scoped_refptr<net::IOBuffer> received_data_;
- std::string response_data_;
- };
-
// A simple ProtocolHandler implementation to create BlobURLRequestJob.
class MockProtocolHandler :
public net::URLRequestJobFactory::ProtocolHandler {
diff --git a/content/browser/fileapi/browser_file_system_helper.cc b/content/browser/fileapi/browser_file_system_helper.cc
index f7c9183476..d89d6cab25 100644
--- a/content/browser/fileapi/browser_file_system_helper.cc
+++ b/content/browser/fileapi/browser_file_system_helper.cc
@@ -17,7 +17,7 @@
#include "content/public/browser/content_browser_client.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
-#include "content/public/common/url_constants.h"
+#include "url/url_constants.h"
#include "webkit/browser/fileapi/external_mount_points.h"
#include "webkit/browser/fileapi/file_permission_policy.h"
#include "webkit/browser/fileapi/file_system_backend.h"
@@ -41,7 +41,7 @@ FileSystemOptions CreateBrowserFileSystemOptions(bool is_incognito) {
&additional_allowed_schemes);
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAllowFileAccessFromFiles)) {
- additional_allowed_schemes.push_back(kFileScheme);
+ additional_allowed_schemes.push_back(url::kFileScheme);
}
return FileSystemOptions(profile_mode, additional_allowed_schemes, NULL);
}
diff --git a/content/browser/fileapi/chrome_blob_storage_context.cc b/content/browser/fileapi/chrome_blob_storage_context.cc
index 97151a83f6..fce0bed906 100644
--- a/content/browser/fileapi/chrome_blob_storage_context.cc
+++ b/content/browser/fileapi/chrome_blob_storage_context.cc
@@ -5,8 +5,11 @@
#include "content/browser/fileapi/chrome_blob_storage_context.h"
#include "base/bind.h"
+#include "base/guid.h"
+#include "content/public/browser/blob_handle.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
+#include "webkit/browser/blob/blob_data_handle.h"
#include "webkit/browser/blob/blob_storage_context.h"
using base::UserDataAdapter;
@@ -14,6 +17,26 @@ using webkit_blob::BlobStorageContext;
namespace content {
+namespace {
+
+class BlobHandleImpl : public BlobHandle {
+ public:
+ BlobHandleImpl(scoped_ptr<webkit_blob::BlobDataHandle> handle)
+ : handle_(handle.Pass()) {
+ }
+
+ virtual ~BlobHandleImpl() {}
+
+ virtual std::string GetUUID() OVERRIDE {
+ return handle_->uuid();
+ }
+
+ private:
+ scoped_ptr<webkit_blob::BlobDataHandle> handle_;
+};
+
+} // namespace
+
static const char* kBlobStorageContextKeyName = "content_blob_storage_context";
ChromeBlobStorageContext::ChromeBlobStorageContext() {}
@@ -43,6 +66,25 @@ void ChromeBlobStorageContext::InitializeOnIOThread() {
context_.reset(new BlobStorageContext());
}
+scoped_ptr<BlobHandle> ChromeBlobStorageContext::CreateMemoryBackedBlob(
+ const char* data, size_t length) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ std::string uuid(base::GenerateGUID());
+ scoped_refptr<webkit_blob::BlobData> blob_data =
+ new webkit_blob::BlobData(uuid);
+ blob_data->AppendData(data, length);
+
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle =
+ context_->AddFinishedBlob(blob_data.get());
+ if (!blob_data_handle)
+ return scoped_ptr<BlobHandle>();
+
+ scoped_ptr<BlobHandle> blob_handle(
+ new BlobHandleImpl(blob_data_handle.Pass()));
+ return blob_handle.Pass();
+}
+
ChromeBlobStorageContext::~ChromeBlobStorageContext() {}
void ChromeBlobStorageContext::DeleteOnCorrectThread() const {
diff --git a/content/browser/fileapi/chrome_blob_storage_context.h b/content/browser/fileapi/chrome_blob_storage_context.h
index 641e235300..1dccd99faf 100644
--- a/content/browser/fileapi/chrome_blob_storage_context.h
+++ b/content/browser/fileapi/chrome_blob_storage_context.h
@@ -15,6 +15,7 @@ class BlobStorageContext;
}
namespace content {
+class BlobHandle;
class BrowserContext;
struct ChromeBlobStorageContextDeleter;
@@ -40,6 +41,10 @@ class CONTENT_EXPORT ChromeBlobStorageContext
return context_.get();
}
+ // Returns a NULL scoped_ptr on failure.
+ scoped_ptr<BlobHandle> CreateMemoryBackedBlob(const char* data,
+ size_t length);
+
protected:
virtual ~ChromeBlobStorageContext();
diff --git a/content/browser/fileapi/file_system_dir_url_request_job_unittest.cc b/content/browser/fileapi/file_system_dir_url_request_job_unittest.cc
index 29eb704668..8741cff294 100644
--- a/content/browser/fileapi/file_system_dir_url_request_job_unittest.cc
+++ b/content/browser/fileapi/file_system_dir_url_request_job_unittest.cc
@@ -13,7 +13,6 @@
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
@@ -72,6 +71,39 @@ bool TestAutoMountForURLRequest(
return true;
}
+class FileSystemDirURLRequestJobFactory : public net::URLRequestJobFactory {
+ public:
+ FileSystemDirURLRequestJobFactory(const std::string& storage_domain,
+ FileSystemContext* context)
+ : storage_domain_(storage_domain), file_system_context_(context) {
+ }
+
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE {
+ return new fileapi::FileSystemDirURLRequestJob(
+ request, network_delegate, storage_domain_, file_system_context_);
+ }
+
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE {
+ return true;
+ }
+
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE {
+ return true;
+ }
+
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE {
+ return false;
+ }
+
+ private:
+ std::string storage_domain_;
+ FileSystemContext* file_system_context_;
+};
+
+
} // namespace
class FileSystemDirURLRequestJobTest : public testing::Test {
@@ -93,18 +125,12 @@ class FileSystemDirURLRequestJobTest : public testing::Test {
base::Bind(&FileSystemDirURLRequestJobTest::OnOpenFileSystem,
weak_factory_.GetWeakPtr()));
base::RunLoop().RunUntilIdle();
-
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- "filesystem", &FileSystemDirURLRequestJobFactory);
}
virtual void TearDown() OVERRIDE {
// NOTE: order matters, request must die before delegate
request_.reset(NULL);
delegate_.reset(NULL);
-
- net::URLRequest::Deprecated::RegisterProtocolFactory("filesystem", NULL);
- ClearUnusedJob();
}
void SetUpAutoMountContext(base::FilePath* mnt_point) {
@@ -132,11 +158,12 @@ class FileSystemDirURLRequestJobTest : public testing::Test {
FileSystemContext* file_system_context) {
delegate_.reset(new net::TestDelegate());
delegate_->set_quit_on_redirect(true);
+ job_factory_.reset(new FileSystemDirURLRequestJobFactory(
+ url.GetOrigin().host(), file_system_context));
+ empty_context_.set_job_factory(job_factory_.get());
+
request_ = empty_context_.CreateRequest(
url, net::DEFAULT_PRIORITY, delegate_.get(), NULL);
- job_ = new fileapi::FileSystemDirURLRequestJob(
- request_.get(), NULL, url.GetOrigin().host(), file_system_context);
-
request_->Start();
ASSERT_TRUE(request_->is_pending()); // verify that we're starting async
if (run_to_completion)
@@ -241,23 +268,6 @@ class FileSystemDirURLRequestJobTest : public testing::Test {
return GURL(kFileSystemURLPrefix + path);
}
- static net::URLRequestJob* FileSystemDirURLRequestJobFactory(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const std::string& scheme) {
- DCHECK(job_);
- net::URLRequestJob* temp = job_;
- job_ = NULL;
- return temp;
- }
-
- static void ClearUnusedJob() {
- if (job_) {
- scoped_refptr<net::URLRequestJob> deleter = job_;
- job_ = NULL;
- }
- }
-
fileapi::FileSystemFileUtil* file_util() {
return file_system_context_->sandbox_delegate()->sync_file_util();
}
@@ -271,16 +281,12 @@ class FileSystemDirURLRequestJobTest : public testing::Test {
net::URLRequestContext empty_context_;
scoped_ptr<net::TestDelegate> delegate_;
scoped_ptr<net::URLRequest> request_;
+ scoped_ptr<FileSystemDirURLRequestJobFactory> job_factory_;
scoped_refptr<MockSpecialStoragePolicy> special_storage_policy_;
scoped_refptr<FileSystemContext> file_system_context_;
base::WeakPtrFactory<FileSystemDirURLRequestJobTest> weak_factory_;
-
- static net::URLRequestJob* job_;
};
-// static
-net::URLRequestJob* FileSystemDirURLRequestJobTest::job_ = NULL;
-
namespace {
TEST_F(FileSystemDirURLRequestJobTest, DirectoryListing) {
diff --git a/content/browser/fileapi/file_system_file_stream_reader_unittest.cc b/content/browser/fileapi/file_system_file_stream_reader_unittest.cc
index 10a63976d1..fe1d25e5dd 100644
--- a/content/browser/fileapi/file_system_file_stream_reader_unittest.cc
+++ b/content/browser/fileapi/file_system_file_stream_reader_unittest.cc
@@ -9,7 +9,6 @@
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/public/test/async_file_test_helper.h"
#include "content/public/test/test_file_system_context.h"
diff --git a/content/browser/fileapi/file_system_operation_runner_unittest.cc b/content/browser/fileapi/file_system_operation_runner_unittest.cc
index 571ddd1b16..af5f8e74ba 100644
--- a/content/browser/fileapi/file_system_operation_runner_unittest.cc
+++ b/content/browser/fileapi/file_system_operation_runner_unittest.cc
@@ -5,7 +5,6 @@
#include "base/basictypes.h"
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/public/test/test_file_system_context.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/fileapi/file_system_quota_client_unittest.cc b/content/browser/fileapi/file_system_quota_client_unittest.cc
index 527eab3151..d3acb310d5 100644
--- a/content/browser/fileapi/file_system_quota_client_unittest.cc
+++ b/content/browser/fileapi/file_system_quota_client_unittest.cc
@@ -7,7 +7,6 @@
#include "base/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/message_loop/message_loop_proxy.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/public/test/async_file_test_helper.h"
#include "content/public/test/test_file_system_context.h"
diff --git a/content/browser/fileapi/file_system_url_request_job_unittest.cc b/content/browser/fileapi/file_system_url_request_job_unittest.cc
index df444facd2..4f3d0abde3 100644
--- a/content/browser/fileapi/file_system_url_request_job_unittest.cc
+++ b/content/browser/fileapi/file_system_url_request_job_unittest.cc
@@ -15,7 +15,6 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/message_loop/message_loop_proxy.h"
-#include "base/platform_file.h"
#include "base/rand_util.h"
#include "base/run_loop.h"
#include "base/strings/string_piece.h"
@@ -81,6 +80,38 @@ bool TestAutoMountForURLRequest(
return true;
}
+class FileSystemURLRequestJobFactory : public net::URLRequestJobFactory {
+ public:
+ FileSystemURLRequestJobFactory(const std::string& storage_domain,
+ FileSystemContext* context)
+ : storage_domain_(storage_domain), file_system_context_(context) {
+ }
+
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE {
+ return new fileapi::FileSystemURLRequestJob(
+ request, network_delegate, storage_domain_, file_system_context_);
+ }
+
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE {
+ return true;
+ }
+
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE {
+ return true;
+ }
+
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE {
+ return false;
+ }
+
+ private:
+ std::string storage_domain_;
+ FileSystemContext* file_system_context_;
+};
+
} // namespace
class FileSystemURLRequestJobTest : public testing::Test {
@@ -102,18 +133,9 @@ class FileSystemURLRequestJobTest : public testing::Test {
base::Bind(&FileSystemURLRequestJobTest::OnOpenFileSystem,
weak_factory_.GetWeakPtr()));
base::RunLoop().RunUntilIdle();
-
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- "filesystem", &FileSystemURLRequestJobFactory);
}
virtual void TearDown() OVERRIDE {
- net::URLRequest::Deprecated::RegisterProtocolFactory("filesystem", NULL);
- ClearUnusedJob();
- if (pending_job_.get()) {
- pending_job_->Kill();
- pending_job_ = NULL;
- }
// FileReader posts a task to close the file in destructor.
base::RunLoop().RunUntilIdle();
}
@@ -151,14 +173,15 @@ class FileSystemURLRequestJobTest : public testing::Test {
// Make delegate_ exit the MessageLoop when the request is done.
delegate_->set_quit_on_complete(true);
delegate_->set_quit_on_redirect(true);
+
+ job_factory_.reset(new FileSystemURLRequestJobFactory(
+ url.GetOrigin().host(), file_system_context));
+ empty_context_.set_job_factory(job_factory_.get());
+
request_ = empty_context_.CreateRequest(
url, net::DEFAULT_PRIORITY, delegate_.get(), NULL);
if (headers)
request_->SetExtraRequestHeaders(*headers);
- ASSERT_TRUE(!job_);
- job_ = new FileSystemURLRequestJob(
- request_.get(), NULL, url.GetOrigin().host(), file_system_context);
- pending_job_ = job_;
request_->Start();
ASSERT_TRUE(request_->is_pending()); // verify that we're starting async
@@ -208,23 +231,6 @@ class FileSystemURLRequestJobTest : public testing::Test {
return GURL(kFileSystemURLPrefix + path);
}
- static net::URLRequestJob* FileSystemURLRequestJobFactory(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const std::string& scheme) {
- DCHECK(job_);
- net::URLRequestJob* temp = job_;
- job_ = NULL;
- return temp;
- }
-
- static void ClearUnusedJob() {
- if (job_) {
- scoped_refptr<net::URLRequestJob> deleter = job_;
- job_ = NULL;
- }
- }
-
// Put the message loop at the top, so that it's the last thing deleted.
base::MessageLoopForIO message_loop_;
@@ -233,18 +239,13 @@ class FileSystemURLRequestJobTest : public testing::Test {
base::WeakPtrFactory<FileSystemURLRequestJobTest> weak_factory_;
net::URLRequestContext empty_context_;
+ scoped_ptr<FileSystemURLRequestJobFactory> job_factory_;
// NOTE: order matters, request must die before delegate
scoped_ptr<net::TestDelegate> delegate_;
scoped_ptr<net::URLRequest> request_;
-
- scoped_refptr<net::URLRequestJob> pending_job_;
- static net::URLRequestJob* job_;
};
-// static
-net::URLRequestJob* FileSystemURLRequestJobTest::job_ = NULL;
-
namespace {
TEST_F(FileSystemURLRequestJobTest, FileTest) {
diff --git a/content/browser/fileapi/file_writer_delegate_unittest.cc b/content/browser/fileapi/file_writer_delegate_unittest.cc
index 3d2814cc6c..ccbc4a563d 100644
--- a/content/browser/fileapi/file_writer_delegate_unittest.cc
+++ b/content/browser/fileapi/file_writer_delegate_unittest.cc
@@ -18,6 +18,7 @@
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job.h"
+#include "net/url_request/url_request_job_factory.h"
#include "net/url_request/url_request_status.h"
#include "testing/platform_test.h"
#include "url/gurl.h"
@@ -74,6 +75,8 @@ class Result {
FileWriterDelegate::WriteProgressStatus write_status_;
};
+class BlobURLRequestJobFactory;
+
} // namespace (anonymous)
class FileWriterDelegateTest : public PlatformTest {
@@ -141,8 +144,6 @@ class FileWriterDelegateTest : public PlatformTest {
blob_url, net::DEFAULT_PRIORITY, file_writer_delegate_.get(), NULL);
}
- static net::URLRequest::ProtocolFactory Factory;
-
// This should be alive until the very end of this instance.
base::MessageLoopForIO loop_;
@@ -151,6 +152,7 @@ class FileWriterDelegateTest : public PlatformTest {
net::URLRequestContext empty_context_;
scoped_ptr<FileWriterDelegate> file_writer_delegate_;
scoped_ptr<net::URLRequest> request_;
+ scoped_ptr<BlobURLRequestJobFactory> job_factory_;
base::ScopedTempDir dir_;
@@ -208,16 +210,39 @@ class FileWriterDelegateTestJob : public net::URLRequestJob {
int cursor_;
};
-} // namespace (anonymous)
+class BlobURLRequestJobFactory : public net::URLRequestJobFactory {
+ public:
+ explicit BlobURLRequestJobFactory(const char** content_data)
+ : content_data_(content_data) {
+ }
-// static
-net::URLRequestJob* FileWriterDelegateTest::Factory(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const std::string& scheme) {
- return new FileWriterDelegateTestJob(
- request, network_delegate, FileWriterDelegateTest::content_);
-}
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE {
+ return new FileWriterDelegateTestJob(
+ request, network_delegate, *content_data_);
+ }
+
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE {
+ return scheme == "blob";
+ }
+
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE {
+ return url.SchemeIs("blob");
+ }
+
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE {
+ return true;
+ }
+
+ private:
+ const char** content_data_;
+
+ DISALLOW_COPY_AND_ASSIGN(BlobURLRequestJobFactory);
+};
+
+} // namespace (anonymous)
void FileWriterDelegateTest::SetUp() {
ASSERT_TRUE(dir_.CreateUniqueTempDir());
@@ -227,11 +252,11 @@ void FileWriterDelegateTest::SetUp() {
ASSERT_EQ(base::File::FILE_OK,
AsyncFileTestHelper::CreateFile(
file_system_context_, GetFileSystemURL("test")));
- net::URLRequest::Deprecated::RegisterProtocolFactory("blob", &Factory);
+ job_factory_.reset(new BlobURLRequestJobFactory(&content_));
+ empty_context_.set_job_factory(job_factory_.get());
}
void FileWriterDelegateTest::TearDown() {
- net::URLRequest::Deprecated::RegisterProtocolFactory("blob", NULL);
file_system_context_ = NULL;
base::RunLoop().RunUntilIdle();
}
diff --git a/content/browser/fileapi/fileapi_message_filter.cc b/content/browser/fileapi/fileapi_message_filter.cc
index b900124c5e..2eb601a7c6 100644
--- a/content/browser/fileapi/fileapi_message_filter.cc
+++ b/content/browser/fileapi/fileapi_message_filter.cc
@@ -11,7 +11,6 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "base/sequenced_task_runner.h"
#include "base/strings/string_util.h"
#include "base/threading/thread.h"
@@ -145,11 +144,9 @@ base::TaskRunner* FileAPIMessageFilter::OverrideTaskRunnerForMessage(
return NULL;
}
-bool FileAPIMessageFilter::OnMessageReceived(
- const IPC::Message& message, bool* message_was_ok) {
- *message_was_ok = true;
+bool FileAPIMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(FileAPIMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(FileAPIMessageFilter, message)
IPC_MESSAGE_HANDLER(FileSystemHostMsg_OpenFileSystem, OnOpenFileSystem)
IPC_MESSAGE_HANDLER(FileSystemHostMsg_ResolveURL, OnResolveURL)
IPC_MESSAGE_HANDLER(FileSystemHostMsg_DeleteFileSystem, OnDeleteFileSystem)
@@ -193,7 +190,7 @@ bool FileAPIMessageFilter::OnMessageReceived(
IPC_MESSAGE_HANDLER(StreamHostMsg_Clone, OnCloneStream)
IPC_MESSAGE_HANDLER(StreamHostMsg_Remove, OnRemoveStream)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/fileapi/fileapi_message_filter.h b/content/browser/fileapi/fileapi_message_filter.h
index 158eb6c554..7a98b1483c 100644
--- a/content/browser/fileapi/fileapi_message_filter.h
+++ b/content/browser/fileapi/fileapi_message_filter.h
@@ -14,7 +14,6 @@
#include "base/files/file_util_proxy.h"
#include "base/memory/ref_counted.h"
#include "base/memory/shared_memory.h"
-#include "base/platform_file.h"
#include "content/browser/streams/stream.h"
#include "content/browser/streams/stream_context.h"
#include "content/common/content_export.h"
@@ -80,8 +79,7 @@ class CONTENT_EXPORT FileAPIMessageFilter : public BrowserMessageFilter {
virtual void OnChannelClosing() OVERRIDE;
virtual base::TaskRunner* OverrideTaskRunnerForMessage(
const IPC::Message& message) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~FileAPIMessageFilter();
diff --git a/content/browser/fileapi/fileapi_message_filter_unittest.cc b/content/browser/fileapi/fileapi_message_filter_unittest.cc
index a572386eaa..3a4c47e93e 100644
--- a/content/browser/fileapi/fileapi_message_filter_unittest.cc
+++ b/content/browser/fileapi/fileapi_message_filter_unittest.cc
@@ -75,13 +75,6 @@ class FileAPIMessageFilterTest : public testing::Test {
message_loop_.RunUntilIdle();
}
- // Tests via OnMessageReceived(const IPC::Message&). The channel proxy calls
- // this method.
- bool InvokeOnMessageReceived(const IPC::Message& message) {
- bool message_was_ok;
- return filter_->OnMessageReceived(message, &message_was_ok);
- }
-
base::MessageLoop message_loop_;
TestBrowserThread io_browser_thread_;
@@ -109,8 +102,7 @@ TEST_F(FileAPIMessageFilterTest, CloseChannelWithInflightRequest) {
int request_id = 0;
const GURL kUrl("filesystem:http://example.com/temporary/foo");
FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl);
- bool message_was_ok;
- EXPECT_TRUE(filter->OnMessageReceived(read_metadata, &message_was_ok));
+ EXPECT_TRUE(filter->OnMessageReceived(read_metadata));
// Close the filter while it has inflight request.
filter->OnChannelClosing();
@@ -143,8 +135,7 @@ TEST_F(FileAPIMessageFilterTest, MultipleFilters) {
int request_id = 0;
const GURL kUrl("filesystem:http://example.com/temporary/foo");
FileSystemHostMsg_ReadMetadata read_metadata(request_id++, kUrl);
- bool message_was_ok;
- EXPECT_TRUE(filter1->OnMessageReceived(read_metadata, &message_was_ok));
+ EXPECT_TRUE(filter1->OnMessageReceived(read_metadata));
// Close the other filter before the request for filter1 is processed.
filter2->OnChannelClosing();
@@ -162,7 +153,7 @@ TEST_F(FileAPIMessageFilterTest, BuildEmptyStream) {
EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get());
StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
- EXPECT_TRUE(InvokeOnMessageReceived(start_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(start_message));
const int kBufferSize = 10;
scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
@@ -177,7 +168,7 @@ TEST_F(FileAPIMessageFilterTest, BuildEmptyStream) {
stream = NULL;
StreamHostMsg_FinishBuilding finish_message(kUrl);
- EXPECT_TRUE(InvokeOnMessageReceived(finish_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
stream = stream_registry->GetStream(kUrl);
ASSERT_FALSE(stream.get() == NULL);
@@ -204,16 +195,16 @@ TEST_F(FileAPIMessageFilterTest, BuildNonEmptyStream) {
EXPECT_EQ(NULL, stream_registry->GetStream(kUrl).get());
StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
- EXPECT_TRUE(InvokeOnMessageReceived(start_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(start_message));
webkit_blob::BlobData::Item item;
const std::string kFakeData = "foobarbaz";
item.SetToBytes(kFakeData.data(), kFakeData.size());
StreamHostMsg_AppendBlobDataItem append_message(kUrl, item);
- EXPECT_TRUE(InvokeOnMessageReceived(append_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(append_message));
StreamHostMsg_FinishBuilding finish_message(kUrl);
- EXPECT_TRUE(InvokeOnMessageReceived(finish_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
// Run loop to finish transfer and commit finalize command.
message_loop_.RunUntilIdle();
@@ -248,7 +239,7 @@ TEST_F(FileAPIMessageFilterTest, BuildStreamWithSharedMemory) {
filter_->set_peer_pid_for_testing(base::Process::Current().pid());
StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
- EXPECT_TRUE(InvokeOnMessageReceived(start_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(start_message));
const std::string kFakeData = "foobarbaz";
@@ -257,10 +248,10 @@ TEST_F(FileAPIMessageFilterTest, BuildStreamWithSharedMemory) {
memcpy(shared_memory->memory(), kFakeData.data(), kFakeData.size());
StreamHostMsg_SyncAppendSharedMemory append_message(
kUrl, shared_memory->handle(), kFakeData.size());
- EXPECT_TRUE(InvokeOnMessageReceived(append_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(append_message));
StreamHostMsg_FinishBuilding finish_message(kUrl);
- EXPECT_TRUE(InvokeOnMessageReceived(finish_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(finish_message));
// Run loop to finish transfer and commit finalize command.
message_loop_.RunUntilIdle();
@@ -287,7 +278,7 @@ TEST_F(FileAPIMessageFilterTest, BuildStreamAndCallOnChannelClosing) {
const GURL kUrl(kFakeBlobInternalUrlSpec);
StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
- EXPECT_TRUE(InvokeOnMessageReceived(start_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(start_message));
ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL);
@@ -303,10 +294,10 @@ TEST_F(FileAPIMessageFilterTest, CloneStream) {
const GURL kDestUrl(kFakeBlobInternalUrlSpec2);
StreamHostMsg_StartBuilding start_message(kUrl, kFakeContentType);
- EXPECT_TRUE(InvokeOnMessageReceived(start_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(start_message));
StreamHostMsg_Clone clone_message(kDestUrl, kUrl);
- EXPECT_TRUE(InvokeOnMessageReceived(clone_message));
+ EXPECT_TRUE(filter_->OnMessageReceived(clone_message));
ASSERT_FALSE(stream_registry->GetStream(kUrl).get() == NULL);
ASSERT_FALSE(stream_registry->GetStream(kDestUrl).get() == NULL);
diff --git a/content/browser/fileapi/local_file_stream_reader_unittest.cc b/content/browser/fileapi/local_file_stream_reader_unittest.cc
new file mode 100644
index 0000000000..c9547ed770
--- /dev/null
+++ b/content/browser/fileapi/local_file_stream_reader_unittest.cc
@@ -0,0 +1,258 @@
+// 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 "webkit/browser/blob/local_file_stream_reader.h"
+
+#include <string>
+
+#include "base/file_util.h"
+#include "base/files/file.h"
+#include "base/files/file_path.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "base/threading/thread.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/base/test_completion_callback.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using webkit_blob::LocalFileStreamReader;
+
+namespace content {
+
+namespace {
+
+const char kTestData[] = "0123456789";
+const int kTestDataSize = arraysize(kTestData) - 1;
+
+void ReadFromReader(LocalFileStreamReader* reader,
+ std::string* data, size_t size,
+ int* result) {
+ ASSERT_TRUE(reader != NULL);
+ ASSERT_TRUE(result != NULL);
+ *result = net::OK;
+ net::TestCompletionCallback callback;
+ size_t total_bytes_read = 0;
+ while (total_bytes_read < size) {
+ scoped_refptr<net::IOBufferWithSize> buf(
+ new net::IOBufferWithSize(size - total_bytes_read));
+ int rv = reader->Read(buf.get(), buf->size(), callback.callback());
+ if (rv == net::ERR_IO_PENDING)
+ rv = callback.WaitForResult();
+ if (rv < 0)
+ *result = rv;
+ if (rv <= 0)
+ break;
+ total_bytes_read += rv;
+ data->append(buf->data(), rv);
+ }
+}
+
+void NeverCalled(int) { ADD_FAILURE(); }
+void EmptyCallback() {}
+
+void QuitLoop() {
+ base::MessageLoop::current()->Quit();
+}
+
+} // namespace
+
+class LocalFileStreamReaderTest : public testing::Test {
+ public:
+ LocalFileStreamReaderTest()
+ : file_thread_("FileUtilProxyTestFileThread") {}
+
+ virtual void SetUp() OVERRIDE {
+ ASSERT_TRUE(file_thread_.Start());
+ ASSERT_TRUE(dir_.CreateUniqueTempDir());
+
+ base::WriteFile(test_path(), kTestData, kTestDataSize);
+ base::File::Info info;
+ ASSERT_TRUE(base::GetFileInfo(test_path(), &info));
+ test_file_modification_time_ = info.last_modified;
+ }
+
+ virtual void TearDown() OVERRIDE {
+ // Give another chance for deleted streams to perform Close.
+ base::RunLoop().RunUntilIdle();
+ file_thread_.Stop();
+ base::RunLoop().RunUntilIdle();
+ }
+
+ protected:
+ LocalFileStreamReader* CreateFileReader(
+ const base::FilePath& path,
+ int64 initial_offset,
+ const base::Time& expected_modification_time) {
+ return new LocalFileStreamReader(
+ file_task_runner(),
+ path,
+ initial_offset,
+ expected_modification_time);
+ }
+
+ void TouchTestFile() {
+ base::Time new_modified_time =
+ test_file_modification_time() - base::TimeDelta::FromSeconds(1);
+ ASSERT_TRUE(base::TouchFile(test_path(),
+ test_file_modification_time(),
+ new_modified_time));
+ }
+
+ base::MessageLoopProxy* file_task_runner() const {
+ return file_thread_.message_loop_proxy().get();
+ }
+
+ base::FilePath test_dir() const { return dir_.path(); }
+ base::FilePath test_path() const { return dir_.path().AppendASCII("test"); }
+ base::Time test_file_modification_time() const {
+ return test_file_modification_time_;
+ }
+
+ void EnsureFileTaskFinished() {
+ file_task_runner()->PostTaskAndReply(
+ FROM_HERE, base::Bind(&EmptyCallback), base::Bind(&QuitLoop));
+ base::MessageLoop::current()->Run();
+ }
+
+ private:
+ base::MessageLoopForIO message_loop_;
+ base::Thread file_thread_;
+ base::ScopedTempDir dir_;
+ base::Time test_file_modification_time_;
+};
+
+TEST_F(LocalFileStreamReaderTest, NonExistent) {
+ base::FilePath nonexistent_path = test_dir().AppendASCII("nonexistent");
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(nonexistent_path, 0, base::Time()));
+ int result = 0;
+ std::string data;
+ ReadFromReader(reader.get(), &data, 10, &result);
+ ASSERT_EQ(net::ERR_FILE_NOT_FOUND, result);
+ ASSERT_EQ(0U, data.size());
+}
+
+TEST_F(LocalFileStreamReaderTest, Empty) {
+ base::FilePath empty_path = test_dir().AppendASCII("empty");
+ base::File file(empty_path, base::File::FLAG_CREATE | base::File::FLAG_READ);
+ ASSERT_TRUE(file.IsValid());
+ file.Close();
+
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(empty_path, 0, base::Time()));
+ int result = 0;
+ std::string data;
+ ReadFromReader(reader.get(), &data, 10, &result);
+ ASSERT_EQ(net::OK, result);
+ ASSERT_EQ(0U, data.size());
+
+ net::TestInt64CompletionCallback callback;
+ int64 length_result = reader->GetLength(callback.callback());
+ if (length_result == net::ERR_IO_PENDING)
+ length_result = callback.WaitForResult();
+ ASSERT_EQ(0, result);
+}
+
+TEST_F(LocalFileStreamReaderTest, GetLengthNormal) {
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 0, test_file_modification_time()));
+ net::TestInt64CompletionCallback callback;
+ int64 result = reader->GetLength(callback.callback());
+ if (result == net::ERR_IO_PENDING)
+ result = callback.WaitForResult();
+ ASSERT_EQ(kTestDataSize, result);
+}
+
+TEST_F(LocalFileStreamReaderTest, GetLengthAfterModified) {
+ // Touch file so that the file's modification time becomes different
+ // from what we expect.
+ TouchTestFile();
+
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 0, test_file_modification_time()));
+ net::TestInt64CompletionCallback callback;
+ int64 result = reader->GetLength(callback.callback());
+ if (result == net::ERR_IO_PENDING)
+ result = callback.WaitForResult();
+ ASSERT_EQ(net::ERR_UPLOAD_FILE_CHANGED, result);
+
+ // With NULL expected modification time this should work.
+ reader.reset(CreateFileReader(test_path(), 0, base::Time()));
+ result = reader->GetLength(callback.callback());
+ if (result == net::ERR_IO_PENDING)
+ result = callback.WaitForResult();
+ ASSERT_EQ(kTestDataSize, result);
+}
+
+TEST_F(LocalFileStreamReaderTest, GetLengthWithOffset) {
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 3, base::Time()));
+ net::TestInt64CompletionCallback callback;
+ int64 result = reader->GetLength(callback.callback());
+ if (result == net::ERR_IO_PENDING)
+ result = callback.WaitForResult();
+ // Initial offset does not affect the result of GetLength.
+ ASSERT_EQ(kTestDataSize, result);
+}
+
+TEST_F(LocalFileStreamReaderTest, ReadNormal) {
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 0, test_file_modification_time()));
+ int result = 0;
+ std::string data;
+ ReadFromReader(reader.get(), &data, kTestDataSize, &result);
+ ASSERT_EQ(net::OK, result);
+ ASSERT_EQ(kTestData, data);
+}
+
+TEST_F(LocalFileStreamReaderTest, ReadAfterModified) {
+ // Touch file so that the file's modification time becomes different
+ // from what we expect.
+ TouchTestFile();
+
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 0, test_file_modification_time()));
+ int result = 0;
+ std::string data;
+ ReadFromReader(reader.get(), &data, kTestDataSize, &result);
+ ASSERT_EQ(net::ERR_UPLOAD_FILE_CHANGED, result);
+ ASSERT_EQ(0U, data.size());
+
+ // With NULL expected modification time this should work.
+ data.clear();
+ reader.reset(CreateFileReader(test_path(), 0, base::Time()));
+ ReadFromReader(reader.get(), &data, kTestDataSize, &result);
+ ASSERT_EQ(net::OK, result);
+ ASSERT_EQ(kTestData, data);
+}
+
+TEST_F(LocalFileStreamReaderTest, ReadWithOffset) {
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 3, base::Time()));
+ int result = 0;
+ std::string data;
+ ReadFromReader(reader.get(), &data, kTestDataSize, &result);
+ ASSERT_EQ(net::OK, result);
+ ASSERT_EQ(&kTestData[3], data);
+}
+
+TEST_F(LocalFileStreamReaderTest, DeleteWithUnfinishedRead) {
+ scoped_ptr<LocalFileStreamReader> reader(
+ CreateFileReader(test_path(), 0, base::Time()));
+
+ net::TestCompletionCallback callback;
+ scoped_refptr<net::IOBufferWithSize> buf(
+ new net::IOBufferWithSize(kTestDataSize));
+ int rv = reader->Read(buf.get(), buf->size(), base::Bind(&NeverCalled));
+ ASSERT_TRUE(rv == net::ERR_IO_PENDING || rv >= 0);
+
+ // Delete immediately.
+ // Should not crash; nor should NeverCalled be callback.
+ reader.reset();
+ EnsureFileTaskFinished();
+}
+
+} // namespace content
diff --git a/content/browser/fileapi/local_file_util_unittest.cc b/content/browser/fileapi/local_file_util_unittest.cc
index f4be1d624b..08157fab75 100644
--- a/content/browser/fileapi/local_file_util_unittest.cc
+++ b/content/browser/fileapi/local_file_util_unittest.cc
@@ -9,7 +9,6 @@
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/message_loop/message_loop_proxy.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
@@ -98,25 +97,20 @@ class LocalFileUtilTest : public testing::Test {
return info.size;
}
- base::File::Error CreateFile(const char* file_name,
- base::PlatformFile* file_handle,
- bool* created) {
- int file_flags = base::PLATFORM_FILE_CREATE |
- base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC;
+ base::File CreateFile(const char* file_name) {
+ int file_flags = base::File::FLAG_CREATE |
+ base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
scoped_ptr<FileSystemOperationContext> context(NewContext());
- return file_util()->CreateOrOpen(
- context.get(),
- CreateURL(file_name),
- file_flags, file_handle, created);
+ return file_util()->CreateOrOpen(context.get(), CreateURL(file_name),
+ file_flags);
}
base::File::Error EnsureFileExists(const char* file_name,
- bool* created) {
+ bool* created) {
scoped_ptr<FileSystemOperationContext> context(NewContext());
- return file_util()->EnsureFileExists(
- context.get(),
- CreateURL(file_name), created);
+ return file_util()->EnsureFileExists(context.get(),
+ CreateURL(file_name), created);
}
FileSystemContext* file_system_context() {
@@ -133,18 +127,14 @@ class LocalFileUtilTest : public testing::Test {
TEST_F(LocalFileUtilTest, CreateAndClose) {
const char *file_name = "test_file";
- base::PlatformFile file_handle;
- bool created;
- ASSERT_EQ(base::File::FILE_OK,
- CreateFile(file_name, &file_handle, &created));
- ASSERT_TRUE(created);
+ base::File file = CreateFile(file_name);
+ ASSERT_TRUE(file.IsValid());
+ ASSERT_TRUE(file.created());
EXPECT_TRUE(FileExists(file_name));
EXPECT_EQ(0, GetSize(file_name));
scoped_ptr<FileSystemOperationContext> context(NewContext());
- EXPECT_EQ(base::File::FILE_OK,
- file_util()->Close(context.get(), file_handle));
}
// base::CreateSymbolicLink is only supported on POSIX.
@@ -152,11 +142,9 @@ TEST_F(LocalFileUtilTest, CreateAndClose) {
TEST_F(LocalFileUtilTest, CreateFailForSymlink) {
// Create symlink target file.
const char *target_name = "symlink_target";
- base::PlatformFile target_handle;
- bool symlink_target_created = false;
- ASSERT_EQ(base::File::FILE_OK,
- CreateFile(target_name, &target_handle, &symlink_target_created));
- ASSERT_TRUE(symlink_target_created);
+ base::File target_file = CreateFile(target_name);
+ ASSERT_TRUE(target_file.IsValid());
+ ASSERT_TRUE(target_file.created());
base::FilePath target_path = LocalPath(target_name);
// Create symlink where target must be real file.
@@ -168,13 +156,10 @@ TEST_F(LocalFileUtilTest, CreateFailForSymlink) {
// Try to open the symlink file which should fail.
scoped_ptr<FileSystemOperationContext> context(NewContext());
FileSystemURL url = CreateURL(symlink_name);
- int file_flags = base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ;
- base::PlatformFile file_handle;
- bool created = false;
- EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND,
- file_util()->CreateOrOpen(context.get(), url, file_flags,
- &file_handle, &created));
- EXPECT_FALSE(created);
+ int file_flags = base::File::FLAG_OPEN | base::File::FLAG_READ;
+ base::File file = file_util()->CreateOrOpen(context.get(), url, file_flags);
+ ASSERT_FALSE(file.IsValid());
+ EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, file.error_details());
}
#endif
@@ -193,11 +178,9 @@ TEST_F(LocalFileUtilTest, EnsureFileExists) {
TEST_F(LocalFileUtilTest, TouchFile) {
const char *file_name = "test_file";
- base::PlatformFile file_handle;
- bool created;
- ASSERT_EQ(base::File::FILE_OK,
- CreateFile(file_name, &file_handle, &created));
- ASSERT_TRUE(created);
+ base::File file = CreateFile(file_name);
+ ASSERT_TRUE(file.IsValid());
+ ASSERT_TRUE(file.created());
scoped_ptr<FileSystemOperationContext> context(NewContext());
@@ -215,9 +198,6 @@ TEST_F(LocalFileUtilTest, TouchFile) {
ASSERT_TRUE(base::GetFileInfo(LocalPath(file_name), &info));
EXPECT_EQ(new_accessed, info.last_accessed);
EXPECT_EQ(new_modified, info.last_modified);
-
- EXPECT_EQ(base::File::FILE_OK,
- file_util()->Close(context.get(), file_handle));
}
TEST_F(LocalFileUtilTest, TouchDirectory) {
diff --git a/content/browser/fileapi/mock_url_request_delegate.cc b/content/browser/fileapi/mock_url_request_delegate.cc
new file mode 100644
index 0000000000..97e09f0df6
--- /dev/null
+++ b/content/browser/fileapi/mock_url_request_delegate.cc
@@ -0,0 +1,72 @@
+// 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 "mock_url_request_delegate.h"
+
+#include "base/run_loop.h"
+#include "net/base/io_buffer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+const int kBufferSize = 1024;
+}
+
+namespace content {
+
+MockURLRequestDelegate::MockURLRequestDelegate()
+ : io_buffer_(new net::IOBuffer(kBufferSize)) {
+}
+
+MockURLRequestDelegate::~MockURLRequestDelegate() {
+}
+
+void MockURLRequestDelegate::OnResponseStarted(net::URLRequest* request) {
+ if (request->status().is_success()) {
+ EXPECT_TRUE(request->response_headers());
+ ReadSome(request);
+ } else {
+ RequestComplete();
+ }
+}
+
+void MockURLRequestDelegate::OnReadCompleted(net::URLRequest* request,
+ int bytes_read) {
+ if (bytes_read > 0)
+ ReceiveData(request, bytes_read);
+ else
+ RequestComplete();
+}
+
+void MockURLRequestDelegate::ReadSome(net::URLRequest* request) {
+ if (!request->is_pending()) {
+ RequestComplete();
+ return;
+ }
+
+ int bytes_read = 0;
+ if (!request->Read(io_buffer_.get(), kBufferSize, &bytes_read)) {
+ if (!request->status().is_io_pending())
+ RequestComplete();
+ return;
+ }
+
+ ReceiveData(request, bytes_read);
+}
+
+void MockURLRequestDelegate::ReceiveData(net::URLRequest* request,
+ int bytes_read) {
+ if (bytes_read) {
+ response_data_.append(io_buffer_->data(),
+ static_cast<size_t>(bytes_read));
+ ReadSome(request);
+ } else {
+ RequestComplete();
+ }
+}
+
+void MockURLRequestDelegate::RequestComplete() {
+ base::MessageLoop::current()->Quit();
+}
+
+} // namespace
diff --git a/content/browser/fileapi/mock_url_request_delegate.h b/content/browser/fileapi/mock_url_request_delegate.h
new file mode 100644
index 0000000000..137b11426e
--- /dev/null
+++ b/content/browser/fileapi/mock_url_request_delegate.h
@@ -0,0 +1,38 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_FILEAPI_MOCK_URL_REQUEST_DELEGATE_H
+#define CONTENT_BROWSER_FILEAPI_MOCK_URL_REQUEST_DELEGATE_H
+
+#include "net/url_request/url_request.h"
+
+namespace net {
+class IOBuffer;
+}
+
+namespace content {
+
+// A URL request delegate that receives the response body.
+class MockURLRequestDelegate : public net::URLRequest::Delegate {
+ public:
+ MockURLRequestDelegate();
+ virtual ~MockURLRequestDelegate();
+
+ virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
+ virtual void OnReadCompleted(net::URLRequest* request,
+ int bytes_read) OVERRIDE;
+ const std::string& response_data() const { return response_data_; }
+
+ private:
+ void ReadSome(net::URLRequest* request);
+ void ReceiveData(net::URLRequest* request, int bytes_read);
+ void RequestComplete();
+
+ scoped_refptr<net::IOBuffer> io_buffer_;
+ std::string response_data_;
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_FILEAPI_MOCK_URL_REQUEST_DELEGATE_H
diff --git a/content/browser/fileapi/obfuscated_file_util_unittest.cc b/content/browser/fileapi/obfuscated_file_util_unittest.cc
index 2aed9d1445..afbb3af498 100644
--- a/content/browser/fileapi/obfuscated_file_util_unittest.cc
+++ b/content/browser/fileapi/obfuscated_file_util_unittest.cc
@@ -12,7 +12,6 @@
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/browser/fileapi/mock_file_change_observer.h"
#include "content/public/test/async_file_test_helper.h"
@@ -322,8 +321,7 @@ class ObfuscatedFileUtilTest : public testing::Test {
return sandbox_file_system_.CreateURL(path);
}
- void CheckFileAndCloseHandle(
- const FileSystemURL& url, base::PlatformFile file_handle) {
+ void CheckFileAndCloseHandle(const FileSystemURL& url, base::File file) {
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
base::FilePath local_path;
EXPECT_EQ(base::File::FILE_OK,
@@ -340,15 +338,14 @@ class ObfuscatedFileUtilTest : public testing::Test {
const char data[] = "test data";
const int length = arraysize(data) - 1;
- if (base::kInvalidPlatformFileValue == file_handle) {
- base::File file(data_path,
+ if (!file.IsValid()) {
+ file.Initialize(data_path,
base::File::FLAG_OPEN | base::File::FLAG_WRITE);
ASSERT_TRUE(file.IsValid());
EXPECT_FALSE(file.created());
- file_handle = file.TakePlatformFile();
}
- ASSERT_EQ(length, base::WritePlatformFile(file_handle, 0, data, length));
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ ASSERT_EQ(length, file.Write(0, data, length));
+ file.Close();
base::File::Info file_info1;
EXPECT_EQ(length, GetSize(data_path));
@@ -822,15 +819,13 @@ class ObfuscatedFileUtilTest : public testing::Test {
};
TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) {
- base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
- bool created;
FileSystemURL url = CreateURLFromUTF8("fake/file");
scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
- int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
+ int file_flags = base::File::FLAG_CREATE | base::File::FLAG_WRITE;
- EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND,
- ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle,
- &created));
+ base::File file = ofu()->CreateOrOpen(context.get(), url, file_flags);
+ EXPECT_FALSE(file.IsValid());
+ EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, file.error_details());
context.reset(NewContext(NULL));
EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND,
@@ -844,21 +839,19 @@ TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) {
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
ObfuscatedFileUtil::ComputeFilePathCost(url.path()) - 1);
- ASSERT_EQ(base::File::FILE_ERROR_NO_SPACE,
- ofu()->CreateOrOpen(context.get(), url, file_flags,
- &file_handle, &created));
+ file = ofu()->CreateOrOpen(context.get(), url, file_flags);
+ EXPECT_FALSE(file.IsValid());
+ ASSERT_EQ(base::File::FILE_ERROR_NO_SPACE, file.error_details());
context.reset(NewContext(NULL));
context->set_allowed_bytes_growth(
ObfuscatedFileUtil::ComputeFilePathCost(url.path()));
- ASSERT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle,
- &created));
- ASSERT_TRUE(created);
+ file = ofu()->CreateOrOpen(context.get(), url, file_flags);
+ EXPECT_TRUE(file.IsValid());
+ ASSERT_TRUE(file.created());
EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count());
- EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
- CheckFileAndCloseHandle(url, file_handle);
+ CheckFileAndCloseHandle(url, file.Pass());
context.reset(NewContext(NULL));
base::FilePath local_path;
@@ -889,15 +882,12 @@ TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) {
EXPECT_EQ(3, change_observer()->get_and_reset_create_directory_count());
context.reset(NewContext(NULL));
- file_handle = base::kInvalidPlatformFileValue;
- ASSERT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(context.get(), url, file_flags, &file_handle,
- &created));
- ASSERT_TRUE(created);
+ file = ofu()->CreateOrOpen(context.get(), url, file_flags);
+ ASSERT_TRUE(file.IsValid());
+ ASSERT_TRUE(file.created());
EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count());
- EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
- CheckFileAndCloseHandle(url, file_handle);
+ CheckFileAndCloseHandle(url, file.Pass());
context.reset(NewContext(NULL));
EXPECT_EQ(base::File::FILE_OK,
@@ -1032,7 +1022,7 @@ TEST_F(ObfuscatedFileUtilTest, TestEnsureFileExists) {
ASSERT_TRUE(created);
EXPECT_EQ(1, change_observer()->get_and_reset_create_file_count());
- CheckFileAndCloseHandle(url, base::kInvalidPlatformFileValue);
+ CheckFileAndCloseHandle(url, base::File());
context.reset(NewContext(NULL));
ASSERT_EQ(base::File::FILE_OK,
@@ -1720,7 +1710,6 @@ TEST_F(ObfuscatedFileUtilTest, TestInconsistency) {
const FileSystemURL kPath2 = CreateURLFromUTF8("fuga");
scoped_ptr<FileSystemOperationContext> context;
- base::PlatformFile file;
base::File::Info file_info;
base::FilePath data_path;
bool created = false;
@@ -1781,15 +1770,13 @@ TEST_F(ObfuscatedFileUtilTest, TestInconsistency) {
ofu()->DestroyDirectoryDatabase(origin(), type_string());
context.reset(NewContext(NULL));
- EXPECT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- context.get(), kPath1,
- base::PLATFORM_FILE_READ | base::PLATFORM_FILE_CREATE,
- &file, &created));
- EXPECT_TRUE(created);
+ base::File file =
+ ofu()->CreateOrOpen(context.get(), kPath1,
+ base::File::FLAG_READ | base::File::FLAG_CREATE);
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_TRUE(file.created());
- base::File base_file(file);
- EXPECT_TRUE(base_file.GetInfo(&file_info));
+ EXPECT_TRUE(file.GetInfo(&file_info));
EXPECT_EQ(0, file_info.size);
}
@@ -1837,8 +1824,7 @@ TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) {
ofu()->CreateDirectory(context.get(), dir_url, false, false));
// EnsureFileExists, create case.
- FileSystemURL url(FileSystemURLAppendUTF8(
- dir_url, "EnsureFileExists_file"));
+ FileSystemURL url(FileSystemURLAppendUTF8(dir_url, "EnsureFileExists_file"));
bool created = false;
ClearTimestamp(dir_url);
context.reset(NewContext(NULL));
@@ -1870,45 +1856,34 @@ TEST_F(ObfuscatedFileUtilTest, TestDirectoryTimestampForCreation) {
// CreateOrOpen, create case.
url = FileSystemURLAppendUTF8(dir_url, "CreateOrOpen_file");
- base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
- created = false;
ClearTimestamp(dir_url);
context.reset(NewContext(NULL));
- EXPECT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- context.get(), url,
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
- EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
- EXPECT_TRUE(created);
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ base::File file =
+ ofu()->CreateOrOpen(context.get(), url,
+ base::File::FLAG_CREATE | base::File::FLAG_WRITE);
+
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_TRUE(file.created());
+ file.Close();
EXPECT_NE(base::Time(), GetModifiedTime(dir_url));
// open case.
- file_handle = base::kInvalidPlatformFileValue;
- created = true;
ClearTimestamp(dir_url);
context.reset(NewContext(NULL));
- EXPECT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- context.get(), url,
- base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
- EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
- EXPECT_FALSE(created);
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ file = ofu()->CreateOrOpen(context.get(), url,
+ base::File::FLAG_OPEN | base::File::FLAG_WRITE);
+ EXPECT_TRUE(file.IsValid());
+ EXPECT_FALSE(file.created());
+ file.Close();
EXPECT_EQ(base::Time(), GetModifiedTime(dir_url));
// fail case
- file_handle = base::kInvalidPlatformFileValue;
ClearTimestamp(dir_url);
context.reset(NewContext(NULL));
- EXPECT_EQ(base::File::FILE_ERROR_EXISTS,
- ofu()->CreateOrOpen(
- context.get(), url,
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
- EXPECT_EQ(base::kInvalidPlatformFileValue, file_handle);
+ file = ofu()->CreateOrOpen(context.get(), url,
+ base::File::FLAG_CREATE | base::File::FLAG_WRITE);
+ EXPECT_FALSE(file.IsValid());
+ EXPECT_EQ(base::File::FILE_ERROR_EXISTS, file.error_details());
EXPECT_EQ(base::Time(), GetModifiedTime(dir_url));
// CreateDirectory, create case.
@@ -2367,56 +2342,52 @@ TEST_F(ObfuscatedFileUtilTest, TestQuotaOnRemove) {
}
TEST_F(ObfuscatedFileUtilTest, TestQuotaOnOpen) {
- FileSystemURL file(CreateURLFromUTF8("file"));
- base::PlatformFile file_handle;
- bool created;
+ FileSystemURL url(CreateURLFromUTF8("file"));
+ bool created;
// Creating a file.
ASSERT_EQ(base::File::FILE_OK,
ofu()->EnsureFileExists(
- AllowUsageIncrease(PathCost(file))->context(),
- file, &created));
+ AllowUsageIncrease(PathCost(url))->context(),
+ url, &created));
ASSERT_TRUE(created);
ASSERT_EQ(0, ComputeTotalFileSize());
// Opening it, which shouldn't change the usage.
- ASSERT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- AllowUsageIncrease(0)->context(), file,
- base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
+ base::File file =
+ ofu()->CreateOrOpen(AllowUsageIncrease(0)->context(), url,
+ base::File::FLAG_OPEN | base::File::FLAG_WRITE);
+ ASSERT_TRUE(file.IsValid());
ASSERT_EQ(0, ComputeTotalFileSize());
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ file.Close();
const int length = 33;
ASSERT_EQ(base::File::FILE_OK,
ofu()->Truncate(
- AllowUsageIncrease(length)->context(), file, length));
+ AllowUsageIncrease(length)->context(), url, length));
ASSERT_EQ(length, ComputeTotalFileSize());
// Opening it with CREATE_ALWAYS flag, which should truncate the file size.
- ASSERT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- AllowUsageIncrease(-length)->context(), file,
- base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
+ file = ofu()->CreateOrOpen(
+ AllowUsageIncrease(-length)->context(), url,
+ base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
+ ASSERT_TRUE(file.IsValid());
ASSERT_EQ(0, ComputeTotalFileSize());
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ file.Close();
// Extending the file again.
ASSERT_EQ(base::File::FILE_OK,
ofu()->Truncate(
- AllowUsageIncrease(length)->context(), file, length));
+ AllowUsageIncrease(length)->context(), url, length));
ASSERT_EQ(length, ComputeTotalFileSize());
// Opening it with TRUNCATED flag, which should truncate the file size.
- ASSERT_EQ(base::File::FILE_OK,
- ofu()->CreateOrOpen(
- AllowUsageIncrease(-length)->context(), file,
- base::PLATFORM_FILE_OPEN_TRUNCATED | base::PLATFORM_FILE_WRITE,
- &file_handle, &created));
+ file = ofu()->CreateOrOpen(
+ AllowUsageIncrease(-length)->context(), url,
+ base::File::FLAG_OPEN_TRUNCATED | base::File::FLAG_WRITE);
+ ASSERT_TRUE(file.IsValid());
ASSERT_EQ(0, ComputeTotalFileSize());
- EXPECT_TRUE(base::ClosePlatformFile(file_handle));
+ file.Close();
}
TEST_F(ObfuscatedFileUtilTest, MaybeDropDatabasesAliveCase) {
@@ -2440,25 +2411,19 @@ TEST_F(ObfuscatedFileUtilTest, MigrationBackFromIsolated) {
}
TEST_F(ObfuscatedFileUtilTest, OpenPathInNonDirectory) {
- FileSystemURL file(CreateURLFromUTF8("file"));
+ FileSystemURL url(CreateURLFromUTF8("file"));
FileSystemURL path_in_file(CreateURLFromUTF8("file/file"));
bool created;
ASSERT_EQ(base::File::FILE_OK,
- ofu()->EnsureFileExists(UnlimitedContext().get(), file, &created));
+ ofu()->EnsureFileExists(UnlimitedContext().get(), url, &created));
ASSERT_TRUE(created);
- created = false;
- base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
- int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
- ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY,
- ofu()->CreateOrOpen(UnlimitedContext().get(),
- path_in_file,
- file_flags,
- &file_handle,
- &created));
- ASSERT_FALSE(created);
- ASSERT_EQ(base::kInvalidPlatformFileValue, file_handle);
+ int file_flags = base::File::FLAG_CREATE | base::File::FLAG_WRITE;
+ base::File file =
+ ofu()->CreateOrOpen(UnlimitedContext().get(), path_in_file, file_flags);
+ ASSERT_FALSE(file.IsValid());
+ ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY, file.error_details());
ASSERT_EQ(base::File::FILE_ERROR_NOT_A_DIRECTORY,
ofu()->CreateDirectory(UnlimitedContext().get(),
diff --git a/content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc b/content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc
index 4240217dc4..e81dc7d18a 100644
--- a/content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc
+++ b/content/browser/fileapi/sandbox_prioritized_origin_database_unittest.cc
@@ -5,7 +5,6 @@
#include "base/basictypes.h"
#include "base/file_util.h"
#include "base/files/scoped_temp_dir.h"
-#include "base/platform_file.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/browser/fileapi/sandbox_origin_database.h"
#include "webkit/browser/fileapi/sandbox_prioritized_origin_database.h"
diff --git a/content/browser/fileapi/transient_file_util_unittest.cc b/content/browser/fileapi/transient_file_util_unittest.cc
index 4df102ac94..876733abaf 100644
--- a/content/browser/fileapi/transient_file_util_unittest.cc
+++ b/content/browser/fileapi/transient_file_util_unittest.cc
@@ -7,7 +7,6 @@
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/public/test/test_file_system_context.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/frame_host/cross_process_frame_connector.cc b/content/browser/frame_host/cross_process_frame_connector.cc
index 19fcdf0d4b..438f1f7c99 100644
--- a/content/browser/frame_host/cross_process_frame_connector.cc
+++ b/content/browser/frame_host/cross_process_frame_connector.cc
@@ -29,9 +29,8 @@ CrossProcessFrameConnector::~CrossProcessFrameConnector() {
bool CrossProcessFrameConnector::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(CrossProcessFrameConnector, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(CrossProcessFrameConnector, msg)
IPC_MESSAGE_HANDLER(FrameHostMsg_BuffersSwappedACK, OnBuffersSwappedACK)
IPC_MESSAGE_HANDLER(FrameHostMsg_CompositorFrameSwappedACK,
OnCompositorFrameSwappedACK)
@@ -41,7 +40,7 @@ bool CrossProcessFrameConnector::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(FrameHostMsg_InitializeChildFrame,
OnInitializeChildFrame)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -54,9 +53,12 @@ void CrossProcessFrameConnector::set_view(
view_ = view;
- // Attach ourselves to the new view.
- if (view_)
+ // Attach ourselves to the new view and size it appropriately.
+ if (view_) {
view_->set_cross_process_frame_connector(this);
+ SetDeviceScaleFactor(device_scale_factor_);
+ SetSize(child_frame_rect_);
+ }
}
void CrossProcessFrameConnector::RenderProcessGone() {
@@ -124,20 +126,11 @@ void CrossProcessFrameConnector::OnReclaimCompositorResources(
void CrossProcessFrameConnector::OnInitializeChildFrame(gfx::Rect frame_rect,
float scale_factor) {
- if (scale_factor != device_scale_factor_) {
- device_scale_factor_ = scale_factor;
- if (view_) {
- RenderWidgetHostImpl* child_widget =
- RenderWidgetHostImpl::From(view_->GetRenderWidgetHost());
- child_widget->NotifyScreenInfoChanged();
- }
- }
+ if (scale_factor != device_scale_factor_)
+ SetDeviceScaleFactor(scale_factor);
- if (!frame_rect.size().IsEmpty()) {
- child_frame_rect_ = frame_rect;
- if (view_)
- view_->SetSize(frame_rect.size());
- }
+ if (!frame_rect.size().IsEmpty())
+ SetSize(frame_rect);
}
gfx::Rect CrossProcessFrameConnector::ChildFrameRect() {
@@ -176,4 +169,19 @@ void CrossProcessFrameConnector::OnForwardInputEvent(
}
}
+void CrossProcessFrameConnector::SetDeviceScaleFactor(float scale_factor) {
+ device_scale_factor_ = scale_factor;
+ if (view_) {
+ RenderWidgetHostImpl* child_widget =
+ RenderWidgetHostImpl::From(view_->GetRenderWidgetHost());
+ child_widget->NotifyScreenInfoChanged();
+ }
+}
+
+void CrossProcessFrameConnector::SetSize(gfx::Rect frame_rect) {
+ child_frame_rect_ = frame_rect;
+ if (view_)
+ view_->SetSize(frame_rect.size());
+}
+
} // namespace content
diff --git a/content/browser/frame_host/cross_process_frame_connector.h b/content/browser/frame_host/cross_process_frame_connector.h
index 4a940879f4..b3d87a4c4d 100644
--- a/content/browser/frame_host/cross_process_frame_connector.h
+++ b/content/browser/frame_host/cross_process_frame_connector.h
@@ -101,6 +101,9 @@ class CrossProcessFrameConnector {
void OnForwardInputEvent(const blink::WebInputEvent* event);
void OnInitializeChildFrame(gfx::Rect frame_rect, float scale_factor);
+ void SetDeviceScaleFactor(float scale_factor);
+ void SetSize(gfx::Rect frame_rect);
+
// The RenderFrameHost that routes messages to the parent frame's renderer
// process.
// TODO(kenrb): The type becomes RenderFrameProxyHost when that class comes
diff --git a/content/browser/frame_host/debug_urls.cc b/content/browser/frame_host/debug_urls.cc
index 4e9d49d32a..0542f9e775 100644
--- a/content/browser/frame_host/debug_urls.cc
+++ b/content/browser/frame_host/debug_urls.cc
@@ -43,6 +43,9 @@ bool HandleDebugURL(const GURL& url, PageTransition transition) {
if (!(transition & PAGE_TRANSITION_FROM_ADDRESS_BAR))
return false;
+ // NOTE: when you add handling of any URLs to this function, also
+ // update IsDebugURL, below.
+
if (url.host() == kChromeUIBrowserCrashHost) {
// Induce an intentional crash in the browser process.
CHECK(false);
@@ -80,11 +83,24 @@ bool HandleDebugURL(const GURL& url, PageTransition transition) {
return false;
}
+bool IsDebugURL(const GURL& url) {
+ // NOTE: when you add any URLs to this list, also update
+ // HandleDebugURL, above.
+ return IsRendererDebugURL(url) ||
+ (url.is_valid() &&
+ (url.host() == kChromeUIBrowserCrashHost ||
+ url == GURL(kChromeUIGpuCleanURL) ||
+ url == GURL(kChromeUIGpuCrashURL) ||
+ url == GURL(kChromeUIGpuHangURL) ||
+ url == GURL(kChromeUIPpapiFlashCrashURL) ||
+ url == GURL(kChromeUIPpapiFlashHangURL)));
+}
+
bool IsRendererDebugURL(const GURL& url) {
if (!url.is_valid())
return false;
- if (url.SchemeIs(kJavaScriptScheme))
+ if (url.SchemeIs(url::kJavaScriptScheme))
return true;
return url == GURL(kChromeUICrashURL) ||
diff --git a/content/browser/frame_host/debug_urls.h b/content/browser/frame_host/debug_urls.h
index 01530b4680..2c871948ef 100644
--- a/content/browser/frame_host/debug_urls.h
+++ b/content/browser/frame_host/debug_urls.h
@@ -15,6 +15,11 @@ namespace content {
// handles it and returns true.
bool HandleDebugURL(const GURL& url, PageTransition transition);
+// Returns whether this given url is a debugging url. It is a superset
+// of IsRendererDebugURL, below, and debugging urls that are handled
+// in the browser process.
+bool IsDebugURL(const GURL& url);
+
// Returns whether the given url is either a debugging url handled in the
// renderer process, such as one that crashes or hangs the renderer, or a
// javascript: URL that operates on the current page in the renderer. Such URLs
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index 975e7d61e6..a4ea2997bf 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -360,6 +360,12 @@ void InterstitialPageImpl::WebContentsDestroyed() {
OnNavigatingAwayOrTabClosing();
}
+bool InterstitialPageImpl::OnMessageReceived(
+ const IPC::Message& message,
+ RenderFrameHost* render_frame_host) {
+ return OnMessageReceived(message);
+}
+
bool InterstitialPageImpl::OnMessageReceived(RenderFrameHost* render_frame_host,
const IPC::Message& message) {
return OnMessageReceived(message);
@@ -373,17 +379,11 @@ bool InterstitialPageImpl::OnMessageReceived(RenderViewHost* render_view_host,
bool InterstitialPageImpl::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- bool message_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(InterstitialPageImpl, message, message_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(InterstitialPageImpl, message)
IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse,
OnDomOperationResponse)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
-
- if (!message_is_ok) {
- RecordAction(base::UserMetricsAction("BadMessageTerminate_RVD"));
- web_contents()->GetRenderProcessHost()->ReceivedBadMessage();
- }
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -396,6 +396,42 @@ void InterstitialPageImpl::RenderFrameCreated(
render_frame_host);
}
+void InterstitialPageImpl::UpdateTitle(
+ RenderFrameHost* render_frame_host,
+ int32 page_id,
+ const base::string16& title,
+ base::i18n::TextDirection title_direction) {
+ if (!enabled())
+ return;
+
+ RenderViewHost* render_view_host = render_frame_host->GetRenderViewHost();
+ DCHECK(render_view_host == render_view_host_);
+ NavigationEntry* entry = controller_->GetVisibleEntry();
+ if (!entry) {
+ // Crash reports from the field indicate this can be NULL.
+ // This is unexpected as InterstitialPages constructed with the
+ // new_navigation flag set to true create a transient navigation entry
+ // (that is returned as the active entry). And the only case so far of
+ // interstitial created with that flag set to false is with the
+ // SafeBrowsingBlockingPage, when the resource triggering the interstitial
+ // is a sub-resource, meaning the main page has already been loaded and a
+ // navigation entry should have been created.
+ NOTREACHED();
+ return;
+ }
+
+ // If this interstitial is shown on an existing navigation entry, we'll need
+ // to remember its title so we can revert to it when hidden.
+ if (!new_navigation_ && !should_revert_web_contents_title_) {
+ original_web_contents_title_ = entry->GetTitle();
+ should_revert_web_contents_title_ = true;
+ }
+ // TODO(evan): make use of title_direction.
+ // http://code.google.com/p/chromium/issues/detail?id=27094
+ entry->SetTitle(title);
+ controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
+}
+
RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() {
return rvh_delegate_view_.get();
}
@@ -460,41 +496,6 @@ void InterstitialPageImpl::DidNavigate(
controller_->delegate()->GetRenderViewHost(), false, true, NULL);
}
-void InterstitialPageImpl::UpdateTitle(
- RenderViewHost* render_view_host,
- int32 page_id,
- const base::string16& title,
- base::i18n::TextDirection title_direction) {
- if (!enabled())
- return;
-
- DCHECK(render_view_host == render_view_host_);
- NavigationEntry* entry = controller_->GetVisibleEntry();
- if (!entry) {
- // Crash reports from the field indicate this can be NULL.
- // This is unexpected as InterstitialPages constructed with the
- // new_navigation flag set to true create a transient navigation entry
- // (that is returned as the active entry). And the only case so far of
- // interstitial created with that flag set to false is with the
- // SafeBrowsingBlockingPage, when the resource triggering the interstitial
- // is a sub-resource, meaning the main page has already been loaded and a
- // navigation entry should have been created.
- NOTREACHED();
- return;
- }
-
- // If this interstitial is shown on an existing navigation entry, we'll need
- // to remember its title so we can revert to it when hidden.
- if (!new_navigation_ && !should_revert_web_contents_title_) {
- original_web_contents_title_ = entry->GetTitle();
- should_revert_web_contents_title_ = true;
- }
- // TODO(evan): make use of title_direction.
- // http://code.google.com/p/chromium/issues/detail?id=27094
- entry->SetTitle(title);
- controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
-}
-
RendererPreferences InterstitialPageImpl::GetRendererPrefs(
BrowserContext* browser_context) const {
delegate_->OverrideRendererPrefs(&renderer_preferences_);
@@ -576,6 +577,7 @@ WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
GetMaxPageIDForSiteInstance(render_view_host_->GetSiteInstance());
render_view_host_->CreateRenderView(base::string16(),
MSG_ROUTING_NONE,
+ MSG_ROUTING_NONE,
max_page_id,
false);
controller_->delegate()->RenderFrameForInterstitialPageCreated(
diff --git a/content/browser/frame_host/interstitial_page_impl.h b/content/browser/frame_host/interstitial_page_impl.h
index fe9eee45ba..8068fd34e0 100644
--- a/content/browser/frame_host/interstitial_page_impl.h
+++ b/content/browser/frame_host/interstitial_page_impl.h
@@ -104,6 +104,8 @@ class CONTENT_EXPORT InterstitialPageImpl
const NotificationDetails& details) OVERRIDE;
// WebContentsObserver implementation:
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void WebContentsDestroyed() OVERRIDE;
virtual void NavigationEntryCommitted(
@@ -113,6 +115,10 @@ class CONTENT_EXPORT InterstitialPageImpl
virtual bool OnMessageReceived(RenderFrameHost* render_frame_host,
const IPC::Message& message) OVERRIDE;
virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE;
+ virtual void UpdateTitle(RenderFrameHost* render_frame_host,
+ int32 page_id,
+ const base::string16& title,
+ base::i18n::TextDirection title_direction) OVERRIDE;
// RenderViewHostDelegate implementation:
virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
@@ -122,10 +128,6 @@ class CONTENT_EXPORT InterstitialPageImpl
virtual void RenderViewTerminated(RenderViewHost* render_view_host,
base::TerminationStatus status,
int error_code) OVERRIDE;
- virtual void UpdateTitle(RenderViewHost* render_view_host,
- int32 page_id,
- const base::string16& title,
- base::i18n::TextDirection title_direction) OVERRIDE;
virtual RendererPreferences GetRendererPrefs(
BrowserContext* browser_context) const OVERRIDE;
virtual WebPreferences GetWebkitPrefs() OVERRIDE;
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 79e2c7b478..54691513c4 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -5,12 +5,15 @@
#include "content/browser/frame_host/navigation_controller_impl.h"
#include "base/bind.h"
+#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
#include "base/strings/string_number_conversions.h" // Temporary
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
+#include "cc/base/switches.h"
#include "content/browser/browser_url_handler_impl.h"
#include "content/browser/dom_storage/dom_storage_context_wrapper.h"
#include "content/browser/dom_storage/session_storage_namespace_impl.h"
@@ -34,11 +37,11 @@
#include "content/public/browser/user_metrics.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_constants.h"
-#include "content/public/common/url_constants.h"
#include "net/base/escape.h"
#include "net/base/mime_util.h"
#include "net/base/net_util.h"
#include "skia/ext/platform_canvas.h"
+#include "url/url_constants.h"
namespace content {
namespace {
@@ -335,9 +338,9 @@ void NavigationControllerImpl::ReloadInternal(bool check_for_repost,
// instance, and should not be treated as a cross-site reload.
SiteInstanceImpl* site_instance = entry->site_instance();
// Permit reloading guests without further checks.
- bool is_guest = site_instance && site_instance->HasProcess() &&
- site_instance->GetProcess()->IsGuest();
- if (!is_guest && site_instance &&
+ bool is_isolated_guest = site_instance && site_instance->HasProcess() &&
+ site_instance->GetProcess()->IsIsolatedGuest();
+ if (!is_isolated_guest && site_instance &&
site_instance->HasWrongProcessForURL(entry->GetURL())) {
// Create a navigation entry that resembles the current one, but do not
// copy page id, site instance, content state, or timestamp.
@@ -661,7 +664,7 @@ void NavigationControllerImpl::LoadURLWithParams(const LoadURLParams& params) {
}
break;
case LOAD_TYPE_DATA:
- if (!params.url.SchemeIs(kDataScheme)) {
+ if (!params.url.SchemeIs(url::kDataScheme)) {
NOTREACHED() << "Data load must use data scheme.";
return;
}
@@ -824,6 +827,14 @@ bool NavigationControllerImpl::RendererDidNavigate(
active_entry->SetPageState(params.page_state);
active_entry->SetRedirectChain(params.redirects);
+ // Use histogram to track memory impact of redirect chain because it's now
+ // not cleared for committed entries.
+ size_t redirect_chain_size = 0;
+ for (size_t i = 0; i < params.redirects.size(); ++i) {
+ redirect_chain_size += params.redirects[i].spec().length();
+ }
+ UMA_HISTOGRAM_COUNTS("Navigation.RedirectChainSize", redirect_chain_size);
+
// Once it is committed, we no longer need to track several pieces of state on
// the entry.
active_entry->ResetForCommit();
@@ -1012,8 +1023,18 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
// update the virtual URL when replaceState is called after a pushState.
GURL url = params.url;
bool needs_update = false;
- BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary(
- &url, browser_context_, &needs_update);
+ // We call RewriteURLIfNecessary twice: once when page navigation
+ // begins in CreateNavigationEntry, and once here when it commits.
+ // With the kEnableGpuBenchmarking flag, the rewriting includes
+ // handling debug URLs which cause an action to occur, and thus we
+ // should not rewrite them a second time.
+ bool skip_rewrite =
+ IsDebugURL(url) && base::CommandLine::ForCurrentProcess()->HasSwitch(
+ cc::switches::kEnableGpuBenchmarking);
+ if (!skip_rewrite) {
+ BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary(
+ &url, browser_context_, &needs_update);
+ }
new_entry->set_update_virtual_url_with_url(needs_update);
// When navigating to a new page, give the browser URL handler a chance to
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index 1a8c8a9b0d..6afa917a14 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -1218,7 +1218,7 @@ TEST_F(NavigationControllerTest, ReloadWithGuest) {
NavigationEntryImpl* entry1 =
NavigationEntryImpl::FromNavigationEntry(controller.GetVisibleEntry());
reinterpret_cast<MockRenderProcessHost*>(
- entry1->site_instance()->GetProcess())->SetIsGuest(true);
+ entry1->site_instance()->GetProcess())->set_is_isolated_guest(true);
// And reload.
controller.Reload(true);
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 64d242174b..493f94082e 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -368,7 +368,7 @@ bool NavigatorImpl::NavigateToEntry(
// do not generate content. What we really need is a message from the
// renderer telling us that a new page was not created. The same message
// could be used for mailto: URLs and the like.
- if (entry.GetURL().SchemeIs(kJavaScriptScheme))
+ if (entry.GetURL().SchemeIs(url::kJavaScriptScheme))
return false;
}
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index fbc4613b2b..b4db5d4c9c 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -6,6 +6,7 @@
#define CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_DELEGATE_H_
#include "base/basictypes.h"
+#include "base/i18n/rtl.h"
#include "content/common/content_export.h"
#include "content/public/common/javascript_message_type.h"
@@ -51,10 +52,6 @@ class CONTENT_EXPORT RenderFrameHostDelegate {
virtual void DidStartLoading(RenderFrameHost* render_frame_host,
bool to_different_document) {}
- // The top-level RenderFrame stopped loading a page. This corresponds to
- // Blink's notion of the throbber stopping.
- virtual void DidStopLoading(RenderFrameHost* render_frame_host) {}
-
// The RenderFrameHost has been swapped out.
virtual void SwappedOut(RenderFrameHost* render_frame_host) {}
@@ -91,6 +88,18 @@ class CONTENT_EXPORT RenderFrameHostDelegate {
// level frame.
virtual void DocumentOnLoadCompleted(RenderFrameHost* render_frame_host) {}
+ // The page's title was changed and should be updated. Only called for the
+ // top-level frame.
+ virtual void UpdateTitle(RenderFrameHost* render_frame_host,
+ int32 page_id,
+ const base::string16& title,
+ base::i18n::TextDirection title_direction) {}
+
+ // The page's encoding was changed and should be updated. Only called for the
+ // top-level frame.
+ virtual void UpdateEncoding(RenderFrameHost* render_frame_host,
+ const std::string& encoding) {}
+
// Return this object cast to a WebContents, if it is one. If the object is
// not a WebContents, returns NULL.
virtual WebContents* GetAsWebContents();
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index f9e19e6cb7..f883a45098 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -15,9 +15,11 @@
#include "content/browser/frame_host/frame_tree_node.h"
#include "content/browser/frame_host/navigator.h"
#include "content/browser/frame_host/render_frame_host_delegate.h"
+#include "content/browser/frame_host/render_frame_proxy_host.h"
#include "content/browser/renderer_host/input/input_router.h"
#include "content/browser/renderer_host/input/timeout_monitor.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/common/desktop_notification_messages.h"
#include "content/common/frame_messages.h"
#include "content/common/input_messages.h"
@@ -29,6 +31,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/user_metrics.h"
+#include "content/public/common/content_constants.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "url/gurl.h"
@@ -106,6 +109,20 @@ class DesktopNotificationDelegateImpl : public DesktopNotificationDelegate {
int notification_id_;
};
+// Translate a WebKit text direction into a base::i18n one.
+base::i18n::TextDirection WebTextDirectionToChromeTextDirection(
+ blink::WebTextDirection dir) {
+ switch (dir) {
+ case blink::WebTextDirectionLeftToRight:
+ return base::i18n::LEFT_TO_RIGHT;
+ case blink::WebTextDirectionRightToLeft:
+ return base::i18n::RIGHT_TO_LEFT;
+ default:
+ NOTREACHED();
+ return base::i18n::UNKNOWN_DIRECTION;
+ }
+}
+
} // namespace
RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
@@ -133,6 +150,7 @@ RenderFrameHostImpl::RenderFrameHostImpl(
: render_view_host_(render_view_host),
delegate_(delegate),
cross_process_frame_connector_(NULL),
+ render_frame_proxy_host_(NULL),
frame_tree_(frame_tree),
frame_tree_node_(frame_tree_node),
routing_id_(routing_id),
@@ -229,6 +247,11 @@ bool RenderFrameHostImpl::Send(IPC::Message* message) {
make_scoped_ptr(message));
}
+ if (render_view_host_->IsSwappedOut()) {
+ DCHECK(render_frame_proxy_host_);
+ return render_frame_proxy_host_->Send(message);
+ }
+
return GetProcess()->Send(message);
}
@@ -261,8 +284,7 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
return true;
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameHostImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderFrameHostImpl, msg)
IPC_MESSAGE_HANDLER(FrameHostMsg_AddMessageToConsole, OnAddMessageToConsole)
IPC_MESSAGE_HANDLER(FrameHostMsg_Detach, OnDetach)
IPC_MESSAGE_HANDLER(FrameHostMsg_FrameFocused, OnFrameFocused)
@@ -276,8 +298,6 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
OnDidFailLoadWithError)
IPC_MESSAGE_HANDLER_GENERIC(FrameHostMsg_DidCommitProvisionalLoad,
OnNavigate(msg))
- IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartLoading, OnDidStartLoading)
- IPC_MESSAGE_HANDLER(FrameHostMsg_DidStopLoading, OnDidStopLoading)
IPC_MESSAGE_HANDLER(FrameHostMsg_OpenURL, OnOpenURL)
IPC_MESSAGE_HANDLER(FrameHostMsg_DocumentOnLoadCompleted,
OnDocumentOnLoadCompleted)
@@ -293,20 +313,15 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument,
OnDidAccessInitialDocument)
IPC_MESSAGE_HANDLER(FrameHostMsg_DidDisownOpener, OnDidDisownOpener)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateTitle, OnUpdateTitle)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateEncoding, OnUpdateEncoding)
IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission,
OnRequestDesktopNotificationPermission)
IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show,
OnShowDesktopNotification)
IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel,
OnCancelDesktopNotification)
- IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- // The message had a handler, but its de-serialization failed.
- // Kill the renderer.
- RecordAction(base::UserMetricsAction("BadMessageTerminate_RFH"));
- GetProcess()->ReceivedBadMessage();
- }
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -474,6 +489,10 @@ void RenderFrameHostImpl::OnNavigate(const IPC::Message& msg) {
frame_tree_node()->navigator()->DidNavigate(this, validated_params);
}
+RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
+ return static_cast<RenderWidgetHostImpl*>(render_view_host_);
+}
+
int RenderFrameHostImpl::GetEnabledBindings() {
return render_view_host_->GetEnabledBindings();
}
@@ -491,7 +510,7 @@ void RenderFrameHostImpl::OnCrossSiteResponse(
should_replace_current_entry);
}
-void RenderFrameHostImpl::SwapOut() {
+void RenderFrameHostImpl::SwapOut(RenderFrameProxyHost* proxy) {
// TODO(creis): Move swapped out state to RFH. Until then, only update it
// when swapping out the main frame.
if (!GetParent()) {
@@ -507,8 +526,10 @@ void RenderFrameHostImpl::SwapOut() {
RenderViewHostImpl::kUnloadTimeoutMS));
}
+ set_render_frame_proxy_host(proxy);
+
if (render_view_host_->IsRenderViewLive())
- Send(new FrameMsg_SwapOut(routing_id_));
+ Send(new FrameMsg_SwapOut(routing_id_, proxy->GetRoutingID()));
if (!GetParent())
delegate_->SwappedOut(this);
@@ -517,14 +538,6 @@ void RenderFrameHostImpl::SwapOut() {
frame_tree_node_->render_manager()->SwappedOut(this);
}
-void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) {
- delegate_->DidStartLoading(this, to_different_document);
-}
-
-void RenderFrameHostImpl::OnDidStopLoading() {
- delegate_->DidStopLoading(this);
-}
-
void RenderFrameHostImpl::OnBeforeUnloadACK(
bool proceed,
const base::TimeTicks& renderer_before_unload_start_time,
@@ -695,6 +708,28 @@ void RenderFrameHostImpl::OnDidDisownOpener() {
delegate_->DidDisownOpener(this);
}
+void RenderFrameHostImpl::OnUpdateTitle(
+ int32 page_id,
+ const base::string16& title,
+ blink::WebTextDirection title_direction) {
+ // This message is only sent for top-level frames. TODO(avi): when frame tree
+ // mirroring works correctly, add a check here to enforce it.
+ if (title.length() > kMaxTitleChars) {
+ NOTREACHED() << "Renderer sent too many characters in title.";
+ return;
+ }
+
+ delegate_->UpdateTitle(this, page_id, title,
+ WebTextDirectionToChromeTextDirection(
+ title_direction));
+}
+
+void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) {
+ // This message is only sent for top-level frames. TODO(avi): when frame tree
+ // mirroring works correctly, add a check here to enforce it.
+ delegate_->UpdateEncoding(this, encoding_name);
+}
+
void RenderFrameHostImpl::SetPendingShutdown(const base::Closure& on_swap_out) {
render_view_host_->SetPendingShutdown(on_swap_out);
}
@@ -712,11 +747,11 @@ void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) {
TRACE_EVENT0("frame_host", "RenderFrameHostImpl::Navigate");
// Browser plugin guests are not allowed to navigate outside web-safe schemes,
// so do not grant them the ability to request additional URLs.
- if (!GetProcess()->IsGuest()) {
+ if (!GetProcess()->IsIsolatedGuest()) {
ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
GetProcess()->GetID(), params.url);
- if (params.url.SchemeIs(kDataScheme) &&
- params.base_url_for_data_url.SchemeIs(kFileScheme)) {
+ if (params.url.SchemeIs(url::kDataScheme) &&
+ params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
// If 'data:' is used, and we have a 'file:' base url, grant access to
// local files.
ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
@@ -753,7 +788,7 @@ void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) {
//
// Blink doesn't send throb notifications for JavaScript URLs, so we
// don't want to either.
- if (!params.url.SchemeIs(kJavaScriptScheme))
+ if (!params.url.SchemeIs(url::kJavaScriptScheme))
delegate_->DidStartLoading(this, true);
}
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 3acb62629e..ab32d9f767 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -17,6 +17,7 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/common/javascript_message_type.h"
#include "content/public/common/page_transition_types.h"
+#include "third_party/WebKit/public/web/WebTextDirection.h"
class GURL;
struct FrameHostMsg_DidFailProvisionalLoadWithError_Params;
@@ -35,8 +36,10 @@ class CrossSiteTransferringRequest;
class FrameTree;
class FrameTreeNode;
class RenderFrameHostDelegate;
+class RenderFrameProxyHost;
class RenderProcessHost;
class RenderViewHostImpl;
+class RenderWidgetHostImpl;
struct ContextMenuParams;
struct GlobalRequestID;
struct Referrer;
@@ -78,6 +81,9 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
RenderViewHostImpl* render_view_host() { return render_view_host_; }
RenderFrameHostDelegate* delegate() { return delegate_; }
FrameTreeNode* frame_tree_node() { return frame_tree_node_; }
+ // TODO(nasko): The RenderWidgetHost will be owned by RenderFrameHost in
+ // the future, so update this accessor to return the right pointer.
+ RenderWidgetHostImpl* GetRenderWidgetHost();
// This function is called when this is a swapped out RenderFrameHost that
// lives in the same process as the parent frame. The
@@ -91,6 +97,10 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
cross_process_frame_connector_ = cross_process_frame_connector;
}
+ void set_render_frame_proxy_host(RenderFrameProxyHost* proxy) {
+ render_frame_proxy_host_ = proxy;
+ }
+
// Returns a bitwise OR of bindings types that have been enabled for this
// RenderFrameHostImpl's RenderView. See BindingsPolicy for details.
// TODO(creis): Make bindings frame-specific, to support cases like <webview>.
@@ -109,12 +119,12 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
bool should_replace_current_entry);
// Tells the renderer that this RenderFrame is being swapped out for one in a
- // different renderer process. It should run its unload handler and move to
- // a blank document. The renderer should preserve the Frame object until it
- // exits, in case we come back. The renderer can exit if it has no other
- // active RenderFrames, but not until WasSwappedOut is called (when it is no
- // longer visible).
- void SwapOut();
+ // different renderer process. It should run its unload handler, move to
+ // a blank document and create a RenderFrameProxy to replace the RenderFrame.
+ // The renderer should preserve the Proxy object until it exits, in case we
+ // come back. The renderer can exit if it has no other active RenderFrames,
+ // but not until WasSwappedOut is called (when it is no longer visible).
+ void SwapOut(RenderFrameProxyHost* proxy);
void OnSwappedOut(bool timed_out);
bool is_swapped_out() { return is_swapped_out_; }
@@ -126,12 +136,6 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
// when the SwapOutACK is received.
void SetPendingShutdown(const base::Closure& on_swap_out);
- // TODO(nasko): This method is public so RenderViewHostImpl::Navigate can
- // call it directly. It should be made private once Navigate moves here.
- // |to_different_document| will be true unless the load is a fragment
- // navigation, or triggered by history.pushState/replaceState.
- void OnDidStartLoading(bool to_different_document);
-
// Sends the given navigation message. Use this rather than sending it
// yourself since this does the internal bookkeeping described below. This
// function takes ownership of the provided message pointer.
@@ -201,7 +205,6 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
const GURL& source_url,
const GURL& target_url);
void OnNavigate(const IPC::Message& msg);
- void OnDidStopLoading();
void OnBeforeUnloadACK(
bool proceed,
const base::TimeTicks& renderer_before_unload_start_time,
@@ -226,6 +229,10 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
void OnCancelDesktopNotification(int notification_id);
void OnDidAccessInitialDocument();
void OnDidDisownOpener();
+ void OnUpdateTitle(int32 page_id,
+ const base::string16& title,
+ blink::WebTextDirection title_direction);
+ void OnUpdateEncoding(const std::string& encoding);
// Returns whether the given URL is allowed to commit in the current process.
// This is a more conservative check than RenderProcessHost::FilterURL, since
@@ -256,6 +263,12 @@ class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
// This will move to RenderFrameProxyHost when that class is created.
CrossProcessFrameConnector* cross_process_frame_connector_;
+ // The proxy created for this RenderFrameHost. It is used to send and receive
+ // IPC messages while in swapped out state.
+ // TODO(nasko): This can be removed once we don't have a swapped out state on
+ // RenderFrameHosts. See https://crbug.com/357747.
+ RenderFrameProxyHost* render_frame_proxy_host_;
+
// Reference to the whole frame tree that this RenderFrameHost belongs to.
// Allows this RenderFrameHost to add and remove nodes in response to
// messages from the renderer requesting DOM manipulation.
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 13a03b3afc..0c219d17c2 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -22,6 +22,7 @@
#include "content/browser/frame_host/render_frame_host_factory.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/frame_host/render_frame_proxy_host.h"
+#include "content/browser/frame_host/render_widget_host_view_child_frame.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_factory.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
@@ -34,6 +35,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_widget_host_iterator.h"
+#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_ui_controller.h"
#include "content/public/common/content_switches.h"
@@ -91,7 +93,7 @@ RenderFrameHostManager::~RenderFrameHostManager() {
delete cross_process_frame_connector_;
// We should always have a current RenderFrameHost except in some tests.
- render_frame_host_.reset();
+ SetRenderFrameHost(scoped_ptr<RenderFrameHostImpl>());
// Delete any swapped out RenderFrameHosts.
STLDeleteValues(&proxy_hosts_);
@@ -107,11 +109,11 @@ void RenderFrameHostManager::Init(BrowserContext* browser_context,
if (!site_instance)
site_instance = SiteInstance::Create(browser_context);
- render_frame_host_ = CreateRenderFrameHost(site_instance,
- view_routing_id,
- frame_routing_id,
- false,
- delegate_->IsHidden());
+ SetRenderFrameHost(CreateRenderFrameHost(site_instance,
+ view_routing_id,
+ frame_routing_id,
+ false,
+ delegate_->IsHidden()));
// Keep track of renderer processes as they start to shut down or are
// crashed/killed.
@@ -175,7 +177,8 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
// Note: we don't call InitRenderView here because we are navigating away
// soon anyway, and we don't have the NavigationEntry for this host.
delegate_->CreateRenderViewForRenderManager(
- render_frame_host_->render_view_host(), MSG_ROUTING_NONE, NULL);
+ render_frame_host_->render_view_host(), MSG_ROUTING_NONE,
+ MSG_ROUTING_NONE, frame_tree_node_->IsMainFrame());
}
// If the renderer crashed, then try to create a new one to satisfy this
@@ -185,7 +188,9 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager(
dest_render_frame_host->GetSiteInstance());
if (!InitRenderView(dest_render_frame_host->render_view_host(),
- opener_route_id))
+ opener_route_id,
+ MSG_ROUTING_NONE,
+ frame_tree_node_->IsMainFrame()))
return NULL;
// Now that we've created a new renderer, be sure to hide it if it isn't
@@ -451,7 +456,7 @@ void RenderFrameHostManager::DidDisownOpener(RenderViewHost* render_view_host) {
++iter) {
DCHECK_NE(iter->second->GetSiteInstance(),
current_frame_host()->GetSiteInstance());
- iter->second->render_view_host()->DisownOpener();
+ iter->second->GetRenderViewHost()->DisownOpener();
}
}
@@ -500,17 +505,34 @@ void RenderFrameHostManager::SwapOutOldPage() {
// process navigations, but it will be destroyed if the Frame is
// navigated back to the same site instance as its parent.
// TODO(kenrb): This will change when RenderFrameProxyHost is created.
+ // TODO(nasko): Move CrossProcessFrameConnector to be owned by
+ // RenderFrameProxyHost instead of RenderFrameHostManager once proxy
+ // support lands.
if (!cross_process_frame_connector_) {
cross_process_frame_connector_ =
new CrossProcessFrameConnector(render_frame_host_.get());
}
}
+ // Create the RenderFrameProxyHost that will replace the
+ // RenderFrameHost which is swapping out. If one exists, ensure it is deleted
+ // from the map and not leaked.
+ RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(
+ render_frame_host_->GetSiteInstance()->GetId());
+ if (iter != proxy_hosts_.end()) {
+ delete iter->second;
+ proxy_hosts_.erase(iter);
+ }
+
+ RenderFrameProxyHost* proxy = new RenderFrameProxyHost(
+ render_frame_host_->GetSiteInstance(), frame_tree_node_);
+ proxy_hosts_[render_frame_host_->GetSiteInstance()->GetId()] = proxy;
+
// Tell the old frame it is being swapped out. This will fire the unload
// handler in the background (without firing the beforeunload handler a second
// time). When the navigation completes, we will send a message to the
// ResourceDispatcherHost, allowing the pending RVH's response to resume.
- render_frame_host_->SwapOut();
+ render_frame_host_->SwapOut(proxy);
// ResourceDispatcherHost has told us to run the onunload handler, which
// means it is not a download or unsafe page, and we are going to perform the
@@ -531,6 +553,10 @@ void RenderFrameHostManager::ClearPendingShutdownRFHForSiteInstance(
pending_delete_hosts_.erase(site_instance_id);
}
+void RenderFrameHostManager::ResetProxyHosts() {
+ STLDeleteValues(&proxy_hosts_);
+}
+
void RenderFrameHostManager::Observe(
int type,
const NotificationSource& source,
@@ -556,9 +582,10 @@ bool RenderFrameHostManager::ClearProxiesInSiteInstance(
RenderFrameProxyHost* proxy = iter->second;
// If the RVH is pending swap out, it needs to switch state to
// pending shutdown. Otherwise it is deleted.
- if (proxy->render_view_host()->rvh_state() ==
+ if (proxy->GetRenderViewHost()->rvh_state() ==
RenderViewHostImpl::STATE_PENDING_SWAP_OUT) {
- scoped_ptr<RenderFrameHostImpl> swapped_out_rfh = proxy->PassFrameHost();
+ scoped_ptr<RenderFrameHostImpl> swapped_out_rfh =
+ proxy->PassFrameHostOwnership();
swapped_out_rfh->SetPendingShutdown(base::Bind(
&RenderFrameHostManager::ClearPendingShutdownRFHForSiteInstance,
@@ -573,9 +600,8 @@ bool RenderFrameHostManager::ClearProxiesInSiteInstance(
node->render_manager()->pending_delete_hosts_[site_instance_id] =
linked_ptr<RenderFrameHostImpl>(swapped_out_rfh.release());
}
- } else {
- delete proxy;
}
+ delete proxy;
node->render_manager()->proxy_hosts_.erase(site_instance_id);
}
@@ -883,6 +909,7 @@ int RenderFrameHostManager::CreateRenderFrame(
DCHECK(!swapped_out || hidden); // Swapped out views should always be hidden.
scoped_ptr<RenderFrameHostImpl> new_render_frame_host;
+ RenderFrameHostImpl* frame_to_announce = NULL;
int routing_id = MSG_ROUTING_NONE;
// We are creating a pending or swapped out RFH here. We should never create
@@ -897,15 +924,29 @@ int RenderFrameHostManager::CreateRenderFrame(
FrameTreeNode* parent_node = frame_tree_node_->parent();
if (proxy) {
- routing_id = proxy->render_view_host()->GetRoutingID();
+ routing_id = proxy->GetRenderViewHost()->GetRoutingID();
// Delete the existing RenderFrameProxyHost, but reuse the RenderFrameHost.
// Prevent the process from exiting while we're trying to use it.
if (!swapped_out) {
- new_render_frame_host = proxy->PassFrameHost();
+ new_render_frame_host = proxy->PassFrameHostOwnership();
new_render_frame_host->GetProcess()->AddPendingView();
proxy_hosts_.erase(instance->GetId());
delete proxy;
+
+ // When a new render view is created by the renderer, the new WebContents
+ // gets a RenderViewHost in the SiteInstance of its opener WebContents.
+ // If not used in the first navigation, this RVH is swapped out and is not
+ // granted bindings, so we may need to grant them when swapping it in.
+ if (pending_web_ui() &&
+ !new_render_frame_host->GetProcess()->IsIsolatedGuest()) {
+ int required_bindings = pending_web_ui()->GetBindings();
+ RenderViewHost* rvh = new_render_frame_host->render_view_host();
+ if ((rvh->GetEnabledBindings() & required_bindings) !=
+ required_bindings) {
+ rvh->AllowBindings(required_bindings);
+ }
+ }
} else {
// Detect if this is a cross-process child frame that is navigating
// back to the same SiteInstance as its parent.
@@ -922,17 +963,23 @@ int RenderFrameHostManager::CreateRenderFrame(
instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, swapped_out, hidden);
RenderViewHostImpl* render_view_host =
new_render_frame_host->render_view_host();
+ int proxy_routing_id = MSG_ROUTING_NONE;
// Prevent the process from exiting while we're trying to navigate in it.
// Otherwise, if the new RFH is swapped out already, store it.
if (!swapped_out) {
new_render_frame_host->GetProcess()->AddPendingView();
} else {
- proxy_hosts_[instance->GetId()] = new RenderFrameProxyHost(
- new_render_frame_host.Pass());
+ proxy = new RenderFrameProxyHost(
+ new_render_frame_host->GetSiteInstance(), frame_tree_node_);
+ proxy_hosts_[instance->GetId()] = proxy;
+ proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
+ proxy_routing_id = proxy->GetRoutingID();
}
- bool success = InitRenderView(render_view_host, opener_route_id);
+ bool success = InitRenderView(
+ render_view_host, opener_route_id, proxy_routing_id,
+ frame_tree_node_->IsMainFrame());
if (success && frame_tree_node_->IsMainFrame()) {
// Don't show the main frame's view until we get a DidNavigate from it.
render_view_host->GetView()->Hide();
@@ -940,17 +987,24 @@ int RenderFrameHostManager::CreateRenderFrame(
CancelPending();
}
routing_id = render_view_host->GetRoutingID();
+ frame_to_announce = new_render_frame_host.get();
}
// Use this as our new pending RFH if it isn't swapped out.
if (!swapped_out)
pending_render_frame_host_ = new_render_frame_host.Pass();
+ // If a brand new RFH was created, announce it to observers.
+ if (frame_to_announce)
+ render_frame_delegate_->RenderFrameCreated(frame_to_announce);
+
return routing_id;
}
bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host,
- int opener_route_id) {
+ int opener_route_id,
+ int proxy_routing_id,
+ bool for_main_frame) {
// We may have initialized this RenderViewHost for another RenderFrameHost.
if (render_view_host->IsRenderViewLive())
return true;
@@ -958,7 +1012,7 @@ bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host,
// If the pending navigation is to a WebUI and the RenderView is not in a
// guest process, tell the RenderViewHost about any bindings it will need
// enabled.
- if (pending_web_ui() && !render_view_host->GetProcess()->IsGuest()) {
+ if (pending_web_ui() && !render_view_host->GetProcess()->IsIsolatedGuest()) {
render_view_host->AllowBindings(pending_web_ui()->GetBindings());
} else {
// Ensure that we don't create an unprivileged RenderView in a WebUI-enabled
@@ -972,7 +1026,7 @@ bool RenderFrameHostManager::InitRenderView(RenderViewHost* render_view_host,
}
return delegate_->CreateRenderViewForRenderManager(
- render_view_host, opener_route_id, cross_process_frame_connector_);
+ render_view_host, opener_route_id, proxy_routing_id, for_main_frame);
}
void RenderFrameHostManager::CommitPending() {
@@ -1024,8 +1078,7 @@ void RenderFrameHostManager::CommitPending() {
// Swap in the pending frame and make it active. Also ensure the FrameTree
// stays in sync.
scoped_ptr<RenderFrameHostImpl> old_render_frame_host =
- render_frame_host_.Pass();
- render_frame_host_ = pending_render_frame_host_.Pass();
+ SetRenderFrameHost(pending_render_frame_host_.Pass());
if (is_main_frame)
render_frame_host_->render_view_host()->AttachToFrameTree();
@@ -1093,24 +1146,20 @@ void RenderFrameHostManager::CommitPending() {
DCHECK(old_render_frame_host->is_swapped_out() ||
!RenderViewHostImpl::IsRVHStateActive(
old_render_frame_host->render_view_host()->rvh_state()));
- // Temp fix for http://crbug.com/90867 until we do a better cleanup to make
- // sure we don't get different rvh instances for the same site instance
- // in the same rvhmgr.
- // TODO(creis): Clean this up.
- RenderFrameProxyHostMap::iterator iter =
- proxy_hosts_.find(old_site_instance_id);
- if (iter != proxy_hosts_.end() &&
- iter->second->render_frame_host() != old_render_frame_host) {
- // Delete the proxy that will be replaced in the map to avoid a leak.
- delete iter->second;
- }
// If the RenderViewHost backing the RenderFrameHost is pending shutdown,
// the RenderFrameHost should be put in the map of RenderFrameHosts pending
// shutdown. Otherwise, it is stored in the map of proxy hosts.
if (old_render_frame_host->render_view_host()->rvh_state() ==
RenderViewHostImpl::STATE_PENDING_SHUTDOWN) {
- proxy_hosts_.erase(old_site_instance_id);
+ // The proxy for this RenderFrameHost is created when sending the
+ // SwapOut message, so check if it already exists and delete it.
+ RenderFrameProxyHostMap::iterator iter =
+ proxy_hosts_.find(old_site_instance_id);
+ if (iter != proxy_hosts_.end()) {
+ delete iter->second;
+ proxy_hosts_.erase(iter);
+ }
RFHPendingDeleteMap::iterator pending_delete_iter =
pending_delete_hosts_.find(old_site_instance_id);
if (pending_delete_iter == pending_delete_hosts_.end() ||
@@ -1119,18 +1168,34 @@ void RenderFrameHostManager::CommitPending() {
linked_ptr<RenderFrameHostImpl>(old_render_frame_host.release());
}
} else {
+ // Capture the active view count on the old RFH SiteInstance, since the
+ // ownership will be passed into the proxy and the pointer will be invalid.
+ int active_view_count =
+ static_cast<SiteInstanceImpl*>(old_render_frame_host->GetSiteInstance())
+ ->active_view_count();
+
+ RenderFrameProxyHostMap::iterator iter =
+ proxy_hosts_.find(old_site_instance_id);
+ CHECK(iter != proxy_hosts_.end());
+ iter->second->TakeFrameHostOwnership(old_render_frame_host.Pass());
+
// If there are no active views in this SiteInstance, it means that
// this RFH was the last active one in the SiteInstance. Now that we
// know that all RFHs are swapped out, we can delete all the RFHs and RVHs
- // in this SiteInstance. We do this after ensuring the RFH is on the
- // swapped out list to simplify the deletion.
- if (!static_cast<SiteInstanceImpl*>(
- old_render_frame_host->GetSiteInstance())->active_view_count()) {
- old_render_frame_host.reset();
+ // in this SiteInstance.
+ if (!active_view_count) {
ShutdownRenderFrameHostsInSiteInstance(old_site_instance_id);
} else {
- proxy_hosts_[old_site_instance_id] = new RenderFrameProxyHost(
- old_render_frame_host.Pass());
+ // If this is a subframe, it should have a CrossProcessFrameConnector
+ // created already and we just need to link it to the proper view in the
+ // new process.
+ if (!is_main_frame) {
+ RenderWidgetHostView* rwhv =
+ render_frame_host_->render_view_host()->GetView();
+ RenderWidgetHostViewChildFrame* rwhv_child =
+ static_cast<RenderWidgetHostViewChildFrame*>(rwhv);
+ cross_process_frame_connector_->set_view(rwhv_child);
+ }
}
}
}
@@ -1301,7 +1366,8 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
SetPendingWebUI(entry);
// Make sure the new RenderViewHost has the right bindings.
- if (pending_web_ui() && !render_frame_host_->GetProcess()->IsGuest()) {
+ if (pending_web_ui() &&
+ !render_frame_host_->GetProcess()->IsIsolatedGuest()) {
render_frame_host_->render_view_host()->AllowBindings(
pending_web_ui()->GetBindings());
}
@@ -1343,10 +1409,11 @@ void RenderFrameHostManager::CancelPending() {
// Any currently suspended navigations are no longer needed.
pending_render_frame_host->render_view_host()->CancelSuspendedNavigations();
- pending_render_frame_host->SwapOut();
-
- proxy_hosts_[site_instance->GetId()] = new RenderFrameProxyHost(
- pending_render_frame_host.Pass());
+ RenderFrameProxyHost* proxy =
+ new RenderFrameProxyHost(site_instance, frame_tree_node_);
+ proxy_hosts_[site_instance->GetId()] = proxy;
+ pending_render_frame_host->SwapOut(proxy);
+ proxy->TakeFrameHostOwnership(pending_render_frame_host.Pass());
} else {
// We won't be coming back, so delete this one.
pending_render_frame_host.reset();
@@ -1356,6 +1423,31 @@ void RenderFrameHostManager::CancelPending() {
pending_and_current_web_ui_.reset();
}
+scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::SetRenderFrameHost(
+ scoped_ptr<RenderFrameHostImpl> render_frame_host) {
+ // Swap the two.
+ scoped_ptr<RenderFrameHostImpl> old_render_frame_host =
+ render_frame_host_.Pass();
+ render_frame_host_ = render_frame_host.Pass();
+
+ if (frame_tree_node_->IsMainFrame()) {
+ // Update the count of top-level frames using this SiteInstance. All
+ // subframes are in the same BrowsingInstance as the main frame, so we only
+ // count top-level ones. This makes the value easier for consumers to
+ // interpret.
+ if (render_frame_host_) {
+ static_cast<SiteInstanceImpl*>(render_frame_host_->GetSiteInstance())->
+ IncrementRelatedActiveContentsCount();
+ }
+ if (old_render_frame_host) {
+ static_cast<SiteInstanceImpl*>(old_render_frame_host->GetSiteInstance())->
+ DecrementRelatedActiveContentsCount();
+ }
+ }
+
+ return old_render_frame_host.Pass();
+}
+
bool RenderFrameHostManager::IsRVHOnSwappedOutList(
RenderViewHostImpl* rvh) const {
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(
@@ -1382,7 +1474,7 @@ RenderViewHostImpl* RenderFrameHostManager::GetSwappedOutRenderViewHost(
SiteInstance* instance) const {
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
if (proxy)
- return proxy->render_view_host();
+ return proxy->GetRenderViewHost();
return NULL;
}
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h
index f5ecf04df5..102d3b76e6 100644
--- a/content/browser/frame_host/render_frame_host_manager.h
+++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -57,14 +57,14 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// corresponding to this view host. If this method is not called and the
// process is not shared, then the WebContentsImpl will act as though the
// renderer is not running (i.e., it will render "sad tab"). This method is
- // automatically called from LoadURL.
- //
- // If you are attaching to an already-existing RenderView, you should call
- // InitWithExistingID.
+ // automatically called from LoadURL. |for_main_frame| indicates whether
+ // this RenderViewHost is used to render a top-level frame, so the
+ // appropriate RenderWidgetHostView type is used.
virtual bool CreateRenderViewForRenderManager(
RenderViewHost* render_view_host,
int opener_route_id,
- CrossProcessFrameConnector* cross_process_frame_connector) = 0;
+ int proxy_routing_id,
+ bool for_main_frame) = 0;
virtual void BeforeUnloadFiredFromRenderManager(
bool proceed, const base::TimeTicks& proceed_time,
bool* proceed_to_fire_unload) = 0;
@@ -231,6 +231,7 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// Helper method to create and initialize a RenderFrameHost. If |swapped_out|
// is true, it will be initially placed on the swapped out hosts list.
// Otherwise, it will be used for a pending cross-site navigation.
+ // Returns the routing id of the *view* associated with the frame.
int CreateRenderFrame(SiteInstance* instance,
int opener_route_id,
bool swapped_out,
@@ -281,6 +282,10 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
void ClearPendingShutdownRFHForSiteInstance(int32 site_instance_id,
RenderFrameHostImpl* rfh);
+ // Deletes any proxy hosts associated with this node. Used during destruction
+ // of WebContentsImpl.
+ void ResetProxyHosts();
+
private:
friend class RenderFrameHostManagerTest;
friend class TestWebContents;
@@ -373,11 +378,16 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
bool hidden);
// Sets up the necessary state for a new RenderViewHost with the given opener,
- // if necessary. Returns early if the RenderViewHost has already been
+ // if necessary. It creates a RenderFrameProxy in the target renderer process
+ // with the given |proxy_routing_id|, which is used to route IPC messages when
+ // in swapped out state. Returns early if the RenderViewHost has already been
// initialized for another RenderFrameHost.
// TODO(creis): opener_route_id is currently for the RenderViewHost but should
// be for the RenderFrame, since frames can have openers.
- bool InitRenderView(RenderViewHost* render_view_host, int opener_route_id);
+ bool InitRenderView(RenderViewHost* render_view_host,
+ int opener_route_id,
+ int proxy_routing_id,
+ bool for_main_frame);
// Sets the pending RenderFrameHost/WebUI to be the active one. Note that this
// doesn't require the pending render_frame_host_ pointer to be non-NULL,
@@ -392,6 +402,11 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// Helper method to terminate the pending RenderViewHost.
void CancelPending();
+ // Helper method to set the active RenderFrameHost. Returns the old
+ // RenderFrameHost and updates counts.
+ scoped_ptr<RenderFrameHostImpl> SetRenderFrameHost(
+ scoped_ptr<RenderFrameHostImpl> render_frame_host);
+
RenderFrameHostImpl* UpdateStateForNavigate(
const NavigationEntryImpl& entry);
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index 2e83028e4e..5199ab4691 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -21,6 +21,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
+#include "content/public/common/bindings_policy.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
@@ -37,6 +38,26 @@ using base::ASCIIToUTF16;
namespace content {
+namespace {
+
+const char kOpenUrlViaClickTargetFunc[] =
+ "(function(url) {\n"
+ " var lnk = document.createElement(\"a\");\n"
+ " lnk.href = url;\n"
+ " lnk.target = \"_blank\";\n"
+ " document.body.appendChild(lnk);\n"
+ " lnk.click();\n"
+ "})";
+
+// Adds a link with given url and target=_blank, and clicks on it.
+void OpenUrlViaClickTarget(const internal::ToRenderFrameHost& adapter,
+ const GURL& url) {
+ EXPECT_TRUE(ExecuteScript(adapter,
+ std::string(kOpenUrlViaClickTargetFunc) + "(\"" + url.spec() + "\");"));
+}
+
+} // anonymous namespace
+
class RenderFrameHostManagerTest : public ContentBrowserTest {
public:
RenderFrameHostManagerTest() : foo_com_("foo.com") {
@@ -1393,4 +1414,52 @@ IN_PROC_BROWSER_TEST_F(RFHMProcessPerTabTest, MAYBE_BackFromWebUI) {
shell()->web_contents()->GetRenderProcessHost()->GetID()));
}
+// crbug.com/372360
+// The test loads url1, opens a link pointing to url2 in a new tab, and
+// navigates the new tab to url1.
+// The following is needed for the bug to happen:
+// - url1 must require webui bindings;
+// - navigating to url2 in the site instance of url1 should not swap
+// browsing instances, but should require a new site instance.
+IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, WebUIGetsBindings) {
+ GURL url1(std::string(kChromeUIScheme) + "://" +
+ std::string(kChromeUIGpuHost));
+ GURL url2(std::string(kChromeUIScheme) + "://" +
+ std::string(kChromeUIAccessibilityHost));
+
+ // Visit a WebUI page with bindings.
+ NavigateToURL(shell(), url1);
+ EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
+ shell()->web_contents()->GetRenderProcessHost()->GetID()));
+ SiteInstance* site_instance1 = shell()->web_contents()->GetSiteInstance();
+
+ // Open a new tab. Initially it gets a render view in the original tab's
+ // current site instance.
+ TestNavigationObserver nav_observer(NULL);
+ nav_observer.StartWatchingNewWebContents();
+ ShellAddedObserver shao;
+ OpenUrlViaClickTarget(shell()->web_contents(), url2);
+ nav_observer.Wait();
+ Shell* new_shell = shao.GetShell();
+ WebContentsImpl* new_web_contents = static_cast<WebContentsImpl*>(
+ new_shell->web_contents());
+ SiteInstance* site_instance2 = new_web_contents->GetSiteInstance();
+
+ EXPECT_NE(site_instance2, site_instance1);
+ EXPECT_TRUE(site_instance2->IsRelatedSiteInstance(site_instance1));
+ RenderViewHost* initial_rvh = new_web_contents->
+ GetRenderManagerForTesting()->GetSwappedOutRenderViewHost(site_instance1);
+ ASSERT_TRUE(initial_rvh);
+ // The following condition is what was causing the bug.
+ EXPECT_EQ(0, initial_rvh->GetEnabledBindings());
+
+ // Navigate to url1 and check bindings.
+ NavigateToURL(new_shell, url1);
+ // The navigation should have used the first SiteInstance, otherwise
+ // |initial_rvh| did not have a chance to be used.
+ EXPECT_EQ(new_web_contents->GetSiteInstance(), site_instance1);
+ EXPECT_EQ(BINDINGS_POLICY_WEB_UI,
+ new_web_contents->GetRenderViewHost()->GetEnabledBindings());
+}
+
} // namespace content
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index e71ee014c0..a5100dfbe4 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -124,8 +124,7 @@ class RenderViewHostDeletedObserver : public WebContentsObserver {
DISALLOW_COPY_AND_ASSIGN(RenderViewHostDeletedObserver);
};
-
-// This observer keeps track of the last deleted RenderViewHost to avoid
+// This observer keeps track of the last deleted RenderFrameHost to avoid
// accessing it and causing use-after-free condition.
class RenderFrameHostDeletedObserver : public WebContentsObserver {
public:
@@ -193,6 +192,60 @@ class PluginFaviconMessageObserver : public WebContentsObserver {
DISALLOW_COPY_AND_ASSIGN(PluginFaviconMessageObserver);
};
+// Ensures that RenderFrameDeleted and RenderFrameCreated are called in a
+// consistent manner.
+class FrameLifetimeConsistencyChecker : public WebContentsObserver {
+ public:
+ explicit FrameLifetimeConsistencyChecker(WebContentsImpl* web_contents)
+ : WebContentsObserver(web_contents) {
+ RenderViewCreated(web_contents->GetRenderViewHost());
+ RenderFrameCreated(web_contents->GetMainFrame());
+ }
+
+ virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE {
+ std::pair<int, int> routing_pair =
+ std::make_pair(render_frame_host->GetProcess()->GetID(),
+ render_frame_host->GetRoutingID());
+ bool was_live_already = !live_routes_.insert(routing_pair).second;
+ bool was_used_before = deleted_routes_.count(routing_pair) != 0;
+
+ if (was_live_already) {
+ FAIL() << "RenderFrameCreated called more than once for routing pair: "
+ << Format(render_frame_host);
+ } else if (was_used_before) {
+ FAIL() << "RenderFrameCreated called for routing pair "
+ << Format(render_frame_host) << " that was previously deleted.";
+ }
+ }
+
+ virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE {
+ std::pair<int, int> routing_pair =
+ std::make_pair(render_frame_host->GetProcess()->GetID(),
+ render_frame_host->GetRoutingID());
+ bool was_live = live_routes_.erase(routing_pair);
+ bool was_dead_already = !deleted_routes_.insert(routing_pair).second;
+
+ if (was_dead_already) {
+ FAIL() << "RenderFrameDeleted called more than once for routing pair "
+ << Format(render_frame_host);
+ } else if (!was_live) {
+ FAIL() << "RenderFrameDeleted called for routing pair "
+ << Format(render_frame_host)
+ << " for which RenderFrameCreated was never called";
+ }
+ }
+
+ private:
+ std::string Format(RenderFrameHost* render_frame_host) {
+ return base::StringPrintf(
+ "(%d, %d -> %s )",
+ render_frame_host->GetProcess()->GetID(),
+ render_frame_host->GetRoutingID(),
+ render_frame_host->GetSiteInstance()->GetSiteURL().spec().c_str());
+ }
+ std::set<std::pair<int, int> > live_routes_;
+ std::set<std::pair<int, int> > deleted_routes_;
+};
} // namespace
@@ -202,9 +255,11 @@ class RenderFrameHostManagerTest
virtual void SetUp() OVERRIDE {
RenderViewHostImplTestHarness::SetUp();
WebUIControllerFactory::RegisterFactory(&factory_);
+ lifetime_checker_.reset(new FrameLifetimeConsistencyChecker(contents()));
}
virtual void TearDown() OVERRIDE {
+ lifetime_checker_.reset();
RenderViewHostImplTestHarness::TearDown();
WebUIControllerFactory::UnregisterFactoryForTesting(&factory_);
}
@@ -310,6 +365,7 @@ class RenderFrameHostManagerTest
private:
RenderFrameHostManagerTestWebUIControllerFactory factory_;
+ scoped_ptr<FrameLifetimeConsistencyChecker> lifetime_checker_;
};
// Tests that when you navigate from a chrome:// url to another page, and
@@ -494,18 +550,6 @@ TEST_F(RenderFrameHostManagerTest, WhiteListSwapCompositorFrame) {
EXPECT_TRUE(swapped_out_rwhv->did_swap_compositor_frame());
}
-TEST_F(RenderFrameHostManagerTest, WhiteListDidActivateAcceleratedCompositing) {
- TestRenderViewHost* swapped_out_rvh = CreateSwappedOutRenderViewHost();
-
- MockRenderProcessHost* process_host =
- static_cast<MockRenderProcessHost*>(swapped_out_rvh->GetProcess());
- process_host->sink().ClearMessages();
- ViewHostMsg_DidActivateAcceleratedCompositing msg(
- rvh()->GetRoutingID(), true);
- EXPECT_TRUE(swapped_out_rvh->OnMessageReceived(msg));
- EXPECT_TRUE(swapped_out_rvh->is_accelerated_compositing_active());
-}
-
// Test if RenderViewHost::GetRenderWidgetHosts() only returns active
// widgets.
TEST_F(RenderFrameHostManagerTest, GetRenderWidgetHostsReturnsActiveViews) {
@@ -717,14 +761,8 @@ TEST_F(RenderFrameHostManagerTest, Init) {
scoped_ptr<TestWebContents> web_contents(
TestWebContents::Create(browser_context(), instance));
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
-
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
RenderViewHostImpl* rvh = manager->current_host();
RenderFrameHostImpl* rfh = manager->current_frame_host();
ASSERT_TRUE(rvh);
@@ -749,15 +787,7 @@ TEST_F(RenderFrameHostManagerTest, Navigate) {
notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
Source<WebContents>(web_contents.get()));
- // Create.
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
-
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
-
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
RenderFrameHostImpl* host;
// 1) The first navigation. --------------------------
@@ -844,14 +874,7 @@ TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyReNavigation) {
notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
Source<WebContents>(web_contents.get()));
- // Create.
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
-
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
// 1) The first navigation. --------------------------
const GURL kUrl1("http://www.google.com/");
@@ -1032,13 +1055,8 @@ TEST_F(RenderFrameHostManagerTest, WebUI) {
scoped_ptr<TestWebContents> web_contents(
TestWebContents::Create(browser_context(), instance));
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
EXPECT_FALSE(manager->current_host()->IsRenderViewLive());
const GURL kUrl("chrome://foo");
@@ -1083,14 +1101,11 @@ TEST_F(RenderFrameHostManagerTest, WebUIInNewTab) {
// Create a blank tab.
scoped_ptr<TestWebContents> web_contents1(
TestWebContents::Create(browser_context(), blank_instance));
- FrameTree tree1(web_contents1->GetFrameTree()->root()->navigator(),
- web_contents1.get(), web_contents1.get(),
- web_contents1.get(), web_contents1.get());
- RenderFrameHostManager* manager1 = tree1.root()->render_manager();
- manager1->Init(
- browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager1 =
+ web_contents1->GetRenderManagerForTesting();
// Test the case that new RVH is considered live.
- manager1->current_host()->CreateRenderView(base::string16(), -1, -1, false);
+ manager1->current_host()->CreateRenderView(
+ base::string16(), -1, MSG_ROUTING_NONE, -1, false);
// Navigate to a WebUI page.
const GURL kUrl1("chrome://foo");
@@ -1117,15 +1132,12 @@ TEST_F(RenderFrameHostManagerTest, WebUIInNewTab) {
// Now simulate clicking a link that opens in a new tab.
scoped_ptr<TestWebContents> web_contents2(
TestWebContents::Create(browser_context(), webui_instance));
- FrameTree tree2(web_contents2->GetFrameTree()->root()->navigator(),
- web_contents2.get(), web_contents2.get(),
- web_contents2.get(), web_contents2.get());
- RenderFrameHostManager* manager2 = tree2.root()->render_manager();
- manager2->Init(
- browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager2 =
+ web_contents2->GetRenderManagerForTesting();
// Make sure the new RVH is considered live. This is usually done in
// RenderWidgetHost::Init when opening a new tab from a link.
- manager2->current_host()->CreateRenderView(base::string16(), -1, -1, false);
+ manager2->current_host()->CreateRenderView(
+ base::string16(), -1, MSG_ROUTING_NONE, -1, false);
const GURL kUrl2("chrome://foo/bar");
NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2,
@@ -1328,7 +1340,7 @@ TEST_F(RenderFrameHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) {
// Make sure the new opener RVH is considered live.
opener1_manager->current_host()->CreateRenderView(
- base::string16(), -1, -1, false);
+ base::string16(), -1, MSG_ROUTING_NONE, -1, false);
// Use a cross-process navigation in the opener to swap out the old RVH.
EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost(
@@ -1411,14 +1423,7 @@ TEST_F(RenderFrameHostManagerTest, NoSwapOnGuestNavigations) {
scoped_ptr<TestWebContents> web_contents(
TestWebContents::Create(browser_context(), instance));
- // Create.
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
-
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
RenderFrameHostImpl* host;
@@ -1479,14 +1484,7 @@ TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyClose) {
notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
Source<WebContents>(web_contents.get()));
- // Create.
- FrameTree tree(web_contents->GetFrameTree()->root()->navigator(),
- web_contents.get(), web_contents.get(),
- web_contents.get(), web_contents.get());
- RenderFrameHostManager* manager = tree.root()->render_manager();
-
- manager->Init(browser_context(), instance, MSG_ROUTING_NONE,
- MSG_ROUTING_NONE);
+ RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
// 1) The first navigation. --------------------------
const GURL kUrl1("http://www.google.com/");
diff --git a/content/browser/frame_host/render_frame_message_filter.cc b/content/browser/frame_host/render_frame_message_filter.cc
index b7d00e6a73..8e414307b4 100644
--- a/content/browser/frame_host/render_frame_message_filter.cc
+++ b/content/browser/frame_host/render_frame_message_filter.cc
@@ -39,13 +39,12 @@ RenderFrameMessageFilter::RenderFrameMessageFilter(
RenderFrameMessageFilter::~RenderFrameMessageFilter() {
}
-bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderFrameMessageFilter, message)
IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/frame_host/render_frame_message_filter.h b/content/browser/frame_host/render_frame_message_filter.h
index 26bcaca9f1..25f7fbd57a 100644
--- a/content/browser/frame_host/render_frame_message_filter.h
+++ b/content/browser/frame_host/render_frame_message_filter.h
@@ -21,8 +21,7 @@ class RenderFrameMessageFilter : public BrowserMessageFilter {
RenderFrameMessageFilter(int render_process_id,
RenderWidgetHelper* render_widget_helper);
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~RenderFrameMessageFilter();
diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc
index e965fdac52..b09fccb5ea 100644
--- a/content/browser/frame_host/render_frame_proxy_host.cc
+++ b/content/browser/frame_host/render_frame_proxy_host.cc
@@ -4,16 +4,55 @@
#include "content/browser/frame_host/render_frame_proxy_host.h"
+#include "content/browser/frame_host/frame_tree_node.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/site_instance_impl.h"
+#include "content/common/frame_messages.h"
+#include "ipc/ipc_message.h"
namespace content {
-RenderFrameProxyHost::RenderFrameProxyHost(
- scoped_ptr<RenderFrameHostImpl> render_frame_host)
- : site_instance_(render_frame_host->GetSiteInstance()),
- render_frame_host_(render_frame_host.Pass()) {}
+RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance,
+ FrameTreeNode* frame_tree_node)
+ : routing_id_(site_instance->GetProcess()->GetNextRoutingID()),
+ site_instance_(site_instance),
+ frame_tree_node_(frame_tree_node) {
+ GetProcess()->AddRoute(routing_id_, this);
+}
-RenderFrameProxyHost::~RenderFrameProxyHost() {}
+RenderFrameProxyHost::~RenderFrameProxyHost() {
+ if (GetProcess()->HasConnection())
+ Send(new FrameMsg_DeleteProxy(routing_id_));
+
+ GetProcess()->RemoveRoute(routing_id_);
+}
+
+RenderViewHostImpl* RenderFrameProxyHost::GetRenderViewHost() {
+ if (render_frame_host_.get())
+ return render_frame_host_->render_view_host();
+ return NULL;
+}
+
+scoped_ptr<RenderFrameHostImpl> RenderFrameProxyHost::PassFrameHostOwnership() {
+ render_frame_host_->set_render_frame_proxy_host(NULL);
+ return render_frame_host_.Pass();
+}
+
+bool RenderFrameProxyHost::Send(IPC::Message *msg) {
+ // TODO(nasko): For now, RenderFrameHost uses this object to send IPC messages
+ // while swapped out. This can be removed once we don't have a swapped out
+ // state on RenderFrameHosts. See https://crbug.com/357747.
+ msg->set_routing_id(routing_id_);
+ return GetProcess()->Send(msg);
+}
+
+bool RenderFrameProxyHost::OnMessageReceived(const IPC::Message& msg) {
+ // TODO(nasko): This can be removed once we don't have a swapped out state on
+ // RenderFrameHosts. See https://crbug.com/357747.
+ if (render_frame_host_.get())
+ return render_frame_host_->OnMessageReceived(msg);
+
+ return false;
+}
} // namespace content
diff --git a/content/browser/frame_host/render_frame_proxy_host.h b/content/browser/frame_host/render_frame_proxy_host.h
index 514f0b22c4..f839725892 100644
--- a/content/browser/frame_host/render_frame_proxy_host.h
+++ b/content/browser/frame_host/render_frame_proxy_host.h
@@ -8,7 +8,10 @@
#include "base/memory/scoped_ptr.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/site_instance_impl.h"
+#include "ipc/ipc_listener.h"
+#include "ipc/ipc_sender.h"
+class FrameTreeNode;
class RenderProcessHost;
class RenderFrameHostImpl;
class RenderViewHostImpl;
@@ -28,9 +31,8 @@ namespace content {
// asynchronous JavaScript calls, such as postMessage.
//
// For now, RenderFrameProxyHost is created when a RenderFrameHost is swapped
-// out and acts just as a wrapper. If a RenderFrameHost can be deleted, no
-// proxy object is created. It is destroyed when the RenderFrameHost is swapped
-// back in or is no longer referenced and is therefore deleted.
+// out and acts just as a wrapper. It is destroyed when the RenderFrameHost is
+// swapped back in or is no longer referenced and is therefore deleted.
//
// Long term, RenderFrameProxyHost will be created whenever a cross-site
// navigation occurs and a reference to the frame navigating needs to be kept
@@ -47,37 +49,57 @@ namespace content {
// forward. It also instructs the RenderFrameHost to run the unload event
// handler and is kept alive for the duration. Once the event handling is
// complete, the RenderFrameHost is deleted.
-class RenderFrameProxyHost {
+class RenderFrameProxyHost
+ : public IPC::Listener,
+ public IPC::Sender {
public:
- explicit RenderFrameProxyHost(
- scoped_ptr<RenderFrameHostImpl> render_frame_host);
- ~RenderFrameProxyHost();
+ RenderFrameProxyHost(SiteInstance* site_instance,
+ FrameTreeNode* frame_tree_node);
+ virtual ~RenderFrameProxyHost();
RenderProcessHost* GetProcess() {
- return render_frame_host_->GetProcess();
+ return site_instance_->GetProcess();
+ }
+
+ int GetRoutingID() {
+ return routing_id_;
}
SiteInstance* GetSiteInstance() {
return site_instance_.get();
}
- // TODO(nasko): The following methods should be removed when swapping out
- // of RenderFrameHosts is no longer used.
+ // TODO(nasko): The following methods should be removed once we don't have a
+ // swapped out state on RenderFrameHosts. See https://crbug.com/357747.
RenderFrameHostImpl* render_frame_host() {
return render_frame_host_.get();
}
- RenderViewHostImpl* render_view_host() {
- return render_frame_host_->render_view_host();
- }
- scoped_ptr<RenderFrameHostImpl> PassFrameHost() {
- return render_frame_host_.Pass();
+ RenderViewHostImpl* GetRenderViewHost();
+
+ void TakeFrameHostOwnership(
+ scoped_ptr<RenderFrameHostImpl> render_frame_host) {
+ render_frame_host_ = render_frame_host.Pass();
}
+ scoped_ptr<RenderFrameHostImpl> PassFrameHostOwnership();
+
+ // IPC::Sender
+ virtual bool Send(IPC::Message* msg) OVERRIDE;
private:
+ // IPC::Listener
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+
+ // This RenderFrameProxyHost's routing id.
+ int routing_id_;
+
+ // The SiteInstance this proxy is associated with.
scoped_refptr<SiteInstance> site_instance_;
- // TODO(nasko): For now, hide the RenderFrameHost inside the proxy, but remove
- // it once we have all the code support for proper proxy objects.
+ // The node in the frame tree where this proxy is located.
+ FrameTreeNode* frame_tree_node_;
+
+ // TODO(nasko): This can be removed once we don't have a swapped out state on
+ // RenderFrameHosts. See https://crbug.com/357747.
scoped_ptr<RenderFrameHostImpl> render_frame_host_;
DISALLOW_COPY_AND_ASSIGN(RenderFrameProxyHost);
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.cc b/content/browser/frame_host/render_widget_host_view_child_frame.cc
index d5228f7223..c68d0a75a5 100644
--- a/content/browser/frame_host/render_widget_host_view_child_frame.cc
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.cc
@@ -86,8 +86,7 @@ RenderWidgetHostViewChildFrame::GetNativeViewAccessible() {
return NULL;
}
-void RenderWidgetHostViewChildFrame::SetBackground(
- const SkBitmap& background) {
+void RenderWidgetHostViewChildFrame::SetBackgroundOpaque(bool opaque) {
}
gfx::Size RenderWidgetHostViewChildFrame::GetPhysicalBackingSize() const {
@@ -192,10 +191,6 @@ void RenderWidgetHostViewChildFrame::ShowDisambiguationPopup(
const SkBitmap& zoomed_bitmap) {
}
-void RenderWidgetHostViewChildFrame::SelectionRootBoundsChanged(
- const gfx::Rect& bounds) {
-}
-
void RenderWidgetHostViewChildFrame::LockCompositingSurface() {
}
@@ -206,9 +201,6 @@ void RenderWidgetHostViewChildFrame::UnlockCompositingSurface() {
void RenderWidgetHostViewChildFrame::ScrollOffsetChanged() {
}
-void RenderWidgetHostViewChildFrame::OnAcceleratedCompositingStateChange() {
-}
-
void RenderWidgetHostViewChildFrame::AcceleratedSurfaceInitialized(int host_id,
int route_id) {
}
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.h b/content/browser/frame_host/render_widget_host_view_child_frame.h
index 2e5b916548..3a5c108690 100644
--- a/content/browser/frame_host/render_widget_host_view_child_frame.h
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.h
@@ -50,7 +50,7 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual gfx::NativeViewAccessible GetNativeViewAccessible() OVERRIDE;
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+ virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE;
// RenderWidgetHostViewBase implementation.
@@ -94,7 +94,6 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) OVERRIDE;
virtual bool CanCopyToVideoFrame() const OVERRIDE;
- virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
virtual void AcceleratedSurfaceBuffersSwapped(
@@ -141,7 +140,6 @@ class CONTENT_EXPORT RenderWidgetHostViewChildFrame
#if defined(OS_ANDROID)
// RenderWidgetHostViewBase implementation.
- virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
virtual void ShowDisambiguationPopup(
const gfx::Rect& target_rect,
const SkBitmap& zoomed_bitmap) OVERRIDE;
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc
index 2cd0ba3d0a..879f6328c0 100644
--- a/content/browser/frame_host/render_widget_host_view_guest.cc
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc
@@ -352,20 +352,6 @@ void RenderWidgetHostViewGuest::SelectionBoundsChanged(
rwhv->SelectionBoundsChanged(guest_params);
}
-#if defined(OS_ANDROID)
-void RenderWidgetHostViewGuest::SelectionRootBoundsChanged(
- const gfx::Rect& bounds) {
- if (!guest_)
- return;
-
- RenderWidgetHostViewBase* rwhv = GetGuestRenderWidgetHostView();
- if (!rwhv)
- return;
-
- rwhv->SelectionRootBoundsChanged(guest_->ToGuestRect(bounds));
-}
-#endif
-
void RenderWidgetHostViewGuest::CopyFromCompositingSurface(
const gfx::Rect& src_subrect,
const gfx::Size& dst_size,
@@ -375,8 +361,8 @@ void RenderWidgetHostViewGuest::CopyFromCompositingSurface(
guest_->CopyFromCompositingSurface(src_subrect, dst_size, callback);
}
-void RenderWidgetHostViewGuest::SetBackground(const SkBitmap& background) {
- platform_view_->SetBackground(background);
+void RenderWidgetHostViewGuest::SetBackgroundOpaque(bool opaque) {
+ platform_view_->SetBackgroundOpaque(opaque);
}
void RenderWidgetHostViewGuest::SetScrollOffsetPinning(
diff --git a/content/browser/frame_host/render_widget_host_view_guest.h b/content/browser/frame_host/render_widget_host_view_guest.h
index 2f1786409a..1d44b31c58 100644
--- a/content/browser/frame_host/render_widget_host_view_guest.h
+++ b/content/browser/frame_host/render_widget_host_view_guest.h
@@ -53,7 +53,7 @@ class CONTENT_EXPORT RenderWidgetHostViewGuest
virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE;
virtual gfx::NativeViewAccessible GetNativeViewAccessible() OVERRIDE;
virtual gfx::Rect GetViewBounds() const OVERRIDE;
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+ virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE;
virtual base::string16 GetSelectedText() const OVERRIDE;
@@ -130,7 +130,6 @@ class CONTENT_EXPORT RenderWidgetHostViewGuest
#if defined(OS_ANDROID)
// RenderWidgetHostViewBase implementation.
- virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
virtual void ShowDisambiguationPopup(const gfx::Rect& target_rect,
const SkBitmap& zoomed_bitmap) OVERRIDE;
virtual void LockCompositingSurface() OVERRIDE;
diff --git a/content/browser/gamepad/raw_input_data_fetcher_win.cc b/content/browser/gamepad/raw_input_data_fetcher_win.cc
index 50eb3dc241..05748216b2 100644
--- a/content/browser/gamepad/raw_input_data_fetcher_win.cc
+++ b/content/browser/gamepad/raw_input_data_fetcher_win.cc
@@ -65,7 +65,7 @@ void RawInputDataFetcher::StartMonitor() {
window_.reset(new base::win::MessageWindow());
if (!window_->Create(base::Bind(&RawInputDataFetcher::HandleMessage,
base::Unretained(this)))) {
- LOG_GETLASTERROR(ERROR) << "Failed to create the raw input window";
+ PLOG(ERROR) << "Failed to create the raw input window";
window_.reset();
return;
}
@@ -75,8 +75,7 @@ void RawInputDataFetcher::StartMonitor() {
scoped_ptr<RAWINPUTDEVICE[]> devices(GetRawInputDevices(RIDEV_INPUTSINK));
if (!RegisterRawInputDevices(devices.get(), arraysize(DeviceUsages),
sizeof(RAWINPUTDEVICE))) {
- LOG_GETLASTERROR(ERROR)
- << "RegisterRawInputDevices() failed for RIDEV_INPUTSINK";
+ PLOG(ERROR) << "RegisterRawInputDevices() failed for RIDEV_INPUTSINK";
window_.reset();
return;
}
@@ -99,8 +98,7 @@ void RawInputDataFetcher::StopMonitor() {
if (!RegisterRawInputDevices(devices.get(), arraysize(DeviceUsages),
sizeof(RAWINPUTDEVICE))) {
- LOG_GETLASTERROR(INFO)
- << "RegisterRawInputDevices() failed for RIDEV_REMOVE";
+ PLOG(INFO) << "RegisterRawInputDevices() failed for RIDEV_REMOVE";
}
events_monitored_ = false;
@@ -127,7 +125,7 @@ std::vector<RawGamepadInfo*> RawInputDataFetcher::EnumerateDevices() {
UINT count = 0;
UINT result = GetRawInputDeviceList(NULL, &count, sizeof(RAWINPUTDEVICELIST));
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceList() failed";
+ PLOG(ERROR) << "GetRawInputDeviceList() failed";
return valid_controllers;
}
DCHECK_EQ(0u, result);
@@ -136,7 +134,7 @@ std::vector<RawGamepadInfo*> RawInputDataFetcher::EnumerateDevices() {
result = GetRawInputDeviceList(device_list.get(), &count,
sizeof(RAWINPUTDEVICELIST));
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceList() failed";
+ PLOG(ERROR) << "GetRawInputDeviceList() failed";
return valid_controllers;
}
DCHECK_EQ(count, result);
@@ -173,7 +171,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
UINT result = GetRawInputDeviceInfo(hDevice, RIDI_DEVICEINFO,
NULL, &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(0u, result);
@@ -184,7 +182,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
result = GetRawInputDeviceInfo(hDevice, RIDI_DEVICEINFO,
di_buffer.get(), &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(size, result);
@@ -215,7 +213,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
result = GetRawInputDeviceInfo(hDevice, RIDI_DEVICENAME,
NULL, &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(0u, result);
@@ -224,7 +222,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
result = GetRawInputDeviceInfo(hDevice, RIDI_DEVICENAME,
name_buffer.get(), &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(size, result);
@@ -252,7 +250,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
result = GetRawInputDeviceInfo(hDevice, RIDI_PREPARSEDDATA,
NULL, &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(0u, result);
@@ -263,7 +261,7 @@ RawGamepadInfo* RawInputDataFetcher::ParseGamepadInfo(HANDLE hDevice) {
result = GetRawInputDeviceInfo(hDevice, RIDI_PREPARSEDDATA,
gamepad_info->ppd_buffer.get(), &size);
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputDeviceInfo() failed";
+ PLOG(ERROR) << "GetRawInputDeviceInfo() failed";
return NULL;
}
DCHECK_EQ(size, result);
@@ -421,7 +419,7 @@ LRESULT RawInputDataFetcher::OnInput(HRAWINPUT input_handle) {
UINT result = GetRawInputData(
input_handle, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER));
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputData() failed";
+ PLOG(ERROR) << "GetRawInputData() failed";
return 0;
}
DCHECK_EQ(0u, result);
@@ -432,7 +430,7 @@ LRESULT RawInputDataFetcher::OnInput(HRAWINPUT input_handle) {
result = GetRawInputData(
input_handle, RID_INPUT, buffer.get(), &size, sizeof(RAWINPUTHEADER));
if (result == static_cast<UINT>(-1)) {
- LOG_GETLASTERROR(ERROR) << "GetRawInputData() failed";
+ PLOG(ERROR) << "GetRawInputData() failed";
return 0;
}
DCHECK_EQ(size, result);
diff --git a/content/browser/geolocation/geolocation_dispatcher_host.cc b/content/browser/geolocation/geolocation_dispatcher_host.cc
index 547944699b..34b9e8418b 100644
--- a/content/browser/geolocation/geolocation_dispatcher_host.cc
+++ b/content/browser/geolocation/geolocation_dispatcher_host.cc
@@ -11,6 +11,8 @@
#include "content/browser/renderer_host/render_message_filter.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/public/browser/browser_context.h"
#include "content/public/browser/geolocation_permission_context.h"
#include "content/public/common/geoposition.h"
#include "content/common/geolocation_messages.h"
@@ -61,16 +63,10 @@ void RecordGeopositionErrorCode(Geoposition::ErrorCode error_code) {
GEOPOSITION_ERROR_CODE_COUNT);
}
-void NotifyGeolocationProviderPermissionGranted() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- GeolocationProviderImpl::GetInstance()->UserDidOptIntoLocationServices();
-}
-
void SendGeolocationPermissionResponse(int render_process_id,
int render_view_id,
int bridge_id,
bool allowed) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
RenderViewHostImpl* render_view_host =
RenderViewHostImpl::FromID(render_process_id, render_view_id);
if (!render_view_host)
@@ -78,41 +74,37 @@ void SendGeolocationPermissionResponse(int render_process_id,
render_view_host->Send(
new GeolocationMsg_PermissionSet(render_view_id, bridge_id, allowed));
- if (allowed) {
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&NotifyGeolocationProviderPermissionGranted));
- }
+ if (allowed)
+ GeolocationProviderImpl::GetInstance()->UserDidOptIntoLocationServices();
}
} // namespace
GeolocationDispatcherHost::GeolocationDispatcherHost(
- int render_process_id,
- GeolocationPermissionContext* geolocation_permission_context)
- : BrowserMessageFilter(GeolocationMsgStart),
- render_process_id_(render_process_id),
- geolocation_permission_context_(geolocation_permission_context),
- geolocation_provider_(NULL) {
- callback_ = base::Bind(
- &GeolocationDispatcherHost::OnLocationUpdate, base::Unretained(this));
- // This is initialized by ResourceMessageFilter. Do not add any non-trivial
- // initialization here, defer to OnRegisterBridge which is triggered whenever
+ WebContents* web_contents)
+ : WebContentsObserver(web_contents),
+ watching_requested_(false),
+ paused_(false),
+ high_accuracy_(false) {
+ // This is initialized by WebContentsImpl. Do not add any non-trivial
+ // initialization here, defer to OnStartUpdating which is triggered whenever
// a javascript geolocation object is actually initialized.
}
GeolocationDispatcherHost::~GeolocationDispatcherHost() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (geolocation_provider_)
- geolocation_provider_->RemoveLocationUpdateCallback(callback_);
}
-bool GeolocationDispatcherHost::OnMessageReceived(
- const IPC::Message& msg, bool* msg_was_ok) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- *msg_was_ok = true;
+void GeolocationDispatcherHost::RenderViewHostChanged(
+ RenderViewHost* old_host,
+ RenderViewHost* new_host) {
+ watching_requested_ = false;
+ paused_ = false;
+ geolocation_subscription_.reset();
+}
+
+bool GeolocationDispatcherHost::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(GeolocationDispatcherHost, msg, *msg_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(GeolocationDispatcherHost, msg)
IPC_MESSAGE_HANDLER(GeolocationHostMsg_CancelPermissionRequest,
OnCancelPermissionRequest)
IPC_MESSAGE_HANDLER(GeolocationHostMsg_RequestPermission,
@@ -126,140 +118,84 @@ bool GeolocationDispatcherHost::OnMessageReceived(
void GeolocationDispatcherHost::OnLocationUpdate(
const Geoposition& geoposition) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
RecordGeopositionErrorCode(geoposition.error_code);
- for (std::map<int, RendererGeolocationOptions>::iterator it =
- geolocation_renderers_.begin();
- it != geolocation_renderers_.end(); ++it) {
- if (!(it->second.is_paused))
- Send(new GeolocationMsg_PositionUpdated(it->first, geoposition));
- }
+ if (!paused_)
+ Send(new GeolocationMsg_PositionUpdated(routing_id(), geoposition));
}
void GeolocationDispatcherHost::OnRequestPermission(
- int render_view_id,
int bridge_id,
const GURL& requesting_frame,
bool user_gesture) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":"
- << render_view_id << ":" << bridge_id;
- if (geolocation_permission_context_.get()) {
- geolocation_permission_context_->RequestGeolocationPermission(
- render_process_id_,
- render_view_id,
+ GeolocationPermissionContext* context =
+ web_contents()->GetBrowserContext()->GetGeolocationPermissionContext();
+ int render_process_id = web_contents()->GetRenderProcessHost()->GetID();
+ int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID();
+ if (context) {
+ context->RequestGeolocationPermission(
+ web_contents(),
bridge_id,
requesting_frame,
user_gesture,
base::Bind(&SendGeolocationPermissionResponse,
- render_process_id_,
+ render_process_id,
render_view_id,
bridge_id));
} else {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&SendGeolocationPermissionResponse, render_process_id_,
- render_view_id, bridge_id, true));
+ SendGeolocationPermissionResponse(
+ render_process_id, render_view_id, bridge_id, true);
}
}
void GeolocationDispatcherHost::OnCancelPermissionRequest(
- int render_view_id,
int bridge_id,
const GURL& requesting_frame) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":"
- << render_view_id << ":" << bridge_id;
- if (geolocation_permission_context_.get()) {
- geolocation_permission_context_->CancelGeolocationPermissionRequest(
- render_process_id_, render_view_id, bridge_id, requesting_frame);
+ GeolocationPermissionContext* context =
+ web_contents()->GetBrowserContext()->GetGeolocationPermissionContext();
+ if (context) {
+ context->CancelGeolocationPermissionRequest(
+ web_contents(), bridge_id, requesting_frame);
}
}
void GeolocationDispatcherHost::OnStartUpdating(
- int render_view_id,
const GURL& requesting_frame,
bool enable_high_accuracy) {
// StartUpdating() can be invoked as a result of high-accuracy mode
// being enabled / disabled. No need to record the dispatcher again.
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":"
- << render_view_id;
UMA_HISTOGRAM_BOOLEAN(
"Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy",
enable_high_accuracy);
- std::map<int, RendererGeolocationOptions>::iterator it =
- geolocation_renderers_.find(render_view_id);
- if (it == geolocation_renderers_.end()) {
- bool should_start_paused = false;
- if (pending_paused_geolocation_renderers_.erase(render_view_id) == 1) {
- should_start_paused = true;
- }
- RendererGeolocationOptions opts = {
- enable_high_accuracy,
- should_start_paused
- };
- geolocation_renderers_[render_view_id] = opts;
- } else {
- it->second.high_accuracy = enable_high_accuracy;
- }
+ watching_requested_ = true;
+ high_accuracy_ = enable_high_accuracy;
RefreshGeolocationOptions();
}
-void GeolocationDispatcherHost::OnStopUpdating(int render_view_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":"
- << render_view_id;
- DCHECK_EQ(1U, geolocation_renderers_.count(render_view_id));
- geolocation_renderers_.erase(render_view_id);
+void GeolocationDispatcherHost::OnStopUpdating() {
+ watching_requested_ = false;
RefreshGeolocationOptions();
}
-void GeolocationDispatcherHost::PauseOrResume(int render_view_id,
- bool should_pause) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- std::map<int, RendererGeolocationOptions>::iterator it =
- geolocation_renderers_.find(render_view_id);
- if (it == geolocation_renderers_.end()) {
- // This renderer is not using geolocation yet, but if it does before
- // we get a call to resume, we should start it up in the paused state.
- if (should_pause) {
- pending_paused_geolocation_renderers_.insert(render_view_id);
- } else {
- pending_paused_geolocation_renderers_.erase(render_view_id);
- }
- } else {
- RendererGeolocationOptions* opts = &(it->second);
- if (opts->is_paused != should_pause)
- opts->is_paused = should_pause;
- RefreshGeolocationOptions();
- }
+void GeolocationDispatcherHost::PauseOrResume(bool should_pause) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ paused_ = should_pause;
+ RefreshGeolocationOptions();
}
void GeolocationDispatcherHost::RefreshGeolocationOptions() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool needs_updates = false;
- bool use_high_accuracy = false;
- std::map<int, RendererGeolocationOptions>::const_iterator i =
- geolocation_renderers_.begin();
- for (; i != geolocation_renderers_.end(); ++i) {
- needs_updates |= !(i->second.is_paused);
- use_high_accuracy |= i->second.high_accuracy;
- if (needs_updates && use_high_accuracy)
- break;
- }
- if (needs_updates) {
- if (!geolocation_provider_)
- geolocation_provider_ = GeolocationProviderImpl::GetInstance();
- // Re-add to re-establish our options, in case they changed.
- geolocation_provider_->AddLocationUpdateCallback(
- callback_, use_high_accuracy);
+ if (watching_requested_ && !paused_) {
+ geolocation_subscription_ = GeolocationProvider::GetInstance()->
+ AddLocationUpdateCallback(
+ base::Bind(&GeolocationDispatcherHost::OnLocationUpdate,
+ base::Unretained(this)),
+ high_accuracy_);
} else {
- if (geolocation_provider_)
- geolocation_provider_->RemoveLocationUpdateCallback(callback_);
- geolocation_provider_ = NULL;
+ geolocation_subscription_.reset();
}
}
diff --git a/content/browser/geolocation/geolocation_dispatcher_host.h b/content/browser/geolocation/geolocation_dispatcher_host.h
index 28c6003db7..a73487f0b0 100644
--- a/content/browser/geolocation/geolocation_dispatcher_host.h
+++ b/content/browser/geolocation/geolocation_dispatcher_host.h
@@ -5,11 +5,8 @@
#ifndef CONTENT_BROWSER_GEOLOCATION_GEOLOCATION_DISPATCHER_HOST_H_
#define CONTENT_BROWSER_GEOLOCATION_GEOLOCATION_DISPATCHER_HOST_H_
-#include <map>
-#include <set>
-
#include "content/browser/geolocation/geolocation_provider_impl.h"
-#include "content/public/browser/browser_message_filter.h"
+#include "content/public/browser/web_contents_observer.h"
class GURL;
@@ -17,74 +14,48 @@ namespace content {
class GeolocationPermissionContext;
-// GeolocationDispatcherHost is a browser filter for Geolocation messages.
+// GeolocationDispatcherHost is an observer for Geolocation messages.
// It's the complement of GeolocationDispatcher (owned by RenderView).
-class GeolocationDispatcherHost : public BrowserMessageFilter {
+class GeolocationDispatcherHost : public WebContentsObserver {
public:
- GeolocationDispatcherHost(
- int render_process_id,
- GeolocationPermissionContext* geolocation_permission_context);
+ explicit GeolocationDispatcherHost(WebContents* web_contents);
+ virtual ~GeolocationDispatcherHost();
- // Pause or resumes geolocation for the given |render_view_id|. Should
- // be called on the IO thread. Resuming when nothing is paused is a no-op.
- // If a renderer is paused while not currently using geolocation but
- // then goes on to do so before being resumed, then that renderer will
- // not get geolocation updates until it is resumed.
- void PauseOrResume(int render_view_id, bool should_pause);
+ // Pause or resumes geolocation. Resuming when nothing is paused is a no-op.
+ // If the web contents is paused while not currently using geolocation but
+ // then goes on to do so before being resumed, then it will not get
+ // geolocation updates until it is resumed.
+ void PauseOrResume(bool should_pause);
private:
- virtual ~GeolocationDispatcherHost();
-
- // GeolocationDispatcherHost
- virtual bool OnMessageReceived(const IPC::Message& msg,
- bool* msg_was_ok) OVERRIDE;
+ // WebContentsObserver
+ virtual void RenderViewHostChanged(RenderViewHost* old_host,
+ RenderViewHost* new_host) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
// Message handlers:
- void OnRequestPermission(int render_view_id,
- int bridge_id,
+ void OnRequestPermission(int bridge_id,
const GURL& requesting_frame,
bool user_gesture);
- void OnCancelPermissionRequest(int render_view_id,
- int bridge_id,
+ void OnCancelPermissionRequest(int bridge_id,
const GURL& requesting_frame);
- void OnStartUpdating(int render_view_id,
- const GURL& requesting_frame,
+ void OnStartUpdating(const GURL& requesting_frame,
bool enable_high_accuracy);
- void OnStopUpdating(int render_view_id);
+ void OnStopUpdating();
- // Updates the |geolocation_provider_| with the currently required update
+ // Updates the geolocation provider with the currently required update
// options.
void RefreshGeolocationOptions();
void OnLocationUpdate(const Geoposition& position);
- int render_process_id_;
scoped_refptr<GeolocationPermissionContext> geolocation_permission_context_;
- struct RendererGeolocationOptions {
- bool high_accuracy;
- bool is_paused;
- };
-
- // Used to keep track of the renderers in this process that are using
- // geolocation and the options associated with them. The map is iterated
- // when a location update is available and the fan out to individual bridge
- // IDs happens renderer side, in order to minimize context switches.
- // Only used on the IO thread.
- std::map<int, RendererGeolocationOptions> geolocation_renderers_;
-
- // Used by Android WebView to support that case that a renderer is in the
- // 'paused' state but not yet using geolocation. If the renderer does start
- // using geolocation while paused, we move from this set into
- // |geolocation_renderers_|. If the renderer doesn't end up wanting to use
- // geolocation while 'paused' then we remove from this set. A renderer id
- // can exist only in this set or |geolocation_renderers_|, never both.
- std::set<int> pending_paused_geolocation_renderers_;
-
- // Only set whilst we are registered with the geolocation provider.
- GeolocationProviderImpl* geolocation_provider_;
-
- GeolocationProviderImpl::LocationUpdateCallback callback_;
+ bool watching_requested_;
+ bool paused_;
+ bool high_accuracy_;
+
+ scoped_ptr<GeolocationProvider::Subscription> geolocation_subscription_;
DISALLOW_COPY_AND_ASSIGN(GeolocationDispatcherHost);
};
diff --git a/content/browser/geolocation/geolocation_provider_impl.cc b/content/browser/geolocation/geolocation_provider_impl.cc
index f343c2920f..901cadea02 100644
--- a/content/browser/geolocation/geolocation_provider_impl.cc
+++ b/content/browser/geolocation/geolocation_provider_impl.cc
@@ -16,84 +16,44 @@
namespace content {
-namespace {
-void OverrideLocationForTestingOnIOThread(
- const Geoposition& position,
- const base::Closure& completion_callback,
- scoped_refptr<base::MessageLoopProxy> callback_loop) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- GeolocationProviderImpl::GetInstance()->OverrideLocationForTesting(position);
- callback_loop->PostTask(FROM_HERE, completion_callback);
-}
-} // namespace
-
GeolocationProvider* GeolocationProvider::GetInstance() {
return GeolocationProviderImpl::GetInstance();
}
-void GeolocationProvider::OverrideLocationForTesting(
- const Geoposition& position,
- const base::Closure& completion_callback) {
- base::Closure closure = base::Bind(&OverrideLocationForTestingOnIOThread,
- position,
- completion_callback,
- base::MessageLoopProxy::current());
- if (!BrowserThread::CurrentlyOn(BrowserThread::IO))
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, closure);
- else
- closure.Run();
-}
-
-void GeolocationProviderImpl::AddLocationUpdateCallback(
+scoped_ptr<GeolocationProvider::Subscription>
+GeolocationProviderImpl::AddLocationUpdateCallback(
const LocationUpdateCallback& callback, bool use_high_accuracy) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- bool found = false;
- CallbackList::iterator i = callbacks_.begin();
- for (; i != callbacks_.end(); ++i) {
- if (i->first.Equals(callback)) {
- i->second = use_high_accuracy;
- found = true;
- break;
- }
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ scoped_ptr<GeolocationProvider::Subscription> subscription;
+ if (use_high_accuracy) {
+ subscription = high_accuracy_callbacks_.Add(callback);
+ } else {
+ subscription = low_accuracy_callbacks_.Add(callback);
}
- if (!found)
- callbacks_.push_back(std::make_pair(callback, use_high_accuracy));
OnClientsChanged();
if (position_.Validate() ||
position_.error_code != Geoposition::ERROR_CODE_NONE) {
callback.Run(position_);
}
-}
-bool GeolocationProviderImpl::RemoveLocationUpdateCallback(
- const LocationUpdateCallback& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- bool removed = false;
- CallbackList::iterator i = callbacks_.begin();
- for (; i != callbacks_.end(); ++i) {
- if (i->first.Equals(callback)) {
- callbacks_.erase(i);
- removed = true;
- break;
- }
- }
- if (removed)
- OnClientsChanged();
- return removed;
+ return subscription.Pass();
}
void GeolocationProviderImpl::UserDidOptIntoLocationServices() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
bool was_permission_granted = user_did_opt_into_location_services_;
user_did_opt_into_location_services_ = true;
if (IsRunning() && !was_permission_granted)
InformProvidersPermissionGranted();
}
-bool GeolocationProviderImpl::LocationServicesOptedIn() const {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return user_did_opt_into_location_services_;
+void GeolocationProviderImpl::OverrideLocationForTesting(
+ const Geoposition& position) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ position_ = position;
+ ignore_location_updates_ = true;
+ NotifyClients(position);
}
void GeolocationProviderImpl::OnLocationUpdate(const Geoposition& position) {
@@ -101,22 +61,14 @@ void GeolocationProviderImpl::OnLocationUpdate(const Geoposition& position) {
// Will be true only in testing.
if (ignore_location_updates_)
return;
- BrowserThread::PostTask(BrowserThread::IO,
+ BrowserThread::PostTask(BrowserThread::UI,
FROM_HERE,
base::Bind(&GeolocationProviderImpl::NotifyClients,
base::Unretained(this), position));
}
-void GeolocationProviderImpl::OverrideLocationForTesting(
- const Geoposition& position) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- position_ = position;
- ignore_location_updates_ = true;
- NotifyClients(position);
-}
-
GeolocationProviderImpl* GeolocationProviderImpl::GetInstance() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
return Singleton<GeolocationProviderImpl>::get();
}
@@ -125,12 +77,16 @@ GeolocationProviderImpl::GeolocationProviderImpl()
user_did_opt_into_location_services_(false),
ignore_location_updates_(false),
arbitrator_(NULL) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ high_accuracy_callbacks_.set_removal_callback(
+ base::Bind(&GeolocationProviderImpl::OnClientsChanged,
+ base::Unretained(this)));
+ low_accuracy_callbacks_.set_removal_callback(
+ base::Bind(&GeolocationProviderImpl::OnClientsChanged,
+ base::Unretained(this)));
}
GeolocationProviderImpl::~GeolocationProviderImpl() {
- // All callbacks should have unregistered before this singleton is destructed.
- DCHECK(callbacks_.empty());
Stop();
DCHECK(!arbitrator_);
}
@@ -140,9 +96,9 @@ bool GeolocationProviderImpl::OnGeolocationThread() const {
}
void GeolocationProviderImpl::OnClientsChanged() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
base::Closure task;
- if (callbacks_.empty()) {
+ if (high_accuracy_callbacks_.empty() && low_accuracy_callbacks_.empty()) {
DCHECK(IsRunning());
// We have no more observers, so we clear the cached geoposition so that
// when the next observer is added we will not provide a stale position.
@@ -152,18 +108,11 @@ void GeolocationProviderImpl::OnClientsChanged() {
} else {
if (!IsRunning()) {
Start();
- if (LocationServicesOptedIn())
+ if (user_did_opt_into_location_services_)
InformProvidersPermissionGranted();
}
// Determine a set of options that satisfies all clients.
- bool use_high_accuracy = false;
- CallbackList::iterator i = callbacks_.begin();
- for (; i != callbacks_.end(); ++i) {
- if (i->second) {
- use_high_accuracy = true;
- break;
- }
- }
+ bool use_high_accuracy = !high_accuracy_callbacks_.empty();
// Send the current options to the providers as they may have changed.
task = base::Bind(&GeolocationProviderImpl::StartProviders,
@@ -201,18 +150,12 @@ void GeolocationProviderImpl::InformProvidersPermissionGranted() {
}
void GeolocationProviderImpl::NotifyClients(const Geoposition& position) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(position.Validate() ||
position.error_code != Geoposition::ERROR_CODE_NONE);
position_ = position;
- CallbackList::const_iterator it = callbacks_.begin();
- while (it != callbacks_.end()) {
- // Advance iterator before calling the observer to guard against synchronous
- // unregister.
- LocationUpdateCallback callback = it->first;
- ++it;
- callback.Run(position_);
- }
+ high_accuracy_callbacks_.Notify(position_);
+ low_accuracy_callbacks_.Notify(position_);
}
void GeolocationProviderImpl::Init() {
diff --git a/content/browser/geolocation/geolocation_provider_impl.h b/content/browser/geolocation/geolocation_provider_impl.h
index 6613f44fc6..e3b8762ed4 100644
--- a/content/browser/geolocation/geolocation_provider_impl.h
+++ b/content/browser/geolocation/geolocation_provider_impl.h
@@ -21,33 +21,16 @@ template<typename Type> struct DefaultSingletonTraits;
namespace content {
class LocationArbitrator;
-// This is the main API to the geolocation subsystem. The application will hold
-// a single instance of this class and can register multiple clients to be
-// notified of location changes:
-// * Callbacks are registered by AddLocationUpdateCallback() and will keep
-// receiving updates until unregistered by RemoveLocationUpdateCallback().
-// The application must instantiate the GeolocationProvider on the IO thread and
-// must communicate with it on the same thread.
-// The underlying location arbitrator will only be enabled whilst there is at
-// least one registered observer or pending callback. The arbitrator and the
-// location providers it uses run on a separate Geolocation thread.
class CONTENT_EXPORT GeolocationProviderImpl
: public NON_EXPORTED_BASE(GeolocationProvider),
public base::Thread {
public:
// GeolocationProvider implementation:
- virtual void AddLocationUpdateCallback(const LocationUpdateCallback& callback,
- bool use_high_accuracy) OVERRIDE;
- virtual bool RemoveLocationUpdateCallback(
- const LocationUpdateCallback& callback) OVERRIDE;
+ virtual scoped_ptr<GeolocationProvider::Subscription>
+ AddLocationUpdateCallback(const LocationUpdateCallback& callback,
+ bool use_high_accuracy) OVERRIDE;
virtual void UserDidOptIntoLocationServices() OVERRIDE;
-
- bool LocationServicesOptedIn() const;
-
- // Overrides the location for automation/testing. Suppresses any further
- // updates from the actual providers and sends an update with the overridden
- // position to all registered clients.
- void OverrideLocationForTesting(const Geoposition& override_position);
+ virtual void OverrideLocationForTesting(const Geoposition& position) OVERRIDE;
// Callback from the LocationArbitrator. Public for testing.
void OnLocationUpdate(const Geoposition& position);
@@ -58,6 +41,10 @@ class CONTENT_EXPORT GeolocationProviderImpl
// instantiated on the same thread. Ownership is NOT returned.
static GeolocationProviderImpl* GetInstance();
+ bool user_did_opt_into_location_services_for_testing() {
+ return user_did_opt_into_location_services_;
+ }
+
protected:
friend struct DefaultSingletonTraits<GeolocationProviderImpl>;
GeolocationProviderImpl();
@@ -67,9 +54,6 @@ class CONTENT_EXPORT GeolocationProviderImpl
virtual LocationArbitrator* CreateArbitrator();
private:
- typedef std::pair<LocationUpdateCallback, bool> LocationUpdateInfo;
- typedef std::list<LocationUpdateInfo> CallbackList;
-
bool OnGeolocationThread() const;
// Start and stop providers as needed when clients are added or removed.
@@ -94,8 +78,9 @@ class CONTENT_EXPORT GeolocationProviderImpl
virtual void Init() OVERRIDE;
virtual void CleanUp() OVERRIDE;
- // Only used on the IO thread
- CallbackList callbacks_;
+ base::CallbackList<void(const Geoposition&)> high_accuracy_callbacks_;
+ base::CallbackList<void(const Geoposition&)> low_accuracy_callbacks_;
+
bool user_did_opt_into_location_services_;
Geoposition position_;
diff --git a/content/browser/geolocation/geolocation_provider_unittest.cc b/content/browser/geolocation/geolocation_provider_unittest.cc
index a2aa88d9e6..95fa1b6914 100644
--- a/content/browser/geolocation/geolocation_provider_unittest.cc
+++ b/content/browser/geolocation/geolocation_provider_unittest.cc
@@ -114,7 +114,7 @@ class GeolocationProviderTest : public testing::Test {
protected:
GeolocationProviderTest()
: message_loop_(),
- io_thread_(BrowserThread::IO, &message_loop_),
+ ui_thread_(BrowserThread::UI, &message_loop_),
provider_(new LocationProviderForTestArbitrator) {
}
@@ -131,7 +131,7 @@ class GeolocationProviderTest : public testing::Test {
void GetProvidersStarted(bool* started);
base::MessageLoop message_loop_;
- TestBrowserThread io_thread_;
+ TestBrowserThread ui_thread_;
scoped_ptr<LocationProviderForTestArbitrator> provider_;
};
@@ -167,19 +167,25 @@ void GeolocationProviderTest::SendMockLocation(const Geoposition& position) {
// Regression test for http://crbug.com/59377
TEST_F(GeolocationProviderTest, OnPermissionGrantedWithoutObservers) {
- EXPECT_FALSE(provider()->LocationServicesOptedIn());
+ EXPECT_FALSE(provider()->user_did_opt_into_location_services_for_testing());
provider()->UserDidOptIntoLocationServices();
- EXPECT_TRUE(provider()->LocationServicesOptedIn());
+ EXPECT_TRUE(provider()->user_did_opt_into_location_services_for_testing());
+}
+
+void DummyFunction(const Geoposition& position) {
}
TEST_F(GeolocationProviderTest, StartStop) {
EXPECT_FALSE(provider()->IsRunning());
- GeolocationProviderImpl::LocationUpdateCallback null_callback;
- provider()->AddLocationUpdateCallback(null_callback, false);
+ GeolocationProviderImpl::LocationUpdateCallback callback =
+ base::Bind(&DummyFunction);
+ scoped_ptr<content::GeolocationProvider::Subscription> subscription =
+ provider()->AddLocationUpdateCallback(callback, false);
EXPECT_TRUE(provider()->IsRunning());
EXPECT_TRUE(ProvidersStarted());
- provider()->RemoveLocationUpdateCallback(null_callback);
+ subscription.reset();
+
EXPECT_FALSE(ProvidersStarted());
EXPECT_TRUE(provider()->IsRunning());
}
@@ -196,11 +202,12 @@ TEST_F(GeolocationProviderTest, StalePositionNotSent) {
&MockGeolocationObserver::OnLocationUpdate,
base::Unretained(&first_observer));
EXPECT_CALL(first_observer, OnLocationUpdate(GeopositionEq(first_position)));
- provider()->AddLocationUpdateCallback(first_callback, false);
+ scoped_ptr<content::GeolocationProvider::Subscription> subscription =
+ provider()->AddLocationUpdateCallback(first_callback, false);
SendMockLocation(first_position);
base::MessageLoop::current()->Run();
- provider()->RemoveLocationUpdateCallback(first_callback);
+ subscription.reset();
Geoposition second_position;
second_position.latitude = 13;
@@ -216,7 +223,8 @@ TEST_F(GeolocationProviderTest, StalePositionNotSent) {
GeolocationProviderImpl::LocationUpdateCallback second_callback = base::Bind(
&MockGeolocationObserver::OnLocationUpdate,
base::Unretained(&second_observer));
- provider()->AddLocationUpdateCallback(second_callback, false);
+ scoped_ptr<content::GeolocationProvider::Subscription> subscription2 =
+ provider()->AddLocationUpdateCallback(second_callback, false);
base::MessageLoop::current()->RunUntilIdle();
// The second observer should receive the new position now.
@@ -225,7 +233,7 @@ TEST_F(GeolocationProviderTest, StalePositionNotSent) {
SendMockLocation(second_position);
base::MessageLoop::current()->Run();
- provider()->RemoveLocationUpdateCallback(second_callback);
+ subscription2.reset();
EXPECT_FALSE(ProvidersStarted());
}
@@ -240,8 +248,9 @@ TEST_F(GeolocationProviderTest, OverrideLocationForTesting) {
GeolocationProviderImpl::LocationUpdateCallback callback = base::Bind(
&MockGeolocationObserver::OnLocationUpdate,
base::Unretained(&mock_observer));
- provider()->AddLocationUpdateCallback(callback, false);
- provider()->RemoveLocationUpdateCallback(callback);
+ scoped_ptr<content::GeolocationProvider::Subscription> subscription =
+ provider()->AddLocationUpdateCallback(callback, false);
+ subscription.reset();
// Wait for the providers to be stopped now that all clients are gone.
EXPECT_FALSE(ProvidersStarted());
}
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc
index 715eb20454..0c43205d3d 100644
--- a/content/browser/gpu/browser_gpu_channel_host_factory.cc
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/synchronization/waitable_event.h"
#include "base/threading/thread_restrictions.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host.h"
@@ -16,6 +17,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/gpu_data_manager.h"
#include "content/public/common/content_client.h"
+#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_forwarding_message_filter.h"
#include "ipc/message_filter.h"
@@ -23,13 +25,66 @@ namespace content {
BrowserGpuChannelHostFactory* BrowserGpuChannelHostFactory::instance_ = NULL;
-BrowserGpuChannelHostFactory::CreateRequest::CreateRequest()
- : event(true, false),
- gpu_host_id(0),
- route_id(MSG_ROUTING_NONE) {
-}
-
-BrowserGpuChannelHostFactory::CreateRequest::~CreateRequest() {
+struct BrowserGpuChannelHostFactory::CreateRequest {
+ CreateRequest()
+ : event(true, false), gpu_host_id(0), route_id(MSG_ROUTING_NONE) {}
+ ~CreateRequest() {}
+ base::WaitableEvent event;
+ int gpu_host_id;
+ int32 route_id;
+ bool succeeded;
+};
+
+class BrowserGpuChannelHostFactory::EstablishRequest
+ : public base::RefCountedThreadSafe<EstablishRequest> {
+ public:
+ static scoped_refptr<EstablishRequest> Create(CauseForGpuLaunch cause,
+ int gpu_client_id,
+ int gpu_host_id);
+ void Wait();
+ void Cancel();
+
+ int gpu_host_id() { return gpu_host_id_; }
+ IPC::ChannelHandle& channel_handle() { return channel_handle_; }
+ gpu::GPUInfo gpu_info() { return gpu_info_; }
+
+ private:
+ friend class base::RefCountedThreadSafe<EstablishRequest>;
+ explicit EstablishRequest(CauseForGpuLaunch cause,
+ int gpu_client_id,
+ int gpu_host_id);
+ ~EstablishRequest() {}
+ void EstablishOnIO();
+ void OnEstablishedOnIO(const IPC::ChannelHandle& channel_handle,
+ const gpu::GPUInfo& gpu_info);
+ void FinishOnIO();
+ void FinishOnMain();
+
+ base::WaitableEvent event_;
+ CauseForGpuLaunch cause_for_gpu_launch_;
+ const int gpu_client_id_;
+ int gpu_host_id_;
+ bool reused_gpu_process_;
+ IPC::ChannelHandle channel_handle_;
+ gpu::GPUInfo gpu_info_;
+ bool finished_;
+ scoped_refptr<base::MessageLoopProxy> main_loop_;
+};
+
+scoped_refptr<BrowserGpuChannelHostFactory::EstablishRequest>
+BrowserGpuChannelHostFactory::EstablishRequest::Create(CauseForGpuLaunch cause,
+ int gpu_client_id,
+ int gpu_host_id) {
+ scoped_refptr<EstablishRequest> establish_request =
+ new EstablishRequest(cause, gpu_client_id, gpu_host_id);
+ scoped_refptr<base::MessageLoopProxy> loop =
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
+ // PostTask outside the constructor to ensure at least one reference exists.
+ loop->PostTask(
+ FROM_HERE,
+ base::Bind(&BrowserGpuChannelHostFactory::EstablishRequest::EstablishOnIO,
+ establish_request));
+ return establish_request;
}
BrowserGpuChannelHostFactory::EstablishRequest::EstablishRequest(
@@ -43,15 +98,6 @@ BrowserGpuChannelHostFactory::EstablishRequest::EstablishRequest(
reused_gpu_process_(false),
finished_(false),
main_loop_(base::MessageLoopProxy::current()) {
- scoped_refptr<base::MessageLoopProxy> loop =
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
- loop->PostTask(
- FROM_HERE,
- base::Bind(&BrowserGpuChannelHostFactory::EstablishRequest::EstablishOnIO,
- this));
-}
-
-BrowserGpuChannelHostFactory::EstablishRequest::~EstablishRequest() {
}
void BrowserGpuChannelHostFactory::EstablishRequest::EstablishOnIO() {
@@ -146,7 +192,11 @@ bool BrowserGpuChannelHostFactory::CanUseForTesting() {
void BrowserGpuChannelHostFactory::Initialize(bool establish_gpu_channel) {
DCHECK(!instance_);
- instance_ = new BrowserGpuChannelHostFactory(establish_gpu_channel);
+ instance_ = new BrowserGpuChannelHostFactory();
+ if (establish_gpu_channel) {
+ instance_->EstablishGpuChannel(CAUSE_FOR_GPU_LAUNCH_BROWSER_STARTUP,
+ base::Closure());
+ }
}
void BrowserGpuChannelHostFactory::Terminate() {
@@ -155,15 +205,10 @@ void BrowserGpuChannelHostFactory::Terminate() {
instance_ = NULL;
}
-BrowserGpuChannelHostFactory::BrowserGpuChannelHostFactory(
- bool establish_gpu_channel)
+BrowserGpuChannelHostFactory::BrowserGpuChannelHostFactory()
: gpu_client_id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()),
shutdown_event_(new base::WaitableEvent(true, false)),
gpu_host_id_(0) {
- if (establish_gpu_channel) {
- pending_request_ = new EstablishRequest(
- CAUSE_FOR_GPU_LAUNCH_BROWSER_STARTUP, gpu_client_id_, gpu_host_id_);
- }
}
BrowserGpuChannelHostFactory::~BrowserGpuChannelHostFactory() {
@@ -336,7 +381,7 @@ void BrowserGpuChannelHostFactory::EstablishGpuChannel(
if (!gpu_channel_ && !pending_request_) {
// We should only get here if the context was lost.
- pending_request_ = new EstablishRequest(
+ pending_request_ = EstablishRequest::Create(
cause_for_gpu_launch, gpu_client_id_, gpu_host_id_);
}
@@ -358,14 +403,15 @@ GpuChannelHost* BrowserGpuChannelHostFactory::GetGpuChannel() {
void BrowserGpuChannelHostFactory::GpuChannelEstablished() {
DCHECK(IsMainThread());
DCHECK(pending_request_);
- if (pending_request_->channel_handle().name.empty())
- return;
-
- GetContentClient()->SetGpuInfo(pending_request_->gpu_info());
- gpu_channel_ = GpuChannelHost::Create(this,
- pending_request_->gpu_info(),
- pending_request_->channel_handle(),
- shutdown_event_.get());
+ if (pending_request_->channel_handle().name.empty()) {
+ DCHECK(!gpu_channel_);
+ } else {
+ GetContentClient()->SetGpuInfo(pending_request_->gpu_info());
+ gpu_channel_ = GpuChannelHost::Create(this,
+ pending_request_->gpu_info(),
+ pending_request_->channel_handle(),
+ shutdown_event_.get());
+ }
gpu_host_id_ = pending_request_->gpu_host_id();
pending_request_ = NULL;
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.h b/content/browser/gpu/browser_gpu_channel_host_factory.h
index e94db4268f..c2637f033c 100644
--- a/content/browser/gpu/browser_gpu_channel_host_factory.h
+++ b/content/browser/gpu/browser_gpu_channel_host_factory.h
@@ -9,10 +9,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/process/process.h"
-#include "base/synchronization/waitable_event.h"
#include "content/common/gpu/client/gpu_channel_host.h"
-#include "ipc/ipc_channel_handle.h"
#include "ipc/message_filter.h"
namespace content {
@@ -65,48 +62,10 @@ class CONTENT_EXPORT BrowserGpuChannelHostFactory
static bool CanUseForTesting();
private:
- struct CreateRequest {
- CreateRequest();
- ~CreateRequest();
- base::WaitableEvent event;
- int gpu_host_id;
- int32 route_id;
- bool succeeded;
- };
-
- class EstablishRequest : public base::RefCountedThreadSafe<EstablishRequest> {
- public:
- explicit EstablishRequest(CauseForGpuLaunch cause,
- int gpu_client_id,
- int gpu_host_id);
- void Wait();
- void Cancel();
-
- int gpu_host_id() { return gpu_host_id_; }
- IPC::ChannelHandle& channel_handle() { return channel_handle_; }
- gpu::GPUInfo gpu_info() { return gpu_info_; }
-
- private:
- friend class base::RefCountedThreadSafe<EstablishRequest>;
- ~EstablishRequest();
- void EstablishOnIO();
- void OnEstablishedOnIO(const IPC::ChannelHandle& channel_handle,
- const gpu::GPUInfo& gpu_info);
- void FinishOnIO();
- void FinishOnMain();
-
- base::WaitableEvent event_;
- CauseForGpuLaunch cause_for_gpu_launch_;
- const int gpu_client_id_;
- int gpu_host_id_;
- bool reused_gpu_process_;
- IPC::ChannelHandle channel_handle_;
- gpu::GPUInfo gpu_info_;
- bool finished_;
- scoped_refptr<base::MessageLoopProxy> main_loop_;
- };
-
- explicit BrowserGpuChannelHostFactory(bool establish_gpu_channel);
+ struct CreateRequest;
+ class EstablishRequest;
+
+ BrowserGpuChannelHostFactory();
virtual ~BrowserGpuChannelHostFactory();
void GpuChannelEstablished();
diff --git a/content/browser/gpu/compositor_util.cc b/content/browser/gpu/compositor_util.cc
index c2912a36e9..b54b997566 100644
--- a/content/browser/gpu/compositor_util.cc
+++ b/content/browser/gpu/compositor_util.cc
@@ -204,7 +204,7 @@ bool IsImplSidePaintingEnabled() {
switches::kEnableBleedingEdgeRenderingFastPaths))
return true;
-#if defined(OS_MACOSX)
+#if defined(OS_MACOSX) || defined(OS_WIN)
return false;
#else
return IsThreadedCompositingEnabled();
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 008987a4ac..423c18727f 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -38,6 +38,7 @@
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_switches.h"
#include "ipc/message_filter.h"
+#include "media/base/media_switches.h"
#include "ui/events/latency_info.h"
#include "ui/gl/gl_switches.h"
@@ -53,6 +54,10 @@
#include "ui/ozone/ozone_switches.h"
#endif
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+#include "ui/gfx/x/x11_switches.h"
+#endif
+
namespace content {
bool GpuProcessHost::gpu_enabled_ = true;
@@ -800,6 +805,13 @@ void GpuProcessHost::OnAcceleratedSurfaceBuffersSwapped(
"GpuHostMsg_AcceleratedSurfaceBuffersSwapped"))
return;
+ gfx::AcceleratedWidget native_widget =
+ GpuSurfaceTracker::Get()->AcquireNativeWidget(params.surface_id);
+ if (native_widget) {
+ RenderWidgetHelper::OnNativeSurfaceBuffersSwappedOnIOThread(this, params);
+ return;
+ }
+
gfx::GLSurfaceHandle surface_handle =
GpuSurfaceTracker::Get()->GetSurfaceHandle(params.surface_id);
// Compositor window is always gfx::kNullPluginWindow.
@@ -930,6 +942,7 @@ bool GpuProcessHost::LaunchGpuProcess(const std::string& channel_id) {
switches::kGpuSandboxAllowSysVShm,
switches::kGpuSandboxFailuresFatal,
switches::kGpuSandboxStartAfterInitialization,
+ switches::kIgnoreResolutionLimitsForAcceleratedVideoDecode,
switches::kLoggingLevel,
switches::kNoSandbox,
switches::kTestGLLib,
@@ -945,8 +958,8 @@ bool GpuProcessHost::LaunchGpuProcess(const std::string& channel_id) {
#if defined(USE_OZONE)
switches::kOzonePlatform,
#endif
-#if defined(OS_WIN)
- switches::kHighDPISupport,
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+ switches::kX11Display,
#endif
};
cmd_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
diff --git a/content/browser/histogram_message_filter.cc b/content/browser/histogram_message_filter.cc
index eae1100c12..8a58fff55f 100644
--- a/content/browser/histogram_message_filter.cc
+++ b/content/browser/histogram_message_filter.cc
@@ -17,16 +17,15 @@ namespace content {
HistogramMessageFilter::HistogramMessageFilter()
: BrowserMessageFilter(ChildProcessMsgStart) {}
-bool HistogramMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool HistogramMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(HistogramMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(HistogramMessageFilter, message)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ChildHistogramData,
OnChildHistogramData)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_GetBrowserHistogram,
OnGetBrowserHistogram)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/histogram_message_filter.h b/content/browser/histogram_message_filter.h
index 64c13cb698..6786706168 100644
--- a/content/browser/histogram_message_filter.h
+++ b/content/browser/histogram_message_filter.h
@@ -19,8 +19,7 @@ class HistogramMessageFilter : public BrowserMessageFilter {
HistogramMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~HistogramMessageFilter();
diff --git a/content/browser/host_zoom_map_impl.cc b/content/browser/host_zoom_map_impl.cc
index 97a2ac7816..a14b163c4c 100644
--- a/content/browser/host_zoom_map_impl.cc
+++ b/content/browser/host_zoom_map_impl.cc
@@ -4,13 +4,16 @@
#include "content/browser/host_zoom_map_impl.h"
+#include <algorithm>
#include <cmath>
#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "content/browser/frame_host/navigation_entry_impl.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/view_messages.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
@@ -34,6 +37,22 @@ HostZoomMap* HostZoomMap::GetForBrowserContext(BrowserContext* context) {
return rv;
}
+// Helper function for setting/getting zoom levels for WebContents without
+// having to import HostZoomMapImpl everywhere.
+double HostZoomMap::GetZoomLevel(const WebContents* web_contents) {
+ HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
+ HostZoomMap::GetForBrowserContext(web_contents->GetBrowserContext()));
+ return host_zoom_map->GetZoomLevelForWebContents(
+ *static_cast<const WebContentsImpl*>(web_contents));
+}
+
+void HostZoomMap::SetZoomLevel(const WebContents* web_contents, double level) {
+ HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
+ HostZoomMap::GetForBrowserContext(web_contents->GetBrowserContext()));
+ host_zoom_map->SetZoomLevelForWebContents(
+ *static_cast<const WebContentsImpl*>(web_contents), level);
+}
+
HostZoomMapImpl::HostZoomMapImpl()
: default_zoom_level_(0.0) {
registrar_.Add(
@@ -194,6 +213,80 @@ HostZoomMapImpl::AddZoomLevelChangedCallback(
return zoom_level_changed_callbacks_.Add(callback);
}
+double HostZoomMapImpl::GetZoomLevelForWebContents(
+ const WebContentsImpl& web_contents_impl) const {
+ int render_process_id = web_contents_impl.GetRenderProcessHost()->GetID();
+ int routing_id = web_contents_impl.GetRenderViewHost()->GetRoutingID();
+
+ if (UsesTemporaryZoomLevel(render_process_id, routing_id))
+ return GetTemporaryZoomLevel(render_process_id, routing_id);
+
+ // Since zoom map is updated using the url as stored in the navigation
+ // controller, we use that URL to get the zoom level.
+ GURL url;
+ NavigationEntry* entry =
+ web_contents_impl.GetController().GetLastCommittedEntry();
+ if (entry)
+ url = entry->GetURL();
+ return GetZoomLevelForHostAndScheme(url.scheme(),
+ net::GetHostOrSpecFromURL(url));
+}
+
+void HostZoomMapImpl::SetZoomLevelForWebContents(
+ const WebContentsImpl& web_contents_impl,
+ double level) {
+ int render_process_id = web_contents_impl.GetRenderProcessHost()->GetID();
+ int render_view_id = web_contents_impl.GetRenderViewHost()->GetRoutingID();
+ if (UsesTemporaryZoomLevel(render_process_id, render_view_id)) {
+
+ SetTemporaryZoomLevel(render_process_id, render_view_id, level);
+ } else {
+ SetZoomLevelForHost(
+ net::GetHostOrSpecFromURL(web_contents_impl.GetLastCommittedURL()),
+ level);
+ }
+}
+
+void HostZoomMapImpl::SetZoomLevelForView(int render_process_id,
+ int render_view_id,
+ double level,
+ const std::string& host) {
+ if (UsesTemporaryZoomLevel(render_process_id, render_view_id))
+ SetTemporaryZoomLevel(render_process_id, render_view_id, level);
+ else
+ SetZoomLevelForHost(host, level);
+}
+
+bool HostZoomMapImpl::UsesTemporaryZoomLevel(int render_process_id,
+ int render_view_id) const {
+ TemporaryZoomLevel zoom_level(render_process_id, render_view_id);
+
+ base::AutoLock auto_lock(lock_);
+ TemporaryZoomLevels::const_iterator it = std::find(
+ temporary_zoom_levels_.begin(), temporary_zoom_levels_.end(), zoom_level);
+ return it != temporary_zoom_levels_.end();
+}
+
+void HostZoomMapImpl::SetUsesTemporaryZoomLevel(
+ int render_process_id,
+ int render_view_id,
+ bool uses_temporary_zoom_level) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ TemporaryZoomLevel zoom_level(
+ render_process_id, render_view_id, default_zoom_level_);
+
+ base::AutoLock auto_lock(lock_);
+ TemporaryZoomLevels::iterator it = std::find(
+ temporary_zoom_levels_.begin(), temporary_zoom_levels_.end(), zoom_level);
+ if (uses_temporary_zoom_level) {
+ if (it == temporary_zoom_levels_.end())
+ temporary_zoom_levels_.push_back(zoom_level);
+ } else if (it != temporary_zoom_levels_.end()) {
+ temporary_zoom_levels_.erase(it);
+ }
+}
+
double HostZoomMapImpl::GetTemporaryZoomLevel(int render_process_id,
int render_view_id) const {
base::AutoLock auto_lock(lock_);
@@ -203,6 +296,7 @@ double HostZoomMapImpl::GetTemporaryZoomLevel(int render_process_id,
return temporary_zoom_levels_[i].zoom_level;
}
}
+
return 0;
}
@@ -227,10 +321,7 @@ void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
}
if (level && i == temporary_zoom_levels_.size()) {
- TemporaryZoomLevel temp;
- temp.render_process_id = render_process_id;
- temp.render_view_id = render_view_id;
- temp.zoom_level = level;
+ TemporaryZoomLevel temp(render_process_id, render_view_id, level);
temporary_zoom_levels_.push_back(temp);
}
}
@@ -269,4 +360,25 @@ void HostZoomMapImpl::Observe(int type,
HostZoomMapImpl::~HostZoomMapImpl() {
}
+HostZoomMapImpl::TemporaryZoomLevel::TemporaryZoomLevel(int process_id,
+ int view_id,
+ double level)
+ : render_process_id(process_id),
+ render_view_id(view_id),
+ zoom_level(level) {
+}
+
+HostZoomMapImpl::TemporaryZoomLevel::TemporaryZoomLevel(int process_id,
+ int view_id)
+ : render_process_id(process_id),
+ render_view_id(view_id),
+ zoom_level(0.0) {
+}
+
+bool HostZoomMapImpl::TemporaryZoomLevel::operator==(
+ const TemporaryZoomLevel& other) const {
+ return other.render_process_id == render_process_id &&
+ other.render_view_id == render_view_id;
+}
+
} // namespace content
diff --git a/content/browser/host_zoom_map_impl.h b/content/browser/host_zoom_map_impl.h
index 155f18e00f..0ad4fec46b 100644
--- a/content/browser/host_zoom_map_impl.h
+++ b/content/browser/host_zoom_map_impl.h
@@ -19,6 +19,8 @@
namespace content {
+class WebContentsImpl;
+
// HostZoomMap needs to be deleted on the UI thread because it listens
// to notifications on there (and holds a NotificationRegistrar).
class CONTENT_EXPORT HostZoomMapImpl : public NON_EXPORTED_BASE(HostZoomMap),
@@ -46,6 +48,35 @@ class CONTENT_EXPORT HostZoomMapImpl : public NON_EXPORTED_BASE(HostZoomMap),
virtual scoped_ptr<Subscription> AddZoomLevelChangedCallback(
const ZoomLevelChangedCallback& callback) OVERRIDE;
+ // Returns the current zoom level for the specified WebContents. This may
+ // be a temporary zoom level, depending on UsesTemporaryZoomLevel().
+ double GetZoomLevelForWebContents(
+ const WebContentsImpl& web_contents_impl) const;
+
+ // Sets the zoom level for this WebContents. If this WebContents is using
+ // a temporary zoom level, then level is only applied to this WebContents.
+ // Otherwise, the level will be applied on a host level.
+ void SetZoomLevelForWebContents(const WebContentsImpl& web_contents_impl,
+ double level);
+
+ // Sets the zoom level for the specified view. The level may be set for only
+ // this view, or for the host, depending on UsesTemporaryZoomLevel().
+ void SetZoomLevelForView(int render_process_id,
+ int render_view_id,
+ double level,
+ const std::string& host);
+
+ // Returns whether the view manages its zoom level independently of other tabs
+ // displaying content from the same host.
+ bool UsesTemporaryZoomLevel(int render_process_id, int render_view_id) const;
+
+ // Sets whether the view manages its zoom level independently of other tabs
+ // displaying content from the same host, based on whether
+ // |uses_temporary_zoom_level| is true.
+ void SetUsesTemporaryZoomLevel(int render_process_id,
+ int render_view_id,
+ bool uses_temporary_zoom_level);
+
// Returns the temporary zoom level that's only valid for the lifetime of
// the given WebContents (i.e. isn't saved and doesn't affect other
// WebContentses) if it exists, the default zoom level otherwise.
@@ -68,11 +99,23 @@ class CONTENT_EXPORT HostZoomMapImpl : public NON_EXPORTED_BASE(HostZoomMap),
const NotificationDetails& details) OVERRIDE;
private:
- double GetZoomLevelForHost(const std::string& host) const;
-
typedef std::map<std::string, double> HostZoomLevels;
typedef std::map<std::string, HostZoomLevels> SchemeHostZoomLevels;
+ struct TemporaryZoomLevel {
+ TemporaryZoomLevel(int process_id, int view_id, double level);
+ TemporaryZoomLevel(int process_id, int view_id);
+ bool operator==(const TemporaryZoomLevel& other) const;
+
+ int render_process_id;
+ int render_view_id;
+ double zoom_level;
+ };
+
+ typedef std::vector<TemporaryZoomLevel> TemporaryZoomLevels;
+
+ double GetZoomLevelForHost(const std::string& host) const;
+
// Callbacks called when zoom level changes.
base::CallbackList<void(const ZoomLevelChange&)>
zoom_level_changed_callbacks_;
@@ -82,15 +125,9 @@ class CONTENT_EXPORT HostZoomMapImpl : public NON_EXPORTED_BASE(HostZoomMap),
SchemeHostZoomLevels scheme_host_zoom_levels_;
double default_zoom_level_;
- struct TemporaryZoomLevel {
- int render_process_id;
- int render_view_id;
- double zoom_level;
- };
-
// Don't expect more than a couple of tabs that are using a temporary zoom
// level, so vector is fine for now.
- std::vector<TemporaryZoomLevel> temporary_zoom_levels_;
+ TemporaryZoomLevels temporary_zoom_levels_;
// Used around accesses to |host_zoom_levels_|, |default_zoom_level_| and
// |temporary_zoom_levels_| to guarantee thread safety.
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
index 4972632c42..1cf95619fe 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -128,6 +128,8 @@ enum IndexedDBBackingStoreErrorSource {
CLEAR_OBJECT_STORE,
READ_BLOB_JOURNAL,
DECODE_BLOB_JOURNAL,
+ GET_BLOB_KEY_GENERATOR_CURRENT_NUMBER,
+ GET_BLOB_INFO_FOR_RECORD,
INTERNAL_ERROR_MAX,
};
@@ -304,7 +306,8 @@ const char* IndexedDBBackingStore::Comparator::Name() const {
// 0 - Initial version.
// 1 - Adds UserIntVersion to DatabaseMetaData.
// 2 - Adds DataVersion to to global metadata.
-static const int64 kLatestKnownSchemaVersion = 2;
+// 3 - Adds metadata needed for blob support.
+static const int64 kLatestKnownSchemaVersion = 3;
WARN_UNUSED_RESULT static bool IsSchemaKnown(LevelDBDatabase* db, bool* known) {
int64 db_schema_version = 0;
bool found = false;
@@ -341,15 +344,16 @@ WARN_UNUSED_RESULT static bool IsSchemaKnown(LevelDBDatabase* db, bool* known) {
return true;
}
-WARN_UNUSED_RESULT static bool SetUpMetadata(
- LevelDBDatabase* db,
- const std::string& origin_identifier) {
+// TODO(ericu): Move this down into the member section of this file. I'm
+// leaving it here for this CL as it's easier to see the diffs in place.
+WARN_UNUSED_RESULT bool IndexedDBBackingStore::SetUpMetadata() {
const uint32 latest_known_data_version =
blink::kSerializedScriptValueVersion;
const std::string schema_version_key = SchemaVersionKey::Encode();
const std::string data_version_key = DataVersionKey::Encode();
- scoped_refptr<LevelDBTransaction> transaction = new LevelDBTransaction(db);
+ scoped_refptr<LevelDBTransaction> transaction =
+ new LevelDBTransaction(db_.get());
int64 db_schema_version = 0;
int64 db_data_version = 0;
@@ -366,6 +370,12 @@ WARN_UNUSED_RESULT static bool SetUpMetadata(
PutInt(transaction.get(), schema_version_key, db_schema_version);
db_data_version = latest_known_data_version;
PutInt(transaction.get(), data_version_key, db_data_version);
+ // If a blob directory already exists for this database, blow it away. It's
+ // leftover from a partially-purged previous generation of data.
+ if (!base::DeleteFile(blob_path_, true)) {
+ INTERNAL_WRITE_ERROR_UNTESTED(SET_UP_METADATA);
+ return false;
+ }
} else {
// Upgrade old backing store.
DCHECK_LE(db_schema_version, kLatestKnownSchemaVersion);
@@ -373,10 +383,10 @@ WARN_UNUSED_RESULT static bool SetUpMetadata(
db_schema_version = 1;
PutInt(transaction.get(), schema_version_key, db_schema_version);
const std::string start_key =
- DatabaseNameKey::EncodeMinKeyForOrigin(origin_identifier);
+ DatabaseNameKey::EncodeMinKeyForOrigin(origin_identifier_);
const std::string stop_key =
- DatabaseNameKey::EncodeStopKeyForOrigin(origin_identifier);
- scoped_ptr<LevelDBIterator> it = db->CreateIterator();
+ DatabaseNameKey::EncodeStopKeyForOrigin(origin_identifier_);
+ scoped_ptr<LevelDBIterator> it = db_->CreateIterator();
for (s = it->Seek(start_key);
s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
s = it->Next()) {
@@ -404,6 +414,13 @@ WARN_UNUSED_RESULT static bool SetUpMetadata(
db_data_version = blink::kSerializedScriptValueVersion;
PutInt(transaction.get(), data_version_key, db_data_version);
}
+ if (db_schema_version < 3) {
+ db_schema_version = 3;
+ if (!base::DeleteFile(blob_path_, true)) {
+ INTERNAL_WRITE_ERROR_UNTESTED(SET_UP_METADATA);
+ return false;
+ }
+ }
}
if (!s.ok()) {
@@ -480,6 +497,55 @@ class DefaultLevelDBFactory : public LevelDBFactory {
}
};
+static bool GetBlobKeyGeneratorCurrentNumber(
+ LevelDBTransaction* leveldb_transaction,
+ int64 database_id,
+ int64* blob_key_generator_current_number) {
+ const std::string key_gen_key = DatabaseMetaDataKey::Encode(
+ database_id, DatabaseMetaDataKey::BLOB_KEY_GENERATOR_CURRENT_NUMBER);
+
+ // Default to initial number if not found.
+ int64 cur_number = DatabaseMetaDataKey::kBlobKeyGeneratorInitialNumber;
+ std::string data;
+
+ bool found = false;
+ bool ok = leveldb_transaction->Get(key_gen_key, &data, &found).ok();
+ if (!ok) {
+ INTERNAL_READ_ERROR_UNTESTED(GET_BLOB_KEY_GENERATOR_CURRENT_NUMBER);
+ return false;
+ }
+ if (found) {
+ StringPiece slice(data);
+ if (!DecodeVarInt(&slice, &cur_number) || !slice.empty() ||
+ !DatabaseMetaDataKey::IsValidBlobKey(cur_number)) {
+ INTERNAL_READ_ERROR_UNTESTED(GET_BLOB_KEY_GENERATOR_CURRENT_NUMBER);
+ return false;
+ }
+ }
+ *blob_key_generator_current_number = cur_number;
+ return true;
+}
+
+static bool UpdateBlobKeyGeneratorCurrentNumber(
+ LevelDBTransaction* leveldb_transaction,
+ int64 database_id,
+ int64 blob_key_generator_current_number) {
+#ifndef NDEBUG
+ int64 old_number;
+ if (!GetBlobKeyGeneratorCurrentNumber(
+ leveldb_transaction, database_id, &old_number))
+ return false;
+ DCHECK_LT(old_number, blob_key_generator_current_number);
+#endif
+ DCHECK(
+ DatabaseMetaDataKey::IsValidBlobKey(blob_key_generator_current_number));
+ const std::string key = DatabaseMetaDataKey::Encode(
+ database_id, DatabaseMetaDataKey::BLOB_KEY_GENERATOR_CURRENT_NUMBER);
+
+ PutVarInt(leveldb_transaction, key, blob_key_generator_current_number);
+ return true;
+}
+
// TODO(ericu): Error recovery. If we persistently can't read the
// blob journal, the safe thing to do is to clear it and leak the blobs,
// though that may be costly. Still, database/directory deletion should always
@@ -573,6 +639,64 @@ static leveldb::Status MergeDatabaseIntoLiveBlobJournal(
return leveldb::Status::OK();
}
+// Blob Data is encoded as a series of:
+// { is_file [bool], key [int64 as varInt],
+// type [string-with-length, may be empty],
+// (for Blobs only) size [int64 as varInt]
+// (for Files only) fileName [string-with-length]
+// }
+// There is no length field; just read until you run out of data.
+static std::string EncodeBlobData(
+ const std::vector<IndexedDBBlobInfo*>& blob_info) {
+ std::string ret;
+ std::vector<IndexedDBBlobInfo*>::const_iterator iter;
+ for (iter = blob_info.begin(); iter != blob_info.end(); ++iter) {
+ const IndexedDBBlobInfo& info = **iter;
+ EncodeBool(info.is_file(), &ret);
+ EncodeVarInt(info.key(), &ret);
+ EncodeStringWithLength(info.type(), &ret);
+ if (info.is_file())
+ EncodeStringWithLength(info.file_name(), &ret);
+ else
+ EncodeVarInt(info.size(), &ret);
+ }
+ return ret;
+}
+
+static bool DecodeBlobData(const std::string& data,
+ std::vector<IndexedDBBlobInfo>* output) {
+ std::vector<IndexedDBBlobInfo> ret;
+ output->clear();
+ StringPiece slice(data);
+ while (!slice.empty()) {
+ bool is_file;
+ int64 key;
+ base::string16 type;
+ int64 size;
+ base::string16 file_name;
+
+ if (!DecodeBool(&slice, &is_file))
+ return false;
+ if (!DecodeVarInt(&slice, &key) ||
+ !DatabaseMetaDataKey::IsValidBlobKey(key))
+ return false;
+ if (!DecodeStringWithLength(&slice, &type))
+ return false;
+ if (is_file) {
+ if (!DecodeStringWithLength(&slice, &file_name))
+ return false;
+ ret.push_back(IndexedDBBlobInfo(key, type, file_name));
+ } else {
+ if (!DecodeVarInt(&slice, &size) || size < 0)
+ return false;
+ ret.push_back(IndexedDBBlobInfo(type, static_cast<uint64>(size), key));
+ }
+ }
+ output->swap(ret);
+
+ return true;
+}
+
IndexedDBBackingStore::IndexedDBBackingStore(
IndexedDBFactory* indexed_db_factory,
const GURL& origin_url,
@@ -589,7 +713,8 @@ IndexedDBBackingStore::IndexedDBBackingStore(
task_runner_(task_runner),
db_(db.Pass()),
comparator_(comparator.Pass()),
- active_blob_registry_(this) {}
+ active_blob_registry_(this) {
+}
IndexedDBBackingStore::~IndexedDBBackingStore() {
if (!blob_path_.empty() && !child_process_ids_granted_.empty()) {
@@ -602,6 +727,8 @@ IndexedDBBackingStore::~IndexedDBBackingStore() {
policy->RevokeAllPermissionsForFile(*iter, blob_path_);
}
}
+ STLDeleteContainerPairSecondPointers(incognito_blob_map_.begin(),
+ incognito_blob_map_.end());
// db_'s destructor uses comparator_. The order of destruction is important.
db_.reset();
comparator_.reset();
@@ -636,6 +763,7 @@ enum IndexedDBBackingStoreOpenResult {
INDEXED_DB_BACKING_STORE_OPEN_ORIGIN_TOO_LONG,
INDEXED_DB_BACKING_STORE_OPEN_NO_RECOVERY,
INDEXED_DB_BACKING_STORE_OPEN_FAILED_PRIOR_CORRUPTION,
+ INDEXED_DB_BACKING_STORE_OPEN_FAILED_CLEANUP_JOURNAL_ERROR,
INDEXED_DB_BACKING_STORE_OPEN_MAX,
};
@@ -921,13 +1049,22 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open(
return scoped_refptr<IndexedDBBackingStore>();
}
- return Create(indexed_db_factory,
- origin_url,
- blob_path,
- request_context,
- db.Pass(),
- comparator.Pass(),
- task_runner);
+ scoped_refptr<IndexedDBBackingStore> backing_store =
+ Create(indexed_db_factory,
+ origin_url,
+ blob_path,
+ request_context,
+ db.Pass(),
+ comparator.Pass(),
+ task_runner);
+
+ if (clean_journal && backing_store &&
+ !backing_store->CleanUpBlobJournal(LiveBlobJournalKey::Encode()).ok()) {
+ HistogramOpenStatus(
+ INDEXED_DB_BACKING_STORE_OPEN_FAILED_CLEANUP_JOURNAL_ERROR, origin_url);
+ return scoped_refptr<IndexedDBBackingStore>();
+ }
+ return backing_store;
}
// static
@@ -984,8 +1121,7 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Create(
db.Pass(),
comparator.Pass(),
task_runner));
- if (!SetUpMetadata(backing_store->db_.get(),
- backing_store->origin_identifier_))
+ if (!backing_store->SetUpMetadata())
return scoped_refptr<IndexedDBBackingStore>();
return backing_store;
@@ -1016,7 +1152,8 @@ std::vector<base::string16> IndexedDBBackingStore::GetDatabaseNames(
*s = it->Next()) {
StringPiece slice(it->Key());
DatabaseNameKey database_name_key;
- if (!DatabaseNameKey::Decode(&slice, &database_name_key)) {
+ if (!DatabaseNameKey::Decode(&slice, &database_name_key) ||
+ !slice.empty()) {
INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_DATABASE_NAMES);
continue;
}
@@ -1081,6 +1218,29 @@ leveldb::Status IndexedDBBackingStore::GetIDBDatabaseMetaData(
INTERNAL_READ_ERROR_UNTESTED(GET_IDBDATABASE_METADATA);
}
+ // We don't cache this, we just check it if it's there.
+ int64 blob_key_generator_current_number =
+ DatabaseMetaDataKey::kInvalidBlobKey;
+
+ s = GetVarInt(
+ db_.get(),
+ DatabaseMetaDataKey::Encode(
+ metadata->id, DatabaseMetaDataKey::BLOB_KEY_GENERATOR_CURRENT_NUMBER),
+ &blob_key_generator_current_number,
+ found);
+ if (!s.ok()) {
+ INTERNAL_READ_ERROR_UNTESTED(GET_IDBDATABASE_METADATA);
+ return s;
+ }
+ if (!*found) {
+ // This database predates blob support.
+ *found = true;
+ } else if (!DatabaseMetaDataKey::IsValidBlobKey(
+ blob_key_generator_current_number)) {
+ INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_IDBDATABASE_METADATA);
+ return InternalInconsistencyStatus();
+ }
+
return s;
}
@@ -1134,6 +1294,12 @@ leveldb::Status IndexedDBBackingStore::CreateIDBDatabaseMetaData(
DatabaseMetaDataKey::Encode(*row_id,
DatabaseMetaDataKey::USER_INT_VERSION),
int_version);
+ PutVarInt(
+ transaction.get(),
+ DatabaseMetaDataKey::Encode(
+ *row_id, DatabaseMetaDataKey::BLOB_KEY_GENERATOR_CURRENT_NUMBER),
+ DatabaseMetaDataKey::kBlobKeyGeneratorInitialNumber);
+
s = transaction->Commit();
if (!s.ok())
INTERNAL_WRITE_ERROR_UNTESTED(CREATE_IDBDATABASE_METADATA);
@@ -1166,15 +1332,48 @@ static leveldb::Status DeleteRange(LevelDBTransaction* transaction,
return s;
}
+static leveldb::Status DeleteBlobsInObjectStore(
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
+ int64 object_store_id) {
+ std::string start_key, end_key;
+ start_key =
+ BlobEntryKey::EncodeMinKeyForObjectStore(database_id, object_store_id);
+ end_key =
+ BlobEntryKey::EncodeStopKeyForObjectStore(database_id, object_store_id);
+
+ scoped_ptr<LevelDBIterator> it = transaction->transaction()->CreateIterator();
+
+ leveldb::Status s = it->Seek(start_key);
+ for (; s.ok() && it->IsValid() && CompareKeys(it->Key(), end_key) < 0;
+ s = it->Next()) {
+ StringPiece key_piece(it->Key());
+ std::string user_key =
+ BlobEntryKey::ReencodeToObjectStoreDataKey(&key_piece);
+ if (!user_key.size()) {
+ INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_IDBDATABASE_METADATA);
+ return InternalInconsistencyStatus();
+ }
+ transaction->PutBlobInfo(
+ database_id, object_store_id, user_key, NULL, NULL);
+ }
+ return s;
+}
+
leveldb::Status IndexedDBBackingStore::DeleteDatabase(
const base::string16& name) {
IDB_TRACE("IndexedDBBackingStore::DeleteDatabase");
scoped_ptr<LevelDBDirectTransaction> transaction =
LevelDBDirectTransaction::Create(db_.get());
+ leveldb::Status s;
+ s = CleanUpBlobJournal(BlobJournalKey::Encode());
+ if (!s.ok())
+ return s;
+
IndexedDBDatabaseMetadata metadata;
bool success = false;
- leveldb::Status s = GetIDBDatabaseMetaData(name, &metadata, &success);
+ s = GetIDBDatabaseMetaData(name, &metadata, &success);
if (!s.ok())
return s;
if (!success)
@@ -1197,16 +1396,30 @@ leveldb::Status IndexedDBBackingStore::DeleteDatabase(
const std::string key = DatabaseNameKey::Encode(origin_identifier_, name);
transaction->Remove(key);
- // TODO(ericu): Put the real calls to the blob journal code here. For now,
- // I've inserted fake calls so that we don't get "you didn't use this static
- // function" compiler errors.
+ bool need_cleanup = false;
+ if (active_blob_registry()->MarkDeletedCheckIfUsed(
+ metadata.id, DatabaseMetaDataKey::kAllBlobsKey)) {
+ s = MergeDatabaseIntoLiveBlobJournal(transaction.get(), metadata.id);
+ if (!s.ok())
+ return s;
+ } else {
+ UpdateBlobJournalWithDatabase(transaction.get(), metadata.id);
+ need_cleanup = true;
+ }
+
+ // TODO(ericu): Remove these fake calls, added to avoid "defined but unused"
+ // compiler errors until the code that makes the real calls can be added.
if (false) {
+ std::vector<IndexedDBBlobInfo*> fake;
+ EncodeBlobData(fake);
+
scoped_refptr<LevelDBTransaction> fake_transaction =
new LevelDBTransaction(NULL);
BlobJournalType fake_journal;
- MergeDatabaseIntoLiveBlobJournal(transaction.get(), metadata.id);
- UpdateBlobJournalWithDatabase(transaction.get(), metadata.id);
MergeBlobsIntoLiveBlobJournal(fake_transaction.get(), fake_journal);
+ UpdateBlobKeyGeneratorCurrentNumber(fake_transaction.get(), 0, 0);
+ int64 arg;
+ GetBlobKeyGeneratorCurrentNumber(fake_transaction.get(), 0, &arg);
}
s = transaction->Commit();
@@ -1214,6 +1427,10 @@ leveldb::Status IndexedDBBackingStore::DeleteDatabase(
INTERNAL_WRITE_ERROR_UNTESTED(DELETE_DATABASE);
return s;
}
+
+ if (need_cleanup)
+ CleanUpBlobJournal(BlobJournalKey::Encode());
+
db_->Compact(start_key, stop_key);
return s;
}
@@ -1256,9 +1473,10 @@ leveldb::Status IndexedDBBackingStore::GetObjectStores(
while (s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) {
StringPiece slice(it->Key());
ObjectStoreMetaDataKey meta_data_key;
- bool ok = ObjectStoreMetaDataKey::Decode(&slice, &meta_data_key);
+ bool ok =
+ ObjectStoreMetaDataKey::Decode(&slice, &meta_data_key) && slice.empty();
DCHECK(ok);
- if (meta_data_key.MetaDataType() != ObjectStoreMetaDataKey::NAME) {
+ if (!ok || meta_data_key.MetaDataType() != ObjectStoreMetaDataKey::NAME) {
INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
// Possible stale metadata, but don't fail the load.
s = it->Next();
@@ -1521,6 +1739,12 @@ leveldb::Status IndexedDBBackingStore::DeleteObjectStore(
return InternalInconsistencyStatus();
}
+ s = DeleteBlobsInObjectStore(transaction, database_id, object_store_id);
+ if (!s.ok()) {
+ INTERNAL_CONSISTENCY_ERROR_UNTESTED(DELETE_OBJECT_STORE);
+ return s;
+ }
+
s = DeleteRange(
leveldb_transaction,
ObjectStoreMetaDataKey::Encode(database_id, object_store_id, 0),
@@ -1589,7 +1813,7 @@ leveldb::Status IndexedDBBackingStore::GetRecord(
}
record->bits = slice.as_string();
- return s;
+ return transaction->GetBlobInfoForRecord(database_id, leveldb_key, record);
}
WARN_UNUSED_RESULT static leveldb::Status GetNewVersionNumber(
@@ -1685,9 +1909,11 @@ leveldb::Status IndexedDBBackingStore::ClearObjectStore(
leveldb::Status s =
DeleteRange(transaction->transaction(), start_key, stop_key);
- if (!s.ok())
+ if (!s.ok()) {
INTERNAL_WRITE_ERROR(CLEAR_OBJECT_STORE);
- return s;
+ return s;
+ }
+ return DeleteBlobsInObjectStore(transaction, database_id, object_store_id);
}
leveldb::Status IndexedDBBackingStore::DeleteRecord(
@@ -1764,7 +1990,7 @@ leveldb::Status IndexedDBBackingStore::GetKeyGeneratorCurrentNumber(
s = it->Next()) {
StringPiece slice(it->Key());
ObjectStoreDataKey data_key;
- if (!ObjectStoreDataKey::Decode(&slice, &data_key)) {
+ if (!ObjectStoreDataKey::Decode(&slice, &data_key) || !slice.empty()) {
INTERNAL_READ_ERROR_UNTESTED(GET_KEY_GENERATOR_CURRENT_NUMBER);
return InternalInconsistencyStatus();
}
@@ -2286,6 +2512,70 @@ leveldb::Status IndexedDBBackingStore::CleanUpBlobJournal(
return journal_transaction->Commit();
}
+leveldb::Status IndexedDBBackingStore::Transaction::GetBlobInfoForRecord(
+ int64 database_id,
+ const std::string& object_store_data_key,
+ IndexedDBValue* value) {
+ BlobChangeRecord* change_record = NULL;
+ BlobChangeMap::const_iterator blob_iter =
+ blob_change_map_.find(object_store_data_key);
+ if (blob_iter != blob_change_map_.end()) {
+ change_record = blob_iter->second;
+ } else {
+ blob_iter = incognito_blob_map_.find(object_store_data_key);
+ if (blob_iter != incognito_blob_map_.end())
+ change_record = blob_iter->second;
+ }
+ if (change_record) {
+ // Either we haven't written the blob to disk yet or we're in incognito
+ // mode, so we have to send back the one they sent us. This change record
+ // includes the original UUID.
+ value->blob_info = change_record->blob_info();
+ return leveldb::Status::OK();
+ }
+
+ BlobEntryKey blob_entry_key;
+ StringPiece leveldb_key_piece(object_store_data_key);
+ if (!BlobEntryKey::FromObjectStoreDataKey(&leveldb_key_piece,
+ &blob_entry_key)) {
+ NOTREACHED();
+ return InternalInconsistencyStatus();
+ }
+ scoped_ptr<LevelDBIterator> it = transaction()->CreateIterator();
+ std::string encoded_key = blob_entry_key.Encode();
+ leveldb::Status s = it->Seek(encoded_key);
+ if (!s.ok())
+ return s;
+ if (it->IsValid() && CompareKeys(it->Key(), encoded_key) == 0) {
+ if (!DecodeBlobData(it->Value().as_string(), &value->blob_info)) {
+ INTERNAL_READ_ERROR(GET_BLOB_INFO_FOR_RECORD);
+ return InternalInconsistencyStatus();
+ }
+ std::vector<IndexedDBBlobInfo>::iterator iter;
+ for (iter = value->blob_info.begin(); iter != value->blob_info.end();
+ ++iter) {
+ iter->set_file_path(
+ backing_store_->GetBlobFileName(database_id, iter->key()));
+ iter->set_mark_used_callback(
+ backing_store_->active_blob_registry()->GetAddBlobRefCallback(
+ database_id, iter->key()));
+ iter->set_release_callback(
+ backing_store_->active_blob_registry()->GetFinalReleaseCallback(
+ database_id, iter->key()));
+ if (iter->is_file()) {
+ base::File::Info info;
+ if (base::GetFileInfo(iter->file_path(), &info)) {
+ // This should always work, but it isn't fatal if it doesn't; it just
+ // means a potential slow synchronous call from the renderer later.
+ iter->set_last_modified(info.last_modified);
+ iter->set_size(info.size);
+ }
+ }
+ }
+ }
+ return leveldb::Status::OK();
+}
+
void IndexedDBBackingStore::CleanPrimaryJournalIgnoreReturn() {
CleanUpBlobJournal(BlobJournalKey::Encode());
}
@@ -2609,11 +2899,13 @@ leveldb::Status IndexedDBBackingStore::KeyExistsInIndex(
IndexedDBBackingStore::Cursor::Cursor(
const IndexedDBBackingStore::Cursor* other)
- : transaction_(other->transaction_),
+ : backing_store_(other->backing_store_),
+ transaction_(other->transaction_),
+ database_id_(other->database_id_),
cursor_options_(other->cursor_options_),
current_key_(new IndexedDBKey(*other->current_key_)) {
if (other->iterator_) {
- iterator_ = transaction_->CreateIterator();
+ iterator_ = transaction_->transaction()->CreateIterator();
if (other->iterator_->IsValid()) {
leveldb::Status s = iterator_->Seek(other->iterator_->Key());
@@ -2623,13 +2915,20 @@ IndexedDBBackingStore::Cursor::Cursor(
}
}
-IndexedDBBackingStore::Cursor::Cursor(LevelDBTransaction* transaction,
- const CursorOptions& cursor_options)
- : transaction_(transaction), cursor_options_(cursor_options) {}
+IndexedDBBackingStore::Cursor::Cursor(
+ scoped_refptr<IndexedDBBackingStore> backing_store,
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
+ const CursorOptions& cursor_options)
+ : backing_store_(backing_store),
+ transaction_(transaction),
+ database_id_(database_id),
+ cursor_options_(cursor_options) {
+}
IndexedDBBackingStore::Cursor::~Cursor() {}
bool IndexedDBBackingStore::Cursor::FirstSeek(leveldb::Status* s) {
- iterator_ = transaction_->CreateIterator();
+ iterator_ = transaction_->transaction()->CreateIterator();
if (cursor_options_.forward)
*s = iterator_->Seek(cursor_options_.low_key);
else
@@ -2812,9 +3111,14 @@ IndexedDBBackingStore::Cursor::record_identifier() const {
class ObjectStoreKeyCursorImpl : public IndexedDBBackingStore::Cursor {
public:
ObjectStoreKeyCursorImpl(
- LevelDBTransaction* transaction,
+ scoped_refptr<IndexedDBBackingStore> backing_store,
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
const IndexedDBBackingStore::Cursor::CursorOptions& cursor_options)
- : IndexedDBBackingStore::Cursor(transaction, cursor_options) {}
+ : IndexedDBBackingStore::Cursor(backing_store,
+ transaction,
+ database_id,
+ cursor_options) {}
virtual Cursor* Clone() OVERRIDE {
return new ObjectStoreKeyCursorImpl(this);
@@ -2871,9 +3175,14 @@ bool ObjectStoreKeyCursorImpl::LoadCurrentRow() {
class ObjectStoreCursorImpl : public IndexedDBBackingStore::Cursor {
public:
ObjectStoreCursorImpl(
- LevelDBTransaction* transaction,
+ scoped_refptr<IndexedDBBackingStore> backing_store,
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
const IndexedDBBackingStore::Cursor::CursorOptions& cursor_options)
- : IndexedDBBackingStore::Cursor(transaction, cursor_options) {}
+ : IndexedDBBackingStore::Cursor(backing_store,
+ transaction,
+ database_id,
+ cursor_options) {}
virtual Cursor* Clone() OVERRIDE { return new ObjectStoreCursorImpl(this); }
@@ -2922,6 +3231,11 @@ bool ObjectStoreCursorImpl::LoadCurrentRow() {
EncodeIDBKey(*current_key_, &encoded_key);
record_identifier_.Reset(encoded_key, version);
+ if (!transaction_->GetBlobInfoForRecord(database_id_,
+ iterator_->Key().as_string(),
+ &current_value_).ok()) {
+ return false;
+ }
current_value_.bits = value_slice.as_string();
return true;
}
@@ -2929,9 +3243,14 @@ bool ObjectStoreCursorImpl::LoadCurrentRow() {
class IndexKeyCursorImpl : public IndexedDBBackingStore::Cursor {
public:
IndexKeyCursorImpl(
- LevelDBTransaction* transaction,
+ scoped_refptr<IndexedDBBackingStore> backing_store,
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
const IndexedDBBackingStore::Cursor::CursorOptions& cursor_options)
- : IndexedDBBackingStore::Cursor(transaction, cursor_options) {}
+ : IndexedDBBackingStore::Cursor(backing_store,
+ transaction,
+ database_id,
+ cursor_options) {}
virtual Cursor* Clone() OVERRIDE { return new IndexKeyCursorImpl(this); }
@@ -3004,13 +3323,14 @@ bool IndexKeyCursorImpl::LoadCurrentRow() {
std::string result;
bool found = false;
- leveldb::Status s = transaction_->Get(primary_leveldb_key, &result, &found);
+ leveldb::Status s =
+ transaction_->transaction()->Get(primary_leveldb_key, &result, &found);
if (!s.ok()) {
INTERNAL_READ_ERROR_UNTESTED(LOAD_CURRENT_ROW);
return false;
}
if (!found) {
- transaction_->Remove(iterator_->Key());
+ transaction_->transaction()->Remove(iterator_->Key());
return false;
}
if (!result.size()) {
@@ -3026,7 +3346,7 @@ bool IndexKeyCursorImpl::LoadCurrentRow() {
}
if (object_store_data_version != index_data_version) {
- transaction_->Remove(iterator_->Key());
+ transaction_->transaction()->Remove(iterator_->Key());
return false;
}
@@ -3036,9 +3356,14 @@ bool IndexKeyCursorImpl::LoadCurrentRow() {
class IndexCursorImpl : public IndexedDBBackingStore::Cursor {
public:
IndexCursorImpl(
- LevelDBTransaction* transaction,
+ scoped_refptr<IndexedDBBackingStore> backing_store,
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
const IndexedDBBackingStore::Cursor::CursorOptions& cursor_options)
- : IndexedDBBackingStore::Cursor(transaction, cursor_options) {}
+ : IndexedDBBackingStore::Cursor(backing_store,
+ transaction,
+ database_id,
+ cursor_options) {}
virtual Cursor* Clone() OVERRIDE { return new IndexCursorImpl(this); }
@@ -3104,6 +3429,7 @@ bool IndexCursorImpl::LoadCurrentRow() {
return false;
}
+ DCHECK_EQ(index_data_key.DatabaseId(), database_id_);
primary_leveldb_key_ =
ObjectStoreDataKey::Encode(index_data_key.DatabaseId(),
index_data_key.ObjectStoreId(),
@@ -3111,13 +3437,14 @@ bool IndexCursorImpl::LoadCurrentRow() {
std::string result;
bool found = false;
- leveldb::Status s = transaction_->Get(primary_leveldb_key_, &result, &found);
+ leveldb::Status s =
+ transaction_->transaction()->Get(primary_leveldb_key_, &result, &found);
if (!s.ok()) {
INTERNAL_READ_ERROR_UNTESTED(LOAD_CURRENT_ROW);
return false;
}
if (!found) {
- transaction_->Remove(iterator_->Key());
+ transaction_->transaction()->Remove(iterator_->Key());
return false;
}
if (!result.size()) {
@@ -3133,12 +3460,14 @@ bool IndexCursorImpl::LoadCurrentRow() {
}
if (object_store_data_version != index_data_version) {
- transaction_->Remove(iterator_->Key());
+ transaction_->transaction()->Remove(iterator_->Key());
return false;
}
current_value_.bits = slice.as_string();
- return true;
+ return transaction_->GetBlobInfoForRecord(database_id_,
+ primary_leveldb_key_,
+ &current_value_).ok();
}
bool ObjectStoreCursorOptions(
@@ -3305,8 +3634,8 @@ IndexedDBBackingStore::OpenObjectStoreCursor(
direction,
&cursor_options))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
- scoped_ptr<ObjectStoreCursorImpl> cursor(
- new ObjectStoreCursorImpl(leveldb_transaction, cursor_options));
+ scoped_ptr<ObjectStoreCursorImpl> cursor(new ObjectStoreCursorImpl(
+ this, transaction, database_id, cursor_options));
if (!cursor->FirstSeek(s))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
@@ -3332,8 +3661,8 @@ IndexedDBBackingStore::OpenObjectStoreKeyCursor(
direction,
&cursor_options))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
- scoped_ptr<ObjectStoreKeyCursorImpl> cursor(
- new ObjectStoreKeyCursorImpl(leveldb_transaction, cursor_options));
+ scoped_ptr<ObjectStoreKeyCursorImpl> cursor(new ObjectStoreKeyCursorImpl(
+ this, transaction, database_id, cursor_options));
if (!cursor->FirstSeek(s))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
@@ -3362,7 +3691,7 @@ IndexedDBBackingStore::OpenIndexKeyCursor(
&cursor_options))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
scoped_ptr<IndexKeyCursorImpl> cursor(
- new IndexKeyCursorImpl(leveldb_transaction, cursor_options));
+ new IndexKeyCursorImpl(this, transaction, database_id, cursor_options));
if (!cursor->FirstSeek(s))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
@@ -3390,7 +3719,7 @@ IndexedDBBackingStore::OpenIndexCursor(
&cursor_options))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
scoped_ptr<IndexCursorImpl> cursor(
- new IndexCursorImpl(leveldb_transaction, cursor_options));
+ new IndexCursorImpl(this, transaction, database_id, cursor_options));
if (!cursor->FirstSeek(s))
return scoped_ptr<IndexedDBBackingStore::Cursor>();
@@ -3399,17 +3728,28 @@ IndexedDBBackingStore::OpenIndexCursor(
IndexedDBBackingStore::Transaction::Transaction(
IndexedDBBackingStore* backing_store)
- : backing_store_(backing_store), database_id_(-1) {}
+ : backing_store_(backing_store), database_id_(-1) {
+}
IndexedDBBackingStore::Transaction::~Transaction() {
STLDeleteContainerPairSecondPointers(
blob_change_map_.begin(), blob_change_map_.end());
+ STLDeleteContainerPairSecondPointers(incognito_blob_map_.begin(),
+ incognito_blob_map_.end());
}
void IndexedDBBackingStore::Transaction::Begin() {
IDB_TRACE("IndexedDBBackingStore::Transaction::Begin");
DCHECK(!transaction_.get());
transaction_ = new LevelDBTransaction(backing_store_->db_.get());
+
+ // If incognito, this snapshots blobs just as the above transaction_
+ // constructor snapshots the leveldb.
+ BlobChangeMap::const_iterator iter;
+ for (iter = backing_store_->incognito_blob_map_.begin();
+ iter != backing_store_->incognito_blob_map_.end();
+ ++iter)
+ incognito_blob_map_[iter->first] = iter->second->Clone().release();
}
leveldb::Status IndexedDBBackingStore::Transaction::Commit() {
@@ -3417,6 +3757,23 @@ leveldb::Status IndexedDBBackingStore::Transaction::Commit() {
DCHECK(transaction_.get());
leveldb::Status s = transaction_->Commit();
transaction_ = NULL;
+
+ if (s.ok() && backing_store_->is_incognito() && !blob_change_map_.empty()) {
+ BlobChangeMap& target_map = backing_store_->incognito_blob_map_;
+ BlobChangeMap::iterator iter;
+ for (iter = blob_change_map_.begin(); iter != blob_change_map_.end();
+ ++iter) {
+ BlobChangeMap::iterator target_record = target_map.find(iter->first);
+ if (target_record != target_map.end()) {
+ delete target_record->second;
+ target_map.erase(target_record);
+ }
+ if (iter->second) {
+ target_map[iter->first] = iter->second;
+ iter->second = NULL;
+ }
+ }
+ }
if (!s.ok())
INTERNAL_WRITE_ERROR_UNTESTED(TRANSACTION_COMMIT_METHOD);
return s;
@@ -3479,28 +3836,41 @@ void IndexedDBBackingStore::Transaction::Rollback() {
transaction_ = NULL;
}
-IndexedDBBackingStore::Transaction::BlobChangeRecord::BlobChangeRecord(
- const std::string& key, int64 object_store_id)
+IndexedDBBackingStore::BlobChangeRecord::BlobChangeRecord(
+ const std::string& key,
+ int64 object_store_id)
: key_(key), object_store_id_(object_store_id) {
}
-IndexedDBBackingStore::Transaction::BlobChangeRecord::~BlobChangeRecord() {
+IndexedDBBackingStore::BlobChangeRecord::~BlobChangeRecord() {
}
-void IndexedDBBackingStore::Transaction::BlobChangeRecord::SetBlobInfo(
+void IndexedDBBackingStore::BlobChangeRecord::SetBlobInfo(
std::vector<IndexedDBBlobInfo>* blob_info) {
blob_info_.clear();
if (blob_info)
blob_info_.swap(*blob_info);
}
-void IndexedDBBackingStore::Transaction::BlobChangeRecord::SetHandles(
+void IndexedDBBackingStore::BlobChangeRecord::SetHandles(
ScopedVector<webkit_blob::BlobDataHandle>* handles) {
handles_.clear();
if (handles)
handles_.swap(*handles);
}
+scoped_ptr<IndexedDBBackingStore::BlobChangeRecord>
+IndexedDBBackingStore::BlobChangeRecord::Clone() const {
+ scoped_ptr<IndexedDBBackingStore::BlobChangeRecord> record(
+ new BlobChangeRecord(key_, object_store_id_));
+ record->blob_info_ = blob_info_;
+
+ ScopedVector<webkit_blob::BlobDataHandle>::const_iterator iter;
+ for (iter = handles_.begin(); iter != handles_.end(); ++iter)
+ record->handles_.push_back(new webkit_blob::BlobDataHandle(**iter));
+ return record.Pass();
+}
+
// This is storing an info, even if empty, even if the previous key had no blob
// info that we know of. It duplicates a bunch of information stored in the
// leveldb transaction, but only w.r.t. the user keys altered--we don't keep the
@@ -3508,19 +3878,19 @@ void IndexedDBBackingStore::Transaction::BlobChangeRecord::SetHandles(
void IndexedDBBackingStore::Transaction::PutBlobInfo(
int64 database_id,
int64 object_store_id,
- const std::string& key,
+ const std::string& object_store_data_key,
std::vector<IndexedDBBlobInfo>* blob_info,
ScopedVector<webkit_blob::BlobDataHandle>* handles) {
- DCHECK_GT(key.size(), 0UL);
+ DCHECK_GT(object_store_data_key.size(), 0UL);
if (database_id_ < 0)
database_id_ = database_id;
DCHECK_EQ(database_id_, database_id);
- BlobChangeMap::iterator it = blob_change_map_.find(key);
+ BlobChangeMap::iterator it = blob_change_map_.find(object_store_data_key);
BlobChangeRecord* record = NULL;
if (it == blob_change_map_.end()) {
- record = new BlobChangeRecord(key, object_store_id);
- blob_change_map_[key] = record;
+ record = new BlobChangeRecord(object_store_data_key, object_store_id);
+ blob_change_map_[object_store_data_key] = record;
} else {
record = it->second;
}
diff --git a/content/browser/indexed_db/indexed_db_backing_store.h b/content/browser/indexed_db/indexed_db_backing_store.h
index 386e296c3a..3b9f0f63a3 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_backing_store.h
@@ -107,7 +107,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
base::TaskRunner* task_runner);
static scoped_refptr<IndexedDBBackingStore> OpenInMemory(
const GURL& origin_url,
- LevelDBFactory* level_db_factory,
+ LevelDBFactory* leveldb_factory,
base::TaskRunner* task_runner);
void GrantChildProcessPermissions(int child_process_id);
@@ -308,7 +308,9 @@ class CONTENT_EXPORT IndexedDBBackingStore
virtual bool LoadCurrentRow() = 0;
protected:
- Cursor(LevelDBTransaction* transaction,
+ Cursor(scoped_refptr<IndexedDBBackingStore> backing_store,
+ Transaction* transaction,
+ int64 database_id,
const CursorOptions& cursor_options);
explicit Cursor(const IndexedDBBackingStore::Cursor* other);
@@ -319,7 +321,9 @@ class CONTENT_EXPORT IndexedDBBackingStore
bool IsPastBounds() const;
bool HaveEnteredRange() const;
- LevelDBTransaction* transaction_;
+ IndexedDBBackingStore* backing_store_;
+ Transaction* transaction_;
+ int64 database_id_;
const CursorOptions cursor_options_;
scoped_ptr<LevelDBIterator> iterator_;
scoped_ptr<IndexedDBKey> current_key_;
@@ -357,6 +361,29 @@ class CONTENT_EXPORT IndexedDBBackingStore
indexed_db::CursorDirection,
leveldb::Status*);
+ class BlobChangeRecord {
+ public:
+ BlobChangeRecord(const std::string& key, int64 object_store_id);
+ ~BlobChangeRecord();
+ const std::string& key() const { return key_; }
+ int64 object_store_id() const { return object_store_id_; }
+ void SetBlobInfo(std::vector<IndexedDBBlobInfo>* blob_info);
+ std::vector<IndexedDBBlobInfo>& mutable_blob_info() { return blob_info_; }
+ const std::vector<IndexedDBBlobInfo>& blob_info() const {
+ return blob_info_;
+ }
+ void SetHandles(ScopedVector<webkit_blob::BlobDataHandle>* handles);
+ scoped_ptr<BlobChangeRecord> Clone() const;
+
+ private:
+ std::string key_;
+ int64 object_store_id_;
+ std::vector<IndexedDBBlobInfo> blob_info_;
+ ScopedVector<webkit_blob::BlobDataHandle> handles_;
+ DISALLOW_COPY_AND_ASSIGN(BlobChangeRecord);
+ };
+ typedef std::map<std::string, BlobChangeRecord*> BlobChangeMap;
+
class Transaction {
public:
explicit Transaction(IndexedDBBackingStore* backing_store);
@@ -376,6 +403,11 @@ class CONTENT_EXPORT IndexedDBBackingStore
LevelDBTransaction* transaction() { return transaction_; }
+ leveldb::Status GetBlobInfoForRecord(
+ int64 database_id,
+ const std::string& object_store_data_key,
+ IndexedDBValue* value);
+
// This holds a BlobEntryKey and the encoded IndexedDBBlobInfo vector stored
// under that key.
typedef std::vector<std::pair<BlobEntryKey, std::string> >
@@ -424,24 +456,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
typedef std::vector<WriteDescriptor> WriteDescriptorVec;
private:
- class BlobChangeRecord {
- public:
- BlobChangeRecord(const std::string& key, int64 object_store_id);
- ~BlobChangeRecord();
- const std::string& key() const { return key_; }
- int64 object_store_id() const { return object_store_id_; }
- void SetBlobInfo(std::vector<IndexedDBBlobInfo>* blob_info);
- std::vector<IndexedDBBlobInfo>& mutable_blob_info() { return blob_info_; }
- void SetHandles(ScopedVector<webkit_blob::BlobDataHandle>* handles);
-
- private:
- std::string key_;
- int64 object_store_id_;
- std::vector<IndexedDBBlobInfo> blob_info_;
- ScopedVector<webkit_blob::BlobDataHandle> handles_;
- };
class BlobWriteCallbackWrapper;
- typedef std::map<std::string, BlobChangeRecord*> BlobChangeMap;
// The callback will be called eventually on success or failure.
void WriteNewBlobs(BlobEntryKeyValuePairVec& new_blob_entries,
@@ -451,6 +466,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
IndexedDBBackingStore* backing_store_;
scoped_refptr<LevelDBTransaction> transaction_;
BlobChangeMap blob_change_map_;
+ BlobChangeMap incognito_blob_map_;
int64 database_id_;
scoped_refptr<ChainedBlobWriter> chained_blob_writer_;
};
@@ -466,6 +482,10 @@ class CONTENT_EXPORT IndexedDBBackingStore
virtual ~IndexedDBBackingStore();
friend class base::RefCounted<IndexedDBBackingStore>;
+ bool is_incognito() const { return !indexed_db_factory_; }
+
+ bool SetUpMetadata();
+
virtual bool WriteBlobFile(
int64 database_id,
const Transaction::WriteDescriptor& descriptor,
@@ -518,6 +538,7 @@ class CONTENT_EXPORT IndexedDBBackingStore
net::URLRequestContext* request_context_;
base::TaskRunner* task_runner_;
std::set<int> child_process_ids_granted_;
+ BlobChangeMap incognito_blob_map_;
base::OneShotTimer<IndexedDBBackingStore> journal_cleaning_timer_;
scoped_ptr<LevelDBDatabase> db_;
diff --git a/content/browser/indexed_db/indexed_db_browsertest.cc b/content/browser/indexed_db/indexed_db_browsertest.cc
index e69296eb76..fb62e5292d 100644
--- a/content/browser/indexed_db/indexed_db_browsertest.cc
+++ b/content/browser/indexed_db/indexed_db_browsertest.cc
@@ -502,7 +502,9 @@ INSTANTIATE_TEST_CASE_P(IndexedDBBrowserCorruptionTestInstantiation,
"iterate",
"clearObjectStore"));
-IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest, DeleteCompactsBackingStore) {
+// Crashes flakily on various platforms. crbug.com/375856
+IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest,
+ DISABLED_DeleteCompactsBackingStore) {
const GURL test_url = GetTestUrl("indexeddb", "delete_compact.html");
SimpleTest(GURL(test_url.spec() + "#fill"));
int64 after_filling = RequestDiskUsage();
@@ -607,7 +609,8 @@ class IndexedDBBrowserTestSingleProcess : public IndexedDBBrowserTest {
};
// Crashing on Android due to kSingleProcess flag: http://crbug.com/342525
-#if defined(OS_ANDROID)
+// Leaks memory by design: http://crbug.com/378404
+#if defined(OS_ANDROID) || defined(LEAK_SANITIZER)
#define MAYBE_RenderThreadShutdownTest DISABLED_RenderThreadShutdownTest
#else
#define MAYBE_RenderThreadShutdownTest RenderThreadShutdownTest
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index 1d9ccbbc5f..a7d5da06d2 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -277,6 +277,9 @@ void IndexedDBDatabase::CreateObjectStore(int64 transaction_id,
return;
}
+ // Store creation is done synchronously, as it may be followed by
+ // index creation (also sync) since preemptive OpenCursor/SetIndexKeys
+ // may follow.
IndexedDBObjectStoreMetadata object_store_metadata(
name,
object_store_id,
@@ -284,21 +287,6 @@ void IndexedDBDatabase::CreateObjectStore(int64 transaction_id,
auto_increment,
IndexedDBDatabase::kMinimumIndexId);
- transaction->ScheduleTask(
- base::Bind(&IndexedDBDatabase::CreateObjectStoreOperation,
- this,
- object_store_metadata),
- base::Bind(&IndexedDBDatabase::CreateObjectStoreAbortOperation,
- this,
- object_store_id));
-
- AddObjectStore(object_store_metadata, object_store_id);
-}
-
-void IndexedDBDatabase::CreateObjectStoreOperation(
- const IndexedDBObjectStoreMetadata& object_store_metadata,
- IndexedDBTransaction* transaction) {
- IDB_TRACE("IndexedDBDatabase::CreateObjectStoreOperation");
leveldb::Status s =
backing_store_->CreateObjectStore(transaction->BackingStoreTransaction(),
transaction->database()->id(),
@@ -317,6 +305,12 @@ void IndexedDBDatabase::CreateObjectStoreOperation(
error);
return;
}
+
+ AddObjectStore(object_store_metadata, object_store_id);
+ transaction->ScheduleAbortTask(
+ base::Bind(&IndexedDBDatabase::CreateObjectStoreAbortOperation,
+ this,
+ object_store_id));
}
void IndexedDBDatabase::DeleteObjectStore(int64 transaction_id,
@@ -330,17 +324,10 @@ void IndexedDBDatabase::DeleteObjectStore(int64 transaction_id,
if (!ValidateObjectStoreId(object_store_id))
return;
- const IndexedDBObjectStoreMetadata& object_store_metadata =
- metadata_.object_stores[object_store_id];
-
transaction->ScheduleTask(
base::Bind(&IndexedDBDatabase::DeleteObjectStoreOperation,
this,
- object_store_metadata),
- base::Bind(&IndexedDBDatabase::DeleteObjectStoreAbortOperation,
- this,
- object_store_metadata));
- RemoveObjectStore(object_store_id);
+ object_store_id));
}
void IndexedDBDatabase::CreateIndex(int64 transaction_id,
@@ -358,27 +345,12 @@ void IndexedDBDatabase::CreateIndex(int64 transaction_id,
if (!ValidateObjectStoreIdAndNewIndexId(object_store_id, index_id))
return;
+
+ // Index creation is done synchronously since preemptive
+ // OpenCursor/SetIndexKeys may follow.
const IndexedDBIndexMetadata index_metadata(
name, index_id, key_path, unique, multi_entry);
- transaction->ScheduleTask(
- base::Bind(&IndexedDBDatabase::CreateIndexOperation,
- this,
- object_store_id,
- index_metadata),
- base::Bind(&IndexedDBDatabase::CreateIndexAbortOperation,
- this,
- object_store_id,
- index_id));
-
- AddIndex(object_store_id, index_metadata, index_id);
-}
-
-void IndexedDBDatabase::CreateIndexOperation(
- int64 object_store_id,
- const IndexedDBIndexMetadata& index_metadata,
- IndexedDBTransaction* transaction) {
- IDB_TRACE("IndexedDBDatabase::CreateIndexOperation");
if (!backing_store_->CreateIndex(transaction->BackingStoreTransaction(),
transaction->database()->id(),
object_store_id,
@@ -394,6 +366,13 @@ void IndexedDBDatabase::CreateIndexOperation(
blink::WebIDBDatabaseExceptionUnknownError, error_string));
return;
}
+
+ AddIndex(object_store_id, index_metadata, index_id);
+ transaction->ScheduleAbortTask(
+ base::Bind(&IndexedDBDatabase::CreateIndexAbortOperation,
+ this,
+ object_store_id,
+ index_id));
}
void IndexedDBDatabase::CreateIndexAbortOperation(
@@ -416,32 +395,28 @@ void IndexedDBDatabase::DeleteIndex(int64 transaction_id,
if (!ValidateObjectStoreIdAndIndexId(object_store_id, index_id))
return;
- const IndexedDBIndexMetadata& index_metadata =
- metadata_.object_stores[object_store_id].indexes[index_id];
transaction->ScheduleTask(
base::Bind(&IndexedDBDatabase::DeleteIndexOperation,
this,
object_store_id,
- index_metadata),
- base::Bind(&IndexedDBDatabase::DeleteIndexAbortOperation,
- this,
- object_store_id,
- index_metadata));
-
- RemoveIndex(object_store_id, index_id);
+ index_id));
}
void IndexedDBDatabase::DeleteIndexOperation(
int64 object_store_id,
- const IndexedDBIndexMetadata& index_metadata,
+ int64 index_id,
IndexedDBTransaction* transaction) {
IDB_TRACE("IndexedDBDatabase::DeleteIndexOperation");
+
+ const IndexedDBIndexMetadata index_metadata =
+ metadata_.object_stores[object_store_id].indexes[index_id];
+
leveldb::Status s =
backing_store_->DeleteIndex(transaction->BackingStoreTransaction(),
transaction->database()->id(),
object_store_id,
- index_metadata.id);
+ index_id);
if (!s.ok()) {
base::string16 error_string =
ASCIIToUTF16("Internal error deleting index '") +
@@ -452,7 +427,15 @@ void IndexedDBDatabase::DeleteIndexOperation(
if (s.IsCorruption())
factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
error);
+ return;
}
+
+ RemoveIndex(object_store_id, index_id);
+ transaction->ScheduleAbortTask(
+ base::Bind(&IndexedDBDatabase::DeleteIndexAbortOperation,
+ this,
+ object_store_id,
+ index_metadata));
}
void IndexedDBDatabase::DeleteIndexAbortOperation(
@@ -1299,13 +1282,16 @@ void IndexedDBDatabase::ClearOperation(
}
void IndexedDBDatabase::DeleteObjectStoreOperation(
- const IndexedDBObjectStoreMetadata& object_store_metadata,
+ int64 object_store_id,
IndexedDBTransaction* transaction) {
IDB_TRACE("IndexedDBDatabase::DeleteObjectStoreOperation");
+
+ const IndexedDBObjectStoreMetadata object_store_metadata =
+ metadata_.object_stores[object_store_id];
leveldb::Status s =
backing_store_->DeleteObjectStore(transaction->BackingStoreTransaction(),
transaction->database()->id(),
- object_store_metadata.id);
+ object_store_id);
if (!s.ok()) {
base::string16 error_string =
ASCIIToUTF16("Internal error deleting object store '") +
@@ -1316,7 +1302,14 @@ void IndexedDBDatabase::DeleteObjectStoreOperation(
if (s.IsCorruption())
factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
error);
+ return;
}
+
+ RemoveObjectStore(object_store_id);
+ transaction->ScheduleAbortTask(
+ base::Bind(&IndexedDBDatabase::DeleteObjectStoreAbortOperation,
+ this,
+ object_store_metadata));
}
void IndexedDBDatabase::VersionChangeOperation(
@@ -1327,11 +1320,9 @@ void IndexedDBDatabase::VersionChangeOperation(
IDB_TRACE("IndexedDBDatabase::VersionChangeOperation");
int64 old_version = metadata_.int_version;
DCHECK_GT(version, old_version);
- metadata_.int_version = version;
+
if (!backing_store_->UpdateIDBDatabaseIntVersion(
- transaction->BackingStoreTransaction(),
- id(),
- metadata_.int_version)) {
+ transaction->BackingStoreTransaction(), id(), version)) {
IndexedDBDatabaseError error(
blink::WebIDBDatabaseExceptionUnknownError,
ASCIIToUTF16(
@@ -1341,6 +1332,15 @@ void IndexedDBDatabase::VersionChangeOperation(
transaction->Abort(error);
return;
}
+
+ transaction->ScheduleAbortTask(
+ base::Bind(&IndexedDBDatabase::VersionChangeAbortOperation,
+ this,
+ metadata_.version,
+ metadata_.int_version));
+ metadata_.int_version = version;
+ metadata_.version = kNoStringVersion;
+
DCHECK(!pending_second_half_open_);
pending_second_half_open_.reset(
new PendingSuccessCall(callbacks, connection.get(), version));
@@ -1623,17 +1623,12 @@ void IndexedDBDatabase::RunVersionChangeTransactionFinal(
object_store_ids,
indexed_db::TRANSACTION_VERSION_CHANGE);
- transactions_[transaction_id]
- ->ScheduleTask(base::Bind(&IndexedDBDatabase::VersionChangeOperation,
- this,
- requested_version,
- callbacks,
- base::Passed(&connection)),
- base::Bind(&IndexedDBDatabase::VersionChangeAbortOperation,
- this,
- metadata_.version,
- metadata_.int_version));
-
+ transactions_[transaction_id]->ScheduleTask(
+ base::Bind(&IndexedDBDatabase::VersionChangeOperation,
+ this,
+ requested_version,
+ callbacks,
+ base::Passed(&connection)));
DCHECK(!pending_second_half_open_);
}
diff --git a/content/browser/indexed_db/indexed_db_database.h b/content/browser/indexed_db/indexed_db_database.h
index a6e30f366a..c0bd789317 100644
--- a/content/browser/indexed_db/indexed_db_database.h
+++ b/content/browser/indexed_db/indexed_db_database.h
@@ -175,13 +175,10 @@ class CONTENT_EXPORT IndexedDBDatabase
size_t PendingDeleteCount() const;
// Asynchronous tasks scheduled within transactions:
- void CreateObjectStoreOperation(
- const IndexedDBObjectStoreMetadata& object_store_metadata,
- IndexedDBTransaction* transaction);
void CreateObjectStoreAbortOperation(int64 object_store_id,
IndexedDBTransaction* transaction);
void DeleteObjectStoreOperation(
- const IndexedDBObjectStoreMetadata& object_store_metadata,
+ int64 object_store_id,
IndexedDBTransaction* transaction);
void DeleteObjectStoreAbortOperation(
const IndexedDBObjectStoreMetadata& object_store_metadata,
@@ -193,11 +190,8 @@ class CONTENT_EXPORT IndexedDBDatabase
void VersionChangeAbortOperation(const base::string16& previous_version,
int64 previous_int_version,
IndexedDBTransaction* transaction);
- void CreateIndexOperation(int64 object_store_id,
- const IndexedDBIndexMetadata& index_metadata,
- IndexedDBTransaction* transaction);
void DeleteIndexOperation(int64 object_store_id,
- const IndexedDBIndexMetadata& index_metadata,
+ int64 index_id,
IndexedDBTransaction* transaction);
void CreateIndexAbortOperation(int64 object_store_id,
int64 index_id,
diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc
index 7feed8201d..c5f3a13aac 100644
--- a/content/browser/indexed_db/indexed_db_database_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
@@ -6,6 +6,7 @@
#include "base/auto_reset.h"
#include "base/logging.h"
+#include "base/run_loop.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/indexed_db/indexed_db.h"
@@ -17,6 +18,7 @@
#include "content/browser/indexed_db/indexed_db_factory.h"
#include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
#include "content/browser/indexed_db/indexed_db_transaction.h"
+#include "content/browser/indexed_db/indexed_db_value.h"
#include "content/browser/indexed_db/mock_indexed_db_callbacks.h"
#include "content/browser/indexed_db/mock_indexed_db_database_callbacks.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -24,7 +26,7 @@
using base::ASCIIToUTF16;
namespace {
-const int FAKE_CHILD_PROCESS_ID = 0;
+const int kFakeChildProcessId = 0;
}
namespace content {
@@ -71,7 +73,7 @@ TEST(IndexedDBDatabaseTest, ConnectionLifecycle) {
IndexedDBPendingConnection connection1(
request1,
callbacks1,
- FAKE_CHILD_PROCESS_ID,
+ kFakeChildProcessId,
transaction_id1,
IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION);
db->OpenConnection(connection1);
@@ -85,7 +87,7 @@ TEST(IndexedDBDatabaseTest, ConnectionLifecycle) {
IndexedDBPendingConnection connection2(
request2,
callbacks2,
- FAKE_CHILD_PROCESS_ID,
+ kFakeChildProcessId,
transaction_id2,
IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION);
db->OpenConnection(connection2);
@@ -129,7 +131,7 @@ TEST(IndexedDBDatabaseTest, ForcedClose) {
IndexedDBPendingConnection connection(
request,
callbacks,
- FAKE_CHILD_PROCESS_ID,
+ kFakeChildProcessId,
upgrade_transaction_id,
IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION);
database->OpenConnection(connection);
@@ -193,7 +195,7 @@ TEST(IndexedDBDatabaseTest, PendingDelete) {
IndexedDBPendingConnection connection(
request1,
callbacks1,
- FAKE_CHILD_PROCESS_ID,
+ kFakeChildProcessId,
transaction_id1,
IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION);
db->OpenConnection(connection);
@@ -213,4 +215,191 @@ TEST(IndexedDBDatabaseTest, PendingDelete) {
EXPECT_TRUE(request2->success_called());
}
+void DummyOperation(IndexedDBTransaction* transaction) {
+}
+
+class IndexedDBDatabaseOperationTest : public testing::Test {
+ public:
+ IndexedDBDatabaseOperationTest() : commit_success_(true) {}
+
+ virtual void SetUp() {
+ backing_store_ = new IndexedDBFakeBackingStore();
+ leveldb::Status s;
+ db_ = IndexedDBDatabase::Create(ASCIIToUTF16("db"),
+ backing_store_,
+ NULL /*factory*/,
+ IndexedDBDatabase::Identifier(),
+ &s);
+ ASSERT_TRUE(s.ok());
+
+ request_ = new MockIndexedDBCallbacks();
+ callbacks_ = new MockIndexedDBDatabaseCallbacks();
+ const int64 transaction_id = 1;
+ db_->OpenConnection(IndexedDBPendingConnection(
+ request_,
+ callbacks_,
+ kFakeChildProcessId,
+ transaction_id,
+ IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION));
+ EXPECT_EQ(IndexedDBDatabaseMetadata::NO_INT_VERSION,
+ db_->metadata().int_version);
+
+ transaction_ = new IndexedDBTransaction(
+ transaction_id,
+ callbacks_,
+ std::set<int64>() /*scope*/,
+ indexed_db::TRANSACTION_VERSION_CHANGE,
+ db_,
+ new IndexedDBFakeBackingStore::FakeTransaction(commit_success_));
+ db_->TransactionCreated(transaction_);
+
+ // Add a dummy task which takes the place of the VersionChangeOperation
+ // which kicks off the upgrade. This ensures that the transaction has
+ // processed at least one task before the CreateObjectStore call.
+ transaction_->ScheduleTask(base::Bind(&DummyOperation));
+ }
+
+ void RunPostedTasks() { base::RunLoop().RunUntilIdle(); }
+
+ protected:
+ scoped_refptr<IndexedDBFakeBackingStore> backing_store_;
+ scoped_refptr<IndexedDBDatabase> db_;
+ scoped_refptr<MockIndexedDBCallbacks> request_;
+ scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks_;
+ scoped_refptr<IndexedDBTransaction> transaction_;
+
+ bool commit_success_;
+
+ private:
+ base::MessageLoop message_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(IndexedDBDatabaseOperationTest);
+};
+
+TEST_F(IndexedDBDatabaseOperationTest, CreateObjectStore) {
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+ const int64 store_id = 1001;
+ db_->CreateObjectStore(transaction_->id(),
+ store_id,
+ ASCIIToUTF16("store"),
+ IndexedDBKeyPath(),
+ false /*auto_increment*/);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+ RunPostedTasks();
+ transaction_->Commit();
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+}
+
+TEST_F(IndexedDBDatabaseOperationTest, CreateIndex) {
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+ const int64 store_id = 1001;
+ db_->CreateObjectStore(transaction_->id(),
+ store_id,
+ ASCIIToUTF16("store"),
+ IndexedDBKeyPath(),
+ false /*auto_increment*/);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+ const int64 index_id = 2002;
+ db_->CreateIndex(transaction_->id(),
+ store_id,
+ index_id,
+ ASCIIToUTF16("index"),
+ IndexedDBKeyPath(),
+ false /*unique*/,
+ false /*multi_entry*/);
+ EXPECT_EQ(
+ 1ULL,
+ db_->metadata().object_stores.find(store_id)->second.indexes.size());
+ RunPostedTasks();
+ transaction_->Commit();
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+ EXPECT_EQ(
+ 1ULL,
+ db_->metadata().object_stores.find(store_id)->second.indexes.size());
+}
+
+class IndexedDBDatabaseOperationAbortTest
+ : public IndexedDBDatabaseOperationTest {
+ public:
+ IndexedDBDatabaseOperationAbortTest() { commit_success_ = false; }
+};
+
+TEST_F(IndexedDBDatabaseOperationAbortTest, CreateObjectStore) {
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+ const int64 store_id = 1001;
+ db_->CreateObjectStore(transaction_->id(),
+ store_id,
+ ASCIIToUTF16("store"),
+ IndexedDBKeyPath(),
+ false /*auto_increment*/);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+ RunPostedTasks();
+ transaction_->Commit();
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+}
+
+TEST_F(IndexedDBDatabaseOperationAbortTest, CreateIndex) {
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+ const int64 store_id = 1001;
+ db_->CreateObjectStore(transaction_->id(),
+ store_id,
+ ASCIIToUTF16("store"),
+ IndexedDBKeyPath(),
+ false /*auto_increment*/);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+ const int64 index_id = 2002;
+ db_->CreateIndex(transaction_->id(),
+ store_id,
+ index_id,
+ ASCIIToUTF16("index"),
+ IndexedDBKeyPath(),
+ false /*unique*/,
+ false /*multi_entry*/);
+ EXPECT_EQ(
+ 1ULL,
+ db_->metadata().object_stores.find(store_id)->second.indexes.size());
+ RunPostedTasks();
+ transaction_->Commit();
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+}
+
+TEST_F(IndexedDBDatabaseOperationTest, CreatePutDelete) {
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+ const int64 store_id = 1001;
+
+ // Creation is synchronous.
+ db_->CreateObjectStore(transaction_->id(),
+ store_id,
+ ASCIIToUTF16("store"),
+ IndexedDBKeyPath(),
+ false /*auto_increment*/);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+
+
+ // Put is asynchronous
+ IndexedDBValue value("value1", std::vector<IndexedDBBlobInfo>());
+ ScopedVector<webkit_blob::BlobDataHandle> handles;
+ scoped_ptr<IndexedDBKey> key(new IndexedDBKey("key"));
+ std::vector<IndexedDBDatabase::IndexKeys> index_keys;
+ scoped_refptr<MockIndexedDBCallbacks> request(
+ new MockIndexedDBCallbacks(false));
+ db_->Put(transaction_->id(),
+ store_id,
+ &value,
+ &handles,
+ key.Pass(),
+ IndexedDBDatabase::ADD_ONLY,
+ request,
+ index_keys);
+
+ // Deletion is asynchronous.
+ db_->DeleteObjectStore(transaction_->id(),
+ store_id);
+ EXPECT_EQ(1ULL, db_->metadata().object_stores.size());
+
+ // This will execute the Put then Delete.
+ RunPostedTasks();
+ EXPECT_EQ(0ULL, db_->metadata().object_stores.size());
+}
+
} // namespace content
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index 4f49b0e190..5ec2b94378 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -124,21 +124,19 @@ base::TaskRunner* IndexedDBDispatcherHost::OverrideTaskRunnerForMessage(
return NULL;
}
-bool IndexedDBDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool IndexedDBDispatcherHost::OnMessageReceived(const IPC::Message& message) {
if (IPC_MESSAGE_CLASS(message) != IndexedDBMsgStart)
return false;
DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread() ||
message.type() == IndexedDBHostMsg_DatabasePut::ID);
- bool handled =
- database_dispatcher_host_->OnMessageReceived(message, message_was_ok) ||
- cursor_dispatcher_host_->OnMessageReceived(message, message_was_ok);
+ bool handled = database_dispatcher_host_->OnMessageReceived(message) ||
+ cursor_dispatcher_host_->OnMessageReceived(message);
if (!handled) {
handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(IndexedDBDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(IndexedDBDispatcherHost, message)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryGetDatabaseNames,
OnIDBFactoryGetDatabaseNames)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_FactoryOpen, OnIDBFactoryOpen)
@@ -462,16 +460,15 @@ void IndexedDBDispatcherHost::DatabaseDispatcherHost::CloseAll() {
}
bool IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMessageReceived(
- const IPC::Message& message,
- bool* msg_is_ok) {
+ const IPC::Message& message) {
DCHECK(
(message.type() == IndexedDBHostMsg_DatabasePut::ID) ||
parent_->indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(
- IndexedDBDispatcherHost::DatabaseDispatcherHost, message, *msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(
+ IndexedDBDispatcherHost::DatabaseDispatcherHost, message)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseCreateObjectStore,
OnCreateObjectStore)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseDeleteObjectStore,
@@ -882,11 +879,10 @@ IndexedDBDispatcherHost::CursorDispatcherHost::CursorDispatcherHost(
IndexedDBDispatcherHost::CursorDispatcherHost::~CursorDispatcherHost() {}
bool IndexedDBDispatcherHost::CursorDispatcherHost::OnMessageReceived(
- const IPC::Message& message,
- bool* msg_is_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(
- IndexedDBDispatcherHost::CursorDispatcherHost, message, *msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(
+ IndexedDBDispatcherHost::CursorDispatcherHost, message)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_CursorAdvance, OnAdvance)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_CursorContinue, OnContinue)
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_CursorPrefetch, OnPrefetch)
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.h b/content/browser/indexed_db/indexed_db_dispatcher_host.h
index 7ce6cffdbc..a69a584404 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.h
@@ -62,8 +62,7 @@ class IndexedDBDispatcherHost : public BrowserMessageFilter {
virtual void OnDestruct() const OVERRIDE;
virtual base::TaskRunner* OverrideTaskRunnerForMessage(
const IPC::Message& message) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void FinishTransaction(int64 host_transaction_id, bool committed);
@@ -176,7 +175,7 @@ class IndexedDBDispatcherHost : public BrowserMessageFilter {
~DatabaseDispatcherHost();
void CloseAll();
- bool OnMessageReceived(const IPC::Message& message, bool* msg_is_ok);
+ bool OnMessageReceived(const IPC::Message& message);
void OnCreateObjectStore(
const IndexedDBHostMsg_DatabaseCreateObjectStore_Params& params);
@@ -231,7 +230,7 @@ class IndexedDBDispatcherHost : public BrowserMessageFilter {
explicit CursorDispatcherHost(IndexedDBDispatcherHost* parent);
~CursorDispatcherHost();
- bool OnMessageReceived(const IPC::Message& message, bool* msg_is_ok);
+ bool OnMessageReceived(const IPC::Message& message);
void OnAdvance(int32 ipc_object_store_id,
int32 ipc_thread_id,
diff --git a/content/browser/indexed_db/indexed_db_fake_backing_store.cc b/content/browser/indexed_db/indexed_db_fake_backing_store.cc
index 35e3a50e4d..6773d1bba5 100644
--- a/content/browser/indexed_db/indexed_db_fake_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_fake_backing_store.cc
@@ -67,21 +67,32 @@ leveldb::Status IndexedDBFakeBackingStore::CreateObjectStore(
const base::string16& name,
const IndexedDBKeyPath&,
bool auto_increment) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
+}
+
+leveldb::Status IndexedDBFakeBackingStore::PutRecord(
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
+ int64 object_store_id,
+ const IndexedDBKey& key,
+ IndexedDBValue& value,
+ ScopedVector<webkit_blob::BlobDataHandle>* handles,
+ RecordIdentifier* record) {
+ return leveldb::Status::OK();
}
leveldb::Status IndexedDBFakeBackingStore::ClearObjectStore(
Transaction*,
int64 database_id,
int64 object_store_id) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
}
leveldb::Status IndexedDBFakeBackingStore::DeleteRecord(
Transaction*,
int64 database_id,
int64 object_store_id,
const RecordIdentifier&) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
}
leveldb::Status IndexedDBFakeBackingStore::GetKeyGeneratorCurrentNumber(
Transaction*,
@@ -117,14 +128,14 @@ leveldb::Status IndexedDBFakeBackingStore::CreateIndex(
const IndexedDBKeyPath&,
bool is_unique,
bool is_multi_entry) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
}
leveldb::Status IndexedDBFakeBackingStore::DeleteIndex(Transaction*,
int64 database_id,
int64 object_store_id,
int64 index_id) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
}
leveldb::Status IndexedDBFakeBackingStore::PutIndexDataForRecord(
Transaction*,
@@ -133,7 +144,7 @@ leveldb::Status IndexedDBFakeBackingStore::PutIndexDataForRecord(
int64 index_id,
const IndexedDBKey&,
const RecordIdentifier&) {
- return leveldb::Status::IOError("test error");
+ return leveldb::Status::OK();
}
void IndexedDBFakeBackingStore::ReportBlobUnused(int64 database_id,
diff --git a/content/browser/indexed_db/indexed_db_fake_backing_store.h b/content/browser/indexed_db/indexed_db_fake_backing_store.h
index 5c64370563..43d244a1af 100644
--- a/content/browser/indexed_db/indexed_db_fake_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_fake_backing_store.h
@@ -44,6 +44,15 @@ class IndexedDBFakeBackingStore : public IndexedDBBackingStore {
const IndexedDBKeyPath&,
bool auto_increment) OVERRIDE;
+ virtual leveldb::Status PutRecord(
+ IndexedDBBackingStore::Transaction* transaction,
+ int64 database_id,
+ int64 object_store_id,
+ const IndexedDBKey& key,
+ IndexedDBValue& value,
+ ScopedVector<webkit_blob::BlobDataHandle>* handles,
+ RecordIdentifier* record) OVERRIDE;
+
virtual leveldb::Status ClearObjectStore(Transaction*,
int64 database_id,
int64 object_store_id) OVERRIDE;
diff --git a/content/browser/indexed_db/indexed_db_leveldb_coding.cc b/content/browser/indexed_db/indexed_db_leveldb_coding.cc
index 2de9b6d585..d0064267c9 100644
--- a/content/browser/indexed_db/indexed_db_leveldb_coding.cc
+++ b/content/browser/indexed_db/indexed_db_leveldb_coding.cc
@@ -46,7 +46,8 @@
// <0, 0, 0, 2> => SerializedScriptValue version [DataVersionKey]
// <0, 0, 0, 3>
// => Blob journal
-// The format of the journal is: {database_id, blobKey}*.
+// The format of the journal is:
+// {database_id (var int), blobKey (var int)}*.
// If the blobKey is kAllBlobsKey, the whole database should be deleted.
// [BlobJournalKey]
// <0, 0, 0, 4> => Live blob journal; same format. [LiveBlobJournalKey]
diff --git a/content/browser/indexed_db/indexed_db_transaction.cc b/content/browser/indexed_db/indexed_db_transaction.cc
index bb7fc03c5b..457a780772 100644
--- a/content/browser/indexed_db/indexed_db_transaction.cc
+++ b/content/browser/indexed_db/indexed_db_transaction.cc
@@ -86,18 +86,6 @@ IndexedDBTransaction::~IndexedDBTransaction() {
DCHECK(abort_task_stack_.empty());
}
-void IndexedDBTransaction::ScheduleTask(Operation task, Operation abort_task) {
- if (state_ == FINISHED)
- return;
-
- timeout_timer_.Stop();
- used_ = true;
- task_queue_.push(task);
- ++diagnostics_.tasks_scheduled;
- abort_task_stack_.push(abort_task);
- RunTasksIfStarted();
-}
-
void IndexedDBTransaction::ScheduleTask(IndexedDBDatabase::TaskType type,
Operation task) {
if (state_ == FINISHED)
@@ -114,6 +102,12 @@ void IndexedDBTransaction::ScheduleTask(IndexedDBDatabase::TaskType type,
RunTasksIfStarted();
}
+void IndexedDBTransaction::ScheduleAbortTask(Operation abort_task) {
+ DCHECK_NE(FINISHED, state_);
+ DCHECK(used_);
+ abort_task_stack_.push(abort_task);
+}
+
void IndexedDBTransaction::RunTasksIfStarted() {
DCHECK(used_);
diff --git a/content/browser/indexed_db/indexed_db_transaction.h b/content/browser/indexed_db/indexed_db_transaction.h
index 6c696dbf8e..a898d85c73 100644
--- a/content/browser/indexed_db/indexed_db_transaction.h
+++ b/content/browser/indexed_db/indexed_db_transaction.h
@@ -49,8 +49,8 @@ class CONTENT_EXPORT IndexedDBTransaction
void ScheduleTask(Operation task) {
ScheduleTask(IndexedDBDatabase::NORMAL_TASK, task);
}
- void ScheduleTask(Operation task, Operation abort_task);
void ScheduleTask(IndexedDBDatabase::TaskType, Operation task);
+ void ScheduleAbortTask(Operation abort_task);
void RegisterOpenCursor(IndexedDBCursor* cursor);
void UnregisterOpenCursor(IndexedDBCursor* cursor);
void AddPreemptiveEvent() { pending_preemptive_events_++; }
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
index cf35852fa1..74f4029193 100644
--- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -14,6 +14,21 @@
namespace content {
+class AbortObserver {
+ public:
+ AbortObserver() : abort_task_called_(false) {}
+
+ void AbortTask(IndexedDBTransaction* transaction) {
+ abort_task_called_ = true;
+ }
+
+ bool abort_task_called() const { return abort_task_called_; }
+
+ private:
+ bool abort_task_called_;
+ DISALLOW_COPY_AND_ASSIGN(AbortObserver);
+};
+
class IndexedDBTransactionTest : public testing::Test {
public:
IndexedDBTransactionTest() {
@@ -37,6 +52,11 @@ class IndexedDBTransactionTest : public testing::Test {
void RunPostedTasks() { message_loop_.RunUntilIdle(); }
void DummyOperation(IndexedDBTransaction* transaction) {}
+ void AbortableOperation(AbortObserver* observer,
+ IndexedDBTransaction* transaction) {
+ transaction->ScheduleAbortTask(
+ base::Bind(&AbortObserver::AbortTask, base::Unretained(observer)));
+ }
protected:
scoped_refptr<IndexedDBFakeBackingStore> backing_store_;
@@ -132,21 +152,6 @@ TEST_F(IndexedDBTransactionTest, NoTimeoutReadOnly) {
EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
}
-class AbortObserver {
- public:
- AbortObserver() : abort_task_called_(false) {}
-
- void AbortTask(IndexedDBTransaction* transaction) {
- abort_task_called_ = true;
- }
-
- bool abort_task_called() const { return abort_task_called_; }
-
- private:
- bool abort_task_called_;
- DISALLOW_COPY_AND_ASSIGN(AbortObserver);
-};
-
TEST_P(IndexedDBTransactionTestMode, ScheduleNormalTask) {
const int64 id = 0;
const std::set<int64> scope;
@@ -285,9 +290,9 @@ TEST_P(IndexedDBTransactionTestMode, AbortTasks) {
AbortObserver observer;
transaction->ScheduleTask(
- base::Bind(&IndexedDBTransactionTest::DummyOperation,
- base::Unretained(this)),
- base::Bind(&AbortObserver::AbortTask, base::Unretained(&observer)));
+ base::Bind(&IndexedDBTransactionTest::AbortableOperation,
+ base::Unretained(this),
+ base::Unretained(&observer)));
// Pump the message loop so that the transaction completes all pending tasks,
// otherwise it will defer the commit.
diff --git a/content/browser/indexed_db/mock_indexed_db_callbacks.cc b/content/browser/indexed_db/mock_indexed_db_callbacks.cc
index 42346d6633..2ab3ca5b22 100644
--- a/content/browser/indexed_db/mock_indexed_db_callbacks.cc
+++ b/content/browser/indexed_db/mock_indexed_db_callbacks.cc
@@ -23,6 +23,8 @@ void MockIndexedDBCallbacks::OnSuccess(int64) {}
void MockIndexedDBCallbacks::OnSuccess(const std::vector<base::string16>&) {}
+void MockIndexedDBCallbacks::OnSuccess(const IndexedDBKey& key) {}
+
void MockIndexedDBCallbacks::OnSuccess(
scoped_ptr<IndexedDBConnection> connection,
const IndexedDBDatabaseMetadata& metadata) {
diff --git a/content/browser/indexed_db/mock_indexed_db_callbacks.h b/content/browser/indexed_db/mock_indexed_db_callbacks.h
index 495f9f4e4c..0b99c05ae8 100644
--- a/content/browser/indexed_db/mock_indexed_db_callbacks.h
+++ b/content/browser/indexed_db/mock_indexed_db_callbacks.h
@@ -18,6 +18,7 @@ class MockIndexedDBCallbacks : public IndexedDBCallbacks {
virtual void OnSuccess() OVERRIDE;
virtual void OnSuccess(int64) OVERRIDE;
virtual void OnSuccess(const std::vector<base::string16>&) OVERRIDE;
+ virtual void OnSuccess(const IndexedDBKey& key) OVERRIDE;
virtual void OnSuccess(scoped_ptr<IndexedDBConnection> connection,
const IndexedDBDatabaseMetadata& metadata) OVERRIDE;
IndexedDBConnection* connection() { return connection_.get(); }
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc
index 7e3bd2ef99..69e831bd29 100644
--- a/content/browser/loader/async_resource_handler.cc
+++ b/content/browser/loader/async_resource_handler.cc
@@ -23,7 +23,6 @@
#include "content/browser/resource_context_impl.h"
#include "content/common/resource_messages.h"
#include "content/common/view_messages.h"
-#include "content/public/browser/global_request_id.h"
#include "content/public/browser/resource_dispatcher_host_delegate.h"
#include "content/public/common/resource_response.h"
#include "net/base/io_buffer.h"
@@ -97,29 +96,22 @@ AsyncResourceHandler::~AsyncResourceHandler() {
rdh_->FinishedWithResourcesForRequest(request());
}
-bool AsyncResourceHandler::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool AsyncResourceHandler::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(AsyncResourceHandler, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(AsyncResourceHandler, message)
IPC_MESSAGE_HANDLER(ResourceHostMsg_FollowRedirect, OnFollowRedirect)
IPC_MESSAGE_HANDLER(ResourceHostMsg_DataReceived_ACK, OnDataReceivedACK)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
-void AsyncResourceHandler::OnFollowRedirect(
- int request_id,
- bool has_new_first_party_for_cookies,
- const GURL& new_first_party_for_cookies) {
+void AsyncResourceHandler::OnFollowRedirect(int request_id) {
if (!request()->status().is_success()) {
DVLOG(1) << "OnFollowRedirect for invalid request";
return;
}
- if (has_new_first_party_for_cookies)
- request()->set_first_party_for_cookies(new_first_party_for_cookies);
-
ResumeIfDeferred();
}
@@ -133,18 +125,16 @@ void AsyncResourceHandler::OnDataReceivedACK(int request_id) {
}
}
-bool AsyncResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
+bool AsyncResourceHandler::OnUploadProgress(uint64 position,
uint64 size) {
ResourceMessageFilter* filter = GetFilter();
if (!filter)
return false;
return filter->Send(
- new ResourceMsg_UploadProgress(request_id, position, size));
+ new ResourceMsg_UploadProgress(GetRequestID(), position, size));
}
-bool AsyncResourceHandler::OnRequestRedirected(int request_id,
- const GURL& new_url,
+bool AsyncResourceHandler::OnRequestRedirected(const GURL& new_url,
ResourceResponse* response,
bool* defer) {
const ResourceRequestInfoImpl* info = GetRequestInfo();
@@ -164,12 +154,16 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id,
reported_transfer_size_ = 0;
response->head.request_start = request()->creation_time();
response->head.response_start = TimeTicks::Now();
+ // TODO(davidben): Is it necessary to pass the new first party URL for
+ // cookies? The only case where it can change is top-level navigation requests
+ // and hopefully those will eventually all be owned by the browser. It's
+ // possible this is still needed while renderer-owned ones exist.
return info->filter()->Send(new ResourceMsg_ReceivedRedirect(
- request_id, new_url, response->head));
+ GetRequestID(), new_url, request()->first_party_for_cookies(),
+ response->head));
}
-bool AsyncResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* response,
+bool AsyncResourceHandler::OnResponseStarted(ResourceResponse* response,
bool* defer) {
// For changes to the main frame, inform the renderer of the new URL's
// per-host settings before the request actually commits. This way the
@@ -210,7 +204,7 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id,
response->head.request_start = request()->creation_time();
response->head.response_start = TimeTicks::Now();
- info->filter()->Send(new ResourceMsg_ReceivedResponse(request_id,
+ info->filter()->Send(new ResourceMsg_ReceivedResponse(GetRequestID(),
response->head));
sent_received_response_msg_ = true;
@@ -218,27 +212,22 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id,
std::vector<char> copy(request()->response_info().metadata->data(),
request()->response_info().metadata->data() +
request()->response_info().metadata->size());
- info->filter()->Send(new ResourceMsg_ReceivedCachedMetadata(request_id,
+ info->filter()->Send(new ResourceMsg_ReceivedCachedMetadata(GetRequestID(),
copy));
}
return true;
}
-bool AsyncResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool AsyncResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool AsyncResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool AsyncResourceHandler::OnBeforeNetworkStart(const GURL& url, bool* defer) {
return true;
}
-bool AsyncResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool AsyncResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
DCHECK_EQ(-1, min_size);
@@ -259,8 +248,7 @@ bool AsyncResourceHandler::OnWillRead(int request_id,
return true;
}
-bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool AsyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
DCHECK_GE(bytes_read, 0);
if (!bytes_read)
@@ -285,7 +273,7 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
if (!buffer_->ShareToProcess(filter->PeerHandle(), &handle, &size))
return false;
filter->Send(new ResourceMsg_SetDataBuffer(
- request_id, handle, size, filter->peer_pid()));
+ GetRequestID(), handle, size, filter->peer_pid()));
sent_first_data_msg_ = true;
}
@@ -296,7 +284,7 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
reported_transfer_size_ = current_transfer_size;
filter->Send(new ResourceMsg_DataReceived(
- request_id, data_offset, bytes_read, encoded_data_length));
+ GetRequestID(), data_offset, bytes_read, encoded_data_length));
++pending_data_count_;
UMA_HISTOGRAM_CUSTOM_COUNTS(
"Net.AsyncResourceHandler_PendingDataCount",
@@ -313,8 +301,7 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
return true;
}
-void AsyncResourceHandler::OnDataDownloaded(
- int request_id, int bytes_downloaded) {
+void AsyncResourceHandler::OnDataDownloaded(int bytes_downloaded) {
int64_t current_transfer_size = request()->GetTotalReceivedBytes();
int encoded_data_length = current_transfer_size - reported_transfer_size_;
reported_transfer_size_ = current_transfer_size;
@@ -322,12 +309,11 @@ void AsyncResourceHandler::OnDataDownloaded(
ResourceMessageFilter* filter = GetFilter();
if (filter) {
filter->Send(new ResourceMsg_DataDownloaded(
- request_id, bytes_downloaded, encoded_data_length));
+ GetRequestID(), bytes_downloaded, encoded_data_length));
}
}
void AsyncResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -377,7 +363,7 @@ void AsyncResourceHandler::OnResponseCompleted(
request_complete_data.encoded_data_length =
request()->GetTotalReceivedBytes();
info->filter()->Send(
- new ResourceMsg_RequestComplete(request_id, request_complete_data));
+ new ResourceMsg_RequestComplete(GetRequestID(), request_complete_data));
}
bool AsyncResourceHandler::EnsureResourceBufferIsInitialized() {
diff --git a/content/browser/loader/async_resource_handler.h b/content/browser/loader/async_resource_handler.h
index 7a51b77394..b0821191e0 100644
--- a/content/browser/loader/async_resource_handler.h
+++ b/content/browser/loader/async_resource_handler.h
@@ -32,45 +32,29 @@ class AsyncResourceHandler : public ResourceHandler,
ResourceDispatcherHostImpl* rdh);
virtual ~AsyncResourceHandler();
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// ResourceHandler implementation:
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(int request_id,
- const GURL& new_url,
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
+ virtual bool OnRequestRedirected(const GURL& new_url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
- virtual void OnDataDownloaded(int request_id,
- int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
private:
// IPC message handlers:
- void OnFollowRedirect(int request_id,
- bool has_new_first_party_for_cookies,
- const GURL& new_first_party_for_cookies);
+ void OnFollowRedirect(int request_id);
void OnDataReceivedACK(int request_id);
bool EnsureResourceBufferIsInitialized();
diff --git a/content/browser/loader/buffered_resource_handler.cc b/content/browser/loader/buffered_resource_handler.cc
index d5cabe35d4..e8ea6840ab 100644
--- a/content/browser/loader/buffered_resource_handler.cc
+++ b/content/browser/loader/buffered_resource_handler.cc
@@ -103,10 +103,8 @@ void BufferedResourceHandler::SetController(ResourceController* controller) {
next_handler_->SetController(this);
}
-bool BufferedResourceHandler::OnResponseStarted(
- int request_id,
- ResourceResponse* response,
- bool* defer) {
+bool BufferedResourceHandler::OnResponseStarted(ResourceResponse* response,
+ bool* defer) {
response_ = response;
// TODO(darin): It is very odd to special-case 304 responses at this level.
@@ -146,12 +144,11 @@ bool BufferedResourceHandler::OnResponseStarted(
// We'll let the original event handler provide a buffer, and reuse it for
// subsequent reads until we're done buffering.
-bool BufferedResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool BufferedResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
if (state_ == STATE_STREAMING)
- return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
+ return next_handler_->OnWillRead(buf, buf_size, min_size);
DCHECK_EQ(-1, min_size);
@@ -160,7 +157,7 @@ bool BufferedResourceHandler::OnWillRead(int request_id,
*buf = new DependentIOBuffer(read_buffer_.get(), bytes_read_);
*buf_size = read_buffer_size_ - bytes_read_;
} else {
- if (!next_handler_->OnWillRead(request_id, buf, buf_size, min_size))
+ if (!next_handler_->OnWillRead(buf, buf_size, min_size))
return false;
read_buffer_ = *buf;
@@ -170,10 +167,9 @@ bool BufferedResourceHandler::OnWillRead(int request_id,
return true;
}
-bool BufferedResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool BufferedResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
if (state_ == STATE_STREAMING)
- return next_handler_->OnReadCompleted(request_id, bytes_read, defer);
+ return next_handler_->OnReadCompleted(bytes_read, defer);
DCHECK_EQ(state_, STATE_BUFFERING);
bytes_read_ += bytes_read;
@@ -186,7 +182,6 @@ bool BufferedResourceHandler::OnReadCompleted(int request_id, int bytes_read,
}
void BufferedResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -194,7 +189,7 @@ void BufferedResourceHandler::OnResponseCompleted(
// handler defers OnResponseCompleted.
state_ = STATE_STREAMING;
- next_handler_->OnResponseCompleted(request_id, status, security_info, defer);
+ next_handler_->OnResponseCompleted(status, security_info, defer);
}
void BufferedResourceHandler::Resume() {
@@ -242,7 +237,7 @@ bool BufferedResourceHandler::ProcessResponse(bool* defer) {
state_ = STATE_REPLAYING;
- if (!next_handler_->OnResponseStarted(GetRequestID(), response_.get(), defer))
+ if (!next_handler_->OnResponseStarted(response_.get(), defer))
return false;
if (!read_buffer_.get()) {
@@ -369,21 +364,18 @@ bool BufferedResourceHandler::UseAlternateNextHandler(
return false;
}
- int request_id = GetRequestID();
-
// Inform the original ResourceHandler that this will be handled entirely by
// the new ResourceHandler.
// TODO(darin): We should probably check the return values of these.
bool defer_ignored = false;
- next_handler_->OnResponseStarted(request_id, response_.get(), &defer_ignored);
+ next_handler_->OnResponseStarted(response_.get(), &defer_ignored);
// Although deferring OnResponseStarted is legal, the only downstream handler
// which does so is CrossSiteResourceHandler. Cross-site transitions should
// not trigger when switching handlers.
DCHECK(!defer_ignored);
net::URLRequestStatus status(net::URLRequestStatus::CANCELED,
net::ERR_ABORTED);
- next_handler_->OnResponseCompleted(request_id, status, std::string(),
- &defer_ignored);
+ next_handler_->OnResponseCompleted(status, std::string(), &defer_ignored);
DCHECK(!defer_ignored);
// This is handled entirely within the new ResourceHandler, so just reset the
@@ -391,14 +383,13 @@ bool BufferedResourceHandler::UseAlternateNextHandler(
next_handler_ = new_handler.Pass();
next_handler_->SetController(this);
- return CopyReadBufferToNextHandler(request_id);
+ return CopyReadBufferToNextHandler();
}
bool BufferedResourceHandler::ReplayReadCompleted(bool* defer) {
DCHECK(read_buffer_.get());
- bool result = next_handler_->OnReadCompleted(GetRequestID(), bytes_read_,
- defer);
+ bool result = next_handler_->OnReadCompleted(bytes_read_, defer);
read_buffer_ = NULL;
read_buffer_size_ = 0;
@@ -458,13 +449,13 @@ bool BufferedResourceHandler::HasSupportingPlugin(bool* stale) {
#endif
}
-bool BufferedResourceHandler::CopyReadBufferToNextHandler(int request_id) {
- if (!bytes_read_)
+bool BufferedResourceHandler::CopyReadBufferToNextHandler() {
+ if (!read_buffer_.get())
return true;
scoped_refptr<net::IOBuffer> buf;
int buf_len = 0;
- if (!next_handler_->OnWillRead(request_id, &buf, &buf_len, bytes_read_))
+ if (!next_handler_->OnWillRead(&buf, &buf_len, bytes_read_))
return false;
CHECK((buf_len >= bytes_read_) && (bytes_read_ >= 0));
diff --git a/content/browser/loader/buffered_resource_handler.h b/content/browser/loader/buffered_resource_handler.h
index 23d15cccf6..a6ddff109d 100644
--- a/content/browser/loader/buffered_resource_handler.h
+++ b/content/browser/loader/buffered_resource_handler.h
@@ -33,17 +33,13 @@ class BufferedResourceHandler
private:
// ResourceHandler implementation:
virtual void SetController(ResourceController* controller) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id, int bytes_read,
- bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
@@ -67,7 +63,7 @@ class BufferedResourceHandler
bool HasSupportingPlugin(bool* is_stale);
// Copies data from |read_buffer_| to |next_handler_|.
- bool CopyReadBufferToNextHandler(int request_id);
+ bool CopyReadBufferToNextHandler();
// Called on the IO thread once the list of plugins has been loaded.
void OnPluginsLoaded(const std::vector<WebPluginInfo>& plugins);
diff --git a/content/browser/loader/certificate_resource_handler.cc b/content/browser/loader/certificate_resource_handler.cc
index 3c39599f5b..2fe7cf9e62 100644
--- a/content/browser/loader/certificate_resource_handler.cc
+++ b/content/browser/loader/certificate_resource_handler.cc
@@ -29,43 +29,36 @@ CertificateResourceHandler::CertificateResourceHandler(
CertificateResourceHandler::~CertificateResourceHandler() {
}
-bool CertificateResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
+bool CertificateResourceHandler::OnUploadProgress(uint64 position,
+ uint64 size) {
return true;
}
-bool CertificateResourceHandler::OnRequestRedirected(int request_id,
- const GURL& url,
- ResourceResponse* resp,
- bool* defer) {
+bool CertificateResourceHandler::OnRequestRedirected(const GURL& url,
+ ResourceResponse* resp,
+ bool* defer) {
url_ = url;
return true;
}
-bool CertificateResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* resp,
- bool* defer) {
+bool CertificateResourceHandler::OnResponseStarted(ResourceResponse* resp,
+ bool* defer) {
cert_type_ = net::GetCertificateMimeTypeForMimeType(resp->head.mime_type);
return cert_type_ != net::CERTIFICATE_MIME_TYPE_UNKNOWN;
}
-bool CertificateResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool CertificateResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool CertificateResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool CertificateResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
return true;
}
-bool CertificateResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
- int* buf_size,
- int min_size) {
+bool CertificateResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ int min_size) {
static const int kReadBufSize = 32768;
// TODO(gauravsh): Should we use 'min_size' here?
@@ -79,9 +72,7 @@ bool CertificateResourceHandler::OnWillRead(int request_id,
return true;
}
-bool CertificateResourceHandler::OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) {
+bool CertificateResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
if (!bytes_read)
return true;
@@ -100,7 +91,6 @@ bool CertificateResourceHandler::OnReadCompleted(int request_id,
}
void CertificateResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& urs,
const std::string& sec_info,
bool* defer) {
@@ -144,9 +134,7 @@ void CertificateResourceHandler::AssembleResource() {
DCHECK_EQ(content_length_, bytes_copied);
}
-void CertificateResourceHandler::OnDataDownloaded(
- int request_id,
- int bytes_downloaded) {
+void CertificateResourceHandler::OnDataDownloaded(int bytes_downloaded) {
NOTREACHED();
}
diff --git a/content/browser/loader/certificate_resource_handler.h b/content/browser/loader/certificate_resource_handler.h
index b6b6361649..9c67860eb7 100644
--- a/content/browser/loader/certificate_resource_handler.h
+++ b/content/browser/loader/certificate_resource_handler.h
@@ -34,50 +34,38 @@ class CertificateResourceHandler : public ResourceHandler {
explicit CertificateResourceHandler(net::URLRequest* request);
virtual ~CertificateResourceHandler();
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
// Not needed, as this event handler ought to be the final resource.
- virtual bool OnRequestRedirected(int request_id,
- const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* resp,
bool* defer) OVERRIDE;
// Check if this indeed an X509 cert.
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* resp,
+ virtual bool OnResponseStarted(ResourceResponse* resp,
bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
// Pass-through implementation.
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
// Create a new buffer to store received data.
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
// A read was completed, maybe allocate a new buffer for further data.
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE;
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
// Done downloading the certificate.
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& urs,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& urs,
const std::string& sec_info,
bool* defer) OVERRIDE;
// N/A to cert downloading.
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
private:
typedef std::vector<std::pair<scoped_refptr<net::IOBuffer>,
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc
index a7e8f122f7..8fa7238c35 100644
--- a/content/browser/loader/cross_site_resource_handler.cc
+++ b/content/browser/loader/cross_site_resource_handler.cc
@@ -117,18 +117,20 @@ CrossSiteResourceHandler::~CrossSiteResourceHandler() {
}
bool CrossSiteResourceHandler::OnRequestRedirected(
- int request_id,
const GURL& new_url,
ResourceResponse* response,
bool* defer) {
+ // Top-level requests change their cookie first-party URL on redirects, while
+ // subframes retain the parent's value.
+ if (GetRequestInfo()->GetResourceType() == ResourceType::MAIN_FRAME)
+ request()->set_first_party_for_cookies(new_url);
+
// We should not have started the transition before being redirected.
DCHECK(!in_cross_site_transition_);
- return next_handler_->OnRequestRedirected(
- request_id, new_url, response, defer);
+ return next_handler_->OnRequestRedirected(new_url, response, defer);
}
bool CrossSiteResourceHandler::OnResponseStarted(
- int request_id,
ResourceResponse* response,
bool* defer) {
// At this point, we know that the response is safe to send back to the
@@ -181,13 +183,13 @@ bool CrossSiteResourceHandler::OnResponseStarted(
if (!swap_needed || info->IsDownload() || info->is_stream() ||
(response->head.headers.get() &&
response->head.headers->response_code() == 204)) {
- return next_handler_->OnResponseStarted(request_id, response, defer);
+ return next_handler_->OnResponseStarted(response, defer);
}
// Now that we know a swap is needed and we have something to commit, we
// pause to let the UI thread run the unload handler of the previous page
// and set up a transfer if needed.
- StartCrossSiteTransition(request_id, response, should_transfer);
+ StartCrossSiteTransition(response, should_transfer);
// Defer loading until after the onunload event handler has run.
*defer = true;
@@ -197,22 +199,18 @@ bool CrossSiteResourceHandler::OnResponseStarted(
void CrossSiteResourceHandler::ResumeOrTransfer(bool is_transfer) {
if (is_transfer) {
- ResourceRequestInfoImpl* info = GetRequestInfo();
- StartCrossSiteTransition(info->GetRequestID(), response_, is_transfer);
+ StartCrossSiteTransition(response_, is_transfer);
} else {
ResumeResponse();
}
}
-bool CrossSiteResourceHandler::OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) {
+bool CrossSiteResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
CHECK(!in_cross_site_transition_);
- return next_handler_->OnReadCompleted(request_id, bytes_read, defer);
+ return next_handler_->OnReadCompleted(bytes_read, defer);
}
void CrossSiteResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -225,8 +223,7 @@ void CrossSiteResourceHandler::OnResponseCompleted(
status.status() != net::URLRequestStatus::FAILED ||
!CrossSiteRequestManager::GetInstance()->HasPendingCrossSiteRequest(
info->GetChildID(), info->GetRouteID())) {
- next_handler_->OnResponseCompleted(request_id, status,
- security_info, defer);
+ next_handler_->OnResponseCompleted(status, security_info, defer);
return;
}
@@ -234,7 +231,7 @@ void CrossSiteResourceHandler::OnResponseCompleted(
// so that the error message (e.g., 404) can be displayed to the user.
// Also continue with the logic below to remember that we completed
// during the cross-site transition.
- StartCrossSiteTransition(request_id, NULL, false);
+ StartCrossSiteTransition(NULL, false);
}
// We have to buffer the call until after the transition completes.
@@ -259,8 +256,7 @@ void CrossSiteResourceHandler::ResumeResponse() {
// Send OnResponseStarted to the new renderer.
DCHECK(response_);
bool defer = false;
- if (!next_handler_->OnResponseStarted(info->GetRequestID(), response_.get(),
- &defer)) {
+ if (!next_handler_->OnResponseStarted(response_.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
// Unpause the request to resume reading. Any further reads will be
@@ -276,8 +272,7 @@ void CrossSiteResourceHandler::ResumeResponse() {
// event handler.
if (completed_during_transition_) {
bool defer = false;
- next_handler_->OnResponseCompleted(info->GetRequestID(),
- completed_status_,
+ next_handler_->OnResponseCompleted(completed_status_,
completed_security_info_,
&defer);
if (!defer)
@@ -294,7 +289,6 @@ void CrossSiteResourceHandler::SetLeakRequestsForTesting(
// Prepare to render the cross-site response in a new RenderFrameHost, by
// telling the old RenderFrameHost to run its onunload handler.
void CrossSiteResourceHandler::StartCrossSiteTransition(
- int request_id,
ResourceResponse* response,
bool should_transfer) {
in_cross_site_transition_ = true;
@@ -305,7 +299,6 @@ void CrossSiteResourceHandler::StartCrossSiteTransition(
ResourceRequestInfoImpl* info = GetRequestInfo();
info->set_cross_site_handler(this);
- DCHECK_EQ(request_id, info->GetRequestID());
GlobalRequestID global_id(info->GetChildID(), info->GetRequestID());
// Tell the contents responsible for this request that a cross-site response
diff --git a/content/browser/loader/cross_site_resource_handler.h b/content/browser/loader/cross_site_resource_handler.h
index df6c7a39bb..257af02c01 100644
--- a/content/browser/loader/cross_site_resource_handler.h
+++ b/content/browser/loader/cross_site_resource_handler.h
@@ -29,18 +29,14 @@ class CrossSiteResourceHandler : public LayeredResourceHandler {
virtual ~CrossSiteResourceHandler();
// ResourceHandler implementation:
- virtual bool OnRequestRedirected(int request_id,
- const GURL& new_url,
+ virtual bool OnRequestRedirected(const GURL& new_url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
+ virtual bool OnReadCompleted(int bytes_read,
bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
@@ -56,8 +52,7 @@ class CrossSiteResourceHandler : public LayeredResourceHandler {
private:
// Prepare to render the cross-site response in a new RenderViewHost, by
// telling the old RenderViewHost to run its onunload handler.
- void StartCrossSiteTransition(int request_id,
- ResourceResponse* response,
+ void StartCrossSiteTransition(ResourceResponse* response,
bool should_transfer);
// Defer the navigation to the UI thread to check whether transfer is required
diff --git a/content/browser/loader/detachable_resource_handler.cc b/content/browser/loader/detachable_resource_handler.cc
index 42c7d1f191..b8ef55d4ff 100644
--- a/content/browser/loader/detachable_resource_handler.cc
+++ b/content/browser/loader/detachable_resource_handler.cc
@@ -44,8 +44,7 @@ void DetachableResourceHandler::Detach() {
net::URLRequestStatus status(net::URLRequestStatus::CANCELED,
net::ERR_ABORTED);
bool defer_ignored = false;
- next_handler_->OnResponseCompleted(GetRequestID(), status, std::string(),
- &defer_ignored);
+ next_handler_->OnResponseCompleted(status, std::string(), &defer_ignored);
DCHECK(!defer_ignored);
// If |next_handler_| were to defer its shutdown in OnResponseCompleted,
// this would destroy it anyway. Fortunately, AsyncResourceHandler never
@@ -83,17 +82,14 @@ void DetachableResourceHandler::SetController(ResourceController* controller) {
next_handler_->SetController(this);
}
-bool DetachableResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
+bool DetachableResourceHandler::OnUploadProgress(uint64 position, uint64 size) {
if (!next_handler_)
return true;
- return next_handler_->OnUploadProgress(request_id, position, size);
+ return next_handler_->OnUploadProgress(position, size);
}
-bool DetachableResourceHandler::OnRequestRedirected(int request_id,
- const GURL& url,
+bool DetachableResourceHandler::OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) {
DCHECK(!is_deferred_);
@@ -101,14 +97,12 @@ bool DetachableResourceHandler::OnRequestRedirected(int request_id,
if (!next_handler_)
return true;
- bool ret = next_handler_->OnRequestRedirected(request_id, url, response,
- &is_deferred_);
+ bool ret = next_handler_->OnRequestRedirected(url, response, &is_deferred_);
*defer = is_deferred_;
return ret;
}
-bool DetachableResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* response,
+bool DetachableResourceHandler::OnResponseStarted(ResourceResponse* response,
bool* defer) {
DCHECK(!is_deferred_);
@@ -116,25 +110,23 @@ bool DetachableResourceHandler::OnResponseStarted(int request_id,
return true;
bool ret =
- next_handler_->OnResponseStarted(request_id, response, &is_deferred_);
+ next_handler_->OnResponseStarted(response, &is_deferred_);
*defer = is_deferred_;
return ret;
}
-bool DetachableResourceHandler::OnWillStart(int request_id, const GURL& url,
- bool* defer) {
+bool DetachableResourceHandler::OnWillStart(const GURL& url, bool* defer) {
DCHECK(!is_deferred_);
if (!next_handler_)
return true;
- bool ret = next_handler_->OnWillStart(request_id, url, &is_deferred_);
+ bool ret = next_handler_->OnWillStart(url, &is_deferred_);
*defer = is_deferred_;
return ret;
}
-bool DetachableResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool DetachableResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
DCHECK(!is_deferred_);
@@ -142,13 +134,12 @@ bool DetachableResourceHandler::OnBeforeNetworkStart(int request_id,
return true;
bool ret =
- next_handler_->OnBeforeNetworkStart(request_id, url, &is_deferred_);
+ next_handler_->OnBeforeNetworkStart(url, &is_deferred_);
*defer = is_deferred_;
return ret;
}
-bool DetachableResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool DetachableResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
if (!next_handler_) {
@@ -160,24 +151,22 @@ bool DetachableResourceHandler::OnWillRead(int request_id,
return true;
}
- return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
+ return next_handler_->OnWillRead(buf, buf_size, min_size);
}
-bool DetachableResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool DetachableResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
DCHECK(!is_deferred_);
if (!next_handler_)
return true;
bool ret =
- next_handler_->OnReadCompleted(request_id, bytes_read, &is_deferred_);
+ next_handler_->OnReadCompleted(bytes_read, &is_deferred_);
*defer = is_deferred_;
return ret;
}
void DetachableResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -189,17 +178,15 @@ void DetachableResourceHandler::OnResponseCompleted(
is_finished_ = true;
- next_handler_->OnResponseCompleted(request_id, status, security_info,
- &is_deferred_);
+ next_handler_->OnResponseCompleted(status, security_info, &is_deferred_);
*defer = is_deferred_;
}
-void DetachableResourceHandler::OnDataDownloaded(int request_id,
- int bytes_downloaded) {
+void DetachableResourceHandler::OnDataDownloaded(int bytes_downloaded) {
if (!next_handler_)
return;
- next_handler_->OnDataDownloaded(request_id, bytes_downloaded);
+ next_handler_->OnDataDownloaded(bytes_downloaded);
}
void DetachableResourceHandler::Resume() {
diff --git a/content/browser/loader/detachable_resource_handler.h b/content/browser/loader/detachable_resource_handler.h
index 2482270b86..9a685701a9 100644
--- a/content/browser/loader/detachable_resource_handler.h
+++ b/content/browser/loader/detachable_resource_handler.h
@@ -48,30 +48,22 @@ class DetachableResourceHandler : public ResourceHandler,
// ResourceHandler implementation:
virtual void SetController(ResourceController* controller) OVERRIDE;
- virtual bool OnUploadProgress(int request_id, uint64 position,
- uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(int request_id, const GURL& url,
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id, const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id, int bytes_read,
- bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
// ResourceController implementation:
virtual void Resume() OVERRIDE;
diff --git a/content/browser/loader/layered_resource_handler.cc b/content/browser/loader/layered_resource_handler.cc
index eee529e1ea..1c65820f61 100644
--- a/content/browser/loader/layered_resource_handler.cc
+++ b/content/browser/loader/layered_resource_handler.cc
@@ -29,67 +29,60 @@ void LayeredResourceHandler::SetController(ResourceController* controller) {
next_handler_->SetController(controller);
}
-bool LayeredResourceHandler::OnUploadProgress(int request_id, uint64 position,
+bool LayeredResourceHandler::OnUploadProgress(uint64 position,
uint64 size) {
DCHECK(next_handler_.get());
- return next_handler_->OnUploadProgress(request_id, position, size);
+ return next_handler_->OnUploadProgress(position, size);
}
-bool LayeredResourceHandler::OnRequestRedirected(int request_id,
- const GURL& url,
+bool LayeredResourceHandler::OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnRequestRedirected(request_id, url, response, defer);
+ return next_handler_->OnRequestRedirected(url, response, defer);
}
-bool LayeredResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* response,
+bool LayeredResourceHandler::OnResponseStarted(ResourceResponse* response,
bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnResponseStarted(request_id, response, defer);
+ return next_handler_->OnResponseStarted(response, defer);
}
-bool LayeredResourceHandler::OnWillStart(int request_id, const GURL& url,
+bool LayeredResourceHandler::OnWillStart(const GURL& url,
bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnWillStart(request_id, url, defer);
+ return next_handler_->OnWillStart(url, defer);
}
-bool LayeredResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool LayeredResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnBeforeNetworkStart(request_id, url, defer);
+ return next_handler_->OnBeforeNetworkStart(url, defer);
}
-bool LayeredResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool LayeredResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
DCHECK(next_handler_.get());
- return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
+ return next_handler_->OnWillRead(buf, buf_size, min_size);
}
-bool LayeredResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool LayeredResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnReadCompleted(request_id, bytes_read, defer);
+ return next_handler_->OnReadCompleted(bytes_read, defer);
}
void LayeredResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
DCHECK(next_handler_.get());
- next_handler_->OnResponseCompleted(request_id, status, security_info, defer);
+ next_handler_->OnResponseCompleted(status, security_info, defer);
}
-void LayeredResourceHandler::OnDataDownloaded(int request_id,
- int bytes_downloaded) {
+void LayeredResourceHandler::OnDataDownloaded(int bytes_downloaded) {
DCHECK(next_handler_.get());
- next_handler_->OnDataDownloaded(request_id, bytes_downloaded);
+ next_handler_->OnDataDownloaded(bytes_downloaded);
}
} // namespace content
diff --git a/content/browser/loader/layered_resource_handler.h b/content/browser/loader/layered_resource_handler.h
index 63dbc81b53..dc6de2314d 100644
--- a/content/browser/loader/layered_resource_handler.h
+++ b/content/browser/loader/layered_resource_handler.h
@@ -25,30 +25,23 @@ class CONTENT_EXPORT LayeredResourceHandler : public ResourceHandler {
// ResourceHandler implementation:
virtual void SetController(ResourceController* controller) OVERRIDE;
- virtual bool OnUploadProgress(int request_id, uint64 position,
- uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(int request_id, const GURL& url,
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id, const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id, int bytes_read,
+ virtual bool OnReadCompleted(int bytes_read,
bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
scoped_ptr<ResourceHandler> next_handler_;
};
diff --git a/content/browser/loader/offline_policy.cc b/content/browser/loader/offline_policy.cc
deleted file mode 100644
index 9c9361f525..0000000000
--- a/content/browser/loader/offline_policy.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/loader/offline_policy.h"
-
-#include "base/command_line.h"
-#include "base/metrics/histogram.h"
-#include "content/public/common/content_switches.h"
-#include "net/base/load_flags.h"
-#include "net/http/http_response_info.h"
-#include "net/url_request/url_request.h"
-
-namespace content {
-
-OfflinePolicy::OfflinePolicy()
- : enabled_(CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableOfflineCacheAccess)),
- state_(INIT),
- resource_loads_initiated_(0),
- resource_loads_successfully_started_(0) {}
-
-OfflinePolicy::~OfflinePolicy() {
- RecordAndResetStats();
-}
-
-void OfflinePolicy::RecordAndResetStats() {
- if (enabled_ && OFFLINE == state_ && 0 != resource_loads_initiated_) {
- UMA_HISTOGRAM_PERCENTAGE(
- "OfflinePolicy.SuccessfulResourceLoadPercentage",
- (resource_loads_successfully_started_ * 100 /
- resource_loads_initiated_));
- }
- resource_loads_initiated_ = 0;
- resource_loads_successfully_started_ = 0;
-}
-
-int OfflinePolicy::GetAdditionalLoadFlags(int current_flags,
- bool reset_state) {
- // Don't do anything if offline mode is disabled.
- if (!enabled_)
- return 0;
-
- if (reset_state) {
- RecordAndResetStats();
- state_ = INIT;
- }
-
- ++resource_loads_initiated_;
-
- // If a consumer has requested something contradictory, it wins; we
- // don't modify the load flags.
- if (current_flags &
- (net::LOAD_BYPASS_CACHE | net::LOAD_PREFERRING_CACHE |
- net::LOAD_ONLY_FROM_CACHE | net::LOAD_FROM_CACHE_IF_OFFLINE |
- net::LOAD_DISABLE_CACHE)) {
- return 0;
- }
-
- switch(state_) {
- case INIT:
- return net::LOAD_FROM_CACHE_IF_OFFLINE;
- case ONLINE:
- return 0;
- case OFFLINE:
- return net::LOAD_ONLY_FROM_CACHE;
- }
- NOTREACHED();
- return 0;
-}
-
-void OfflinePolicy::UpdateStateForSuccessfullyStartedRequest(
- const net::HttpResponseInfo& response_info) {
- // Don't do anything if offline mode is disabled.
- if (!enabled_)
- return;
-
- // If we get here, we're going to be providing some amount of information
- // to the renderer.
- ++resource_loads_successfully_started_;
-
- if (state_ != INIT)
- // We've already made the decision for the rest of this set
- // of navigations.
- return;
-
- if (response_info.server_data_unavailable) {
- state_ = OFFLINE;
- } else if (response_info.network_accessed) {
- // If we got the response from the network or validated it as part
- // of this request, that means our connection to the host is working.
- state_ = ONLINE;
- }
-}
-
-} // namespace content
diff --git a/content/browser/loader/offline_policy.h b/content/browser/loader/offline_policy.h
deleted file mode 100644
index 975d4adb17..0000000000
--- a/content/browser/loader/offline_policy.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_LOADER_OFFLINE_POLICY
-#define CONTENT_BROWSER_LOADER_OFFLINE_POLICY
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "content/common/content_export.h"
-
-struct ResourceHostMsg_Request;
-
-namespace net {
-class HttpResponseInfo;
-class URLRequest;
-}
-
-namespace content {
-
-// This class controls under what conditions resources will be fetched
-// from cache even if stale rather than from the network. For example,
-// one policy would be that if requests for a particular route (e.g. "tab")
-// is unable to reach the server, other requests made with the same route
-// can be loaded from cache without first requiring a network timeout.
-//
-// There is a single OfflinePolicy object per user navigation unit
-// (generally a tab).
-class CONTENT_EXPORT OfflinePolicy {
- public:
- OfflinePolicy();
- ~OfflinePolicy();
-
- // Return any additional load flags to be ORed for a request from
- // this route with the given |resource_type|. |reset_state| indicates
- // that this request should reinitialized the internal state for this
- // policy object (e.g. in the case of a main frame load).
- int GetAdditionalLoadFlags(int current_flags, bool reset_state);
-
- // Incorporate online/offline information from a successfully started request.
- void UpdateStateForSuccessfullyStartedRequest(
- const net::HttpResponseInfo& response_info);
-
-private:
- enum State { INIT, ONLINE, OFFLINE };
-
- void RecordAndResetStats();
-
- bool enabled_;
- State state_;
- int resource_loads_initiated_;
- int resource_loads_successfully_started_;
-
- DISALLOW_COPY_AND_ASSIGN(OfflinePolicy);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_LOADER_OFFLINE_POLICY
diff --git a/content/browser/loader/offline_policy_unittest.cc b/content/browser/loader/offline_policy_unittest.cc
deleted file mode 100644
index 40243c8f04..0000000000
--- a/content/browser/loader/offline_policy_unittest.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/loader/offline_policy.h"
-
-#include "base/command_line.h"
-#include "content/public/common/content_switches.h"
-#include "net/base/load_flags.h"
-#include "net/http/http_response_info.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webkit/common/resource_type.h"
-
-namespace content {
-
-class OfflinePolicyTest : public testing::Test {
- protected:
- virtual void SetUp() {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableOfflineCacheAccess);
- policy_ = new OfflinePolicy;
- }
-
- virtual void TearDown() {
- delete policy_;
- policy_ = NULL;
- }
-
- OfflinePolicy* policy_;
-};
-
-// Confirm that the initial state of an offline object is to return
-// LOAD_FROM_CACHE_IF_OFFLINE until it gets changed.
-TEST_F(OfflinePolicyTest, InitialState) {
- // Two loads without any reset, no UpdateStateForSuccessfullyStartedRequest.
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, false));
-}
-
-// Completion without any network probing doesn't change result value.
-TEST_F(OfflinePolicyTest, CompletedUncertain) {
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- net::HttpResponseInfo response_info;
- policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, false));
-}
-
-// Completion with a failed network probe changes result value.
-TEST_F(OfflinePolicyTest, CompletedNoNetwork) {
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- net::HttpResponseInfo response_info;
- response_info.server_data_unavailable = true;
- policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
- EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE,
- policy_->GetAdditionalLoadFlags(0, false));
-}
-
-// Completion with a successful network probe changes result value.
-TEST_F(OfflinePolicyTest, CompletedNetwork) {
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- net::HttpResponseInfo response_info;
- response_info.network_accessed = true;
- policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
- EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false));
-}
-
-// A new navigation resets a state change.
-TEST_F(OfflinePolicyTest, NewNavigationReset) {
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- net::HttpResponseInfo response_info;
- response_info.network_accessed = true;
- policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
- EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(0, false));
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, true));
- EXPECT_EQ(net::LOAD_FROM_CACHE_IF_OFFLINE,
- policy_->GetAdditionalLoadFlags(0, false));
-}
-
-// Cache related flags inhibit the returning of any special flags.
-TEST_F(OfflinePolicyTest, ConsumerFlagOverride) {
- EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, true));
- net::HttpResponseInfo response_info;
- response_info.server_data_unavailable = true;
- policy_->UpdateStateForSuccessfullyStartedRequest(response_info);
- EXPECT_EQ(0, policy_->GetAdditionalLoadFlags(net::LOAD_BYPASS_CACHE, false));
-}
-
-}
diff --git a/content/browser/loader/redirect_to_file_resource_handler.cc b/content/browser/loader/redirect_to_file_resource_handler.cc
index 84cc9305fd..caf36cddf3 100644
--- a/content/browser/loader/redirect_to_file_resource_handler.cc
+++ b/content/browser/loader/redirect_to_file_resource_handler.cc
@@ -6,7 +6,6 @@
#include "base/bind.h"
#include "base/logging.h"
-#include "base/platform_file.h"
#include "base/threading/thread_restrictions.h"
#include "content/browser/loader/resource_request_info_impl.h"
#include "content/browser/loader/temporary_file_stream.h"
@@ -156,7 +155,6 @@ void RedirectToFileResourceHandler::
}
bool RedirectToFileResourceHandler::OnResponseStarted(
- int request_id,
ResourceResponse* response,
bool* defer) {
if (response->head.error_code == net::OK ||
@@ -164,12 +162,10 @@ bool RedirectToFileResourceHandler::OnResponseStarted(
DCHECK(writer_);
response->head.download_file_path = writer_->path();
}
- return next_handler_->OnResponseStarted(request_id, response, defer);
+ return next_handler_->OnResponseStarted(response, defer);
}
-bool RedirectToFileResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool RedirectToFileResourceHandler::OnWillStart(const GURL& url, bool* defer) {
DCHECK(!writer_);
// Defer starting the request until we have created the temporary file.
@@ -190,7 +186,6 @@ bool RedirectToFileResourceHandler::OnWillStart(int request_id,
}
bool RedirectToFileResourceHandler::OnWillRead(
- int request_id,
scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
@@ -209,8 +204,7 @@ bool RedirectToFileResourceHandler::OnWillRead(
return true;
}
-bool RedirectToFileResourceHandler::OnReadCompleted(int request_id,
- int bytes_read,
+bool RedirectToFileResourceHandler::OnReadCompleted(int bytes_read,
bool* defer) {
DCHECK(buf_write_pending_);
buf_write_pending_ = false;
@@ -234,7 +228,6 @@ bool RedirectToFileResourceHandler::OnReadCompleted(int request_id,
}
void RedirectToFileResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -246,7 +239,7 @@ void RedirectToFileResourceHandler::OnResponseCompleted(
*defer = true;
return;
}
- next_handler_->OnResponseCompleted(request_id, status, security_info, defer);
+ next_handler_->OnResponseCompleted(status, security_info, defer);
}
void RedirectToFileResourceHandler::DidCreateTemporaryFile(
@@ -264,7 +257,7 @@ void RedirectToFileResourceHandler::DidCreateTemporaryFile(
// Resume the request.
DCHECK(did_defer_);
bool defer = false;
- if (!next_handler_->OnWillStart(GetRequestID(), will_start_url_, &defer)) {
+ if (!next_handler_->OnWillStart(will_start_url_, &defer)) {
controller()->Cancel();
} else if (!defer) {
ResumeIfDeferred();
@@ -275,11 +268,9 @@ void RedirectToFileResourceHandler::DidCreateTemporaryFile(
}
void RedirectToFileResourceHandler::DidWriteToFile(int result) {
- int request_id = GetRequestID();
-
bool failed = false;
if (result > 0) {
- next_handler_->OnDataDownloaded(request_id, result);
+ next_handler_->OnDataDownloaded(result);
write_cursor_ += result;
failed = !WriteMore();
} else {
@@ -305,8 +296,7 @@ void RedirectToFileResourceHandler::DidWriteToFile(int result) {
// this should run even in the |failed| case above, otherwise a failed write
// leaves the handler stuck.
bool defer = false;
- next_handler_->OnResponseCompleted(request_id,
- completed_status_,
+ next_handler_->OnResponseCompleted(completed_status_,
completed_security_info_,
&defer);
if (!defer) {
@@ -358,7 +348,7 @@ bool RedirectToFileResourceHandler::WriteMore() {
return true;
if (rv <= 0)
return false;
- next_handler_->OnDataDownloaded(GetRequestID(), rv);
+ next_handler_->OnDataDownloaded(rv);
write_cursor_ += rv;
}
}
diff --git a/content/browser/loader/redirect_to_file_resource_handler.h b/content/browser/loader/redirect_to_file_resource_handler.h
index 6ad2c6602c..07763f5c16 100644
--- a/content/browser/loader/redirect_to_file_resource_handler.h
+++ b/content/browser/loader/redirect_to_file_resource_handler.h
@@ -13,7 +13,6 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/platform_file.h"
#include "content/browser/loader/layered_resource_handler.h"
#include "content/browser/loader/temporary_file_stream.h"
#include "content/common/content_export.h"
@@ -57,21 +56,14 @@ class CONTENT_EXPORT RedirectToFileResourceHandler
const CreateTemporaryFileStreamFunction& create_temporary_file_stream);
// LayeredResourceHandler implementation:
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index c5e067d8cd..86d5e5fb1f 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -70,7 +70,6 @@
#include "content/public/browser/user_metrics.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/process_type.h"
-#include "content/public/common/url_constants.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_message_start.h"
#include "net/base/auth.h"
@@ -88,6 +87,7 @@
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job_factory.h"
+#include "url/url_constants.h"
#include "webkit/common/blob/blob_data.h"
#include "webkit/browser/blob/blob_data_handle.h"
#include "webkit/browser/blob/blob_storage_context.h"
@@ -310,6 +310,13 @@ bool IsValidatedSCT(
return sct_status.status == net::ct::SCT_STATUS_OK;
}
+webkit_blob::BlobStorageContext* GetBlobStorageContext(
+ ResourceMessageFilter* filter) {
+ if (!filter->blob_storage_context())
+ return NULL;
+ return filter->blob_storage_context()->context();
+}
+
} // namespace
// static
@@ -510,12 +517,6 @@ DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload(
}
request->SetLoadFlags(request->load_flags() | extra_load_flags);
- // No need to get offline load flags for downloads, but make sure
- // we have an OfflinePolicy to receive request completions.
- GlobalRoutingID id(child_id, route_id);
- if (!offline_policy_map_[id])
- offline_policy_map_[id] = new OfflinePolicy();
-
// Check if the renderer is permitted to request the requested URL.
if (!ChildProcessSecurityPolicyImpl::GetInstance()->
CanRequestURL(child_id, url)) {
@@ -539,7 +540,7 @@ DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload(
CreateRequestInfo(child_id, route_id, true, context);
extra_info->AssociateWithRequest(request.get()); // Request takes ownership.
- if (request->url().SchemeIs(kBlobScheme)) {
+ if (request->url().SchemeIs(url::kBlobScheme)) {
ChromeBlobStorageContext* blob_context =
GetChromeBlobStorageContextForResourceContext(context);
webkit_blob::BlobProtocolHandler::SetRequestedBlobDataHandle(
@@ -729,21 +730,6 @@ void ResourceDispatcherHostImpl::DidReceiveResponse(ResourceLoader* loader) {
info->GetChildID(), info->GetRouteID());
}
- // There should be an entry in the map created when we dispatched the
- // request unless it's been detached and the renderer has died.
- OfflineMap::iterator policy_it(
- offline_policy_map_.find(info->GetGlobalRoutingID()));
- if (offline_policy_map_.end() != policy_it) {
- policy_it->second->UpdateStateForSuccessfullyStartedRequest(
- loader->request()->response_info());
- } else {
- // Unless detached, we should have an entry in offline_policy_map_ from
- // when this request traversed Begin{Download,SaveFile,Request}.
- // TODO(rdsmith): This isn't currently true; see http://crbug.com/241176.
- DCHECK(info->detachable_handler() &&
- info->detachable_handler()->is_detached());
- }
-
int render_process_id, render_frame_host;
if (!info->GetAssociatedRenderFrame(&render_process_id, &render_frame_host))
return;
@@ -840,11 +826,10 @@ void ResourceDispatcherHostImpl::OnShutdown() {
bool ResourceDispatcherHostImpl::OnMessageReceived(
const IPC::Message& message,
- ResourceMessageFilter* filter,
- bool* message_was_ok) {
+ ResourceMessageFilter* filter) {
filter_ = filter;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ResourceDispatcherHostImpl, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ResourceDispatcherHostImpl, message)
IPC_MESSAGE_HANDLER(ResourceHostMsg_RequestResource, OnRequestResource)
IPC_MESSAGE_HANDLER_DELAY_REPLY(ResourceHostMsg_SyncLoad, OnSyncLoad)
IPC_MESSAGE_HANDLER(ResourceHostMsg_ReleaseDownloadedFile,
@@ -853,7 +838,7 @@ bool ResourceDispatcherHostImpl::OnMessageReceived(
IPC_MESSAGE_HANDLER(ResourceHostMsg_UploadProgress_ACK, OnUploadProgressACK)
IPC_MESSAGE_HANDLER(ResourceHostMsg_CancelRequest, OnCancelRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
if (!handled && IPC_MESSAGE_ID_CLASS(message.type()) == ResourceMsgStart) {
PickleIterator iter(message);
@@ -866,7 +851,7 @@ bool ResourceDispatcherHostImpl::OnMessageReceived(
ObserverList<ResourceMessageDelegate>::Iterator del_it(*it->second);
ResourceMessageDelegate* delegate;
while (!handled && (delegate = del_it.GetNext()) != NULL) {
- handled = delegate->OnMessageReceived(message, message_was_ok);
+ handled = delegate->OnMessageReceived(message);
}
}
@@ -880,10 +865,10 @@ bool ResourceDispatcherHostImpl::OnMessageReceived(
}
void ResourceDispatcherHostImpl::OnRequestResource(
- const IPC::Message& message,
+ int routing_id,
int request_id,
const ResourceHostMsg_Request& request_data) {
- BeginRequest(request_id, request_data, NULL, message.routing_id());
+ BeginRequest(request_id, request_data, NULL, routing_id);
}
// Begins a resource request with the given params on behalf of the specified
@@ -936,13 +921,6 @@ void ResourceDispatcherHostImpl::UpdateRequestForTransfer(
UpdateOutstandingRequestsStats(*info, old_stats);
IncrementOutstandingRequestsMemory(1, *info);
if (old_routing_id != new_routing_id) {
- if (offline_policy_map_.find(old_routing_id) != offline_policy_map_.end()) {
- if (offline_policy_map_.find(new_routing_id) !=
- offline_policy_map_.end())
- delete offline_policy_map_[new_routing_id];
- offline_policy_map_[new_routing_id] = offline_policy_map_[old_routing_id];
- offline_policy_map_.erase(old_routing_id);
- }
if (blocked_loaders_map_.find(old_routing_id) !=
blocked_loaders_map_.end()) {
blocked_loaders_map_[new_routing_id] =
@@ -1047,12 +1025,6 @@ void ResourceDispatcherHostImpl::BeginRequest(
int load_flags =
BuildLoadFlagsForRequest(request_data, child_id, is_sync_load);
- GlobalRoutingID id(child_id, route_id);
- if (!offline_policy_map_[id])
- offline_policy_map_[id] = new OfflinePolicy();
- load_flags |= offline_policy_map_[id]->GetAdditionalLoadFlags(
- load_flags, request_data.resource_type == ResourceType::MAIN_FRAME);
-
// Sync loads should have maximum priority and should be the only
// requets that have the ignore limits flag set.
if (is_sync_load) {
@@ -1085,12 +1057,9 @@ void ResourceDispatcherHostImpl::BeginRequest(
// Resolve elements from request_body and prepare upload data.
if (request_data.request_body.get()) {
- webkit_blob::BlobStorageContext* blob_context = NULL;
- if (filter_->blob_storage_context())
- blob_context = filter_->blob_storage_context()->context();
new_request->set_upload(UploadDataStreamBuilder::Build(
request_data.request_body.get(),
- blob_context,
+ GetBlobStorageContext(filter_),
filter_->file_system_context(),
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)
.get()));
@@ -1126,7 +1095,7 @@ void ResourceDispatcherHostImpl::BeginRequest(
// Request takes ownership.
extra_info->AssociateWithRequest(new_request.get());
- if (new_request->url().SchemeIs(kBlobScheme)) {
+ if (new_request->url().SchemeIs(url::kBlobScheme)) {
// Hang on to a reference to ensure the blob is not released prior
// to the job being started.
webkit_blob::BlobProtocolHandler::SetRequestedBlobDataHandle(
@@ -1139,6 +1108,7 @@ void ResourceDispatcherHostImpl::BeginRequest(
ServiceWorkerRequestHandler::InitializeHandler(
new_request.get(),
filter_->service_worker_context(),
+ GetBlobStorageContext(filter_),
child_id,
request_data.service_worker_provider_id,
request_data.resource_type);
@@ -1373,11 +1343,6 @@ void ResourceDispatcherHostImpl::BeginSaveFile(
base::debug::Alias(url_buf);
CHECK(ContainsKey(active_resource_contexts_, context));
- scoped_ptr<ResourceHandler> handler(
- new SaveFileResourceHandler(child_id,
- route_id,
- url,
- save_file_manager_.get()));
request_id_--;
const net::URLRequestContext* request_context = context->GetRequestContext();
@@ -1405,17 +1370,18 @@ void ResourceDispatcherHostImpl::BeginSaveFile(
// future, maybe we can use a configuration to configure this behavior.
request->SetLoadFlags(net::LOAD_PREFERRING_CACHE);
- // No need to get offline load flags for save files, but make sure
- // we have an OfflinePolicy to receive request completions.
- GlobalRoutingID id(child_id, route_id);
- if (!offline_policy_map_[id])
- offline_policy_map_[id] = new OfflinePolicy();
-
// Since we're just saving some resources we need, disallow downloading.
ResourceRequestInfoImpl* extra_info =
CreateRequestInfo(child_id, route_id, false, context);
extra_info->AssociateWithRequest(request.get()); // Request takes ownership.
+ scoped_ptr<ResourceHandler> handler(
+ new SaveFileResourceHandler(request.get(),
+ child_id,
+ route_id,
+ url,
+ save_file_manager_.get()));
+
BeginRequestInternal(request.Pass(), handler.Pass());
}
@@ -1527,27 +1493,6 @@ void ResourceDispatcherHostImpl::CancelRequestsForRoute(int child_id,
CancelBlockedRequestsForRoute(child_id, *iter);
}
}
-
- // Cleanup the offline state for the route.
- if (-1 != route_id) {
- OfflineMap::iterator it = offline_policy_map_.find(
- GlobalRoutingID(child_id, route_id));
- if (offline_policy_map_.end() != it) {
- delete it->second;
- offline_policy_map_.erase(it);
- }
- } else {
- for (OfflineMap::iterator it = offline_policy_map_.begin();
- offline_policy_map_.end() != it;) {
- // Increment iterator so deletion doesn't invalidate it.
- OfflineMap::iterator current_it = it++;
-
- if (child_id == current_it->first.child_id) {
- delete current_it->second;
- offline_policy_map_.erase(current_it);
- }
- }
- }
}
// Cancels the request and removes it from the list.
@@ -1705,8 +1650,7 @@ void ResourceDispatcherHostImpl::BeginRequestInternal(
request->CancelWithError(net::ERR_INSUFFICIENT_RESOURCES);
bool defer = false;
- handler->OnResponseCompleted(info->GetRequestID(), request->status(),
- std::string(), &defer);
+ handler->OnResponseCompleted(request->status(), std::string(), &defer);
if (defer) {
// TODO(darin): The handler is not ready for us to kill the request. Oops!
NOTREACHED();
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h
index abf2ada96d..185fb0b075 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -26,7 +26,6 @@
#include "base/timer/timer.h"
#include "content/browser/download/download_resource_handler.h"
#include "content/browser/loader/global_routing_id.h"
-#include "content/browser/loader/offline_policy.h"
#include "content/browser/loader/resource_loader.h"
#include "content/browser/loader/resource_loader_delegate.h"
#include "content/browser/loader/resource_scheduler.h"
@@ -110,10 +109,8 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
void CancelRequestsForContext(ResourceContext* context);
// Returns true if the message was a resource message that was processed.
- // If it was, message_was_ok will be false iff the message was corrupt.
bool OnMessageReceived(const IPC::Message& message,
- ResourceMessageFilter* filter,
- bool* message_was_ok);
+ ResourceMessageFilter* filter);
// Initiates a save file from the browser process (as opposed to a resource
// request from the renderer or another child process).
@@ -341,7 +338,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
int route_id,
bool cancel_requests);
- void OnRequestResource(const IPC::Message& msg,
+ void OnRequestResource(int routing_id,
int request_id,
const ResourceHostMsg_Request& request_data);
void OnSyncLoad(int request_id,
@@ -506,10 +503,6 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
scoped_ptr<ResourceScheduler> scheduler_;
- typedef std::map<GlobalRoutingID, OfflinePolicy*> OfflineMap;
-
- OfflineMap offline_policy_map_;
-
DISALLOW_COPY_AND_ASSIGN(ResourceDispatcherHostImpl);
};
diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc
index 08e5f4d17e..df02f58866 100644
--- a/content/browser/loader/resource_dispatcher_host_unittest.cc
+++ b/content/browser/loader/resource_dispatcher_host_unittest.cc
@@ -78,9 +78,8 @@ void GetResponseHead(const std::vector<IPC::Message>& messages,
void GenerateIPCMessage(
scoped_refptr<ResourceMessageFilter> filter,
scoped_ptr<IPC::Message> message) {
- bool msg_is_ok;
ResourceDispatcherHostImpl::Get()->OnMessageReceived(
- *message, filter.get(), &msg_is_ok);
+ *message, filter.get());
}
// On Windows, ResourceMsg_SetDataBuffer supplies a HANDLE which is not
@@ -461,6 +460,64 @@ class URLRequestBigJob : public net::URLRequestSimpleJob {
}
};
+class TestURLRequestJobFactory : public net::URLRequestJobFactory {
+ public:
+ explicit TestURLRequestJobFactory(ResourceDispatcherHostTest* test_fixture) :
+ test_fixture_(test_fixture),
+ delay_start_(false),
+ delay_complete_(false),
+ network_start_notification_(false),
+ url_request_jobs_created_count_(0) {
+ }
+
+ void HandleScheme(const std::string& scheme) {
+ supported_schemes_.insert(scheme);
+ }
+
+ int url_request_jobs_created_count() const {
+ return url_request_jobs_created_count_;
+ }
+
+ void SetDelayedStartJobGeneration(bool delay_job_start) {
+ delay_start_ = delay_job_start;
+ }
+
+ void SetDelayedCompleteJobGeneration(bool delay_job_complete) {
+ delay_complete_ = delay_job_complete;
+ }
+
+ void SetNetworkStartNotificationJobGeneration(bool notification) {
+ network_start_notification_ = notification;
+ }
+
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE;
+
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE {
+ return supported_schemes_.count(scheme) > 0;
+ }
+
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE {
+ return supported_schemes_.count(url.scheme()) > 0;
+ }
+
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE {
+ return false;
+ }
+
+ private:
+ ResourceDispatcherHostTest* test_fixture_;
+ bool delay_start_;
+ bool delay_complete_;
+ bool network_start_notification_;
+ mutable int url_request_jobs_created_count_;
+ std::set<std::string> supported_schemes_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestURLRequestJobFactory);
+};
+
// Associated with an URLRequest to determine if the URLRequest gets deleted.
class TestUserData : public base::SupportsUserData::Data {
public:
@@ -664,9 +721,12 @@ class ResourceDispatcherHostTest : public testing::Test,
BrowserContext::EnsureResourceContextInitialized(browser_context_.get());
base::RunLoop().RunUntilIdle();
filter_ = MakeForwardingFilter();
- ResourceContext* resource_context = browser_context_->GetResourceContext();
- resource_context->GetRequestContext()->set_network_delegate(
- &network_delegate_);
+ // TODO(cbentzel): Better way to get URLRequestContext?
+ net::URLRequestContext* request_context =
+ browser_context_->GetResourceContext()->GetRequestContext();
+ job_factory_.reset(new TestURLRequestJobFactory(this));
+ request_context->set_job_factory(job_factory_.get());
+ request_context->set_network_delegate(&network_delegate_);
}
// IPC::Sender implementation
@@ -689,33 +749,18 @@ class ResourceDispatcherHostTest : public testing::Test,
}
protected:
+ friend class TestURLRequestJobFactory;
+
// testing::Test
virtual void SetUp() OVERRIDE {
- DCHECK(!test_fixture_);
- test_fixture_ = this;
ChildProcessSecurityPolicyImpl::GetInstance()->Add(0);
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- "test",
- &ResourceDispatcherHostTest::Factory);
- EnsureTestSchemeIsAllowed();
- delay_start_ = false;
- delay_complete_ = false;
- network_start_notification_ = false;
- url_request_jobs_created_count_ = 0;
+ HandleScheme("test");
}
virtual void TearDown() {
- net::URLRequest::Deprecated::RegisterProtocolFactory("test", NULL);
- if (!scheme_.empty())
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- scheme_, old_factory_);
-
EXPECT_TRUE(URLRequestTestDelayedStartJob::DelayedStartQueueEmpty());
URLRequestTestDelayedStartJob::ClearQueue();
- DCHECK(test_fixture_ == this);
- test_fixture_ = NULL;
-
for (std::set<int>::iterator it = child_ids_.begin();
it != child_ids_.end(); ++it) {
host_.CancelRequestsForProcess(*it);
@@ -776,10 +821,6 @@ class ResourceDispatcherHostTest : public testing::Test,
policy->RegisterWebSafeScheme(scheme);
}
- void EnsureTestSchemeIsAllowed() {
- EnsureSchemeIsAllowed("test");
- }
-
// Sets a particular response for any request from now on. To switch back to
// the default bahavior, pass an empty |headers|. |headers| should be raw-
// formatted (NULLs instead of EOLs).
@@ -798,64 +839,10 @@ class ResourceDispatcherHostTest : public testing::Test,
// Intercepts requests for the given protocol.
void HandleScheme(const std::string& scheme) {
- DCHECK(scheme_.empty());
- DCHECK(!old_factory_);
- scheme_ = scheme;
- old_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory(
- scheme_, &ResourceDispatcherHostTest::Factory);
+ job_factory_->HandleScheme(scheme);
EnsureSchemeIsAllowed(scheme);
}
- // Our own net::URLRequestJob factory.
- static net::URLRequestJob* Factory(net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const std::string& scheme) {
- url_request_jobs_created_count_++;
- if (test_fixture_->response_headers_.empty()) {
- if (delay_start_) {
- return new URLRequestTestDelayedStartJob(request, network_delegate);
- } else if (delay_complete_) {
- return new URLRequestTestDelayedCompletionJob(request,
- network_delegate);
- } else if (network_start_notification_) {
- return new URLRequestTestDelayedNetworkJob(request, network_delegate);
- } else if (scheme == "big-job") {
- return new URLRequestBigJob(request, network_delegate);
- } else {
- return new net::URLRequestTestJob(request, network_delegate);
- }
- } else {
- if (delay_start_) {
- return new URLRequestTestDelayedStartJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- } else if (delay_complete_) {
- return new URLRequestTestDelayedCompletionJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- } else {
- return new net::URLRequestTestJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- }
- }
- }
-
- void SetDelayedStartJobGeneration(bool delay_job_start) {
- delay_start_ = delay_job_start;
- }
-
- void SetDelayedCompleteJobGeneration(bool delay_job_complete) {
- delay_complete_ = delay_job_complete;
- }
-
- void SetNetworkStartNotificationJobGeneration(bool notification) {
- network_start_notification_ = notification;
- }
-
void GenerateDataReceivedACK(const IPC::Message& msg) {
EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type());
@@ -887,6 +874,7 @@ class ResourceDispatcherHostTest : public testing::Test,
content::TestBrowserThreadBundle thread_bundle_;
scoped_ptr<TestBrowserContext> browser_context_;
+ scoped_ptr<TestURLRequestJobFactory> job_factory_;
scoped_refptr<ForwardingFilter> filter_;
net::TestNetworkDelegate network_delegate_;
ResourceDispatcherHostImpl host_;
@@ -898,18 +886,7 @@ class ResourceDispatcherHostTest : public testing::Test,
bool send_data_received_acks_;
std::set<int> child_ids_;
scoped_ptr<base::RunLoop> wait_for_request_complete_loop_;
- static ResourceDispatcherHostTest* test_fixture_;
- static bool delay_start_;
- static bool delay_complete_;
- static bool network_start_notification_;
- static int url_request_jobs_created_count_;
};
-// Static.
-ResourceDispatcherHostTest* ResourceDispatcherHostTest::test_fixture_ = NULL;
-bool ResourceDispatcherHostTest::delay_start_ = false;
-bool ResourceDispatcherHostTest::delay_complete_ = false;
-bool ResourceDispatcherHostTest::network_start_notification_ = false;
-int ResourceDispatcherHostTest::url_request_jobs_created_count_ = 0;
void ResourceDispatcherHostTest::MakeTestRequest(int render_view_id,
int request_id,
@@ -927,8 +904,7 @@ void ResourceDispatcherHostTest::MakeTestRequestWithResourceType(
ResourceHostMsg_Request request =
CreateResourceRequest("GET", type, url);
ResourceHostMsg_RequestResource msg(render_view_id, request_id, request);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter, &msg_was_ok);
+ host_.OnMessageReceived(msg, filter);
KickOffRequest();
}
@@ -1067,9 +1043,8 @@ TEST_F(ResourceDispatcherHostTest, TestMany) {
MakeTestRequest(0, 5, net::URLRequestTestJob::test_url_redirect_to_url_2());
// Finish the redirection
- ResourceHostMsg_FollowRedirect redirect_msg(5, false, GURL());
- bool msg_was_ok;
- host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg(5);
+ host_.OnMessageReceived(redirect_msg, filter_.get());
base::MessageLoop::current()->RunUntilIdle();
// flush all the pending requests
@@ -1195,11 +1170,10 @@ TEST_F(ResourceDispatcherHostTest, DeletedFilterDetached) {
ResourceHostMsg_Request request_ping = CreateResourceRequest(
"GET", ResourceType::PING, net::URLRequestTestJob::test_url_3());
- bool msg_was_ok;
ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch);
- host_.OnMessageReceived(msg_prefetch, filter_, &msg_was_ok);
+ host_.OnMessageReceived(msg_prefetch, filter_);
ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping);
- host_.OnMessageReceived(msg_ping, filter_, &msg_was_ok);
+ host_.OnMessageReceived(msg_ping, filter_);
// Remove the filter before processing the requests by simulating channel
// closure.
@@ -1247,8 +1221,7 @@ TEST_F(ResourceDispatcherHostTest, DeletedFilterDetachedRedirect) {
net::URLRequestTestJob::test_url_redirect_to_url_2());
ResourceHostMsg_RequestResource msg(0, 1, request);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_, &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_);
// Remove the filter before processing the request by simulating channel
// closure.
@@ -1374,7 +1347,7 @@ TEST_F(ResourceDispatcherHostTest, CancelInResourceThrottleWillStartRequest) {
CheckRequestCompleteErrorCode(msgs[0][0], net::ERR_ABORTED);
// Make sure URLRequest is never started.
- EXPECT_EQ(0, url_request_jobs_created_count_);
+ EXPECT_EQ(0, job_factory_->url_request_jobs_created_count());
}
TEST_F(ResourceDispatcherHostTest, PausedStartError) {
@@ -1383,7 +1356,7 @@ TEST_F(ResourceDispatcherHostTest, PausedStartError) {
delegate.set_flags(DEFER_PROCESSING_RESPONSE);
host_.SetDelegate(&delegate);
- SetDelayedStartJobGeneration(true);
+ job_factory_->SetDelayedStartJobGeneration(true);
MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_error());
CompleteStartRequest(1);
@@ -1401,7 +1374,7 @@ TEST_F(ResourceDispatcherHostTest, ThrottleNetworkStart) {
delegate.set_flags(DEFER_NETWORK_START);
host_.SetDelegate(&delegate);
- SetNetworkStartNotificationJobGeneration(true);
+ job_factory_->SetNetworkStartNotificationJobGeneration(true);
MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_2());
// Should have deferred for network start.
@@ -2111,7 +2084,7 @@ TEST_F(ResourceDispatcherHostTest, IgnoreCancelForDownloads) {
response_data.resize(1025, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2123,8 +2096,7 @@ TEST_F(ResourceDispatcherHostTest, IgnoreCancelForDownloads) {
// And now simulate a cancellation coming from the renderer.
ResourceHostMsg_CancelRequest msg(request_id);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
// Since the request had already started processing as a download,
// the cancellation above should have been ignored and the request
@@ -2147,7 +2119,7 @@ TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) {
response_data.resize(1025, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2159,8 +2131,7 @@ TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) {
// And now simulate a cancellation coming from the renderer.
ResourceHostMsg_CancelRequest msg(request_id);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
// Since the request had already started processing as a download,
// the cancellation above should have been ignored and the request
@@ -2228,8 +2199,7 @@ TEST_F(ResourceDispatcherHostTest, CancelRequestsForContextTransferred) {
// And now simulate a cancellation coming from the renderer.
ResourceHostMsg_CancelRequest msg(request_id);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
// Since the request is marked as being transferred,
// the cancellation above should have been ignored and the request
@@ -2278,9 +2248,8 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationHtml) {
SetResponse("HTTP/1.1 200 OK\n"
"Content-Type: text/html\n\n",
kResponseBody);
- ResourceHostMsg_FollowRedirect redirect_msg(request_id, false, GURL());
- bool msg_was_ok;
- host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg(request_id);
+ host_.OnMessageReceived(redirect_msg, filter_.get());
base::MessageLoop::current()->RunUntilIdle();
// Flush all the pending requests to get the response through the
@@ -2304,8 +2273,7 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationHtml) {
ResourceHostMsg_RequestResource transfer_request_msg(
new_render_view_id, new_request_id, request);
- host_.OnMessageReceived(
- transfer_request_msg, second_filter.get(), &msg_was_ok);
+ host_.OnMessageReceived(transfer_request_msg, second_filter.get());
base::MessageLoop::current()->RunUntilIdle();
// Check generated messages.
@@ -2353,9 +2321,8 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationText) {
SetResponse("HTTP/1.1 200 OK\n"
"Content-Type: text/plain\n\n",
kResponseBody);
- ResourceHostMsg_FollowRedirect redirect_msg(request_id, false, GURL());
- bool msg_was_ok;
- host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg(request_id);
+ host_.OnMessageReceived(redirect_msg, filter_.get());
base::MessageLoop::current()->RunUntilIdle();
// Flush all the pending requests to get the response through the
@@ -2379,8 +2346,7 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationText) {
ResourceHostMsg_RequestResource transfer_request_msg(
new_render_view_id, new_request_id, request);
- host_.OnMessageReceived(
- transfer_request_msg, second_filter.get(), &msg_was_ok);
+ host_.OnMessageReceived(transfer_request_msg, second_filter.get());
base::MessageLoop::current()->RunUntilIdle();
// Check generated messages.
@@ -2426,9 +2392,7 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithProcessCrash) {
ResourceHostMsg_RequestResource first_request_msg(
render_view_id, request_id, first_request);
- bool msg_was_ok;
- host_.OnMessageReceived(
- first_request_msg, first_filter.get(), &msg_was_ok);
+ host_.OnMessageReceived(first_request_msg, first_filter.get());
base::MessageLoop::current()->RunUntilIdle();
// Now that we're blocked on the redirect, update the response and unblock
@@ -2436,8 +2400,8 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithProcessCrash) {
SetResponse("HTTP/1.1 200 OK\n"
"Content-Type: text/html\n\n",
kResponseBody);
- ResourceHostMsg_FollowRedirect redirect_msg(request_id, false, GURL());
- host_.OnMessageReceived(redirect_msg, first_filter.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg(request_id);
+ host_.OnMessageReceived(redirect_msg, first_filter.get());
base::MessageLoop::current()->RunUntilIdle();
// Flush all the pending requests to get the response through the
@@ -2468,9 +2432,7 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithProcessCrash) {
child_ids_.insert(second_filter->child_id());
ResourceHostMsg_RequestResource transfer_request_msg(
new_render_view_id, new_request_id, request);
- bool msg_was_ok;
- host_.OnMessageReceived(
- transfer_request_msg, second_filter.get(), &msg_was_ok);
+ host_.OnMessageReceived(transfer_request_msg, second_filter.get());
base::MessageLoop::current()->RunUntilIdle();
// Check generated messages.
@@ -2510,9 +2472,8 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithTwoRedirects) {
// Now that we're blocked on the redirect, simulate hitting another redirect.
SetResponse("HTTP/1.1 302 Found\n"
"Location: http://other.com/blerg\n\n");
- ResourceHostMsg_FollowRedirect redirect_msg(request_id, false, GURL());
- bool msg_was_ok;
- host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg(request_id);
+ host_.OnMessageReceived(redirect_msg, filter_.get());
base::MessageLoop::current()->RunUntilIdle();
// Now that we're blocked on the second redirect, update the response and
@@ -2523,8 +2484,8 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithTwoRedirects) {
SetResponse("HTTP/1.1 200 OK\n"
"Content-Type: text/plain\n\n",
kResponseBody);
- ResourceHostMsg_FollowRedirect redirect_msg2(request_id, false, GURL());
- host_.OnMessageReceived(redirect_msg2, filter_.get(), &msg_was_ok);
+ ResourceHostMsg_FollowRedirect redirect_msg2(request_id);
+ host_.OnMessageReceived(redirect_msg2, filter_.get());
base::MessageLoop::current()->RunUntilIdle();
// Flush all the pending requests to get the response through the
@@ -2550,8 +2511,7 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationWithTwoRedirects) {
child_ids_.insert(second_filter->child_id());
ResourceHostMsg_RequestResource transfer_request_msg(
new_render_view_id, new_request_id, request);
- host_.OnMessageReceived(
- transfer_request_msg, second_filter.get(), &msg_was_ok);
+ host_.OnMessageReceived(transfer_request_msg, second_filter.get());
// Verify that we update the ResourceRequestInfo.
GlobalRequestID global_request_id(second_filter->child_id(), new_request_id);
@@ -2637,7 +2597,7 @@ TEST_F(ResourceDispatcherHostTest, DataSentBeforeDetach) {
response_data.resize(kAllocSize, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2649,8 +2609,7 @@ TEST_F(ResourceDispatcherHostTest, DataSentBeforeDetach) {
// Simulate a cancellation coming from the renderer.
ResourceHostMsg_CancelRequest msg(request_id);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
EXPECT_EQ(1, host_.pending_requests());
@@ -2713,8 +2672,7 @@ TEST_F(ResourceDispatcherHostTest, DelayedDataReceivedACKs) {
EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type());
ResourceHostMsg_DataReceived_ACK msg(1);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
}
base::MessageLoop::current()->RunUntilIdle();
@@ -2748,8 +2706,7 @@ TEST_F(ResourceDispatcherHostTest, DataReceivedUnexpectedACKs) {
// Send some unexpected ACKs.
for (size_t i = 0; i < 128; ++i) {
ResourceHostMsg_DataReceived_ACK msg(1);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
}
msgs[0].erase(msgs[0].begin());
@@ -2767,8 +2724,7 @@ TEST_F(ResourceDispatcherHostTest, DataReceivedUnexpectedACKs) {
EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type());
ResourceHostMsg_DataReceived_ACK msg(1);
- bool msg_was_ok;
- host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok);
+ host_.OnMessageReceived(msg, filter_.get());
}
base::MessageLoop::current()->RunUntilIdle();
@@ -2804,10 +2760,8 @@ TEST_F(ResourceDispatcherHostTest, RegisterDownloadedTempFile) {
filter_->child_id(), file_path));
// The child releases from the request.
- bool msg_was_ok = true;
ResourceHostMsg_ReleaseDownloadedFile release_msg(kRequestID);
- host_.OnMessageReceived(release_msg, filter_, &msg_was_ok);
- ASSERT_TRUE(msg_was_ok);
+ host_.OnMessageReceived(release_msg, filter_);
// Still readable because there is another reference to the file. (The child
// may take additional blob references.)
@@ -2865,9 +2819,7 @@ TEST_F(ResourceDispatcherHostTest, DownloadToFile) {
"GET", ResourceType::SUB_RESOURCE, net::URLRequestTestJob::test_url_1());
request.download_to_file = true;
ResourceHostMsg_RequestResource request_msg(0, 1, request);
- bool msg_was_ok;
- host_.OnMessageReceived(request_msg, filter_, &msg_was_ok);
- ASSERT_TRUE(msg_was_ok);
+ host_.OnMessageReceived(request_msg, filter_);
// Running the message loop until idle does not work because
// RedirectToFileResourceHandler posts things to base::WorkerPool. Instead,
@@ -2922,8 +2874,7 @@ TEST_F(ResourceDispatcherHostTest, DownloadToFile) {
// RunUntilIdle doesn't work because base::WorkerPool is involved.
ShareableFileReleaseWaiter waiter(response_head.download_file_path);
ResourceHostMsg_ReleaseDownloadedFile release_msg(1);
- host_.OnMessageReceived(release_msg, filter_, &msg_was_ok);
- ASSERT_TRUE(msg_was_ok);
+ host_.OnMessageReceived(release_msg, filter_);
waiter.Wait();
// The release callback runs before the delete is scheduled, so pump the
// message loop for the delete itself. (This relies on the delete happening on
@@ -2935,4 +2886,42 @@ TEST_F(ResourceDispatcherHostTest, DownloadToFile) {
filter_->child_id(), response_head.download_file_path));
}
+net::URLRequestJob* TestURLRequestJobFactory::MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const {
+ url_request_jobs_created_count_++;
+ if (test_fixture_->response_headers_.empty()) {
+ if (delay_start_) {
+ return new URLRequestTestDelayedStartJob(request, network_delegate);
+ } else if (delay_complete_) {
+ return new URLRequestTestDelayedCompletionJob(request,
+ network_delegate);
+ } else if (network_start_notification_) {
+ return new URLRequestTestDelayedNetworkJob(request, network_delegate);
+ } else if (scheme == "big-job") {
+ return new URLRequestBigJob(request, network_delegate);
+ } else {
+ return new net::URLRequestTestJob(request, network_delegate);
+ }
+ } else {
+ if (delay_start_) {
+ return new URLRequestTestDelayedStartJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ } else if (delay_complete_) {
+ return new URLRequestTestDelayedCompletionJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ } else {
+ return new net::URLRequestTestJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ }
+ }
+}
+
} // namespace content
diff --git a/content/browser/loader/resource_handler.h b/content/browser/loader/resource_handler.h
index 0b942bbe36..a9d8a38aaa 100644
--- a/content/browser/loader/resource_handler.h
+++ b/content/browser/loader/resource_handler.h
@@ -45,15 +45,13 @@ class CONTENT_EXPORT ResourceHandler
virtual void SetController(ResourceController* controller);
// Called as upload progress is made. The return value is ignored.
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) = 0;
+ virtual bool OnUploadProgress(uint64 position, uint64 size) = 0;
// The request was redirected to a new URL. |*defer| has an initial value of
// false. Set |*defer| to true to defer the redirect. The redirect may be
// followed later on via ResourceDispatcherHost::FollowDeferredRedirect. If
// the handler returns false, then the request is cancelled.
- virtual bool OnRequestRedirected(int request_id, const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) = 0;
@@ -61,51 +59,48 @@ class CONTENT_EXPORT ResourceHandler
// false, then the request is cancelled. Set |*defer| to true to defer
// processing of the response. Call ResourceDispatcherHostImpl::
// ResumeDeferredRequest to continue processing the response.
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
- bool* defer) = 0;
-
- // Called before the net::URLRequest for |request_id| (whose url is |url|) is
- // to be started. If the handler returns false, then the request is
- // cancelled. Otherwise if the return value is true, the ResourceHandler can
- // delay the request from starting by setting |*defer = true|. A deferred
- // request will not have called net::URLRequest::Start(), and will not resume
- // until someone calls ResourceDispatcherHost::StartDeferredRequest().
- virtual bool OnWillStart(int request_id, const GURL& url, bool* defer) = 0;
-
- // Called before the net::URLRequest for |request_id| (whose url is |url|}
- // uses the network for the first time to load the resource. If the handler
- // returns false, then the request is cancelled. Otherwise if the return value
- // is true, the ResourceHandler can delay the request from starting by setting
- // |*defer = true|. Call controller()->Resume() to continue if deferred.
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) = 0;
+ virtual bool OnResponseStarted(ResourceResponse* response, bool* defer) = 0;
+
+ // Called before the net::URLRequest (whose url is |url|) is to be started.
+ // If the handler returns false, then the request is cancelled. Otherwise if
+ // the return value is true, the ResourceHandler can delay the request from
+ // starting by setting |*defer = true|. A deferred request will not have
+ // called net::URLRequest::Start(), and will not resume until someone calls
+ // ResourceDispatcherHost::StartDeferredRequest().
+ virtual bool OnWillStart(const GURL& url, bool* defer) = 0;
+
+ // Called before the net::URLRequest (whose url is |url|} uses the network for
+ // the first time to load the resource. If the handler returns false, then the
+ // request is cancelled. Otherwise if the return value is true, the
+ // ResourceHandler can delay the request from starting by setting |*defer =
+ // true|. Call controller()->Resume() to continue if deferred.
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) = 0;
// Data will be read for the response. Upon success, this method places the
// size and address of the buffer where the data is to be written in its
- // out-params. This call will be followed by either OnReadCompleted or
- // OnResponseCompleted, at which point the buffer may be recycled.
+ // out-params. This call will be followed by either OnReadCompleted (on
+ // successful read or EOF) or OnResponseCompleted (on error). If
+ // OnReadCompleted is called, the buffer may be recycled. Otherwise, it may
+ // not be recycled and may potentially outlive the handler. If |min_size| is
+ // not -1, it is the minimum size of the returned buffer.
//
// If the handler returns false, then the request is cancelled. Otherwise,
// once data is available, OnReadCompleted will be called.
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) = 0;
// Data (*bytes_read bytes) was written into the buffer provided by
// OnWillRead. A return value of false cancels the request, true continues
// reading data. Set |*defer| to true to defer reading more response data.
- // Call controller()->Resume() to continue reading response data.
- virtual bool OnReadCompleted(int request_id, int bytes_read,
- bool* defer) = 0;
+ // Call controller()->Resume() to continue reading response data. A zero
+ // |bytes_read| signals that no further data is available.
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) = 0;
// The response is complete. The final response status is given. Set
// |*defer| to true to defer destruction to a later time. Otherwise, the
// request will be destroyed upon return.
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) = 0;
@@ -113,7 +108,7 @@ class CONTENT_EXPORT ResourceHandler
// to indicate progress of 'download_to_file' requests. OnReadCompleted
// calls are consumed by the RedirectToFileResourceHandler and replaced
// with OnDataDownloaded calls.
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) = 0;
+ virtual void OnDataDownloaded(int bytes_downloaded) = 0;
protected:
ResourceHandler(net::URLRequest* request);
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index 251fc2eb79..0becbf42a3 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -99,8 +99,7 @@ void ResourceLoader::StartRequest() {
// Give the handler a chance to delay the URLRequest from being started.
bool defer_start = false;
- if (!handler_->OnWillStart(GetRequestInfo()->GetRequestID(), request_->url(),
- &defer_start)) {
+ if (!handler_->OnWillStart(request_->url(), &defer_start)) {
Cancel();
return;
}
@@ -127,8 +126,6 @@ void ResourceLoader::CancelWithError(int error_code) {
}
void ResourceLoader::ReportUploadProgress() {
- ResourceRequestInfoImpl* info = GetRequestInfo();
-
if (waiting_for_upload_progress_ack_)
return; // Send one progress event at a time.
@@ -152,8 +149,7 @@ void ResourceLoader::ReportUploadProgress() {
if (is_finished || enough_new_progress || too_much_time_passed) {
if (request_->load_flags() & net::LOAD_ENABLE_UPLOAD_PROGRESS) {
- handler_->OnUploadProgress(
- info->GetRequestID(), progress.position(), progress.size());
+ handler_->OnUploadProgress(progress.position(), progress.size());
waiting_for_upload_progress_ack_ = true;
}
last_upload_ticks_ = TimeTicks::Now();
@@ -168,7 +164,12 @@ void ResourceLoader::MarkAsTransferring() {
}
void ResourceLoader::CompleteTransfer() {
- DCHECK_EQ(DEFERRED_READ, deferred_stage_);
+ // Although CrossSiteResourceHandler defers at OnResponseStarted
+ // (DEFERRED_READ), it may be seeing a replay of events via
+ // BufferedResourceHandler, and so the request itself is actually deferred at
+ // a later read stage.
+ DCHECK(DEFERRED_READ == deferred_stage_ ||
+ DEFERRED_RESPONSE_COMPLETE == deferred_stage_);
is_transferring_ = false;
GetRequestInfo()->cross_site_handler()->ResumeResponse();
@@ -222,8 +223,7 @@ void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
scoped_refptr<ResourceResponse> response(new ResourceResponse());
PopulateResourceResponse(request_.get(), response.get());
- if (!handler_->OnRequestRedirected(
- info->GetRequestID(), new_url, response.get(), defer)) {
+ if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) {
Cancel();
} else if (*defer) {
deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed.
@@ -294,8 +294,7 @@ void ResourceLoader::OnBeforeNetworkStart(net::URLRequest* unused,
DCHECK_EQ(request_.get(), unused);
// Give the handler a chance to delay the URLRequest from using the network.
- if (!handler_->OnBeforeNetworkStart(
- GetRequestInfo()->GetRequestID(), request_->url(), defer)) {
+ if (!handler_->OnBeforeNetworkStart(request_->url(), defer)) {
Cancel();
return;
} else if (*defer) {
@@ -363,7 +362,7 @@ void ResourceLoader::OnReadCompleted(net::URLRequest* unused, int bytes_read) {
// do nothing until resumed.
//
// Note: if bytes_read is 0 (EOF) and the handler defers, resumption will call
- // Read() on the URLRequest again and get a second EOF.
+ // ResponseCompleted().
if (is_deferred() || !request_->status().is_success())
return;
@@ -426,6 +425,12 @@ void ResourceLoader::Resume() {
base::Bind(&ResourceLoader::ResumeReading,
weak_ptr_factory_.GetWeakPtr()));
break;
+ case DEFERRED_RESPONSE_COMPLETE:
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&ResourceLoader::ResponseCompleted,
+ weak_ptr_factory_.GetWeakPtr()));
+ break;
case DEFERRED_FINISH:
// Delay self-destruction since we don't know how we were reached.
base::MessageLoop::current()->PostTask(
@@ -543,8 +548,7 @@ void ResourceLoader::CompleteResponseStarted() {
delegate_->DidReceiveResponse(this);
bool defer = false;
- if (!handler_->OnResponseStarted(
- info->GetRequestID(), response.get(), &defer)) {
+ if (!handler_->OnResponseStarted(response.get(), &defer)) {
Cancel();
} else if (defer) {
read_deferral_start_time_ = base::TimeTicks::Now();
@@ -590,7 +594,6 @@ void ResourceLoader::ResumeReading() {
}
void ResourceLoader::ReadMore(int* bytes_read) {
- ResourceRequestInfoImpl* info = GetRequestInfo();
DCHECK(!is_deferred());
// Make sure we track the buffer in at least one place. This ensures it gets
@@ -598,7 +601,7 @@ void ResourceLoader::ReadMore(int* bytes_read) {
// doesn't use the buffer.
scoped_refptr<net::IOBuffer> buf;
int buf_size;
- if (!handler_->OnWillRead(info->GetRequestID(), &buf, &buf_size, -1)) {
+ if (!handler_->OnWillRead(&buf, &buf_size, -1)) {
Cancel();
return;
}
@@ -616,13 +619,12 @@ void ResourceLoader::CompleteRead(int bytes_read) {
DCHECK(bytes_read >= 0);
DCHECK(request_->status().is_success());
- ResourceRequestInfoImpl* info = GetRequestInfo();
-
bool defer = false;
- if (!handler_->OnReadCompleted(info->GetRequestID(), bytes_read, &defer)) {
+ if (!handler_->OnReadCompleted(bytes_read, &defer)) {
Cancel();
} else if (defer) {
- deferred_stage_ = DEFERRED_READ; // Read next chunk when resumed.
+ deferred_stage_ =
+ bytes_read > 0 ? DEFERRED_READ : DEFERRED_RESPONSE_COMPLETE;
}
// Note: the request may still have been cancelled while OnReadCompleted
@@ -652,8 +654,7 @@ void ResourceLoader::ResponseCompleted() {
}
bool defer = false;
- handler_->OnResponseCompleted(info->GetRequestID(), request_->status(),
- security_info, &defer);
+ handler_->OnResponseCompleted(request_->status(), security_info, &defer);
if (defer) {
// The handler is not ready to die yet. We will call DidFinishLoading when
// we resume.
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index 79dcf60975..d06f58ca61 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -123,6 +123,7 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
DEFERRED_NETWORK_START,
DEFERRED_REDIRECT,
DEFERRED_READ,
+ DEFERRED_RESPONSE_COMPLETE,
DEFERRED_FINISH
};
DeferredStage deferred_stage_;
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index 0d2629d140..d2fdd99b3b 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -7,7 +7,6 @@
#include "base/file_util.h"
#include "base/files/file.h"
#include "base/message_loop/message_loop_proxy.h"
-#include "base/platform_file.h"
#include "base/run_loop.h"
#include "content/browser/browser_thread_impl.h"
#include "content/browser/loader/redirect_to_file_resource_handler.h"
@@ -92,6 +91,8 @@ class ResourceHandlerStub : public ResourceHandler {
expect_reads_(true),
cancel_on_read_completed_(false),
defer_eof_(false),
+ received_on_will_read_(false),
+ received_eof_(false),
received_response_completed_(false),
total_bytes_downloaded_(0) {
}
@@ -126,88 +127,82 @@ class ResourceHandlerStub : public ResourceHandler {
}
// ResourceHandler implementation:
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE {
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE {
NOTREACHED();
return true;
}
- virtual bool OnRequestRedirected(int request_id,
- const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE {
NOTREACHED();
return true;
}
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE {
EXPECT_FALSE(response_);
response_ = response;
return true;
}
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE {
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE {
EXPECT_TRUE(start_url_.is_empty());
start_url_ = url;
*defer = defer_request_on_will_start_;
return true;
}
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE {
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE {
return true;
}
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE {
- if (!expect_reads_) {
- ADD_FAILURE();
- return false;
- }
+ EXPECT_TRUE(expect_reads_);
+ EXPECT_FALSE(received_on_will_read_);
+ EXPECT_FALSE(received_eof_);
+ EXPECT_FALSE(received_response_completed_);
*buf = read_buffer_;
*buf_size = kReadBufSize;
+ received_on_will_read_ = true;
return true;
}
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE {
- if (!expect_reads_) {
- ADD_FAILURE();
- return false;
- }
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE {
+ EXPECT_TRUE(received_on_will_read_);
+ EXPECT_TRUE(expect_reads_);
+ EXPECT_FALSE(received_response_completed_);
- if (bytes_read == 0 && defer_eof_) {
- // Only defer it once; on resumption there will be another EOF.
- defer_eof_ = false;
- *defer = true;
+ if (bytes_read == 0) {
+ received_eof_ = true;
+ if (defer_eof_) {
+ defer_eof_ = false;
+ *defer = true;
+ }
}
+ // Need another OnWillRead() call before seeing an OnReadCompleted().
+ received_on_will_read_ = false;
+
return !cancel_on_read_completed_;
}
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE {
EXPECT_FALSE(received_response_completed_);
+ if (status.is_success() && expect_reads_)
+ EXPECT_TRUE(received_eof_);
+
received_response_completed_ = true;
status_ = status;
}
- virtual void OnDataDownloaded(int request_id,
- int bytes_downloaded) OVERRIDE {
- if (expect_reads_)
- ADD_FAILURE();
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE {
+ EXPECT_FALSE(expect_reads_);
total_bytes_downloaded_ += bytes_downloaded;
}
@@ -221,6 +216,8 @@ class ResourceHandlerStub : public ResourceHandler {
GURL start_url_;
scoped_refptr<ResourceResponse> response_;
+ bool received_on_will_read_;
+ bool received_eof_;
bool received_response_completed_;
net::URLRequestStatus status_;
int total_bytes_downloaded_;
diff --git a/content/browser/loader/resource_message_delegate.h b/content/browser/loader/resource_message_delegate.h
index f447808463..934d60c023 100644
--- a/content/browser/loader/resource_message_delegate.h
+++ b/content/browser/loader/resource_message_delegate.h
@@ -29,8 +29,7 @@ class CONTENT_EXPORT ResourceMessageDelegate {
// Called when the ResourceDispatcherHostImpl receives a message specifically
// for this delegate.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) = 0;
+ virtual bool OnMessageReceived(const IPC::Message& message) = 0;
void set_request_id(const GlobalRequestID& new_request_id) {
id_ = new_request_id;
diff --git a/content/browser/loader/resource_message_filter.cc b/content/browser/loader/resource_message_filter.cc
index 91f13cb851..137029cf64 100644
--- a/content/browser/loader/resource_message_filter.cc
+++ b/content/browser/loader/resource_message_filter.cc
@@ -42,10 +42,8 @@ void ResourceMessageFilter::OnChannelClosing() {
ResourceDispatcherHostImpl::Get()->CancelRequestsForProcess(child_id_);
}
-bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
- return ResourceDispatcherHostImpl::Get()->OnMessageReceived(
- message, this, message_was_ok);
+bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) {
+ return ResourceDispatcherHostImpl::Get()->OnMessageReceived(message, this);
}
void ResourceMessageFilter::GetContexts(
diff --git a/content/browser/loader/resource_message_filter.h b/content/browser/loader/resource_message_filter.h
index 1783fc78e7..90af00e7e7 100644
--- a/content/browser/loader/resource_message_filter.h
+++ b/content/browser/loader/resource_message_filter.h
@@ -53,8 +53,7 @@ class CONTENT_EXPORT ResourceMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void GetContexts(const ResourceHostMsg_Request& request,
ResourceContext** resource_context,
diff --git a/content/browser/loader/resource_scheduler.cc b/content/browser/loader/resource_scheduler.cc
index 9d59990c05..a826580cdc 100644
--- a/content/browser/loader/resource_scheduler.cc
+++ b/content/browser/loader/resource_scheduler.cc
@@ -167,13 +167,12 @@ class ResourceScheduler::ScheduledResourceRequest
private:
// ResourceMessageDelegate interface:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE {
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ScheduledResourceRequest, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ScheduledResourceRequest, message)
IPC_MESSAGE_HANDLER(ResourceHostMsg_DidChangePriority, DidChangePriority)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/loader/resource_scheduler_filter.cc b/content/browser/loader/resource_scheduler_filter.cc
index 97e219e91b..4c825dab98 100644
--- a/content/browser/loader/resource_scheduler_filter.cc
+++ b/content/browser/loader/resource_scheduler_filter.cc
@@ -27,8 +27,7 @@ ResourceSchedulerFilter::ResourceSchedulerFilter(int child_id)
ResourceSchedulerFilter::~ResourceSchedulerFilter() {
}
-bool ResourceSchedulerFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool ResourceSchedulerFilter::OnMessageReceived(const IPC::Message& message) {
ResourceScheduler* scheduler =
ResourceDispatcherHostImpl::Get()->scheduler();
// scheduler can be NULL during shutdown, in which case it's ok to ignore the
diff --git a/content/browser/loader/resource_scheduler_filter.h b/content/browser/loader/resource_scheduler_filter.h
index 05a8631a2a..9f4c5f3a7e 100644
--- a/content/browser/loader/resource_scheduler_filter.h
+++ b/content/browser/loader/resource_scheduler_filter.h
@@ -19,8 +19,7 @@ class ResourceSchedulerFilter : public BrowserMessageFilter {
explicit ResourceSchedulerFilter(int child_id);
// BrowserMessageFilter methods:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~ResourceSchedulerFilter();
diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc
index 7fba2a5430..f4cb0e0f09 100644
--- a/content/browser/loader/resource_scheduler_unittest.cc
+++ b/content/browser/loader/resource_scheduler_unittest.cc
@@ -198,9 +198,7 @@ class ResourceSchedulerTest : public testing::Test {
const GlobalRequestID& id = info->GetGlobalRequestID();
ResourceHostMsg_DidChangePriority msg(id.request_id, new_priority,
intra_priority);
- bool ok = false;
- rdh_.OnMessageReceived(msg, filter.get(), &ok);
- EXPECT_TRUE(ok);
+ rdh_.OnMessageReceived(msg, filter.get());
}
int next_request_id_;
diff --git a/content/browser/loader/stream_resource_handler.cc b/content/browser/loader/stream_resource_handler.cc
index 564165929a..46713fc67f 100644
--- a/content/browser/loader/stream_resource_handler.cc
+++ b/content/browser/loader/stream_resource_handler.cc
@@ -9,9 +9,9 @@
#include "content/browser/streams/stream.h"
#include "content/browser/streams/stream_registry.h"
#include "content/public/browser/resource_controller.h"
-#include "content/public/common/url_constants.h"
#include "net/base/io_buffer.h"
#include "net/url_request/url_request_status.h"
+#include "url/url_constants.h"
namespace content {
@@ -22,7 +22,7 @@ StreamResourceHandler::StreamResourceHandler(net::URLRequest* request,
read_buffer_(NULL) {
// TODO(tyoshino): Find a way to share this with the blob URL creation in
// WebKit.
- GURL url(std::string(kBlobScheme) + ":" + origin.spec() +
+ GURL url(std::string(url::kBlobScheme) + ":" + origin.spec() +
base::GenerateGUID());
stream_ = new Stream(registry, this, url);
}
@@ -31,39 +31,31 @@ StreamResourceHandler::~StreamResourceHandler() {
stream_->RemoveWriteObserver(this);
}
-bool StreamResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
+bool StreamResourceHandler::OnUploadProgress(uint64 position,
uint64 size) {
return true;
}
-bool StreamResourceHandler::OnRequestRedirected(int request_id,
- const GURL& url,
+bool StreamResourceHandler::OnRequestRedirected(const GURL& url,
ResourceResponse* resp,
bool* defer) {
return true;
}
-bool StreamResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* resp,
+bool StreamResourceHandler::OnResponseStarted(ResourceResponse* resp,
bool* defer) {
return true;
}
-bool StreamResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool StreamResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool StreamResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool StreamResourceHandler::OnBeforeNetworkStart(const GURL& url, bool* defer) {
return true;
}
-bool StreamResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool StreamResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
static const int kReadBufSize = 32768;
@@ -77,9 +69,7 @@ bool StreamResourceHandler::OnWillRead(int request_id,
return true;
}
-bool StreamResourceHandler::OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) {
+bool StreamResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
if (!bytes_read)
return true;
@@ -99,16 +89,13 @@ bool StreamResourceHandler::OnReadCompleted(int request_id,
}
void StreamResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& sec_info,
bool* defer) {
stream_->Finalize();
}
-void StreamResourceHandler::OnDataDownloaded(
- int request_id,
- int bytes_downloaded) {
+void StreamResourceHandler::OnDataDownloaded(int bytes_downloaded) {
NOTREACHED();
}
diff --git a/content/browser/loader/stream_resource_handler.h b/content/browser/loader/stream_resource_handler.h
index daa9b504a2..3b8bc21789 100644
--- a/content/browser/loader/stream_resource_handler.h
+++ b/content/browser/loader/stream_resource_handler.h
@@ -31,45 +31,33 @@ class StreamResourceHandler : public StreamWriteObserver,
const GURL& origin);
virtual ~StreamResourceHandler();
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
// Not needed, as this event handler ought to be the final resource.
- virtual bool OnRequestRedirected(int request_id,
- const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* resp,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* resp,
+ virtual bool OnResponseStarted(ResourceResponse* resp,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
// Create a new buffer to store received data.
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
// A read was completed, forward the data to the Stream.
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE;
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& sec_info,
bool* defer) OVERRIDE;
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
Stream* stream() { return stream_.get(); }
diff --git a/content/browser/loader/sync_resource_handler.cc b/content/browser/loader/sync_resource_handler.cc
index 865b29e404..090b939105 100644
--- a/content/browser/loader/sync_resource_handler.cc
+++ b/content/browser/loader/sync_resource_handler.cc
@@ -10,7 +10,6 @@
#include "content/browser/loader/resource_message_filter.h"
#include "content/browser/loader/resource_request_info_impl.h"
#include "content/common/resource_messages.h"
-#include "content/public/browser/global_request_id.h"
#include "content/public/browser/resource_dispatcher_host_delegate.h"
#include "content/public/browser/resource_request_info.h"
#include "net/base/io_buffer.h"
@@ -41,14 +40,11 @@ SyncResourceHandler::~SyncResourceHandler() {
}
}
-bool SyncResourceHandler::OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) {
+bool SyncResourceHandler::OnUploadProgress(uint64 position, uint64 size) {
return true;
}
bool SyncResourceHandler::OnRequestRedirected(
- int request_id,
const GURL& new_url,
ResourceResponse* response,
bool* defer) {
@@ -72,7 +68,6 @@ bool SyncResourceHandler::OnRequestRedirected(
}
bool SyncResourceHandler::OnResponseStarted(
- int request_id,
ResourceResponse* response,
bool* defer) {
const ResourceRequestInfoImpl* info = GetRequestInfo();
@@ -98,20 +93,15 @@ bool SyncResourceHandler::OnResponseStarted(
return true;
}
-bool SyncResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool SyncResourceHandler::OnWillStart(const GURL& url, bool* defer) {
return true;
}
-bool SyncResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool SyncResourceHandler::OnBeforeNetworkStart(const GURL& url, bool* defer) {
return true;
}
-bool SyncResourceHandler::OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+bool SyncResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) {
DCHECK(min_size == -1);
@@ -120,8 +110,7 @@ bool SyncResourceHandler::OnWillRead(int request_id,
return true;
}
-bool SyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
- bool* defer) {
+bool SyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
if (!bytes_read)
return true;
result_.data.append(read_buffer_->data(), bytes_read);
@@ -129,7 +118,6 @@ bool SyncResourceHandler::OnReadCompleted(int request_id, int bytes_read,
}
void SyncResourceHandler::OnResponseCompleted(
- int request_id,
const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) {
@@ -148,9 +136,7 @@ void SyncResourceHandler::OnResponseCompleted(
return;
}
-void SyncResourceHandler::OnDataDownloaded(
- int request_id,
- int bytes_downloaded) {
+void SyncResourceHandler::OnDataDownloaded(int bytes_downloaded) {
// Sync requests don't involve ResourceMsg_DataDownloaded messages
// being sent back to renderers as progress is made.
}
diff --git a/content/browser/loader/sync_resource_handler.h b/content/browser/loader/sync_resource_handler.h
index 3a71483442..693b48f3b3 100644
--- a/content/browser/loader/sync_resource_handler.h
+++ b/content/browser/loader/sync_resource_handler.h
@@ -33,34 +33,22 @@ class SyncResourceHandler : public ResourceHandler {
ResourceDispatcherHostImpl* resource_dispatcher_host);
virtual ~SyncResourceHandler();
- virtual bool OnUploadProgress(int request_id,
- uint64 position,
- uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(int request_id,
- const GURL& new_url,
+ virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
+ virtual bool OnRequestRedirected(const GURL& new_url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnWillRead(int request_id,
- scoped_refptr<net::IOBuffer>* buf,
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
int* buf_size,
int min_size) OVERRIDE;
- virtual bool OnReadCompleted(int request_id,
- int bytes_read,
- bool* defer) OVERRIDE;
- virtual void OnResponseCompleted(int request_id,
- const net::URLRequestStatus& status,
+ virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE;
+ virtual void OnResponseCompleted(const net::URLRequestStatus& status,
const std::string& security_info,
bool* defer) OVERRIDE;
- virtual void OnDataDownloaded(int request_id, int bytes_downloaded) OVERRIDE;
+ virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE;
private:
enum { kReadBufSize = 3840 };
diff --git a/content/browser/loader/temporary_file_stream.h b/content/browser/loader/temporary_file_stream.h
index 51d524dfc9..1cb4bc25be 100644
--- a/content/browser/loader/temporary_file_stream.h
+++ b/content/browser/loader/temporary_file_stream.h
@@ -8,7 +8,6 @@
#include "base/callback_forward.h"
#include "base/files/file.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "content/common/content_export.h"
namespace net {
diff --git a/content/browser/loader/throttling_resource_handler.cc b/content/browser/loader/throttling_resource_handler.cc
index 0de6177842..a302f1da79 100644
--- a/content/browser/loader/throttling_resource_handler.cc
+++ b/content/browser/loader/throttling_resource_handler.cc
@@ -31,8 +31,7 @@ ThrottlingResourceHandler::ThrottlingResourceHandler(
ThrottlingResourceHandler::~ThrottlingResourceHandler() {
}
-bool ThrottlingResourceHandler::OnRequestRedirected(int request_id,
- const GURL& new_url,
+bool ThrottlingResourceHandler::OnRequestRedirected(const GURL& new_url,
ResourceResponse* response,
bool* defer) {
DCHECK(!cancelled_by_resource_throttle_);
@@ -55,13 +54,10 @@ bool ThrottlingResourceHandler::OnRequestRedirected(int request_id,
next_index_ = 0; // Reset for next time.
- return next_handler_->OnRequestRedirected(request_id, new_url, response,
- defer);
+ return next_handler_->OnRequestRedirected(new_url, response, defer);
}
-bool ThrottlingResourceHandler::OnWillStart(int request_id,
- const GURL& url,
- bool* defer) {
+bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) {
DCHECK(!cancelled_by_resource_throttle_);
*defer = false;
@@ -81,11 +77,10 @@ bool ThrottlingResourceHandler::OnWillStart(int request_id,
next_index_ = 0; // Reset for next time.
- return next_handler_->OnWillStart(request_id, url, defer);
+ return next_handler_->OnWillStart(url, defer);
}
-bool ThrottlingResourceHandler::OnBeforeNetworkStart(int request_id,
- const GURL& url,
+bool ThrottlingResourceHandler::OnBeforeNetworkStart(const GURL& url,
bool* defer) {
DCHECK(!cancelled_by_resource_throttle_);
@@ -106,11 +101,10 @@ bool ThrottlingResourceHandler::OnBeforeNetworkStart(int request_id,
next_index_ = 0; // Reset for next time.
- return next_handler_->OnBeforeNetworkStart(request_id, url, defer);
+ return next_handler_->OnBeforeNetworkStart(url, defer);
}
-bool ThrottlingResourceHandler::OnResponseStarted(int request_id,
- ResourceResponse* response,
+bool ThrottlingResourceHandler::OnResponseStarted(ResourceResponse* response,
bool* defer) {
DCHECK(!cancelled_by_resource_throttle_);
@@ -130,7 +124,7 @@ bool ThrottlingResourceHandler::OnResponseStarted(int request_id,
next_index_ = 0; // Reset for next time.
- return next_handler_->OnResponseStarted(request_id, response, defer);
+ return next_handler_->OnResponseStarted(response, defer);
}
void ThrottlingResourceHandler::Cancel() {
@@ -181,7 +175,7 @@ void ThrottlingResourceHandler::ResumeStart() {
deferred_url_ = GURL();
bool defer = false;
- if (!OnWillStart(GetRequestID(), url, &defer)) {
+ if (!OnWillStart(url, &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
@@ -195,7 +189,7 @@ void ThrottlingResourceHandler::ResumeNetworkStart() {
deferred_url_ = GURL();
bool defer = false;
- if (!OnBeforeNetworkStart(GetRequestID(), url, &defer)) {
+ if (!OnBeforeNetworkStart(url, &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
@@ -211,7 +205,7 @@ void ThrottlingResourceHandler::ResumeRedirect() {
deferred_response_.swap(response);
bool defer = false;
- if (!OnRequestRedirected(GetRequestID(), new_url, response.get(), &defer)) {
+ if (!OnRequestRedirected(new_url, response.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
@@ -225,7 +219,7 @@ void ThrottlingResourceHandler::ResumeResponse() {
deferred_response_.swap(response);
bool defer = false;
- if (!OnResponseStarted(GetRequestID(), response.get(), &defer)) {
+ if (!OnResponseStarted(response.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
diff --git a/content/browser/loader/throttling_resource_handler.h b/content/browser/loader/throttling_resource_handler.h
index 9de6951216..fd284dbba2 100644
--- a/content/browser/loader/throttling_resource_handler.h
+++ b/content/browser/loader/throttling_resource_handler.h
@@ -31,17 +31,13 @@ class ThrottlingResourceHandler : public LayeredResourceHandler,
virtual ~ThrottlingResourceHandler();
// LayeredResourceHandler overrides:
- virtual bool OnRequestRedirected(int request_id, const GURL& url,
+ virtual bool OnRequestRedirected(const GURL& url,
ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnResponseStarted(int request_id,
- ResourceResponse* response,
+ virtual bool OnResponseStarted(ResourceResponse* response,
bool* defer) OVERRIDE;
- virtual bool OnWillStart(int request_id, const GURL& url,
- bool* defer) OVERRIDE;
- virtual bool OnBeforeNetworkStart(int request_id,
- const GURL& url,
- bool* defer) OVERRIDE;
+ virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE;
+ virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE;
// ResourceController implementation:
virtual void Cancel() OVERRIDE;
diff --git a/content/browser/mach_broker_mac.mm b/content/browser/mach_broker_mac.mm
index 24a0e24981..e4ee38e09b 100644
--- a/content/browser/mach_broker_mac.mm
+++ b/content/browser/mach_broker_mac.mm
@@ -12,6 +12,7 @@
#include "base/command_line.h"
#include "base/logging.h"
#include "base/mac/foundation_util.h"
+#include "base/mac/mach_logging.h"
#include "base/mac/scoped_mach_port.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
@@ -28,11 +29,6 @@ namespace content {
namespace {
-// Prints a string representation of a Mach error code.
-std::string MachErrorCode(kern_return_t err) {
- return base::StringPrintf("0x%x %s", err, mach_error_string(err));
-}
-
// Mach message structure used in the child as a sending message.
struct MachBroker_ChildSendMsg {
mach_msg_header_t header;
@@ -57,28 +53,27 @@ class MachListenerThreadDelegate : public base::PlatformThread::Delegate {
}
bool Init() {
- DCHECK(server_port_ == MACH_PORT_NULL);
+ DCHECK(server_port_.get() == MACH_PORT_NULL);
mach_port_t port;
kern_return_t kr = mach_port_allocate(mach_task_self(),
MACH_PORT_RIGHT_RECEIVE,
&port);
if (kr != KERN_SUCCESS) {
- LOG(ERROR) << "Failed to allocate MachBroker server port: "
- << MachErrorCode(kr);
+ MACH_LOG(ERROR, kr) << "mach_port_allocate";
return false;
}
+ server_port_.reset(port);
// Allocate a send right for the server port.
kr = mach_port_insert_right(
mach_task_self(), port, port, MACH_MSG_TYPE_MAKE_SEND);
if (kr != KERN_SUCCESS) {
- LOG(ERROR) << "Failed to insert send right for MachBroker server port: "
- << MachErrorCode(kr);
+ MACH_LOG(ERROR, kr) << "mach_port_insert_right";
return false;
}
-
- server_port_.reset(port);
+ // Deallocate the right after registering with the bootstrap server.
+ base::mac::ScopedMachSendRight send_right(port);
// Register the port with the bootstrap server. Because bootstrap_register
// is deprecated, this has to be wraped in an ObjC interface.
@@ -96,33 +91,35 @@ class MachListenerThreadDelegate : public base::PlatformThread::Delegate {
msg.header.msgh_size = sizeof(msg);
msg.header.msgh_local_port = server_port_.get();
+ const mach_msg_option_t options = MACH_RCV_MSG |
+ MACH_RCV_TRAILER_TYPE(MACH_RCV_TRAILER_AUDIT) |
+ MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT);
+
kern_return_t kr;
- do {
+ while ((kr = mach_msg(&msg.header,
+ options,
+ 0,
+ sizeof(msg),
+ server_port_,
+ MACH_MSG_TIMEOUT_NONE,
+ MACH_PORT_NULL)) == KERN_SUCCESS) {
// Use the kernel audit information to make sure this message is from
// a task that this process spawned. The kernel audit token contains the
// unspoofable pid of the task that sent the message.
- mach_msg_option_t options = MACH_RCV_MSG |
- MACH_RCV_TRAILER_TYPE(MACH_RCV_TRAILER_AUDIT) |
- MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT);
-
- kr = mach_msg(&msg.header, options, 0, sizeof(msg), server_port_,
- MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
- if (kr == KERN_SUCCESS) {
- // TODO(rsesek): In the 10.7 SDK, there's audit_token_to_pid().
- pid_t child_pid;
- audit_token_to_au32(msg.trailer.msgh_audit,
- NULL, NULL, NULL, NULL, NULL, &child_pid, NULL, NULL);
-
- mach_port_t child_task_port = msg.child_task_port.name;
-
- // Take the lock and update the broker information.
- base::AutoLock lock(broker_->GetLock());
- broker_->FinalizePid(child_pid, child_task_port);
- }
- } while (kr == KERN_SUCCESS);
-
- LOG(ERROR) << "MachBroker thread exiting; mach_msg() likely failed: "
- << MachErrorCode(kr);
+ //
+ // TODO(rsesek): In the 10.7 SDK, there's audit_token_to_pid().
+ pid_t child_pid;
+ audit_token_to_au32(msg.trailer.msgh_audit,
+ NULL, NULL, NULL, NULL, NULL, &child_pid, NULL, NULL);
+
+ mach_port_t child_task_port = msg.child_task_port.name;
+
+ // Take the lock and update the broker information.
+ base::AutoLock lock(broker_->GetLock());
+ broker_->FinalizePid(child_pid, child_task_port);
+ }
+
+ MACH_LOG(ERROR, kr) << "mach_msg";
}
private:
@@ -130,7 +127,7 @@ class MachListenerThreadDelegate : public base::PlatformThread::Delegate {
// NULL.
MachBroker* broker_; // weak
- base::mac::ScopedMachPort server_port_;
+ base::mac::ScopedMachReceiveRight server_port_;
DISALLOW_COPY_AND_ASSIGN(MachListenerThreadDelegate);
};
@@ -138,20 +135,14 @@ class MachListenerThreadDelegate : public base::PlatformThread::Delegate {
bool MachBroker::ChildSendTaskPortToParent() {
// Look up the named MachBroker port that's been registered with the
// bootstrap server.
- mach_port_t bootstrap_port;
- kern_return_t kr = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
- if (kr != KERN_SUCCESS) {
- LOG(ERROR) << "Failed to look up bootstrap port: " << MachErrorCode(kr);
- return false;
- }
-
mach_port_t parent_port;
- kr = bootstrap_look_up(bootstrap_port,
+ kern_return_t kr = bootstrap_look_up(bootstrap_port,
const_cast<char*>(GetMachPortName().c_str()), &parent_port);
if (kr != KERN_SUCCESS) {
- LOG(ERROR) << "Failed to look up named parent port: " << MachErrorCode(kr);
+ BOOTSTRAP_LOG(ERROR, kr) << "bootstrap_look_up";
return false;
}
+ base::mac::ScopedMachSendRight scoped_right(parent_port);
// Create the check in message. This will copy a send right on this process'
// (the child's) task port and send it to the parent.
@@ -169,7 +160,7 @@ bool MachBroker::ChildSendTaskPortToParent() {
kr = mach_msg(&msg.header, MACH_SEND_MSG | MACH_SEND_TIMEOUT, sizeof(msg),
0, MACH_PORT_NULL, 100 /*milliseconds*/, MACH_PORT_NULL);
if (kr != KERN_SUCCESS) {
- LOG(ERROR) << "Failed to send task port to parent: " << MachErrorCode(kr);
+ MACH_LOG(ERROR, kr) << "mach_msg";
return false;
}
@@ -279,9 +270,7 @@ void MachBroker::InvalidatePid(base::ProcessHandle pid) {
kern_return_t kr = mach_port_deallocate(mach_task_self(),
it->second);
- LOG_IF(WARNING, kr != KERN_SUCCESS)
- << "Failed to mach_port_deallocate mach task " << it->second
- << ", error " << MachErrorCode(kr);
+ MACH_LOG_IF(WARNING, kr != KERN_SUCCESS, kr) << "mach_port_deallocate";
mach_map_.erase(it);
}
diff --git a/content/browser/media/android/browser_demuxer_android.cc b/content/browser/media/android/browser_demuxer_android.cc
index 79f9fbfbc6..197895261d 100644
--- a/content/browser/media/android/browser_demuxer_android.cc
+++ b/content/browser/media/android/browser_demuxer_android.cc
@@ -26,11 +26,6 @@ class BrowserDemuxerAndroid::Internal : public media::DemuxerAndroid {
demuxer_->AddDemuxerClient(demuxer_client_id_, client);
}
- virtual void RequestDemuxerConfigs() OVERRIDE {
- DCHECK(ClientIDExists()) << demuxer_client_id_;
- demuxer_->Send(new MediaPlayerMsg_MediaConfigRequest(demuxer_client_id_));
- }
-
virtual void RequestDemuxerData(media::DemuxerStream::Type type) OVERRIDE {
DCHECK(ClientIDExists()) << demuxer_client_id_;
demuxer_->Send(new MediaPlayerMsg_ReadFromDemuxer(
@@ -75,10 +70,9 @@ void BrowserDemuxerAndroid::OverrideThreadForMessage(
}
}
-bool BrowserDemuxerAndroid::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool BrowserDemuxerAndroid::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(BrowserDemuxerAndroid, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(BrowserDemuxerAndroid, message)
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DemuxerReady, OnDemuxerReady)
IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ReadFromDemuxerAck,
OnReadFromDemuxerAck)
diff --git a/content/browser/media/android/browser_demuxer_android.h b/content/browser/media/android/browser_demuxer_android.h
index 76018313cb..4ab7c8d84c 100644
--- a/content/browser/media/android/browser_demuxer_android.h
+++ b/content/browser/media/android/browser_demuxer_android.h
@@ -23,8 +23,7 @@ class CONTENT_EXPORT BrowserDemuxerAndroid : public BrowserMessageFilter {
// BrowserMessageFilter overrides.
virtual void OverrideThreadForMessage(const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// Returns an uninitialized demuxer implementation associated with
// |demuxer_client_id|, which can be used to communicate with the real demuxer
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index b4a71e89ae..937ffea83b 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -6,6 +6,7 @@
#include "base/android/scoped_java_ref.h"
#include "base/command_line.h"
+#include "base/stl_util.h"
#include "content/browser/android/content_view_core_impl.h"
#include "content/browser/media/android/browser_demuxer_android.h"
#include "content/browser/media/android/media_resource_getter_impl.h"
@@ -17,6 +18,7 @@
#include "content/public/browser/android/external_video_surface_container.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/storage_partition.h"
@@ -24,12 +26,12 @@
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
-#include "media/base/android/media_drm_bridge.h"
#include "media/base/android/media_player_bridge.h"
#include "media/base/android/media_source_player.h"
+#include "media/base/cdm_factory.h"
#include "media/base/media_switches.h"
-using media::MediaDrmBridge;
+using media::MediaKeys;
using media::MediaPlayerAndroid;
using media::MediaPlayerBridge;
using media::MediaPlayerManager;
@@ -57,10 +59,10 @@ void BrowserMediaPlayerManager::RegisterFactory(Factory factory) {
// static
BrowserMediaPlayerManager* BrowserMediaPlayerManager::Create(
- RenderViewHost* rvh) {
+ RenderFrameHost* rfh) {
if (g_factory)
- return g_factory(rvh);
- return new BrowserMediaPlayerManager(rvh);
+ return g_factory(rfh);
+ return new BrowserMediaPlayerManager(rfh);
}
ContentViewCoreImpl* BrowserMediaPlayerManager::GetContentViewCore() const {
@@ -125,46 +127,16 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer(
}
BrowserMediaPlayerManager::BrowserMediaPlayerManager(
- RenderViewHost* render_view_host)
- : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)),
+ RenderFrameHost* render_frame_host)
+ : render_frame_host_(render_frame_host),
fullscreen_player_id_(-1),
fullscreen_player_is_released_(false),
- web_contents_(WebContents::FromRenderViewHost(render_view_host)),
+ web_contents_(WebContents::FromRenderFrameHost(render_frame_host)),
weak_ptr_factory_(this) {
}
BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {}
-bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Initialize, OnInitialize)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Start, OnStart)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Seek, OnSeek)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Pause, OnPause)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetVolume, OnSetVolume)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetPoster, OnSetPoster)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Release, OnReleaseResources)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers,
- DestroyAllMediaPlayers)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetCdm, OnSetCdm)
- IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm)
- IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_ReleaseSession, OnReleaseSession)
- IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm)
-#if defined(VIDEO_HOLE)
- IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface,
- OnNotifyExternalSurface)
-#endif // defined(VIDEO_HOLE)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
void BrowserMediaPlayerManager::FullscreenPlayerPlay() {
MediaPlayerAndroid* player = GetFullscreenPlayer();
if (player) {
@@ -173,8 +145,8 @@ void BrowserMediaPlayerManager::FullscreenPlayerPlay() {
fullscreen_player_is_released_ = false;
}
player->Start();
- Send(new MediaPlayerMsg_DidMediaPlayerPlay(
- routing_id(), fullscreen_player_id_));
+ Send(new MediaPlayerMsg_DidMediaPlayerPlay(RoutingID(),
+ fullscreen_player_id_));
}
}
@@ -182,8 +154,8 @@ void BrowserMediaPlayerManager::FullscreenPlayerPause() {
MediaPlayerAndroid* player = GetFullscreenPlayer();
if (player) {
player->Pause(true);
- Send(new MediaPlayerMsg_DidMediaPlayerPause(
- routing_id(), fullscreen_player_id_));
+ Send(new MediaPlayerMsg_DidMediaPlayerPause(RoutingID(),
+ fullscreen_player_id_));
}
}
@@ -210,8 +182,8 @@ void BrowserMediaPlayerManager::ExitFullscreen(bool release_media_player) {
}
}
- Send(new MediaPlayerMsg_DidExitFullscreen(
- routing_id(), fullscreen_player_id_));
+ Send(
+ new MediaPlayerMsg_DidExitFullscreen(RoutingID(), fullscreen_player_id_));
video_view_.reset();
MediaPlayerAndroid* player = GetFullscreenPlayer();
fullscreen_player_id_ = -1;
@@ -225,8 +197,8 @@ void BrowserMediaPlayerManager::ExitFullscreen(bool release_media_player) {
void BrowserMediaPlayerManager::OnTimeUpdate(int player_id,
base::TimeDelta current_time) {
- Send(new MediaPlayerMsg_MediaTimeUpdate(
- routing_id(), player_id, current_time));
+ Send(
+ new MediaPlayerMsg_MediaTimeUpdate(RoutingID(), player_id, current_time));
}
void BrowserMediaPlayerManager::SetVideoSurface(
@@ -240,8 +212,7 @@ void BrowserMediaPlayerManager::SetVideoSurface(
if (empty_surface)
return;
- Send(new MediaPlayerMsg_DidEnterFullscreen(routing_id(),
- player->player_id()));
+ Send(new MediaPlayerMsg_DidEnterFullscreen(RoutingID(), player->player_id()));
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableOverlayFullscreenVideoSubtitle)) {
return;
@@ -259,27 +230,27 @@ void BrowserMediaPlayerManager::OnMediaMetadataChanged(
int player_id, base::TimeDelta duration, int width, int height,
bool success) {
Send(new MediaPlayerMsg_MediaMetadataChanged(
- routing_id(), player_id, duration, width, height, success));
+ RoutingID(), player_id, duration, width, height, success));
if (fullscreen_player_id_ == player_id)
video_view_->UpdateMediaMetadata();
}
void BrowserMediaPlayerManager::OnPlaybackComplete(int player_id) {
- Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id));
+ Send(new MediaPlayerMsg_MediaPlaybackCompleted(RoutingID(), player_id));
if (fullscreen_player_id_ == player_id)
video_view_->OnPlaybackComplete();
}
void BrowserMediaPlayerManager::OnMediaInterrupted(int player_id) {
// Tell WebKit that the audio should be paused, then release all resources
- Send(new MediaPlayerMsg_MediaPlayerReleased(routing_id(), player_id));
+ Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(), player_id));
OnReleaseResources(player_id);
}
void BrowserMediaPlayerManager::OnBufferingUpdate(
int player_id, int percentage) {
Send(new MediaPlayerMsg_MediaBufferingUpdate(
- routing_id(), player_id, percentage));
+ RoutingID(), player_id, percentage));
if (fullscreen_player_id_ == player_id)
video_view_->OnBufferingUpdate(percentage);
}
@@ -287,24 +258,28 @@ void BrowserMediaPlayerManager::OnBufferingUpdate(
void BrowserMediaPlayerManager::OnSeekRequest(
int player_id,
const base::TimeDelta& time_to_seek) {
- Send(new MediaPlayerMsg_SeekRequest(routing_id(), player_id, time_to_seek));
+ Send(new MediaPlayerMsg_SeekRequest(RoutingID(), player_id, time_to_seek));
+}
+
+void BrowserMediaPlayerManager::PauseVideo() {
+ Send(new MediaPlayerMsg_PauseVideo(RoutingID()));
}
void BrowserMediaPlayerManager::OnSeekComplete(
int player_id,
const base::TimeDelta& current_time) {
- Send(new MediaPlayerMsg_SeekCompleted(routing_id(), player_id, current_time));
+ Send(new MediaPlayerMsg_SeekCompleted(RoutingID(), player_id, current_time));
}
void BrowserMediaPlayerManager::OnError(int player_id, int error) {
- Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error));
+ Send(new MediaPlayerMsg_MediaError(RoutingID(), player_id, error));
if (fullscreen_player_id_ == player_id)
video_view_->OnMediaPlayerError(error);
}
void BrowserMediaPlayerManager::OnVideoSizeChanged(
int player_id, int width, int height) {
- Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id,
+ Send(new MediaPlayerMsg_MediaVideoSizeChanged(RoutingID(), player_id,
width, height));
if (fullscreen_player_id_ == player_id)
video_view_->OnVideoSizeChanged(width, height);
@@ -342,18 +317,14 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::GetPlayer(int player_id) {
return NULL;
}
-MediaDrmBridge* BrowserMediaPlayerManager::GetDrmBridge(int cdm_id) {
- for (ScopedVector<MediaDrmBridge>::iterator it = drm_bridges_.begin();
- it != drm_bridges_.end(); ++it) {
- if ((*it)->cdm_id() == cdm_id)
- return *it;
- }
- return NULL;
+MediaKeys* BrowserMediaPlayerManager::GetCdm(int cdm_id) {
+ CdmMap::const_iterator iter = cdm_map_.find(cdm_id);
+ return (iter == cdm_map_.end()) ? NULL : iter->second;
}
void BrowserMediaPlayerManager::DestroyAllMediaPlayers() {
players_.clear();
- drm_bridges_.clear();
+ STLDeleteValues(&cdm_map_);
if (fullscreen_player_id_ != -1) {
video_view_.reset();
fullscreen_player_id_ = -1;
@@ -369,15 +340,6 @@ void BrowserMediaPlayerManager::RequestFullScreen(int player_id) {
OnError(player_id, MediaPlayerAndroid::MEDIA_ERROR_DECODE);
return;
}
-
- // Send an IPC to the render process to request the video element to enter
- // fullscreen. OnEnterFullscreen() will be called later on success.
- // This guarantees the fullscreen video will be rendered correctly.
- // TODO(qinmin): make this flag default on android.
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableGestureRequirementForMediaFullscreen)) {
- Send(new MediaPlayerMsg_RequestFullscreen(routing_id(), player_id));
- }
}
// The following 5 functions are EME MediaKeySession events.
@@ -387,7 +349,7 @@ void BrowserMediaPlayerManager::OnSessionCreated(
uint32 session_id,
const std::string& web_session_id) {
Send(new CdmMsg_SessionCreated(
- routing_id(), cdm_id, session_id, web_session_id));
+ RoutingID(), cdm_id, session_id, web_session_id));
}
void BrowserMediaPlayerManager::OnSessionMessage(
@@ -395,16 +357,23 @@ void BrowserMediaPlayerManager::OnSessionMessage(
uint32 session_id,
const std::vector<uint8>& message,
const GURL& destination_url) {
+ GURL verified_gurl = destination_url;
+ if (!verified_gurl.is_valid() && !verified_gurl.is_empty()) {
+ DLOG(WARNING) << "SessionMessage destination_url is invalid : "
+ << destination_url.possibly_invalid_spec();
+ verified_gurl = GURL::EmptyGURL(); // Replace invalid destination_url.
+ }
+
Send(new CdmMsg_SessionMessage(
- routing_id(), cdm_id, session_id, message, destination_url));
+ RoutingID(), cdm_id, session_id, message, verified_gurl));
}
void BrowserMediaPlayerManager::OnSessionReady(int cdm_id, uint32 session_id) {
- Send(new CdmMsg_SessionReady(routing_id(), cdm_id, session_id));
+ Send(new CdmMsg_SessionReady(RoutingID(), cdm_id, session_id));
}
void BrowserMediaPlayerManager::OnSessionClosed(int cdm_id, uint32 session_id) {
- Send(new CdmMsg_SessionClosed(routing_id(), cdm_id, session_id));
+ Send(new CdmMsg_SessionClosed(RoutingID(), cdm_id, session_id));
}
void BrowserMediaPlayerManager::OnSessionError(
@@ -413,7 +382,7 @@ void BrowserMediaPlayerManager::OnSessionError(
media::MediaKeys::KeyError error_code,
uint32 system_code) {
Send(new CdmMsg_SessionError(
- routing_id(), cdm_id, session_id, error_code, system_code));
+ RoutingID(), cdm_id, session_id, error_code, system_code));
}
#if defined(VIDEO_HOLE)
@@ -497,8 +466,8 @@ void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) {
// TODO(qinmin): There is no need to send DidEnterFullscreen message.
// However, if we don't send the message, page layers will not be
// correctly restored. http:crbug.com/367346.
- Send(new MediaPlayerMsg_DidEnterFullscreen(routing_id(), player_id));
- Send(new MediaPlayerMsg_DidExitFullscreen(routing_id(), player_id));
+ Send(new MediaPlayerMsg_DidEnterFullscreen(RoutingID(), player_id));
+ Send(new MediaPlayerMsg_DidExitFullscreen(RoutingID(), player_id));
video_view_.reset();
}
@@ -591,17 +560,12 @@ void BrowserMediaPlayerManager::OnInitializeCdm(int cdm_id,
const GURL& security_origin) {
if (key_system.size() > kMaxKeySystemLength) {
// This failure will be discovered and reported by OnCreateSession()
- // as GetDrmBridge() will return null.
+ // as GetCdm() will return null.
NOTREACHED() << "Invalid key system: " << key_system;
return;
}
- if (!MediaDrmBridge::IsKeySystemSupported(key_system)) {
- NOTREACHED() << "Unsupported key system: " << key_system;
- return;
- }
-
- AddDrmBridge(cdm_id, key_system, security_origin);
+ AddCdm(cdm_id, key_system, security_origin);
}
void BrowserMediaPlayerManager::OnCreateSession(
@@ -639,9 +603,9 @@ void BrowserMediaPlayerManager::OnCreateSession(
return;
}
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge) {
- DLOG(WARNING) << "No MediaDrmBridge for ID: " << cdm_id << " found";
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm) {
+ DLOG(WARNING) << "No CDM for ID " << cdm_id << " found";
OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
@@ -649,12 +613,18 @@ void BrowserMediaPlayerManager::OnCreateSession(
BrowserContext* context =
web_contents()->GetRenderProcessHost()->GetBrowserContext();
+ std::map<int, GURL>::const_iterator iter =
+ cdm_security_origin_map_.find(cdm_id);
+ if (iter == cdm_security_origin_map_.end()) {
+ NOTREACHED();
+ OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
+ return;
+ }
+
context->RequestProtectedMediaIdentifierPermission(
web_contents()->GetRenderProcessHost()->GetID(),
web_contents()->GetRenderViewHost()->GetRoutingID(),
- static_cast<int>(session_id),
- cdm_id,
- drm_bridge->security_origin(),
+ iter->second,
base::Bind(&BrowserMediaPlayerManager::CreateSessionIfPermitted,
weak_ptr_factory_.GetWeakPtr(),
cdm_id,
@@ -667,24 +637,24 @@ void BrowserMediaPlayerManager::OnUpdateSession(
int cdm_id,
uint32 session_id,
const std::vector<uint8>& response) {
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge) {
- DLOG(WARNING) << "No MediaDrmBridge for ID: " << cdm_id << " found";
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm) {
+ DLOG(WARNING) << "No CDM for ID " << cdm_id << " found";
OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
if (response.size() > kMaxSessionResponseLength) {
- LOG(WARNING) << "Response for ID: " << cdm_id
- << " too long: " << response.size();
+ LOG(WARNING) << "Response for ID " << cdm_id
+ << " is too long: " << response.size();
OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
- drm_bridge->UpdateSession(session_id, &response[0], response.size());
+ cdm->UpdateSession(session_id, &response[0], response.size());
- DrmBridgePlayerMap::const_iterator iter = drm_bridge_player_map_.find(cdm_id);
- if (iter == drm_bridge_player_map_.end())
+ CdmToPlayerMap::const_iterator iter = cdm_to_player_map_.find(cdm_id);
+ if (iter == cdm_to_player_map_.end())
return;
int player_id = iter->second;
@@ -695,28 +665,36 @@ void BrowserMediaPlayerManager::OnUpdateSession(
void BrowserMediaPlayerManager::OnReleaseSession(int cdm_id,
uint32 session_id) {
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge) {
- DLOG(WARNING) << "No MediaDrmBridge for ID: " << cdm_id << " found";
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm) {
+ DLOG(WARNING) << "No CDM for ID " << cdm_id << " found";
OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
- drm_bridge->ReleaseSession(session_id);
+ cdm->ReleaseSession(session_id);
}
void BrowserMediaPlayerManager::OnDestroyCdm(int cdm_id) {
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge) return;
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm)
+ return;
CancelAllPendingSessionCreations(cdm_id);
- RemoveDrmBridge(cdm_id);
+ RemoveCdm(cdm_id);
}
void BrowserMediaPlayerManager::CancelAllPendingSessionCreations(int cdm_id) {
BrowserContext* context =
web_contents()->GetRenderProcessHost()->GetBrowserContext();
- context->CancelProtectedMediaIdentifierPermissionRequests(cdm_id);
+ std::map<int, GURL>::const_iterator iter =
+ cdm_security_origin_map_.find(cdm_id);
+ if (iter == cdm_security_origin_map_.end())
+ return;
+ context->CancelProtectedMediaIdentifierPermissionRequests(
+ web_contents()->GetRenderProcessHost()->GetID(),
+ web_contents()->GetRenderViewHost()->GetRoutingID(),
+ iter->second);
}
void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) {
@@ -734,10 +712,11 @@ void BrowserMediaPlayerManager::RemovePlayer(int player_id) {
}
}
- for (DrmBridgePlayerMap::iterator it = drm_bridge_player_map_.begin();
- it != drm_bridge_player_map_.end(); ++it) {
+ for (CdmToPlayerMap::iterator it = cdm_to_player_map_.begin();
+ it != cdm_to_player_map_.end();
+ ++it) {
if (it->second == player_id) {
- drm_bridge_player_map_.erase(it);
+ cdm_to_player_map_.erase(it);
break;
}
}
@@ -758,64 +737,78 @@ scoped_ptr<media::MediaPlayerAndroid> BrowserMediaPlayerManager::SwapPlayer(
return scoped_ptr<media::MediaPlayerAndroid>(previous_player);
}
-void BrowserMediaPlayerManager::AddDrmBridge(int cdm_id,
- const std::string& key_system,
- const GURL& security_origin) {
- DCHECK(!GetDrmBridge(cdm_id));
-
- scoped_ptr<MediaDrmBridge> drm_bridge(
- MediaDrmBridge::Create(cdm_id, key_system, security_origin, this));
- if (!drm_bridge) {
+void BrowserMediaPlayerManager::AddCdm(int cdm_id,
+ const std::string& key_system,
+ const GURL& security_origin) {
+ DCHECK(!GetCdm(cdm_id));
+ base::WeakPtr<BrowserMediaPlayerManager> weak_this =
+ weak_ptr_factory_.GetWeakPtr();
+
+ scoped_ptr<MediaKeys> cdm(media::CreateBrowserCdm(
+ key_system,
+ base::Bind(
+ &BrowserMediaPlayerManager::OnSessionCreated, weak_this, cdm_id),
+ base::Bind(
+ &BrowserMediaPlayerManager::OnSessionMessage, weak_this, cdm_id),
+ base::Bind(
+ &BrowserMediaPlayerManager::OnSessionReady, weak_this, cdm_id),
+ base::Bind(
+ &BrowserMediaPlayerManager::OnSessionClosed, weak_this, cdm_id),
+ base::Bind(
+ &BrowserMediaPlayerManager::OnSessionError, weak_this, cdm_id)));
+
+ if (!cdm) {
// This failure will be discovered and reported by OnCreateSession()
- // as GetDrmBridge() will return null.
- DVLOG(1) << "failed to create drm bridge.";
- return;
- }
-
- // TODO(xhwang/ddorwin): Pass the security level from key system.
- MediaDrmBridge::SecurityLevel security_level =
- MediaDrmBridge::SECURITY_LEVEL_3;
- if (CommandLine::ForCurrentProcess()
- ->HasSwitch(switches::kMediaDrmEnableNonCompositing)) {
- security_level = MediaDrmBridge::SECURITY_LEVEL_1;
- }
- if (!drm_bridge->SetSecurityLevel(security_level)) {
- DVLOG(1) << "failed to set security level " << security_level;
+ // as GetCdm() will return null.
+ DVLOG(1) << "failed to create CDM.";
return;
}
- drm_bridges_.push_back(drm_bridge.release());
+ cdm_map_[cdm_id] = cdm.release();
+ cdm_security_origin_map_[cdm_id] = security_origin;
}
-void BrowserMediaPlayerManager::RemoveDrmBridge(int cdm_id) {
- // TODO(xhwang): Detach DrmBridge from the player it's set to. In prefixed
+void BrowserMediaPlayerManager::RemoveCdm(int cdm_id) {
+ // TODO(xhwang): Detach CDM from the player it's set to. In prefixed
// EME implementation the current code is fine because we always destroy the
// player before we destroy the DrmBridge. This will not always be the case
// in unprefixed EME implementation.
- for (ScopedVector<MediaDrmBridge>::iterator it = drm_bridges_.begin();
- it != drm_bridges_.end(); ++it) {
- if ((*it)->cdm_id() == cdm_id) {
- drm_bridges_.erase(it);
- drm_bridge_player_map_.erase(cdm_id);
- break;
- }
+ CdmMap::iterator iter = cdm_map_.find(cdm_id);
+ if (iter != cdm_map_.end()) {
+ delete iter->second;
+ cdm_map_.erase(iter);
}
+ cdm_to_player_map_.erase(cdm_id);
+ cdm_security_origin_map_.erase(cdm_id);
}
void BrowserMediaPlayerManager::OnSetCdm(int player_id, int cdm_id) {
MediaPlayerAndroid* player = GetPlayer(player_id);
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge || !player) {
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm || !player) {
DVLOG(1) << "Cannot set CDM on the specified player.";
return;
}
// TODO(qinmin): add the logic to decide whether we should create the
// fullscreen surface for EME lv1.
- player->SetDrmBridge(drm_bridge);
+ player->SetCdm(cdm);
// Do now support setting one CDM on multiple players.
- DCHECK(drm_bridge_player_map_.find(cdm_id) == drm_bridge_player_map_.end());
- drm_bridge_player_map_[cdm_id] = player_id;
+
+ if (ContainsKey(cdm_to_player_map_, cdm_id)) {
+ DVLOG(1) << "CDM is already set on another player.";
+ return;
+ }
+
+ cdm_to_player_map_[cdm_id] = player_id;
+}
+
+int BrowserMediaPlayerManager::RoutingID() {
+ return render_frame_host_->GetRoutingID();
+}
+
+bool BrowserMediaPlayerManager::Send(IPC::Message* msg) {
+ return render_frame_host_->Send(msg);
}
void BrowserMediaPlayerManager::CreateSessionIfPermitted(
@@ -829,16 +822,15 @@ void BrowserMediaPlayerManager::CreateSessionIfPermitted(
return;
}
- MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id);
- if (!drm_bridge) {
- DLOG(WARNING) << "No MediaDrmBridge for ID: " << cdm_id << " found";
+ MediaKeys* cdm = GetCdm(cdm_id);
+ if (!cdm) {
+ DLOG(WARNING) << "No CDM for ID: " << cdm_id << " found";
OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
return;
}
// This could fail, in which case a SessionError will be fired.
- drm_bridge->CreateSession(
- session_id, content_type, &init_data[0], init_data.size());
+ cdm->CreateSession(session_id, content_type, &init_data[0], init_data.size());
}
void BrowserMediaPlayerManager::ReleaseFullscreenPlayer(
@@ -868,8 +860,8 @@ void BrowserMediaPlayerManager::OnMediaResourcesRequested(int player_id) {
if ((*it)->IsPlayerReady() && !(*it)->IsPlaying() &&
fullscreen_player_id_ != (*it)->player_id()) {
(*it)->Release();
- Send(new MediaPlayerMsg_MediaPlayerReleased(
- routing_id(), (*it)->player_id()));
+ Send(new MediaPlayerMsg_MediaPlayerReleased(RoutingID(),
+ (*it)->player_id()));
}
}
}
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h
index 308ed02f5b..8e69623154 100644
--- a/content/browser/media/android/browser_media_player_manager.h
+++ b/content/browser/media/android/browser_media_player_manager.h
@@ -16,9 +16,10 @@
#include "base/memory/scoped_vector.h"
#include "base/time/time.h"
#include "content/browser/android/content_video_view.h"
+#include "content/common/content_export.h"
#include "content/common/media/cdm_messages_enums.h"
#include "content/common/media/media_player_messages_enums_android.h"
-#include "content/public/browser/web_contents_observer.h"
+#include "ipc/ipc_message.h"
#include "media/base/android/media_player_android.h"
#include "media/base/android/media_player_manager.h"
#include "ui/gfx/rect_f.h"
@@ -26,38 +27,35 @@
namespace media {
class DemuxerAndroid;
-class MediaDrmBridge;
+class MediaKeys;
}
namespace content {
class BrowserDemuxerAndroid;
class ContentViewCoreImpl;
class ExternalVideoSurfaceContainer;
+class RenderFrameHost;
class WebContents;
-// This class manages all the MediaPlayerAndroid objects. It receives
-// control operations from the the render process, and forwards
-// them to corresponding MediaPlayerAndroid object. Callbacks from
-// MediaPlayerAndroid objects are converted to IPCs and then sent to the
-// render process.
+// This class manages all the MediaPlayerAndroid and CDM objects.
+// It receives control operations from the the render process, and forwards
+// them to corresponding MediaPlayerAndroid or CDM object. Callbacks from
+// MediaPlayerAndroid and CDM objects are converted to IPCs and then sent to
+// the render process.
class CONTENT_EXPORT BrowserMediaPlayerManager
- : public WebContentsObserver,
- public media::MediaPlayerManager {
+ : public media::MediaPlayerManager {
public:
// Permits embedders to provide an extended version of the class.
- typedef BrowserMediaPlayerManager* (*Factory)(RenderViewHost*);
+ typedef BrowserMediaPlayerManager* (*Factory)(RenderFrameHost*);
static void RegisterFactory(Factory factory);
// Returns a new instance using the registered factory if available.
- static BrowserMediaPlayerManager* Create(RenderViewHost* rvh);
+ static BrowserMediaPlayerManager* Create(RenderFrameHost* rfh);
ContentViewCoreImpl* GetContentViewCore() const;
virtual ~BrowserMediaPlayerManager();
- // WebContentsObserver overrides.
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
-
// Fullscreen video playback controls.
virtual void FullscreenPlayerPlay();
virtual void FullscreenPlayerPause();
@@ -69,6 +67,9 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
// Any actual seek started by renderer will be handled by browser in OnSeek().
void OnSeekRequest(int player_id, const base::TimeDelta& time_to_seek);
+ // Pauses all video players manages by this class.
+ void PauseVideo();
+
// media::MediaPlayerManager overrides.
virtual void OnTimeUpdate(
int player_id, base::TimeDelta current_time) OVERRIDE;
@@ -90,7 +91,7 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
virtual media::MediaResourceGetter* GetMediaResourceGetter() OVERRIDE;
virtual media::MediaPlayerAndroid* GetFullscreenPlayer() OVERRIDE;
virtual media::MediaPlayerAndroid* GetPlayer(int player_id) OVERRIDE;
- virtual media::MediaDrmBridge* GetDrmBridge(int cdm_id) OVERRIDE;
+ virtual media::MediaKeys* GetCdm(int cdm_id) OVERRIDE;
virtual void DestroyAllMediaPlayers() OVERRIDE;
virtual void RequestFullScreen(int player_id) OVERRIDE;
virtual void OnSessionCreated(int cdm_id,
@@ -113,10 +114,6 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
void OnFrameInfoUpdated();
#endif // defined(VIDEO_HOLE)
- protected:
- // Clients must use Create() or subclass constructor.
- explicit BrowserMediaPlayerManager(RenderViewHost* render_view_host);
-
// Message handlers.
virtual void OnEnterFullscreen(int player_id);
virtual void OnExitFullscreen(int player_id);
@@ -147,6 +144,16 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
void OnReleaseSession(int cdm_id, uint32 session_id);
void OnSetCdm(int player_id, int cdm_id);
void OnDestroyCdm(int cdm_id);
+#if defined(VIDEO_HOLE)
+ void OnNotifyExternalSurface(
+ int player_id, bool is_request, const gfx::RectF& rect);
+#endif // defined(VIDEO_HOLE)
+
+ protected:
+ // Clients must use Create() or subclass constructor.
+ explicit BrowserMediaPlayerManager(RenderFrameHost* render_frame_host);
+
+ WebContents* web_contents() const { return web_contents_; }
// Cancels all pending session creations associated with |cdm_id|.
void CancelAllPendingSessionCreations(int cdm_id);
@@ -164,14 +171,19 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
int player_id,
media::MediaPlayerAndroid* player);
- // Adds a new MediaDrmBridge for the given |key_system|, |cdm_id|, and
- // |frame_url|.
- void AddDrmBridge(int cdm_id,
- const std::string& key_system,
- const GURL& frame_url);
+ // Adds a new CDM identified by |cdm_id| for the given |key_system| and
+ // |security_origin|.
+ void AddCdm(int cdm_id,
+ const std::string& key_system,
+ const GURL& security_origin);
+
+ // Removes the CDM with the specified id.
+ void RemoveCdm(int cdm_id);
+
+ int RoutingID();
- // Removes the DRM bridge with the specified id.
- void RemoveDrmBridge(int cdm_id);
+ // Helper function to send messages to RenderFrameObserver.
+ bool Send(IPC::Message* msg);
private:
// If |permitted| is false, it does nothing but send
@@ -208,21 +220,27 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
virtual void OnMediaResourcesReleased(int player_id);
#if defined(VIDEO_HOLE)
- void OnNotifyExternalSurface(
- int player_id, bool is_request, const gfx::RectF& rect);
void OnRequestExternalSurface(int player_id, const gfx::RectF& rect);
#endif // defined(VIDEO_HOLE)
+ RenderFrameHost* const render_frame_host_;
+
// An array of managed players.
ScopedVector<media::MediaPlayerAndroid> players_;
- // An array of managed media DRM bridges.
- ScopedVector<media::MediaDrmBridge> drm_bridges_;
+ // A map from CDM IDs to managed CDMs.
+ typedef std::map<int, media::MediaKeys*> CdmMap;
+ CdmMap cdm_map_;
+
+ // Map from CDM ID to MediaPlayerAndroid player ID to indicate that
+ // the CDM is set on the MediaPlayerAndroid object.
+ // TODO(xhwang): Register a callback in the CDM to resume playback so that we
+ // can remove this map. See http://crbug.com/373327
+ typedef std::map<int, int> CdmToPlayerMap;
+ CdmToPlayerMap cdm_to_player_map_;
- // Map from DrmBridge cdm_id to MediaPlayerAndroid player_id to indicate that
- // the DrmBridge is set on the MediaPlayerAndroid object.
- typedef std::map<int, int> DrmBridgePlayerMap;
- DrmBridgePlayerMap drm_bridge_player_map_;
+ // Map from CDM ID to CDM's security origin.
+ std::map<int, GURL> cdm_security_origin_map_;
// The fullscreen video view object or NULL if video is not played in
// fullscreen.
@@ -238,7 +256,7 @@ class CONTENT_EXPORT BrowserMediaPlayerManager
// Whether the fullscreen player has been Release()-d.
bool fullscreen_player_is_released_;
- WebContents* web_contents_;
+ WebContents* const web_contents_;
// Object for retrieving resources media players.
scoped_ptr<media::MediaResourceGetter> media_resource_getter_;
diff --git a/content/browser/media/android/media_drm_credential_manager.cc b/content/browser/media/android/media_drm_credential_manager.cc
index 0fb86184fb..23c6cf2cec 100644
--- a/content/browser/media/android/media_drm_credential_manager.cc
+++ b/content/browser/media/android/media_drm_credential_manager.cc
@@ -90,7 +90,7 @@ void MediaDrmCredentialManager::OnResetCredentialsCompleted(
bool MediaDrmCredentialManager::ResetCredentialsInternal(
SecurityLevel security_level) {
media_drm_bridge_ =
- media::MediaDrmBridge::Create(0, kWidevineKeySystem, GURL(), NULL);
+ media::MediaDrmBridge::CreateSessionless(kWidevineKeySystem);
if (!media_drm_bridge_)
return false;
diff --git a/content/browser/media/android/media_resource_getter_impl.cc b/content/browser/media/android/media_resource_getter_impl.cc
index 70f6d9b62e..bcf293d925 100644
--- a/content/browser/media/android/media_resource_getter_impl.cc
+++ b/content/browser/media/android/media_resource_getter_impl.cc
@@ -237,14 +237,14 @@ void MediaResourceGetterImpl::GetCookiesCallback(
void MediaResourceGetterImpl::GetPlatformPathFromURL(
const GURL& url, const GetPlatformPathCB& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(url.SchemeIsFileSystem() || url.SchemeIs(kBlobScheme));
+ DCHECK(url.SchemeIsFileSystem() || url.SchemeIs(url::kBlobScheme));
GetPlatformPathCB cb =
base::Bind(&MediaResourceGetterImpl::GetPlatformPathCallback,
weak_factory_.GetWeakPtr(),
callback);
- if (url.SchemeIs(kBlobScheme)) {
+ if (url.SchemeIs(url::kBlobScheme)) {
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
diff --git a/content/browser/media/android/media_web_contents_observer.cc b/content/browser/media/android/media_web_contents_observer.cc
new file mode 100644
index 0000000000..711375c250
--- /dev/null
+++ b/content/browser/media/android/media_web_contents_observer.cc
@@ -0,0 +1,131 @@
+// 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 "content/browser/media/android/media_web_contents_observer.h"
+
+#include "base/stl_util.h"
+#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/common/media/cdm_messages.h"
+#include "content/common/media/media_player_messages_android.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+#include "ipc/ipc_message_macros.h"
+
+namespace content {
+
+MediaWebContentsObserver::MediaWebContentsObserver(
+ RenderViewHost* render_view_host)
+ : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)) {
+}
+
+MediaWebContentsObserver::~MediaWebContentsObserver() {
+}
+
+void MediaWebContentsObserver::RenderFrameDeleted(
+ RenderFrameHost* render_frame_host) {
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
+ media_player_managers_.erase(key);
+}
+
+bool MediaWebContentsObserver::OnMessageReceived(
+ const IPC::Message& msg,
+ RenderFrameHost* render_frame_host) {
+ BrowserMediaPlayerManager* player_manager =
+ GetMediaPlayerManager(render_frame_host);
+ DCHECK(player_manager);
+
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserver, msg)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_EnterFullscreen,
+ player_manager,
+ BrowserMediaPlayerManager::OnEnterFullscreen)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_ExitFullscreen,
+ player_manager,
+ BrowserMediaPlayerManager::OnExitFullscreen)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Initialize,
+ player_manager,
+ BrowserMediaPlayerManager::OnInitialize)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Start,
+ player_manager,
+ BrowserMediaPlayerManager::OnStart)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Seek,
+ player_manager,
+ BrowserMediaPlayerManager::OnSeek)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Pause,
+ player_manager,
+ BrowserMediaPlayerManager::OnPause)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetVolume,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetVolume)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetPoster,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetPoster)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Release,
+ player_manager,
+ BrowserMediaPlayerManager::OnReleaseResources)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_DestroyMediaPlayer,
+ player_manager,
+ BrowserMediaPlayerManager::OnDestroyPlayer)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_DestroyAllMediaPlayers,
+ player_manager,
+ BrowserMediaPlayerManager::DestroyAllMediaPlayers)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetCdm)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_InitializeCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnInitializeCdm)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_CreateSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnCreateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_UpdateSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnUpdateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_ReleaseSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnReleaseSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_DestroyCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnDestroyCdm)
+#if defined(VIDEO_HOLE)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_NotifyExternalSurface,
+ player_manager,
+ BrowserMediaPlayerManager::OnNotifyExternalSurface)
+#endif // defined(VIDEO_HOLE)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+BrowserMediaPlayerManager* MediaWebContentsObserver::GetMediaPlayerManager(
+ RenderFrameHost* render_frame_host) {
+ uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
+ if (!media_player_managers_.contains(key)) {
+ media_player_managers_.set(
+ key,
+ scoped_ptr<BrowserMediaPlayerManager>(
+ BrowserMediaPlayerManager::Create(render_frame_host)));
+ }
+ return media_player_managers_.get(key);
+}
+
+void MediaWebContentsObserver::PauseVideo() {
+ for (MediaPlayerManagerMap::iterator iter = media_player_managers_.begin();
+ iter != media_player_managers_.end(); ++iter) {
+ BrowserMediaPlayerManager* manager = iter->second;
+ manager->PauseVideo();
+ }
+}
+
+#if defined(VIDEO_HOLE)
+void MediaWebContentsObserver::OnFrameInfoUpdated() {
+ for (MediaPlayerManagerMap::iterator iter = media_player_managers_.begin();
+ iter != media_player_managers_.end(); ++iter) {
+ BrowserMediaPlayerManager* manager = iter->second;
+ manager->OnFrameInfoUpdated();
+ }
+}
+#endif // defined(VIDEO_HOLE)
+
+} // namespace content
diff --git a/content/browser/media/android/media_web_contents_observer.h b/content/browser/media/android/media_web_contents_observer.h
new file mode 100644
index 0000000000..126bbfb43e
--- /dev/null
+++ b/content/browser/media/android/media_web_contents_observer.h
@@ -0,0 +1,55 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
+#define CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
+
+#include "base/compiler_specific.h"
+#include "base/containers/scoped_ptr_hash_map.h"
+#include "content/common/content_export.h"
+#include "content/public/browser/web_contents_observer.h"
+
+namespace content {
+
+class BrowserMediaPlayerManager;
+class RenderViewHost;
+
+// This class manages all RenderFrame based media related managers at the
+// browser side. It receives IPC messages from media RenderFrameObservers and
+// forwards them to the corresponding managers. The managers are responsible
+// for sending IPCs back to the RenderFrameObservers at the render side.
+class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver {
+ public:
+ explicit MediaWebContentsObserver(RenderViewHost* render_view_host);
+ virtual ~MediaWebContentsObserver();
+
+ // WebContentsObserver implementations.
+ virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host) OVERRIDE;
+
+ // Gets the media player manager associated with |render_frame_host|. Creates
+ // a new one if it doesn't exist. The caller doesn't own the returned pointer.
+ BrowserMediaPlayerManager* GetMediaPlayerManager(
+ RenderFrameHost* render_frame_host);
+
+ // Pauses all media player.
+ void PauseVideo();
+
+#if defined(VIDEO_HOLE)
+ void OnFrameInfoUpdated();
+#endif // defined(VIDEO_HOLE)
+
+ private:
+ // Map from RenderFrameHost* to BrowserMediaPlayerManager.
+ typedef base::ScopedPtrHashMap<uintptr_t, BrowserMediaPlayerManager>
+ MediaPlayerManagerMap;
+ MediaPlayerManagerMap media_player_managers_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaWebContentsObserver);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_WEB_CONTENTS_OBSERVER_H_
diff --git a/content/browser/media/capture/desktop_capture_device_aura.cc b/content/browser/media/capture/desktop_capture_device_aura.cc
index 1da4604309..432a185401 100644
--- a/content/browser/media/capture/desktop_capture_device_aura.cc
+++ b/content/browser/media/capture/desktop_capture_device_aura.cc
@@ -19,6 +19,7 @@
#include "media/video/capture/video_capture_types.h"
#include "skia/ext/image_operations.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/aura/client/screen_position_client.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
@@ -458,6 +459,8 @@ gfx::Point DesktopVideoCaptureMachine::UpdateCursorState(
}
gfx::Point cursor_position = aura::Env::GetInstance()->last_mouse_location();
+ aura::client::GetScreenPositionClient(desktop_window_->GetRootWindow())->
+ ConvertPointFromScreen(desktop_window_, &cursor_position);
const gfx::Point hot_point_in_dip = ui::ConvertPointToDIP(
desktop_layer_, cursor_hot_point_);
cursor_position.Offset(-desktop_bounds.x() - hot_point_in_dip.x(),
diff --git a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc
index 608c574c8f..3cfccf0de5 100644
--- a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc
@@ -63,9 +63,10 @@ class DesktopCaptureDeviceAuraTest : public testing::Test {
virtual void SetUp() OVERRIDE {
// The ContextFactory must exist before any Compositors are created.
bool enable_pixel_output = false;
- ui::InitializeContextFactoryForTests(enable_pixel_output);
+ ui::ContextFactory* context_factory =
+ ui::InitializeContextFactoryForTests(enable_pixel_output);
helper_.reset(new aura::test::AuraTestHelper(&message_loop_));
- helper_->SetUp();
+ helper_->SetUp(context_factory);
new wm::DefaultActivationClient(helper_->root_window());
// We need a window to cover desktop area so that DesktopCaptureDeviceAura
diff --git a/content/browser/media/capture/web_contents_video_capture_device.cc b/content/browser/media/capture/web_contents_video_capture_device.cc
index 0e5347cb50..8a8474c278 100644
--- a/content/browser/media/capture/web_contents_video_capture_device.cc
+++ b/content/browser/media/capture/web_contents_video_capture_device.cc
@@ -422,8 +422,7 @@ void ContentCaptureSubscription::Observe(
// signals of a new frame on Mac.
// http://crbug.com/333986
#if !defined(OS_MACOSX)
- if (rwh->is_accelerated_compositing_active() &&
- rwh->GetView()->IsSurfaceAvailableForCopy())
+ if (rwh->GetView()->IsSurfaceAvailableForCopy())
return;
#endif
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index 398039ab37..87d9969130 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -9,45 +9,43 @@
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
-const char* kProbably = "probably";
-const char* kMaybe = "maybe";
-const char* kNot = "";
+#if defined(OS_ANDROID)
+#include "base/android/build_info.h"
+#endif
+
+const char kProbably[] = "probably";
+const char kMaybe[] = "maybe";
+const char kNot[] = "";
#if defined(USE_PROPRIETARY_CODECS)
-const char* kPropProbably = "probably";
-const char* kPropMaybe = "maybe";
+const char kPropProbably[] = "probably";
+const char kPropMaybe[] = "maybe";
#else
-const char* kPropProbably = "";
-const char* kPropMaybe = "";
+const char kPropProbably[] = "";
+const char kPropMaybe[] = "";
#endif // USE_PROPRIETARY_CODECS
// TODO(amogh.bihani): Change the opus tests when opus is on
// Android. (http://crbug.com/318436).
#if !defined(OS_ANDROID)
-const char* kOggVideoProbably = "probably";
-const char* kOggVideoMaybe = "maybe";
-const char* kTheoraProbably = "probably";
-const char* kOpusProbably = "probably";
-const char* kOpusProbablyElseMaybe = "probably";
-const char* kHLSProbably = "";
-const char* kHLSMaybe = "";
+const char kOggVideoProbably[] = "probably";
+const char kOggVideoMaybe[] = "maybe";
+const char kTheoraProbably[] = "probably";
+const char kOpusProbably[] = "probably";
#if defined(USE_PROPRIETARY_CODECS)
-const char* kTheoraAndPropProbably = "probably";
-const char* kOpusAndPropProbably = "probably";
+const char kTheoraAndPropProbably[] = "probably";
+const char kOpusAndPropProbably[] = "probably";
#else
-const char* kTheoraAndPropProbably = "";
-const char* kOpusAndPropProbably = "";
+const char kTheoraAndPropProbably[] = "";
+const char kOpusAndPropProbably[] = "";
#endif // USE_PROPRIETARY_CODECS
#else
-const char* kOggVideoProbably = "";
-const char* kOggVideoMaybe = "";
-const char* kTheoraProbably = "maybe";
-const char* kOpusProbably = "";
-const char* kOpusProbablyElseMaybe = "maybe";
-const char* kTheoraAndPropProbably = "maybe";
-const char* kOpusAndPropProbably = "maybe";
-const char* kHLSProbably = "probably";
-const char* kHLSMaybe = "maybe";
+const char kOggVideoProbably[] = "";
+const char kOggVideoMaybe[] = "";
+const char kTheoraProbably[] = "";
+const char kOpusProbably[] = "";
+const char kTheoraAndPropProbably[] = "maybe";
+const char kOpusAndPropProbably[] = "maybe";
#endif // !OS_ANDROID
namespace content {
@@ -78,9 +76,6 @@ private:
DISALLOW_COPY_AND_ASSIGN(MediaCanPlayTypeTest);
};
-// TODO(amogh.bihani): http://crbug.com/357665
-#if !defined(OS_ANDROID)
-
IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) {
EXPECT_EQ(kMaybe, CanPlay("'audio/wav'"));
EXPECT_EQ(kProbably, CanPlay("'audio/wav; codecs=\"1\"'"));
@@ -142,6 +137,14 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_wav) {
}
IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_webm) {
+ // On Android, VP9 is supported only on KitKat and above (API level 19).
+ std::string VP9Probably = "probably";
+ std::string VP9AndOpusProbably = "probably";
+#if defined(OS_ANDROID)
+ VP9AndOpusProbably = "";
+ if (base::android::BuildInfo::GetInstance()->sdk_int() < 19)
+ VP9Probably = "";
+#endif
EXPECT_EQ(kMaybe, CanPlay("'video/webm'"));
EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8\"'"));
@@ -151,15 +154,16 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_webm) {
EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8, opus\"'"));
EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp8.0, opus\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9, vorbis\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp9.0, vorbis\"'"));
- EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9, opus\"'"));
- EXPECT_EQ(kOpusProbably, CanPlay("'video/webm; codecs=\"vp9.0, opus\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9.0\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9, vorbis\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp9.0, vorbis\"'"));
+ EXPECT_EQ(VP9AndOpusProbably, CanPlay("'video/webm; codecs=\"vp9, opus\"'"));
+ EXPECT_EQ(VP9AndOpusProbably,
+ CanPlay("'video/webm; codecs=\"vp9.0, opus\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8, vp9\"'"));
- EXPECT_EQ(kProbably, CanPlay("'video/webm; codecs=\"vp8.0, vp9.0\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp8, vp9\"'"));
+ EXPECT_EQ(VP9Probably, CanPlay("'video/webm; codecs=\"vp8.0, vp9.0\"'"));
EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8, theora\"'"));
EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp8, avc1\"'"));
EXPECT_EQ(kNot, CanPlay("'video/webm; codecs=\"vp9, avc3\"'"));
@@ -274,9 +278,8 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_ogg) {
EXPECT_EQ(kMaybe, CanPlay("'audio/ogg'"));
EXPECT_EQ(kProbably, CanPlay("'audio/ogg; codecs=\"vorbis\"'"));
- EXPECT_EQ(kOpusProbablyElseMaybe, CanPlay("'audio/ogg; codecs=\"opus\"'"));
- EXPECT_EQ(kOpusProbablyElseMaybe,
- CanPlay("'audio/ogg; codecs=\"vorbis, opus\"'"));
+ EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"opus\"'"));
+ EXPECT_EQ(kOpusProbably, CanPlay("'audio/ogg; codecs=\"vorbis, opus\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/ogg; codecs=\"theora\"'"));
EXPECT_EQ(kNot, CanPlay("'audio/ogg; codecs=\"theora, vorbis\"'"));
@@ -307,13 +310,12 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_ogg) {
EXPECT_EQ(kMaybe, CanPlay("'application/ogg'"));
EXPECT_EQ(kProbably, CanPlay("'application/ogg; codecs=\"vorbis\"'"));
EXPECT_EQ(kTheoraProbably, CanPlay("'application/ogg; codecs=\"theora\"'"));
- EXPECT_EQ(kOpusProbablyElseMaybe,
- CanPlay("'application/ogg; codecs=\"opus\"'"));
+ EXPECT_EQ(kOpusProbably, CanPlay("'application/ogg; codecs=\"opus\"'"));
EXPECT_EQ(kTheoraProbably,
CanPlay("'application/ogg; codecs=\"theora, vorbis\"'"));
EXPECT_EQ(kTheoraProbably,
CanPlay("'application/ogg; codecs=\"theora, opus\"'"));
- EXPECT_EQ(kOpusProbablyElseMaybe,
+ EXPECT_EQ(kOpusProbably,
CanPlay("'application/ogg; codecs=\"opus, vorbis\"'"));
EXPECT_EQ(kNot, CanPlay("'application/ogg; codecs=\"vp8\"'"));
@@ -498,6 +500,18 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp3) {
}
IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
+ // TODO(amogh.bihani): Change this expectation when bug 53193 is fixed.
+ std::string PropAndVP9Probably = "";
+#if defined (OS_ANDROID)
+ if (base::android::BuildInfo::GetInstance()->sdk_int() < 19)
+ PropAndVP9Probably = "maybe";
+ else
+ PropAndVP9Probably = "probably";
+#else
+#if defined(USE_PROPRIETARY_CODECS)
+ PropAndVP9Probably = "probably";
+#endif // USE_PROPRIETARY_CODECS
+#endif // OS_ANDROID
EXPECT_EQ(kPropMaybe, CanPlay("'video/mp4'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1\"'"));
@@ -526,7 +540,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"mp4a.\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vp8\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vp9\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'video/mp4; codecs=\"vp9\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"vorbis\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/mp4; codecs=\"avc1, vorbis\"'"));
@@ -607,7 +621,7 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"mp4a.\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"vp8\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"vp9\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'video/x-m4v; codecs=\"vp9\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"vorbis\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'video/x-m4v; codecs=\"avc1, vorbis\"'"));
@@ -698,8 +712,8 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp8\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp8.0\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp9\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'audio/mp4; codecs=\"vp9.0\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'audio/mp4; codecs=\"vp9\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'audio/mp4; codecs=\"vp9.0\"'"));
EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp4; codecs=\"opus\"'"));
EXPECT_EQ(kOpusAndPropProbably,
@@ -774,8 +788,8 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"vp8\"'"));
EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"vp8.0\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"vp9\"'"));
- EXPECT_EQ(kPropProbably, CanPlay("'audio/x-m4a; codecs=\"vp9.0\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'audio/x-m4a; codecs=\"vp9\"'"));
+ EXPECT_EQ(PropAndVP9Probably, CanPlay("'audio/x-m4a; codecs=\"vp9.0\"'"));
EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/x-m4a; codecs=\"opus\"'"));
EXPECT_EQ(kOpusAndPropProbably,
@@ -820,214 +834,228 @@ IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
}
IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_HLS) {
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/x-mpegurl'"));
+ // HLS are supported only on Android IceCreamSandwich and above (API level 14)
+ std::string HLSProbably = "";
+ std::string HLSMaybe = "";
+ std::string HLSAndVP9Probably = "";
+#if defined(OS_ANDROID)
+ int sdk = base::android::BuildInfo::GetInstance()->sdk_int();
+ if (sdk > 13) {
+ HLSProbably = "probably";
+ HLSMaybe = "maybe";
+ if (sdk < 19)
+ HLSAndVP9Probably = "maybe";
+ else
+ HLSAndVP9Probably = "probably";
+ }
+#endif
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/x-mpegurl'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1, mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3, mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1.4D401E\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3.64001F\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"mp4a.40.2\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1.4D401E, mp4a.40.2\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3.64001F, mp4a.40.5\"'"));
// TODO(amogh.bihani): Change these tests when bug 53193 is fixed.
// http://crbug.com/53193 ----------------------------------------------------
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1.unknown\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3.unknown\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"mp4a.unknown\"'"));
- EXPECT_EQ(kHLSProbably, CanPlay("'application/x-mpegurl; codecs=\"avc1.\"'"));
- EXPECT_EQ(kHLSProbably, CanPlay("'application/x-mpegurl; codecs=\"avc3.\"'"));
- EXPECT_EQ(kHLSProbably, CanPlay("'application/x-mpegurl; codecs=\"mp4a.\"'"));
+ EXPECT_EQ(HLSProbably, CanPlay("'application/x-mpegurl; codecs=\"avc1.\"'"));
+ EXPECT_EQ(HLSProbably, CanPlay("'application/x-mpegurl; codecs=\"avc3.\"'"));
+ EXPECT_EQ(HLSProbably, CanPlay("'application/x-mpegurl; codecs=\"mp4a.\"'"));
- EXPECT_EQ(kHLSProbably, CanPlay("'application/x-mpegurl; codecs=\"vp8\"'"));
- EXPECT_EQ(kHLSProbably, CanPlay("'application/x-mpegurl; codecs=\"vp9\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably, CanPlay("'application/x-mpegurl; codecs=\"vp8\"'"));
+ EXPECT_EQ(HLSAndVP9Probably,
+ CanPlay("'application/x-mpegurl; codecs=\"vp9\"'"));
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc1.4D401E, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/x-mpegurl; codecs=\"avc3.64001F, vorbis\"'"));
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"opus\"'"));
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"vp8, opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"vp9, opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"theora\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"theora, vorbis\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"theora, mp4a\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"theora, mp4a.40.2\"'"));
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"AVC1\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"AVC1\"'"));
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"AVC1.4d401e\"'"));
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"AVC3\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"AVC3\"'"));
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"AVC3.64001f\"'"));
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"MP4A\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/x-mpegurl; codecs=\"MP4A\"'"));
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"MP4A.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"AVC1, MP4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"AVC3, MP4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\", AVC3.64001F, MP4.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"avc2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"avc4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"avc1x\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"avc3x\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"mp4ax\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/x-mpegurl; codecs=\"unknown\"'"));
// ---------------------------------------------------------------------------
- EXPECT_EQ(kHLSMaybe, CanPlay("'application/vnd.apple.mpegurl'"));
+ EXPECT_EQ(HLSMaybe, CanPlay("'application/vnd.apple.mpegurl'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, mp4a\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.4D401E\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.64001F\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.40.2\"'"));
// TODO(amogh.bihani): Change these tests when bug 53193 is fixed.
// http://crbug.com/53193 ----------------------------------------------------
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.unknown\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.unknown\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.unknown\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4a.\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"vp8\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSAndVP9Probably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"vp9\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1.4D401E, vorbis\"'"));
- EXPECT_EQ(kHLSProbably,
+ EXPECT_EQ(HLSProbably,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3.64001F, vorbis\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"vp8, opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"vp9, opus\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"theora\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"theora, vorbis\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"theora, mp4a\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"theora, mp4a.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC1\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC1.4d401e\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC3\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC3.64001f\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"MP4A\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"MP4A.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC1, MP4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"AVC3, MP4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; "
"codecs=\", AVC1.4D401E, MP4.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; "
"codecs=\", AVC3.64001F, MP4.40.2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc2\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc4\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc1x\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"avc3x\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"mp4ax\"'"));
- EXPECT_EQ(kHLSMaybe,
+ EXPECT_EQ(HLSMaybe,
CanPlay("'application/vnd.apple.mpegurl; codecs=\"unknown\"'"));
// ---------------------------------------------------------------------------
}
-#endif // !OS_ANDROID
-
} // namespace content
diff --git a/content/browser/media/webrtc_browsertest.cc b/content/browser/media/webrtc_browsertest.cc
index 69fd5c0578..9a003a4814 100644
--- a/content/browser/media/webrtc_browsertest.cc
+++ b/content/browser/media/webrtc_browsertest.cc
@@ -16,6 +16,7 @@
#include "content/shell/browser/shell.h"
#include "content/test/webrtc_content_browsertest_base.h"
#include "media/audio/audio_manager.h"
+#include "media/base/media_switches.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#if defined(OS_WIN)
@@ -42,8 +43,8 @@ class WebRtcBrowserTest : public WebRtcContentBrowserTest,
WebRtcContentBrowserTest::SetUpCommandLine(command_line);
bool enable_audio_track_processing = GetParam();
- if (enable_audio_track_processing)
- command_line->AppendSwitch(switches::kEnableAudioTrackProcessing);
+ if (!enable_audio_track_processing)
+ command_line->AppendSwitch(switches::kDisableAudioTrackProcessing);
}
virtual void TearDownOnMainThread() OVERRIDE {
@@ -105,6 +106,22 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, CanSetupVideoCallWith1To1AspecRatio) {
MakeTypicalPeerConnectionCall(javascript);
}
+IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
+ CanSetupVideoCallWith16To9AspecRatio) {
+ const std::string javascript =
+ "callAndExpectResolution({video: {mandatory: {minWidth: 640,"
+ " maxWidth: 640, minAspectRatio: 1.777}}}, 640, 360);";
+ MakeTypicalPeerConnectionCall(javascript);
+}
+
+IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
+ CanSetupVideoCallWith4To3AspecRatio) {
+ const std::string javascript =
+ "callAndExpectResolution({video: {mandatory: {minWidth: 960,"
+ "maxAspectRatio: 1.333}}}, 960, 720);";
+ MakeTypicalPeerConnectionCall(javascript);
+}
+
#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
// Timing out on ARM linux, see http://crbug.com/240376
#define MAYBE_CanSetupAudioAndVideoCall DISABLED_CanSetupAudioAndVideoCall
@@ -133,14 +150,22 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
// Below 2 test will make a complete PeerConnection-based call between pc1 and
// pc2, and then use the remote stream to setup a call between pc3 and pc4, and
// then verify that video is received on pc3 and pc4.
+// The stream sent from pc3 to pc4 is the stream received on pc1.
+// The stream sent from pc4 to pc3 is cloned from stream the stream received
+// on pc2.
// Flaky on win xp. http://crbug.com/304775
#if defined(OS_WIN)
#define MAYBE_CanForwardRemoteStream DISABLED_CanForwardRemoteStream
#define MAYBE_CanForwardRemoteStream720p DISABLED_CanForwardRemoteStream720p
#else
#define MAYBE_CanForwardRemoteStream CanForwardRemoteStream
+// Flaky on TSAN v2. http://crbug.com/373637
+#if defined(THREAD_SANITIZER)
+#define MAYBE_CanForwardRemoteStream720p DISABLED_CanForwardRemoteStream720p
+#else
#define MAYBE_CanForwardRemoteStream720p CanForwardRemoteStream720p
#endif
+#endif
IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, MAYBE_CanForwardRemoteStream) {
#if defined (OS_ANDROID)
// This test fails on Nexus 5 devices.
@@ -206,6 +231,9 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, NegotiateOfferWithBLine) {
#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
// Timing out on ARM linux, see http://crbug.com/240373
#define MAYBE_CanSetupLegacyCall DISABLED_CanSetupLegacyCall
+#elif defined (OS_ANDROID) || defined(THREAD_SANITIZER)
+// Flaky on TSAN v2 and Android Tests (dbg): http://crbug.com/373637
+#define MAYBE_CanSetupLegacyCall DISABLED_CanSetupLegacyCall
#else
#define MAYBE_CanSetupLegacyCall CanSetupLegacyCall
#endif
@@ -228,6 +256,9 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, CallWithSctpDataOnly) {
#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
// Timing out on ARM linux bot: http://crbug.com/238490
#define MAYBE_CallWithDataAndMedia DISABLED_CallWithDataAndMedia
+#elif defined(THREAD_SANITIZER)
+// Flaky on TSAN v2: http://crbug.com/373637
+#define MAYBE_CallWithDataAndMedia DISABLED_CallWithDataAndMedia
#else
#define MAYBE_CallWithDataAndMedia CallWithDataAndMedia
#endif
@@ -235,7 +266,7 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, CallWithSctpDataOnly) {
// This test will make a PeerConnection-based call and test an unreliable text
// dataChannel and audio and video tracks.
// TODO(mallinath) - Remove this test after rtp based data channel is disabled.
-IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, MAYBE_CallWithDataAndMedia) {
+IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, DISABLED_CallWithDataAndMedia) {
MakeTypicalPeerConnectionCall("callWithDataAndMedia();");
}
@@ -332,8 +363,16 @@ IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
"callAndEnsureAudioTrackMutingWorks(%s);", kUseLenientAudioChecking));
}
+// Flaky on TSAN v2: http://crbug.com/373637
+#if defined(THREAD_SANITIZER)
+#define MAYBE_EstablishAudioVideoCallAndVerifyUnmutingWorks\
+ DISABLED_EstablishAudioVideoCallAndVerifyUnmutingWorks
+#else
+#define MAYBE_EstablishAudioVideoCallAndVerifyUnmutingWorks\
+ EstablishAudioVideoCallAndVerifyUnmutingWorks
+#endif
IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
- EstablishAudioVideoCallAndVerifyUnmutingWorks) {
+ MAYBE_EstablishAudioVideoCallAndVerifyUnmutingWorks) {
if (!media::AudioManager::Get()->HasAudioOutputDevices()) {
// See comment on EstablishAudioVideoCallAndMeasureOutputLevel.
LOG(INFO) << "Missing output devices: skipping test...";
diff --git a/content/browser/media/webrtc_getusermedia_browsertest.cc b/content/browser/media/webrtc_getusermedia_browsertest.cc
index 7f3aceaec8..59dd76c17c 100644
--- a/content/browser/media/webrtc_getusermedia_browsertest.cc
+++ b/content/browser/media/webrtc_getusermedia_browsertest.cc
@@ -85,8 +85,8 @@ class WebRtcGetUserMediaBrowserTest: public WebRtcContentBrowserTest,
WebRtcContentBrowserTest::SetUpCommandLine(command_line);
bool enable_audio_track_processing = GetParam();
- if (enable_audio_track_processing)
- command_line->AppendSwitch(switches::kEnableAudioTrackProcessing);
+ if (!enable_audio_track_processing)
+ command_line->AppendSwitch(switches::kDisableAudioTrackProcessing);
}
void StartTracing() {
@@ -177,6 +177,21 @@ class WebRtcGetUserMediaBrowserTest: public WebRtcContentBrowserTest,
graph_name, "", "interarrival_time", interarrival_us, "us", true);
}
+ void RunTwoGetTwoGetUserMediaWithDifferentContraints(
+ const std::string& constraints1,
+ const std::string& constraints2,
+ const std::string& expected_result) {
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+
+ GURL url(embedded_test_server()->GetURL("/media/getusermedia.html"));
+ NavigateToURL(shell(), url);
+
+ std::string command = "twoGetUserMedia(" + constraints1 + ',' +
+ constraints2 + ')';
+
+ EXPECT_EQ(expected_result, ExecuteJavascriptAndReturnResult(command));
+ }
+
void GetSources(std::vector<std::string>* audio_ids,
std::vector<std::string>* video_ids) {
GURL url(embedded_test_server()->GetURL("/media/getusermedia.html"));
@@ -428,6 +443,36 @@ IN_PROC_BROWSER_TEST_P(WebRtcGetUserMediaBrowserTest, TwoGetUserMediaAndStop) {
}
IN_PROC_BROWSER_TEST_P(WebRtcGetUserMediaBrowserTest,
+ TwoGetUserMediaWithEqualConstraints) {
+ std::string constraints1 = "{video: true, audio: true}";
+ const std::string& constraints2 = constraints1;
+ std::string expected_result = "w=640:h=480-w=640:h=480";
+
+ RunTwoGetTwoGetUserMediaWithDifferentContraints(constraints1, constraints2,
+ expected_result);
+ }
+
+IN_PROC_BROWSER_TEST_P(WebRtcGetUserMediaBrowserTest,
+ TwoGetUserMediaWithSecondVideoCropped) {
+ std::string constraints1 = "{video: true}";
+ std::string constraints2 = "{video: {mandatory: {maxHeight: 360}}}";
+ std::string expected_result = "w=640:h=480-w=640:h=360";
+ RunTwoGetTwoGetUserMediaWithDifferentContraints(constraints1, constraints2,
+ expected_result);
+}
+
+IN_PROC_BROWSER_TEST_P(WebRtcGetUserMediaBrowserTest,
+ TwoGetUserMediaWithFirstHdSecondVga) {
+ std::string constraints1 =
+ "{video: {mandatory: {minWidth:1280 , minHeight: 720}}}";
+ std::string constraints2 =
+ "{video: {mandatory: {maxWidth:640 , maxHeight: 480}}}";
+ std::string expected_result = "w=1280:h=720-w=640:h=480";
+ RunTwoGetTwoGetUserMediaWithDifferentContraints(constraints1, constraints2,
+ expected_result);
+}
+
+IN_PROC_BROWSER_TEST_P(WebRtcGetUserMediaBrowserTest,
GetUserMediaWithTooHighVideoConstraintsValues) {
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
diff --git a/content/browser/media/webrtc_identity_store_backend.cc b/content/browser/media/webrtc_identity_store_backend.cc
index d599dcda74..57a0b04f05 100644
--- a/content/browser/media/webrtc_identity_store_backend.cc
+++ b/content/browser/media/webrtc_identity_store_backend.cc
@@ -6,6 +6,8 @@
#include "base/file_util.h"
#include "base/files/file_path.h"
+#include "base/memory/scoped_vector.h"
+#include "base/strings/string_util.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/net_errors.h"
#include "sql/error_delegate_util.h"
@@ -31,6 +33,7 @@ static bool InitDB(sql::Connection* db) {
db->DoesColumnExist(kWebRTCIdentityStoreDBName, "private_key") &&
db->DoesColumnExist(kWebRTCIdentityStoreDBName, "creation_time"))
return true;
+
if (!db->Execute("DROP TABLE webrtc_identity_store"))
return false;
}
@@ -153,7 +156,7 @@ class WebRTCIdentityStoreBackend::SqlLiteStorage
std::string identity_name;
Identity identity;
};
- typedef std::vector<PendingOperation*> PendingOperationList;
+ typedef ScopedVector<PendingOperation> PendingOperationList;
virtual ~SqlLiteStorage() {}
void OnDatabaseError(int error, sql::Statement* stmt);
@@ -343,7 +346,7 @@ void WebRTCIdentityStoreBackend::OnLoaded(scoped_ptr<IdentityMap> out_map) {
if (state_ != LOADING)
return;
- DVLOG(2) << "WebRTC identity store has loaded.";
+ DVLOG(3) << "WebRTC identity store has loaded.";
state_ = LOADED;
identities_.swap(*out_map);
@@ -370,7 +373,7 @@ void WebRTCIdentityStoreBackend::SqlLiteStorage::Load(IdentityMap* out_map) {
// from it.
const base::FilePath dir = path_.DirName();
if (!base::PathExists(dir) && !base::CreateDirectory(dir)) {
- DLOG(ERROR) << "Unable to open DB file path.";
+ DVLOG(2) << "Unable to open DB file path.";
return;
}
@@ -379,13 +382,13 @@ void WebRTCIdentityStoreBackend::SqlLiteStorage::Load(IdentityMap* out_map) {
db_->set_error_callback(base::Bind(&SqlLiteStorage::OnDatabaseError, this));
if (!db_->Open(path_)) {
- DLOG(ERROR) << "Unable to open DB.";
+ DVLOG(2) << "Unable to open DB.";
db_.reset();
return;
}
if (!InitDB(db_.get())) {
- DLOG(ERROR) << "Unable to init DB.";
+ DVLOG(2) << "Unable to init DB.";
db_.reset();
return;
}
@@ -470,21 +473,26 @@ void WebRTCIdentityStoreBackend::SqlLiteStorage::DeleteBetween(
sql::Transaction transaction(db_.get());
if (!transaction.Begin()) {
- DLOG(ERROR) << "Failed to begin the transaction.";
+ DVLOG(2) << "Failed to begin the transaction.";
+ return;
+ }
+
+ if (!del_stmt.Run()) {
+ DVLOG(2) << "Failed to run the delete statement.";
return;
}
- CHECK(del_stmt.Run());
- transaction.Commit();
+ if (!transaction.Commit())
+ DVLOG(2) << "Failed to commit the transaction.";
}
void WebRTCIdentityStoreBackend::SqlLiteStorage::OnDatabaseError(
int error,
sql::Statement* stmt) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
- if (!sql::IsErrorCatastrophic(error))
- return;
+
db_->RazeAndClose();
+ // It's not safe to reset |db_| here.
}
void WebRTCIdentityStoreBackend::SqlLiteStorage::BatchOperation(
@@ -542,33 +550,44 @@ void WebRTCIdentityStoreBackend::SqlLiteStorage::Commit() {
sql::Transaction transaction(db_.get());
if (!transaction.Begin()) {
- DLOG(ERROR) << "Failed to begin the transaction.";
+ DVLOG(2) << "Failed to begin the transaction.";
return;
}
- for (PendingOperationList::iterator it = pending_operations_.begin();
- it != pending_operations_.end();
+ // Swaps |pending_operations_| into a temporary list to make sure
+ // |pending_operations_| is always cleared in case of DB errors.
+ PendingOperationList pending_operations_copy;
+ pending_operations_.swap(pending_operations_copy);
+
+ for (PendingOperationList::const_iterator it =
+ pending_operations_copy.begin();
+ it != pending_operations_copy.end();
++it) {
- scoped_ptr<PendingOperation> po(*it);
- switch (po->type) {
+ switch ((*it)->type) {
case ADD_IDENTITY: {
add_stmt.Reset(true);
- add_stmt.BindString(0, po->origin.spec());
- add_stmt.BindString(1, po->identity_name);
- add_stmt.BindString(2, po->identity.common_name);
- const std::string& cert = po->identity.certificate;
+ add_stmt.BindString(0, (*it)->origin.spec());
+ add_stmt.BindString(1, (*it)->identity_name);
+ add_stmt.BindString(2, (*it)->identity.common_name);
+ const std::string& cert = (*it)->identity.certificate;
add_stmt.BindBlob(3, cert.data(), cert.size());
- const std::string& private_key = po->identity.private_key;
+ const std::string& private_key = (*it)->identity.private_key;
add_stmt.BindBlob(4, private_key.data(), private_key.size());
- add_stmt.BindInt64(5, po->identity.creation_time);
- CHECK(add_stmt.Run());
+ add_stmt.BindInt64(5, (*it)->identity.creation_time);
+ if (!add_stmt.Run()) {
+ DVLOG(2) << "Failed to add the identity to DB.";
+ return;
+ }
break;
}
case DELETE_IDENTITY:
del_stmt.Reset(true);
- del_stmt.BindString(0, po->origin.spec());
- del_stmt.BindString(1, po->identity_name);
- CHECK(del_stmt.Run());
+ del_stmt.BindString(0, (*it)->origin.spec());
+ del_stmt.BindString(1, (*it)->identity_name);
+ if (!del_stmt.Run()) {
+ DVLOG(2) << "Failed to delete the identity from DB.";
+ return;
+ }
break;
default:
@@ -576,8 +595,9 @@ void WebRTCIdentityStoreBackend::SqlLiteStorage::Commit() {
break;
}
}
- transaction.Commit();
- pending_operations_.clear();
+
+ if (!transaction.Commit())
+ DVLOG(2) << "Failed to commit the transaction.";
}
} // namespace content
diff --git a/content/browser/media/webrtc_identity_store_unittest.cc b/content/browser/media/webrtc_identity_store_unittest.cc
index 85bd18f376..586559f2c0 100644
--- a/content/browser/media/webrtc_identity_store_unittest.cc
+++ b/content/browser/media/webrtc_identity_store_unittest.cc
@@ -10,6 +10,8 @@
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
#include "net/base/net_errors.h"
+#include "sql/connection.h"
+#include "sql/test/test_helpers.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -343,4 +345,35 @@ TEST_F(WebRTCIdentityStoreTest, IdentityPersistentAcrossRestart) {
EXPECT_EQ(key_1, key_2);
}
+TEST_F(WebRTCIdentityStoreTest, HandleDBErrors) {
+ base::ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+ Restart(temp_dir.path());
+
+ bool completed_1 = false;
+ std::string cert_1, key_1;
+
+ // Creates an identity.
+ RequestIdentityAndRunUtilIdle(kFakeOrigin,
+ kFakeIdentityName1,
+ kFakeCommonName1,
+ &completed_1,
+ &cert_1,
+ &key_1);
+
+ // Make the table corrupted.
+ base::FilePath db_path =
+ temp_dir.path().Append(FILE_PATH_LITERAL("WebRTCIdentityStore"));
+ EXPECT_TRUE(sql::test::CorruptSizeInHeader(db_path));
+
+ // Reset to commit the DB changes, which should fail and not crash.
+ webrtc_identity_store_ = NULL;
+ RunUntilIdle();
+
+ // Verifies the corrupted table was razed.
+ scoped_ptr<sql::Connection> db(new sql::Connection());
+ EXPECT_TRUE(db->Open(db_path));
+ EXPECT_EQ(0U, sql::test::CountSQLTables(db.get()));
+}
+
} // namespace content
diff --git a/content/browser/media/webrtc_internals.cc b/content/browser/media/webrtc_internals.cc
index d3aaa6c597..d85c554897 100644
--- a/content/browser/media/webrtc_internals.cc
+++ b/content/browser/media/webrtc_internals.cc
@@ -49,7 +49,7 @@ WebRTCInternals::WebRTCInternals()
// the platform default path will be used in the file dialog (with no
// default file name). See SelectFileDialog::SelectFile. On Android where
// there's no dialog we'll fail to open the file.
- LOG(WARNING) << "Could not get the download directory.";
+ VLOG(1) << "Could not get the download directory.";
} else {
aec_dump_file_path_ =
aec_dump_file_path_.Append(FILE_PATH_LITERAL("audio.aecdump"));
diff --git a/content/browser/media/webrtc_internals_browsertest.cc b/content/browser/media/webrtc_internals_browsertest.cc
index 8e071c737f..7b352d66b2 100644
--- a/content/browser/media/webrtc_internals_browsertest.cc
+++ b/content/browser/media/webrtc_internals_browsertest.cc
@@ -12,6 +12,7 @@
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
+#include "media/base/media_switches.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
using std::string;
diff --git a/content/browser/message_port_message_filter.cc b/content/browser/message_port_message_filter.cc
index 6de26bd45e..ab3174bc8c 100644
--- a/content/browser/message_port_message_filter.cc
+++ b/content/browser/message_port_message_filter.cc
@@ -22,10 +22,9 @@ void MessagePortMessageFilter::OnChannelClosing() {
MessagePortService::GetInstance()->OnMessagePortMessageFilterClosing(this);
}
-bool MessagePortMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool MessagePortMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MessagePortMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MessagePortMessageFilter, message)
IPC_MESSAGE_HANDLER(MessagePortHostMsg_CreateMessagePort,
OnCreateMessagePort)
IPC_MESSAGE_FORWARD(MessagePortHostMsg_DestroyMessagePort,
@@ -44,7 +43,7 @@ bool MessagePortMessageFilter::OnMessageReceived(const IPC::Message& message,
MessagePortService::GetInstance(),
MessagePortService::SendQueuedMessages)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/message_port_message_filter.h b/content/browser/message_port_message_filter.h
index a324ad8000..64d07d6c32 100644
--- a/content/browser/message_port_message_filter.h
+++ b/content/browser/message_port_message_filter.h
@@ -23,8 +23,7 @@ class CONTENT_EXPORT MessagePortMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
int GetNextRoutingID();
diff --git a/content/browser/mime_registry_message_filter.cc b/content/browser/mime_registry_message_filter.cc
index d6e4505959..0a823af2a9 100644
--- a/content/browser/mime_registry_message_filter.cc
+++ b/content/browser/mime_registry_message_filter.cc
@@ -23,10 +23,9 @@ void MimeRegistryMessageFilter::OverrideThreadForMessage(
*thread = BrowserThread::FILE;
}
-bool MimeRegistryMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool MimeRegistryMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MimeRegistryMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MimeRegistryMessageFilter, message)
IPC_MESSAGE_HANDLER(MimeRegistryMsg_GetMimeTypeFromExtension,
OnGetMimeTypeFromExtension)
IPC_MESSAGE_HANDLER(MimeRegistryMsg_GetMimeTypeFromFile,
diff --git a/content/browser/mime_registry_message_filter.h b/content/browser/mime_registry_message_filter.h
index e86fe190b1..4237f508e7 100644
--- a/content/browser/mime_registry_message_filter.h
+++ b/content/browser/mime_registry_message_filter.h
@@ -17,8 +17,7 @@ class MimeRegistryMessageFilter : public BrowserMessageFilter {
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~MimeRegistryMessageFilter();
diff --git a/content/browser/mojo/mojo_application_host.cc b/content/browser/mojo/mojo_application_host.cc
index efe2ddfb51..0825647690 100644
--- a/content/browser/mojo/mojo_application_host.cc
+++ b/content/browser/mojo/mojo_application_host.cc
@@ -30,7 +30,7 @@ MojoApplicationHost::~MojoApplicationHost() {
}
bool MojoApplicationHost::Init() {
- DCHECK(!shell_.get()) << "Already initialized!";
+ DCHECK(!child_service_provider_.get()) << "Already initialized!";
mojo::embedder::PlatformChannelPair channel_pair;
@@ -43,7 +43,8 @@ bool MojoApplicationHost::Init() {
// Forward this to the client once we know its process handle.
client_handle_ = channel_pair.PassClientHandle();
- shell_.reset(BindToPipe(new ShellImpl(), message_pipe.Pass()));
+ child_service_provider_.reset(
+ BindToPipe(new ServiceProviderImpl(), message_pipe.Pass()));
return true;
}
@@ -59,11 +60,7 @@ bool MojoApplicationHost::Activate(IPC::Sender* sender,
return did_activate_;
}
-void MojoApplicationHost::ShellImpl::SetClient(mojo::ShellClient* client) {
- client_ = client;
-}
-
-void MojoApplicationHost::ShellImpl::Connect(
+void MojoApplicationHost::ServiceProviderImpl::ConnectToService(
const mojo::String& url,
mojo::ScopedMessagePipeHandle handle) {
// TODO(darin): Provide something meaningful here.
diff --git a/content/browser/mojo/mojo_application_host.h b/content/browser/mojo/mojo_application_host.h
index a28d2a38aa..84d350d3fe 100644
--- a/content/browser/mojo/mojo_application_host.h
+++ b/content/browser/mojo/mojo_application_host.h
@@ -8,7 +8,7 @@
#include "base/process/process_handle.h"
#include "mojo/common/channel_init.h"
#include "mojo/embedder/scoped_platform_handle.h"
-#include "mojo/public/interfaces/shell/shell.mojom.h"
+#include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
namespace IPC {
class Sender;
@@ -34,33 +34,29 @@ class MojoApplicationHost {
bool did_activate() const { return did_activate_; }
- mojo::ShellClient* shell_client() {
- DCHECK(shell_.get());
- return shell_->client();
+ mojo::ServiceProvider* service_provider() {
+ DCHECK(child_service_provider_.get());
+ return child_service_provider_->client();
}
private:
- class ShellImpl : public mojo::InterfaceImpl<mojo::Shell> {
+ class ServiceProviderImpl
+ : public mojo::InterfaceImpl<mojo::ServiceProvider> {
public:
- ShellImpl() : client_(NULL) {}
- mojo::ShellClient* client() { return client_; }
-
virtual void OnConnectionError() OVERRIDE {
// TODO(darin): How should we handle this error?
}
- // mojo::Shell methods:
- virtual void SetClient(mojo::ShellClient* client) OVERRIDE;
- virtual void Connect(const mojo::String& url,
- mojo::ScopedMessagePipeHandle handle) OVERRIDE;
- private:
- mojo::ShellClient* client_;
+ // mojo::ServiceProvider methods:
+ virtual void ConnectToService(
+ const mojo::String& url,
+ mojo::ScopedMessagePipeHandle handle) OVERRIDE;
};
mojo::common::ChannelInit channel_init_;
mojo::embedder::ScopedPlatformHandle client_handle_;
- scoped_ptr<ShellImpl> shell_;
+ scoped_ptr<ServiceProviderImpl> child_service_provider_;
bool did_activate_;
diff --git a/content/browser/net/browser_online_state_observer.cc b/content/browser/net/browser_online_state_observer.cc
index 2276fd70a0..8d97b1c972 100644
--- a/content/browser/net/browser_online_state_observer.cc
+++ b/content/browser/net/browser_online_state_observer.cc
@@ -19,10 +19,11 @@ BrowserOnlineStateObserver::~BrowserOnlineStateObserver() {
void BrowserOnlineStateObserver::OnConnectionTypeChanged(
net::NetworkChangeNotifier::ConnectionType type) {
+ bool is_online = !net::NetworkChangeNotifier::IsOffline();
for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator());
!it.IsAtEnd(); it.Advance()) {
- it.GetCurrentValue()->Send(new ViewMsg_NetworkStateChanged(
- type != net::NetworkChangeNotifier::CONNECTION_NONE));
+ it.GetCurrentValue()->Send(
+ new ViewMsg_NetworkStateChanged(is_online, type));
}
}
diff --git a/content/browser/plugin_data_remover_impl.cc b/content/browser/plugin_data_remover_impl.cc
index 9133e59ec9..a318e724d4 100644
--- a/content/browser/plugin_data_remover_impl.cc
+++ b/content/browser/plugin_data_remover_impl.cc
@@ -226,7 +226,7 @@ class PluginDataRemoverImpl::Context
return;
DCHECK(!channel_.get());
- channel_.reset(new IPC::Channel(handle, IPC::Channel::MODE_CLIENT, this));
+ channel_ = IPC::Channel::CreateClient(handle, this);
if (!channel_->Connect()) {
NOTREACHED() << "Couldn't connect to plugin";
SignalDone();
diff --git a/content/browser/plugin_process_host.cc b/content/browser/plugin_process_host.cc
index 077f512672..c3f6223ba8 100644
--- a/content/browser/plugin_process_host.cc
+++ b/content/browser/plugin_process_host.cc
@@ -205,9 +205,6 @@ bool PluginProcessHost::Init(const WebPluginInfo& info) {
switches::kDisableCoreAnimationPlugins,
switches::kEnableSandboxLogging,
#endif
-#if defined(OS_WIN)
- switches::kHighDPISupport,
-#endif
};
cmd_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
diff --git a/content/browser/plugin_service_impl_browsertest.cc b/content/browser/plugin_service_impl_browsertest.cc
index 44f4754728..7a3271e6c7 100644
--- a/content/browser/plugin_service_impl_browsertest.cc
+++ b/content/browser/plugin_service_impl_browsertest.cc
@@ -60,7 +60,7 @@ class MockPluginProcessHostClient : public PluginProcessHost::Client,
ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
ASSERT_TRUE(set_plugin_info_called_);
ASSERT_TRUE(!channel_);
- channel_ = new IPC::Channel(handle, IPC::Channel::MODE_CLIENT, this);
+ channel_ = IPC::Channel::CreateClient(handle, this).release();
ASSERT_TRUE(channel_->Connect());
}
diff --git a/content/browser/profiler_message_filter.cc b/content/browser/profiler_message_filter.cc
index 825e9dc264..ef8b2b72ff 100644
--- a/content/browser/profiler_message_filter.cc
+++ b/content/browser/profiler_message_filter.cc
@@ -22,17 +22,16 @@ void ProfilerMessageFilter::OnChannelConnected(int32 peer_pid) {
Send(new ChildProcessMsg_SetProfilerStatus(status));
}
-bool ProfilerMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool ProfilerMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ProfilerMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ProfilerMessageFilter, message)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ChildProfilerData,
OnChildProfilerData)
#if defined(USE_TCMALLOC)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_TcmallocStats, OnTcmallocStats)
#endif
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/profiler_message_filter.h b/content/browser/profiler_message_filter.h
index bbac0babbb..1575abcc6f 100644
--- a/content/browser/profiler_message_filter.h
+++ b/content/browser/profiler_message_filter.h
@@ -24,8 +24,7 @@ class ProfilerMessageFilter : public BrowserMessageFilter {
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~ProfilerMessageFilter();
diff --git a/content/browser/push_messaging_message_filter.cc b/content/browser/push_messaging_message_filter.cc
index fa8e8a5286..e0787a7c9f 100644
--- a/content/browser/push_messaging_message_filter.cc
+++ b/content/browser/push_messaging_message_filter.cc
@@ -16,10 +16,10 @@ PushMessagingMessageFilter::PushMessagingMessageFilter()
PushMessagingMessageFilter::~PushMessagingMessageFilter() {}
-bool PushMessagingMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool PushMessagingMessageFilter::OnMessageReceived(
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(PushMessagingMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(PushMessagingMessageFilter, message)
IPC_MESSAGE_HANDLER(PushMessagingHostMsg_Register, OnRegister)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
diff --git a/content/browser/push_messaging_message_filter.h b/content/browser/push_messaging_message_filter.h
index 1eb70030d7..44efd7f298 100644
--- a/content/browser/push_messaging_message_filter.h
+++ b/content/browser/push_messaging_message_filter.h
@@ -20,8 +20,7 @@ class PushMessagingMessageFilter : public BrowserMessageFilter {
virtual ~PushMessagingMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnRegister(int routing_id,
int callbacks_id,
diff --git a/content/browser/quota_dispatcher_host.cc b/content/browser/quota_dispatcher_host.cc
index ca636fe735..fcee63396e 100644
--- a/content/browser/quota_dispatcher_host.cc
+++ b/content/browser/quota_dispatcher_host.cc
@@ -220,17 +220,15 @@ QuotaDispatcherHost::QuotaDispatcherHost(
weak_factory_(this) {
}
-bool QuotaDispatcherHost::OnMessageReceived(
- const IPC::Message& message, bool* message_was_ok) {
- *message_was_ok = true;
+bool QuotaDispatcherHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(QuotaDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(QuotaDispatcherHost, message)
IPC_MESSAGE_HANDLER(QuotaHostMsg_QueryStorageUsageAndQuota,
OnQueryStorageUsageAndQuota)
IPC_MESSAGE_HANDLER(QuotaHostMsg_RequestStorageQuota,
OnRequestStorageQuota)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/quota_dispatcher_host.h b/content/browser/quota_dispatcher_host.h
index d7c1571931..d241ab59c3 100644
--- a/content/browser/quota_dispatcher_host.h
+++ b/content/browser/quota_dispatcher_host.h
@@ -31,8 +31,7 @@ class QuotaDispatcherHost : public BrowserMessageFilter {
QuotaPermissionContext* permission_context);
// BrowserMessageFilter:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~QuotaDispatcherHost();
diff --git a/content/browser/renderer_host/clipboard_message_filter.cc b/content/browser/renderer_host/clipboard_message_filter.cc
index ab0d2fb9df..3ea8071cb1 100644
--- a/content/browser/renderer_host/clipboard_message_filter.cc
+++ b/content/browser/renderer_host/clipboard_message_filter.cc
@@ -77,10 +77,9 @@ void ClipboardMessageFilter::OverrideThreadForMessage(
#endif
}
-bool ClipboardMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool ClipboardMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ClipboardMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ClipboardMessageFilter, message)
IPC_MESSAGE_HANDLER(ClipboardHostMsg_WriteObjectsAsync, OnWriteObjectsAsync)
IPC_MESSAGE_HANDLER(ClipboardHostMsg_WriteObjectsSync, OnWriteObjectsSync)
IPC_MESSAGE_HANDLER(ClipboardHostMsg_GetSequenceNumber, OnGetSequenceNumber)
diff --git a/content/browser/renderer_host/clipboard_message_filter.h b/content/browser/renderer_host/clipboard_message_filter.h
index 2252696c5e..3fcb94edc7 100644
--- a/content/browser/renderer_host/clipboard_message_filter.h
+++ b/content/browser/renderer_host/clipboard_message_filter.h
@@ -24,8 +24,7 @@ class ClipboardMessageFilter : public BrowserMessageFilter {
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~ClipboardMessageFilter();
diff --git a/content/browser/renderer_host/compositing_iosurface_layer_mac.h b/content/browser/renderer_host/compositing_iosurface_layer_mac.h
index 115f62b9d5..9b1b6aa3f8 100644
--- a/content/browser/renderer_host/compositing_iosurface_layer_mac.h
+++ b/content/browser/renderer_host/compositing_iosurface_layer_mac.h
@@ -11,35 +11,47 @@
#include "base/memory/ref_counted.h"
namespace content {
+class CompositingIOSurfaceMac;
class CompositingIOSurfaceContext;
-class RenderWidgetHostViewMac;
+
+class CompositingIOSurfaceLayerClient {
+ public:
+ virtual void AcceleratedLayerDidDrawFrame(bool succeeded) = 0;
+ virtual bool AcceleratedLayerHasNotAckedPendingFrame() const = 0;
+};
+
}
// The CoreAnimation layer for drawing accelerated content.
@interface CompositingIOSurfaceLayer : CAOpenGLLayer {
@private
- content::RenderWidgetHostViewMac* renderWidgetHostView_;
+ content::CompositingIOSurfaceLayerClient* client_;
+ scoped_refptr<content::CompositingIOSurfaceMac> iosurface_;
scoped_refptr<content::CompositingIOSurfaceContext> context_;
// Used to track when canDrawInCGLContext should return YES. This can be
// in response to receiving a new compositor frame, or from any of the events
// that cause setNeedsDisplay to be called on the layer.
- BOOL needsDisplay_;
+ BOOL needs_display_;
+
+ // Incremented every time that this layer is asked to draw but does not have
+ // new content to draw.
+ uint64 did_not_draw_counter_;
}
-- (id)initWithRenderWidgetHostViewMac:(content::RenderWidgetHostViewMac*)r;
+- (content::CompositingIOSurfaceMac*)iosurface;
+- (content::CompositingIOSurfaceContext*)context;
-// Remove this layer from the layer heirarchy, and mark that
-// |renderWidgetHostView_| is no longer valid and may no longer be dereferenced.
-- (void)disableCompositing;
+- (id)initWithIOSurface:(scoped_refptr<content::CompositingIOSurfaceMac>)
+ iosurface
+ withClient:(content::CompositingIOSurfaceLayerClient*)client;
+
+// Mark that the client is no longer valid and cannot be called back into.
+- (void)resetClient;
// Called when a new frame is received.
- (void)gotNewFrame;
-// Called when it has been a while since a new frame has been received, and the
-// layer should become not-asynchronous.
-- (void)timerSinceGotNewFrameFired;
-
@end
#endif // CONTENT_BROWSER_RENDERER_HOST_COMPOSITING_IOSURFACE_LAYER_MAC_H_
diff --git a/content/browser/renderer_host/compositing_iosurface_layer_mac.mm b/content/browser/renderer_host/compositing_iosurface_layer_mac.mm
index af7f700f11..f96e07f925 100644
--- a/content/browser/renderer_host/compositing_iosurface_layer_mac.mm
+++ b/content/browser/renderer_host/compositing_iosurface_layer_mac.mm
@@ -19,30 +19,41 @@
@implementation CompositingIOSurfaceLayer
-- (id)initWithRenderWidgetHostViewMac:(content::RenderWidgetHostViewMac*)r {
+- (content::CompositingIOSurfaceMac*)iosurface {
+ return iosurface_.get();
+}
+
+- (content::CompositingIOSurfaceContext*)context {
+ return context_.get();
+}
+
+- (id)initWithIOSurface:(scoped_refptr<content::CompositingIOSurfaceMac>)
+ iosurface
+ withClient:(content::CompositingIOSurfaceLayerClient*)client {
if (self = [super init]) {
- renderWidgetHostView_ = r;
+ iosurface_ = iosurface;
+ client_ = client;
+
context_ = content::CompositingIOSurfaceContext::Get(
content::CompositingIOSurfaceContext::kCALayerContextWindowNumber);
DCHECK(context_);
- needsDisplay_ = NO;
+ needs_display_ = NO;
+ did_not_draw_counter_ = 0;
[self setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)];
[self setAnchorPoint:CGPointMake(0, 0)];
// Setting contents gravity is necessary to prevent the layer from being
// scaled during dyanmic resizes (especially with devtools open).
[self setContentsGravity:kCAGravityTopLeft];
- if (renderWidgetHostView_->compositing_iosurface_ &&
- [self respondsToSelector:(@selector(setContentsScale:))]) {
- [self setContentsScale:
- renderWidgetHostView_->compositing_iosurface_->scale_factor()];
+ if ([self respondsToSelector:(@selector(setContentsScale:))]) {
+ [self setContentsScale:iosurface_->scale_factor()];
}
}
return self;
}
-- (void)disableCompositing{
- renderWidgetHostView_ = nil;
+- (void)resetClient {
+ client_ = NULL;
}
- (void)gotNewFrame {
@@ -55,32 +66,16 @@
// Calls to setNeedsDisplay can sometimes be ignored, especially if issued
// rapidly (e.g, with vsync off). This is unacceptable because the failure
// to ack a single frame will hang the renderer. Ensure that the renderer
- // not be blocked.
- if (needsDisplay_)
- renderWidgetHostView_->SendPendingSwapAck();
+ // not be blocked by lying and claiming that we drew the frame.
+ if (needs_display_ && client_)
+ client_->AcceleratedLayerDidDrawFrame(true);
} else {
- needsDisplay_ = YES;
+ needs_display_ = YES;
if (![self isAsynchronous])
[self setAsynchronous:YES];
}
}
-- (void)timerSinceGotNewFrameFired {
- if (![self isAsynchronous])
- return;
-
- [self setAsynchronous:NO];
-
- // If there was a pending frame, ensure that it goes through.
- if (needsDisplay_) {
- [self setNeedsDisplay];
- [self displayIfNeeded];
- }
- // If that fails then ensure that, at a minimum, the renderer is not blocked.
- if (needsDisplay_)
- renderWidgetHostView_->SendPendingSwapAck();
-}
-
// The remaining methods implement the CAOpenGLLayer interface.
- (CGLPixelFormatObj)copyCGLPixelFormatForDisplayMask:(uint32_t)mask {
@@ -96,7 +91,7 @@
}
- (void)setNeedsDisplay {
- needsDisplay_ = YES;
+ needs_display_ = YES;
[super setNeedsDisplay];
}
@@ -104,9 +99,6 @@
pixelFormat:(CGLPixelFormatObj)pixelFormat
forLayerTime:(CFTimeInterval)timeInterval
displayTime:(const CVTimeStamp*)timeStamp {
- if (!renderWidgetHostView_)
- return NO;
-
// Add an instantaneous blip to the PendingSwapAck state to indicate
// that CoreAnimation asked if a frame is ready. A blip up to to 3 (usually
// from 2, indicating that a swap ack is pending) indicates that we requested
@@ -114,12 +106,24 @@
// ack) indicates that we did not request a draw. This would be more natural
// to do with a tracing pseudo-thread
// http://crbug.com/366300
- TRACE_COUNTER_ID1("browser", "PendingSwapAck", renderWidgetHostView_,
- needsDisplay_ ? 3 : 1);
- TRACE_COUNTER_ID1("browser", "PendingSwapAck", renderWidgetHostView_,
- renderWidgetHostView_->HasPendingSwapAck() ? 2 : 0);
+ if (client_) {
+ TRACE_COUNTER_ID1("browser", "PendingSwapAck", self,
+ needs_display_ ? 3 : 1);
+ TRACE_COUNTER_ID1("browser", "PendingSwapAck", self,
+ client_->AcceleratedLayerHasNotAckedPendingFrame() ? 2 : 0);
+ }
- return needsDisplay_;
+ // If we return NO 30 times in a row, switch to being synchronous to avoid
+ // burning CPU cycles on this callback.
+ if (needs_display_) {
+ did_not_draw_counter_ = 0;
+ } else {
+ did_not_draw_counter_ += 1;
+ if (did_not_draw_counter_ > 30)
+ [self setAsynchronous:NO];
+ }
+
+ return needs_display_;
}
- (void)drawInCGLContext:(CGLContextObj)glContext
@@ -128,11 +132,7 @@
displayTime:(const CVTimeStamp*)timeStamp {
TRACE_EVENT0("browser", "CompositingIOSurfaceLayer::drawInCGLContext");
- if (!context_ ||
- (context_ && context_->cgl_context() != glContext) ||
- !renderWidgetHostView_ ||
- !renderWidgetHostView_->compositing_iosurface_ ||
- !renderWidgetHostView_->compositing_iosurface_->HasIOSurface()) {
+ if (!iosurface_->HasIOSurface() || context_->cgl_context() != glContext) {
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
return;
@@ -150,18 +150,12 @@
window_rect = ToNearestRect(
gfx::ScaleRect(window_rect, 1.f/window_scale_factor));
- if (!renderWidgetHostView_->compositing_iosurface_->DrawIOSurface(
- context_,
- window_rect,
- window_scale_factor,
- false)) {
- renderWidgetHostView_->GotAcceleratedCompositingError();
- return;
- }
+ bool draw_succeeded = iosurface_->DrawIOSurface(
+ context_, window_rect, window_scale_factor, false);
- needsDisplay_ = NO;
- renderWidgetHostView_->SendPendingLatencyInfoToHost();
- renderWidgetHostView_->SendPendingSwapAck();
+ needs_display_ = NO;
+ if (client_)
+ client_->AcceleratedLayerDidDrawFrame(draw_succeeded);
[super drawInCGLContext:glContext
pixelFormat:pixelFormat
diff --git a/content/browser/renderer_host/compositing_iosurface_mac.h b/content/browser/renderer_host/compositing_iosurface_mac.h
index d6835583cb..b1984d1bd7 100644
--- a/content/browser/renderer_host/compositing_iosurface_mac.h
+++ b/content/browser/renderer_host/compositing_iosurface_mac.h
@@ -15,6 +15,7 @@
#include "base/callback.h"
#include "base/lazy_instance.h"
#include "base/mac/scoped_cftyperef.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
@@ -42,11 +43,11 @@ class RenderWidgetHostViewMac;
// This class manages an OpenGL context and IOSurface for the accelerated
// compositing code path. The GL context is attached to
// RenderWidgetHostViewCocoa for blitting the IOSurface.
-class CompositingIOSurfaceMac {
+class CompositingIOSurfaceMac
+ : public base::RefCounted<CompositingIOSurfaceMac> {
public:
// Returns NULL if IOSurface support is missing or GL APIs fail.
- static CompositingIOSurfaceMac* Create();
- ~CompositingIOSurfaceMac();
+ static scoped_refptr<CompositingIOSurfaceMac> Create();
// Set IOSurface that will be drawn on the next NSView drawRect.
bool SetIOSurfaceWithContextCurrent(
@@ -113,6 +114,8 @@ class CompositingIOSurfaceMac {
bool HasBeenPoisoned() const;
private:
+ friend class base::RefCounted<CompositingIOSurfaceMac>;
+
// Vertex structure for use in glDraw calls.
struct SurfaceVertex {
SurfaceVertex() : x_(0.0f), y_(0.0f), tx_(0.0f), ty_(0.0f) { }
@@ -203,6 +206,7 @@ class CompositingIOSurfaceMac {
CompositingIOSurfaceMac(
IOSurfaceSupport* io_surface_support,
const scoped_refptr<CompositingIOSurfaceContext>& context);
+ ~CompositingIOSurfaceMac();
// If this IOSurface has moved to a different window, use that window's
// GL context (if multiple visible windows are using the same GL context
diff --git a/content/browser/renderer_host/compositing_iosurface_mac.mm b/content/browser/renderer_host/compositing_iosurface_mac.mm
index 5cae414a95..e6fae6baff 100644
--- a/content/browser/renderer_host/compositing_iosurface_mac.mm
+++ b/content/browser/renderer_host/compositing_iosurface_mac.mm
@@ -217,7 +217,7 @@ void CompositingIOSurfaceMac::CopyContext::PrepareForAsynchronousReadback() {
// static
-CompositingIOSurfaceMac* CompositingIOSurfaceMac::Create() {
+scoped_refptr<CompositingIOSurfaceMac> CompositingIOSurfaceMac::Create() {
IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
if (!io_surface_support) {
LOG(ERROR) << "No IOSurface support";
diff --git a/content/browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc b/content/browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc
index 7d9452fd01..07c5942918 100644
--- a/content/browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc
+++ b/content/browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc
@@ -194,7 +194,7 @@ SkBitmap ScaleBitmapWithSkia(const SkBitmap& src,
canvas.scale(static_cast<double>(result.width()) / cropped_src.width(),
static_cast<double>(result.height()) / cropped_src.height());
SkPaint paint;
- paint.setFilterBitmap(true); // Use bilinear filtering.
+ paint.setFilterLevel(SkPaint::kLow_FilterLevel); // Use bilinear filtering.
canvas.drawBitmap(cropped_src, 0, 0, &paint);
return result;
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 2e8e8825d3..68f6a470e5 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -57,6 +57,8 @@ class JavaBitmap;
namespace {
+const unsigned int kMaxSwapBuffers = 2U;
+
// Used to override capabilities_.adjust_deadline_for_parent to false
class OutputSurfaceWithoutParent : public cc::OutputSurface {
public:
@@ -238,7 +240,14 @@ CompositorImpl::CompositorImpl(CompositorClient* client,
window_(NULL),
surface_id_(0),
client_(client),
- root_window_(root_window) {
+ root_window_(root_window),
+ did_post_swapbuffers_(false),
+ ignore_schedule_composite_(false),
+ needs_composite_(false),
+ needs_animate_(false),
+ will_composite_immediately_(false),
+ composite_on_vsync_trigger_(DO_NOT_COMPOSITE),
+ pending_swapbuffers_(0U) {
DCHECK(client);
DCHECK(root_window);
ImageTransportFactoryAndroid::AddObserver(this);
@@ -252,9 +261,109 @@ CompositorImpl::~CompositorImpl() {
SetSurface(NULL);
}
-void CompositorImpl::Composite() {
- if (host_)
- host_->Composite(gfx::FrameTime::Now());
+void CompositorImpl::PostComposite(CompositingTrigger trigger) {
+ DCHECK(needs_composite_);
+ DCHECK(trigger == COMPOSITE_IMMEDIATELY || trigger == COMPOSITE_EVENTUALLY);
+
+ if (will_composite_immediately_ ||
+ (trigger == COMPOSITE_EVENTUALLY && WillComposite())) {
+ // We will already composite soon enough.
+ DCHECK(WillComposite());
+ return;
+ }
+
+ if (DidCompositeThisFrame()) {
+ DCHECK(!WillCompositeThisFrame());
+ if (composite_on_vsync_trigger_ != COMPOSITE_IMMEDIATELY) {
+ composite_on_vsync_trigger_ = trigger;
+ root_window_->RequestVSyncUpdate();
+ }
+ DCHECK(WillComposite());
+ return;
+ }
+
+ base::TimeDelta delay;
+ if (trigger == COMPOSITE_IMMEDIATELY) {
+ will_composite_immediately_ = true;
+ composite_on_vsync_trigger_ = DO_NOT_COMPOSITE;
+ } else {
+ DCHECK(!WillComposite());
+ const base::TimeDelta estimated_composite_time = vsync_period_ / 4;
+ const base::TimeTicks now = base::TimeTicks::Now();
+
+ if (!last_vsync_.is_null() && (now - last_vsync_) < vsync_period_) {
+ base::TimeTicks next_composite =
+ last_vsync_ + vsync_period_ - estimated_composite_time;
+ if (next_composite < now) {
+ // It's too late, we will reschedule composite as needed on the next
+ // vsync.
+ composite_on_vsync_trigger_ = COMPOSITE_EVENTUALLY;
+ root_window_->RequestVSyncUpdate();
+ DCHECK(WillComposite());
+ return;
+ }
+
+ delay = next_composite - now;
+ }
+ }
+ TRACE_EVENT2("cc", "CompositorImpl::PostComposite",
+ "trigger", trigger,
+ "delay", delay.InMillisecondsF());
+
+ DCHECK(composite_on_vsync_trigger_ == DO_NOT_COMPOSITE);
+ if (current_composite_task_)
+ current_composite_task_->Cancel();
+
+ // Unretained because we cancel the task on shutdown.
+ current_composite_task_.reset(new base::CancelableClosure(
+ base::Bind(&CompositorImpl::Composite, base::Unretained(this), trigger)));
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, current_composite_task_->callback(), delay);
+}
+
+void CompositorImpl::Composite(CompositingTrigger trigger) {
+ DCHECK(host_);
+ DCHECK(trigger == COMPOSITE_IMMEDIATELY || trigger == COMPOSITE_EVENTUALLY);
+ DCHECK(needs_composite_);
+ DCHECK(!DidCompositeThisFrame());
+
+ if (trigger == COMPOSITE_IMMEDIATELY)
+ will_composite_immediately_ = false;
+
+ DCHECK_LE(pending_swapbuffers_, kMaxSwapBuffers);
+ if (pending_swapbuffers_ == kMaxSwapBuffers) {
+ TRACE_EVENT0("compositor", "CompositorImpl_SwapLimit");
+ return;
+ }
+
+ // Reset state before Layout+Composite since that might create more
+ // requests to Composite that we need to respect.
+ needs_composite_ = false;
+
+ // Only allow compositing once per vsync.
+ current_composite_task_->Cancel();
+ DCHECK(DidCompositeThisFrame() && !WillComposite());
+
+ // Ignore ScheduleComposite() from layer tree changes during layout and
+ // animation updates that will already be reflected in the current frame
+ // we are about to draw.
+ ignore_schedule_composite_ = true;
+ client_->Layout();
+
+ const base::TimeTicks frame_time = gfx::FrameTime::Now();
+ if (needs_animate_) {
+ needs_animate_ = false;
+ root_window_->Animate(frame_time);
+ }
+ ignore_schedule_composite_ = false;
+
+ did_post_swapbuffers_ = false;
+ host_->Composite(frame_time);
+ if (did_post_swapbuffers_)
+ pending_swapbuffers_++;
+
+ // Need to track vsync to avoid compositing more than once per frame.
+ root_window_->RequestVSyncUpdate();
}
void CompositorImpl::SetRootLayer(scoped_refptr<cc::Layer> root_layer) {
@@ -312,10 +421,16 @@ void CompositorImpl::SetSurface(jobject surface) {
void CompositorImpl::SetVisible(bool visible) {
if (!visible) {
+ if (WillComposite())
+ CancelComposite();
ui_resource_map_.clear();
host_.reset();
client_->UIResourcesAreInvalid();
} else if (!host_) {
+ DCHECK(!WillComposite());
+ needs_composite_ = false;
+ needs_animate_ = false;
+ pending_swapbuffers_ = 0;
cc::LayerTreeSettings settings;
settings.refresh_rate = 60.0;
settings.impl_side_painting = false;
@@ -367,11 +482,13 @@ void CompositorImpl::SetHasTransparentBackground(bool flag) {
host_->set_has_transparent_background(flag);
}
-bool CompositorImpl::CompositeAndReadback(void *pixels, const gfx::Rect& rect) {
- if (host_)
- return host_->CompositeAndReadback(pixels, rect);
- else
- return false;
+void CompositorImpl::SetNeedsComposite() {
+ if (!host_.get())
+ return;
+ DCHECK(!needs_composite_ || WillComposite());
+
+ needs_composite_ = true;
+ PostComposite(COMPOSITE_EVENTUALLY);
}
cc::UIResourceId CompositorImpl::GenerateUIResourceFromUIResourceBitmap(
@@ -468,6 +585,13 @@ CreateGpuProcessViewContext(
NULL));
}
+void CompositorImpl::Layout() {
+ // TODO: If we get this callback from the SingleThreadProxy, we need
+ // to stop calling it ourselves in CompositorImpl::Composite().
+ NOTREACHED();
+ client_->Layout();
+}
+
scoped_ptr<cc::OutputSurface> CompositorImpl::CreateOutputSurface(
bool fallback) {
blink::WebGraphicsContext3D::Attributes attrs;
@@ -493,26 +617,50 @@ void CompositorImpl::OnLostResources() {
client_->DidLoseResources();
}
-void CompositorImpl::DidCompleteSwapBuffers() {
- client_->OnSwapBuffersCompleted();
-}
-
void CompositorImpl::ScheduleComposite() {
- client_->ScheduleComposite();
+ DCHECK(!needs_composite_ || WillComposite());
+ if (ignore_schedule_composite_)
+ return;
+
+ needs_composite_ = true;
+ // We currently expect layer tree invalidations at most once per frame
+ // during normal operation and therefore try to composite immediately
+ // to minimize latency.
+ PostComposite(COMPOSITE_IMMEDIATELY);
}
void CompositorImpl::ScheduleAnimation() {
- ScheduleComposite();
+ DCHECK(!needs_animate_ || needs_composite_);
+ DCHECK(!needs_composite_ || WillComposite());
+ needs_animate_ = true;
+
+ if (needs_composite_)
+ return;
+
+ TRACE_EVENT0("cc", "CompositorImpl::ScheduleAnimation");
+ needs_composite_ = true;
+ PostComposite(COMPOSITE_EVENTUALLY);
}
void CompositorImpl::DidPostSwapBuffers() {
TRACE_EVENT0("compositor", "CompositorImpl::DidPostSwapBuffers");
- client_->OnSwapBuffersPosted();
+ did_post_swapbuffers_ = true;
+}
+
+void CompositorImpl::DidCompleteSwapBuffers() {
+ TRACE_EVENT0("compositor", "CompositorImpl::DidCompleteSwapBuffers");
+ DCHECK_GT(pending_swapbuffers_, 0U);
+ if (pending_swapbuffers_-- == kMaxSwapBuffers && needs_composite_)
+ PostComposite(COMPOSITE_IMMEDIATELY);
+ client_->OnSwapBuffersCompleted(pending_swapbuffers_);
}
void CompositorImpl::DidAbortSwapBuffers() {
TRACE_EVENT0("compositor", "CompositorImpl::DidAbortSwapBuffers");
- client_->OnSwapBuffersCompleted();
+ DCHECK_GT(pending_swapbuffers_, 0U);
+ if (pending_swapbuffers_-- == kMaxSwapBuffers && needs_composite_)
+ PostComposite(COMPOSITE_IMMEDIATELY);
+ client_->OnSwapBuffersCompleted(pending_swapbuffers_);
}
void CompositorImpl::DidCommit() {
@@ -523,4 +671,37 @@ void CompositorImpl::AttachLayerForReadback(scoped_refptr<cc::Layer> layer) {
root_layer_->AddChild(layer);
}
+void CompositorImpl::RequestCopyOfOutputOnRootLayer(
+ scoped_ptr<cc::CopyOutputRequest> request) {
+ root_layer_->RequestCopyOfOutput(request.Pass());
+}
+
+void CompositorImpl::OnVSync(base::TimeTicks frame_time,
+ base::TimeDelta vsync_period) {
+ vsync_period_ = vsync_period;
+ last_vsync_ = frame_time;
+
+ if (WillCompositeThisFrame()) {
+ // We somehow missed the last vsync interval, so reschedule immediately.
+ CancelComposite();
+ composite_on_vsync_trigger_ = COMPOSITE_IMMEDIATELY;
+ } else {
+ current_composite_task_.reset();
+ }
+
+ DCHECK(!DidCompositeThisFrame() && !WillCompositeThisFrame());
+ if (composite_on_vsync_trigger_ != DO_NOT_COMPOSITE) {
+ CompositingTrigger trigger = composite_on_vsync_trigger_;
+ composite_on_vsync_trigger_ = DO_NOT_COMPOSITE;
+ PostComposite(trigger);
+ }
+}
+
+void CompositorImpl::SetNeedsAnimate() {
+ if (!host_)
+ return;
+
+ host_->SetNeedsAnimate();
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/compositor_impl_android.h b/content/browser/renderer_host/compositor_impl_android.h
index 969b114228..e82ca779d8 100644
--- a/content/browser/renderer_host/compositor_impl_android.h
+++ b/content/browser/renderer_host/compositor_impl_android.h
@@ -6,6 +6,7 @@
#define CONTENT_BROWSER_RENDERER_HOST_COMPOSITOR_IMPL_ANDROID_H_
#include "base/basictypes.h"
+#include "base/cancelable_callback.h"
#include "base/compiler_specific.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/memory/scoped_ptr.h"
@@ -53,6 +54,7 @@ class CONTENT_EXPORT CompositorImpl
// Destroy all surface textures associated with |child_process_id|.
static void DestroyAllSurfaceTextures(int child_process_id);
+ private:
// Compositor implementation.
virtual void SetRootLayer(scoped_refptr<cc::Layer> root) OVERRIDE;
virtual void SetWindowSurface(ANativeWindow* window) OVERRIDE;
@@ -61,9 +63,7 @@ class CONTENT_EXPORT CompositorImpl
virtual void setDeviceScaleFactor(float factor) OVERRIDE;
virtual void SetWindowBounds(const gfx::Size& size) OVERRIDE;
virtual void SetHasTransparentBackground(bool flag) OVERRIDE;
- virtual bool CompositeAndReadback(
- void *pixels, const gfx::Rect& rect) OVERRIDE;
- virtual void Composite() OVERRIDE;
+ virtual void SetNeedsComposite() OVERRIDE;
virtual cc::UIResourceId GenerateUIResource(const SkBitmap& bitmap,
bool is_transient) OVERRIDE;
virtual cc::UIResourceId GenerateCompressedUIResource(const gfx::Size& size,
@@ -76,7 +76,7 @@ class CONTENT_EXPORT CompositorImpl
virtual void WillBeginMainFrame(int frame_id) OVERRIDE {}
virtual void DidBeginMainFrame() OVERRIDE {}
virtual void Animate(base::TimeTicks frame_begin_time) OVERRIDE {}
- virtual void Layout() OVERRIDE {}
+ virtual void Layout() OVERRIDE;
virtual void ApplyScrollAndScale(const gfx::Vector2d& scroll_delta,
float page_scale) OVERRIDE {}
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback)
@@ -98,8 +98,40 @@ class CONTENT_EXPORT CompositorImpl
// WindowAndroidCompositor implementation.
virtual void AttachLayerForReadback(scoped_refptr<cc::Layer> layer) OVERRIDE;
-
- private:
+ virtual void RequestCopyOfOutputOnRootLayer(
+ scoped_ptr<cc::CopyOutputRequest> request) OVERRIDE;
+ virtual void OnVSync(base::TimeTicks frame_time,
+ base::TimeDelta vsync_period) OVERRIDE;
+ virtual void SetNeedsAnimate() OVERRIDE;
+
+ enum CompositingTrigger {
+ DO_NOT_COMPOSITE,
+ COMPOSITE_IMMEDIATELY,
+ COMPOSITE_EVENTUALLY,
+ };
+ void PostComposite(CompositingTrigger trigger);
+ void Composite(CompositingTrigger trigger);
+
+ bool WillCompositeThisFrame() const {
+ return current_composite_task_ &&
+ !current_composite_task_->callback().is_null();
+ }
+ bool DidCompositeThisFrame() const {
+ return current_composite_task_ &&
+ current_composite_task_->callback().is_null();
+ }
+ bool WillComposite() const {
+ return WillCompositeThisFrame() ||
+ composite_on_vsync_trigger_ != DO_NOT_COMPOSITE;
+ }
+ void CancelComposite() {
+ DCHECK(WillComposite());
+ if (WillCompositeThisFrame())
+ current_composite_task_->Cancel();
+ current_composite_task_.reset();
+ composite_on_vsync_trigger_ = DO_NOT_COMPOSITE;
+ will_composite_immediately_ = false;
+ }
cc::UIResourceId GenerateUIResourceFromUIResourceBitmap(
const cc::UIResourceBitmap& bitmap,
bool is_transient);
@@ -122,6 +154,36 @@ class CONTENT_EXPORT CompositorImpl
gfx::NativeWindow root_window_;
+ // Used locally to track whether a call to LTH::Composite() did result in
+ // a posted SwapBuffers().
+ bool did_post_swapbuffers_;
+
+ // Used locally to inhibit ScheduleComposite() during Layout().
+ bool ignore_schedule_composite_;
+
+ // Whether we need to composite in general because of any invalidation or
+ // explicit request.
+ bool needs_composite_;
+
+ // Whether we need to update animations on the next composite.
+ bool needs_animate_;
+
+ // Whether we posted a task and are about to composite.
+ bool will_composite_immediately_;
+
+ // How we should schedule Composite during the next vsync.
+ CompositingTrigger composite_on_vsync_trigger_;
+
+ // The Composite operation scheduled for the current vsync interval.
+ scoped_ptr<base::CancelableClosure> current_composite_task_;
+
+ // The number of SwapBuffer calls that have not returned and ACK'd from
+ // the GPU thread.
+ unsigned int pending_swapbuffers_;
+
+ base::TimeDelta vsync_period_;
+ base::TimeTicks last_vsync_;
+
DISALLOW_COPY_AND_ASSIGN(CompositorImpl);
};
diff --git a/content/browser/renderer_host/database_message_filter.cc b/content/browser/renderer_host/database_message_filter.cc
index d0f07baac7..5dd3d7c351 100644
--- a/content/browser/renderer_host/database_message_filter.cc
+++ b/content/browser/renderer_host/database_message_filter.cc
@@ -87,11 +87,9 @@ void DatabaseMessageFilter::OverrideThreadForMessage(
}
}
-bool DatabaseMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+bool DatabaseMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(DatabaseMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(DatabaseMessageFilter, message)
IPC_MESSAGE_HANDLER_DELAY_REPLY(DatabaseHostMsg_OpenFile,
OnDatabaseOpenFile)
IPC_MESSAGE_HANDLER_DELAY_REPLY(DatabaseHostMsg_DeleteFile,
@@ -107,7 +105,7 @@ bool DatabaseMessageFilter::OnMessageReceived(
IPC_MESSAGE_HANDLER(DatabaseHostMsg_Closed, OnDatabaseClosed)
IPC_MESSAGE_HANDLER(DatabaseHostMsg_HandleSqliteError, OnHandleSqliteError)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/database_message_filter.h b/content/browser/renderer_host/database_message_filter.h
index 5024335633..aa99e03c4e 100644
--- a/content/browser/renderer_host/database_message_filter.h
+++ b/content/browser/renderer_host/database_message_filter.h
@@ -25,8 +25,7 @@ class DatabaseMessageFilter
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
webkit_database::DatabaseTracker* database_tracker() const {
return db_tracker_.get();
diff --git a/content/browser/renderer_host/dip_util.cc b/content/browser/renderer_host/dip_util.cc
index f855abf4af..30490158a3 100644
--- a/content/browser/renderer_host/dip_util.cc
+++ b/content/browser/renderer_host/dip_util.cc
@@ -5,6 +5,7 @@
#include "content/browser/renderer_host/dip_util.h"
#include "content/public/browser/render_widget_host_view.h"
+#include "ui/base/layout.h"
#include "ui/gfx/display.h"
#include "ui/gfx/point.h"
#include "ui/gfx/point_conversions.h"
@@ -15,33 +16,25 @@
#include "ui/gfx/size_conversions.h"
namespace content {
-namespace {
-float GetScaleForView(const RenderWidgetHostView* view) {
- return ui::GetImageScale(GetScaleFactorForView(view));
-}
-
-} // namespace
-
-ui::ScaleFactor GetScaleFactorForView(const RenderWidgetHostView* view) {
+float GetScaleFactorForView(const RenderWidgetHostView* view) {
return ui::GetScaleFactorForNativeView(view ? view->GetNativeView() : NULL);
}
gfx::Point ConvertViewPointToDIP(const RenderWidgetHostView* view,
const gfx::Point& point_in_pixel) {
return gfx::ToFlooredPoint(
- gfx::ScalePoint(point_in_pixel, 1.0f / GetScaleForView(view)));
+ gfx::ScalePoint(point_in_pixel, 1.0f / GetScaleFactorForView(view)));
}
gfx::Size ConvertViewSizeToPixel(const RenderWidgetHostView* view,
const gfx::Size& size_in_dip) {
- return gfx::ToFlooredSize(
- gfx::ScaleSize(size_in_dip, GetScaleForView(view)));
+ return ConvertSizeToPixel(GetScaleFactorForView(view), size_in_dip);
}
gfx::Rect ConvertViewRectToPixel(const RenderWidgetHostView* view,
const gfx::Rect& rect_in_dip) {
- return ConvertRectToPixel(GetScaleForView(view), rect_in_dip);
+ return ConvertRectToPixel(GetScaleFactorForView(view), rect_in_dip);
}
gfx::Size ConvertSizeToDIP(float scale_factor,
@@ -56,6 +49,10 @@ gfx::Rect ConvertRectToDIP(float scale_factor,
gfx::ScaleRect(rect_in_pixel, 1.0f / scale_factor));
}
+gfx::Size ConvertSizeToPixel(float scale_factor,
+ const gfx::Size& size_in_dip) {
+ return gfx::ToFlooredSize(gfx::ScaleSize(size_in_dip, scale_factor));
+}
gfx::Rect ConvertRectToPixel(float scale_factor,
const gfx::Rect& rect_in_dip) {
diff --git a/content/browser/renderer_host/dip_util.h b/content/browser/renderer_host/dip_util.h
index a7e1876ec7..27e7dd19e9 100644
--- a/content/browser/renderer_host/dip_util.h
+++ b/content/browser/renderer_host/dip_util.h
@@ -6,7 +6,6 @@
#define CONTENT_BROWSER_RENDERER_HOST_DIP_UTIL_H_
#include "content/common/content_export.h"
-#include "ui/base/layout.h"
namespace gfx {
class Point;
@@ -18,9 +17,8 @@ namespace content {
class RenderWidgetHostView;
// Returns scale factor of the display nearest to |view|.
-// Returns ui::SCALE_FACTOR_100P if the platform does not support DIP.
-CONTENT_EXPORT ui::ScaleFactor GetScaleFactorForView(
- const RenderWidgetHostView* view);
+// Returns 1.0f if the platform does not support DIP.
+CONTENT_EXPORT float GetScaleFactorForView(const RenderWidgetHostView* view);
// Utility functions that convert point/size/rect between DIP and pixel
// coordinate system.
@@ -35,6 +33,8 @@ CONTENT_EXPORT gfx::Size ConvertSizeToDIP(
float scale_factor, const gfx::Size& size_in_pixel);
CONTENT_EXPORT gfx::Rect ConvertRectToDIP(
float scale_factor, const gfx::Rect& rect_in_pixel);
+CONTENT_EXPORT gfx::Size ConvertSizeToPixel(
+ float scale_factor, const gfx::Size& size_in_pixel);
CONTENT_EXPORT gfx::Rect ConvertRectToPixel(
float scale_factor, const gfx::Rect& rect_in_dip);
diff --git a/content/browser/renderer_host/file_utilities_message_filter.cc b/content/browser/renderer_host/file_utilities_message_filter.cc
index e784ee34ae..d819c6dcc9 100644
--- a/content/browser/renderer_host/file_utilities_message_filter.cc
+++ b/content/browser/renderer_host/file_utilities_message_filter.cc
@@ -25,10 +25,10 @@ void FileUtilitiesMessageFilter::OverrideThreadForMessage(
*thread = BrowserThread::FILE;
}
-bool FileUtilitiesMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool FileUtilitiesMessageFilter::OnMessageReceived(
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(FileUtilitiesMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(FileUtilitiesMessageFilter, message)
IPC_MESSAGE_HANDLER(FileUtilitiesMsg_GetFileInfo, OnGetFileInfo)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
diff --git a/content/browser/renderer_host/file_utilities_message_filter.h b/content/browser/renderer_host/file_utilities_message_filter.h
index e067f2eb54..ecfbfe02ce 100644
--- a/content/browser/renderer_host/file_utilities_message_filter.h
+++ b/content/browser/renderer_host/file_utilities_message_filter.h
@@ -24,8 +24,7 @@ class FileUtilitiesMessageFilter : public BrowserMessageFilter {
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~FileUtilitiesMessageFilter();
diff --git a/content/browser/renderer_host/gamepad_browser_message_filter.cc b/content/browser/renderer_host/gamepad_browser_message_filter.cc
index f616a74b83..ef66a5cbd3 100644
--- a/content/browser/renderer_host/gamepad_browser_message_filter.cc
+++ b/content/browser/renderer_host/gamepad_browser_message_filter.cc
@@ -21,16 +21,13 @@ GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() {
}
bool GamepadBrowserMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(GamepadBrowserMessageFilter,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(GamepadBrowserMessageFilter, message)
IPC_MESSAGE_HANDLER(GamepadHostMsg_StartPolling, OnGamepadStartPolling)
IPC_MESSAGE_HANDLER(GamepadHostMsg_StopPolling, OnGamepadStopPolling)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/gamepad_browser_message_filter.h b/content/browser/renderer_host/gamepad_browser_message_filter.h
index f328739cae..fefbf424e4 100644
--- a/content/browser/renderer_host/gamepad_browser_message_filter.h
+++ b/content/browser/renderer_host/gamepad_browser_message_filter.h
@@ -22,8 +22,7 @@ class GamepadBrowserMessageFilter :
GamepadBrowserMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// GamepadConsumer implementation.
virtual void OnGamepadConnected(
diff --git a/content/browser/renderer_host/gpu_message_filter.cc b/content/browser/renderer_host/gpu_message_filter.cc
index 856d14b9ec..3c2295657c 100644
--- a/content/browser/renderer_host/gpu_message_filter.cc
+++ b/content/browser/renderer_host/gpu_message_filter.cc
@@ -67,17 +67,15 @@ GpuMessageFilter::~GpuMessageFilter() {
EndAllFrameSubscriptions();
}
-bool GpuMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+bool GpuMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(GpuMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(GpuMessageFilter, message)
IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_EstablishGpuChannel,
OnEstablishGpuChannel)
IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_CreateViewCommandBuffer,
OnCreateViewCommandBuffer)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/gpu_message_filter.h b/content/browser/renderer_host/gpu_message_filter.h
index 1d42fb2d9a..327cd76c67 100644
--- a/content/browser/renderer_host/gpu_message_filter.h
+++ b/content/browser/renderer_host/gpu_message_filter.h
@@ -36,8 +36,7 @@ class GpuMessageFilter : public BrowserMessageFilter {
RenderWidgetHelper* render_widget_helper);
// BrowserMessageFilter methods:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// This set of API is used to subscribe to frame presentation events.
// See RenderWidgetHostViewFrameSubscriber for more details.
diff --git a/content/browser/renderer_host/input/input_router_client.h b/content/browser/renderer_host/input/input_router_client.h
index 647c081e3b..89efb37915 100644
--- a/content/browser/renderer_host/input/input_router_client.h
+++ b/content/browser/renderer_host/input/input_router_client.h
@@ -18,6 +18,7 @@ struct LatencyInfo;
namespace content {
class OverscrollController;
+struct DidOverscrollParams;
class CONTENT_EXPORT InputRouterClient {
public:
@@ -56,6 +57,8 @@ class CONTENT_EXPORT InputRouterClient {
// of the call to Flush. The call will typically be asynchronous with
// respect to the call to |Flush| on the InputRouter.
virtual void DidFlush() = 0;
+
+ virtual void DidOverscroll(const DidOverscrollParams& params) = 0;
};
} // namespace content
diff --git a/content/browser/renderer_host/input/input_router_config_helper.cc b/content/browser/renderer_host/input/input_router_config_helper.cc
index bbd6f792ac..75109d497e 100644
--- a/content/browser/renderer_host/input/input_router_config_helper.cc
+++ b/content/browser/renderer_host/input/input_router_config_helper.cc
@@ -60,6 +60,8 @@ TouchEventQueue::Config GetTouchEventQueueConfig() {
config.touchmove_slop_suppression_length_dips =
ui::GestureConfiguration::max_touch_move_in_pixels_for_click();
+ // TODO(jdduke): Remove when unified GR enabled, crbug.com/332418.
+ config.touchmove_slop_suppression_region_includes_boundary = false;
return config;
}
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index 08b9e45478..5167b266b5 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -181,7 +181,8 @@ void InputRouterImpl::SendGestureEvent(
if (touch_action_filter_.FilterGestureEvent(&gesture_event.event))
return;
- touch_event_queue_.OnGestureScrollEvent(gesture_event);
+ if (gesture_event.event.sourceDevice == WebGestureEvent::Touchscreen)
+ touch_event_queue_.OnGestureScrollEvent(gesture_event);
if (!IsInOverscrollGesture() &&
!gesture_event_queue_.ShouldForward(gesture_event)) {
@@ -267,9 +268,9 @@ void InputRouterImpl::OnViewUpdated(int view_flags) {
bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- bool message_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(InputRouterImpl, message, message_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(InputRouterImpl, message)
IPC_MESSAGE_HANDLER(InputHostMsg_HandleInputEvent_ACK, OnInputEventAck)
+ IPC_MESSAGE_HANDLER(InputHostMsg_DidOverscroll, OnDidOverscroll)
IPC_MESSAGE_HANDLER(ViewHostMsg_MoveCaret_ACK, OnMsgMoveCaretAck)
IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnSelectRangeAck)
IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers,
@@ -279,9 +280,6 @@ bool InputRouterImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
- if (!message_is_ok)
- ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE);
-
return handled;
}
@@ -489,16 +487,21 @@ void InputRouterImpl::SendSyntheticWheelEventForPinch(
MouseWheelEventWithLatencyInfo(wheelEvent, pinch_event.latency), true));
}
-void InputRouterImpl::OnInputEventAck(WebInputEvent::Type event_type,
- InputEventAckState ack_result,
- const ui::LatencyInfo& latency_info) {
+void InputRouterImpl::OnInputEventAck(
+ const InputHostMsg_HandleInputEvent_ACK_Params& ack) {
client_->DecrementInFlightEventCount();
// Log the time delta for processing an input event.
TimeDelta delta = TimeTicks::Now() - input_event_start_time_;
UMA_HISTOGRAM_TIMES("MPArch.IIR_InputEventDelta", delta);
- ProcessInputEventAck(event_type, ack_result, latency_info, RENDERER);
+ if (ack.overscroll) {
+ DCHECK(ack.type == WebInputEvent::MouseWheel ||
+ ack.type == WebInputEvent::GestureScrollUpdate);
+ OnDidOverscroll(*ack.overscroll);
+ }
+
+ ProcessInputEventAck(ack.type, ack.state, ack.latency, RENDERER);
// WARNING: |this| may be deleted at this point.
// This is used only for testing, and the other end does not use the
@@ -508,13 +511,17 @@ void InputRouterImpl::OnInputEventAck(WebInputEvent::Type event_type,
// (ProcessInputEventAck) method, but not on other platforms; using
// 'void' instead is just as safe (since NotificationSource
// is not actually typesafe) and avoids this error.
- int type = static_cast<int>(event_type);
+ int type = static_cast<int>(ack.type);
NotificationService::current()->Notify(
NOTIFICATION_RENDER_WIDGET_HOST_DID_RECEIVE_INPUT_EVENT_ACK,
Source<void>(this),
Details<int>(&type));
}
+void InputRouterImpl::OnDidOverscroll(const DidOverscrollParams& params) {
+ client_->DidOverscroll(params);
+}
+
void InputRouterImpl::OnMsgMoveCaretAck() {
move_caret_pending_ = false;
if (next_move_caret_)
@@ -531,6 +538,15 @@ void InputRouterImpl::OnHasTouchEventHandlers(bool has_handlers) {
TRACE_EVENT1("input", "InputRouterImpl::OnHasTouchEventHandlers",
"has_handlers", has_handlers);
+ // Lack of a touch handler indicates that the page either has no touch-action
+ // modifiers or that all its touch-action modifiers are auto. Resetting the
+ // touch-action here allows forwarding of subsequent gestures even if the
+ // underlying touches never reach the router.
+ // TODO(jdduke): Reset touch-action only at the end of a touch sequence to
+ // prevent potentially strange mid-sequence behavior, crbug.com/375940.
+ if (!has_handlers)
+ touch_action_filter_.ResetTouchAction();
+
touch_event_queue_.OnHasTouchEventHandlers(has_handlers);
client_->OnHasTouchEventHandlers(has_handlers);
}
@@ -609,6 +625,7 @@ void InputRouterImpl::ProcessMouseAck(blink::WebInputEvent::Type type,
if (type != WebInputEvent::MouseMove)
return;
+ DCHECK(mouse_move_pending_);
mouse_move_pending_ = false;
if (next_mouse_move_) {
diff --git a/content/browser/renderer_host/input/input_router_impl.h b/content/browser/renderer_host/input/input_router_impl.h
index 76af1c4e1a..6501489bbe 100644
--- a/content/browser/renderer_host/input/input_router_impl.h
+++ b/content/browser/renderer_host/input/input_router_impl.h
@@ -18,6 +18,8 @@
#include "content/common/input/input_event_stream_validator.h"
#include "content/public/browser/native_web_keyboard_event.h"
+struct InputHostMsg_HandleInputEvent_ACK_Params;
+
namespace IPC {
class Sender;
}
@@ -32,6 +34,7 @@ class InputAckHandler;
class InputRouterClient;
class OverscrollController;
class RenderWidgetHostImpl;
+struct DidOverscrollParams;
// A default implementation for browser input event routing.
class CONTENT_EXPORT InputRouterImpl
@@ -146,9 +149,8 @@ private:
const GestureEventWithLatencyInfo& pinch_event);
// IPC message handlers
- void OnInputEventAck(blink::WebInputEvent::Type event_type,
- InputEventAckState ack_result,
- const ui::LatencyInfo& latency_info);
+ void OnInputEventAck(const InputHostMsg_HandleInputEvent_ACK_Params& ack);
+ void OnDidOverscroll(const DidOverscrollParams& params);
void OnMsgMoveCaretAck();
void OnSelectRangeAck();
void OnHasTouchEventHandlers(bool has_handlers);
diff --git a/content/browser/renderer_host/input/input_router_impl_perftest.cc b/content/browser/renderer_host/input/input_router_impl_perftest.cc
index 972fc49c11..3db414e56d 100644
--- a/content/browser/renderer_host/input/input_router_impl_perftest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_perftest.cc
@@ -82,6 +82,7 @@ class NullInputRouterClient : public InputRouterClient {
}
virtual void DidFlush() OVERRIDE {}
virtual void SetNeedsFlush() OVERRIDE {}
+ virtual void DidOverscroll(const DidOverscrollParams& params) OVERRIDE {}
};
class NullIPCSender : public IPC::Sender {
@@ -237,8 +238,10 @@ class InputRouterImplPerfTest : public testing::Test {
InputEventAckState ack_result) {
if (WebInputEventTraits::IgnoresAckDisposition(event))
return;
- InputHostMsg_HandleInputEvent_ACK response(
- 0, event.type, ack_result, ui::LatencyInfo());
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = event.type;
+ ack.state = ack_result;
+ InputHostMsg_HandleInputEvent_ACK response(0, ack);
input_router_->OnMessageReceived(response);
}
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc
index 1039e70804..1ff759d23a 100644
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -293,10 +293,10 @@ class InputRouterImplTest : public testing::Test {
void SendInputEventACK(blink::WebInputEvent::Type type,
InputEventAckState ack_result) {
- scoped_ptr<IPC::Message> response(
- new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result,
- ui::LatencyInfo()));
- input_router_->OnMessageReceived(*response);
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = type;
+ ack.state = ack_result;
+ input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
}
InputRouterImpl* input_router() const {
@@ -1178,14 +1178,14 @@ TEST_F(InputRouterImplTest,
// Test that TouchActionFilter::ResetTouchAction is called before the
// first touch event for a touch sequence reaches the renderer.
-TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) {
+TEST_F(InputRouterImplTest, TouchActionResetBeforeEventReachesRenderer) {
OnHasTouchEventHandlers(true);
// Sequence 1.
PressTouchPoint(1, 1);
SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
- MoveTouchPoint(0, 5, 5);
+ MoveTouchPoint(0, 50, 50);
SendTouchEvent();
ReleaseTouchPoint(0);
SendTouchEvent();
@@ -1193,7 +1193,7 @@ TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) {
// Sequence 2.
PressTouchPoint(1, 1);
SendTouchEvent();
- MoveTouchPoint(0, 5, 5);
+ MoveTouchPoint(0, 50, 50);
SendTouchEvent();
ReleaseTouchPoint(0);
SendTouchEvent();
@@ -1205,10 +1205,10 @@ TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) {
// acked yet. ScrollBegin and ScrollEnd don't require acks.
EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
// This allows the next touch sequence to start.
@@ -1216,29 +1216,31 @@ TEST_F(InputRouterImplTest, ResetTouchActionBeforeEventReachesRenderer) {
// Ensure touch action has been set to auto, as a new touch sequence has
// started.
- EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+ SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
+ EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
-
- SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
- SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
}
-// Test that TouchActionFilter::OnStartNewTouchSequence is called when a touch
-// handler is removed.
-TEST_F(InputRouterImplTest, OnStartNewTouchSequenceWhenTouchHandlerRemoved) {
+// Test that TouchActionFilter::ResetTouchAction is called when a new touch
+// sequence has no consumer.
+TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHasNoConsumer) {
OnHasTouchEventHandlers(true);
// Sequence 1.
PressTouchPoint(1, 1);
SendTouchEvent();
+ MoveTouchPoint(0, 50, 50);
+ SendTouchEvent();
OnSetTouchAction(TOUCH_ACTION_NONE);
SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendInputEventACK(WebInputEvent::TouchMove, INPUT_EVENT_ACK_STATE_CONSUMED);
ReleaseTouchPoint(0);
SendTouchEvent();
@@ -1246,29 +1248,76 @@ TEST_F(InputRouterImplTest, OnStartNewTouchSequenceWhenTouchHandlerRemoved) {
// Sequence 2
PressTouchPoint(1, 1);
SendTouchEvent();
+ MoveTouchPoint(0, 50, 50);
+ SendTouchEvent();
+ ReleaseTouchPoint(0);
+ SendTouchEvent();
// Ensure we have touch-action:none. ScrollBegin and ScrollEnd don't require
// acks.
- EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
+ EXPECT_EQ(3U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
SendInputEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED);
SendInputEventACK(WebInputEvent::TouchStart,
INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
- // Ensure touch action has been set to auto, the touch handler has been
- // removed.
+ // Ensure touch action has been set to auto, as the touch had no consumer.
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
- WebGestureEvent::Touchpad);
+ WebGestureEvent::Touchscreen);
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+}
+
+// Test that TouchActionFilter::ResetTouchAction is called when the touch
+// handler is removed.
+TEST_F(InputRouterImplTest, TouchActionResetWhenTouchHandlerRemoved) {
+ // Touch sequence with touch handler.
+ OnHasTouchEventHandlers(true);
+ PressTouchPoint(1, 1);
+ SendTouchEvent();
+ MoveTouchPoint(0, 50, 50);
+ SendTouchEvent();
+ OnSetTouchAction(TOUCH_ACTION_NONE);
+ ReleaseTouchPoint(0);
+ SendTouchEvent();
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+
+ // Ensure we have touch-action:none, suppressing scroll events.
+ SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+ SendInputEventACK(WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+ SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
+ WebGestureEvent::Touchscreen);
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
+
+ SendInputEventACK(WebInputEvent::TouchEnd,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
+ WebGestureEvent::Touchscreen);
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
+
+ // Sequence without a touch handler. Note that in this case, the view may not
+ // necessarily forward touches to the router (as no touch handler exists).
+ OnHasTouchEventHandlers(false);
+
+ // Ensure touch action has been set to auto, as the touch handler has been
+ // removed.
+ SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
+ WebGestureEvent::Touchscreen);
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
+ SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
+ WebGestureEvent::Touchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
}
@@ -1653,4 +1702,42 @@ TEST_F(InputRouterImplTest, TouchpadPinchAndScrollUpdate) {
EXPECT_EQ(0, client_->in_flight_event_count());
}
+// Test proper routing of overscroll notifications received either from
+// event acks or from |DidOverscroll| IPC messages.
+TEST_F(InputRouterImplTest, OverscrollDispatch) {
+ DidOverscrollParams overscroll;
+ overscroll.accumulated_overscroll = gfx::Vector2dF(-14, 14);
+ overscroll.latest_overscroll_delta = gfx::Vector2dF(-7, 0);
+ overscroll.current_fling_velocity = gfx::Vector2dF(-1, 0);
+
+ input_router_->OnMessageReceived(InputHostMsg_DidOverscroll(0, overscroll));
+ DidOverscrollParams client_overscroll = client_->GetAndResetOverscroll();
+ EXPECT_EQ(overscroll.accumulated_overscroll,
+ client_overscroll.accumulated_overscroll);
+ EXPECT_EQ(overscroll.latest_overscroll_delta,
+ client_overscroll.latest_overscroll_delta);
+ EXPECT_EQ(overscroll.current_fling_velocity,
+ client_overscroll.current_fling_velocity);
+
+ DidOverscrollParams wheel_overscroll;
+ wheel_overscroll.accumulated_overscroll = gfx::Vector2dF(7, -7);
+ wheel_overscroll.latest_overscroll_delta = gfx::Vector2dF(3, 0);
+ wheel_overscroll.current_fling_velocity = gfx::Vector2dF(1, 0);
+
+ SimulateWheelEvent(3, 0, 0, false);
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = WebInputEvent::MouseWheel;
+ ack.state = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
+ ack.overscroll.reset(new DidOverscrollParams(wheel_overscroll));
+ input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
+
+ client_overscroll = client_->GetAndResetOverscroll();
+ EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
+ client_overscroll.accumulated_overscroll);
+ EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
+ client_overscroll.latest_overscroll_delta);
+ EXPECT_EQ(wheel_overscroll.current_fling_velocity,
+ client_overscroll.current_fling_velocity);
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/input/mock_input_router_client.cc b/content/browser/renderer_host/input/mock_input_router_client.cc
index 9b5317d81e..cb576efdfd 100644
--- a/content/browser/renderer_host/input/mock_input_router_client.cc
+++ b/content/browser/renderer_host/input/mock_input_router_client.cc
@@ -50,6 +50,22 @@ void MockInputRouterClient::OnHasTouchEventHandlers(
has_touch_handler_ = has_handlers;
}
+OverscrollController* MockInputRouterClient::GetOverscrollController() const {
+ return NULL;
+}
+
+void MockInputRouterClient::DidFlush() {
+ ++did_flush_called_count_;
+}
+
+void MockInputRouterClient::DidOverscroll(const DidOverscrollParams& params) {
+ overscroll_ = params;
+}
+
+void MockInputRouterClient::SetNeedsFlush() {
+ set_needs_flush_called_ = true;
+}
+
bool MockInputRouterClient::GetAndResetFilterEventCalled() {
bool filter_input_event_called = filter_input_event_called_;
filter_input_event_called_ = false;
@@ -62,16 +78,10 @@ size_t MockInputRouterClient::GetAndResetDidFlushCount() {
return did_flush_called_count;
}
-OverscrollController* MockInputRouterClient::GetOverscrollController() const {
- return NULL;
-}
-
-void MockInputRouterClient::DidFlush() {
- ++did_flush_called_count_;
-}
-
-void MockInputRouterClient::SetNeedsFlush() {
- set_needs_flush_called_ = true;
+DidOverscrollParams MockInputRouterClient::GetAndResetOverscroll() {
+ DidOverscrollParams overscroll;
+ std::swap(overscroll_, overscroll);
+ return overscroll;
}
} // namespace content
diff --git a/content/browser/renderer_host/input/mock_input_router_client.h b/content/browser/renderer_host/input/mock_input_router_client.h
index fdfbbc5a43..68b0c6f196 100644
--- a/content/browser/renderer_host/input/mock_input_router_client.h
+++ b/content/browser/renderer_host/input/mock_input_router_client.h
@@ -7,6 +7,7 @@
#include "base/memory/scoped_ptr.h"
#include "content/browser/renderer_host/input/input_router_client.h"
+#include "content/common/input/did_overscroll_params.h"
namespace content {
@@ -27,10 +28,12 @@ class MockInputRouterClient : public InputRouterClient {
virtual void OnHasTouchEventHandlers(bool has_handlers) OVERRIDE;
virtual OverscrollController* GetOverscrollController() const OVERRIDE;
virtual void DidFlush() OVERRIDE;
+ virtual void DidOverscroll(const DidOverscrollParams& params) OVERRIDE;
virtual void SetNeedsFlush() OVERRIDE;
bool GetAndResetFilterEventCalled();
size_t GetAndResetDidFlushCount();
+ DidOverscrollParams GetAndResetOverscroll();
void set_input_router(InputRouter* input_router) {
input_router_ = input_router;
@@ -59,6 +62,8 @@ class MockInputRouterClient : public InputRouterClient {
size_t did_flush_called_count_;
bool set_needs_flush_called_;
+
+ DidOverscrollParams overscroll_;
};
} // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
index d9cdbf4411..b79e797aad 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
@@ -36,7 +36,8 @@ namespace {
const int kFlushInputRateInMs = 16;
const int kPointerAssumedStoppedTimeMs = 43;
-const int kTouchSlopInDips = 7;
+const float kTouchSlopInDips = 7.0f;
+const float kMinScalingSpanInDips = 27.5f;
class MockSyntheticGesture : public SyntheticGesture {
public:
@@ -97,10 +98,14 @@ class MockSyntheticGestureTarget : public SyntheticGestureTarget {
pointer_assumed_stopped_time_ms_ = time_ms;
}
- virtual int GetTouchSlopInDips() const OVERRIDE {
+ virtual float GetTouchSlopInDips() const OVERRIDE {
return kTouchSlopInDips;
}
+ virtual float GetMinScalingSpanInDips() const OVERRIDE {
+ return kMinScalingSpanInDips;
+ }
+
bool flush_requested() const { return flush_requested_; }
void ClearFlushRequest() { flush_requested_ = false; }
@@ -191,7 +196,7 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
};
MockSyntheticPinchTouchTarget()
- : total_num_pixels_covered_(0),
+ : initial_pointer_distance_(0),
last_pointer_distance_(0),
zoom_direction_(ZOOM_DIRECTION_UNKNOWN),
started_(false) {}
@@ -209,6 +214,8 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
start_0_ = gfx::PointF(touch_event.touches[0].position);
start_1_ = gfx::PointF(touch_event.touches[1].position);
last_pointer_distance_ = (start_0_ - start_1_).Length();
+ initial_pointer_distance_ = last_pointer_distance_;
+ EXPECT_GE(initial_pointer_distance_, GetMinScalingSpanInDips());
started_ = true;
} else {
@@ -218,8 +225,6 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
gfx::PointF current_0 = gfx::PointF(touch_event.touches[0].position);
gfx::PointF current_1 = gfx::PointF(touch_event.touches[1].position);
- total_num_pixels_covered_ =
- (current_0 - start_0_).Length() + (current_1 - start_1_).Length();
float pointer_distance = (current_0 - current_1).Length();
if (last_pointer_distance_ != pointer_distance) {
@@ -236,9 +241,24 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
}
}
- float total_num_pixels_covered() const { return total_num_pixels_covered_; }
ZoomDirection zoom_direction() const { return zoom_direction_; }
+ float ComputeScaleFactor() const {
+ switch (zoom_direction_) {
+ case ZOOM_IN:
+ return last_pointer_distance_ /
+ (initial_pointer_distance_ + 2 * GetTouchSlopInDips());
+ case ZOOM_OUT:
+ return last_pointer_distance_ /
+ (initial_pointer_distance_ - 2 * GetTouchSlopInDips());
+ case ZOOM_DIRECTION_UNKNOWN:
+ return 1.0f;
+ default:
+ NOTREACHED();
+ return 0.0f;
+ }
+ }
+
private:
ZoomDirection ComputeZoomDirection(float last_pointer_distance,
float current_pointer_distance) {
@@ -247,7 +267,7 @@ class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget {
: ZOOM_OUT;
}
- float total_num_pixels_covered_;
+ float initial_pointer_distance_;
float last_pointer_distance_;
ZoomDirection zoom_direction_;
gfx::PointF start_0_;
@@ -883,8 +903,7 @@ TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) {
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
- params.zoom_in = true;
- params.total_num_pixels_covered = 345;
+ params.scale_factor = 2.3f;
params.anchor.SetPoint(54, 89);
scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
@@ -897,8 +916,7 @@ TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) {
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
MockSyntheticPinchTouchTarget::ZOOM_IN);
- EXPECT_EQ(params.total_num_pixels_covered + 2 * target_->GetTouchSlopInDips(),
- pinch_target->total_num_pixels_covered());
+ EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomOut) {
@@ -906,8 +924,7 @@ TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomOut) {
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
- params.zoom_in = false;
- params.total_num_pixels_covered = 456;
+ params.scale_factor = 0.4f;
params.anchor.SetPoint(-12, 93);
scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
@@ -920,17 +937,15 @@ TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomOut) {
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
MockSyntheticPinchTouchTarget::ZOOM_OUT);
- EXPECT_EQ(params.total_num_pixels_covered + 2 * target_->GetTouchSlopInDips(),
- pinch_target->total_num_pixels_covered());
+ EXPECT_FLOAT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
-TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZeroPixelsCovered) {
+TEST_F(SyntheticGestureControllerTest, PinchGestureTouchNoScaling) {
CreateControllerAndTarget<MockSyntheticPinchTouchTarget>();
SyntheticPinchGestureParams params;
params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
- params.zoom_in = true;
- params.total_num_pixels_covered = 0;
+ params.scale_factor = 1.0f;
scoped_ptr<SyntheticPinchGesture> gesture(new SyntheticPinchGesture(params));
QueueSyntheticGesture(gesture.PassAs<SyntheticGesture>());
@@ -942,7 +957,7 @@ TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZeroPixelsCovered) {
EXPECT_EQ(0, num_failure_);
EXPECT_EQ(pinch_target->zoom_direction(),
MockSyntheticPinchTouchTarget::ZOOM_DIRECTION_UNKNOWN);
- EXPECT_EQ(0, pinch_target->total_num_pixels_covered());
+ EXPECT_EQ(params.scale_factor, pinch_target->ComputeScaleFactor());
}
TEST_F(SyntheticGestureControllerTest, TapGestureTouch) {
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target.h b/content/browser/renderer_host/input/synthetic_gesture_target.h
index b7bb2bab5a..14724bf67f 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target.h
@@ -42,7 +42,11 @@ class CONTENT_EXPORT SyntheticGestureTarget {
// Returns the maximum number of DIPs a touch pointer can move without being
// considered moving by the platform.
- virtual int GetTouchSlopInDips() const = 0;
+ virtual float GetTouchSlopInDips() const = 0;
+
+ // Returns the minimum number of DIPs two touch pointers have to be apart
+ // to perform a pinch-zoom.
+ virtual float GetMinScalingSpanInDips() const = 0;
};
} // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_android.cc b/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
index 91792c2a8a..a1e5dea6b7 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
@@ -92,10 +92,17 @@ SyntheticGestureTargetAndroid::GetDefaultSyntheticGestureSourceType() const {
return SyntheticGestureParams::TOUCH_INPUT;
}
-int SyntheticGestureTargetAndroid::GetTouchSlopInDips() const {
+float SyntheticGestureTargetAndroid::GetTouchSlopInDips() const {
float device_scale_factor =
gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().device_scale_factor();
return gfx::ViewConfiguration::GetTouchSlopInPixels() / device_scale_factor;
}
+float SyntheticGestureTargetAndroid::GetMinScalingSpanInDips() const {
+ float device_scale_factor =
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().device_scale_factor();
+ return
+ gfx::ViewConfiguration::GetMinScalingSpanInPixels() / device_scale_factor;
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_android.h b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
index 0ec427bc56..dcf146ffb9 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_android.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
@@ -37,7 +37,9 @@ class SyntheticGestureTargetAndroid : public SyntheticGestureTargetBase {
virtual SyntheticGestureParams::GestureSourceType
GetDefaultSyntheticGestureSourceType() const OVERRIDE;
- virtual int GetTouchSlopInDips() const OVERRIDE;
+ virtual float GetTouchSlopInDips() const OVERRIDE;
+
+ virtual float GetMinScalingSpanInDips() const OVERRIDE;
private:
// Enum values below need to be kept in sync with TouchEventSynthesizer.java
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc b/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
index 9825cb5c5f..0b4d9c8c97 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
@@ -132,12 +132,16 @@ SyntheticGestureTargetAura::GetDefaultSyntheticGestureSourceType() const {
return SyntheticGestureParams::TOUCH_INPUT;
}
-int SyntheticGestureTargetAura::GetTouchSlopInDips() const {
+float SyntheticGestureTargetAura::GetTouchSlopInDips() const {
// - 1 because Aura considers a pointer to be moving if it has moved at least
// 'max_touch_move_in_pixels_for_click' pixels.
return ui::GestureConfiguration::max_touch_move_in_pixels_for_click() - 1;
}
+float SyntheticGestureTargetAura::GetMinScalingSpanInDips() const {
+ return ui::GestureConfiguration::min_distance_for_pinch_scroll_in_pixels();
+}
+
aura::Window* SyntheticGestureTargetAura::GetWindow() const {
aura::Window* window = render_widget_host()->GetView()->GetNativeView();
DCHECK(window);
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_aura.h b/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
index b28d0be9e0..f3634d6116 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
@@ -40,7 +40,9 @@ class SyntheticGestureTargetAura : public SyntheticGestureTargetBase {
virtual SyntheticGestureParams::GestureSourceType
GetDefaultSyntheticGestureSourceType() const OVERRIDE;
- virtual int GetTouchSlopInDips() const OVERRIDE;
+ virtual float GetTouchSlopInDips() const OVERRIDE;
+
+ virtual float GetMinScalingSpanInDips() const OVERRIDE;
private:
aura::Window* GetWindow() const;
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
index 987dff4f7c..e1fd3b06f3 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
@@ -28,7 +28,7 @@ const int kPointerAssumedStoppedTimeMs = 100;
// SyntheticGestureTargetBase passes input events straight on to the renderer
// without going through a gesture recognition framework. There is thus no touch
// slop.
-const int kTouchSlopInDips = 0;
+const float kTouchSlopInDips = 0.0f;
} // namespace
@@ -117,10 +117,17 @@ base::TimeDelta SyntheticGestureTargetBase::PointerAssumedStoppedTime()
return base::TimeDelta::FromMilliseconds(kPointerAssumedStoppedTimeMs);
}
-int SyntheticGestureTargetBase::GetTouchSlopInDips() const {
+float SyntheticGestureTargetBase::GetTouchSlopInDips() const {
return kTouchSlopInDips;
}
+float SyntheticGestureTargetBase::GetMinScalingSpanInDips() const {
+ // The minimum scaling distance is only relevant for touch gestures and the
+ // base target doesn't support touch.
+ NOTREACHED();
+ return 0.0f;
+}
+
bool SyntheticGestureTargetBase::PointIsWithinContents(int x, int y) const {
gfx::Rect bounds = host_->GetView()->GetViewBounds();
bounds -= bounds.OffsetFromOrigin(); // Translate the bounds to (0,0).
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.h b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
index 8000ce2178..a66a8d34ca 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_base.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
@@ -50,7 +50,9 @@ class SyntheticGestureTargetBase : public SyntheticGestureTarget {
virtual base::TimeDelta PointerAssumedStoppedTime() const OVERRIDE;
- virtual int GetTouchSlopInDips() const OVERRIDE;
+ virtual float GetTouchSlopInDips() const OVERRIDE;
+
+ virtual float GetMinScalingSpanInDips() const OVERRIDE;
protected:
RenderWidgetHostImpl* render_widget_host() const { return host_; }
diff --git a/content/browser/renderer_host/input/synthetic_pinch_gesture.cc b/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
index 7a72dfdbde..53e15d78fd 100644
--- a/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
+++ b/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
@@ -16,9 +16,10 @@ SyntheticPinchGesture::SyntheticPinchGesture(
: params_(params),
start_y_0_(0.0f),
start_y_1_(0.0f),
+ max_pointer_delta_0_(0.0f),
gesture_source_type_(SyntheticGestureParams::DEFAULT_INPUT),
state_(SETUP) {
- DCHECK_GE(params_.total_num_pixels_covered, 0);
+ DCHECK_GT(params_.scale_factor, 0.0f);
}
SyntheticPinchGesture::~SyntheticPinchGesture() {}
@@ -49,7 +50,7 @@ void SyntheticPinchGesture::ForwardTouchInputEvents(
switch (state_) {
case STARTED:
// Check for an early finish.
- if (params_.total_num_pixels_covered == 0) {
+ if (params_.scale_factor == 1.0f) {
state_ = DONE;
break;
}
@@ -87,13 +88,8 @@ void SyntheticPinchGesture::MoveTouchPoints(SyntheticGestureTarget* target,
float current_y_0 = start_y_0_ + delta;
float current_y_1 = start_y_1_ - delta;
- // The current pointer positions are stored as float but the pointer
- // coordinates of the input event are integers. Floor both positions so that
- // in case of an odd distance one of the pointers (the one whose position goes
- // down) moves one pixel further than the other. The explicit flooring is only
- // needed for negative values.
- touch_event_.MovePoint(0, params_.anchor.x(), floor(current_y_0));
- touch_event_.MovePoint(1, params_.anchor.x(), floor(current_y_1));
+ touch_event_.MovePoint(0, params_.anchor.x(), current_y_0);
+ touch_event_.MovePoint(1, params_.anchor.x(), current_y_1);
ForwardTouchEvent(target, timestamp);
}
@@ -112,24 +108,30 @@ void SyntheticPinchGesture::ForwardTouchEvent(
void SyntheticPinchGesture::SetupCoordinatesAndStopTime(
SyntheticGestureTarget* target) {
- const int kTouchSlopInDips = target->GetTouchSlopInDips();
- params_.total_num_pixels_covered += 2 * kTouchSlopInDips;
- float inner_distance_to_anchor = 2 * kTouchSlopInDips;
- float outer_distance_to_anchor =
- inner_distance_to_anchor + params_.total_num_pixels_covered / 2.0f;
-
- // Move pointers away from each other to zoom in
- // or towards each other to zoom out.
- if (params_.zoom_in) {
- start_y_0_ = params_.anchor.y() - inner_distance_to_anchor;
- start_y_1_ = params_.anchor.y() + inner_distance_to_anchor;
- } else {
- start_y_0_ = params_.anchor.y() - outer_distance_to_anchor;
- start_y_1_ = params_.anchor.y() + outer_distance_to_anchor;
+ // To achieve the specified scaling factor, the ratio of the final to the
+ // initial span (distance between the pointers) has to be equal to the scaling
+ // factor. Since we're moving both pointers at the same speed, each pointer's
+ // distance to the anchor is half the span.
+ float initial_distance_to_anchor, final_distance_to_anchor;
+ if (params_.scale_factor > 1.0f) { // zooming in
+ initial_distance_to_anchor = target->GetMinScalingSpanInDips() / 2.0f;
+ final_distance_to_anchor =
+ (initial_distance_to_anchor + target->GetTouchSlopInDips()) *
+ params_.scale_factor;
+ } else { // zooming out
+ final_distance_to_anchor = target->GetMinScalingSpanInDips() / 2.0f;
+ initial_distance_to_anchor =
+ (final_distance_to_anchor / params_.scale_factor) +
+ target->GetTouchSlopInDips();
}
+ start_y_0_ = params_.anchor.y() - initial_distance_to_anchor;
+ start_y_1_ = params_.anchor.y() + initial_distance_to_anchor;
+
+ max_pointer_delta_0_ = initial_distance_to_anchor - final_distance_to_anchor;
+
int64 total_duration_in_us = static_cast<int64>(
- 1e6 * (static_cast<double>(params_.total_num_pixels_covered) /
+ 1e6 * (static_cast<double>(std::abs(2 * max_pointer_delta_0_)) /
params_.relative_pointer_speed_in_pixels_s));
DCHECK_GT(total_duration_in_us, 0);
stop_time_ =
@@ -138,18 +140,16 @@ void SyntheticPinchGesture::SetupCoordinatesAndStopTime(
float SyntheticPinchGesture::GetDeltaForPointer0AtTime(
const base::TimeTicks& timestamp) const {
- float total_abs_delta;
-
// Make sure the final delta is correct. Using the computation below can lead
// to issues with floating point precision.
if (HasReachedTarget(timestamp))
- total_abs_delta = params_.total_num_pixels_covered;
- else
- total_abs_delta = params_.relative_pointer_speed_in_pixels_s *
- (timestamp - start_time_).InSecondsF();
+ return max_pointer_delta_0_;
+ float total_abs_delta = params_.relative_pointer_speed_in_pixels_s *
+ (timestamp - start_time_).InSecondsF();
float abs_delta_pointer_0 = total_abs_delta / 2.0f;
- return params_.zoom_in ? -abs_delta_pointer_0 : abs_delta_pointer_0;
+ return (params_.scale_factor > 1.0f) ? -abs_delta_pointer_0
+ : abs_delta_pointer_0;
}
base::TimeTicks SyntheticPinchGesture::ClampTimestamp(
diff --git a/content/browser/renderer_host/input/synthetic_pinch_gesture.h b/content/browser/renderer_host/input/synthetic_pinch_gesture.h
index 77ef011cbf..76ee1da7b2 100644
--- a/content/browser/renderer_host/input/synthetic_pinch_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_pinch_gesture.h
@@ -53,6 +53,7 @@ class CONTENT_EXPORT SyntheticPinchGesture : public SyntheticGesture {
SyntheticPinchGestureParams params_;
float start_y_0_;
float start_y_1_;
+ float max_pointer_delta_0_;
SyntheticGestureParams::GestureSourceType gesture_source_type_;
GestureState state_;
SyntheticWebTouchEvent touch_event_;
diff --git a/content/browser/renderer_host/input/touch_action_browsertest.cc b/content/browser/renderer_host/input/touch_action_browsertest.cc
index ab6564d358..1b72608437 100644
--- a/content/browser/renderer_host/input/touch_action_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_action_browsertest.cc
@@ -192,7 +192,8 @@ IN_PROC_BROWSER_TEST_F(TouchActionBrowserTest, DISABLED_DefaultAuto) {
// Verify that touching a touch-action: none region disables scrolling and
// enables all touch events to be sent.
// Disabled on MacOS because it doesn't support touch input.
-#if defined(OS_MACOSX)
+// Flaky on OS_CHROMEOS crbug/376695.
+#if defined(OS_MACOSX) || defined(OS_CHROMEOS)
#define MAYBE_TouchActionNone DISABLED_TouchActionNone
#else
#define MAYBE_TouchActionNone TouchActionNone
diff --git a/content/browser/renderer_host/input/touch_action_filter.cc b/content/browser/renderer_host/input/touch_action_filter.cc
index 18bd1292c8..54f18253c5 100644
--- a/content/browser/renderer_host/input/touch_action_filter.cc
+++ b/content/browser/renderer_host/input/touch_action_filter.cc
@@ -154,8 +154,8 @@ void TouchActionFilter::OnSetTouchAction(TouchAction touch_action) {
}
void TouchActionFilter::ResetTouchAction() {
- DCHECK(!drop_scroll_gesture_events_);
- DCHECK(!drop_pinch_gesture_events_);
+ // Note that resetting the action mid-sequence is tolerated. Gestures that had
+ // their begin event(s) suppressed will be suppressed until the next sequence.
allowed_touch_action_ = TOUCH_ACTION_AUTO;
}
diff --git a/content/browser/renderer_host/input/touch_action_filter_unittest.cc b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
index e099c9ba11..fd0a3f5840 100644
--- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc
+++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
@@ -591,4 +591,43 @@ TEST(TouchActionFilterTest, TouchActionResetsOnResetTouchAction) {
EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
}
+TEST(TouchActionFilterTest, TouchActionResetMidSequence) {
+ TouchActionFilter filter;
+
+ WebGestureEvent scroll_begin =
+ SyntheticWebGestureEventBuilder::BuildScrollBegin(2, 3);
+ WebGestureEvent pinch_begin = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GesturePinchBegin, WebGestureEvent::Touchscreen);
+ WebGestureEvent pinch_update =
+ SyntheticWebGestureEventBuilder::BuildPinchUpdate(
+ 1.2f, 5, 5, 0, WebGestureEvent::Touchscreen);
+ WebGestureEvent pinch_end = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GesturePinchEnd, WebGestureEvent::Touchscreen);
+ WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build(
+ WebInputEvent::GestureScrollEnd, WebGestureEvent::Touchscreen);
+
+ filter.OnSetTouchAction(TOUCH_ACTION_NONE);
+ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin));
+ EXPECT_TRUE(filter.FilterGestureEvent(&pinch_begin));
+ EXPECT_TRUE(filter.FilterGestureEvent(&pinch_update));
+
+ // Even though the allowed action is auto after the reset, the remaining
+ // scroll and pinch events should be suppressed.
+ filter.ResetTouchAction();
+ EXPECT_TRUE(filter.FilterGestureEvent(&pinch_update));
+ EXPECT_TRUE(filter.FilterGestureEvent(&pinch_end));
+ EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end));
+
+ // A new scroll and pinch sequence should be allowed.
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin));
+ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_begin));
+ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update));
+
+ // Resetting from auto to auto mid-stream should have no effect.
+ filter.ResetTouchAction();
+ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_update));
+ EXPECT_FALSE(filter.FilterGestureEvent(&pinch_end));
+ EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end));
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/input/touch_emulator.cc b/content/browser/renderer_host/input/touch_emulator.cc
index 42b43106c7..9b7fdc77b7 100644
--- a/content/browser/renderer_host/input/touch_emulator.cc
+++ b/content/browser/renderer_host/input/touch_emulator.cc
@@ -32,6 +32,8 @@ ui::GestureProvider::Config GetGestureProviderConfig() {
// requested by renderer.
ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
config.gesture_begin_end_types_enabled = false;
+ config.gesture_detector_config.swipe_enabled = false;
+ config.gesture_detector_config.two_finger_tap_enabled = false;
return config;
}
@@ -163,8 +165,8 @@ bool TouchEmulator::HandleMouseWheelEvent(const WebMouseWheelEvent& event) {
if (!enabled_)
return false;
- // No mouse wheel events for the renderer.
- return true;
+ // Send mouse wheel for easy scrolling when there is no active touch.
+ return touch_active_;
}
bool TouchEmulator::HandleKeyboardEvent(const WebKeyboardEvent& event) {
@@ -202,6 +204,11 @@ void TouchEmulator::OnGestureEvent(const ui::GestureEventData& gesture) {
CreateWebGestureEventFromGestureEventData(gesture);
switch (gesture_event.type) {
+ case WebInputEvent::Undefined:
+ NOTREACHED() << "Undefined WebInputEvent type";
+ // Bail without sending the junk event to the client.
+ return;
+
case WebInputEvent::GestureScrollBegin:
client_->ForwardGestureEvent(gesture_event);
// PinchBegin must always follow ScrollBegin.
@@ -351,6 +358,7 @@ bool TouchEmulator::FillTouchEventAndPoint(const WebMouseEvent& mouse_event) {
break;
case WebInputEvent::MouseUp:
eventType = WebInputEvent::TouchEnd;
+ touch_active_ = false;
break;
default:
eventType = WebInputEvent::Undefined;
diff --git a/content/browser/renderer_host/input/touch_emulator_unittest.cc b/content/browser/renderer_host/input/touch_emulator_unittest.cc
index d04fdaeaf7..9bd4ab0e51 100644
--- a/content/browser/renderer_host/input/touch_emulator_unittest.cc
+++ b/content/browser/renderer_host/input/touch_emulator_unittest.cc
@@ -23,6 +23,7 @@ using blink::WebGestureEvent;
using blink::WebInputEvent;
using blink::WebKeyboardEvent;
using blink::WebMouseEvent;
+using blink::WebMouseWheelEvent;
using blink::WebTouchEvent;
using blink::WebTouchPoint;
@@ -146,6 +147,14 @@ class TouchEmulatorTest : public testing::Test,
emulator()->HandleMouseEvent(event);
}
+ bool SendMouseWheelEvent() {
+ WebMouseWheelEvent event;
+ event.type = WebInputEvent::MouseWheel;
+ event.timeStampSeconds = GetNextEventTimeSeconds();
+ // Return whether mouse wheel is forwarded.
+ return !emulator()->HandleMouseWheelEvent(event);
+ }
+
void MouseDown(int x, int y) {
DCHECK(!mouse_pressed_);
if (x != last_mouse_x_ || y != last_mouse_y_)
@@ -317,4 +326,24 @@ TEST_F(TouchEmulatorTest, MouseMovesDropped) {
ExpectedEvents());
}
+TEST_F(TouchEmulatorTest, MouseWheel) {
+ MouseMove(100, 200);
+ EXPECT_EQ("", ExpectedEvents());
+ EXPECT_TRUE(SendMouseWheelEvent());
+ MouseDown(100, 200);
+ EXPECT_EQ("TouchStart GestureTapDown", ExpectedEvents());
+ EXPECT_FALSE(SendMouseWheelEvent());
+ MouseUp(100, 200);
+ EXPECT_EQ("TouchEnd GestureShowPress GestureTap", ExpectedEvents());
+ EXPECT_TRUE(SendMouseWheelEvent());
+ MouseDown(300, 200);
+ EXPECT_EQ("TouchStart GestureTapDown", ExpectedEvents());
+ EXPECT_FALSE(SendMouseWheelEvent());
+ emulator()->Disable();
+ EXPECT_EQ("TouchCancel GestureTapCancel", ExpectedEvents());
+ EXPECT_TRUE(SendMouseWheelEvent());
+ emulator()->Enable(true /* allow_pinch */);
+ EXPECT_TRUE(SendMouseWheelEvent());
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc
index 1877281341..bbac01c3eb 100644
--- a/content/browser/renderer_host/input/touch_event_queue.cc
+++ b/content/browser/renderer_host/input/touch_event_queue.cc
@@ -204,6 +204,10 @@ class TouchEventQueue::TouchMoveSlopSuppressor {
suppressing_touchmoves_ = slop_suppression_length_dips_squared_ != 0;
}
+ if (event.type == WebInputEvent::TouchEnd ||
+ event.type == WebInputEvent::TouchCancel)
+ suppressing_touchmoves_ = false;
+
if (event.type != WebInputEvent::TouchMove)
return false;
@@ -227,6 +231,8 @@ class TouchEventQueue::TouchMoveSlopSuppressor {
suppressing_touchmoves_ = false;
}
+ bool suppressing_touchmoves() const { return suppressing_touchmoves_; }
+
private:
double slop_suppression_length_dips_squared_;
gfx::PointF touch_sequence_start_position_;
@@ -322,6 +328,7 @@ class CoalescedWebTouchEvent {
TouchEventQueue::Config::Config()
: touchmove_slop_suppression_length_dips(0),
+ touchmove_slop_suppression_region_includes_boundary(true),
touch_scrolling_mode(TOUCH_SCROLLING_MODE_DEFAULT),
touch_ack_timeout_delay(base::TimeDelta::FromMilliseconds(200)),
touch_ack_timeout_supported(false) {
@@ -335,7 +342,10 @@ TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client,
touch_filtering_state_(TOUCH_FILTERING_STATE_DEFAULT),
ack_timeout_enabled_(config.touch_ack_timeout_supported),
touchmove_slop_suppressor_(new TouchMoveSlopSuppressor(
- config.touchmove_slop_suppression_length_dips + kSlopEpsilon)),
+ config.touchmove_slop_suppression_length_dips +
+ (config.touchmove_slop_suppression_region_includes_boundary
+ ? kSlopEpsilon
+ : -kSlopEpsilon))),
send_touch_events_async_(false),
needs_async_touchmove_for_outer_slop_region_(false),
last_sent_touch_timestamp_sec_(0),
@@ -527,6 +537,12 @@ void TouchEventQueue::OnGestureScrollEvent(
if (gesture_event.event.type != blink::WebInputEvent::GestureScrollBegin)
return;
+ if (touch_filtering_state_ != DROP_ALL_TOUCHES &&
+ touch_filtering_state_ != DROP_TOUCHES_IN_SEQUENCE) {
+ DCHECK(!touchmove_slop_suppressor_->suppressing_touchmoves())
+ << "The renderer should be offered a touchmove before scrolling begins";
+ }
+
if (touch_scrolling_mode_ == TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE) {
if (touch_filtering_state_ != DROP_ALL_TOUCHES &&
touch_filtering_state_ != DROP_TOUCHES_IN_SEQUENCE) {
@@ -608,7 +624,8 @@ void TouchEventQueue::OnHasTouchEventHandlers(bool has_handlers) {
}
} else {
// TODO(jdduke): Synthesize a TouchCancel if necessary to update Blink touch
- // state tracking (e.g., if the touch handler was removed mid-sequence).
+ // state tracking and/or touch-action filtering (e.g., if the touch handler
+ // was removed mid-sequence), crbug.com/375940.
touch_filtering_state_ = DROP_ALL_TOUCHES;
pending_async_touchmove_.reset();
if (timeout_handler_)
diff --git a/content/browser/renderer_host/input/touch_event_queue.h b/content/browser/renderer_host/input/touch_event_queue.h
index 0e24073056..ecb8fe83b4 100644
--- a/content/browser/renderer_host/input/touch_event_queue.h
+++ b/content/browser/renderer_host/input/touch_event_queue.h
@@ -62,6 +62,11 @@ class CONTENT_EXPORT TouchEventQueue {
// Defaults to 0 (disabled).
double touchmove_slop_suppression_length_dips;
+ // Whether the touchmove slop suppression region is boundary inclusive.
+ // Defaults to true.
+ // TODO(jdduke): Remove when unified GR enabled, crbug.com/332418.
+ bool touchmove_slop_suppression_region_includes_boundary;
+
// Determines the type of touch scrolling.
// Defaults to TouchEventQueue:::TOUCH_SCROLLING_MODE_DEFAULT.
TouchEventQueue::TouchScrollingMode touch_scrolling_mode;
diff --git a/content/browser/renderer_host/input/touch_event_queue_unittest.cc b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
index 6c23e984ac..06a3a9f40f 100644
--- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
@@ -35,6 +35,7 @@ class TouchEventQueueTest : public testing::Test,
acked_event_count_(0),
last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN),
slop_length_dips_(0),
+ slop_includes_boundary_(true),
touch_scrolling_mode_(TouchEventQueue::TOUCH_SCROLLING_MODE_DEFAULT) {}
virtual ~TouchEventQueueTest() {}
@@ -80,6 +81,8 @@ class TouchEventQueueTest : public testing::Test,
TouchEventQueue::Config config;
config.touch_scrolling_mode = touch_scrolling_mode_;
config.touchmove_slop_suppression_length_dips = slop_length_dips_;
+ config.touchmove_slop_suppression_region_includes_boundary =
+ slop_includes_boundary_;
return config;
}
@@ -88,8 +91,10 @@ class TouchEventQueueTest : public testing::Test,
ResetQueueWithConfig(CreateConfig());
}
- void SetUpForTouchMoveSlopTesting(double slop_length_dips) {
+ void SetUpForTouchMoveSlopTesting(double slop_length_dips,
+ bool slop_includes_boundary) {
slop_length_dips_ = slop_length_dips;
+ slop_includes_boundary_ = slop_includes_boundary;
ResetQueueWithConfig(CreateConfig());
}
@@ -248,6 +253,7 @@ class TouchEventQueueTest : public testing::Test,
scoped_ptr<WebGestureEvent> followup_gesture_event_;
scoped_ptr<InputEventAckState> sync_ack_result_;
double slop_length_dips_;
+ bool slop_includes_boundary_;
TouchEventQueue::TouchScrollingMode touch_scrolling_mode_;
base::MessageLoopForUI message_loop_;
};
@@ -1347,12 +1353,13 @@ TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) {
EXPECT_EQ(0U, GetAndResetAckedEventCount());
}
-// Tests that TouchMove's are dropped if within the slop suppression region
-// for an unconsumed TouchStart
-TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
+// Tests that TouchMove's are dropped if within the boundary-inclusive slop
+// suppression region for an unconsumed TouchStart.
+TEST_F(TouchEventQueueTest, TouchMoveSuppressionIncludingSlopBoundary) {
const double kSlopLengthDips = 10.;
const double kHalfSlopLengthDips = kSlopLengthDips / 2;
- SetUpForTouchMoveSlopTesting(kSlopLengthDips);
+ const bool slop_includes_boundary = true;
+ SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary);
// Queue a TouchStart.
PressTouchPoint(0, 0);
@@ -1379,6 +1386,18 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
EXPECT_EQ(1U, GetAndResetAckedEventCount());
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
+ MoveTouchPoint(0, -kSlopLengthDips, 0);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
+
+ MoveTouchPoint(0, 0, kSlopLengthDips);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
+
// As soon as a TouchMove exceeds the (Euclidean) distance, no more
// TouchMove's should be suppressed.
const double kFortyFiveDegreeSlopLengthXY =
@@ -1420,12 +1439,57 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithinSlopRegion) {
EXPECT_EQ(1U, GetAndResetAckedEventCount());
}
+// Tests that TouchMove's are dropped if within the boundary-exclusive slop
+// suppression region for an unconsumed TouchStart.
+TEST_F(TouchEventQueueTest, TouchMoveSuppressionExcludingSlopBoundary) {
+ const double kSlopLengthDips = 10.;
+ const double kHalfSlopLengthDips = kSlopLengthDips / 2;
+ const bool slop_includes_boundary = false;
+ SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary);
+
+ // Queue a TouchStart.
+ PressTouchPoint(0, 0);
+ SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ ASSERT_EQ(1U, GetAndResetSentEventCount());
+ ASSERT_EQ(1U, GetAndResetAckedEventCount());
+
+ // TouchMove's within the region should be suppressed.
+ MoveTouchPoint(0, 0, kHalfSlopLengthDips);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
+
+ MoveTouchPoint(0, kSlopLengthDips - 0.2f, 0);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
+
+ // As soon as a TouchMove reaches the (Euclidean) slop distance, no more
+ // TouchMove's should be suppressed.
+ MoveTouchPoint(0, kSlopLengthDips, 0);
+ EXPECT_EQ(1U, queued_event_count());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+ EXPECT_EQ(0U, GetAndResetAckedEventCount());
+ SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+
+ MoveTouchPoint(0, kHalfSlopLengthDips, 0);
+ EXPECT_EQ(1U, queued_event_count());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+ EXPECT_EQ(0U, GetAndResetAckedEventCount());
+ SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+}
+
// Tests that TouchMove's are not dropped within the slop suppression region if
// the touchstart was consumed.
TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
const double kSlopLengthDips = 10.;
const double kHalfSlopLengthDips = kSlopLengthDips / 2;
- SetUpForTouchMoveSlopTesting(kSlopLengthDips);
+ const bool slop_includes_boundary = true;
+ SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary);
// Queue a TouchStart.
PressTouchPoint(0, 0);
@@ -1446,7 +1510,9 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) {
const float kSlopLengthPixels = 7.f;
const float kDPIScale = 3.f;
- SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale);
+ const bool slop_includes_boundary = true;
+ SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale,
+ slop_includes_boundary);
// Queue a TouchStart.
PressTouchPoint(0, 0);
@@ -1486,7 +1552,8 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) {
TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
const double kSlopLengthDips = 10.;
const double kHalfSlopLengthDips = kSlopLengthDips / 2;
- SetUpForTouchMoveSlopTesting(kSlopLengthDips);
+ const bool slop_includes_boundary = true;
+ SetUpForTouchMoveSlopTesting(kSlopLengthDips, slop_includes_boundary);
// Queue a TouchStart.
PressTouchPoint(0, 0);
@@ -1833,8 +1900,14 @@ TEST_F(TouchEventQueueTest, AsyncTouchWithAckTimeout) {
PressTouchPoint(0, 0);
EXPECT_EQ(1U, GetAndResetSentEventCount());
EXPECT_TRUE(IsTimeoutRunning());
+ SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_FALSE(IsTimeoutRunning());
// The start of a scroll gesture should trigger async touch event dispatch.
+ MoveTouchPoint(0, 1, 1);
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+ EXPECT_TRUE(IsTimeoutRunning());
WebGestureEvent followup_scroll;
followup_scroll.type = WebInputEvent::GestureScrollBegin;
SetFollowupEvent(followup_scroll);
@@ -1907,8 +1980,12 @@ TEST_F(TouchEventQueueTest, AsyncTouchWithTouchCancelAfterAck) {
PressTouchPoint(0, 0);
EXPECT_EQ(1U, GetAndResetSentEventCount());
+ SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
// The start of a scroll gesture should trigger async touch event dispatch.
+ MoveTouchPoint(0, 1, 1);
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
WebGestureEvent followup_scroll;
followup_scroll.type = WebInputEvent::GestureScrollBegin;
SetFollowupEvent(followup_scroll);
diff --git a/content/browser/renderer_host/input/touch_input_browsertest.cc b/content/browser/renderer_host/input/touch_input_browsertest.cc
index a92fd26781..758f3ec6a2 100644
--- a/content/browser/renderer_host/input/touch_input_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_input_browsertest.cc
@@ -108,13 +108,12 @@ class InputEventMessageFilter : public BrowserMessageFilter {
}
// BrowserMessageFilter:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE {
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
if (message.type() == InputHostMsg_HandleInputEvent_ACK::ID) {
- ui::LatencyInfo latency;
- WebInputEvent::Type type = WebInputEvent::Undefined;
- InputEventAckState ack = INPUT_EVENT_ACK_STATE_UNKNOWN;
- InputHostMsg_HandleInputEvent_ACK::Read(&message, &type, &ack, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ InputHostMsg_HandleInputEvent_ACK::Read(&message, &params);
+ WebInputEvent::Type type = params.a.type;
+ InputEventAckState ack = params.a.state;
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&InputEventMessageFilter::ReceivedEventAck,
this, type, ack));
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host.h b/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
index b62ea82c19..a656f07afb 100644
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
@@ -49,13 +49,12 @@ class JavaBridgeDispatcherHost
void RenderFrameDeleted();
void OnGetChannelHandle(IPC::Message* reply_msg);
+ void Send(IPC::Message* msg);
private:
friend class base::RefCountedThreadSafe<JavaBridgeDispatcherHost>;
virtual ~JavaBridgeDispatcherHost();
- void Send(IPC::Message* msg);
-
void GetChannelHandle(IPC::Message* reply_msg);
void CreateNPVariantParam(NPObject* object, NPVariant_Param* param);
void CreateObjectStub(NPObject* object, int render_process_id, int route_id);
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
index 8d587bd76b..635a1d13c2 100644
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
@@ -13,6 +13,7 @@
#include "content/browser/renderer_host/java/java_bound_object.h"
#include "content/browser/renderer_host/java/java_bridge_dispatcher_host.h"
#include "content/common/android/hash_set.h"
+#include "content/common/java_bridge_messages.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "third_party/WebKit/public/web/WebBindings.h"
@@ -20,9 +21,13 @@
namespace content {
JavaBridgeDispatcherHostManager::JavaBridgeDispatcherHostManager(
- WebContents* web_contents)
+ WebContents* web_contents,
+ jobject retained_object_set)
: WebContentsObserver(web_contents),
+ retained_object_set_(base::android::AttachCurrentThread(),
+ retained_object_set),
allow_object_contents_inspection_(true) {
+ DCHECK(retained_object_set);
}
JavaBridgeDispatcherHostManager::~JavaBridgeDispatcherHostManager() {
@@ -48,27 +53,6 @@ void JavaBridgeDispatcherHostManager::AddNamedObject(const base::string16& name,
}
}
-void JavaBridgeDispatcherHostManager::SetRetainedObjectSet(
- const JavaObjectWeakGlobalRef& retained_object_set) {
- // It's an error to replace the retained_object_set_ after it's been set,
- // so we check that it hasn't already been here.
- // TODO(benm): It'd be better to pass the set in the constructor to avoid
- // the chance of this happening; but that's tricky as this get's constructed
- // before ContentViewCore (which owns the set). Best solution may be to move
- // ownership of the JavaBridgerDispatchHostManager from WebContents to
- // ContentViewCore?
- JNIEnv* env = base::android::AttachCurrentThread();
- base::android::ScopedJavaLocalRef<jobject> new_retained_object_set =
- retained_object_set.get(env);
- base::android::ScopedJavaLocalRef<jobject> current_retained_object_set =
- retained_object_set_.get(env);
- if (!env->IsSameObject(new_retained_object_set.obj(),
- current_retained_object_set.obj())) {
- DCHECK(current_retained_object_set.is_null());
- retained_object_set_ = retained_object_set;
- }
-}
-
void JavaBridgeDispatcherHostManager::RemoveNamedObject(
const base::string16& name) {
ObjectMap::iterator iter = objects_.find(name);
@@ -85,11 +69,6 @@ void JavaBridgeDispatcherHostManager::RemoveNamedObject(
}
}
-void JavaBridgeDispatcherHostManager::OnGetChannelHandle(
- RenderFrameHost* render_frame_host, IPC::Message* reply_msg) {
- instances_[render_frame_host]->OnGetChannelHandle(reply_msg);
-}
-
void JavaBridgeDispatcherHostManager::RenderFrameCreated(
RenderFrameHost* render_frame_host) {
// Creates a JavaBridgeDispatcherHost for the specified RenderViewHost and
@@ -132,6 +111,25 @@ void JavaBridgeDispatcherHostManager::DocumentAvailableInMainFrame() {
}
}
+bool JavaBridgeDispatcherHostManager::OnMessageReceived(
+ const IPC::Message& message,
+ RenderFrameHost* render_frame_host) {
+ DCHECK(render_frame_host);
+ if (!instances_.count(render_frame_host))
+ return false;
+ scoped_refptr<JavaBridgeDispatcherHost> instance =
+ instances_[render_frame_host];
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(JavaBridgeDispatcherHostManager, message)
+ IPC_MESSAGE_FORWARD_DELAY_REPLY(
+ JavaBridgeHostMsg_GetChannelHandle,
+ instance.get(),
+ JavaBridgeDispatcherHost::OnGetChannelHandle)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
void JavaBridgeDispatcherHostManager::JavaBoundObjectCreated(
const base::android::JavaRef<jobject>& object) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
index 3ada0d08cb..8d03576be5 100644
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
@@ -28,7 +28,8 @@ class JavaBridgeDispatcherHostManager
: public WebContentsObserver,
public base::SupportsWeakPtr<JavaBridgeDispatcherHostManager> {
public:
- explicit JavaBridgeDispatcherHostManager(WebContents* web_contents);
+ JavaBridgeDispatcherHostManager(WebContents* web_contents,
+ jobject retained_object_set);
virtual ~JavaBridgeDispatcherHostManager();
// These methods add or remove the object to each JavaBridgeDispatcherHost.
@@ -37,21 +38,12 @@ class JavaBridgeDispatcherHostManager
void AddNamedObject(const base::string16& name, NPObject* object);
void RemoveNamedObject(const base::string16& name);
- void OnGetChannelHandle(RenderFrameHost* render_frame_host,
- IPC::Message* reply_msg);
-
- // Every time a JavaBoundObject backed by a real Java object is
- // created/destroyed, we insert/remove a strong ref to that Java object into
- // this set so that it doesn't get garbage collected while it's still
- // potentially in use. Although the set is managed native side, it's owned
- // and defined in Java so that pushing refs into it does not create new GC
- // roots that would prevent ContentViewCore from being garbage collected.
- void SetRetainedObjectSet(const JavaObjectWeakGlobalRef& retained_object_set);
-
// WebContentsObserver overrides
virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void DocumentAvailableInMainFrame() OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host) OVERRIDE;
void JavaBoundObjectCreated(const base::android::JavaRef<jobject>& object);
void JavaBoundObjectDestroyed(const base::android::JavaRef<jobject>& object);
@@ -67,6 +59,12 @@ class JavaBridgeDispatcherHostManager
InstanceMap instances_;
typedef std::map<base::string16, NPObject*> ObjectMap;
ObjectMap objects_;
+ // Every time a JavaBoundObject backed by a real Java object is
+ // created/destroyed, we insert/remove a strong ref to that Java object into
+ // this set so that it doesn't get garbage collected while it's still
+ // potentially in use. Although the set is managed native side, it's owned
+ // and defined in Java so that pushing refs into it does not create new GC
+ // roots that would prevent ContentViewCore from being garbage collected.
JavaObjectWeakGlobalRef retained_object_set_;
bool allow_object_contents_inspection_;
diff --git a/content/browser/renderer_host/media/audio_input_device_manager.cc b/content/browser/renderer_host/media/audio_input_device_manager.cc
index 8d0377d859..17b4d7d251 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager.cc
+++ b/content/browser/renderer_host/media/audio_input_device_manager.cc
@@ -8,7 +8,6 @@
#include "base/memory/scoped_ptr.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/media_stream_request.h"
-#include "media/audio/audio_device_name.h"
#include "media/audio/audio_input_ipc.h"
#include "media/audio/audio_manager_base.h"
#include "media/audio/audio_parameters.h"
@@ -30,14 +29,6 @@ AudioInputDeviceManager::AudioInputDeviceManager(
next_capture_session_id_(kFirstSessionId),
use_fake_device_(false),
audio_manager_(audio_manager) {
- // TODO(xians): Remove this fake_device after the unittests do not need it.
- StreamDeviceInfo fake_device(MEDIA_DEVICE_AUDIO_CAPTURE,
- media::AudioManagerBase::kDefaultDeviceName,
- media::AudioManagerBase::kDefaultDeviceId,
- 44100, media::CHANNEL_LAYOUT_STEREO,
- 0);
- fake_device.session_id = kFakeOpenSessionId;
- devices_.push_back(fake_device);
}
AudioInputDeviceManager::~AudioInputDeviceManager() {
@@ -123,19 +114,17 @@ void AudioInputDeviceManager::EnumerateOnDeviceThread(
SCOPED_UMA_HISTOGRAM_TIMER(
"Media.AudioInputDeviceManager.EnumerateOnDeviceThreadTime");
DCHECK(IsOnDeviceThread());
+ DCHECK_EQ(MEDIA_DEVICE_AUDIO_CAPTURE, stream_type);
media::AudioDeviceNames device_names;
-
- switch (stream_type) {
- case MEDIA_DEVICE_AUDIO_CAPTURE:
- // AudioManager is guaranteed to outlive MediaStreamManager in
- // BrowserMainloop.
- audio_manager_->GetAudioInputDeviceNames(&device_names);
- break;
-
- default:
- NOTREACHED();
- break;
+ if (use_fake_device_) {
+ // Use the fake devices.
+ GetFakeDeviceNames(&device_names);
+ } else {
+ // Enumerate the devices on the OS.
+ // AudioManager is guaranteed to outlive MediaStreamManager in
+ // BrowserMainloop.
+ audio_manager_->GetAudioInputDeviceNames(&device_names);
}
scoped_ptr<StreamDeviceInfoArray> devices(new StreamDeviceInfoArray());
@@ -146,14 +135,6 @@ void AudioInputDeviceManager::EnumerateOnDeviceThread(
stream_type, it->device_name, it->unique_id));
}
- // If the |use_fake_device_| flag is on, inject the fake device if there is
- // no available device on the OS.
- if (use_fake_device_ && devices->empty()) {
- devices->push_back(StreamDeviceInfo(
- stream_type, media::AudioManagerBase::kDefaultDeviceName,
- media::AudioManagerBase::kDefaultDeviceId));
- }
-
// Return the device list through the listener by posting a task on
// IO thread since MediaStreamManager handles the callback asynchronously.
BrowserThread::PostTask(
@@ -255,4 +236,18 @@ AudioInputDeviceManager::GetDevice(int session_id) {
return devices_.end();
}
+void AudioInputDeviceManager::GetFakeDeviceNames(
+ media::AudioDeviceNames* device_names) {
+ static const char kFakeDeviceName1[] = "Fake Audio 1";
+ static const char kFakeDeviceId1[] = "fake_audio_1";
+ static const char kFakeDeviceName2[] = "Fake Audio 2";
+ static const char kFakeDeviceId2[] = "fake_audio_2";
+ DCHECK(device_names->empty());
+ DCHECK(use_fake_device_);
+ device_names->push_back(media::AudioDeviceName(kFakeDeviceName1,
+ kFakeDeviceId1));
+ device_names->push_back(media::AudioDeviceName(kFakeDeviceName2,
+ kFakeDeviceId2));
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/media/audio_input_device_manager.h b/content/browser/renderer_host/media/audio_input_device_manager.h
index 231f30b3a3..e8d44cb807 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager.h
+++ b/content/browser/renderer_host/media/audio_input_device_manager.h
@@ -22,6 +22,7 @@
#include "content/common/content_export.h"
#include "content/common/media/media_stream_options.h"
#include "content/public/common/media_stream_request.h"
+#include "media/audio/audio_device_name.h"
namespace media {
class AudioManager;
@@ -56,6 +57,10 @@ class CONTENT_EXPORT AudioInputDeviceManager : public MediaStreamProvider {
bool ShouldUseFakeDevice() const;
private:
+ // Used by the unittests to get a list of fake devices.
+ friend class MediaStreamDispatcherHostTest;
+ void GetFakeDeviceNames(media::AudioDeviceNames* device_names);
+
typedef std::vector<StreamDeviceInfo> StreamDeviceList;
virtual ~AudioInputDeviceManager();
diff --git a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
index 4b9e80e21c..c2963eefd3 100644
--- a/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
+++ b/content/browser/renderer_host/media/audio_input_device_manager_unittest.cc
@@ -54,11 +54,6 @@ class MAYBE_AudioInputDeviceManagerTest : public testing::Test {
public:
MAYBE_AudioInputDeviceManagerTest() {}
- // Returns true iff machine has an audio input device.
- bool CanRunAudioInputDeviceTests() {
- return audio_manager_->HasAudioInputDevices();
- }
-
protected:
virtual void SetUp() OVERRIDE {
// The test must run on Browser::IO.
@@ -73,6 +68,7 @@ class MAYBE_AudioInputDeviceManagerTest : public testing::Test {
&base::WaitableEvent::Signal, base::Unretained(&event)));
event.Wait();
manager_ = new AudioInputDeviceManager(audio_manager_.get());
+ manager_->UseFakeDevice();
audio_input_listener_.reset(new MockAudioInputDeviceManagerListener());
manager_->Register(audio_input_listener_.get(),
message_loop_->message_loop_proxy().get());
@@ -106,8 +102,6 @@ class MAYBE_AudioInputDeviceManagerTest : public testing::Test {
// Opens and closes the devices.
TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenAndCloseDevice) {
- if (!CanRunAudioInputDeviceTests())
- return;
ASSERT_FALSE(devices_.empty());
@@ -137,9 +131,6 @@ TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenAndCloseDevice) {
// Opens multiple devices at one time and closes them later.
TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenMultipleDevices) {
- if (!CanRunAudioInputDeviceTests())
- return;
-
ASSERT_FALSE(devices_.empty());
InSequence s;
@@ -183,8 +174,6 @@ TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenMultipleDevices) {
// Opens a non-existing device.
TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenNotExistingDevice) {
- if (!CanRunAudioInputDeviceTests())
- return;
InSequence s;
MediaStreamType stream_type = MEDIA_DEVICE_AUDIO_CAPTURE;
@@ -206,9 +195,6 @@ TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenNotExistingDevice) {
// Opens default device twice.
TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenDeviceTwice) {
- if (!CanRunAudioInputDeviceTests())
- return;
-
ASSERT_FALSE(devices_.empty());
InSequence s;
@@ -242,9 +228,6 @@ TEST_F(MAYBE_AudioInputDeviceManagerTest, OpenDeviceTwice) {
// Accesses then closes the sessions after opening the devices.
TEST_F(MAYBE_AudioInputDeviceManagerTest, AccessAndCloseSession) {
- if (!CanRunAudioInputDeviceTests())
- return;
-
ASSERT_FALSE(devices_.empty());
InSequence s;
@@ -278,8 +261,6 @@ TEST_F(MAYBE_AudioInputDeviceManagerTest, AccessAndCloseSession) {
// Access an invalid session.
TEST_F(MAYBE_AudioInputDeviceManagerTest, AccessInvalidSession) {
- if (!CanRunAudioInputDeviceTests())
- return;
InSequence s;
// Opens the first device.
diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.cc b/content/browser/renderer_host/media/audio_input_renderer_host.cc
index b536cf31eb..baa8a74439 100644
--- a/content/browser/renderer_host/media/audio_input_renderer_host.cc
+++ b/content/browser/renderer_host/media/audio_input_renderer_host.cc
@@ -118,6 +118,16 @@ void AudioInputRendererHost::OnData(media::AudioInputController* controller,
NOTREACHED() << "Only low-latency mode is supported.";
}
+void AudioInputRendererHost::OnLog(media::AudioInputController* controller,
+ const std::string& message) {
+ BrowserThread::PostTask(BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&AudioInputRendererHost::DoLog,
+ this,
+ make_scoped_refptr(controller),
+ message));
+}
+
void AudioInputRendererHost::DoCompleteCreation(
media::AudioInputController* controller) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -205,16 +215,30 @@ void AudioInputRendererHost::DoHandleError(
DeleteEntryOnError(entry, AUDIO_INPUT_CONTROLLER_ERROR);
}
-bool AudioInputRendererHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+void AudioInputRendererHost::DoLog(media::AudioInputController* controller,
+ const std::string& message) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ AudioEntry* entry = LookupByController(controller);
+ if (!entry)
+ return;
+
+ // Add stream ID and current audio level reported by AIC to native log.
+ std::string log_string =
+ base::StringPrintf("[stream_id=%d] ", entry->stream_id);
+ log_string += message;
+ MediaStreamManager::SendMessageToNativeLog(log_string);
+ DVLOG(1) << log_string;
+}
+
+bool AudioInputRendererHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(AudioInputRendererHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(AudioInputRendererHost, message)
IPC_MESSAGE_HANDLER(AudioInputHostMsg_CreateStream, OnCreateStream)
IPC_MESSAGE_HANDLER(AudioInputHostMsg_RecordStream, OnRecordStream)
IPC_MESSAGE_HANDLER(AudioInputHostMsg_CloseStream, OnCloseStream)
IPC_MESSAGE_HANDLER(AudioInputHostMsg_SetVolume, OnSetVolume)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.h b/content/browser/renderer_host/media/audio_input_renderer_host.h
index d31024a146..75a78e8ad7 100644
--- a/content/browser/renderer_host/media/audio_input_renderer_host.h
+++ b/content/browser/renderer_host/media/audio_input_renderer_host.h
@@ -109,8 +109,7 @@ class CONTENT_EXPORT AudioInputRendererHost
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// AudioInputController::EventHandler implementation.
virtual void OnCreated(media::AudioInputController* controller) OVERRIDE;
@@ -120,6 +119,8 @@ class CONTENT_EXPORT AudioInputRendererHost
virtual void OnData(media::AudioInputController* controller,
const uint8* data,
uint32 size) OVERRIDE;
+ virtual void OnLog(media::AudioInputController* controller,
+ const std::string& message) OVERRIDE;
private:
// TODO(henrika): extend test suite (compare AudioRenderHost)
@@ -167,6 +168,10 @@ class CONTENT_EXPORT AudioInputRendererHost
void DoHandleError(media::AudioInputController* controller,
media::AudioInputController::ErrorCode error_code);
+ // Log audio level of captured audio stream.
+ void DoLog(media::AudioInputController* controller,
+ const std::string& message);
+
// Send an error message to the renderer.
void SendErrorMessage(int stream_id, ErrorCode error_code);
diff --git a/content/browser/renderer_host/media/audio_input_sync_writer.cc b/content/browser/renderer_host/media/audio_input_sync_writer.cc
index b9c8ee5e3b..99b91b7b9f 100644
--- a/content/browser/renderer_host/media/audio_input_sync_writer.cc
+++ b/content/browser/renderer_host/media/audio_input_sync_writer.cc
@@ -9,8 +9,6 @@
#include "base/memory/shared_memory.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
-static const uint32 kLogDelayThreadholdMs = 500;
-
namespace content {
AudioInputSyncWriter::AudioInputSyncWriter(
@@ -37,23 +35,29 @@ uint32 AudioInputSyncWriter::Write(const void* data,
uint32 size,
double volume,
bool key_pressed) {
+#if !defined(OS_ANDROID)
+ static const base::TimeDelta kLogDelayThreadhold =
+ base::TimeDelta::FromMilliseconds(500);
+
std::ostringstream oss;
if (last_write_time_.is_null()) {
// This is the first time Write is called.
base::TimeDelta interval = base::Time::Now() - creation_time_;
oss << "Audio input data received for the first time: delay = "
<< interval.InMilliseconds() << "ms.";
+
} else {
base::TimeDelta interval = base::Time::Now() - last_write_time_;
- if (interval.InMilliseconds() > kLogDelayThreadholdMs) {
+ if (interval > kLogDelayThreadhold) {
oss << "Audio input data delay unexpectedly long: delay = "
- << interval.InMilliseconds() << "ms.";
+ << interval.InMilliseconds() << "ms.";
}
}
if (!oss.str().empty())
MediaStreamManager::SendMessageToNativeLog(oss.str());
last_write_time_ = base::Time::Now();
+#endif
uint8* ptr = static_cast<uint8*>(shared_memory_->memory());
ptr += current_segment_id_ * shared_memory_segment_size_;
diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc
index ea633c06f1..fd6b474383 100644
--- a/content/browser/renderer_host/media/audio_renderer_host.cc
+++ b/content/browser/renderer_host/media/audio_renderer_host.cc
@@ -300,17 +300,16 @@ AudioRendererHost::DoGetOutputControllers(int render_view_id) const {
///////////////////////////////////////////////////////////////////////////////
// IPC Messages handler
-bool AudioRendererHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool AudioRendererHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(AudioRendererHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(AudioRendererHost, message)
IPC_MESSAGE_HANDLER(AudioHostMsg_CreateStream, OnCreateStream)
IPC_MESSAGE_HANDLER(AudioHostMsg_PlayStream, OnPlayStream)
IPC_MESSAGE_HANDLER(AudioHostMsg_PauseStream, OnPauseStream)
IPC_MESSAGE_HANDLER(AudioHostMsg_CloseStream, OnCloseStream)
IPC_MESSAGE_HANDLER(AudioHostMsg_SetVolume, OnSetVolume)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/audio_renderer_host.h b/content/browser/renderer_host/media/audio_renderer_host.h
index 6aebb3057d..60556ee81d 100644
--- a/content/browser/renderer_host/media/audio_renderer_host.h
+++ b/content/browser/renderer_host/media/audio_renderer_host.h
@@ -82,8 +82,7 @@ class CONTENT_EXPORT AudioRendererHost : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
friend class AudioRendererHostTest;
diff --git a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
index 38a7f0af2d..343c989081 100644
--- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
+++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
@@ -18,6 +18,7 @@
#include "ipc/ipc_message_utils.h"
#include "media/audio/audio_manager.h"
#include "media/base/bind_to_current_loop.h"
+#include "media/base/media_switches.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -89,9 +90,9 @@ class MockAudioRendererHost : public AudioRendererHost {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(MockAudioRendererHost, *message)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamCreated,
- OnStreamCreated)
+ OnNotifyStreamCreated)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged,
- OnStreamStateChanged)
+ OnNotifyStreamStateChanged)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
EXPECT_TRUE(handled);
@@ -100,15 +101,14 @@ class MockAudioRendererHost : public AudioRendererHost {
return true;
}
- void OnStreamCreated(const IPC::Message& msg,
- int stream_id,
- base::SharedMemoryHandle handle,
+ void OnNotifyStreamCreated(int stream_id,
+ base::SharedMemoryHandle handle,
#if defined(OS_WIN)
- base::SyncSocket::Handle socket_handle,
+ base::SyncSocket::Handle socket_handle,
#else
- base::FileDescriptor socket_descriptor,
+ base::FileDescriptor socket_descriptor,
#endif
- uint32 length) {
+ uint32 length) {
// Maps the shared memory.
shared_memory_.reset(new base::SharedMemory(handle, false));
CHECK(shared_memory_->Map(length));
@@ -128,9 +128,8 @@ class MockAudioRendererHost : public AudioRendererHost {
OnStreamCreated(stream_id, length);
}
- void OnStreamStateChanged(const IPC::Message& msg,
- int stream_id,
- media::AudioOutputIPCDelegate::State state) {
+ void OnNotifyStreamStateChanged(int stream_id,
+ media::AudioOutputIPCDelegate::State state) {
switch (state) {
case media::AudioOutputIPCDelegate::kPlaying:
OnStreamPlaying(stream_id);
diff --git a/content/browser/renderer_host/media/audio_sync_reader.cc b/content/browser/renderer_host/media/audio_sync_reader.cc
index d491fe2ec9..3daacca566 100644
--- a/content/browser/renderer_host/media/audio_sync_reader.cc
+++ b/content/browser/renderer_host/media/audio_sync_reader.cc
@@ -58,7 +58,7 @@ void AudioSyncReader::UpdatePendingBytes(uint32 bytes) {
++buffer_index_;
}
-void AudioSyncReader::Read(const AudioBus* source, AudioBus* dest) {
+void AudioSyncReader::Read(AudioBus* dest) {
++renderer_callback_count_;
if (!WaitUntilDataIsReady()) {
++renderer_missed_callback_count_;
diff --git a/content/browser/renderer_host/media/audio_sync_reader.h b/content/browser/renderer_host/media/audio_sync_reader.h
index 58eb42ccab..d596d1b4c0 100644
--- a/content/browser/renderer_host/media/audio_sync_reader.h
+++ b/content/browser/renderer_host/media/audio_sync_reader.h
@@ -35,8 +35,7 @@ class AudioSyncReader : public media::AudioOutputController::SyncReader {
// media::AudioOutputController::SyncReader implementations.
virtual void UpdatePendingBytes(uint32 bytes) OVERRIDE;
- virtual void Read(const media::AudioBus* source,
- media::AudioBus* dest) OVERRIDE;
+ virtual void Read(media::AudioBus* dest) OVERRIDE;
virtual void Close() OVERRIDE;
bool Init();
diff --git a/content/browser/renderer_host/media/device_request_message_filter.cc b/content/browser/renderer_host/media/device_request_message_filter.cc
index 3ae8c1a63f..4aaf2398d5 100644
--- a/content/browser/renderer_host/media/device_request_message_filter.cc
+++ b/content/browser/renderer_host/media/device_request_message_filter.cc
@@ -116,13 +116,13 @@ void DeviceRequestMessageFilter::DevicesEnumerated(
requests_.erase(request_it);
}
-bool DeviceRequestMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool DeviceRequestMessageFilter::OnMessageReceived(
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(DeviceRequestMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(DeviceRequestMessageFilter, message)
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GetSources, OnGetSources)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/device_request_message_filter.h b/content/browser/renderer_host/media/device_request_message_filter.h
index f5f38b3014..2ec54ccfc3 100644
--- a/content/browser/renderer_host/media/device_request_message_filter.h
+++ b/content/browser/renderer_host/media/device_request_message_filter.h
@@ -53,8 +53,7 @@ class CONTENT_EXPORT DeviceRequestMessageFilter : public BrowserMessageFilter,
const StreamDeviceInfoArray& devices) OVERRIDE;
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnChannelClosing() OVERRIDE;
protected:
diff --git a/content/browser/renderer_host/media/device_request_message_filter_unittest.cc b/content/browser/renderer_host/media/device_request_message_filter_unittest.cc
index cb7d061b26..516e2fa568 100644
--- a/content/browser/renderer_host/media/device_request_message_filter_unittest.cc
+++ b/content/browser/renderer_host/media/device_request_message_filter_unittest.cc
@@ -180,11 +180,7 @@ class DeviceRequestMessageFilterTest : public testing::Test {
}
void SendGetSourcesMessage(int request_id, const GURL& origin) {
- // Since we're not actually sending IPC messages, this is a throw-away
- // value.
- bool message_was_ok;
- host_->OnMessageReceived(MediaStreamHostMsg_GetSources(request_id, origin),
- &message_was_ok);
+ host_->OnMessageReceived(MediaStreamHostMsg_GetSources(request_id, origin));
}
void FireAudioDeviceCallback() {
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
index 37e2e1997e..51b3395be2 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -91,10 +91,9 @@ void MediaStreamDispatcherHost::DeviceOpened(
render_view_id, page_request_id, label, video_device));
}
-bool MediaStreamDispatcherHost::OnMessageReceived(
- const IPC::Message& message, bool* message_was_ok) {
+bool MediaStreamDispatcherHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcherHost, message)
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream)
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelGenerateStream,
OnCancelGenerateStream)
@@ -109,7 +108,7 @@ bool MediaStreamDispatcherHost::OnMessageReceived(
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CloseDevice,
OnCloseDevice)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.h b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
index f34054e8d3..079e5dfd9e 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.h
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.h
@@ -55,8 +55,7 @@ class CONTENT_EXPORT MediaStreamDispatcherHost : public BrowserMessageFilter,
const StreamDeviceInfo& video_device) OVERRIDE;
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnChannelClosing() OVERRIDE;
protected:
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
index a181899b44..733787f341 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
@@ -11,6 +11,7 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "content/browser/browser_thread_impl.h"
+#include "content/browser/renderer_host/media/audio_input_device_manager.h"
#include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
@@ -26,6 +27,7 @@
#include "content/test/test_content_client.h"
#include "ipc/ipc_message_macros.h"
#include "media/audio/mock_audio_manager.h"
+#include "media/base/media_switches.h"
#include "media/video/capture/fake_video_capture_device_factory.h"
#include "net/url_request/url_request_context.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -51,7 +53,8 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
const scoped_refptr<base::MessageLoopProxy>& message_loop,
MediaStreamManager* manager)
: MediaStreamDispatcherHost(kProcessId, salt_callback, manager),
- message_loop_(message_loop) {}
+ message_loop_(message_loop),
+ current_ipc_(NULL) {}
// A list of mock methods.
MOCK_METHOD4(OnStreamGenerated,
@@ -114,35 +117,36 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
// conversation between this object and the renderer.
virtual bool Send(IPC::Message* message) OVERRIDE {
CHECK(message);
+ current_ipc_ = message;
// In this method we dispatch the messages to the according handlers as if
// we are the renderer.
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(MockMediaStreamDispatcherHost, *message)
- IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated, OnStreamGenerated)
+ IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated,
+ OnStreamGeneratedInternal)
IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed,
- OnStreamGenerationFailed)
- IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped, OnDeviceStopped)
- IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened, OnDeviceOpened)
- IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated,
- OnDevicesEnumerated)
+ OnStreamGenerationFailedInternal)
+ IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped, OnDeviceStoppedInternal)
+ IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened, OnDeviceOpenedInternal)
+ IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated, OnDevicesEnumerated)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
EXPECT_TRUE(handled);
delete message;
+ current_ipc_ = NULL;
return true;
}
// These handler methods do minimal things and delegate to the mock methods.
- void OnStreamGenerated(
- const IPC::Message& msg,
+ void OnStreamGeneratedInternal(
int request_id,
std::string label,
StreamDeviceInfoArray audio_device_list,
StreamDeviceInfoArray video_device_list) {
- OnStreamGenerated(msg.routing_id(), request_id, audio_device_list.size(),
- video_device_list.size());
+ OnStreamGenerated(current_ipc_->routing_id(), request_id,
+ audio_device_list.size(), video_device_list.size());
// Notify that the event have occurred.
base::Closure quit_closure = quit_closures_.front();
quit_closures_.pop();
@@ -153,11 +157,10 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
video_devices_ = video_device_list;
}
- void OnStreamGenerationFailed(
- const IPC::Message& msg,
+ void OnStreamGenerationFailedInternal(
int request_id,
content::MediaStreamRequestResult result) {
- OnStreamGenerationFailed(msg.routing_id(), request_id, result);
+ OnStreamGenerationFailed(current_ipc_->routing_id(), request_id, result);
if (!quit_closures_.empty()) {
base::Closure quit_closure = quit_closures_.front();
quit_closures_.pop();
@@ -167,21 +170,19 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
label_= "";
}
- void OnDeviceStopped(const IPC::Message& msg,
- const std::string& label,
- const content::StreamDeviceInfo& device) {
+ void OnDeviceStoppedInternal(const std::string& label,
+ const content::StreamDeviceInfo& device) {
if (IsVideoMediaType(device.device.type))
EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, video_devices_[0]));
if (IsAudioMediaType(device.device.type))
EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, audio_devices_[0]));
- OnDeviceStopped(msg.routing_id());
+ OnDeviceStopped(current_ipc_->routing_id());
}
- void OnDeviceOpened(const IPC::Message& msg,
- int request_id,
- const std::string& label,
- const StreamDeviceInfo& device) {
+ void OnDeviceOpenedInternal(int request_id,
+ const std::string& label,
+ const StreamDeviceInfo& device) {
base::Closure quit_closure = quit_closures_.front();
quit_closures_.pop();
message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure));
@@ -189,8 +190,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
opened_device_ = device;
}
- void OnDevicesEnumerated(const IPC::Message& msg,
- int request_id,
+ void OnDevicesEnumerated(int request_id,
const StreamDeviceInfoArray& devices) {
base::Closure quit_closure = quit_closures_.front();
quit_closures_.pop();
@@ -199,7 +199,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
}
scoped_refptr<base::MessageLoopProxy> message_loop_;
-
+ IPC::Message* current_ipc_;
std::queue<base::Closure> quit_closures_;
};
@@ -248,7 +248,8 @@ class MediaStreamDispatcherHostTest : public testing::Test {
video_capture_device_factory_->GetDeviceNames(&physical_video_devices_);
ASSERT_GT(physical_video_devices_.size(), 0u);
- audio_manager_->GetAudioInputDeviceNames(&physical_audio_devices_);
+ media_stream_manager_->audio_input_device_manager()->GetFakeDeviceNames(
+ &physical_audio_devices_);
ASSERT_GT(physical_audio_devices_.size(), 0u);
}
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index 3cdb1abffd..fe537d9751 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -37,8 +37,7 @@
#include "media/audio/audio_parameters.h"
#include "media/base/channel_layout.h"
#include "media/base/media_switches.h"
-#include "media/video/capture/fake_video_capture_device_factory.h"
-#include "media/video/capture/file_video_capture_device_factory.h"
+#include "media/video/capture/video_capture_device_factory.h"
#include "url/gurl.h"
#if defined(OS_WIN)
@@ -1438,26 +1437,13 @@ void MediaStreamManager::InitializeDeviceManagersOnIOThread() {
io_loop_ = base::MessageLoop::current();
io_loop_->AddDestructionObserver(this);
- // Use a Fake Audio Device and Fake/File Video Device Factory if the command
- // line flags are present, otherwise use a normal device factory.
if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kUseFakeDeviceForMediaStream)) {
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kUseFileForFakeVideoCapture)) {
- video_capture_manager_ = new VideoCaptureManager(
- scoped_ptr<media::VideoCaptureDeviceFactory>(
- new media::FileVideoCaptureDeviceFactory()));
- } else {
- video_capture_manager_ = new VideoCaptureManager(
- scoped_ptr<media::VideoCaptureDeviceFactory>(
- new media::FakeVideoCaptureDeviceFactory()));
- }
+ switches::kUseFakeDeviceForMediaStream)) {
audio_input_device_manager()->UseFakeDevice();
- } else {
- video_capture_manager_ = new VideoCaptureManager(
- scoped_ptr<media::VideoCaptureDeviceFactory>(
- new media::VideoCaptureDeviceFactory()));
}
+
+ video_capture_manager_ = new VideoCaptureManager(
+ media::VideoCaptureDeviceFactory::CreateFactory());
video_capture_manager_->Register(this, device_task_runner_);
}
diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
index 2da5a64630..e01b945b81 100644
--- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc
+++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -16,6 +16,7 @@
#include "content/public/test/test_browser_thread_bundle.h"
#include "media/audio/audio_manager_base.h"
#include "media/audio/fake_audio_log_factory.h"
+#include "media/base/media_switches.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/renderer_host/media/media_stream_track_metrics_host.cc b/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
index 2d3c7cdbf7..9bae1f7283 100644
--- a/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
+++ b/content/browser/renderer_host/media/media_stream_track_metrics_host.cc
@@ -34,17 +34,14 @@ MediaStreamTrackMetricsHost::~MediaStreamTrackMetricsHost() {
}
bool MediaStreamTrackMetricsHost::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamTrackMetricsHost,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MediaStreamTrackMetricsHost, message)
IPC_MESSAGE_HANDLER(MediaStreamTrackMetricsHost_AddTrack, OnAddTrack)
IPC_MESSAGE_HANDLER(MediaStreamTrackMetricsHost_RemoveTrack, OnRemoveTrack)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/media_stream_track_metrics_host.h b/content/browser/renderer_host/media/media_stream_track_metrics_host.h
index b0d18f10be..081b0d5113 100644
--- a/content/browser/renderer_host/media/media_stream_track_metrics_host.h
+++ b/content/browser/renderer_host/media/media_stream_track_metrics_host.h
@@ -34,8 +34,7 @@ class MediaStreamTrackMetricsHost
virtual ~MediaStreamTrackMetricsHost();
// BrowserMessageFilter override.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
void OnAddTrack(uint64 id, bool is_audio, bool is_remote);
diff --git a/content/browser/renderer_host/media/media_stream_ui_proxy.cc b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
index b6c7f1f49c..fdf7ccaf29 100644
--- a/content/browser/renderer_host/media/media_stream_ui_proxy.cc
+++ b/content/browser/renderer_host/media/media_stream_ui_proxy.cc
@@ -4,9 +4,11 @@
#include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
+#include "base/command_line.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/common/content_switches.h"
#include "media/video/capture/fake_video_capture_device.h"
namespace content {
@@ -206,6 +208,18 @@ void FakeMediaStreamUIProxy::RequestAccess(
response_callback_ = response_callback;
+ if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kUseFakeUIForMediaStream) == "deny") {
+ // Immediately deny the request.
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&MediaStreamUIProxy::ProcessAccessRequestResponse,
+ weak_factory_.GetWeakPtr(),
+ MediaStreamDevices(),
+ MEDIA_DEVICE_PERMISSION_DENIED));
+ return;
+ }
+
MediaStreamDevices devices_to_use;
bool accepted_audio = false;
bool accepted_video = false;
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.cc b/content/browser/renderer_host/media/midi_dispatcher_host.cc
index 2863e11ee5..f006c14069 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.cc
@@ -24,16 +24,15 @@ MidiDispatcherHost::MidiDispatcherHost(int render_process_id,
MidiDispatcherHost::~MidiDispatcherHost() {
}
-bool MidiDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool MidiDispatcherHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MidiDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MidiDispatcherHost, message)
IPC_MESSAGE_HANDLER(MidiHostMsg_RequestSysExPermission,
OnRequestSysExPermission)
IPC_MESSAGE_HANDLER(MidiHostMsg_CancelSysExPermissionRequest,
OnCancelSysExPermissionRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.h b/content/browser/renderer_host/media/midi_dispatcher_host.h
index d8b35334fd..c623b3d855 100644
--- a/content/browser/renderer_host/media/midi_dispatcher_host.h
+++ b/content/browser/renderer_host/media/midi_dispatcher_host.h
@@ -21,8 +21,7 @@ class MidiDispatcherHost : public BrowserMessageFilter {
MidiDispatcherHost(int render_process_id, BrowserContext* browser_context);
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OverrideThreadForMessage(
const IPC::Message& message, BrowserThread::ID* thread) OVERRIDE;
diff --git a/content/browser/renderer_host/media/midi_host.cc b/content/browser/renderer_host/media/midi_host.cc
index 9c85b73968..c55022b830 100644
--- a/content/browser/renderer_host/media/midi_host.cc
+++ b/content/browser/renderer_host/media/midi_host.cc
@@ -67,14 +67,13 @@ void MidiHost::OnDestruct() const {
}
// IPC Messages handler
-bool MidiHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool MidiHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MidiHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MidiHost, message)
IPC_MESSAGE_HANDLER(MidiHostMsg_StartSession, OnStartSession)
IPC_MESSAGE_HANDLER(MidiHostMsg_SendData, OnSendData)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/midi_host.h b/content/browser/renderer_host/media/midi_host.h
index a8e84f260a..90c061ae37 100644
--- a/content/browser/renderer_host/media/midi_host.h
+++ b/content/browser/renderer_host/media/midi_host.h
@@ -32,8 +32,7 @@ class CONTENT_EXPORT MidiHost
// BrowserMessageFilter implementation.
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// MidiManagerClient implementation.
virtual void CompleteStartSession(int client_id,
diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.cc b/content/browser/renderer_host/media/peer_connection_tracker_host.cc
index 96029b9930..a5e0ba3fb0 100644
--- a/content/browser/renderer_host/media/peer_connection_tracker_host.cc
+++ b/content/browser/renderer_host/media/peer_connection_tracker_host.cc
@@ -12,11 +12,10 @@ PeerConnectionTrackerHost::PeerConnectionTrackerHost(int render_process_id)
: BrowserMessageFilter(PeerConnectionTrackerMsgStart),
render_process_id_(render_process_id) {}
-bool PeerConnectionTrackerHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool PeerConnectionTrackerHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(PeerConnectionTrackerHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(PeerConnectionTrackerHost, message)
IPC_MESSAGE_HANDLER(PeerConnectionTrackerHost_AddPeerConnection,
OnAddPeerConnection)
IPC_MESSAGE_HANDLER(PeerConnectionTrackerHost_RemovePeerConnection,
@@ -26,7 +25,7 @@ bool PeerConnectionTrackerHost::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(PeerConnectionTrackerHost_AddStats, OnAddStats)
IPC_MESSAGE_HANDLER(PeerConnectionTrackerHost_GetUserMedia, OnGetUserMedia)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.h b/content/browser/renderer_host/media/peer_connection_tracker_host.h
index 46830a2c08..6a411e8ba0 100644
--- a/content/browser/renderer_host/media/peer_connection_tracker_host.h
+++ b/content/browser/renderer_host/media/peer_connection_tracker_host.h
@@ -23,8 +23,7 @@ class PeerConnectionTrackerHost : public BrowserMessageFilter {
PeerConnectionTrackerHost(int render_process_id);
// content::BrowserMessageFilter override.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OverrideThreadForMessage(const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc
index deb5e198ce..4775a77c06 100644
--- a/content/browser/renderer_host/media/video_capture_controller.cc
+++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -131,6 +131,7 @@ class VideoCaptureController::VideoCaptureDeviceClient
const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks timestamp) OVERRIDE;
virtual void OnError(const std::string& reason) OVERRIDE;
+ virtual void OnLog(const std::string& message) OVERRIDE;
private:
scoped_refptr<Buffer> DoReserveOutputBuffer(media::VideoFrame::Format format,
@@ -487,6 +488,11 @@ void VideoCaptureController::VideoCaptureDeviceClient::OnError(
base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_));
}
+void VideoCaptureController::VideoCaptureDeviceClient::OnLog(
+ const std::string& message) {
+ MediaStreamManager::SendMessageToNativeLog("Video capture: " + message);
+}
+
scoped_refptr<media::VideoCaptureDevice::Client::Buffer>
VideoCaptureController::VideoCaptureDeviceClient::DoReserveOutputBuffer(
media::VideoFrame::Format format,
diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc
index 14ab5d403f..be571bf4b0 100644
--- a/content/browser/renderer_host/media/video_capture_host.cc
+++ b/content/browser/renderer_host/media/video_capture_host.cc
@@ -194,10 +194,9 @@ void VideoCaptureHost::DoEndedOnIOThread(
///////////////////////////////////////////////////////////////////////////////
// IPC Messages handler.
-bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(VideoCaptureHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(VideoCaptureHost, message)
IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Start, OnStartCapture)
IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Pause, OnPauseCapture)
IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_Stop, OnStopCapture)
@@ -207,7 +206,7 @@ bool VideoCaptureHost::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(VideoCaptureHostMsg_GetDeviceFormatsInUse,
OnGetDeviceFormatsInUse)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/video_capture_host.h b/content/browser/renderer_host/media/video_capture_host.h
index 25d69470e5..caecb1ae22 100644
--- a/content/browser/renderer_host/media/video_capture_host.h
+++ b/content/browser/renderer_host/media/video_capture_host.h
@@ -73,8 +73,7 @@ class CONTENT_EXPORT VideoCaptureHost
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// VideoCaptureControllerEventHandler implementation.
virtual void OnError(const VideoCaptureControllerID& id) OVERRIDE;
diff --git a/content/browser/renderer_host/media/video_capture_host_unittest.cc b/content/browser/renderer_host/media/video_capture_host_unittest.cc
index 171d300cf9..dd22a64991 100644
--- a/content/browser/renderer_host/media/video_capture_host_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_host_unittest.cc
@@ -27,6 +27,7 @@
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/test/test_content_browser_client.h"
#include "media/audio/audio_manager.h"
+#include "media/base/media_switches.h"
#include "media/base/video_frame.h"
#include "media/video/capture/video_capture_types.h"
#include "net/url_request/url_request_context.h"
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index 6568407bdf..6c90c91cae 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -200,7 +200,9 @@ void VideoCaptureManager::DoStartDeviceOnDeviceThread(
DeviceInfo* found = FindDeviceInfoById(entry->id, devices_info_cache_);
if (found) {
video_capture_device =
- video_capture_device_factory_->Create(found->name);
+ video_capture_device_factory_->Create(
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
+ found->name);
}
break;
}
diff --git a/content/browser/renderer_host/media/webrtc_identity_service_host.cc b/content/browser/renderer_host/media/webrtc_identity_service_host.cc
index 1c7291e23d..0cdd5184f2 100644
--- a/content/browser/renderer_host/media/webrtc_identity_service_host.cc
+++ b/content/browser/renderer_host/media/webrtc_identity_service_host.cc
@@ -26,14 +26,13 @@ WebRTCIdentityServiceHost::~WebRTCIdentityServiceHost() {
cancel_callback_.Run();
}
-bool WebRTCIdentityServiceHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool WebRTCIdentityServiceHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(WebRTCIdentityServiceHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(WebRTCIdentityServiceHost, message)
IPC_MESSAGE_HANDLER(WebRTCIdentityMsg_RequestIdentity, OnRequestIdentity)
IPC_MESSAGE_HANDLER(WebRTCIdentityMsg_CancelRequest, OnCancelRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/media/webrtc_identity_service_host.h b/content/browser/renderer_host/media/webrtc_identity_service_host.h
index 079e3077a6..7bc8233b9c 100644
--- a/content/browser/renderer_host/media/webrtc_identity_service_host.h
+++ b/content/browser/renderer_host/media/webrtc_identity_service_host.h
@@ -33,8 +33,7 @@ class CONTENT_EXPORT WebRTCIdentityServiceHost : public BrowserMessageFilter {
virtual ~WebRTCIdentityServiceHost();
// content::BrowserMessageFilter override.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
// |sequence_number| is the same as in the OnRequestIdentity call.
diff --git a/content/browser/renderer_host/media/webrtc_identity_service_host_unittest.cc b/content/browser/renderer_host/media/webrtc_identity_service_host_unittest.cc
index 9e336d1db6..a785a22b99 100644
--- a/content/browser/renderer_host/media/webrtc_identity_service_host_unittest.cc
+++ b/content/browser/renderer_host/media/webrtc_identity_service_host_unittest.cc
@@ -73,10 +73,8 @@ class WebRTCIdentityServiceHostForTest : public WebRTCIdentityServiceHost {
return true;
}
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE {
- return WebRTCIdentityServiceHost::OnMessageReceived(message,
- message_was_ok);
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
+ return WebRTCIdentityServiceHost::OnMessageReceived(message);
}
IPC::Message GetLastMessage() { return messages_.back(); }
@@ -103,20 +101,15 @@ class WebRTCIdentityServiceHostTest : public ::testing::Test {
host_(new WebRTCIdentityServiceHostForTest(store_.get())) {}
void SendRequestToHost() {
- bool ok;
host_->OnMessageReceived(
WebRTCIdentityMsg_RequestIdentity(FAKE_SEQUENCE_NUMBER,
GURL(FAKE_ORIGIN),
FAKE_IDENTITY_NAME,
- FAKE_COMMON_NAME),
- &ok);
- ASSERT_TRUE(ok);
+ FAKE_COMMON_NAME));
}
void SendCancelRequestToHost() {
- bool ok;
- host_->OnMessageReceived(WebRTCIdentityMsg_CancelRequest(), &ok);
- ASSERT_TRUE(ok);
+ host_->OnMessageReceived(WebRTCIdentityMsg_CancelRequest());
}
void VerifyRequestFailedMessage(int error) {
diff --git a/content/browser/renderer_host/memory_benchmark_message_filter.cc b/content/browser/renderer_host/memory_benchmark_message_filter.cc
index 35b2884fe5..607325376f 100644
--- a/content/browser/renderer_host/memory_benchmark_message_filter.cc
+++ b/content/browser/renderer_host/memory_benchmark_message_filter.cc
@@ -17,12 +17,9 @@ MemoryBenchmarkMessageFilter::MemoryBenchmarkMessageFilter()
}
bool MemoryBenchmarkMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MemoryBenchmarkMessageFilter,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(MemoryBenchmarkMessageFilter, message)
IPC_MESSAGE_HANDLER(MemoryBenchmarkHostMsg_HeapProfilerDump,
OnHeapProfilerDump)
IPC_MESSAGE_UNHANDLED(handled = false)
diff --git a/content/browser/renderer_host/memory_benchmark_message_filter.h b/content/browser/renderer_host/memory_benchmark_message_filter.h
index da5a6aa4b5..7255ab915e 100644
--- a/content/browser/renderer_host/memory_benchmark_message_filter.h
+++ b/content/browser/renderer_host/memory_benchmark_message_filter.h
@@ -15,8 +15,7 @@ class MemoryBenchmarkMessageFilter : public BrowserMessageFilter {
public:
MemoryBenchmarkMessageFilter();
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
virtual ~MemoryBenchmarkMessageFilter();
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
index be63c0217b..e5f73de62f 100644
--- a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
+++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
@@ -120,10 +120,9 @@ void P2PSocketDispatcherHost::OnDestruct() const {
BrowserThread::DeleteOnIOThread::Destruct(this);
}
-bool P2PSocketDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool P2PSocketDispatcherHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(P2PSocketDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(P2PSocketDispatcherHost, message)
IPC_MESSAGE_HANDLER(P2PHostMsg_StartNetworkNotifications,
OnStartNetworkNotifications)
IPC_MESSAGE_HANDLER(P2PHostMsg_StopNetworkNotifications,
@@ -136,7 +135,7 @@ bool P2PSocketDispatcherHost::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(P2PHostMsg_SetOption, OnSetOption)
IPC_MESSAGE_HANDLER(P2PHostMsg_DestroySocket, OnDestroySocket)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -160,8 +159,7 @@ P2PSocketHost* P2PSocketDispatcherHost::LookupSocket(int socket_id) {
return (it == sockets_.end()) ? NULL : it->second;
}
-void P2PSocketDispatcherHost::OnStartNetworkNotifications(
- const IPC::Message& msg) {
+void P2PSocketDispatcherHost::OnStartNetworkNotifications() {
if (!monitoring_networks_) {
net::NetworkChangeNotifier::AddIPAddressObserver(this);
monitoring_networks_ = true;
@@ -172,8 +170,7 @@ void P2PSocketDispatcherHost::OnStartNetworkNotifications(
&P2PSocketDispatcherHost::DoGetNetworkList, this));
}
-void P2PSocketDispatcherHost::OnStopNetworkNotifications(
- const IPC::Message& msg) {
+void P2PSocketDispatcherHost::OnStopNetworkNotifications() {
if (monitoring_networks_) {
net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
monitoring_networks_ = false;
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.h b/content/browser/renderer_host/p2p/socket_dispatcher_host.h
index 1f456915b2..b3c451ab21 100644
--- a/content/browser/renderer_host/p2p/socket_dispatcher_host.h
+++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.h
@@ -40,8 +40,7 @@ class P2PSocketDispatcherHost
// content::BrowserMessageFilter overrides.
virtual void OnChannelClosing() OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// net::NetworkChangeNotifier::IPAddressObserver interface.
virtual void OnIPAddressChanged() OVERRIDE;
@@ -60,9 +59,8 @@ class P2PSocketDispatcherHost
P2PSocketHost* LookupSocket(int socket_id);
// Handlers for the messages coming from the renderer.
- void OnStartNetworkNotifications(const IPC::Message& msg);
- void OnStopNetworkNotifications(const IPC::Message& msg);
-
+ void OnStartNetworkNotifications();
+ void OnStopNetworkNotifications();
void OnGetHostAddress(const std::string& host_name,
int32 request_id);
diff --git a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
index 92a8162c40..40c13dfee0 100644
--- a/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc
@@ -55,11 +55,11 @@ scoped_refptr<base::TaskRunner> FontMessageFilter::OverrideTaskRunnerForMessage(
int32_t FontMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(FontMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_BrowserFontSingleton_GetFontFamilies,
- OnHostMsgGetFontFamilies)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(FontMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_BrowserFontSingleton_GetFontFamilies,
+ OnHostMsgGetFontFamilies)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
index 56b6d922ac..d9a11b7cc4 100644
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
@@ -86,7 +86,7 @@ PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host,
: ResourceHost(host->GetPpapiHost(), instance, resource),
browser_ppapi_host_(host),
render_process_host_(NULL),
- file_(base::kInvalidPlatformFileValue),
+ file_(BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)),
open_flags_(0),
file_system_type_(PP_FILESYSTEMTYPE_INVALID),
max_written_offset_(0),
@@ -97,8 +97,6 @@ PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host,
instance, &render_process_id_, &unused)) {
render_process_id_ = -1;
}
- file_message_loop_ =
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE);
}
PepperFileIOHost::~PepperFileIOHost() {}
@@ -106,16 +104,17 @@ PepperFileIOHost::~PepperFileIOHost() {}
int32_t PepperFileIOHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperFileIOHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Open, OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Touch, OnHostMsgTouch)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_SetLength,
- OnHostMsgSetLength)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileIO_Flush, OnHostMsgFlush)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Close, OnHostMsgClose)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileIO_RequestOSFileHandle,
- OnHostMsgRequestOSFileHandle)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFileIOHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Open, OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Touch, OnHostMsgTouch)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_SetLength,
+ OnHostMsgSetLength)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileIO_Flush,
+ OnHostMsgFlush)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileIO_Close, OnHostMsgClose)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileIO_RequestOSFileHandle,
+ OnHostMsgRequestOSFileHandle)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
@@ -238,10 +237,9 @@ void PepperFileIOHost::GotUIThreadStuffForInternalFileSystems(
void PepperFileIOHost::DidOpenInternalFile(
ppapi::host::ReplyMessageContext reply_context,
- base::File::Error result,
- base::PlatformFile file,
+ base::File file,
const base::Closure& on_close_callback) {
- if (result == base::File::FILE_OK) {
+ if (file.IsValid()) {
on_close_callback_ = on_close_callback;
if (FileOpenForWrite(open_flags_) && file_system_host_->ChecksQuota()) {
@@ -252,27 +250,29 @@ void PepperFileIOHost::DidOpenInternalFile(
base::Bind(&PepperFileIOHost::DidOpenQuotaFile,
weak_factory_.GetWeakPtr(),
reply_context,
- file));
+ base::Passed(&file)));
return;
}
}
- ExecutePlatformOpenFileCallback(
- reply_context, result, base::PassPlatformFile(&file), true);
+ DCHECK(!file_.IsValid());
+ base::File::Error error =
+ file.IsValid() ? base::File::FILE_OK : file.error_details();
+ file_.SetFile(file.Pass());
+ OnOpenProxyCallback(reply_context, error);
}
void PepperFileIOHost::GotResolvedRenderProcessId(
ppapi::host::ReplyMessageContext reply_context,
base::FilePath path,
- int platform_file_flags,
+ int file_flags,
base::ProcessId resolved_render_process_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
resolved_render_process_id_ = resolved_render_process_id;
- base::FileUtilProxy::CreateOrOpen(
- file_message_loop_,
+ file_.CreateOrOpen(
path,
- platform_file_flags,
- base::Bind(&PepperFileIOHost::ExecutePlatformOpenFileCallback,
+ file_flags,
+ base::Bind(&PepperFileIOHost::OnOpenProxyCallback,
weak_factory_.GetWeakPtr(),
reply_context));
}
@@ -286,15 +286,14 @@ int32_t PepperFileIOHost::OnHostMsgTouch(
if (rv != PP_OK)
return rv;
- if (!base::FileUtilProxy::Touch(
- file_message_loop_,
- file_,
+ if (!file_.SetTimes(
PPTimeToTime(last_access_time),
PPTimeToTime(last_modified_time),
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
weak_factory_.GetWeakPtr(),
- context->MakeReplyMessageContext())))
+ context->MakeReplyMessageContext()))) {
return PP_ERROR_FAILED;
+ }
state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
return PP_OK_COMPLETIONPENDING;
@@ -313,14 +312,13 @@ int32_t PepperFileIOHost::OnHostMsgSetLength(
// Quota checks are performed on the plugin side, in order to use the same
// quota reservation and request system as Write.
- if (!base::FileUtilProxy::Truncate(
- file_message_loop_,
- file_,
+ if (!file_.SetLength(
length,
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
weak_factory_.GetWeakPtr(),
- context->MakeReplyMessageContext())))
+ context->MakeReplyMessageContext()))) {
return PP_ERROR_FAILED;
+ }
state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
return PP_OK_COMPLETIONPENDING;
@@ -333,13 +331,12 @@ int32_t PepperFileIOHost::OnHostMsgFlush(
if (rv != PP_OK)
return rv;
- if (!base::FileUtilProxy::Flush(
- file_message_loop_,
- file_,
+ if (!file_.Flush(
base::Bind(&PepperFileIOHost::ExecutePlatformGeneralCallback,
weak_factory_.GetWeakPtr(),
- context->MakeReplyMessageContext())))
+ context->MakeReplyMessageContext()))) {
return PP_ERROR_FAILED;
+ }
state_manager_.SetPendingOperation(FileIOStateManager::OPERATION_EXCLUSIVE);
return PP_OK_COMPLETIONPENDING;
@@ -353,24 +350,23 @@ int32_t PepperFileIOHost::OnHostMsgClose(
check_quota_ = false;
}
- if (file_ != base::kInvalidPlatformFileValue) {
- base::FileUtilProxy::Close(file_message_loop_,
- file_,
- base::Bind(&PepperFileIOHost::DidCloseFile,
- weak_factory_.GetWeakPtr()));
- file_ = base::kInvalidPlatformFileValue;
+ if (file_.IsValid()) {
+ file_.Close(base::Bind(&PepperFileIOHost::DidCloseFile,
+ weak_factory_.GetWeakPtr()));
}
return PP_OK;
}
void PepperFileIOHost::DidOpenQuotaFile(
ppapi::host::ReplyMessageContext reply_context,
- base::PlatformFile file,
+ base::File file,
int64_t max_written_offset) {
+ DCHECK(!file_.IsValid());
+ DCHECK(file.IsValid());
max_written_offset_ = max_written_offset;
+ file_.SetFile(file.Pass());
- ExecutePlatformOpenFileCallback(
- reply_context, base::File::FILE_OK, base::PassPlatformFile(&file), true);
+ OnOpenProxyCallback(reply_context, base::File::FILE_OK);
}
void PepperFileIOHost::DidCloseFile(base::File::Error /*error*/) {
@@ -424,17 +420,11 @@ void PepperFileIOHost::ExecutePlatformGeneralCallback(
state_manager_.SetOperationFinished();
}
-void PepperFileIOHost::ExecutePlatformOpenFileCallback(
+void PepperFileIOHost::OnOpenProxyCallback(
ppapi::host::ReplyMessageContext reply_context,
- base::File::Error error_code,
- base::PassPlatformFile file,
- bool unused_created) {
+ base::File::Error error_code) {
int32_t pp_error = ppapi::FileErrorToPepperError(error_code);
- DCHECK(file_ == base::kInvalidPlatformFileValue);
- file_ = file.ReleaseValue();
-
- if (file_ != base::kInvalidPlatformFileValue &&
- !AddFileToReplyContext(open_flags_, &reply_context))
+ if (file_.IsValid() && !AddFileToReplyContext(open_flags_, &reply_context))
pp_error = PP_ERROR_FAILED;
PP_Resource quota_file_system = 0;
@@ -466,7 +456,8 @@ bool PepperFileIOHost::AddFileToReplyContext(
plugin_process_id = resolved_render_process_id_;
IPC::PlatformFileForTransit transit_file =
- BrokerGetFileHandleForProcess(file_, plugin_process_id, false);
+ BrokerGetFileHandleForProcess(file_.GetPlatformFile(), plugin_process_id,
+ false);
if (transit_file == IPC::InvalidPlatformFileForTransit())
return false;
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.h b/content/browser/renderer_host/pepper/pepper_file_io_host.h
index 9d729fe67a..04647cd799 100644
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.h
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.h
@@ -10,6 +10,7 @@
#include "base/basictypes.h"
#include "base/callback_forward.h"
#include "base/files/file.h"
+#include "base/files/file_proxy.h"
#include "base/memory/weak_ptr.h"
#include "base/platform_file.h"
#include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
@@ -78,28 +79,25 @@ class PepperFileIOHost : public ppapi::host::ResourceHost,
void ExecutePlatformGeneralCallback(
ppapi::host::ReplyMessageContext reply_context,
base::File::Error error_code);
- void ExecutePlatformOpenFileCallback(
- ppapi::host::ReplyMessageContext reply_context,
- base::File::Error error_code,
- base::PassPlatformFile file,
- bool unused_created);
+
+ void OnOpenProxyCallback(ppapi::host::ReplyMessageContext reply_context,
+ base::File::Error error_code);
void GotUIThreadStuffForInternalFileSystems(
ppapi::host::ReplyMessageContext reply_context,
int platform_file_flags,
UIThreadStuff ui_thread_stuff);
void DidOpenInternalFile(ppapi::host::ReplyMessageContext reply_context,
- base::File::Error result,
- base::PlatformFile file,
+ base::File file,
const base::Closure& on_close_callback);
void GotResolvedRenderProcessId(
ppapi::host::ReplyMessageContext reply_context,
base::FilePath path,
- int platform_file_flags,
+ int file_flags,
base::ProcessId resolved_render_process_id);
void DidOpenQuotaFile(ppapi::host::ReplyMessageContext reply_context,
- base::PlatformFile file,
+ base::File file,
int64_t max_written_offset);
bool CallSetLength(ppapi::host::ReplyMessageContext reply_context,
int64_t length);
@@ -119,7 +117,7 @@ class PepperFileIOHost : public ppapi::host::ResourceHost,
int render_process_id_;
base::ProcessId resolved_render_process_id_;
- base::PlatformFile file_;
+ base::FileProxy file_;
int32_t open_flags_;
// The file system type specified in the Open() call. This will be
@@ -137,8 +135,6 @@ class PepperFileIOHost : public ppapi::host::ResourceHost,
ppapi::FileIOStateManager state_manager_;
- scoped_refptr<base::MessageLoopProxy> file_message_loop_;
-
base::WeakPtrFactory<PepperFileIOHost> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PepperFileIOHost);
diff --git a/content/browser/renderer_host/pepper/pepper_file_ref_host.cc b/content/browser/renderer_host/pepper/pepper_file_ref_host.cc
index c2d83af249..a8d362d36e 100644
--- a/content/browser/renderer_host/pepper/pepper_file_ref_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_ref_host.cc
@@ -156,19 +156,18 @@ int32_t PepperFileRefHost::OnResourceMessageReceived(
if (!backend_)
return PP_ERROR_FAILED;
- IPC_BEGIN_MESSAGE_MAP(PepperFileRefHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_MakeDirectory,
- OnMakeDirectory);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_Touch, OnTouch);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_Delete, OnDelete);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_Rename, OnRename);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_Query, OnQuery);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_ReadDirectoryEntries,
- OnReadDirectoryEntries);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_GetAbsolutePath,
- OnGetAbsolutePath);
-
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFileRefHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_MakeDirectory,
+ OnMakeDirectory)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_Touch, OnTouch)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_Delete, OnDelete)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileRef_Rename, OnRename)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_Query, OnQuery)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_FileRef_ReadDirectoryEntries, OnReadDirectoryEntries)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FileRef_GetAbsolutePath,
+ OnGetAbsolutePath)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
index 0284ba405e..5eec410500 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
@@ -101,14 +101,15 @@ void PepperFileSystemBrowserHost::OpenExisting(const GURL& root_url,
int32_t PepperFileSystemBrowserHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperFileSystemBrowserHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_Open, OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_FileSystem_InitIsolatedFileSystem,
- OnHostMsgInitIsolatedFileSystem)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_ReserveQuota,
- OnHostMsgReserveQuota)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFileSystemBrowserHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_Open,
+ OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_FileSystem_InitIsolatedFileSystem,
+ OnHostMsgInitIsolatedFileSystem)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_ReserveQuota,
+ OnHostMsgReserveQuota)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
@@ -483,13 +484,15 @@ std::string PepperFileSystemBrowserHost::GeneratePluginId(
// types). If we bring this API to stable, we might have to make it more
// general.
- if (!net::IsMimeType(mime_type))
+ std::string top_level_type;
+ std::string subtype;
+ if (!net::ParseMimeTypeWithoutParameter(
+ mime_type, &top_level_type, &subtype) ||
+ !net::IsValidTopLevelMimeType(top_level_type))
return std::string();
- std::string output = mime_type;
// Replace a slash used for type/subtype separator with an underscore.
- // NOTE: This assumes there is only one slash in the MIME type.
- ReplaceFirstSubstringAfterOffset(&output, 0, "/", "_");
+ std::string output = top_level_type + "_" + subtype;
// Verify |output| contains only alphabets, digits, or "._-".
for (std::string::const_iterator it = output.begin(); it != output.end();
diff --git a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
index 550ede3fd8..d4413b20c9 100644
--- a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
@@ -85,21 +85,22 @@ PepperFlashFileMessageFilter::OverrideTaskRunnerForMessage(
int32_t PepperFlashFileMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperFlashFileMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_OpenFile, OnOpenFile)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_RenameFile,
- OnRenameFile)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_DeleteFileOrDir,
- OnDeleteFileOrDir)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_CreateDir,
- OnCreateDir)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_QueryFile,
- OnQueryFile)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_GetDirContents,
- OnGetDirContents)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_FlashFile_CreateTemporaryFile, OnCreateTemporaryFile)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFlashFileMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_OpenFile,
+ OnOpenFile)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_RenameFile,
+ OnRenameFile)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_DeleteFileOrDir,
+ OnDeleteFileOrDir)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_CreateDir,
+ OnCreateDir)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_QueryFile,
+ OnQueryFile)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FlashFile_GetDirContents,
+ OnGetDirContents)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_FlashFile_CreateTemporaryFile, OnCreateTemporaryFile)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_gamepad_host.cc b/content/browser/renderer_host/pepper/pepper_gamepad_host.cc
index bbb72b8135..21d02d9bec 100644
--- a/content/browser/renderer_host/pepper/pepper_gamepad_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_gamepad_host.cc
@@ -43,10 +43,10 @@ PepperGamepadHost::~PepperGamepadHost() {
int32_t PepperGamepadHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperGamepadHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Gamepad_RequestMemory,
- OnRequestMemory)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperGamepadHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Gamepad_RequestMemory,
+ OnRequestMemory)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
index 6b05531ad3..3789ffa859 100644
--- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
@@ -107,10 +107,10 @@ PepperHostResolverMessageFilter::OverrideTaskRunnerForMessage(
int32_t PepperHostResolverMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperHostResolverMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_HostResolver_Resolve,
- OnMsgResolve)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperHostResolverMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_HostResolver_Resolve,
+ OnMsgResolve)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_message_filter.cc b/content/browser/renderer_host/pepper/pepper_message_filter.cc
index 943d0f9302..0eaa5ec9bc 100644
--- a/content/browser/renderer_host/pepper/pepper_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_message_filter.cc
@@ -16,16 +16,13 @@ PepperMessageFilter::PepperMessageFilter()
PepperMessageFilter::~PepperMessageFilter() {}
-bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg,
- bool* message_was_ok) {
+bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(PepperMessageFilter, msg, *message_was_ok)
- // X509 certificate messages.
- IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBX509Certificate_ParseDER,
- OnX509CertificateParseDER);
-
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_BEGIN_MESSAGE_MAP(PepperMessageFilter, msg)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBX509Certificate_ParseDER,
+ OnX509CertificateParseDER)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/pepper/pepper_message_filter.h b/content/browser/renderer_host/pepper/pepper_message_filter.h
index 3f5010ed40..68dac47fc8 100644
--- a/content/browser/renderer_host/pepper/pepper_message_filter.h
+++ b/content/browser/renderer_host/pepper/pepper_message_filter.h
@@ -24,8 +24,7 @@ class PepperMessageFilter : public BrowserMessageFilter {
PepperMessageFilter();
// BrowserMessageFilter methods.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~PepperMessageFilter();
diff --git a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
index b47c931d56..4b3d817b66 100644
--- a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
@@ -104,10 +104,10 @@ void PepperNetworkProxyHost::DidGetUIThreadData(
int32_t PepperNetworkProxyHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperNetworkProxyHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_NetworkProxy_GetProxyForURL,
- OnMsgGetProxyForURL)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperNetworkProxyHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_NetworkProxy_GetProxyForURL,
+ OnMsgGetProxyForURL)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_printing_host.cc b/content/browser/renderer_host/pepper/pepper_printing_host.cc
index 7505b44b5e..047f1203d7 100644
--- a/content/browser/renderer_host/pepper/pepper_printing_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_printing_host.cc
@@ -27,10 +27,11 @@ PepperPrintingHost::~PepperPrintingHost() {}
int32_t PepperPrintingHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperPrintingHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_Printing_GetDefaultPrintSettings, OnGetDefaultPrintSettings)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperPrintingHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_Printing_GetDefaultPrintSettings,
+ OnGetDefaultPrintSettings)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc
index abe7c9e282..8c233bbc6a 100644
--- a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc
+++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc
@@ -132,21 +132,20 @@ BrowserPpapiHostImpl* PepperRendererConnection::GetHostForChildProcess(
return host;
}
-bool PepperRendererConnection::OnMessageReceived(const IPC::Message& msg,
- bool* message_was_ok) {
+bool PepperRendererConnection::OnMessageReceived(const IPC::Message& msg) {
if (in_process_host_->GetPpapiHost()->OnMessageReceived(msg))
return true;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(PepperRendererConnection, msg, *message_was_ok)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHost,
- OnMsgCreateResourceHostsFromHost)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DidCreateInProcessInstance,
- OnMsgDidCreateInProcessInstance)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DidDeleteInProcessInstance,
- OnMsgDidDeleteInProcessInstance)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_BEGIN_MESSAGE_MAP(PepperRendererConnection, msg)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHost,
+ OnMsgCreateResourceHostsFromHost)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_DidCreateInProcessInstance,
+ OnMsgDidCreateInProcessInstance)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_DidDeleteInProcessInstance,
+ OnMsgDidDeleteInProcessInstance)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.h b/content/browser/renderer_host/pepper/pepper_renderer_connection.h
index 157827a9cf..5683ab9ed0 100644
--- a/content/browser/renderer_host/pepper/pepper_renderer_connection.h
+++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.h
@@ -36,8 +36,7 @@ class PepperRendererConnection : public BrowserMessageFilter {
explicit PepperRendererConnection(int render_process_id);
// BrowserMessageFilter overrides.
- virtual bool OnMessageReceived(const IPC::Message& msg,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
private:
virtual ~PepperRendererConnection();
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
index 4f6c2bb9a1..87ba64f54c 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
@@ -84,14 +84,14 @@ PepperTCPServerSocketMessageFilter::OverrideTaskRunnerForMessage(
int32_t PepperTCPServerSocketMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperTCPServerSocketMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPServerSocket_Listen,
- OnMsgListen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPServerSocket_Accept,
- OnMsgAccept)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_TCPServerSocket_StopListening, OnMsgStopListening)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperTCPServerSocketMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPServerSocket_Listen,
+ OnMsgListen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPServerSocket_Accept,
+ OnMsgAccept)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_TCPServerSocket_StopListening, OnMsgStopListening)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
index 14e00db71d..38248f4234 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -140,23 +140,26 @@ PepperTCPSocketMessageFilter::OverrideTaskRunnerForMessage(
int32_t PepperTCPSocketMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperTCPSocketMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Bind, OnMsgBind)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Connect,
- OnMsgConnect)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_TCPSocket_ConnectWithNetAddress, OnMsgConnectWithNetAddress)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_SSLHandshake,
- OnMsgSSLHandshake)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Read, OnMsgRead)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Write, OnMsgWrite)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Listen, OnMsgListen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPSocket_Accept,
- OnMsgAccept)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPSocket_Close, OnMsgClose)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_SetOption,
- OnMsgSetOption)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperTCPSocketMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Bind, OnMsgBind)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Connect,
+ OnMsgConnect)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_TCPSocket_ConnectWithNetAddress,
+ OnMsgConnectWithNetAddress)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_SSLHandshake,
+ OnMsgSSLHandshake)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Read, OnMsgRead)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Write, OnMsgWrite)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_Listen,
+ OnMsgListen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPSocket_Accept,
+ OnMsgAccept)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TCPSocket_Close,
+ OnMsgClose)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TCPSocket_SetOption,
+ OnMsgSetOption)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
index 60494d1290..7479046cfe 100644
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_host.cc
@@ -61,14 +61,14 @@ scoped_refptr<base::TaskRunner> FontMessageFilter::OverrideTaskRunnerForMessage(
int32_t FontMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(FontMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies,
- OnHostMsgGetFontFamilies)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_TrueTypeFontSingleton_GetFontsInFamily,
- OnHostMsgGetFontsInFamily)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(FontMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_TrueTypeFontSingleton_GetFontFamilies,
+ OnHostMsgGetFontFamilies)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_TrueTypeFontSingleton_GetFontsInFamily,
+ OnHostMsgGetFontsInFamily)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
index fcb6081214..a4ed3dca46 100644
--- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
@@ -87,15 +87,17 @@ PepperUDPSocketMessageFilter::OverrideTaskRunnerForMessage(
int32_t PepperUDPSocketMessageFilter::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperUDPSocketMessageFilter, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_SetOption,
- OnMsgSetOption)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_Bind, OnMsgBind)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_RecvFrom,
- OnMsgRecvFrom)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_SendTo, OnMsgSendTo)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_UDPSocket_Close, OnMsgClose)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperUDPSocketMessageFilter, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_SetOption,
+ OnMsgSetOption)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_Bind, OnMsgBind)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_RecvFrom,
+ OnMsgRecvFrom)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_UDPSocket_SendTo,
+ OnMsgSendTo)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_UDPSocket_Close,
+ OnMsgClose)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/browser/renderer_host/pepper/quota_reservation.h b/content/browser/renderer_host/pepper/quota_reservation.h
index f003f940fb..33490918f9 100644
--- a/content/browser/renderer_host/pepper/quota_reservation.h
+++ b/content/browser/renderer_host/pepper/quota_reservation.h
@@ -9,7 +9,6 @@
#include "base/basictypes.h"
#include "base/callback.h"
-#include "base/platform_file.h"
#include "content/common/content_export.h"
#include "ppapi/c/pp_stdint.h" // For int64_t on Windows.
#include "ppapi/shared_impl/file_growth.h"
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
index e686ce842e..4364f17588 100644
--- a/content/browser/renderer_host/render_message_filter.cc
+++ b/content/browser/renderer_host/render_message_filter.cc
@@ -325,7 +325,6 @@ class RenderMessageFilter::OpenChannelToNpapiPluginCallback
RenderMessageFilter::RenderMessageFilter(
int render_process_id,
- bool is_guest,
PluginServiceImpl* plugin_service,
BrowserContext* browser_context,
net::URLRequestContextGetter* request_context,
@@ -344,7 +343,6 @@ RenderMessageFilter::RenderMessageFilter(
incognito_(browser_context->IsOffTheRecord()),
dom_storage_context_(dom_storage_context),
render_process_id_(render_process_id),
- is_guest_(is_guest),
cpu_usage_(0),
audio_manager_(audio_manager),
media_internals_(media_internals) {
@@ -395,10 +393,9 @@ void RenderMessageFilter::OnChannelConnected(int32 peer_id) {
cpu_usage_sample_time_ = base::TimeTicks::Now();
}
-bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderMessageFilter, message)
#if defined(OS_WIN)
IPC_MESSAGE_HANDLER(ViewHostMsg_PreCacheFontCharacters,
OnPreCacheFontCharacters)
@@ -433,17 +430,17 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToPpapiBroker,
OnOpenChannelToPpapiBroker)
#endif
- IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_UpdateRect,
+ IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame,
render_widget_helper_->DidReceiveBackingStoreMsg(message))
- IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateIsDelayed, OnUpdateIsDelayed)
IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_CheckPermission,
OnCheckNotificationPermission)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedMemory,
OnAllocateSharedMemory)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedBitmap,
OnAllocateSharedBitmap)
- IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer,
- OnAllocateGpuMemoryBuffer)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(
+ ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer,
+ OnAllocateGpuMemoryBuffer)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_AllocatedSharedBitmap,
OnAllocatedSharedBitmap)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedSharedBitmap,
@@ -469,7 +466,7 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(ViewHostMsg_RunWebAudioMediaCodec, OnWebAudioMediaCodec)
#endif
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -528,7 +525,6 @@ void RenderMessageFilter::OnCreateWindow(
params.opener_suppressed,
resource_context_,
render_process_id_,
- is_guest_,
params.opener_id,
&no_javascript_access);
@@ -667,6 +663,7 @@ void RenderMessageFilter::OnDeleteCookie(const GURL& url,
}
void RenderMessageFilter::OnCookiesEnabled(
+ int render_frame_id,
const GURL& url,
const GURL& first_party_for_cookies,
bool* cookies_enabled) {
@@ -675,7 +672,7 @@ void RenderMessageFilter::OnCookiesEnabled(
// host.
*cookies_enabled = GetContentClient()->browser()->AllowGetCookie(
url, first_party_for_cookies, net::CookieList(), resource_context_,
- render_process_id_, MSG_ROUTING_CONTROL);
+ render_process_id_, render_frame_id);
}
#if defined(OS_MACOSX)
@@ -882,7 +879,7 @@ void RenderMessageFilter::OnGetMonitorColorProfile(std::vector<char>* profile) {
}
#endif
-void RenderMessageFilter::OnDownloadUrl(const IPC::Message& message,
+void RenderMessageFilter::OnDownloadUrl(int render_view_id,
const GURL& url,
const Referrer& referrer,
const base::string16& suggested_name,
@@ -908,7 +905,7 @@ void RenderMessageFilter::OnDownloadUrl(const IPC::Message& message,
true, // is_content_initiated
resource_context_,
render_process_id_,
- message.routing_id(),
+ render_view_id,
false,
save_info.Pass(),
content::DownloadItem::kInvalidId,
@@ -1138,19 +1135,6 @@ void RenderMessageFilter::OnCompletedOpenChannelToNpapiPlugin(
plugin_host_clients_.erase(client);
}
-void RenderMessageFilter::OnUpdateIsDelayed(const IPC::Message& msg) {
- // When not in accelerated compositing mode, in certain cases (e.g. waiting
- // for a resize or if no backing store) the RenderWidgetHost is blocking the
- // UI thread for some time, waiting for an UpdateRect from the renderer. If we
- // are going to switch to accelerated compositing, the GPU process may need
- // round-trips to the UI thread before finishing the frame, causing deadlocks
- // if we delay the UpdateRect until we receive the OnSwapBuffersComplete. So
- // the renderer sent us this message, so that we can unblock the UI thread.
- // We will simply re-use the UpdateRect unblock mechanism, just with a
- // different message.
- render_widget_helper_->DidReceiveBackingStoreMsg(msg);
-}
-
void RenderMessageFilter::OnAre3DAPIsBlocked(int render_view_id,
const GURL& top_origin_url,
ThreeDAPIType requester,
@@ -1245,21 +1229,20 @@ void RenderMessageFilter::OnWebAudioMediaCodec(
}
#endif
-void RenderMessageFilter::OnAllocateGpuMemoryBuffer(
- uint32 width,
- uint32 height,
- uint32 internalformat,
- uint32 usage,
- gfx::GpuMemoryBufferHandle* handle) {
+void RenderMessageFilter::OnAllocateGpuMemoryBuffer(uint32 width,
+ uint32 height,
+ uint32 internalformat,
+ uint32 usage,
+ IPC::Message* reply) {
if (!GpuMemoryBufferImpl::IsFormatValid(internalformat) ||
!GpuMemoryBufferImpl::IsUsageValid(usage)) {
- handle->type = gfx::EMPTY_BUFFER;
+ GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle());
return;
}
base::CheckedNumeric<int> size = width;
size *= height;
if (!size.IsValid()) {
- handle->type = gfx::EMPTY_BUFFER;
+ GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle());
return;
}
@@ -1299,13 +1282,15 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer(
base::ScopedCFTypeRef<CFTypeRef> io_surface(
io_surface_support->IOSurfaceCreate(properties));
if (io_surface) {
- handle->type = gfx::IO_SURFACE_BUFFER;
- handle->io_surface_id = io_surface_support->IOSurfaceGetID(io_surface);
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::IO_SURFACE_BUFFER;
+ handle.io_surface_id = io_surface_support->IOSurfaceGetID(io_surface);
// TODO(reveman): This makes the assumption that the renderer will
// grab a reference to the surface before sending another message.
// crbug.com/325045
last_io_surface_ = io_surface;
+ GpuMemoryBufferAllocated(reply, handle);
return;
}
}
@@ -1325,16 +1310,30 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer(
int surface_texture_id =
CompositorImpl::CreateSurfaceTexture(render_process_id_);
if (surface_texture_id != -1) {
- handle->type = gfx::SURFACE_TEXTURE_BUFFER;
- handle->surface_texture_id =
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::SURFACE_TEXTURE_BUFFER;
+ handle.surface_texture_id =
gfx::SurfaceTextureId(surface_texture_id, render_process_id_);
+ GpuMemoryBufferAllocated(reply, handle);
return;
}
}
#endif
GpuMemoryBufferImpl::AllocateForChildProcess(
- gfx::Size(width, height), internalformat, usage, PeerHandle(), handle);
+ gfx::Size(width, height),
+ internalformat,
+ usage,
+ PeerHandle(),
+ base::Bind(&RenderMessageFilter::GpuMemoryBufferAllocated, this, reply));
+}
+
+void RenderMessageFilter::GpuMemoryBufferAllocated(
+ IPC::Message* reply,
+ const gfx::GpuMemoryBufferHandle& handle) {
+ ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply,
+ handle);
+ Send(reply);
}
} // namespace content
diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h
index 2fa211c1e0..3682526de7 100644
--- a/content/browser/renderer_host/render_message_filter.h
+++ b/content/browser/renderer_host/render_message_filter.h
@@ -87,7 +87,6 @@ class RenderMessageFilter : public BrowserMessageFilter {
public:
// Create the filter.
RenderMessageFilter(int render_process_id,
- bool is_guest,
PluginServiceImpl * plugin_service,
BrowserContext* browser_context,
net::URLRequestContextGetter* request_context,
@@ -101,8 +100,7 @@ class RenderMessageFilter : public BrowserMessageFilter {
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
// BrowserMessageFilter methods:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
virtual base::TaskRunner* OverrideTaskRunnerForMessage(
const IPC::Message& message) OVERRIDE;
@@ -150,7 +148,8 @@ class RenderMessageFilter : public BrowserMessageFilter {
IPC::Message* reply_msg);
void OnDeleteCookie(const GURL& url,
const std::string& cookieName);
- void OnCookiesEnabled(const GURL& url,
+ void OnCookiesEnabled(int render_frame_id,
+ const GURL& url,
const GURL& first_party_for_cookies,
bool* cookies_enabled);
@@ -193,7 +192,7 @@ class RenderMessageFilter : public BrowserMessageFilter {
void OnOpenChannelToPpapiBroker(int routing_id,
const base::FilePath& path);
void OnGenerateRoutingID(int* route_id);
- void OnDownloadUrl(const IPC::Message& message,
+ void OnDownloadUrl(int render_view_id,
const GURL& url,
const Referrer& referrer,
const base::string16& suggested_name,
@@ -260,7 +259,6 @@ class RenderMessageFilter : public BrowserMessageFilter {
void OnCompletedOpenChannelToNpapiPlugin(
OpenChannelToNpapiPluginCallback* client);
- void OnUpdateIsDelayed(const IPC::Message& msg);
void OnAre3DAPIsBlocked(int render_view_id,
const GURL& top_origin_url,
ThreeDAPIType requester,
@@ -279,7 +277,9 @@ class RenderMessageFilter : public BrowserMessageFilter {
uint32 height,
uint32 internalformat,
uint32 usage,
- gfx::GpuMemoryBufferHandle* handle);
+ IPC::Message* reply);
+ void GpuMemoryBufferAllocated(IPC::Message* reply,
+ const gfx::GpuMemoryBufferHandle& handle);
// Cached resource request dispatcher host and plugin service, guaranteed to
// be non-null if Init succeeds. We do not own the objects, they are managed
@@ -307,8 +307,6 @@ class RenderMessageFilter : public BrowserMessageFilter {
int render_process_id_;
- bool is_guest_;
-
std::set<OpenChannelToNpapiPluginCallback*> plugin_host_clients_;
// Records the last time we sampled CPU usage of the renderer process.
diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc
index b1c89a577b..b77f20fa44 100644
--- a/content/browser/renderer_host/render_process_host_browsertest.cc
+++ b/content/browser/renderer_host/render_process_host_browsertest.cc
@@ -92,7 +92,8 @@ IN_PROC_BROWSER_TEST_F(RenderProcessHostTest,
RenderProcessHost* rph =
shell()->web_contents()->GetRenderViewHost()->GetProcess();
// Make it believe it's a guest.
- reinterpret_cast<RenderProcessHostImpl*>(rph)->SetIsGuestForTesting(true);
+ reinterpret_cast<RenderProcessHostImpl*>(rph)->
+ set_is_isolated_guest_for_testing(true);
EXPECT_EQ(1, RenderProcessHostCount());
// Navigate to a different page.
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index c01dc5c8a0..10d47a3929 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -38,6 +38,8 @@
#include "cc/base/switches.h"
#include "content/browser/appcache/appcache_dispatcher_host.h"
#include "content/browser/appcache/chrome_appcache_service.h"
+#include "content/browser/battery_status/battery_status_message_filter.h"
+#include "content/browser/browser_child_process_host_impl.h"
#include "content/browser/browser_main.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/browser_plugin/browser_plugin_message_filter.h"
@@ -137,7 +139,6 @@
#include "ipc/ipc_switches.h"
#include "media/base/media_switches.h"
#include "mojo/common/common_type_converters.h"
-#include "mojo/public/cpp/bindings/allocation_scope.h"
#include "net/url_request/url_request_context_getter.h"
#include "ppapi/shared_impl/ppapi_switches.h"
#include "third_party/skia/include/core/SkBitmap.h"
@@ -390,7 +391,7 @@ void RenderProcessHost::SetMaxRendererProcessCount(size_t count) {
RenderProcessHostImpl::RenderProcessHostImpl(
BrowserContext* browser_context,
StoragePartitionImpl* storage_partition_impl,
- bool is_guest)
+ bool is_isolated_guest)
: fast_shutdown_started_(false),
deleting_soon_(false),
#ifndef NDEBUG
@@ -406,12 +407,11 @@ RenderProcessHostImpl::RenderProcessHostImpl(
storage_partition_impl_(storage_partition_impl),
sudden_termination_allowed_(true),
ignore_input_events_(false),
- is_guest_(is_guest),
+ is_isolated_guest_(is_isolated_guest),
gpu_observer_registered_(false),
delayed_cleanup_needed_(false),
within_process_died_observer_(false),
power_monitor_broadcaster_(this),
- geolocation_dispatcher_host_(NULL),
screen_orientation_dispatcher_host_(NULL),
worker_ref_count_(0),
weak_factory_(this) {
@@ -630,13 +630,12 @@ void RenderProcessHostImpl::CreateMessageFilters() {
// Add BrowserPluginMessageFilter to ensure it gets the first stab at messages
// from guests.
scoped_refptr<BrowserPluginMessageFilter> bp_message_filter(
- new BrowserPluginMessageFilter(GetID(), IsGuest()));
+ new BrowserPluginMessageFilter(GetID()));
AddFilter(bp_message_filter.get());
scoped_refptr<RenderMessageFilter> render_message_filter(
new RenderMessageFilter(
GetID(),
- IsGuest(),
#if defined(ENABLE_PLUGINS)
PluginServiceImpl::GetInstance(),
#else
@@ -705,9 +704,6 @@ void RenderProcessHostImpl::CreateMessageFilters() {
storage_partition_impl_->GetIndexedDBContext(),
ChromeBlobStorageContext::GetFor(browser_context)));
- geolocation_dispatcher_host_ = new GeolocationDispatcherHost(
- GetID(), browser_context->GetGeolocationPermissionContext());
- AddFilter(geolocation_dispatcher_host_);
gpu_message_filter_ = new GpuMessageFilter(GetID(), widget_helper_.get());
AddFilter(gpu_message_filter_);
#if defined(ENABLE_WEBRTC)
@@ -727,7 +723,7 @@ void RenderProcessHostImpl::CreateMessageFilters() {
AddFilter(new PepperRendererConnection(GetID()));
#endif
AddFilter(new SpeechRecognitionDispatcherHost(
- IsGuest(), GetID(), storage_partition_impl_->GetURLRequestContext()));
+ GetID(), storage_partition_impl_->GetURLRequestContext()));
AddFilter(new FileAPIMessageFilter(
GetID(),
storage_partition_impl_->GetURLRequestContext(),
@@ -837,6 +833,7 @@ void RenderProcessHostImpl::CreateMessageFilters() {
screen_orientation_dispatcher_host_ = new ScreenOrientationDispatcherHost();
AddFilter(screen_orientation_dispatcher_host_);
AddFilter(new PushMessagingMessageFilter());
+ AddFilter(new BatteryStatusMessageFilter());
}
int RenderProcessHostImpl::GetNextRoutingID() {
@@ -944,8 +941,8 @@ int RenderProcessHostImpl::VisibleWidgetCount() const {
return visible_widgets_;
}
-bool RenderProcessHostImpl::IsGuest() const {
- return is_guest_;
+bool RenderProcessHostImpl::IsIsolatedGuest() const {
+ return is_isolated_guest_;
}
StoragePartition* RenderProcessHostImpl::GetStoragePartition() const {
@@ -1028,6 +1025,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kDefaultTileHeight,
switches::kDisable3DAPIs,
switches::kDisableAcceleratedFixedRootBackground,
+ switches::kDisableAcceleratedOverflowScroll,
switches::kDisableAcceleratedVideoDecode,
switches::kDisableApplicationCache,
switches::kDisableBreakpad,
@@ -1039,7 +1037,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kDisableDistanceFieldText,
switches::kDisableFastTextAutosizing,
switches::kDisableFileSystem,
- switches::kDisableFiltersOverIPC,
switches::kDisableGpuCompositing,
switches::kDisableGpuVsync,
switches::kDisableLowResTiling,
@@ -1064,8 +1061,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kDomAutomationController,
switches::kEnableAcceleratedFixedRootBackground,
switches::kEnableAcceleratedOverflowScroll,
- switches::kEnableAccessibilityLogging,
- switches::kEnableADTSStreamParser,
switches::kEnableBeginFrameScheduling,
switches::kEnableBleedingEdgeRenderingFastPaths,
switches::kEnableCompositingForFixedPosition,
@@ -1110,11 +1105,13 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kEnableVtune,
switches::kEnableWebAnimationsSVG,
switches::kEnableWebGLDraftExtensions,
+ switches::kEnableWebGLImageChromium,
switches::kEnableWebMIDI,
switches::kEnableZeroCopy,
switches::kForceCompositingMode,
switches::kForceDeviceScaleFactor,
switches::kFullMemoryCrashReport,
+ switches::kIgnoreResolutionLimitsForAcceleratedVideoDecode,
switches::kJavaScriptFlags,
switches::kLoggingLevel,
switches::kMaxUntiledLayerWidth,
@@ -1144,7 +1141,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kV,
switches::kVideoThreads,
switches::kVModule,
- switches::kWebGLCommandBufferSizeKb,
// Please keep these in alphabetical order. Compositor switches here should
// also be added to chrome/browser/chromeos/login/chrome_restart_request.cc.
cc::switches::kCompositeToMailbox,
@@ -1176,12 +1172,11 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kEnablePepperTesting,
#endif
#if defined(ENABLE_WEBRTC)
- switches::kEnableAudioTrackProcessing,
+ switches::kDisableAudioTrackProcessing,
switches::kDisableDeviceEnumeration,
switches::kDisableWebRtcHWDecoding,
switches::kDisableWebRtcHWEncoding,
switches::kEnableWebRtcHWVp8Encoding,
- switches::kEnableWebRtcTcpServerSocket,
#endif
#if defined(OS_ANDROID)
switches::kDisableGestureRequirementForMediaPlayback,
@@ -1200,7 +1195,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
#if defined(OS_WIN)
switches::kEnableDirectWrite,
switches::kEnableHighResolutionTime,
- switches::kHighDPISupport,
#endif
};
renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames,
@@ -1219,9 +1213,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
if (GetBrowserContext()->IsOffTheRecord() &&
!browser_cmd.HasSwitch(switches::kDisableDatabases)) {
renderer_cmd->AppendSwitch(switches::kDisableDatabases);
-#if defined(OS_ANDROID)
- renderer_cmd->AppendSwitch(switches::kDisableMediaHistoryLogging);
-#endif
}
// Enforce the extra command line flags for impl-side painting.
@@ -1312,8 +1303,7 @@ bool RenderProcessHostImpl::OnMessageReceived(const IPC::Message& msg) {
mark_child_process_activity_time();
if (msg.routing_id() == MSG_ROUTING_CONTROL) {
// Dispatch control messages.
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderProcessHostImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest,
OnShutdownRequest)
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DumpHandlesDone,
@@ -1326,15 +1316,8 @@ bool RenderProcessHostImpl::OnMessageReceived(const IPC::Message& msg) {
// Adding single handlers for your service here is fine, but once your
// service needs more than one handler, please extract them into a new
// message filter and add that filter to CreateMessageFilters().
- IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- // The message had a handler, but its de-serialization failed.
- // We consider this a capital crime. Kill the renderer if we have one.
- LOG(ERROR) << "bad message " << msg.type() << " terminating renderer.";
- RecordAction(base::UserMetricsAction("BadMessageTerminate_BRPH"));
- ReceivedBadMessage();
- }
+ IPC_END_MESSAGE_MAP()
+
return true;
}
@@ -1351,11 +1334,10 @@ bool RenderProcessHostImpl::OnMessageReceived(const IPC::Message& msg) {
// If this is a SwapBuffers, we need to ack it if we're not going to handle
// it so that the GPU process doesn't get stuck in unscheduled state.
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderProcessHostImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg)
IPC_MESSAGE_HANDLER(ViewHostMsg_CompositorSurfaceBuffersSwapped,
OnCompositorSurfaceBuffersSwappedNoHost)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return true;
}
return listener->OnMessageReceived(msg);
@@ -1376,6 +1358,15 @@ void RenderProcessHostImpl::OnChannelError() {
ProcessDied(true /* already_dead */);
}
+void RenderProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) {
+ // Message de-serialization failed. We consider this a capital crime. Kill the
+ // renderer if we have one.
+ LOG(ERROR) << "bad message " << message.type() << " terminating renderer.";
+ BrowserChildProcessHostImpl::HistogramBadMessageTerminated(
+ PROCESS_TYPE_RENDERER);
+ ReceivedBadMessage();
+}
+
BrowserContext* RenderProcessHostImpl::GetBrowserContext() const {
return browser_context_;
}
@@ -1452,7 +1443,6 @@ void RenderProcessHostImpl::Cleanup() {
channel_.reset();
gpu_message_filter_ = NULL;
message_port_message_filter_ = NULL;
- geolocation_dispatcher_host_ = NULL;
screen_orientation_dispatcher_host_ = NULL;
// Remove ourself from the list of renderer processes so that we can't be
@@ -1591,7 +1581,7 @@ void RenderProcessHostImpl::FilterURL(RenderProcessHost* rph,
// Do not allow browser plugin guests to navigate to non-web URLs, since they
// cannot swap processes or grant bindings.
- bool non_web_url_in_guest = rph->IsGuest() &&
+ bool non_web_url_in_guest = rph->IsIsolatedGuest() &&
!(url->is_valid() && policy->IsWebSafeScheme(url->scheme()));
if (non_web_url_in_guest || !policy->CanRequestURL(rph->GetID(), *url)) {
@@ -1619,7 +1609,7 @@ bool RenderProcessHostImpl::IsSuitableHost(
// and non-guest storage gets mixed. In the future, we might consider enabling
// the sharing of guests, in this case this check should be removed and
// InSameStoragePartition should handle the possible sharing.
- if (host->IsGuest())
+ if (host->IsIsolatedGuest())
return false;
// Check whether the given host and the intended site_url will be using the
@@ -1716,11 +1706,12 @@ RenderProcessHost* RenderProcessHost::GetExistingProcessHost(
iterator iter(AllHostsIterator());
while (!iter.IsAtEnd()) {
- if (RenderProcessHostImpl::IsSuitableHost(
+ if (GetContentClient()->browser()->MayReuseHost(iter.GetCurrentValue()) &&
+ RenderProcessHostImpl::IsSuitableHost(
iter.GetCurrentValue(),
- browser_context, site_url))
+ browser_context, site_url)) {
suitable_renderers.push_back(iter.GetCurrentValue());
-
+ }
iter.Advance();
}
@@ -1773,7 +1764,8 @@ RenderProcessHost* RenderProcessHostImpl::GetProcessHostForSite(
std::string site = SiteInstance::GetSiteForURL(browser_context, url)
.possibly_invalid_spec();
RenderProcessHost* host = map->FindProcess(site);
- if (host && !IsSuitableHost(host, browser_context, url)) {
+ if (host && (!GetContentClient()->browser()->MayReuseHost(host) ||
+ !IsSuitableHost(host, browser_context, url))) {
// The registered process does not have an appropriate set of bindings for
// the url. Remove it from the map so we can register a better one.
RecordAction(
@@ -1840,7 +1832,6 @@ void RenderProcessHostImpl::ProcessDied(bool already_dead) {
channel_.reset();
gpu_message_filter_ = NULL;
message_port_message_filter_ = NULL;
- geolocation_dispatcher_host_ = NULL;
screen_orientation_dispatcher_host_ = NULL;
IDMap<IPC::Listener>::iterator iter(&listeners_);
@@ -2080,9 +2071,8 @@ void RenderProcessHostImpl::ConnectTo(
mojo_activation_required_ = true;
MaybeActivateMojo();
- mojo::AllocationScope scope;
- mojo_application_host_->shell_client()->AcceptConnection(service_name,
- handle.Pass());
+ mojo_application_host_->service_provider()->ConnectToService(
+ mojo::String::From(service_name), handle.Pass());
}
} // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 358109f52b..99b8f94d4d 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -14,7 +14,6 @@
#include "base/process/process.h"
#include "base/timer/timer.h"
#include "content/browser/child_process_launcher.h"
-#include "content/browser/geolocation/geolocation_dispatcher_host.h"
#include "content/browser/power_monitor_message_broadcaster.h"
#include "content/common/content_export.h"
#include "content/public/browser/gpu_data_manager_observer.h"
@@ -37,7 +36,6 @@ class Size;
namespace content {
class AudioRendererHost;
class BrowserDemuxerAndroid;
-class GeolocationDispatcherHost;
class GpuMessageFilter;
class MessagePortMessageFilter;
class MojoApplicationHost;
@@ -81,7 +79,7 @@ class CONTENT_EXPORT RenderProcessHostImpl
public:
RenderProcessHostImpl(BrowserContext* browser_context,
StoragePartitionImpl* storage_partition_impl,
- bool is_guest);
+ bool is_isolated_guest);
virtual ~RenderProcessHostImpl();
// RenderProcessHost implementation (public portion).
@@ -99,7 +97,7 @@ class CONTENT_EXPORT RenderProcessHostImpl
virtual void WidgetRestored() OVERRIDE;
virtual void WidgetHidden() OVERRIDE;
virtual int VisibleWidgetCount() const OVERRIDE;
- virtual bool IsGuest() const OVERRIDE;
+ virtual bool IsIsolatedGuest() const OVERRIDE;
virtual StoragePartition* GetStoragePartition() const OVERRIDE;
virtual bool FastShutdownIfPossible() OVERRIDE;
virtual void DumpHandles() OVERRIDE;
@@ -140,6 +138,7 @@ class CONTENT_EXPORT RenderProcessHostImpl
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
virtual void OnChannelError() OVERRIDE;
+ virtual void OnBadMessageReceived(const IPC::Message& message) OVERRIDE;
// ChildProcessLauncher::Client implementation.
virtual void OnProcessLaunched() OVERRIDE;
@@ -163,11 +162,6 @@ class CONTENT_EXPORT RenderProcessHostImpl
scoped_ptr<RenderWidgetHostViewFrameSubscriber> subscriber);
void EndFrameSubscription(int route_id);
- scoped_refptr<GeolocationDispatcherHost>
- geolocation_dispatcher_host() const {
- return make_scoped_refptr(geolocation_dispatcher_host_);
- }
-
#if defined(ENABLE_WEBRTC)
// Fires the webrtc log message callback with |message|, if callback is set.
void WebRtcLogMessage(const std::string& message);
@@ -228,8 +222,8 @@ class CONTENT_EXPORT RenderProcessHostImpl
return message_port_message_filter_;
}
- void SetIsGuestForTesting(bool is_guest) {
- is_guest_ = is_guest;
+ void set_is_isolated_guest_for_testing(bool is_isolated_guest) {
+ is_isolated_guest_ = is_isolated_guest;
}
// Called when the existence of the other renderer process which is connected
@@ -390,7 +384,7 @@ class CONTENT_EXPORT RenderProcessHostImpl
// Indicates whether this is a RenderProcessHost of a Browser Plugin guest
// renderer.
- bool is_guest_;
+ bool is_isolated_guest_;
// Forwards messages between WebRTCInternals in the browser process
// and PeerConnectionTracker in the renderer process.
@@ -417,9 +411,6 @@ class CONTENT_EXPORT RenderProcessHostImpl
scoped_refptr<BrowserDemuxerAndroid> browser_demuxer_android_;
#endif
- // Message filter for geolocation messages.
- GeolocationDispatcherHost* geolocation_dispatcher_host_;
-
#if defined(ENABLE_WEBRTC)
base::Callback<void(const std::string&)> webrtc_log_message_callback_;
#endif
diff --git a/content/browser/renderer_host/render_process_host_unittest.cc b/content/browser/renderer_host/render_process_host_unittest.cc
index 6a830f9d61..474a72bd16 100644
--- a/content/browser/renderer_host/render_process_host_unittest.cc
+++ b/content/browser/renderer_host/render_process_host_unittest.cc
@@ -15,7 +15,7 @@ TEST_F(RenderProcessHostUnitTest, GuestsAreNotSuitableHosts) {
GURL test_url("http://foo.com");
MockRenderProcessHost guest_host(browser_context());
- guest_host.SetIsGuest(true);
+ guest_host.set_is_isolated_guest(true);
EXPECT_FALSE(RenderProcessHostImpl::IsSuitableHost(
&guest_host, browser_context(), test_url));
diff --git a/content/browser/renderer_host/render_sandbox_host_linux.cc b/content/browser/renderer_host/render_sandbox_host_linux.cc
index 02b5fee310..10f3fea0b6 100644
--- a/content/browser/renderer_host/render_sandbox_host_linux.cc
+++ b/content/browser/renderer_host/render_sandbox_host_linux.cc
@@ -8,16 +8,12 @@
#include "base/memory/singleton.h"
#include "base/posix/eintr_wrapper.h"
-#include "content/browser/renderer_host/sandbox_ipc_linux.h"
namespace content {
// Runs on the main thread at startup.
RenderSandboxHostLinux::RenderSandboxHostLinux()
- : initialized_(false),
- renderer_socket_(0),
- childs_lifeline_fd_(0),
- pid_(0) {
+ : initialized_(false), renderer_socket_(0), childs_lifeline_fd_(0) {
}
// static
@@ -25,7 +21,7 @@ RenderSandboxHostLinux* RenderSandboxHostLinux::GetInstance() {
return Singleton<RenderSandboxHostLinux>::get();
}
-void RenderSandboxHostLinux::Init(const std::string& sandbox_path) {
+void RenderSandboxHostLinux::Init() {
DCHECK(!initialized_);
initialized_ = true;
@@ -53,29 +49,25 @@ void RenderSandboxHostLinux::Init(const std::string& sandbox_path) {
const int child_lifeline_fd = pipefds[0];
childs_lifeline_fd_ = pipefds[1];
- // We need to be monothreaded before we fork().
-#if !defined(THREAD_SANITIZER)
- DCHECK_EQ(1, base::GetNumberOfThreads(base::GetCurrentProcessHandle()));
-#endif // !defined(THREAD_SANITIZER)
- pid_ = fork();
- if (pid_ == 0) {
- if (IGNORE_EINTR(close(fds[0])) < 0)
- DPLOG(ERROR) << "close";
- if (IGNORE_EINTR(close(pipefds[1])) < 0)
- DPLOG(ERROR) << "close";
-
- SandboxIPCProcess handler(child_lifeline_fd, browser_socket, sandbox_path);
- handler.Run();
- _exit(0);
- }
+ ipc_handler_.reset(
+ new SandboxIPCHandler(child_lifeline_fd, browser_socket));
+ ipc_thread_.reset(
+ new base::DelegateSimpleThread(ipc_handler_.get(), "sandbox_ipc_thread"));
+ ipc_thread_->Start();
+}
+
+bool RenderSandboxHostLinux::ShutdownIPCChannel() {
+ return IGNORE_EINTR(close(childs_lifeline_fd_)) == 0;
}
RenderSandboxHostLinux::~RenderSandboxHostLinux() {
if (initialized_) {
+ if (!ShutdownIPCChannel())
+ LOG(ERROR) << "ShutdownIPCChannel failed";
if (IGNORE_EINTR(close(renderer_socket_)) < 0)
PLOG(ERROR) << "close";
- if (IGNORE_EINTR(close(childs_lifeline_fd_)) < 0)
- PLOG(ERROR) << "close";
+
+ ipc_thread_->Join();
}
}
diff --git a/content/browser/renderer_host/render_sandbox_host_linux.h b/content/browser/renderer_host/render_sandbox_host_linux.h
index 2c5df388bd..c7f4aeb01f 100644
--- a/content/browser/renderer_host/render_sandbox_host_linux.h
+++ b/content/browser/renderer_host/render_sandbox_host_linux.h
@@ -8,6 +8,9 @@
#include <string>
#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/simple_thread.h"
+#include "content/browser/renderer_host/sandbox_ipc_linux.h"
#include "content/common/content_export.h"
template <typename T> struct DefaultSingletonTraits;
@@ -27,11 +30,7 @@ class CONTENT_EXPORT RenderSandboxHostLinux {
DCHECK(initialized_);
return renderer_socket_;
}
- pid_t pid() const {
- DCHECK(initialized_);
- return pid_;
- }
- void Init(const std::string& sandbox_path);
+ void Init();
private:
friend struct DefaultSingletonTraits<RenderSandboxHostLinux>;
@@ -39,12 +38,16 @@ class CONTENT_EXPORT RenderSandboxHostLinux {
RenderSandboxHostLinux();
~RenderSandboxHostLinux();
+ bool ShutdownIPCChannel();
+
// Whether Init() has been called yet.
bool initialized_;
int renderer_socket_;
int childs_lifeline_fd_;
- pid_t pid_;
+
+ scoped_ptr<SandboxIPCHandler> ipc_handler_;
+ scoped_ptr<base::DelegateSimpleThread> ipc_thread_;
DISALLOW_COPY_AND_ASSIGN(RenderSandboxHostLinux);
};
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index bfa45e8f69..51fc3dc505 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -9,7 +9,6 @@
#include "base/basictypes.h"
#include "base/callback.h"
-#include "base/i18n/rtl.h"
#include "base/process/kill.h"
#include "base/strings/string16.h"
#include "content/common/content_export.h"
@@ -21,7 +20,6 @@
class GURL;
class SkBitmap;
-class WebKeyboardEvent;
struct ViewHostMsg_CreateWindow_Params;
struct FrameHostMsg_DidCommitProvisionalLoad_Params;
struct ViewMsg_PostMessage_Params;
@@ -113,16 +111,6 @@ class CONTENT_EXPORT RenderViewHostDelegate {
int32 page_id,
const PageState& state) {}
- // The page's title was changed and should be updated.
- virtual void UpdateTitle(RenderViewHost* render_view_host,
- int32 page_id,
- const base::string16& title,
- base::i18n::TextDirection title_direction) {}
-
- // The page's encoding was changed and should be updated.
- virtual void UpdateEncoding(RenderViewHost* render_view_host,
- const std::string& encoding) {}
-
// The destination URL has changed should be updated
virtual void UpdateTargetURL(int32 page_id, const GURL& url) {}
@@ -135,11 +123,6 @@ class CONTENT_EXPORT RenderViewHostDelegate {
// The pending page load was canceled.
virtual void DidCancelLoading() {}
- // The RenderView made progress loading a page's top frame.
- // |progress| is a value between 0 (nothing loaded) to 1.0 (top frame
- // entirely loaded).
- virtual void DidChangeLoadProgress(double progress) {}
-
// The RenderView's main frame document element is ready. This happens when
// the document has finished parsing.
virtual void DocumentAvailableInMainFrame(RenderViewHost* render_view_host) {}
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 49a17efa6e..8198f2d145 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -72,7 +72,6 @@
#include "content/public/common/context_menu_params.h"
#include "content/public/common/drop_data.h"
#include "content/public/common/result_codes.h"
-#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "net/base/filename_util.h"
#include "net/base/net_util.h"
@@ -87,12 +86,13 @@
#include "ui/gfx/native_widget_types.h"
#include "ui/native_theme/native_theme_switches.h"
#include "ui/shell_dialogs/selected_file_info.h"
+#include "url/url_constants.h"
#include "webkit/browser/fileapi/isolated_context.h"
#if defined(OS_MACOSX)
#include "content/browser/renderer_host/popup_menu_helper_mac.h"
#elif defined(OS_ANDROID)
-#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/media/android/media_web_contents_observer.h"
#elif defined(OS_WIN)
#include "base/win/win_util.h"
#endif
@@ -109,20 +109,6 @@ using blink::WebPluginAction;
namespace content {
namespace {
-// Translate a WebKit text direction into a base::i18n one.
-base::i18n::TextDirection WebTextDirectionToChromeTextDirection(
- blink::WebTextDirection dir) {
- switch (dir) {
- case blink::WebTextDirectionLeftToRight:
- return base::i18n::LEFT_TO_RIGHT;
- case blink::WebTextDirectionRightToLeft:
- return base::i18n::RIGHT_TO_LEFT;
- default:
- NOTREACHED();
- return base::i18n::UNKNOWN_DIRECTION;
- }
-}
-
#if defined(OS_WIN)
const int kVirtualKeyboardDisplayWaitTimeoutMs = 100;
@@ -238,7 +224,7 @@ RenderViewHostImpl::RenderViewHostImpl(
}
#if defined(OS_ANDROID)
- media_player_manager_.reset(BrowserMediaPlayerManager::Create(this));
+ media_web_contents_observer_.reset(new MediaWebContentsObserver(this));
#endif
unload_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind(
@@ -277,6 +263,7 @@ SiteInstance* RenderViewHostImpl::GetSiteInstance() const {
bool RenderViewHostImpl::CreateRenderView(
const base::string16& frame_name,
int opener_route_id,
+ int proxy_route_id,
int32 max_page_id,
bool window_was_created_with_opener) {
TRACE_EVENT0("renderer_host", "RenderViewHostImpl::CreateRenderView");
@@ -315,6 +302,7 @@ bool RenderViewHostImpl::CreateRenderView(
// Ensure the RenderView sets its opener correctly.
params.opener_route_id = opener_route_id;
params.swapped_out = !IsRVHStateActive(rvh_state_);
+ params.proxy_routing_id = proxy_route_id;
params.hidden = is_hidden();
params.never_visible = delegate_->IsNeverVisible();
params.window_was_created_with_opener = window_was_created_with_opener;
@@ -326,7 +314,7 @@ bool RenderViewHostImpl::CreateRenderView(
// If it's enabled, tell the renderer to set up the Javascript bindings for
// sending messages back to the browser.
- if (GetProcess()->IsGuest())
+ if (GetProcess()->IsIsolatedGuest())
DCHECK_EQ(0, enabled_bindings_);
Send(new ViewMsg_AllowBindings(GetRoutingID(), enabled_bindings_));
// Let our delegate know that we created a RenderView.
@@ -399,8 +387,6 @@ WebPreferences RenderViewHostImpl::GetWebkitPrefs(const GURL& url) {
prefs.gl_multisampling_enabled =
!command_line.HasSwitch(switches::kDisableGLMultisampling);
- prefs.privileged_webgl_extensions_enabled =
- command_line.HasSwitch(switches::kEnablePrivilegedWebGLExtensions);
prefs.site_specific_quirks_enabled =
!command_line.HasSwitch(switches::kDisableSiteSpecificQuirks);
prefs.allow_file_access_from_file_urls =
@@ -475,9 +461,7 @@ WebPreferences RenderViewHostImpl::GetWebkitPrefs(const GURL& url) {
}
prefs.is_online = !net::NetworkChangeNotifier::IsOffline();
-
- prefs.fixed_position_creates_stacking_context = !command_line.HasSwitch(
- switches::kDisableFixedPositionCreatesStackingContext);
+ prefs.connection_type = net::NetworkChangeNotifier::GetConnectionType();
prefs.gesture_tap_highlight_enabled = !command_line.HasSwitch(
switches::kDisableGestureTapHighlight);
@@ -675,7 +659,7 @@ void RenderViewHostImpl::SetHasPendingCrossSiteRequest(
void RenderViewHostImpl::SetWebUIHandle(mojo::ScopedMessagePipeHandle handle) {
// Never grant any bindings to browser plugin guests.
- if (GetProcess()->IsGuest()) {
+ if (GetProcess()->IsIsolatedGuest()) {
NOTREACHED() << "Never grant bindings to a guest process.";
return;
}
@@ -838,7 +822,7 @@ RenderFrameHost* RenderViewHostImpl::GetMainFrame() {
void RenderViewHostImpl::AllowBindings(int bindings_flags) {
// Never grant any bindings to browser plugin guests.
- if (GetProcess()->IsGuest()) {
+ if (GetProcess()->IsIsolatedGuest()) {
NOTREACHED() << "Never grant bindings to a guest process.";
return;
}
@@ -983,8 +967,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
return true;
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHostImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderViewHostImpl, msg)
IPC_MESSAGE_HANDLER(ViewHostMsg_ShowView, OnShowView)
IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget)
IPC_MESSAGE_HANDLER(ViewHostMsg_ShowFullscreenWidget,
@@ -993,15 +976,11 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnRenderViewReady)
IPC_MESSAGE_HANDLER(ViewHostMsg_RenderProcessGone, OnRenderProcessGone)
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateState, OnUpdateState)
- IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTitle, OnUpdateTitle)
- IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateEncoding, OnUpdateEncoding)
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnUpdateTargetURL)
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting,
OnUpdateInspectorSetting)
IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnClose)
IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeLoadProgress,
- OnDidChangeLoadProgress)
IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentAvailableInMainFrame,
OnDocumentAvailableInMainFrame)
IPC_MESSAGE_HANDLER(ViewHostMsg_ToggleFullscreen, OnToggleFullscreen)
@@ -1022,10 +1001,6 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus)
IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged)
IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK)
-#if defined(OS_ANDROID)
- IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionRootBoundsChanged,
- OnSelectionRootBoundsChanged)
-#endif
IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL)
#if defined(OS_MACOSX) || defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnShowPopup)
@@ -1039,14 +1014,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) {
// Have the super handle all other messages.
IPC_MESSAGE_UNHANDLED(
handled = RenderWidgetHostImpl::OnMessageReceived(msg))
- IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- // The message had a handler, but its de-serialization failed.
- // Kill the renderer.
- RecordAction(base::UserMetricsAction("BadMessageTerminate_RVH"));
- GetProcess()->ReceivedBadMessage();
- }
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -1183,24 +1151,6 @@ void RenderViewHostImpl::OnUpdateState(int32 page_id, const PageState& state) {
delegate_->UpdateState(this, page_id, state);
}
-void RenderViewHostImpl::OnUpdateTitle(
- int32 page_id,
- const base::string16& title,
- blink::WebTextDirection title_direction) {
- if (title.length() > kMaxTitleChars) {
- NOTREACHED() << "Renderer sent too many characters in title.";
- return;
- }
-
- delegate_->UpdateTitle(this, page_id, title,
- WebTextDirectionToChromeTextDirection(
- title_direction));
-}
-
-void RenderViewHostImpl::OnUpdateEncoding(const std::string& encoding_name) {
- delegate_->UpdateEncoding(this, encoding_name);
-}
-
void RenderViewHostImpl::OnUpdateTargetURL(int32 page_id, const GURL& url) {
if (IsRVHStateActive(rvh_state_))
delegate_->UpdateTargetURL(page_id, url);
@@ -1228,12 +1178,14 @@ void RenderViewHostImpl::OnRequestMove(const gfx::Rect& pos) {
Send(new ViewMsg_Move_ACK(GetRoutingID()));
}
-void RenderViewHostImpl::OnDidChangeLoadProgress(double load_progress) {
- delegate_->DidChangeLoadProgress(load_progress);
-}
-
-void RenderViewHostImpl::OnDocumentAvailableInMainFrame() {
+void RenderViewHostImpl::OnDocumentAvailableInMainFrame(
+ bool uses_temporary_zoom_level) {
delegate_->DocumentAvailableInMainFrame(this);
+
+ HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
+ HostZoomMap::GetForBrowserContext(GetProcess()->GetBrowserContext()));
+ host_zoom_map->SetUsesTemporaryZoomLevel(
+ GetProcess()->GetID(), GetRoutingID(), uses_temporary_zoom_level);
}
void RenderViewHostImpl::OnToggleFullscreen(bool enter_fullscreen) {
@@ -1267,15 +1219,6 @@ void RenderViewHostImpl::OnDidChangeScrollOffsetPinningForMainFrame(
void RenderViewHostImpl::OnDidChangeNumWheelEvents(int count) {
}
-#if defined(OS_ANDROID)
-void RenderViewHostImpl::OnSelectionRootBoundsChanged(
- const gfx::Rect& bounds) {
- if (view_) {
- view_->SelectionRootBoundsChanged(bounds);
- }
-}
-#endif
-
void RenderViewHostImpl::OnRouteCloseEvent() {
// Have the delegate route this to the active RenderViewHost.
delegate_->RouteCloseEvent(this);
@@ -1303,7 +1246,7 @@ void RenderViewHostImpl::OnStartDragging(
ChildProcessSecurityPolicyImpl::GetInstance();
// Allow drag of Javascript URLs to enable bookmarklet drag to bookmark bar.
- if (!filtered_data.url.SchemeIs(kJavaScriptScheme))
+ if (!filtered_data.url.SchemeIs(url::kJavaScriptScheme))
process->FilterURL(true, &filtered_data.url);
process->FilterURL(false, &filtered_data.html_base_url);
// Filter out any paths that the renderer didn't have access to. This prevents
@@ -1335,7 +1278,7 @@ void RenderViewHostImpl::OnStartDragging(
filtered_data.file_system_files.push_back(drop_data.file_system_files[i]);
}
- float scale = ui::GetImageScale(GetScaleFactorForView(GetView()));
+ float scale = GetScaleFactorForView(GetView());
gfx::ImageSkia image(gfx::ImageSkiaRep(bitmap, scale));
view->StartDragging(filtered_data, drag_operations_mask, image,
bitmap_offset_in_dip, event_info);
@@ -1512,7 +1455,7 @@ void RenderViewHostImpl::DisownOpener() {
}
void RenderViewHostImpl::SetAccessibilityCallbackForTesting(
- const base::Callback<void(ui::AXEvent)>& callback) {
+ const base::Callback<void(ui::AXEvent, int)>& callback) {
accessibility_testing_callback_ = callback;
}
@@ -1623,7 +1566,7 @@ void RenderViewHostImpl::OnAccessibilityEvents(
ax_tree_.reset(new ui::AXTree(param.update));
else
CHECK(ax_tree_->Unserialize(param.update)) << ax_tree_->error();
- accessibility_testing_callback_.Run(param.event_type);
+ accessibility_testing_callback_.Run(param.event_type, param.id);
}
}
@@ -1642,17 +1585,14 @@ void RenderViewHostImpl::OnAccessibilityLocationChanges(
}
void RenderViewHostImpl::OnDidZoomURL(double zoom_level,
- bool remember,
const GURL& url) {
HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
HostZoomMap::GetForBrowserContext(GetProcess()->GetBrowserContext()));
- if (remember) {
- host_zoom_map->
- SetZoomLevelForHost(net::GetHostOrSpecFromURL(url), zoom_level);
- } else {
- host_zoom_map->SetTemporaryZoomLevel(
- GetProcess()->GetID(), GetRoutingID(), zoom_level);
- }
+
+ host_zoom_map->SetZoomLevelForView(GetProcess()->GetID(),
+ GetRoutingID(),
+ zoom_level,
+ net::GetHostOrSpecFromURL(url));
}
void RenderViewHostImpl::OnRunFileChooser(const FileChooserParams& params) {
@@ -1733,4 +1673,8 @@ void RenderViewHostImpl::AttachToFrameTree() {
frame_tree->ResetForMainFrameSwap();
}
+void RenderViewHostImpl::SelectWordAroundCaret() {
+ Send(new ViewMsg_SelectWordAroundCaret(GetRoutingID()));
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index e08d18c4ce..17fe82141d 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -24,7 +24,6 @@
#include "third_party/WebKit/public/web/WebAXEnums.h"
#include "third_party/WebKit/public/web/WebConsoleMessage.h"
#include "third_party/WebKit/public/web/WebPopupType.h"
-#include "third_party/WebKit/public/web/WebTextDirection.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/base/window_open_disposition.h"
@@ -54,7 +53,7 @@ struct SelectedFileInfo;
namespace content {
-class BrowserMediaPlayerManager;
+class MediaWebContentsObserver;
class ChildProcessSecurityPolicyImpl;
class PageState;
class RenderWidgetHostDelegate;
@@ -211,6 +210,7 @@ class CONTENT_EXPORT RenderViewHostImpl
virtual void GetAudioOutputControllers(
const GetAudioOutputControllersCallback& callback) const OVERRIDE;
virtual void SetWebUIHandle(mojo::ScopedMessagePipeHandle handle) OVERRIDE;
+ virtual void SelectWordAroundCaret() OVERRIDE;
#if defined(OS_ANDROID)
virtual void ActivateNearestFindResult(int request_id,
@@ -232,8 +232,11 @@ class CONTENT_EXPORT RenderViewHostImpl
// RenderView is told to start issuing page IDs at |max_page_id| + 1.
// |window_was_created_with_opener| is true if this top-level frame was
// created with an opener. (The opener may have been closed since.)
+ // The |proxy_route_id| is only used when creating a RenderView in swapped out
+ // state.
virtual bool CreateRenderView(const base::string16& frame_name,
int opener_route_id,
+ int proxy_route_id,
int32 max_page_id,
bool window_was_created_with_opener);
@@ -389,8 +392,8 @@ class CONTENT_EXPORT RenderViewHostImpl
#endif
#if defined(OS_ANDROID)
- BrowserMediaPlayerManager* media_player_manager() {
- return media_player_manager_.get();
+ MediaWebContentsObserver* media_web_contents_observer() {
+ return media_web_contents_observer_.get();
}
void DidSelectPopupMenuItems(const std::vector<int>& selected_indices);
@@ -409,7 +412,7 @@ class CONTENT_EXPORT RenderViewHostImpl
// renderer process, and the accessibility tree it sent can be
// retrieved using accessibility_tree_for_testing().
void SetAccessibilityCallbackForTesting(
- const base::Callback<void(ui::AXEvent)>& callback);
+ const base::Callback<void(ui::AXEvent, int)>& callback);
// Only valid if SetAccessibilityCallbackForTesting was called and
// the callback was run at least once. Returns a snapshot of the
@@ -482,24 +485,16 @@ class CONTENT_EXPORT RenderViewHostImpl
void OnRenderViewReady();
void OnRenderProcessGone(int status, int error_code);
void OnUpdateState(int32 page_id, const PageState& state);
- void OnUpdateTitle(int32 page_id,
- const base::string16& title,
- blink::WebTextDirection title_direction);
- void OnUpdateEncoding(const std::string& encoding);
void OnUpdateTargetURL(int32 page_id, const GURL& url);
void OnClose();
void OnRequestMove(const gfx::Rect& pos);
- void OnDidChangeLoadProgress(double load_progress);
- void OnDocumentAvailableInMainFrame();
+ void OnDocumentAvailableInMainFrame(bool uses_temporary_zoom_level);
void OnToggleFullscreen(bool enter_fullscreen);
void OnDidContentsPreferredSizeChange(const gfx::Size& new_size);
void OnDidChangeScrollOffset();
void OnDidChangeScrollOffsetPinningForMainFrame(bool is_pinned_to_left,
bool is_pinned_to_right);
void OnDidChangeNumWheelEvents(int count);
-#if defined(OS_ANDROID)
- void OnSelectionRootBoundsChanged(const gfx::Rect& bounds);
-#endif
void OnPasteFromSelectionClipboard();
void OnRouteCloseEvent();
void OnRouteMessageEvent(const ViewMsg_PostMessage_Params& params);
@@ -519,7 +514,7 @@ class CONTENT_EXPORT RenderViewHostImpl
const std::vector<AccessibilityHostMsg_EventParams>& params);
void OnAccessibilityLocationChanges(
const std::vector<AccessibilityHostMsg_LocationChangeParams>& params);
- void OnDidZoomURL(double zoom_level, bool remember, const GURL& url);
+ void OnDidZoomURL(double zoom_level, const GURL& url);
void OnRunFileChooser(const FileChooserParams& params);
void OnFocusedNodeTouched(bool editable);
@@ -612,7 +607,7 @@ class CONTENT_EXPORT RenderViewHostImpl
bool unload_ack_is_for_cross_site_transition_;
// Accessibility callback for testing.
- base::Callback<void(ui::AXEvent)> accessibility_testing_callback_;
+ base::Callback<void(ui::AXEvent, int)> accessibility_testing_callback_;
// The most recently received accessibility tree - for testing only.
scoped_ptr<ui::AXTree> ax_tree_;
@@ -627,8 +622,9 @@ class CONTENT_EXPORT RenderViewHostImpl
bool virtual_keyboard_requested_;
#if defined(OS_ANDROID)
- // Manages all the android mediaplayer objects and handling IPCs for video.
- scoped_ptr<BrowserMediaPlayerManager> media_player_manager_;
+ // Manages all the android mediaplayer managers and forwards IPCs to the
+ // managers.
+ scoped_ptr<MediaWebContentsObserver> media_web_contents_observer_;
#endif
// Used to swap out or shutdown this RVH when the unload event is taking too
diff --git a/content/browser/renderer_host/render_view_host_unittest.cc b/content/browser/renderer_host/render_view_host_unittest.cc
index 836540c0b6..15fa110bf1 100644
--- a/content/browser/renderer_host/render_view_host_unittest.cc
+++ b/content/browser/renderer_host/render_view_host_unittest.cc
@@ -29,7 +29,7 @@ class RenderViewHostTestBrowserClient : public TestContentBrowserClient {
virtual ~RenderViewHostTestBrowserClient() {}
virtual bool IsHandledURL(const GURL& url) OVERRIDE {
- return url.scheme() == kFileScheme;
+ return url.scheme() == url::kFileScheme;
}
private:
@@ -208,48 +208,6 @@ TEST_F(RenderViewHostTest, DragEnteredFileURLsStillBlocked) {
EXPECT_FALSE(policy->CanReadFile(id, sensitive_file_path));
}
-// The test that follow trigger DCHECKS in debug build.
-#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
-
-// Test that when we fail to de-serialize a message, RenderViewHost calls the
-// ReceivedBadMessage() handler.
-TEST_F(RenderViewHostTest, BadMessageHandlerRenderViewHost) {
- EXPECT_EQ(0, process()->bad_msg_count());
- // craft an incorrect ViewHostMsg_UpdateTargetURL message. The real one has
- // two payload items but the one we construct has none.
- IPC::Message message(0, ViewHostMsg_UpdateTargetURL::ID,
- IPC::Message::PRIORITY_NORMAL);
- test_rvh()->OnMessageReceived(message);
- EXPECT_EQ(1, process()->bad_msg_count());
-}
-
-// Test that when we fail to de-serialize a message, RenderWidgetHost calls the
-// ReceivedBadMessage() handler.
-TEST_F(RenderViewHostTest, BadMessageHandlerRenderWidgetHost) {
- EXPECT_EQ(0, process()->bad_msg_count());
- // craft an incorrect ViewHostMsg_UpdateRect message. The real one has
- // one payload item but the one we construct has none.
- IPC::Message message(0, ViewHostMsg_UpdateRect::ID,
- IPC::Message::PRIORITY_NORMAL);
- test_rvh()->OnMessageReceived(message);
- EXPECT_EQ(1, process()->bad_msg_count());
-}
-
-// Test that OnInputEventAck() detects bad messages.
-TEST_F(RenderViewHostTest, BadMessageHandlerInputEventAck) {
- EXPECT_EQ(0, process()->bad_msg_count());
- // InputHostMsg_HandleInputEvent_ACK is defined taking 0 params but
- // the code actually expects it to have at least one int para, this this
- // bogus message will not fail at de-serialization but should fail in
- // OnInputEventAck() processing.
- IPC::Message message(0, InputHostMsg_HandleInputEvent_ACK::ID,
- IPC::Message::PRIORITY_NORMAL);
- test_rvh()->OnMessageReceived(message);
- EXPECT_EQ(1, process()->bad_msg_count());
-}
-
-#endif
-
TEST_F(RenderViewHostTest, MessageWithBadHistoryItemFiles) {
base::FilePath file_path;
EXPECT_TRUE(PathService::Get(base::DIR_TEMP, &file_path));
diff --git a/content/browser/renderer_host/render_widget_helper.h b/content/browser/renderer_host/render_widget_helper.h
index 50ecdbda49..af5c6612b5 100644
--- a/content/browser/renderer_host/render_widget_helper.h
+++ b/content/browser/renderer_host/render_widget_helper.h
@@ -30,10 +30,12 @@ namespace base {
class TimeDelta;
}
+struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params;
struct ViewHostMsg_CreateWindow_Params;
struct ViewMsg_SwapOut_Params;
namespace content {
+class GpuProcessHost;
class ResourceDispatcherHostImpl;
class SessionStorageNamespace;
@@ -167,6 +169,12 @@ class RenderWidgetHelper
void FreeTransportDIB(TransportDIB::Id dib_id);
#endif
+#if defined(OS_MACOSX)
+ static void OnNativeSurfaceBuffersSwappedOnIOThread(
+ GpuProcessHost* gpu_process_host,
+ const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params);
+#endif
+
private:
// A class used to proxy a paint message. PaintMsgProxy objects are created
// on the IO thread and destroyed on the UI thread.
diff --git a/content/browser/renderer_host/render_widget_helper_mac.mm b/content/browser/renderer_host/render_widget_helper_mac.mm
new file mode 100644
index 0000000000..466278219b
--- /dev/null
+++ b/content/browser/renderer_host/render_widget_helper_mac.mm
@@ -0,0 +1,58 @@
+// 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 "content/browser/renderer_host/render_widget_helper.h"
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/bind.h"
+#include "content/browser/compositor/browser_compositor_view_mac.h"
+#include "content/browser/gpu/gpu_process_host.h"
+#include "content/browser/gpu/gpu_surface_tracker.h"
+#include "content/common/gpu/gpu_messages.h"
+
+namespace {
+
+void OnNativeSurfaceBuffersSwappedOnUIThread(
+ const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ gfx::AcceleratedWidget native_widget =
+ content::GpuSurfaceTracker::Get()->AcquireNativeWidget(params.surface_id);
+ [native_widget gotAcceleratedIOSurfaceFrame:params.surface_handle
+ withPixelSize:params.size
+ withScaleFactor:params.scale_factor];
+}
+
+} // namespace
+
+namespace content {
+
+void RenderWidgetHelper::OnNativeSurfaceBuffersSwappedOnIOThread(
+ GpuProcessHost* gpu_process_host,
+ const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ // Immediately acknowledge this frame on the IO thread instead of the UI
+ // thread. The UI thread will wait on the GPU process. If the UI thread
+ // were to be responsible for acking swaps, then there would be a cycle
+ // and a potential deadlock.
+ // TODO(ccameron): This immediate ack circumvents GPU back-pressure that
+ // is necessary to throttle renderers. Fix that.
+ // TODO(ccameron): It is possible that the IOSurface will be deleted or
+ // reused soon as it is acked. Take out a reference to the IOSurface here,
+ // to ensure the IOSurface does not disappear before routing to the UI
+ // thread.
+ AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
+ ack_params.sync_point = 0;
+ ack_params.renderer_id = 0;
+ gpu_process_host->Send(new AcceleratedSurfaceMsg_BufferPresented(
+ params.route_id, ack_params));
+
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&OnNativeSurfaceBuffersSwappedOnUIThread, params));
+}
+
+} // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index f01a2e75e1..5afb35d3ee 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -26,6 +26,7 @@
#include "cc/output/compositor_frame_ack.h"
#include "content/browser/accessibility/accessibility_mode_helper.h"
#include "content/browser/accessibility/browser_accessibility_state_impl.h"
+#include "content/browser/browser_plugin/browser_plugin_guest.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/gpu/gpu_process_host_ui_shim.h"
@@ -171,7 +172,6 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
is_loading_(false),
is_hidden_(hidden),
is_fullscreen_(false),
- is_accelerated_compositing_active_(false),
repaint_ack_pending_(false),
resize_ack_pending_(false),
screen_info_out_of_date_(false),
@@ -183,8 +183,6 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
is_unresponsive_(false),
in_flight_event_count_(0),
in_get_backing_store_(false),
- abort_get_backing_store_(false),
- view_being_painted_(false),
ignore_input_events_(false),
input_method_active_(false),
text_direction_updated_(false),
@@ -241,7 +239,10 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
SetOverscrollControllerEnabled(overscroll_enabled);
#endif
- if (GetProcess()->IsGuest() || !CommandLine::ForCurrentProcess()->HasSwitch(
+ RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
+ IsRenderView() ? RenderViewHost::From(this) : NULL);
+ if (BrowserPluginGuest::IsGuest(rvh) ||
+ !CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableHangMonitor)) {
hang_monitor_timeout_.reset(new TimeoutMonitor(
base::Bind(&RenderWidgetHostImpl::RendererIsUnresponsive,
@@ -452,8 +453,7 @@ bool RenderWidgetHostImpl::IsRenderView() const {
bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderWidgetHostImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostImpl, msg)
IPC_MESSAGE_HANDLER(InputHostMsg_QueueSyntheticGesture,
OnQueueSyntheticGesture)
IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnRenderViewReady)
@@ -464,10 +464,9 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove)
IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnSetTooltipText)
IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame,
- msg_is_ok = OnSwapCompositorFrame(msg))
+ OnSwapCompositorFrame(msg))
IPC_MESSAGE_HANDLER(ViewHostMsg_DidStopFlinging, OnFlingingStopped)
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
- IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateIsDelayed, OnUpdateIsDelayed)
IPC_MESSAGE_HANDLER(ViewHostMsg_Focus, OnFocus)
IPC_MESSAGE_HANDLER(ViewHostMsg_Blur, OnBlur)
IPC_MESSAGE_HANDLER(ViewHostMsg_SetCursor, OnSetCursor)
@@ -477,8 +476,6 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
OnTextInputTypeChanged)
IPC_MESSAGE_HANDLER(ViewHostMsg_ImeCancelComposition,
OnImeCancelComposition)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DidActivateAcceleratedCompositing,
- OnDidActivateAcceleratedCompositing)
IPC_MESSAGE_HANDLER(ViewHostMsg_LockMouse, OnLockMouse)
IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse)
IPC_MESSAGE_HANDLER(ViewHostMsg_ShowDisambiguationPopup,
@@ -501,7 +498,7 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
OnImeCompositionRangeChanged)
#endif
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
if (!handled && input_router_ && input_router_->OnMessageReceived(msg))
return true;
@@ -509,11 +506,6 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
if (!handled && view_ && view_->OnMessageReceived(msg))
return true;
- if (!msg_is_ok) {
- // The message de-serialization failed. Kill the renderer process.
- RecordAction(base::UserMetricsAction("BadMessageTerminate_RWH"));
- GetProcess()->ReceivedBadMessage();
- }
return handled;
}
@@ -593,8 +585,7 @@ void RenderWidgetHostImpl::WasResized() {
return;
}
- gfx::Rect view_bounds = view_->GetViewBounds();
- gfx::Size new_size(view_bounds.size());
+ gfx::Size new_size(view_->GetRequestedRendererSize());
gfx::Size old_physical_backing_size = physical_backing_size_;
physical_backing_size_ = view_->GetPhysicalBackingSize();
@@ -705,7 +696,7 @@ void RenderWidgetHostImpl::CopyFromBackingStore(
const gfx::Size& accelerated_dst_size,
const base::Callback<void(bool, const SkBitmap&)>& callback,
const SkBitmap::Config& bitmap_config) {
- if (view_ && is_accelerated_compositing_active_) {
+ if (view_) {
TRACE_EVENT0("browser",
"RenderWidgetHostImpl::CopyFromBackingStore::FromCompositingSurface");
gfx::Rect accelerated_copy_rect = src_subrect.IsEmpty() ?
@@ -752,7 +743,7 @@ bool RenderWidgetHostImpl::CanPauseForPendingResizeOrRepaints() {
return false;
// Do not pause if there is not a paint or resize already coming.
- if (!repaint_ack_pending_ && !resize_ack_pending_ && !view_being_painted_)
+ if (!repaint_ack_pending_ && !resize_ack_pending_)
return false;
return true;
@@ -801,7 +792,7 @@ void RenderWidgetHostImpl::WaitForSurface() {
// We do not have a suitable backing store in the cache, so send out a
// request to the renderer to paint the view if required.
- if (!repaint_ack_pending_ && !resize_ack_pending_ && !view_being_painted_) {
+ if (!repaint_ack_pending_ && !resize_ack_pending_) {
repaint_start_time_ = TimeTicks::Now();
repaint_ack_pending_ = true;
TRACE_EVENT_ASYNC_BEGIN0(
@@ -828,10 +819,8 @@ void RenderWidgetHostImpl::WaitForSurface() {
// Break now if we got a backing store or accelerated surface of the
// correct size.
- if (view_->HasAcceleratedSurface(view_size) || abort_get_backing_store_) {
- abort_get_backing_store_ = false;
+ if (view_->HasAcceleratedSurface(view_size))
return;
- }
} else {
TRACE_EVENT0("renderer_host", "WaitForSurface::Timeout");
break;
@@ -846,9 +835,8 @@ void RenderWidgetHostImpl::WaitForSurface() {
}
bool RenderWidgetHostImpl::ScheduleComposite() {
- if (is_hidden_ || !is_accelerated_compositing_active_ ||
- current_size_.IsEmpty() || repaint_ack_pending_ ||
- resize_ack_pending_ || view_being_painted_) {
+ if (is_hidden_ || current_size_.IsEmpty() || repaint_ack_pending_ ||
+ resize_ack_pending_) {
return false;
}
@@ -1233,7 +1221,6 @@ void RenderWidgetHostImpl::RendererExited(base::TerminationStatus status,
ResetSizeAndRepaintPendingFlags();
current_size_.SetSize(0, 0);
is_hidden_ = false;
- is_accelerated_compositing_active_ = false;
// Reset this to ensure the hung renderer mechanism is working properly.
in_flight_event_count_ = 0;
@@ -1574,11 +1561,6 @@ void RenderWidgetHostImpl::OnUpdateRect(
UMA_HISTOGRAM_TIMES("MPArch.RWH_OnMsgUpdateRect", delta);
}
-void RenderWidgetHostImpl::OnUpdateIsDelayed() {
- if (in_get_backing_store_)
- abort_get_backing_store_ = true;
-}
-
void RenderWidgetHostImpl::DidUpdateBackingStore(
const ViewHostMsg_UpdateRect_Params& params,
const TimeTicks& paint_start) {
@@ -1682,15 +1664,6 @@ void RenderWidgetHostImpl::OnImeCancelComposition() {
view_->ImeCancelComposition();
}
-void RenderWidgetHostImpl::OnDidActivateAcceleratedCompositing(bool activated) {
- TRACE_EVENT1("renderer_host",
- "RenderWidgetHostImpl::OnDidActivateAcceleratedCompositing",
- "activated", activated);
- is_accelerated_compositing_active_ = activated;
- if (view_)
- view_->OnAcceleratedCompositingStateChange();
-}
-
void RenderWidgetHostImpl::OnLockMouse(bool user_gesture,
bool last_unlocked_by_target,
bool privileged) {
@@ -1858,6 +1831,11 @@ void RenderWidgetHostImpl::DidFlush() {
view_->OnDidFlushInput();
}
+void RenderWidgetHostImpl::DidOverscroll(const DidOverscrollParams& params) {
+ if (view_)
+ view_->DidOverscroll(params);
+}
+
void RenderWidgetHostImpl::OnKeyboardEventAck(
const NativeWebKeyboardEvent& event,
InputEventAckState ack_result) {
@@ -1974,8 +1952,8 @@ void RenderWidgetHostImpl::Stop() {
Send(new ViewMsg_Stop(GetRoutingID()));
}
-void RenderWidgetHostImpl::SetBackground(const SkBitmap& background) {
- Send(new ViewMsg_SetBackground(GetRoutingID(), background));
+void RenderWidgetHostImpl::SetBackgroundOpaque(bool opaque) {
+ Send(new ViewMsg_SetBackgroundOpaque(GetRoutingID(), opaque));
}
void RenderWidgetHostImpl::SetEditCommandsForNextKeyEvent(
@@ -2047,6 +2025,10 @@ gfx::Point RenderWidgetHostImpl::AccessibilityOriginInScreen(
return view_->AccessibilityOriginInScreen(bounds);
}
+void RenderWidgetHostImpl::AccessibilityHitTest(const gfx::Point& point) {
+ Send(new AccessibilityMsg_HitTest(GetRoutingID(), point));
+}
+
void RenderWidgetHostImpl::AccessibilityFatalError() {
Send(new AccessibilityMsg_FatalError(GetRoutingID()));
view_->SetBrowserAccessibilityManager(NULL);
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 139ea3b7cf..7080894ea6 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -190,6 +190,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl
virtual gfx::Rect AccessibilityGetViewBounds() const OVERRIDE;
virtual gfx::Point AccessibilityOriginInScreen(const gfx::Rect& bounds)
const OVERRIDE;
+ virtual void AccessibilityHitTest(const gfx::Point& point) OVERRIDE;
virtual void AccessibilityFatalError() OVERRIDE;
const NativeWebKeyboardEvent* GetLastKeyboardEvent() const;
@@ -242,11 +243,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
// Noifies the RenderWidget of the current mouse cursor visibility state.
void SendCursorVisibilityState(bool is_visible);
- // Tells us whether the page is rendered directly via the GPU process.
- bool is_accelerated_compositing_active() {
- return is_accelerated_compositing_active_;
- }
-
// Notifies the RenderWidgetHost that the View was destroyed.
void ViewDestroyed();
@@ -384,8 +380,8 @@ class CONTENT_EXPORT RenderWidgetHostImpl
// perform an action. See OnUserGesture for more details.
void StartUserGesture();
- // Set the RenderView background.
- void SetBackground(const SkBitmap& background);
+ // Set the RenderView background transparency.
+ void SetBackgroundOpaque(bool opaque);
// Notifies the renderer that the next key event is bound to one or more
// pre-defined edit commands
@@ -637,7 +633,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
bool OnSwapCompositorFrame(const IPC::Message& message);
void OnFlingingStopped();
void OnUpdateRect(const ViewHostMsg_UpdateRect_Params& params);
- void OnUpdateIsDelayed();
void OnQueueSyntheticGesture(const SyntheticGesturePacket& gesture_packet);
virtual void OnFocus();
virtual void OnBlur();
@@ -652,7 +647,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
const std::vector<gfx::Rect>& character_bounds);
#endif
void OnImeCancelComposition();
- void OnDidActivateAcceleratedCompositing(bool activated);
void OnLockMouse(bool user_gesture,
bool last_unlocked_by_target,
bool privileged);
@@ -692,6 +686,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl
virtual void OnHasTouchEventHandlers(bool has_handlers) OVERRIDE;
virtual OverscrollController* GetOverscrollController() const OVERRIDE;
virtual void DidFlush() OVERRIDE;
+ virtual void DidOverscroll(const DidOverscrollParams& params) OVERRIDE;
// InputAckHandler
virtual void OnKeyboardEventAck(const NativeWebKeyboardEvent& event,
@@ -739,9 +734,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
// Indicates whether a page is fullscreen or not.
bool is_fullscreen_;
- // True when a page is rendered directly via the GPU process.
- bool is_accelerated_compositing_active_;
-
// Set if we are waiting for a repaint ack for the view.
bool repaint_ack_pending_;
@@ -820,12 +812,6 @@ class CONTENT_EXPORT RenderWidgetHostImpl
// Flag to detect recursive calls to GetBackingStore().
bool in_get_backing_store_;
- // Flag to trigger the GetBackingStore method to abort early.
- bool abort_get_backing_store_;
-
- // Set when we call DidPaintRect/DidScrollRect on the view.
- bool view_being_painted_;
-
// Used for UMA histogram logging to measure the time for a repaint view
// operation to finish.
base::TimeTicks repaint_start_time_;
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 78505f1c99..d50287d75c 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -638,10 +638,10 @@ class RenderWidgetHostTest : public testing::Test {
void SendInputEventACK(WebInputEvent::Type type,
InputEventAckState ack_result) {
- scoped_ptr<IPC::Message> response(
- new InputHostMsg_HandleInputEvent_ACK(0, type, ack_result,
- ui::LatencyInfo()));
- host_->OnMessageReceived(*response);
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = type;
+ ack.state = ack_result;
+ host_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
}
double GetNextSimulatedEventTimeSeconds() {
@@ -953,9 +953,10 @@ TEST_F(RenderWidgetHostTest, ResizeThenCrash) {
host_->SetView(view_.get());
}
-// Tests setting custom background
-TEST_F(RenderWidgetHostTest, Background) {
+// Unable to include render_widget_host_view_mac.h and compile.
#if !defined(OS_MACOSX)
+// Tests setting background transparency.
+TEST_F(RenderWidgetHostTest, Background) {
scoped_ptr<RenderWidgetHostViewBase> view;
#if defined(USE_AURA)
view.reset(new RenderWidgetHostViewAura(host_.get()));
@@ -966,57 +967,25 @@ TEST_F(RenderWidgetHostTest, Background) {
#endif
host_->SetView(view.get());
- // Create a checkerboard background to test with.
- gfx::Canvas canvas(gfx::Size(4, 4), 1.0f, true);
- canvas.FillRect(gfx::Rect(0, 0, 2, 2), SK_ColorBLACK);
- canvas.FillRect(gfx::Rect(2, 0, 2, 2), SK_ColorWHITE);
- canvas.FillRect(gfx::Rect(0, 2, 2, 2), SK_ColorWHITE);
- canvas.FillRect(gfx::Rect(2, 2, 2, 2), SK_ColorBLACK);
- const SkBitmap& background =
- canvas.sk_canvas()->getDevice()->accessBitmap(false);
-
- // Set the background and make sure we get back a copy.
- view->SetBackground(background);
- EXPECT_EQ(4, view->GetBackground().width());
- EXPECT_EQ(4, view->GetBackground().height());
- EXPECT_EQ(background.getSize(), view->GetBackground().getSize());
- background.lockPixels();
- view->GetBackground().lockPixels();
- EXPECT_TRUE(0 == memcmp(background.getPixels(),
- view->GetBackground().getPixels(),
- background.getSize()));
- view->GetBackground().unlockPixels();
- background.unlockPixels();
+ EXPECT_TRUE(view->GetBackgroundOpaque());
+ view->SetBackgroundOpaque(false);
+ EXPECT_FALSE(view->GetBackgroundOpaque());
const IPC::Message* set_background =
- process_->sink().GetUniqueMessageMatching(ViewMsg_SetBackground::ID);
+ process_->sink().GetUniqueMessageMatching(
+ ViewMsg_SetBackgroundOpaque::ID);
ASSERT_TRUE(set_background);
- Tuple1<SkBitmap> sent_background;
- ViewMsg_SetBackground::Read(set_background, &sent_background);
- EXPECT_EQ(background.getSize(), sent_background.a.getSize());
- background.lockPixels();
- sent_background.a.lockPixels();
- EXPECT_TRUE(0 == memcmp(background.getPixels(),
- sent_background.a.getPixels(),
- background.getSize()));
- sent_background.a.unlockPixels();
- background.unlockPixels();
+ Tuple1<bool> sent_background;
+ ViewMsg_SetBackgroundOpaque::Read(set_background, &sent_background);
+ EXPECT_FALSE(sent_background.a);
#if defined(USE_AURA)
// See the comment above |InitAsChild(NULL)|.
host_->SetView(NULL);
static_cast<RenderWidgetHostViewBase*>(view.release())->Destroy();
#endif
-
-#else
- // TODO(port): Mac does not have gfx::Canvas. Maybe we can just change this
- // test to use SkCanvas directly?
-#endif
-
- // TODO(aa): It would be nice to factor out the painting logic so that we
- // could test that, but it appears that would mean painting everything twice
- // since windows HDC structures are opaque.
}
+#endif
// Test that we don't paint when we're hidden, but we still send the ACK. Most
// of the rest of the painting is tested in the GetBackingStore* ones.
@@ -2273,15 +2242,13 @@ TEST_F(RenderWidgetHostTest, OverscrollResetsOnBlur) {
}
std::string GetInputMessageTypes(RenderWidgetHostProcess* process) {
- const WebInputEvent* event = NULL;
- ui::LatencyInfo latency_info;
- bool is_keyboard_shortcut;
std::string result;
for (size_t i = 0; i < process->sink().message_count(); ++i) {
const IPC::Message *message = process->sink().GetMessageAt(i);
EXPECT_EQ(InputMsg_HandleInputEvent::ID, message->type());
- EXPECT_TRUE(InputMsg_HandleInputEvent::Read(
- message, &event, &latency_info, &is_keyboard_shortcut));
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(message, &params));
+ const WebInputEvent* event = params.a;
if (i != 0)
result += " ";
result += WebInputEventTraits::GetName(event->type);
@@ -2604,14 +2571,12 @@ TEST_F(RenderWidgetHostTest, InputRouterReceivesHasTouchEventHandlers) {
void CheckLatencyInfoComponentInMessage(RenderWidgetHostProcess* process,
int64 component_id,
WebInputEvent::Type input_type) {
- const WebInputEvent* event = NULL;
- ui::LatencyInfo latency_info;
- bool is_keyboard_shortcut;
const IPC::Message* message = process->sink().GetUniqueMessageMatching(
InputMsg_HandleInputEvent::ID);
ASSERT_TRUE(message);
- EXPECT_TRUE(InputMsg_HandleInputEvent::Read(
- message, &event, &latency_info, &is_keyboard_shortcut));
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(message, &params));
+ ui::LatencyInfo latency_info = params.b;
EXPECT_TRUE(latency_info.FindLatency(
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
component_id,
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index b3aad6a1b0..0e8de58ee9 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -35,7 +35,7 @@
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host_ui_shim.h"
#include "content/browser/gpu/gpu_surface_tracker.h"
-#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/browser/media/android/media_web_contents_observer.h"
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/image_transport_factory_android.h"
@@ -49,6 +49,7 @@
#include "content/common/input/did_overscroll_params.h"
#include "content/common/input_messages.h"
#include "content/common/view_messages.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/common/content_switches.h"
@@ -215,7 +216,6 @@ bool RenderWidgetHostViewAndroid::OnMessageReceived(
IPC_MESSAGE_HANDLER(ViewHostMsg_StartContentIntent, OnStartContentIntent)
IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeBodyBackgroundColor,
OnDidChangeBodyBackgroundColor)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DidOverscroll, OnDidOverscroll)
IPC_MESSAGE_HANDLER(ViewHostMsg_SetNeedsBeginFrame,
OnSetNeedsBeginFrame)
IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged,
@@ -254,6 +254,7 @@ void RenderWidgetHostViewAndroid::WasShown() {
if (content_view_core_ && !using_synchronous_compositor_) {
content_view_core_->GetWindowAndroid()->AddObserver(this);
+ content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
observing_root_window_ = true;
}
}
@@ -516,25 +517,6 @@ void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor(
content_view_core_->OnBackgroundColorChanged(color);
}
-void RenderWidgetHostViewAndroid::OnDidOverscroll(
- const DidOverscrollParams& params) {
- if (!content_view_core_ || !layer_ || !is_showing_)
- return;
-
- const float device_scale_factor = content_view_core_->GetDpiScale();
- if (overscroll_effect_->OnOverscrolled(
- content_view_core_->GetLayer(),
- base::TimeTicks::Now(),
- gfx::ScaleVector2d(params.accumulated_overscroll,
- device_scale_factor),
- gfx::ScaleVector2d(params.latest_overscroll_delta,
- device_scale_factor),
- gfx::ScaleVector2d(params.current_fling_velocity,
- device_scale_factor))) {
- SetNeedsAnimate();
- }
-}
-
void RenderWidgetHostViewAndroid::OnSetNeedsBeginFrame(bool enabled) {
if (enabled == needs_begin_frame_)
return;
@@ -658,19 +640,12 @@ void RenderWidgetHostViewAndroid::SelectionBoundsChanged(
}
}
-void RenderWidgetHostViewAndroid::SelectionRootBoundsChanged(
- const gfx::Rect& bounds) {
- if (content_view_core_) {
- content_view_core_->OnSelectionRootBoundsChanged(bounds);
- }
-}
-
void RenderWidgetHostViewAndroid::ScrollOffsetChanged() {
}
-void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) {
- RenderWidgetHostViewBase::SetBackground(background);
- host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background));
+void RenderWidgetHostViewAndroid::SetBackgroundOpaque(bool opaque) {
+ RenderWidgetHostViewBase::SetBackgroundOpaque(opaque);
+ host_->SetBackgroundOpaque(opaque);
}
void RenderWidgetHostViewAndroid::CopyFromCompositingSurface(
@@ -759,9 +734,6 @@ RenderWidgetHostViewAndroid::CreateSyntheticGestureTarget() {
host_, content_view_core_->CreateTouchEventSynthesizer()));
}
-void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() {
-}
-
void RenderWidgetHostViewAndroid::SendDelegatedFrameAck(
uint32 output_surface_id) {
DCHECK(host_);
@@ -810,10 +782,9 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
// Drop the cc::DelegatedFrameResourceCollection so that we will not return
// any resources from the old output surface with the new output surface id.
if (resource_collection_.get()) {
+ resource_collection_->SetClient(NULL);
if (resource_collection_->LoseAllResources())
SendReturnedDelegatedResources(last_output_surface_id_);
-
- resource_collection_->SetClient(NULL);
resource_collection_ = NULL;
}
DestroyDelegatedContent();
@@ -1018,7 +989,7 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
if (host_ && host_->IsRenderView()) {
RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(
RenderViewHost::From(host_));
- rvhi->media_player_manager()->OnFrameInfoUpdated();
+ rvhi->media_web_contents_observer()->OnFrameInfoUpdated();
}
#endif // defined(VIDEO_HOLE)
}
@@ -1057,7 +1028,7 @@ void RenderWidgetHostViewAndroid::RemoveLayers() {
}
void RenderWidgetHostViewAndroid::SetNeedsAnimate() {
- content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
+ content_view_core_->GetWindowAndroid()->SetNeedsAnimate();
}
bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
@@ -1166,6 +1137,7 @@ void RenderWidgetHostViewAndroid::OnSetNeedsFlushInput() {
return;
TRACE_EVENT0("input", "RenderWidgetHostViewAndroid::OnSetNeedsFlushInput");
flush_input_requested_ = true;
+ content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
}
void RenderWidgetHostViewAndroid::CreateBrowserAccessibilityManagerIfNeeded() {
@@ -1246,6 +1218,25 @@ SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
return cached_background_color_;
}
+void RenderWidgetHostViewAndroid::DidOverscroll(
+ const DidOverscrollParams& params) {
+ if (!content_view_core_ || !layer_ || !is_showing_)
+ return;
+
+ const float device_scale_factor = content_view_core_->GetDpiScale();
+ if (overscroll_effect_->OnOverscrolled(
+ content_view_core_->GetLayer(),
+ base::TimeTicks::Now(),
+ gfx::ScaleVector2d(params.accumulated_overscroll,
+ device_scale_factor),
+ gfx::ScaleVector2d(params.latest_overscroll_delta,
+ device_scale_factor),
+ gfx::ScaleVector2d(params.current_fling_velocity,
+ device_scale_factor))) {
+ SetNeedsAnimate();
+ }
+}
+
void RenderWidgetHostViewAndroid::DidStopFlinging() {
if (content_view_core_)
content_view_core_->DidStopFlinging();
@@ -1341,12 +1332,15 @@ void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
host_->GetRoutingID(),
cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period)));
- // TODO(sievers): This should use the LayerTreeHostClient callback
- bool needs_animate = Animate(frame_time);
- if (needs_begin_frame_ || needs_animate)
+ if (needs_begin_frame_)
content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
}
+void RenderWidgetHostViewAndroid::OnAnimate(base::TimeTicks begin_frame_time) {
+ if (Animate(begin_frame_time))
+ SetNeedsAnimate();
+}
+
void RenderWidgetHostViewAndroid::OnLostResources() {
ReleaseLocksOnSurface();
if (layer_.get())
@@ -1422,7 +1416,8 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult(
base::Passed(&release_callback),
base::Passed(&bitmap),
start_time,
- base::Passed(&bitmap_pixels_lock)));
+ base::Passed(&bitmap_pixels_lock)),
+ GLHelper::SCALER_QUALITY_GOOD);
}
bool RenderWidgetHostViewAndroid::IsReadbackConfigSupported(
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 1c3d44309f..e33d81220a 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -114,9 +114,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
const gfx::Range& range) OVERRIDE;
virtual void SelectionBoundsChanged(
const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE;
- virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
virtual void ScrollOffsetChanged() OVERRIDE;
- virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
virtual void AcceleratedSurfaceBuffersSwapped(
@@ -128,7 +126,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
virtual void AcceleratedSurfaceSuspend() OVERRIDE;
virtual void AcceleratedSurfaceRelease() OVERRIDE;
virtual bool HasAcceleratedSurface(const gfx::Size& desired_size) OVERRIDE;
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+ virtual void SetBackgroundOpaque(bool transparent) OVERRIDE;
virtual void CopyFromCompositingSurface(
const gfx::Rect& src_subrect,
const gfx::Size& dst_size,
@@ -159,6 +157,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
virtual void OnSwapCompositorFrame(
uint32 output_surface_id,
scoped_ptr<cc::CompositorFrame> frame) OVERRIDE;
+ virtual void DidOverscroll(const DidOverscrollParams& params) OVERRIDE;
virtual void DidStopFlinging() OVERRIDE;
virtual void ShowDisambiguationPopup(const gfx::Rect& target_rect,
const SkBitmap& zoomed_bitmap) OVERRIDE;
@@ -180,6 +179,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
virtual void OnWillDestroyWindow() OVERRIDE;
virtual void OnVSync(base::TimeTicks frame_time,
base::TimeDelta vsync_period) OVERRIDE;
+ virtual void OnAnimate(base::TimeTicks begin_frame_time) OVERRIDE;
// ImageTransportFactoryAndroidObserver implementation.
virtual void OnLostResources() OVERRIDE;
@@ -200,7 +200,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
void OnTextInputStateChanged(const ViewHostMsg_TextInputState_Params& params);
void OnDidChangeBodyBackgroundColor(SkColor color);
- void OnDidOverscroll(const DidOverscrollParams& params);
void OnStartContentIntent(const GURL& content_url);
void OnSetNeedsBeginFrame(bool enabled);
void OnSmartClipDataExtracted(const base::string16& result);
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 116a6f4d96..0607c92c0e 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -768,26 +768,19 @@ bool RenderWidgetHostViewAura::IsShowing() {
}
gfx::Rect RenderWidgetHostViewAura::GetViewBounds() const {
- // This is the size that we want the renderer to produce. While we're waiting
- // for the correct frame (i.e. during a resize), don't change the size so that
- // we don't pipeline more resizes than we can handle.
- gfx::Rect bounds(window_->GetBoundsInScreen());
- return delegated_frame_host_->GetViewBoundsWithResizeLock(bounds);
+ return window_->GetBoundsInScreen();
}
-void RenderWidgetHostViewAura::SetBackground(const SkBitmap& background) {
- RenderWidgetHostViewBase::SetBackground(background);
- host_->SetBackground(background);
- window_->layer()->SetFillsBoundsOpaquely(background.isOpaque());
+void RenderWidgetHostViewAura::SetBackgroundOpaque(bool opaque) {
+ RenderWidgetHostViewBase::SetBackgroundOpaque(opaque);
+ host_->SetBackgroundOpaque(opaque);
+ window_->layer()->SetFillsBoundsOpaquely(opaque);
}
gfx::Size RenderWidgetHostViewAura::GetVisibleViewportSize() const {
- gfx::Rect window_bounds = window_->bounds();
- int viewport_width = std::max(
- 0, window_bounds.width() - insets_.left() - insets_.right());
- int viewport_height = std::max(
- 0, window_bounds.height() - insets_.top() - insets_.bottom());
- return gfx::Size(viewport_width, viewport_height);
+ gfx::Rect requested_rect(GetRequestedRendererSize());
+ requested_rect.Inset(insets_);
+ return requested_rect.size();
}
void RenderWidgetHostViewAura::SetInsets(const gfx::Insets& insets) {
@@ -899,6 +892,10 @@ void RenderWidgetHostViewAura::SelectionChanged(const base::string16& text,
#endif // defined(USE_X11) && !defined(OS_CHROMEOS)
}
+gfx::Size RenderWidgetHostViewAura::GetRequestedRendererSize() const {
+ return delegated_frame_host_->GetRequestedRendererSize();
+}
+
void RenderWidgetHostViewAura::SelectionBoundsChanged(
const ViewHostMsg_SelectionBounds_Params& params) {
if (selection_anchor_rect_ == params.anchor_rect &&
@@ -961,9 +958,6 @@ void RenderWidgetHostViewAura::EndFrameSubscription() {
delegated_frame_host_->EndFrameSubscription();
}
-void RenderWidgetHostViewAura::OnAcceleratedCompositingStateChange() {
-}
-
void RenderWidgetHostViewAura::AcceleratedSurfaceInitialized(int host_id,
int route_id) {
}
@@ -994,13 +988,17 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) {
// Additonally the legacy dummy window is needed for accessibility and for
// scrolling to work in legacy drivers for trackpoints/trackpads, etc.
if (GetNativeViewId()) {
+ bool show_legacy_window = false;
if (!legacy_render_widget_host_HWND_) {
legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
reinterpret_cast<HWND>(GetNativeViewId()));
+ show_legacy_window = window_->TargetVisibility();
}
if (legacy_render_widget_host_HWND_) {
legacy_render_widget_host_HWND_->SetBounds(
window_->GetBoundsInRootWindow());
+ if (show_legacy_window)
+ legacy_render_widget_host_HWND_->Show();
}
}
@@ -1531,16 +1529,6 @@ void RenderWidgetHostViewAura::OnCandidateWindowHidden() {
////////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostViewAura, gfx::DisplayObserver implementation:
-void RenderWidgetHostViewAura::OnDisplayBoundsChanged(
- const gfx::Display& display) {
- gfx::Screen* screen = gfx::Screen::GetScreenFor(window_);
- if (display.id() == screen->GetDisplayNearestWindow(window_).id()) {
- UpdateScreenInfo(window_);
- current_cursor_.SetDisplayInfo(display);
- UpdateCursorIfOverSelf();
- }
-}
-
void RenderWidgetHostViewAura::OnDisplayAdded(
const gfx::Display& new_display) {
}
@@ -1549,6 +1537,17 @@ void RenderWidgetHostViewAura::OnDisplayRemoved(
const gfx::Display& old_display) {
}
+void RenderWidgetHostViewAura::OnDisplayMetricsChanged(
+ const gfx::Display& display, uint32_t metrics) {
+ // The screen info should be updated regardless of the metric change.
+ gfx::Screen* screen = gfx::Screen::GetScreenFor(window_);
+ if (display.id() == screen->GetDisplayNearestWindow(window_).id()) {
+ UpdateScreenInfo(window_);
+ current_cursor_.SetDisplayInfo(display);
+ UpdateCursorIfOverSelf();
+ }
+}
+
////////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostViewAura, aura::WindowDelegate implementation:
@@ -2372,8 +2371,6 @@ scoped_ptr<ResizeLock> RenderWidgetHostViewAura::CreateResizeLock(
desired_size,
defer_compositor_lock,
base::TimeDelta::FromMilliseconds(kResizeLockTimeoutMs)));
- ResizeLock* lock = NULL;
- return scoped_ptr<ResizeLock>(lock);
}
DelegatedFrameHost* RenderWidgetHostViewAura::GetDelegatedFrameHost() const {
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index fa3c0e7d14..e5183f9d00 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -143,7 +143,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual void Hide() OVERRIDE;
virtual bool IsShowing() OVERRIDE;
virtual gfx::Rect GetViewBounds() const OVERRIDE;
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+ virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
virtual gfx::Size GetVisibleViewportSize() const OVERRIDE;
virtual void SetInsets(const gfx::Insets& insets) OVERRIDE;
@@ -174,6 +174,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual void SelectionChanged(const base::string16& text,
size_t offset,
const gfx::Range& range) OVERRIDE;
+ virtual gfx::Size GetRequestedRendererSize() const OVERRIDE;
virtual void SelectionBoundsChanged(
const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE;
virtual void ScrollOffsetChanged() OVERRIDE;
@@ -191,7 +192,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual void BeginFrameSubscription(
scoped_ptr<RenderWidgetHostViewFrameSubscriber> subscriber) OVERRIDE;
virtual void EndFrameSubscription() OVERRIDE;
- virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
virtual void AcceleratedSurfaceBuffersSwapped(
@@ -260,9 +260,10 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
virtual void OnCandidateWindowHidden() OVERRIDE;
// Overridden from gfx::DisplayObserver:
- virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE;
virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
+ virtual void OnDisplayMetricsChanged(const gfx::Display& display,
+ uint32_t metrics) OVERRIDE;
// Overridden from aura::WindowDelegate:
virtual gfx::Size GetMinimumSize() const OVERRIDE;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 581ebc8c12..2a418dfcc1 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -17,6 +17,7 @@
#include "content/browser/compositor/resize_lock.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/common/gpu/client/gl_helper.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/common/host_shared_bitmap_manager.h"
#include "content/common/input_messages.h"
@@ -168,9 +169,7 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura {
}
virtual bool ShouldCreateResizeLock() OVERRIDE {
- gfx::Size desired_size = window()->bounds().size();
- return desired_size !=
- GetDelegatedFrameHost()->CurrentFrameSizeInDIPForTesting();
+ return GetDelegatedFrameHost()->ShouldCreateResizeLockForTesting();
}
virtual void RequestCopyOfOutput(scoped_ptr<cc::CopyOutputRequest> request)
@@ -210,10 +209,11 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
: browser_thread_for_ui_(BrowserThread::UI, &message_loop_) {}
void SetUpEnvironment() {
+ ui::ContextFactory* context_factory = new ui::InProcessContextFactory;
ImageTransportFactory::InitializeForUnitTests(
- scoped_ptr<ui::ContextFactory>(new ui::InProcessContextFactory));
+ scoped_ptr<ui::ContextFactory>(context_factory));
aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_));
- aura_test_helper_->SetUp();
+ aura_test_helper_->SetUp(context_factory);
new wm::DefaultActivationClient(aura_test_helper_->root_window());
browser_context_.reset(new TestBrowserContext);
@@ -232,8 +232,6 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
widget_host_ = new RenderWidgetHostImpl(
&delegate_, process_host_, MSG_ROUTING_NONE, false);
widget_host_->Init();
- widget_host_->OnMessageReceived(
- ViewHostMsg_DidActivateAcceleratedCompositing(0, true));
view_ = new FakeRenderWidgetHostViewAura(widget_host_);
}
@@ -955,6 +953,92 @@ TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) {
view_->window_->RemoveObserver(&observer);
}
+TEST_F(RenderWidgetHostViewAuraTest, Resize) {
+ gfx::Size size1(100, 100);
+ gfx::Size size2(200, 200);
+ gfx::Size size3(300, 300);
+
+ aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow();
+ view_->InitAsChild(NULL);
+ aura::client::ParentWindowWithContext(
+ view_->GetNativeView(), root_window, gfx::Rect(size1));
+ view_->WasShown();
+ view_->SetSize(size1);
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
+ ui::DrawWaiterForTest::WaitForCommit(
+ root_window->GetHost()->compositor());
+ ViewHostMsg_UpdateRect_Params update_params;
+ update_params.view_size = size1;
+ update_params.scale_factor = 1.f;
+ update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+ // Resize logic is idle (no pending resize, no pending commit).
+ EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Resize renderer, should produce a Resize message
+ view_->SetSize(size2);
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(1u, sink_->message_count());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(0);
+ EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
+ ViewMsg_Resize::Param params;
+ ViewMsg_Resize::Read(msg, &params);
+ EXPECT_EQ(size2.ToString(), params.a.new_size.ToString());
+ }
+ // Send resize ack to observe new Resize messages.
+ update_params.view_size = size2;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+
+ // Resize renderer again, before receiving a frame. Should not produce a
+ // Resize message.
+ view_->SetSize(size3);
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(0u, sink_->message_count());
+
+ // Receive a frame of the new size, should be skipped and not produce a Resize
+ // message.
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
+ // Expect the frame ack;
+ EXPECT_EQ(1u, sink_->message_count());
+ EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type());
+ sink_->ClearMessages();
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Receive a frame of the correct size, should not be skipped and, and should
+ // produce a Resize message after the commit.
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
+ // No frame ack yet.
+ EXPECT_EQ(0u, sink_->message_count());
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Wait for commit, then we should unlock the compositor and send a Resize
+ // message (and a frame ack)
+ ui::DrawWaiterForTest::WaitForCommit(
+ root_window->GetHost()->compositor());
+ EXPECT_EQ(size3.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(2u, sink_->message_count());
+ EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(1);
+ EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
+ ViewMsg_Resize::Param params;
+ ViewMsg_Resize::Read(msg, &params);
+ EXPECT_EQ(size3.ToString(), params.a.new_size.ToString());
+ }
+ update_params.view_size = size3;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+}
+
// Skipped frames should not drop their damage.
TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
gfx::Rect view_rect(100, 100);
@@ -989,7 +1073,6 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
// Lock the compositor. Now we should drop frames.
view_rect = gfx::Rect(150, 150);
view_->SetSize(view_rect.size());
- view_->GetDelegatedFrameHost()->MaybeCreateResizeLock();
// This frame is dropped.
gfx::Rect dropped_damage_rect_1(10, 20, 30, 40);
@@ -1026,6 +1109,21 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
view_->RunOnCompositingDidCommit();
+ // Resize to something empty.
+ view_rect = gfx::Rect(100, 0);
+ view_->SetSize(view_rect.size());
+
+ // We're never expecting empty frames, resize to something non-empty.
+ view_rect = gfx::Rect(100, 100);
+ view_->SetSize(view_rect.size());
+
+ // This frame should not be dropped.
+ EXPECT_CALL(observer, OnWindowPaintScheduled(view_->window_, view_rect));
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, view_rect.size(), view_rect));
+ testing::Mock::VerifyAndClearExpectations(&observer);
+ view_->RunOnCompositingDidCommit();
+
view_->window_->RemoveObserver(&observer);
}
@@ -1092,8 +1190,6 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
hosts[i] = new RenderWidgetHostImpl(
&delegate_, process_host_, MSG_ROUTING_NONE, false);
hosts[i]->Init();
- hosts[i]->OnMessageReceived(
- ViewHostMsg_DidActivateAcceleratedCompositing(0, true));
views[i] = new FakeRenderWidgetHostViewAura(hosts[i]);
views[i]->InitAsChild(NULL);
aura::client::ParentWindowWithContext(
@@ -1221,8 +1317,6 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFramesWithLocking) {
hosts[i] = new RenderWidgetHostImpl(
&delegate_, process_host_, MSG_ROUTING_NONE, false);
hosts[i]->Init();
- hosts[i]->OnMessageReceived(
- ViewHostMsg_DidActivateAcceleratedCompositing(0, true));
views[i] = new FakeRenderWidgetHostViewAura(hosts[i]);
views[i]->InitAsChild(NULL);
aura::client::ParentWindowWithContext(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index c7eafc246f..28a2fcd5fb 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -367,6 +367,7 @@ const int kFlushInputRateInUs = 16666;
RenderWidgetHostViewBase::RenderWidgetHostViewBase()
: popup_type_(blink::WebPopupTypeNone),
+ background_opaque_(true),
mouse_locked_(false),
showing_context_menu_(false),
selection_text_offset_(0),
@@ -385,19 +386,19 @@ bool RenderWidgetHostViewBase::OnMessageReceived(const IPC::Message& msg){
return false;
}
-void RenderWidgetHostViewBase::SetBackground(const SkBitmap& background) {
- background_ = background;
+void RenderWidgetHostViewBase::SetBackgroundOpaque(bool opaque) {
+ background_opaque_ = opaque;
}
-const SkBitmap& RenderWidgetHostViewBase::GetBackground() {
- return background_;
+bool RenderWidgetHostViewBase::GetBackgroundOpaque() {
+ return background_opaque_;
}
gfx::Size RenderWidgetHostViewBase::GetPhysicalBackingSize() const {
gfx::NativeView view = GetNativeView();
gfx::Display display =
gfx::Screen::GetScreenFor(view)->GetDisplayNearestWindow(view);
- return gfx::ToCeiledSize(gfx::ScaleSize(GetViewBounds().size(),
+ return gfx::ToCeiledSize(gfx::ScaleSize(GetRequestedRendererSize(),
display.device_scale_factor()));
}
@@ -414,6 +415,10 @@ void RenderWidgetHostViewBase::SelectionChanged(const base::string16& text,
selection_range_.set_end(range.end());
}
+gfx::Size RenderWidgetHostViewBase::GetRequestedRendererSize() const {
+ return GetViewBounds().size();
+}
+
ui::TextInputClient* RenderWidgetHostViewBase::GetTextInputClient() {
NOTREACHED();
return NULL;
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 42f021faaa..edcb0cc355 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -53,8 +53,9 @@ class BrowserAccessibilityManager;
class SyntheticGesture;
class SyntheticGestureTarget;
class WebCursor;
-struct WebPluginGeometry;
+struct DidOverscrollParams;
struct NativeWebKeyboardEvent;
+struct WebPluginGeometry;
// Basic implementation shared by concrete RenderWidgetHostView subclasses.
class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
@@ -63,8 +64,8 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
virtual ~RenderWidgetHostViewBase();
// RenderWidgetHostView implementation.
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
- virtual const SkBitmap& GetBackground() OVERRIDE;
+ virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
+ virtual bool GetBackgroundOpaque() OVERRIDE;
virtual ui::TextInputClient* GetTextInputClient() OVERRIDE;
virtual bool IsShowingContextMenu() const OVERRIDE;
virtual void SetShowingContextMenu(bool showing_menu) OVERRIDE;
@@ -118,6 +119,10 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
size_t offset,
const gfx::Range& range);
+ // The requested size of the renderer. May differ from GetViewBounds().size()
+ // when the view requires additional throttling.
+ virtual gfx::Size GetRequestedRendererSize() const;
+
// The size of the view's backing surface in non-DPI-adjusted pixels.
virtual gfx::Size GetPhysicalBackingSize() const;
@@ -171,6 +176,8 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
virtual void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch,
InputEventAckState ack_result) {}
+ virtual void DidOverscroll(const DidOverscrollParams& params) {}
+
virtual void DidStopFlinging() {}
//----------------------------------------------------------------------------
@@ -276,8 +283,6 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
// IsSurfaceAvailableForCopy() and HasAcceleratedSurface().
virtual bool CanCopyToVideoFrame() const = 0;
- // Called when accelerated compositing state changes.
- virtual void OnAcceleratedCompositingStateChange() = 0;
// Called when an accelerated compositing surface is initialized.
virtual void AcceleratedSurfaceInitialized(int host_id, int route_id) = 0;
// |params.window| and |params.surface_id| indicate which accelerated
@@ -319,9 +324,6 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
virtual void ShowDisambiguationPopup(const gfx::Rect& target_rect,
const SkBitmap& zoomed_bitmap) = 0;
- // Notifies the View that the renderer selection root bounds has changed.
- virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) = 0;
-
// Instructs the view to not drop the surface even when the view is hidden.
virtual void LockCompositingSurface() = 0;
virtual void UnlockCompositingSurface() = 0;
@@ -379,9 +381,8 @@ class CONTENT_EXPORT RenderWidgetHostViewBase : public RenderWidgetHostView,
// autofill...).
blink::WebPopupType popup_type_;
- // A custom background to paint behind the web content. This will be tiled
- // horizontally. Can be null, in which case we fall back to painting white.
- SkBitmap background_;
+ // When false, the background of the web content is not fully opaque.
+ bool background_opaque_;
// While the mouse is locked, the cursor is hidden from the user. Mouse events
// are still generated. However, the position they report is the last known
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
index 3c2de9970b..2a549850cc 100644
--- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
@@ -27,6 +27,7 @@
#include "net/base/filename_util.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/base/layout.h"
#include "ui/base/ui_base_switches.h"
#include "ui/gfx/size_conversions.h"
#include "ui/gfx/switches.h"
@@ -54,16 +55,6 @@ namespace {
return; \
}
-// Convenience macro: Short-circuit a pass for platforms where setting up
-// high-DPI fails.
-#define PASS_TEST_IF_SCALE_FACTOR_NOT_SUPPORTED(factor) \
- if (ui::GetScaleForScaleFactor( \
- GetScaleFactorForView(GetRenderWidgetHostView())) != factor) { \
- LOG(WARNING) << "Blindly passing this test: failed to set up " \
- "scale factor: " << factor; \
- return false; \
- }
-
// Common base class for browser tests. This is subclassed twice: Once to test
// the browser in forced-compositing mode, and once to test with compositing
// mode disabled.
@@ -246,13 +237,7 @@ class CompositingRenderWidgetHostViewBrowserTest
}
}
-#if !defined(USE_AURA)
- if (!GetRenderWidgetHost()->is_accelerated_compositing_active())
- return false; // Renderer did not turn on accelerated compositing.
-#endif
-
- // Using accelerated compositing, but a compositing surface might not be
- // available yet. So, wait for it.
+ // A frame might not be available yet. So, wait for it.
WaitForCopySourceReady();
return true;
}
@@ -816,7 +801,13 @@ class CompositingRenderWidgetHostViewTabCaptureHighDPI
private:
virtual bool ShouldContinueAfterTestURLLoad() OVERRIDE {
- PASS_TEST_IF_SCALE_FACTOR_NOT_SUPPORTED(scale());
+ // Short-circuit a pass for platforms where setting up high-DPI fails.
+ if (ui::GetScaleForScaleFactor(ui::GetSupportedScaleFactor(
+ GetScaleFactorForView(GetRenderWidgetHostView()))) != scale()) {
+ LOG(WARNING) << "Blindly passing this test: failed to set up "
+ "scale factor: " << scale();
+ return false;
+ }
return true;
}
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 96262595f9..6dd7d6660d 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -16,6 +16,8 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
+#include "content/browser/compositor/delegated_frame_host.h"
+#include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
#include "content/browser/renderer_host/display_link_mac.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/renderer_host/software_frame_manager.h"
@@ -35,9 +37,16 @@ class RenderWidgetHostViewMacEditCommandHelper;
class WebContents;
}
+namespace ui {
+class Compositor;
+class Layer;
+}
+
+@class BrowserCompositorViewMac;
@class CompositingIOSurfaceLayer;
@class FullscreenWindowManager;
@protocol RenderWidgetHostViewMacDelegate;
+@class SoftwareLayer;
@class ToolTip;
@protocol RenderWidgetHostViewMacOwner
@@ -180,19 +189,6 @@ class WebContents;
actualRange:(NSRangePointer)actualRange;
@end
-@interface SoftwareLayer : CALayer {
- @private
- content::RenderWidgetHostViewMac* renderWidgetHostView_;
-}
-
-- (id)initWithRenderWidgetHostViewMac:(content::RenderWidgetHostViewMac*)r;
-
-// Invalidate the RenderWidgetHostViewMac because it may be going away. If
-// displayed again, it will draw white.
-- (void)disableRendering;
-
-@end
-
namespace content {
class RenderWidgetHostImpl;
@@ -214,8 +210,10 @@ class RenderWidgetHostImpl;
// RenderWidgetHostView class hierarchy described in render_widget_host_view.h.
class CONTENT_EXPORT RenderWidgetHostViewMac
: public RenderWidgetHostViewBase,
+ public DelegatedFrameHostClient,
public IPC::Sender,
- public SoftwareFrameManagerClient {
+ public SoftwareFrameManagerClient,
+ public CompositingIOSurfaceLayerClient {
public:
// The view will associate itself with the given widget. The native view must
// be hooked up immediately to the view hierarchy, or else when it is
@@ -257,7 +255,7 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
virtual void SpeakSelection() OVERRIDE;
virtual bool IsSpeaking() const OVERRIDE;
virtual void StopSpeaking() OVERRIDE;
- virtual void SetBackground(const SkBitmap& background) OVERRIDE;
+ virtual void SetBackgroundOpaque(bool opaque) OVERRIDE;
// Implementation of RenderWidgetHostViewBase.
virtual void InitAsPopup(RenderWidgetHostView* parent_host_view,
@@ -305,7 +303,6 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
virtual void EndFrameSubscription() OVERRIDE;
virtual void OnSwapCompositorFrame(
uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) OVERRIDE;
- virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
virtual void CreateBrowserAccessibilityManagerIfNeeded() OVERRIDE;
@@ -346,6 +343,10 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
virtual SkBitmap::Config PreferredReadbackFormat() OVERRIDE;
+ // CompositingIOSurfaceLayerClient implementation.
+ virtual void AcceleratedLayerDidDrawFrame(bool succeeded) OVERRIDE;
+ virtual bool AcceleratedLayerHasNotAckedPendingFrame() const OVERRIDE;
+
// Forwards the mouse event to the renderer.
void ForwardMouseEvent(const blink::WebMouseEvent& event);
@@ -440,13 +441,13 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
// Accelerated compositing structures. These may be dynamically created and
// destroyed together in Create/DestroyCompositedIOSurfaceAndLayer.
base::scoped_nsobject<CompositingIOSurfaceLayer> compositing_iosurface_layer_;
- scoped_ptr<CompositingIOSurfaceMac> compositing_iosurface_;
+ scoped_refptr<CompositingIOSurfaceMac> compositing_iosurface_;
scoped_refptr<CompositingIOSurfaceContext> compositing_iosurface_context_;
- // Timer used to dynamically transition the compositing layer in and out of
- // asynchronous mode.
- base::DelayTimer<RenderWidgetHostViewMac>
- compositing_iosurface_layer_async_timer_;
+ // Delegated frame management and compositior.
+ base::scoped_nsobject<BrowserCompositorViewMac> browser_compositor_view_;
+ scoped_ptr<DelegatedFrameHost> delegated_frame_host_;
+ scoped_ptr<ui::Layer> root_layer_;
// This holds the current software compositing framebuffer, if any.
scoped_ptr<SoftwareFrameManager> software_frame_manager_;
@@ -512,7 +513,19 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
// update the scale factor of the layers.
void LayoutLayers();
- bool HasPendingSwapAck() const { return pending_swap_ack_; }
+ // DelegatedFrameHostClient implementation.
+ virtual ui::Compositor* GetCompositor() const OVERRIDE;
+ virtual ui::Layer* GetLayer() OVERRIDE;
+ virtual RenderWidgetHostImpl* GetHost() OVERRIDE;
+ virtual void SchedulePaintInRect(
+ const gfx::Rect& damage_rect_in_dip) OVERRIDE;
+ virtual bool IsVisible() OVERRIDE;
+ virtual scoped_ptr<ResizeLock> CreateResizeLock(
+ bool defer_compositor_lock) OVERRIDE;
+ virtual gfx::Size DesiredFrameSize() OVERRIDE;
+ virtual float CurrentDeviceScaleFactor() OVERRIDE;
+ virtual gfx::Size ConvertViewSizeToPixel(const gfx::Size& size) OVERRIDE;
+ virtual DelegatedFrameHost* GetDelegatedFrameHost() const OVERRIDE;
private:
friend class RenderWidgetHostViewMacTest;
@@ -565,10 +578,6 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
// Called when a software DIB is received.
void GotSoftwareFrame();
- // Called if it has been a quarter-second since a GPU SwapBuffers has been
- // received. In this case, switch from polling for frames to pushing them.
- void TimerSinceGotAcceleratedFrameFired();
-
// IPC message handlers.
void OnPluginFocusChanged(bool focused, int plugin_id);
void OnStartPluginIme();
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 2e89069f89..ce8931ddc5 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -27,15 +27,19 @@
#include "base/sys_info.h"
#import "content/browser/accessibility/browser_accessibility_cocoa.h"
#include "content/browser/accessibility/browser_accessibility_manager_mac.h"
+#include "content/browser/compositor/browser_compositor_view_mac.h"
+#include "content/browser/compositor/resize_lock.h"
#include "content/browser/frame_host/frame_tree.h"
#include "content/browser/frame_host/frame_tree_node.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/renderer_host/compositing_iosurface_context_mac.h"
#include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
#include "content/browser/renderer_host/compositing_iosurface_mac.h"
+#include "content/browser/renderer_host/render_widget_helper.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h"
#import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h"
+#import "content/browser/renderer_host/software_layer_mac.h"
#import "content/browser/renderer_host/text_input_client_mac.h"
#include "content/common/accessibility_messages.h"
#include "content/common/edit_command.h"
@@ -61,6 +65,8 @@
#import "ui/base/cocoa/underlay_opengl_hosting_window.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/base/layout.h"
+#include "ui/compositor/compositor.h"
+#include "ui/compositor/layer.h"
#include "ui/gfx/display.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect_conversions.h"
@@ -108,6 +114,20 @@ static NSString* const NSWindowDidChangeBackingPropertiesNotification =
#endif // 10.7
+// Declare things that are part of the 10.9 SDK.
+#if !defined(MAC_OS_X_VERSION_10_9) || \
+ MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9
+enum {
+ NSWindowOcclusionStateVisible = 1UL << 1,
+};
+typedef NSUInteger NSWindowOcclusionState;
+
+@interface NSWindow (MavericksAPI)
+- (NSWindowOcclusionState)occlusionState;
+@end
+
+#endif // 10.9
+
// This method will return YES for OS X versions 10.7.3 and later, and NO
// otherwise.
// Used to prevent a crash when building with the 10.7 SDK and accessing the
@@ -131,10 +151,6 @@ static BOOL SupportsBackingPropertiesChangedNotification() {
return methodDescription.name != NULL || methodDescription.types != NULL;
}
-static float ScaleFactorForView(NSView* view) {
- return ui::GetImageScale(ui::GetScaleFactorForNativeView(view));
-}
-
// Private methods:
@interface RenderWidgetHostViewCocoa ()
@property(nonatomic, assign) NSRange selectedRange;
@@ -392,6 +408,55 @@ void RemoveLayerFromSuperlayer(
namespace content {
+////////////////////////////////////////////////////////////////////////////////
+// DelegatedFrameHost, public:
+
+ui::Compositor* RenderWidgetHostViewMac::GetCompositor() const {
+ return [browser_compositor_view_ compositor];
+}
+
+ui::Layer* RenderWidgetHostViewMac::GetLayer() {
+ return root_layer_.get();
+}
+
+RenderWidgetHostImpl* RenderWidgetHostViewMac::GetHost() {
+ return render_widget_host_;
+}
+
+void RenderWidgetHostViewMac::SchedulePaintInRect(
+ const gfx::Rect& damage_rect_in_dip) {
+ [browser_compositor_view_ compositor]->Draw();
+}
+
+bool RenderWidgetHostViewMac::IsVisible() {
+ return !render_widget_host_->is_hidden();
+}
+
+gfx::Size RenderWidgetHostViewMac::DesiredFrameSize() {
+ return GetViewBounds().size();
+}
+
+float RenderWidgetHostViewMac::CurrentDeviceScaleFactor() {
+ return ViewScaleFactor();
+}
+
+gfx::Size RenderWidgetHostViewMac::ConvertViewSizeToPixel(
+ const gfx::Size& size) {
+ return gfx::ToEnclosingRect(gfx::ScaleRect(gfx::Rect(size),
+ ViewScaleFactor())).size();
+}
+
+scoped_ptr<ResizeLock> RenderWidgetHostViewMac::CreateResizeLock(
+ bool defer_compositor_lock) {
+ NOTREACHED();
+ ResizeLock* lock = NULL;
+ return scoped_ptr<ResizeLock>(lock);
+}
+
+DelegatedFrameHost* RenderWidgetHostViewMac::GetDelegatedFrameHost() const {
+ return delegated_frame_host_.get();
+}
+
///////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostViewBase, public:
@@ -409,9 +474,6 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
last_frame_was_accelerated_(false),
text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
can_compose_inline_(true),
- compositing_iosurface_layer_async_timer_(
- FROM_HERE, base::TimeDelta::FromMilliseconds(250),
- this, &RenderWidgetHostViewMac::TimerSinceGotAcceleratedFrameFired),
allow_overlapping_views_(false),
use_core_animation_(false),
pending_latency_info_delay_(0),
@@ -448,6 +510,10 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
// pointer.
cocoa_view_ = nil;
+ // Delete the delegated frame state.
+ delegated_frame_host_.reset();
+ root_layer_.reset();
+
UnlockMouse();
// Make sure that the layer doesn't reach into the now-invalid object.
@@ -524,7 +590,7 @@ bool RenderWidgetHostViewMac::EnsureCompositedIOSurface() {
// Create the IOSurface texture.
if (new_surface_needed) {
- compositing_iosurface_.reset(CompositingIOSurfaceMac::Create());
+ compositing_iosurface_ = CompositingIOSurfaceMac::Create();
if (!compositing_iosurface_) {
LOG(ERROR) << "Failed to create CompositingIOSurface";
return false;
@@ -539,8 +605,7 @@ void RenderWidgetHostViewMac::EnsureSoftwareLayer() {
if (software_layer_ || !use_core_animation_)
return;
- software_layer_.reset([[SoftwareLayer alloc]
- initWithRenderWidgetHostViewMac:this]);
+ software_layer_.reset([[SoftwareLayer alloc] init]);
DCHECK(software_layer_);
// Disable the fade-in animation as the layer is added.
@@ -555,7 +620,6 @@ void RenderWidgetHostViewMac::DestroySoftwareLayer() {
// Disable the fade-out animation as the layer is removed.
ScopedCAActionDisabler disabler;
[software_layer_ removeFromSuperlayer];
- [software_layer_ disableRendering];
software_layer_.reset();
}
@@ -567,7 +631,8 @@ void RenderWidgetHostViewMac::EnsureCompositedIOSurfaceLayer() {
return;
compositing_iosurface_layer_.reset([[CompositingIOSurfaceLayer alloc]
- initWithRenderWidgetHostViewMac:this]);
+ initWithIOSurface:compositing_iosurface_
+ withClient:this]);
DCHECK(compositing_iosurface_layer_);
// Disable the fade-in animation as the layer is added.
@@ -585,7 +650,7 @@ void RenderWidgetHostViewMac::DestroyCompositedIOSurfaceLayer(
ScopedCAActionDisabler disabler;
[compositing_iosurface_layer_ removeFromSuperlayer];
}
- [compositing_iosurface_layer_ disableCompositing];
+ [compositing_iosurface_layer_ resetClient];
compositing_iosurface_layer_.reset();
}
@@ -595,7 +660,7 @@ void RenderWidgetHostViewMac::DestroyCompositedIOSurfaceAndLayer(
SendPendingSwapAck();
DestroyCompositedIOSurfaceLayer(kRemoveLayerFromHierarchy);
- compositing_iosurface_.reset();
+ compositing_iosurface_ = NULL;
switch (destroy_context_behavior) {
case kLeaveContextBoundToView:
@@ -737,7 +802,7 @@ int RenderWidgetHostViewMac::window_number() const {
}
float RenderWidgetHostViewMac::ViewScaleFactor() const {
- return ScaleFactorForView(cocoa_view_);
+ return ui::GetScaleFactorForNativeView(cocoa_view_);
}
void RenderWidgetHostViewMac::UpdateDisplayLink() {
@@ -775,7 +840,7 @@ void RenderWidgetHostViewMac::UpdateBackingStoreScaleFactor() {
if (!render_widget_host_)
return;
- float new_scale_factor = ScaleFactorForView(cocoa_view_);
+ float new_scale_factor = ui::GetScaleFactorForNativeView(cocoa_view_);
if (new_scale_factor == backing_store_scale_factor_)
return;
backing_store_scale_factor_ = new_scale_factor;
@@ -795,10 +860,11 @@ void RenderWidgetHostViewMac::WasShown() {
web_contents_switch_paint_time_ = base::TimeTicks::Now();
render_widget_host_->WasShown();
software_frame_manager_->SetVisibility(true);
+ if (delegated_frame_host_)
+ delegated_frame_host_->WasShown();
// Call setNeedsDisplay before pausing for new frames to come in -- if any
// do, and are drawn, then the needsDisplay bit will be cleared.
- [software_layer_ setNeedsDisplay];
[compositing_iosurface_layer_ setNeedsDisplay];
PauseForPendingResizeOrRepaintsAndDraw();
@@ -819,6 +885,8 @@ void RenderWidgetHostViewMac::WasHidden() {
// reduce its resource utilization.
render_widget_host_->WasHidden();
software_frame_manager_->SetVisibility(false);
+ if (delegated_frame_host_)
+ delegated_frame_host_->WasHidden();
// There can be a transparent flash as this view is removed and the next is
// added, because of OSX windowing races between displaying the contents of
@@ -920,6 +988,9 @@ bool RenderWidgetHostViewMac::HasFocus() const {
}
bool RenderWidgetHostViewMac::IsSurfaceAvailableForCopy() const {
+ if (delegated_frame_host_)
+ return delegated_frame_host_->CanCopyToBitmap();
+
return software_frame_manager_->HasCurrentFrame() ||
(compositing_iosurface_ && compositing_iosurface_->HasIOSurface());
}
@@ -1160,13 +1231,19 @@ void RenderWidgetHostViewMac::CopyFromCompositingSurface(
const gfx::Size& dst_size,
const base::Callback<void(bool, const SkBitmap&)>& callback,
const SkBitmap::Config config) {
+ if (delegated_frame_host_) {
+ delegated_frame_host_->CopyFromCompositingSurface(
+ src_subrect, dst_size, callback, config);
+ return;
+ }
+
if (config != SkBitmap::kARGB_8888_Config) {
NOTIMPLEMENTED();
callback.Run(false, SkBitmap());
}
base::ScopedClosureRunner scoped_callback_runner(
base::Bind(callback, false, SkBitmap()));
- float scale = ScaleFactorForView(cocoa_view_);
+ float scale = ui::GetScaleFactorForNativeView(cocoa_view_);
gfx::Size dst_pixel_size = gfx::ToFlooredSize(
gfx::ScaleSize(dst_size, scale));
if (compositing_iosurface_ && compositing_iosurface_->HasIOSurface()) {
@@ -1210,6 +1287,8 @@ void RenderWidgetHostViewMac::CopyFromCompositingSurface(
ignore_result(scoped_callback_runner.Release());
callback.Run(true, target_bitmap);
+ } else {
+ callback.Run(false, SkBitmap());
}
}
@@ -1217,10 +1296,14 @@ void RenderWidgetHostViewMac::CopyFromCompositingSurfaceToVideoFrame(
const gfx::Rect& src_subrect,
const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) {
+ if (delegated_frame_host_) {
+ delegated_frame_host_->CopyFromCompositingSurfaceToVideoFrame(
+ src_subrect, target, callback);
+ return;
+ }
+
base::ScopedClosureRunner scoped_callback_runner(base::Bind(callback, false));
- if (!render_widget_host_->is_accelerated_compositing_active() ||
- !compositing_iosurface_ ||
- !compositing_iosurface_->HasIOSurface())
+ if (!compositing_iosurface_ || !compositing_iosurface_->HasIOSurface())
return;
if (!target.get()) {
@@ -1245,22 +1328,36 @@ void RenderWidgetHostViewMac::CopyFromCompositingSurfaceToVideoFrame(
}
bool RenderWidgetHostViewMac::CanCopyToVideoFrame() const {
+ if (delegated_frame_host_)
+ return delegated_frame_host_->CanCopyToVideoFrame();
+
return (!software_frame_manager_->HasCurrentFrame() &&
- render_widget_host_->is_accelerated_compositing_active() &&
compositing_iosurface_ &&
compositing_iosurface_->HasIOSurface());
}
bool RenderWidgetHostViewMac::CanSubscribeFrame() const {
+ if (delegated_frame_host_)
+ return delegated_frame_host_->CanSubscribeFrame();
+
return !software_frame_manager_->HasCurrentFrame();
}
void RenderWidgetHostViewMac::BeginFrameSubscription(
scoped_ptr<RenderWidgetHostViewFrameSubscriber> subscriber) {
+ if (delegated_frame_host_) {
+ delegated_frame_host_->BeginFrameSubscription(subscriber.Pass());
+ return;
+ }
frame_subscriber_ = subscriber.Pass();
}
void RenderWidgetHostViewMac::EndFrameSubscription() {
+ if (delegated_frame_host_) {
+ delegated_frame_host_->EndFrameSubscription();
+ return;
+ }
+
frame_subscriber_.reset();
}
@@ -1433,12 +1530,25 @@ void RenderWidgetHostViewMac::CompositorSwapBuffers(
return;
}
+ // If the window is occluded, then this frame's display call may be severely
+ // throttled. This is a good thing, unless tab capture may be active,
+ // because the broadcast will be inappropriately throttled.
+ // http://crbug.com/350410
+ NSWindow* window = [cocoa_view_ window];
+ if (window && [window respondsToSelector:@selector(occlusionState)]) {
+ bool window_is_occluded =
+ !([window occlusionState] & NSWindowOcclusionStateVisible);
+ // Note that we aggressively ack even if this particular frame is not being
+ // captured.
+ if (window_is_occluded && frame_subscriber_)
+ scoped_ack.Reset();
+ }
+
// If we reach here, then the frame will be displayed by a future draw
// call, so don't make the callback.
ignore_result(scoped_ack.Release());
if (use_core_animation_) {
DCHECK(compositing_iosurface_layer_);
- compositing_iosurface_layer_async_timer_.Reset();
[compositing_iosurface_layer_ gotNewFrame];
} else {
gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
@@ -1778,46 +1888,82 @@ bool RenderWidgetHostViewMac::HasAcceleratedSurface(
void RenderWidgetHostViewMac::OnSwapCompositorFrame(
uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) {
- // Only software compositor frames are accepted.
- if (!frame->software_frame_data) {
- DLOG(ERROR) << "Received unexpected frame type.";
- RecordAction(
- base::UserMetricsAction("BadMessageTerminate_UnexpectedFrameType"));
- render_widget_host_->GetProcess()->ReceivedBadMessage();
- return;
- }
+ TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
+
+ if (frame->delegated_frame_data) {
+ if (!browser_compositor_view_) {
+ browser_compositor_view_.reset(
+ [[BrowserCompositorViewMac alloc] initWithSuperview:cocoa_view_]);
+ root_layer_.reset(new ui::Layer(ui::LAYER_TEXTURED));
+ delegated_frame_host_.reset(new DelegatedFrameHost(this));
+ [browser_compositor_view_ compositor]->SetRootLayer(root_layer_.get());
+ }
- if (!software_frame_manager_->SwapToNewFrame(
- output_surface_id,
- frame->software_frame_data.get(),
- frame->metadata.device_scale_factor,
- render_widget_host_->GetProcess()->GetHandle())) {
- render_widget_host_->GetProcess()->ReceivedBadMessage();
- return;
- }
+ float scale_factor = frame->metadata.device_scale_factor;
+ gfx::Size dip_size = ToCeiledSize(frame->metadata.viewport_size);
+ gfx::Size pixel_size = ConvertSizeToPixel(
+ scale_factor, dip_size);
+ [browser_compositor_view_ compositor]->SetScaleAndSize(
+ scale_factor, pixel_size);
+ root_layer_->SetBounds(gfx::Rect(dip_size));
+
+ delegated_frame_host_->SwapDelegatedFrame(
+ output_surface_id,
+ frame->delegated_frame_data.Pass(),
+ frame->metadata.device_scale_factor,
+ frame->metadata.latency_info);
+ } else if (frame->software_frame_data) {
+ if (!software_frame_manager_->SwapToNewFrame(
+ output_surface_id,
+ frame->software_frame_data.get(),
+ frame->metadata.device_scale_factor,
+ render_widget_host_->GetProcess()->GetHandle())) {
+ render_widget_host_->GetProcess()->ReceivedBadMessage();
+ return;
+ }
- // Add latency info to report when the frame finishes drawing.
- AddPendingLatencyInfo(frame->metadata.latency_info);
- GotSoftwareFrame();
+ // Add latency info to report when the frame finishes drawing.
+ AddPendingLatencyInfo(frame->metadata.latency_info);
- cc::CompositorFrameAck ack;
- RenderWidgetHostImpl::SendSwapCompositorFrameAck(
- render_widget_host_->GetRoutingID(),
- software_frame_manager_->GetCurrentFrameOutputSurfaceId(),
- render_widget_host_->GetProcess()->GetID(),
- ack);
- software_frame_manager_->SwapToNewFrameComplete(
- !render_widget_host_->is_hidden());
+ if (use_core_animation_) {
+ const void* pixels = software_frame_manager_->GetCurrentFramePixels();
+ gfx::Size size_in_pixels =
+ software_frame_manager_->GetCurrentFrameSizeInPixels();
- // Notify observers, tab capture observers in particular, that a new software
- // frame has come in.
- NotificationService::current()->Notify(
- NOTIFICATION_RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE,
- Source<RenderWidgetHost>(render_widget_host_),
- NotificationService::NoDetails());
-}
+ EnsureSoftwareLayer();
+ [software_layer_ setContentsToData:pixels
+ withRowBytes:4 * size_in_pixels.width()
+ withPixelSize:size_in_pixels
+ withScaleFactor:frame->metadata.device_scale_factor];
-void RenderWidgetHostViewMac::OnAcceleratedCompositingStateChange() {
+ // Send latency information to the host immediately, as there will be no
+ // subsequent draw call in which to do so.
+ SendPendingLatencyInfoToHost();
+ }
+
+ GotSoftwareFrame();
+
+ cc::CompositorFrameAck ack;
+ RenderWidgetHostImpl::SendSwapCompositorFrameAck(
+ render_widget_host_->GetRoutingID(),
+ software_frame_manager_->GetCurrentFrameOutputSurfaceId(),
+ render_widget_host_->GetProcess()->GetID(),
+ ack);
+ software_frame_manager_->SwapToNewFrameComplete(
+ !render_widget_host_->is_hidden());
+
+ // Notify observers, tab capture observers in particular, that a new
+ // software frame has come in.
+ NotificationService::current()->Notify(
+ NOTIFICATION_RENDER_WIDGET_HOST_DID_UPDATE_BACKING_STORE,
+ Source<RenderWidgetHost>(render_widget_host_),
+ NotificationService::NoDetails());
+ } else {
+ DLOG(ERROR) << "Received unexpected frame type.";
+ RecordAction(
+ base::UserMetricsAction("BadMessageTerminate_UnexpectedFrameType"));
+ render_widget_host_->GetProcess()->ReceivedBadMessage();
+ }
}
void RenderWidgetHostViewMac::AcceleratedSurfaceInitialized(int host_id,
@@ -1938,6 +2084,8 @@ void RenderWidgetHostViewMac::GotAcceleratedFrame() {
}
void RenderWidgetHostViewMac::GotSoftwareFrame() {
+ TRACE_EVENT0("browser", "RenderWidgetHostViewMac::GotSoftwareFrame");
+
if (!render_widget_host_)
return;
@@ -1949,7 +2097,6 @@ void RenderWidgetHostViewMac::GotSoftwareFrame() {
// happen before the frame be acked, otherwise the new frame will likely be
// ready before the drawing is complete, thrashing the browser main thread.
if (use_core_animation_) {
- [software_layer_ setNeedsDisplay];
[software_layer_ displayIfNeeded];
} else {
[cocoa_view_ setNeedsDisplay:YES];
@@ -1979,10 +2126,6 @@ void RenderWidgetHostViewMac::GotSoftwareFrame() {
}
}
-void RenderWidgetHostViewMac::TimerSinceGotAcceleratedFrameFired() {
- [compositing_iosurface_layer_ timerSinceGotNewFrameFired];
-}
-
void RenderWidgetHostViewMac::SetActive(bool active) {
if (render_widget_host_) {
render_widget_host_->SetActive(active);
@@ -2027,11 +2170,10 @@ void RenderWidgetHostViewMac::ShowDefinitionForSelection() {
helper.ShowDefinitionForSelection();
}
-void RenderWidgetHostViewMac::SetBackground(const SkBitmap& background) {
- RenderWidgetHostViewBase::SetBackground(background);
+void RenderWidgetHostViewMac::SetBackgroundOpaque(bool opaque) {
+ RenderWidgetHostViewBase::SetBackgroundOpaque(opaque);
if (render_widget_host_)
- render_widget_host_->Send(new ViewMsg_SetBackground(
- render_widget_host_->GetRoutingID(), background));
+ render_widget_host_->SetBackgroundOpaque(opaque);
}
void RenderWidgetHostViewMac::CreateBrowserAccessibilityManagerIfNeeded() {
@@ -2195,15 +2337,14 @@ void RenderWidgetHostViewMac::TickPendingLatencyInfoDelay() {
[compositing_iosurface_layer_ gotNewFrame];
}
if (software_layer_) {
- // In software mode, setNeedsDisplay will almost immediately result in the
- // layer's draw function being called, so manually insert a pretend-vsync
- // at 60 Hz.
+ // In software mode there is not an explicit setNeedsDisplay/display loop,
+ // so just wait a pretend-vsync at 60 Hz.
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE,
base::Bind(&RenderWidgetHostViewMac::TickPendingLatencyInfoDelay,
pending_latency_info_delay_weak_ptr_factory_.GetWeakPtr()),
base::TimeDelta::FromMilliseconds(1000/60));
- [software_layer_ setNeedsDisplay];
+ SendPendingLatencyInfoToHost();
}
}
@@ -2216,7 +2357,8 @@ void RenderWidgetHostViewMac::AddPendingSwapAck(
// A trace value of 2 indicates that there is a pending swap ack. See
// CompositingIOSurfaceLayer's canDrawInCGLContext for other value meanings.
- TRACE_COUNTER_ID1("browser", "PendingSwapAck", this, 2);
+ TRACE_COUNTER_ID1("browser", "PendingSwapAck",
+ compositing_iosurface_layer_.get(), 2);
}
void RenderWidgetHostViewMac::SendPendingSwapAck() {
@@ -2237,14 +2379,10 @@ void RenderWidgetHostViewMac::PauseForPendingResizeOrRepaintsAndDraw() {
if (!render_widget_host_ || render_widget_host_->is_hidden())
return;
- // Pausing for the overlay view prevents the underlay from receiving
- // frames. This may lead to large delays, causing overlaps. If both
- // overlay and underlay resize at the same time, let them both to have
- // some time waiting. See crbug.com/352020.
- if (underlay_view_ &&
- underlay_view_->render_widget_host_ &&
- !underlay_view_->render_widget_host_->
- CanPauseForPendingResizeOrRepaints())
+ // Pausing for the overlay/underlay view prevents the other one from receiving
+ // frames. This may lead to large delays, causing overlaps.
+ // See crbug.com/352020.
+ if (underlay_view_ || overlay_view_)
return;
// Ensure that all frames are acked before waiting for a frame to come in.
@@ -2266,6 +2404,11 @@ void RenderWidgetHostViewMac::LayoutLayers() {
if (!use_core_animation_)
return;
+ if (browser_compositor_view_) {
+ [browser_compositor_view_ layoutLayers];
+ return;
+ }
+
// Disable animation of the layer's resizing or change in contents scale.
ScopedCAActionDisabler disabler;
@@ -2313,17 +2456,6 @@ void RenderWidgetHostViewMac::LayoutLayers() {
}
}
- // Dynamically update the software layer's contents scale to match the
- // software frame.
- if (software_frame_manager_->HasCurrentFrame() &&
- [software_layer_ respondsToSelector:(@selector(contentsScale))] &&
- [software_layer_ respondsToSelector:(@selector(setContentsScale:))]) {
- if (software_frame_manager_->GetCurrentFrameDeviceScaleFactor() !=
- [software_layer_ contentsScale]) {
- [software_layer_ setContentsScale:
- software_frame_manager_->GetCurrentFrameDeviceScaleFactor()];
- }
- }
// Changing the software layer's bounds and position doesn't always result
// in the layer being anchored to the top-left. Set the layer's frame
// explicitly, since this is more reliable in practice.
@@ -2332,7 +2464,6 @@ void RenderWidgetHostViewMac::LayoutLayers() {
new_background_frame, [software_layer_ frame]);
if (frame_changed) {
[software_layer_ setFrame:new_background_frame];
- [software_layer_ setNeedsDisplay];
}
}
}
@@ -2341,6 +2472,20 @@ SkBitmap::Config RenderWidgetHostViewMac::PreferredReadbackFormat() {
return SkBitmap::kARGB_8888_Config;
}
+////////////////////////////////////////////////////////////////////////////////
+// CompositingIOSurfaceLayerClient, public:
+
+void RenderWidgetHostViewMac::AcceleratedLayerDidDrawFrame(bool succeeded) {
+ SendPendingLatencyInfoToHost();
+ SendPendingSwapAck();
+ if (!succeeded)
+ GotAcceleratedCompositingError();
+}
+
+bool RenderWidgetHostViewMac::AcceleratedLayerHasNotAckedPendingFrame() const {
+ return pending_swap_ack_;
+}
+
} // namespace content
// RenderWidgetHostViewCocoa ---------------------------------------------------
@@ -2361,7 +2506,7 @@ SkBitmap::Config RenderWidgetHostViewMac::PreferredReadbackFormat() {
canBeKeyView_ = YES;
focusedPluginIdentifier_ = -1;
renderWidgetHostView_->backing_store_scale_factor_ =
- ScaleFactorForView(self);
+ ui::GetScaleFactorForNativeView(self);
// OpenGL support:
if ([self respondsToSelector:
@@ -3114,6 +3259,8 @@ SkBitmap::Config RenderWidgetHostViewMac::PreferredReadbackFormat() {
renderWidgetHostView_->render_widget_host_->SendScreenRects();
renderWidgetHostView_->render_widget_host_->WasResized();
+ if (renderWidgetHostView_->delegated_frame_host_)
+ renderWidgetHostView_->delegated_frame_host_->WasResized();
// Wait for the frame that WasResize might have requested. If the view is
// being made visible at a new size, then this call will have no effect
@@ -4240,49 +4387,3 @@ extern NSString *NSTextInputReplacementRangeAttributeName;
}
@end
-
-@implementation SoftwareLayer
-
-- (id)initWithRenderWidgetHostViewMac:(content::RenderWidgetHostViewMac*)r {
- if (self = [super init]) {
- renderWidgetHostView_ = r;
-
- [self setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)];
- [self setAnchorPoint:CGPointMake(0, 0)];
- // Setting contents gravity is necessary to prevent the layer from being
- // scaled during dyanmic resizes (especially with devtools open).
- [self setContentsGravity:kCAGravityTopLeft];
- if (renderWidgetHostView_->software_frame_manager_->HasCurrentFrame() &&
- [self respondsToSelector:(@selector(setContentsScale:))]) {
- [self setContentsScale:renderWidgetHostView_->software_frame_manager_->
- GetCurrentFrameDeviceScaleFactor()];
- }
-
- // Ensure that the transition between frames not be animated.
- [self setActions:@{ @"contents" : [NSNull null] }];
- }
- return self;
-}
-
-- (void)drawInContext:(CGContextRef)context {
- TRACE_EVENT0("browser", "SoftwareLayer::drawInContext");
-
- CGRect clipRect = CGContextGetClipBoundingBox(context);
- if (renderWidgetHostView_) {
- [renderWidgetHostView_->cocoa_view() drawWithDirtyRect:clipRect
- inContext:context];
- } else {
- CGContextSetFillColorWithColor(context,
- CGColorGetConstantColor(kCGColorWhite));
- CGContextFillRect(context, clipRect);
- }
-}
-
-- (void)disableRendering {
- // Disable the fade-out animation as the layer is removed.
- ScopedCAActionDisabler disabler;
- [self removeFromSuperlayer];
- renderWidgetHostView_ = nil;
-}
-
-@end // implementation SoftwareLayer
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index c875c22eef..1d12f90bec 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -717,9 +717,11 @@ TEST_F(RenderWidgetHostViewMacTest, ScrollWheelEndEventDelivery) {
ASSERT_EQ(1U, process_host->sink().message_count());
// Send an ACK for the first wheel event, so that the queue will be flushed.
- scoped_ptr<IPC::Message> response(new InputHostMsg_HandleInputEvent_ACK(
- 0, blink::WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED,
- ui::LatencyInfo()));
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = blink::WebInputEvent::MouseWheel;
+ ack.state = INPUT_EVENT_ACK_STATE_CONSUMED;
+ scoped_ptr<IPC::Message> response(
+ new InputHostMsg_HandleInputEvent_ACK(0, ack));
host->OnMessageReceived(*response);
// Post the NSEventPhaseEnded wheel event to NSApp and check whether the
@@ -761,9 +763,11 @@ TEST_F(RenderWidgetHostViewMacTest, IgnoreEmptyUnhandledWheelEvent) {
process_host->sink().ClearMessages();
// Indicate that the wheel event was unhandled.
- scoped_ptr<IPC::Message> response1(new InputHostMsg_HandleInputEvent_ACK(0,
- blink::WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
- ui::LatencyInfo()));
+ InputHostMsg_HandleInputEvent_ACK_Params unhandled_ack;
+ unhandled_ack.type = blink::WebInputEvent::MouseWheel;
+ unhandled_ack.state = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
+ scoped_ptr<IPC::Message> response1(
+ new InputHostMsg_HandleInputEvent_ACK(0, unhandled_ack));
host->OnMessageReceived(*response1);
// Check that the view delegate got an unhandled wheel event.
@@ -776,9 +780,8 @@ TEST_F(RenderWidgetHostViewMacTest, IgnoreEmptyUnhandledWheelEvent) {
ASSERT_EQ(1U, process_host->sink().message_count());
// Indicate that the wheel event was also unhandled.
- scoped_ptr<IPC::Message> response2(new InputHostMsg_HandleInputEvent_ACK(0,
- blink::WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
- ui::LatencyInfo()));
+ scoped_ptr<IPC::Message> response2(
+ new InputHostMsg_HandleInputEvent_ACK(0, unhandled_ack));
host->OnMessageReceived(*response2);
// Check that the view delegate ignored the empty unhandled wheel event.
diff --git a/content/browser/renderer_host/sandbox_ipc_linux.cc b/content/browser/renderer_host/sandbox_ipc_linux.cc
index f988ae942d..d0397adea0 100644
--- a/content/browser/renderer_host/sandbox_ipc_linux.cc
+++ b/content/browser/renderer_host/sandbox_ipc_linux.cc
@@ -129,31 +129,15 @@ static void MSCharSetToFontconfig(FcLangSet* langset, unsigned fdwCharSet) {
namespace content {
-SandboxIPCProcess::SandboxIPCProcess(int lifeline_fd,
- int browser_socket,
- std::string sandbox_cmd)
+SandboxIPCHandler::SandboxIPCHandler(int lifeline_fd, int browser_socket)
: lifeline_fd_(lifeline_fd), browser_socket_(browser_socket) {
- if (!sandbox_cmd.empty()) {
- sandbox_cmd_.push_back(sandbox_cmd);
- sandbox_cmd_.push_back(base::kFindInodeSwitch);
- }
-
// FontConfig doesn't provide a standard property to control subpixel
// positioning, so we pass the current setting through to WebKit.
WebFontInfo::setSubpixelPositioning(
gfx::GetDefaultWebkitSubpixelPositioning());
-
- CommandLine& command_line = *CommandLine::ForCurrentProcess();
- command_line.AppendSwitchASCII(switches::kProcessType,
- switches::kSandboxIPCProcess);
-
- // Update the process title. The argv was already cached by the call to
- // SetProcessTitleFromCommandLine in content_main_runner.cc, so we can pass
- // NULL here (we don't have the original argv at this point).
- SetProcessTitleFromCommandLine(NULL);
}
-void SandboxIPCProcess::Run() {
+void SandboxIPCHandler::Run() {
struct pollfd pfds[2];
pfds[0].fd = lifeline_fd_;
pfds[0].events = POLLIN;
@@ -162,13 +146,14 @@ void SandboxIPCProcess::Run() {
int failed_polls = 0;
for (;;) {
- const int r = HANDLE_EINTR(poll(pfds, 2, -1 /* no timeout */));
+ const int r =
+ HANDLE_EINTR(poll(pfds, arraysize(pfds), -1 /* no timeout */));
// '0' is not a possible return value with no timeout.
DCHECK_NE(0, r);
if (r < 0) {
PLOG(WARNING) << "poll";
if (failed_polls++ == 3) {
- LOG(FATAL) << "poll(2) failing. RenderSandboxHostLinux aborting.";
+ LOG(FATAL) << "poll(2) failing. SandboxIPCHandler aborting.";
return;
}
continue;
@@ -176,18 +161,27 @@ void SandboxIPCProcess::Run() {
failed_polls = 0;
+ // The browser process will close the other end of this pipe on shutdown,
+ // so we should exit.
if (pfds[0].revents) {
- // our parent died so we should too.
- _exit(0);
+ break;
+ }
+
+ // If poll(2) reports an error condition in this fd,
+ // we assume the zygote is gone and we exit the loop.
+ if (pfds[1].revents & (POLLERR | POLLHUP)) {
+ break;
}
- if (pfds[1].revents) {
+ if (pfds[1].revents & POLLIN) {
HandleRequestFromRenderer(browser_socket_);
}
}
+
+ VLOG(1) << "SandboxIPCHandler stopping.";
}
-void SandboxIPCProcess::HandleRequestFromRenderer(int fd) {
+void SandboxIPCHandler::HandleRequestFromRenderer(int fd) {
ScopedVector<base::ScopedFD> fds;
// A FontConfigIPC::METHOD_MATCH message could be kMaxFontFamilyLength
@@ -220,8 +214,6 @@ void SandboxIPCProcess::HandleRequestFromRenderer(int fd) {
HandleGetFontFamilyForChar(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_LOCALTIME) {
HandleLocaltime(fd, pickle, iter, fds.get());
- } else if (kind == LinuxSandbox::METHOD_GET_CHILD_WITH_INODE) {
- HandleGetChildWithInode(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) {
HandleGetStyleForStrike(fd, pickle, iter, fds.get());
} else if (kind == LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT) {
@@ -231,7 +223,7 @@ void SandboxIPCProcess::HandleRequestFromRenderer(int fd) {
}
}
-int SandboxIPCProcess::FindOrAddPath(const SkString& path) {
+int SandboxIPCHandler::FindOrAddPath(const SkString& path) {
int count = paths_.count();
for (int i = 0; i < count; ++i) {
if (path == *paths_[i])
@@ -241,7 +233,7 @@ int SandboxIPCProcess::FindOrAddPath(const SkString& path) {
return count;
}
-void SandboxIPCProcess::HandleFontMatchRequest(
+void SandboxIPCHandler::HandleFontMatchRequest(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -281,7 +273,7 @@ void SandboxIPCProcess::HandleFontMatchRequest(
SendRendererReply(fds, reply, -1);
}
-void SandboxIPCProcess::HandleFontOpenRequest(
+void SandboxIPCHandler::HandleFontOpenRequest(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -310,13 +302,13 @@ void SandboxIPCProcess::HandleFontOpenRequest(
}
}
-void SandboxIPCProcess::HandleGetFontFamilyForChar(
+void SandboxIPCHandler::HandleGetFontFamilyForChar(
int fd,
const Pickle& pickle,
PickleIterator iter,
const std::vector<base::ScopedFD*>& fds) {
// The other side of this call is
- // chrome/renderer/renderer_sandbox_support_linux.cc
+ // content/common/child_process_sandbox_support_impl_linux.cc
EnsureWebKitInitialized();
WebUChar32 c;
@@ -341,7 +333,7 @@ void SandboxIPCProcess::HandleGetFontFamilyForChar(
SendRendererReply(fds, reply, -1);
}
-void SandboxIPCProcess::HandleGetStyleForStrike(
+void SandboxIPCHandler::HandleGetStyleForStrike(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -370,7 +362,7 @@ void SandboxIPCProcess::HandleGetStyleForStrike(
SendRendererReply(fds, reply, -1);
}
-void SandboxIPCProcess::HandleLocaltime(
+void SandboxIPCHandler::HandleLocaltime(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -403,42 +395,7 @@ void SandboxIPCProcess::HandleLocaltime(
SendRendererReply(fds, reply, -1);
}
-void SandboxIPCProcess::HandleGetChildWithInode(
- int fd,
- const Pickle& pickle,
- PickleIterator iter,
- const std::vector<base::ScopedFD*>& fds) {
- // The other side of this call is in zygote_main_linux.cc
- if (sandbox_cmd_.empty()) {
- LOG(ERROR) << "Not in the sandbox, this should not be called";
- return;
- }
-
- uint64_t inode;
- if (!pickle.ReadUInt64(&iter, &inode))
- return;
-
- base::ProcessId pid = 0;
- std::string inode_output;
-
- std::vector<std::string> sandbox_cmd = sandbox_cmd_;
- sandbox_cmd.push_back(base::Int64ToString(inode));
- CommandLine get_inode_cmd(sandbox_cmd);
- if (base::GetAppOutput(get_inode_cmd, &inode_output))
- base::StringToInt(inode_output, &pid);
-
- if (!pid) {
- // Even though the pid is invalid, we still need to reply to the zygote
- // and not just return here.
- LOG(ERROR) << "Could not get pid";
- }
-
- Pickle reply;
- reply.WriteInt(pid);
- SendRendererReply(fds, reply, -1);
-}
-
-void SandboxIPCProcess::HandleMakeSharedMemorySegment(
+void SandboxIPCHandler::HandleMakeSharedMemorySegment(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -458,7 +415,7 @@ void SandboxIPCProcess::HandleMakeSharedMemorySegment(
SendRendererReply(fds, reply, shm_fd);
}
-void SandboxIPCProcess::HandleMatchWithFallback(
+void SandboxIPCHandler::HandleMatchWithFallback(
int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -618,7 +575,7 @@ void SandboxIPCProcess::HandleMatchWithFallback(
}
}
-void SandboxIPCProcess::SendRendererReply(
+void SandboxIPCHandler::SendRendererReply(
const std::vector<base::ScopedFD*>& fds,
const Pickle& reply,
int reply_fd) {
@@ -654,13 +611,18 @@ void SandboxIPCProcess::SendRendererReply(
PLOG(ERROR) << "sendmsg";
}
-SandboxIPCProcess::~SandboxIPCProcess() {
+SandboxIPCHandler::~SandboxIPCHandler() {
paths_.deleteAll();
if (webkit_platform_support_)
blink::shutdownWithoutV8();
+
+ if (IGNORE_EINTR(close(lifeline_fd_)) < 0)
+ PLOG(ERROR) << "close";
+ if (IGNORE_EINTR(close(browser_socket_)) < 0)
+ PLOG(ERROR) << "close";
}
-void SandboxIPCProcess::EnsureWebKitInitialized() {
+void SandboxIPCHandler::EnsureWebKitInitialized() {
if (webkit_platform_support_)
return;
webkit_platform_support_.reset(new BlinkPlatformImpl);
diff --git a/content/browser/renderer_host/sandbox_ipc_linux.h b/content/browser/renderer_host/sandbox_ipc_linux.h
index e9009546de..05b900092d 100644
--- a/content/browser/renderer_host/sandbox_ipc_linux.h
+++ b/content/browser/renderer_host/sandbox_ipc_linux.h
@@ -12,26 +12,21 @@
#include "base/files/scoped_file.h"
#include "base/memory/scoped_ptr.h"
#include "base/pickle.h"
+#include "base/threading/simple_thread.h"
#include "content/child/blink_platform_impl.h"
#include "skia/ext/skia_utils_base.h"
namespace content {
-class SandboxIPCProcess {
+class SandboxIPCHandler : public base::DelegateSimpleThread::Delegate {
public:
- // lifeline_fd: this is the read end of a pipe which the browser process
- // holds the other end of. If the browser process dies, its descriptors are
- // closed and we will noticed an EOF on the pipe. That's our signal to exit.
- // browser_socket: the browser's end of the sandbox IPC socketpair. From the
- // point of view of the renderer, it's talking to the browser but this
- // object actually services the requests.
- // sandbox_cmd: the path of the sandbox executable.
- SandboxIPCProcess(int lifeline_fd,
- int browser_socket,
- std::string sandbox_cmd);
- ~SandboxIPCProcess();
-
- void Run();
+ // lifeline_fd: the read end of a pipe which the main thread holds
+ // the other end of.
+ // browser_socket: the browser's end of the sandbox IPC socketpair.
+ SandboxIPCHandler(int lifeline_fd, int browser_socket);
+ virtual ~SandboxIPCHandler();
+
+ virtual void Run() OVERRIDE;
private:
void EnsureWebKitInitialized();
@@ -65,11 +60,6 @@ class SandboxIPCProcess {
PickleIterator iter,
const std::vector<base::ScopedFD*>& fds);
- void HandleGetChildWithInode(int fd,
- const Pickle& pickle,
- PickleIterator iter,
- const std::vector<base::ScopedFD*>& fds);
-
void HandleMakeSharedMemorySegment(int fd,
const Pickle& pickle,
PickleIterator iter,
@@ -86,11 +76,10 @@ class SandboxIPCProcess {
const int lifeline_fd_;
const int browser_socket_;
- std::vector<std::string> sandbox_cmd_;
scoped_ptr<BlinkPlatformImpl> webkit_platform_support_;
SkTDArray<SkString*> paths_;
- DISALLOW_COPY_AND_ASSIGN(SandboxIPCProcess);
+ DISALLOW_COPY_AND_ASSIGN(SandboxIPCHandler);
};
} // namespace content
diff --git a/content/browser/renderer_host/socket_stream_dispatcher_host.cc b/content/browser/renderer_host/socket_stream_dispatcher_host.cc
index 23e646f9ac..b08b119ed9 100644
--- a/content/browser/renderer_host/socket_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/socket_stream_dispatcher_host.cc
@@ -41,18 +41,18 @@ SocketStreamDispatcherHost::SocketStreamDispatcherHost(
net::WebSocketJob::EnsureInit();
}
-bool SocketStreamDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool SocketStreamDispatcherHost::OnMessageReceived(
+ const IPC::Message& message) {
if (on_shutdown_)
return false;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcherHost, message)
IPC_MESSAGE_HANDLER(SocketStreamHostMsg_Connect, OnConnect)
IPC_MESSAGE_HANDLER(SocketStreamHostMsg_SendData, OnSendData)
IPC_MESSAGE_HANDLER(SocketStreamHostMsg_Close, OnCloseReq)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -151,16 +151,39 @@ void SocketStreamDispatcherHost::OnSSLCertificateError(
bool SocketStreamDispatcherHost::CanGetCookies(net::SocketStream* socket,
const GURL& url) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ if (socket_id == kNoSocketId) {
+ return false;
+ }
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ DCHECK(socket_stream_host);
return GetContentClient()->browser()->AllowGetCookie(
- url, url, net::CookieList(), resource_context_, 0, MSG_ROUTING_NONE);
+ url,
+ url,
+ net::CookieList(),
+ resource_context_,
+ render_process_id_,
+ socket_stream_host->render_frame_id());
}
bool SocketStreamDispatcherHost::CanSetCookie(net::SocketStream* request,
const GURL& url,
const std::string& cookie_line,
net::CookieOptions* options) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(request);
+ if (socket_id == kNoSocketId) {
+ return false;
+ }
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ DCHECK(socket_stream_host);
return GetContentClient()->browser()->AllowSetCookie(
- url, url, cookie_line, resource_context_, 0, MSG_ROUTING_NONE, options);
+ url,
+ url,
+ cookie_line,
+ resource_context_,
+ render_process_id_,
+ socket_stream_host->render_frame_id(),
+ options);
}
void SocketStreamDispatcherHost::CancelSSLRequest(
diff --git a/content/browser/renderer_host/socket_stream_dispatcher_host.h b/content/browser/renderer_host/socket_stream_dispatcher_host.h
index 163f84579e..c083613882 100644
--- a/content/browser/renderer_host/socket_stream_dispatcher_host.h
+++ b/content/browser/renderer_host/socket_stream_dispatcher_host.h
@@ -40,8 +40,7 @@ class SocketStreamDispatcherHost
ResourceContext* resource_context);
// BrowserMessageFilter:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// Make this object inactive.
// Remove all active SocketStreamHost objects.
diff --git a/content/browser/renderer_host/software_layer_mac.h b/content/browser/renderer_host/software_layer_mac.h
new file mode 100644
index 0000000000..687070e500
--- /dev/null
+++ b/content/browser/renderer_host/software_layer_mac.h
@@ -0,0 +1,22 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_SOFTWARE_LAYER_MAC_H_
+#define CONTENT_BROWSER_RENDERER_HOST_SOFTWARE_LAYER_MAC_H_
+
+#import <Cocoa/Cocoa.h>
+
+#include "ui/gfx/geometry/size.h"
+
+@interface SoftwareLayer : CALayer
+- (id)init;
+
+- (void)setContentsToData:(const void *)data
+ withRowBytes:(size_t)rowBytes
+ withPixelSize:(gfx::Size)pixelSize
+ withScaleFactor:(float)scaleFactor;
+@end
+
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_SOFTWARE_LAYER_MAC_H_
diff --git a/content/browser/renderer_host/software_layer_mac.mm b/content/browser/renderer_host/software_layer_mac.mm
new file mode 100644
index 0000000000..896e3d2559
--- /dev/null
+++ b/content/browser/renderer_host/software_layer_mac.mm
@@ -0,0 +1,66 @@
+// 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 "content/browser/renderer_host/software_layer_mac.h"
+
+#include "base/debug/trace_event.h"
+#include "base/mac/mac_util.h"
+#include "base/mac/scoped_cftyperef.h"
+#include "base/mac/sdk_forward_declarations.h"
+#include "ui/base/cocoa/animation_utils.h"
+
+@implementation SoftwareLayer
+
+- (id)init {
+ if (self = [super init]) {
+ [self setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)];
+ [self setAnchorPoint:CGPointMake(0, 0)];
+ // Setting contents gravity is necessary to prevent the layer from being
+ // scaled during dyanmic resizes (especially with devtools open).
+ [self setContentsGravity:kCAGravityTopLeft];
+ }
+ return self;
+}
+
+- (void)setContentsToData:(const void *)data
+ withRowBytes:(size_t)rowBytes
+ withPixelSize:(gfx::Size)pixelSize
+ withScaleFactor:(float)scaleFactor {
+ TRACE_EVENT0("browser", "-[SoftwareLayer setContentsToData]");
+
+ // Disable animating the contents change or the scale factor change.
+ ScopedCAActionDisabler disabler;
+
+ // Set the contents of the software CALayer to be a CGImage with the provided
+ // pixel data. Make a copy of the data before backing the image with them,
+ // because the same buffer will be reused for the next frame.
+ base::ScopedCFTypeRef<CFDataRef> dataCopy(
+ CFDataCreate(NULL,
+ static_cast<const UInt8 *>(data),
+ rowBytes * pixelSize.height()));
+ base::ScopedCFTypeRef<CGDataProviderRef> dataProvider(
+ CGDataProviderCreateWithCFData(dataCopy));
+ base::ScopedCFTypeRef<CGImageRef> image(
+ CGImageCreate(pixelSize.width(),
+ pixelSize.height(),
+ 8,
+ 32,
+ rowBytes,
+ base::mac::GetSystemColorSpace(),
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
+ dataProvider,
+ NULL,
+ false,
+ kCGRenderingIntentDefault));
+ [self setContents:(id)image.get()];
+
+ // Set the contents scale of the software CALayer.
+ if ([self respondsToSelector:(@selector(contentsScale))] &&
+ [self respondsToSelector:(@selector(setContentsScale:))] &&
+ [self contentsScale] != scaleFactor) {
+ [self setContentsScale:scaleFactor];
+ }
+}
+
+@end
diff --git a/content/browser/renderer_host/text_input_client_mac_unittest.mm b/content/browser/renderer_host/text_input_client_mac_unittest.mm
index fa1894fb92..eddff7b376 100644
--- a/content/browser/renderer_host/text_input_client_mac_unittest.mm
+++ b/content/browser/renderer_host/text_input_client_mac_unittest.mm
@@ -104,9 +104,8 @@ class ScopedTestingThread {
// Adapter for OnMessageReceived to ignore return type so it can be posted
// to a MessageLoop.
void CallOnMessageReceived(scoped_refptr<TextInputClientMessageFilter> filter,
- const IPC::Message& message,
- bool* message_was_ok) {
- filter->OnMessageReceived(message, message_was_ok);
+ const IPC::Message& message) {
+ filter->OnMessageReceived(message);
}
} // namespace
@@ -153,11 +152,10 @@ TEST_F(TextInputClientMacTest, NotFoundCharacterIndex) {
scoped_ptr<IPC::Message> message(
new TextInputClientReplyMsg_GotCharacterIndexForPoint(
widget()->GetRoutingID(), kNotFoundValue));
- bool message_ok = true;
// Set |WTF::notFound| to the index |kTaskDelayMs| after the previous
// setting.
PostTask(FROM_HERE,
- base::Bind(&CallOnMessageReceived, filter, *message, &message_ok),
+ base::Bind(&CallOnMessageReceived, filter, *message),
base::TimeDelta::FromMilliseconds(kTaskDelayMs) * 2);
NSUInteger index = service()->GetCharacterIndexAtPoint(
diff --git a/content/browser/renderer_host/text_input_client_message_filter.h b/content/browser/renderer_host/text_input_client_message_filter.h
index 51b3225d16..4706346202 100644
--- a/content/browser/renderer_host/text_input_client_message_filter.h
+++ b/content/browser/renderer_host/text_input_client_message_filter.h
@@ -25,8 +25,7 @@ class CONTENT_EXPORT TextInputClientMessageFilter
explicit TextInputClientMessageFilter(int child_id);
// BrowserMessageFilter override:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
protected:
virtual ~TextInputClientMessageFilter();
diff --git a/content/browser/renderer_host/text_input_client_message_filter.mm b/content/browser/renderer_host/text_input_client_message_filter.mm
index b24c51f92e..7650700577 100644
--- a/content/browser/renderer_host/text_input_client_message_filter.mm
+++ b/content/browser/renderer_host/text_input_client_message_filter.mm
@@ -21,11 +21,9 @@ TextInputClientMessageFilter::TextInputClientMessageFilter(int child_id)
}
bool TextInputClientMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(TextInputClientMessageFilter, message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(TextInputClientMessageFilter, message)
IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotStringAtPoint,
OnGotStringAtPoint)
IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotCharacterIndexForPoint,
@@ -35,7 +33,7 @@ bool TextInputClientMessageFilter::OnMessageReceived(
IPC_MESSAGE_HANDLER(TextInputClientReplyMsg_GotStringForRange,
OnGotStringFromRange)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/ui_events_helper.cc b/content/browser/renderer_host/ui_events_helper.cc
index 00bc2f3ba8..bc06721da1 100644
--- a/content/browser/renderer_host/ui_events_helper.cc
+++ b/content/browser/renderer_host/ui_events_helper.cc
@@ -226,7 +226,7 @@ blink::WebGestureEvent MakeWebGestureEventFromUIEvent(
break;
case ui::ET_GESTURE_BEGIN:
case ui::ET_GESTURE_END:
- case ui::ET_GESTURE_MULTIFINGER_SWIPE:
+ case ui::ET_GESTURE_SWIPE:
gesture_event.type = blink::WebInputEvent::Undefined;
break;
default:
diff --git a/content/browser/renderer_host/websocket_dispatcher_host.cc b/content/browser/renderer_host/websocket_dispatcher_host.cc
index 4c4b0e5fbc..2af2f0814c 100644
--- a/content/browser/renderer_host/websocket_dispatcher_host.cc
+++ b/content/browser/renderer_host/websocket_dispatcher_host.cc
@@ -47,8 +47,7 @@ WebSocketHost* WebSocketDispatcherHost::CreateWebSocketHost(int routing_id) {
return new WebSocketHost(routing_id, this, get_context_callback_.Run());
}
-bool WebSocketDispatcherHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool WebSocketDispatcherHost::OnMessageReceived(const IPC::Message& message) {
switch (message.type()) {
case WebSocketHostMsg_AddChannelRequest::ID:
case WebSocketMsg_SendFrame::ID:
@@ -81,7 +80,7 @@ bool WebSocketDispatcherHost::OnMessageReceived(const IPC::Message& message,
<< " from renderer.";
return true; // We handled the message (by ignoring it).
}
- return host->OnMessageReceived(message, message_was_ok);
+ return host->OnMessageReceived(message);
}
bool WebSocketDispatcherHost::CanReadRawCookies() const {
diff --git a/content/browser/renderer_host/websocket_dispatcher_host.h b/content/browser/renderer_host/websocket_dispatcher_host.h
index c2812e58e6..b95b580b4d 100644
--- a/content/browser/renderer_host/websocket_dispatcher_host.h
+++ b/content/browser/renderer_host/websocket_dispatcher_host.h
@@ -56,8 +56,7 @@ class CONTENT_EXPORT WebSocketDispatcherHost : public BrowserMessageFilter {
const WebSocketHostFactory& websocket_host_factory);
// BrowserMessageFilter:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// The following methods are used by WebSocketHost::EventInterface to send
// IPCs from the browser to the renderer or child process. Any of them may
diff --git a/content/browser/renderer_host/websocket_dispatcher_host_unittest.cc b/content/browser/renderer_host/websocket_dispatcher_host_unittest.cc
index f6946492ec..27d5eee87c 100644
--- a/content/browser/renderer_host/websocket_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/websocket_dispatcher_host_unittest.cc
@@ -31,8 +31,7 @@ class MockWebSocketHost : public WebSocketHost {
virtual ~MockWebSocketHost() {}
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE{
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE{
received_messages_.push_back(message);
return true;
}
@@ -78,9 +77,8 @@ TEST_F(WebSocketDispatcherHostTest, Construct) {
}
TEST_F(WebSocketDispatcherHostTest, UnrelatedMessage) {
- bool message_was_ok = false;
IPC::Message message;
- EXPECT_FALSE(dispatcher_host_->OnMessageReceived(message, &message_was_ok));
+ EXPECT_FALSE(dispatcher_host_->OnMessageReceived(message));
}
TEST_F(WebSocketDispatcherHostTest, AddChannelRequest) {
@@ -92,8 +90,7 @@ TEST_F(WebSocketDispatcherHostTest, AddChannelRequest) {
WebSocketHostMsg_AddChannelRequest message(
routing_id, socket_url, requested_protocols, origin);
- bool message_was_ok = false;
- ASSERT_TRUE(dispatcher_host_->OnMessageReceived(message, &message_was_ok));
+ ASSERT_TRUE(dispatcher_host_->OnMessageReceived(message));
ASSERT_EQ(1U, mock_hosts_.size());
MockWebSocketHost* host = mock_hosts_[0];
@@ -110,9 +107,8 @@ TEST_F(WebSocketDispatcherHostTest, SendFrameButNoHostYet) {
WebSocketMsg_SendFrame message(
routing_id, true, WEB_SOCKET_MESSAGE_TYPE_TEXT, data);
- bool message_was_ok = false;
// Expected to be ignored.
- EXPECT_TRUE(dispatcher_host_->OnMessageReceived(message, &message_was_ok));
+ EXPECT_TRUE(dispatcher_host_->OnMessageReceived(message));
EXPECT_EQ(0U, mock_hosts_.size());
}
@@ -127,17 +123,13 @@ TEST_F(WebSocketDispatcherHostTest, SendFrame) {
WebSocketHostMsg_AddChannelRequest add_channel_message(
routing_id, socket_url, requested_protocols, origin);
- bool message_was_ok = false;
-
- ASSERT_TRUE(dispatcher_host_->OnMessageReceived(
- add_channel_message, &message_was_ok));
+ ASSERT_TRUE(dispatcher_host_->OnMessageReceived(add_channel_message));
std::vector<char> data;
WebSocketMsg_SendFrame send_frame_message(
routing_id, true, WEB_SOCKET_MESSAGE_TYPE_TEXT, data);
- EXPECT_TRUE(dispatcher_host_->OnMessageReceived(
- send_frame_message, &message_was_ok));
+ EXPECT_TRUE(dispatcher_host_->OnMessageReceived(send_frame_message));
ASSERT_EQ(1U, mock_hosts_.size());
MockWebSocketHost* host = mock_hosts_[0];
diff --git a/content/browser/renderer_host/websocket_host.cc b/content/browser/renderer_host/websocket_host.cc
index f0acd8a887..ed398f8d1e 100644
--- a/content/browser/renderer_host/websocket_host.cc
+++ b/content/browser/renderer_host/websocket_host.cc
@@ -243,16 +243,15 @@ WebSocketHost::WebSocketHost(int routing_id,
WebSocketHost::~WebSocketHost() {}
-bool WebSocketHost::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool WebSocketHost::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(WebSocketHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(WebSocketHost, message)
IPC_MESSAGE_HANDLER(WebSocketHostMsg_AddChannelRequest, OnAddChannelRequest)
IPC_MESSAGE_HANDLER(WebSocketMsg_SendFrame, OnSendFrame)
IPC_MESSAGE_HANDLER(WebSocketMsg_FlowControl, OnFlowControl)
IPC_MESSAGE_HANDLER(WebSocketMsg_DropChannel, OnDropChannel)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/renderer_host/websocket_host.h b/content/browser/renderer_host/websocket_host.h
index bfe63043f0..148d6ed217 100644
--- a/content/browser/renderer_host/websocket_host.h
+++ b/content/browser/renderer_host/websocket_host.h
@@ -42,8 +42,7 @@ class CONTENT_EXPORT WebSocketHost {
// General message dispatch. WebSocketDispatcherHost::OnMessageReceived
// delegates to this method after looking up the |routing_id|.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok);
+ virtual bool OnMessageReceived(const IPC::Message& message);
private:
// Handlers for each message type, dispatched by OnMessageReceived(), as
diff --git a/content/browser/resolve_proxy_msg_helper.cc b/content/browser/resolve_proxy_msg_helper.cc
index 9932f77fbc..5f0a6cd52d 100644
--- a/content/browser/resolve_proxy_msg_helper.cc
+++ b/content/browser/resolve_proxy_msg_helper.cc
@@ -26,10 +26,9 @@ ResolveProxyMsgHelper::ResolveProxyMsgHelper(net::ProxyService* proxy_service)
proxy_service_(proxy_service) {
}
-bool ResolveProxyMsgHelper::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool ResolveProxyMsgHelper::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ResolveProxyMsgHelper, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ResolveProxyMsgHelper, message)
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ResolveProxy, OnResolveProxy)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
diff --git a/content/browser/resolve_proxy_msg_helper.h b/content/browser/resolve_proxy_msg_helper.h
index a55e6698a3..167d946e54 100644
--- a/content/browser/resolve_proxy_msg_helper.h
+++ b/content/browser/resolve_proxy_msg_helper.h
@@ -38,8 +38,7 @@ class CONTENT_EXPORT ResolveProxyMsgHelper : public BrowserMessageFilter {
explicit ResolveProxyMsgHelper(net::ProxyService* proxy_service);
// BrowserMessageFilter implementation
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
diff --git a/content/browser/resources/service_worker/OWNERS b/content/browser/resources/service_worker/OWNERS
index 633b8a4fd9..a143cc7654 100644
--- a/content/browser/resources/service_worker/OWNERS
+++ b/content/browser/resources/service_worker/OWNERS
@@ -1,3 +1,5 @@
-alecflett@chromium.org
-kinuko@chromium.org
michaeln@chromium.org
+horo@chromium.org
+
+# may not be available
+kinuko@chromium.org
diff --git a/content/browser/resources/service_worker/serviceworker_internals.css b/content/browser/resources/service_worker/serviceworker_internals.css
index aeb0be9a06..0ac2528098 100644
--- a/content/browser/resources/service_worker/serviceworker_internals.css
+++ b/content/browser/resources/service_worker/serviceworker_internals.css
@@ -17,6 +17,10 @@
position: relative;
}
+.serviceworker-registration {
+ padding: 5px;
+}
+
.serviceworker-scope {
color: rgb(85, 102, 221);
display: inline-block;
@@ -30,6 +34,7 @@
}
.serviceworker-version {
+ padding-bottom: 3px;
padding-left: 10px;
}
diff --git a/content/browser/resources/service_worker/serviceworker_internals.html b/content/browser/resources/service_worker/serviceworker_internals.html
index ae854680e5..b36406d25f 100644
--- a/content/browser/resources/service_worker/serviceworker_internals.html
+++ b/content/browser/resources/service_worker/serviceworker_internals.html
@@ -2,7 +2,7 @@
<html i18n-values="dir:textdirection;">
<head>
<meta charset="utf-8">
- <title>ServiceWorker registrations</title>
+ <title>ServiceWorker</title>
<link rel="stylesheet" href="chrome://resources/css/tabs.css">
<link rel="stylesheet" href="chrome://resources/css/widgets.css">
<link rel="stylesheet" href="serviceworker_internals.css">
@@ -31,53 +31,86 @@
<span>Renderer thread ID:</span>
<span jscontent="$this.thread_id"></span>
</div>
+ <div class="serviceworker-rid">
+ <span>DevTools agent route ID:</span>
+ <span jscontent="$this.devtools_agent_route_id"></span>
+ </div>
<div>
<div>Log:</div>
<textarea class="serviceworker-log"
jsvalues=".partition_id:$partition_id;.version_id:$this.version_id"
- rows="10" cols="120" readonly jscontent="$this.log"></textarea>
+ rows="3" cols="120" readonly jscontent="$this.log"></textarea>
+ </div>
+ <div class="worker-controls">
+ <button href="#" class="stop" jsdisplay="$this.running_status == 'RUNNING'"
+ jsvalues=".cmdArgs:{partition_id:$partition_id,version_id:version_id}">Stop</button>
+ <button href="#" class="sync" jsdisplay="$this.running_status == 'RUNNING'"
+ jsvalues=".cmdArgs:{partition_id:$partition_id,version_id:version_id}">Sync</button>
+ <button href="#" class="inspect" jsdisplay="$this.running_status == 'RUNNING'"
+ jsvalues=".cmdArgs:{process_id:process_id,devtools_agent_route_id:devtools_agent_route_id}">Inspect</button>
+ <span class="operation-status" style="display: none">Running...</span>
+ </div>
+ </div>
+ <div id="serviceworker-registration-template" class="serviceworker-registration">
+ <div class="serviceworker-scope">
+ <span>Scope:</span>
+ <span jscontent="scope"></span>
+ </div>
+ <div class="serviceworker-script_url">
+ <span>Script:</span>
+ <span jscontent="script_url"></span>
+ </div>
+ <div class="serviceworker-rid">
+ <span>Registration ID:</span>
+ <span jscontent="registration_id"></span>
+ <span jsdisplay="$this.unregistered">(unregistered)</span>
+ </div>
+ <div jsselect="$this.active">
+ Active worker:
+ <div transclude="serviceworker-version-template"></div>
+ </div>
+ <div jsselect="$this.pending">
+ Pending worker:
+ <div transclude="serviceworker-version-template"></div>
+ </div>
+ <div class="registration-controls" jsdisplay="!$this.unregistered">
+ <button href="#" class="unregister"
+ jsvalues=".cmdArgs:{partition_id:$partition_id,scope:scope}">Unregister</button>
+ <button href="#" class="start" jsdisplay="$this.active.running_status != 'RUNNING'"
+ jsvalues=".cmdArgs:{partition_id:$partition_id,scope:scope}">Start</button>
+ <span class="operation-status" style="display: none">Running...</span>
</div>
</div>
<div id="serviceworker-list-template"
jsvalues="$partition_id:$this.partition_id;$partition_path:$this.partition_path;.partition_path:$this.partition_path">
<div class="serviceworker-summary">
- <span>Instances in: </span>
+ <span>Registrations in: </span>
<span jscontent="$this.partition_path"></span>
- <span jscontent="'(' + $this.registrations.length + ')'"></span>
- </div>
- <div class="serviceworker-item" jsselect="$this.registrations">
- <div class="serviceworker-scope">
- <span>Scope:</span>
- <span jscontent="scope"></span>
- </div>
- <div class="serviceworker-script_url">
- <span>Script:</span>
- <span jscontent="script_url"></span>
- </div>
- <div jsselect="$this.active">
- Active worker:
- <div transclude="serviceworker-version-template"></div>
- </div>
- <div jsselect="$this.pending">
- Pending worker:
- <div transclude="serviceworker-version-template"></div>
- </div>
- <div class="controls">
- <button class="stop" jsdisplay="$this.active.running_status == 'RUNNING'"
- jsvalues=".scope:scope;.partition_path:$partition_path">Stop</button>
- <button href="#" class="start" jsdisplay="$this.active.running_status != 'RUNNING'"
- jsvalues=".scope:scope;.partition_path:$partition_path">Start</button>
- <button href="#" class="unregister"
- jsvalues=".scope:scope;.partition_path:$partition_path">Unregister</button>
- <button href="#" class="sync" jsdisplay="$this.active.running_status == 'RUNNING'"
- jsvalues=".scope:scope;.partition_path:$partition_path">Sync</button>
- <span class="operation-status" style="display: none">Running...</span>
- </div>
+ <span jscontent="'(' + $this.stored_registrations.length + ')'"></span>
+ </div>
+ <div class="serviceworker-item" jsselect="$this.stored_registrations">
+ <div transclude="serviceworker-registration-template"></div>
+ </div>
+ <div class="serviceworker-item" jsselect="$this.unregistered_registrations">
+ <div transclude="serviceworker-registration-template"></div>
+ </div>
+ <div class="serviceworker-item" jsselect="$this.unregistered_versions">
+ Unregistered worker:
+ <div transclude="serviceworker-version-template"></div>
+ </div>
+ </div>
+ <div id="serviceworker-options-template">
+ <div>
+ <span>
+ <input type="checkbox" class="debug_on_start" jsvalues=".checked:$this.debug_on_start">
+ </span>
+ <span>Opens the DevTools window for ServiceWorker on start for debugging.</span>
</div>
</div>
</div>
- <h1>ServiceWorker registrations</h1>
+ <h1>ServiceWorker</h1>
<div class="content">
+ <div id="serviceworker-options"></div>
<div id="serviceworker-list"></div>
</div>
<script src="chrome://resources/js/util.js"></script>
diff --git a/content/browser/resources/service_worker/serviceworker_internals.js b/content/browser/resources/service_worker/serviceworker_internals.js
index 7ffa11fb88..dfa3f62f68 100644
--- a/content/browser/resources/service_worker/serviceworker_internals.js
+++ b/content/browser/resources/service_worker/serviceworker_internals.js
@@ -3,168 +3,302 @@
// found in the LICENSE file.
cr.define('serviceworker', function() {
- 'use strict';
+ 'use strict';
- function update() {
- chrome.send('getAllRegistrations');
+ function initialize() {
+ if (window.location.hash == "#iframe") {
+ // This page is loaded from chrome://inspect.
+ window.addEventListener('message', onMessage.bind(this), false);
}
+ update();
+ }
- function progressNodeFor(link) {
- return link.parentNode.querySelector('.operation-status');
+ function onMessage(event) {
+ if (event.origin != 'chrome://inspect') {
+ return;
}
+ sendCommand(event.data.action, event.data.worker);
+ }
- // All commands are sent with the partition_path and scope, and
- // are all completed with 'onOperationComplete'.
- var COMMANDS = ['unregister', 'start', 'stop', 'sync'];
- function commandHandler(command) {
- return function(event) {
- var link = event.target;
- progressNodeFor(link).style.display = 'inline';
- chrome.send(command, [link.partition_path,
- link.scope]);
- return false;
- };
- };
+ function update() {
+ chrome.send('GetOptions');
+ chrome.send('getAllRegistrations');
+ }
- function withNode(selector, partition_path, scope, callback) {
- var links = document.querySelectorAll(selector);
- for (var i = 0; i < links.length; ++i) {
- var link = links[i];
- if (partition_path == link.partition_path &&
- scope == link.scope) {
- callback(link);
- }
- }
+ function onOptions(options) {
+ var template;
+ var container = $('serviceworker-options');
+ if (container.childNodes) {
+ template = container.childNodes[0];
}
-
- // Fired from the backend after the start call has completed
- function onOperationComplete(status, path, scope) {
- // refreshes the ui, displaying any relevant buttons
- withNode('button', path, scope, function(link) {
- progressNodeFor(link).style.display = 'none';
- });
- update();
+ if (!template) {
+ template = jstGetTemplate('serviceworker-options-template');
+ container.appendChild(template);
}
+ jstProcess(new JsEvalContext(options), template);
+ var inputs = container.querySelectorAll('input[type=\'checkbox\']');
+ for (var i = 0; i < inputs.length; ++i) {
+ if (!inputs[i].hasClickEvent) {
+ inputs[i].addEventListener('click', (function(event) {
+ chrome.send('SetOption',
+ [event.target.className, event.target.checked]);
+ }).bind(this), false);
+ inputs[i].hasClickEvent = true;
+ }
+ }
+ }
- var allLogMessages = {};
+ function progressNodeFor(link) {
+ return link.parentNode.querySelector('.operation-status');
+ }
- // Fired once per partition from the backend.
- function onPartitionData(registrations, partition_id, partition_path) {
- var template;
- var container = $('serviceworker-list');
+ // All commands are completed with 'onOperationComplete'.
+ var COMMANDS = ['stop', 'sync', 'inspect', 'unregister', 'start'];
+ function commandHandler(command) {
+ return function(event) {
+ var link = event.target;
+ progressNodeFor(link).style.display = 'inline';
+ sendCommand(command, link.cmdArgs, (function(status) {
+ progressNodeFor(link).style.display = 'none';
+ }).bind(null, link));
+ return false;
+ };
+ };
- // Existing templates are keyed by partition_path. This allows
- // the UI to be updated in-place rather than refreshing the
- // whole page.
- for (var i = 0; i < container.childNodes.length; ++i) {
- if (container.childNodes[i].partition_path == partition_path) {
- template = container.childNodes[i];
- }
- }
+ var commandCallbacks = [];
+ function sendCommand(command, args, callback) {
+ var callbackId = 0;
+ while (callbackId in commandCallbacks) {
+ callbackId++;
+ }
+ commandCallbacks[callbackId] = callback;
+ chrome.send(command, [callbackId, args]);
+ }
- // This is probably the first time we're loading.
- if (!template) {
- template = jstGetTemplate('serviceworker-list-template');
- container.appendChild(template);
- }
+ // Fired from the backend after the command call has completed.
+ function onOperationComplete(status, callbackId) {
+ var callback = commandCallbacks[callbackId];
+ delete commandCallbacks[callbackId];
+ if (callback) {
+ callback(status);
+ }
+ update();
+ }
- // Set log for each worker versions.
- if (!(partition_id in allLogMessages)) {
- allLogMessages[partition_id] = {};
+ // Send the active ServiceWorker information to chrome://inspect.
+ function sendToInspectPage(live_registrations,
+ partition_id) {
+ var workers = [];
+ live_registrations.forEach(function(registration) {
+ [registration.active, registration.pending].forEach(function(version) {
+ if (!version || version.running_status != 'RUNNING') {
+ return;
}
- var logMessages = allLogMessages[partition_id];
- registrations.forEach(function (worker) {
- [worker.active, worker.pending].forEach(function (version) {
- if (version) {
- if (version.version_id in logMessages) {
- version.log = logMessages[version.version_id];
- } else {
- version.log = '';
- }
- }
- });
+ workers.push({
+ 'scope': registration.scope,
+ 'url': registration.script_url,
+ 'partition_id': partition_id,
+ 'version_id': version.version_id,
+ 'process_id': version.process_id,
+ 'devtools_agent_route_id':
+ version.devtools_agent_route_id
});
+ });
+ });
+ window.parent.postMessage(
+ {'partition_id': partition_id, 'workers': workers},
+ 'chrome://inspect');
+ }
- jstProcess(new JsEvalContext({ registrations: registrations,
- partition_id: partition_id,
- partition_path: partition_path}),
- template);
- for (var i = 0; i < COMMANDS.length; ++i) {
- var handler = commandHandler(COMMANDS[i]);
- var links = container.querySelectorAll('button.' + COMMANDS[i]);
- for (var j = 0; j < links.length; ++j) {
- if (!links[j].hasClickEvent) {
- links[j].addEventListener('click', handler, false);
- links[j].hasClickEvent = true;
- }
- }
- }
+ var allLogMessages = {};
+ // Set log for a worker version.
+ function fillLogForVersion(partition_id, version) {
+ if (!version) {
+ return;
}
-
- function onWorkerStarted(partition_id, version_id, process_id, thread_id) {
- update();
+ if (!(partition_id in allLogMessages)) {
+ allLogMessages[partition_id] = {};
}
-
- function onWorkerStopped(partition_id, version_id, process_id, thread_id) {
- update();
+ var logMessages = allLogMessages[partition_id];
+ if (version.version_id in logMessages) {
+ version.log = logMessages[version.version_id];
+ } else {
+ version.log = '';
}
+ }
- function onErrorReported(partition_id,
- version_id,
- process_id,
- thread_id,
- error_info) {
- outputLogMessage(partition_id,
- version_id,
- 'Error: ' + JSON.stringify(error_info) + '\n');
- }
+ // Get the unregistered workers.
+ // |unregistered_registrations| will be filled with the registrations which
+ // are in |live_registrations| but not in |stored_registrations|.
+ // |unregistered_versions| will be filled with the versions which
+ // are in |live_versions| but not in |stored_registrations| nor in
+ // |live_registrations|.
+ function getUnregisteredWorkers(stored_registrations,
+ live_registrations,
+ live_versions,
+ unregistered_registrations,
+ unregistered_versions) {
+ var registration_id_set = {};
+ var version_id_set = {};
+ stored_registrations.forEach(function(registration) {
+ registration_id_set[registration.registration_id] = true;
+ });
+ [stored_registrations, live_registrations].forEach(function(registrations) {
+ registrations.forEach(function(registration) {
+ [registration.active, registration.pending].forEach(function(version) {
+ if (version) {
+ version_id_set[version.version_id] = true;
+ }
+ });
+ });
+ });
+ live_registrations.forEach(function(registration) {
+ if (!registration_id_set[registration.registration_id]) {
+ registration.unregistered = true;
+ unregistered_registrations.push(registration);
+ }
+ });
+ live_versions.forEach(function(version) {
+ if (!version_id_set[version.version_id]) {
+ unregistered_versions.push(version);
+ }
+ });
+ }
- function onConsoleMessageReported(partition_id,
- version_id,
- process_id,
- thread_id,
- message) {
- outputLogMessage(partition_id,
- version_id,
- 'Console: ' + JSON.stringify(message) + '\n');
+ // Fired once per partition from the backend.
+ function onPartitionData(live_registrations,
+ live_versions,
+ stored_registrations,
+ partition_id,
+ partition_path) {
+ if (window.location.hash == "#iframe") {
+ // This page is loaded from chrome://inspect.
+ sendToInspectPage(live_registrations, partition_id);
+ return;
}
-
- function onVersionStateChanged(partition_id, version_id) {
- update();
+ var unregistered_registrations = [];
+ var unregistered_versions = [];
+ getUnregisteredWorkers(stored_registrations,
+ live_registrations,
+ live_versions,
+ unregistered_registrations,
+ unregistered_versions);
+ var template;
+ var container = $('serviceworker-list');
+ // Existing templates are keyed by partition_path. This allows
+ // the UI to be updated in-place rather than refreshing the
+ // whole page.
+ for (var i = 0; i < container.childNodes.length; ++i) {
+ if (container.childNodes[i].partition_path == partition_path) {
+ template = container.childNodes[i];
+ }
}
-
- function outputLogMessage(partition_id, version_id, message) {
- if (!(partition_id in allLogMessages)) {
- allLogMessages[partition_id] = {};
- }
- var logMessages = allLogMessages[partition_id];
- if (version_id in logMessages) {
- logMessages[version_id] += message;
- } else {
- logMessages[version_id] = message;
+ // This is probably the first time we're loading.
+ if (!template) {
+ template = jstGetTemplate('serviceworker-list-template');
+ container.appendChild(template);
+ }
+ var fillLogFunc = fillLogForVersion.bind(this, partition_id);
+ stored_registrations.forEach(function(registration) {
+ [registration.active, registration.pending].forEach(fillLogFunc);
+ });
+ unregistered_registrations.forEach(function(registration) {
+ [registration.active, registration.pending].forEach(fillLogFunc);
+ });
+ unregistered_versions.forEach(fillLogFunc);
+ jstProcess(new JsEvalContext({
+ stored_registrations: stored_registrations,
+ unregistered_registrations: unregistered_registrations,
+ unregistered_versions: unregistered_versions,
+ partition_id: partition_id,
+ partition_path: partition_path}),
+ template);
+ for (var i = 0; i < COMMANDS.length; ++i) {
+ var handler = commandHandler(COMMANDS[i]);
+ var links = container.querySelectorAll('button.' + COMMANDS[i]);
+ for (var j = 0; j < links.length; ++j) {
+ if (!links[j].hasClickEvent) {
+ links[j].addEventListener('click', handler, false);
+ links[j].hasClickEvent = true;
}
+ }
+ }
+ }
- var logAreas =
- document.querySelectorAll('textarea.serviceworker-log');
- for (var i = 0; i < logAreas.length; ++i) {
- var logArea = logAreas[i];
- if (logArea.partition_id == partition_id &&
- logArea.version_id == version_id) {
- logArea.value += message;
- }
- }
+ function onWorkerStarted(partition_id, version_id, process_id, thread_id) {
+ update();
+ }
+
+ function onWorkerStopped(partition_id, version_id, process_id, thread_id) {
+ update();
+ }
+
+ function onErrorReported(partition_id,
+ version_id,
+ process_id,
+ thread_id,
+ error_info) {
+ outputLogMessage(partition_id,
+ version_id,
+ 'Error: ' + JSON.stringify(error_info) + '\n');
+ }
+
+ function onConsoleMessageReported(partition_id,
+ version_id,
+ process_id,
+ thread_id,
+ message) {
+ outputLogMessage(partition_id,
+ version_id,
+ 'Console: ' + JSON.stringify(message) + '\n');
+ }
+
+ function onVersionStateChanged(partition_id, version_id) {
+ update();
+ }
+
+ function onRegistrationStored(scope) {
+ update();
+ }
+
+ function onRegistrationDeleted(scope) {
+ update();
+ }
+
+ function outputLogMessage(partition_id, version_id, message) {
+ if (!(partition_id in allLogMessages)) {
+ allLogMessages[partition_id] = {};
+ }
+ var logMessages = allLogMessages[partition_id];
+ if (version_id in logMessages) {
+ logMessages[version_id] += message;
+ } else {
+ logMessages[version_id] = message;
}
- return {
- update: update,
- onOperationComplete: onOperationComplete,
- onPartitionData: onPartitionData,
- onWorkerStarted: onWorkerStarted,
- onWorkerStopped: onWorkerStopped,
- onErrorReported: onErrorReported,
- onConsoleMessageReported: onConsoleMessageReported,
- onVersionStateChanged: onVersionStateChanged,
- };
+ var logAreas = document.querySelectorAll('textarea.serviceworker-log');
+ for (var i = 0; i < logAreas.length; ++i) {
+ var logArea = logAreas[i];
+ if (logArea.partition_id == partition_id &&
+ logArea.version_id == version_id) {
+ logArea.value += message;
+ }
+ }
+ }
+
+ return {
+ initialize: initialize,
+ onOptions: onOptions,
+ onOperationComplete: onOperationComplete,
+ onPartitionData: onPartitionData,
+ onWorkerStarted: onWorkerStarted,
+ onWorkerStopped: onWorkerStopped,
+ onErrorReported: onErrorReported,
+ onConsoleMessageReported: onConsoleMessageReported,
+ onVersionStateChanged: onVersionStateChanged,
+ onRegistrationStored: onRegistrationStored,
+ onRegistrationDeleted: onRegistrationDeleted,
+ };
});
-document.addEventListener('DOMContentLoaded', serviceworker.update);
+document.addEventListener('DOMContentLoaded', serviceworker.initialize);
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc b/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
index fc443ecf5d..ccc3e228d1 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
@@ -19,16 +19,14 @@ ScreenOrientationDispatcherHost::~ScreenOrientationDispatcherHost() {
}
bool ScreenOrientationDispatcherHost::OnMessageReceived(
- const IPC::Message& message, bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ScreenOrientationDispatcherHost,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ScreenOrientationDispatcherHost, message)
IPC_MESSAGE_HANDLER(ScreenOrientationHostMsg_Lock, OnLockRequest)
IPC_MESSAGE_HANDLER(ScreenOrientationHostMsg_Unlock, OnUnlockRequest)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host.h b/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
index 28cd75d93b..401a9e0349 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
@@ -22,7 +22,7 @@ class CONTENT_EXPORT ScreenOrientationDispatcherHost
ScreenOrientationDispatcherHost();
// BrowserMessageFilter
- virtual bool OnMessageReceived(const IPC::Message&, bool*) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message&) OVERRIDE;
void OnOrientationChange(blink::WebScreenOrientationType orientation);
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc b/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
index 3c50ca8ad1..67f81de005 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
@@ -63,12 +63,9 @@ class ScreenOrientationDispatcherHostTest : public testing::Test {
TEST_F(ScreenOrientationDispatcherHostTest, NullProvider) {
dispatcher_->SetProviderForTests(NULL);
- bool message_was_ok = false;
bool message_was_handled = dispatcher_->OnMessageReceived(
ScreenOrientationHostMsg_Lock(
- blink::WebScreenOrientationLockPortraitPrimary), &message_was_ok);
-
- EXPECT_TRUE(message_was_ok);
+ blink::WebScreenOrientationLockPortraitPrimary));
EXPECT_TRUE(message_was_handled);
}
@@ -92,14 +89,12 @@ TEST_F(ScreenOrientationDispatcherHostTest, ProviderLock) {
int orientationsToTestCount = 7;
for (int i = 0; i < orientationsToTestCount; ++i) {
- bool message_was_ok = false;
bool message_was_handled = false;
blink::WebScreenOrientationLockType orientation = orientationsToTest[i];
message_was_handled = dispatcher_->OnMessageReceived(
- ScreenOrientationHostMsg_Lock(orientation), &message_was_ok);
+ ScreenOrientationHostMsg_Lock(orientation));
- EXPECT_TRUE(message_was_ok);
EXPECT_TRUE(message_was_handled);
EXPECT_EQ(orientation, provider_->orientation());
}
@@ -108,11 +103,9 @@ TEST_F(ScreenOrientationDispatcherHostTest, ProviderLock) {
// Test that when receiving an unlock message, it is correctly dispatched to the
// ScreenOrientationProvider.
TEST_F(ScreenOrientationDispatcherHostTest, ProviderUnlock) {
- bool message_was_ok = false;
bool message_was_handled = dispatcher_->OnMessageReceived(
- ScreenOrientationHostMsg_Unlock(), &message_was_ok);
+ ScreenOrientationHostMsg_Unlock());
- EXPECT_TRUE(message_was_ok);
EXPECT_TRUE(message_was_handled);
EXPECT_TRUE(provider_->unlock_called());
}
diff --git a/content/browser/service_worker/OWNERS b/content/browser/service_worker/OWNERS
index 633b8a4fd9..f991606230 100644
--- a/content/browser/service_worker/OWNERS
+++ b/content/browser/service_worker/OWNERS
@@ -1,3 +1,12 @@
-alecflett@chromium.org
-kinuko@chromium.org
michaeln@chromium.org
+falken@chromium.org
+
+# may not be available
+kinuko@chromium.org
+
+# per-file owners
+per-file embedded_worker*=horo@chromium.org
+per-file service_worker_process_manager*=horo@chromium.org
+per-file service_worker_internals_ui*=horo@chromium.org
+per-file service_worker_database*=nhiroki@chromium.org
+per-file service_worker_storage*=nhiroki@chromium.org
diff --git a/content/browser/service_worker/database_proto.target.darwin-arm.mk b/content/browser/service_worker/database_proto.target.darwin-arm.mk
index 16495c56c6..546e3949b5 100644
--- a/content/browser/service_worker/database_proto.target.darwin-arm.mk
+++ b/content/browser/service_worker/database_proto.target.darwin-arm.mk
@@ -62,8 +62,15 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -155,8 +167,15 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -192,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.darwin-arm64.mk b/content/browser/service_worker/database_proto.target.darwin-arm64.mk
index f7d896ec8e..c87999ce83 100644
--- a/content/browser/service_worker/database_proto.target.darwin-arm64.mk
+++ b/content/browser/service_worker/database_proto.target.darwin-arm64.mk
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -185,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.darwin-mips.mk b/content/browser/service_worker/database_proto.target.darwin-mips.mk
index 7c0e14bbf1..ba325090c1 100644
--- a/content/browser/service_worker/database_proto.target.darwin-mips.mk
+++ b/content/browser/service_worker/database_proto.target.darwin-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -157,6 +163,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -194,12 +201,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.darwin-x86.mk b/content/browser/service_worker/database_proto.target.darwin-x86.mk
index a862113542..9e040d6c87 100644
--- a/content/browser/service_worker/database_proto.target.darwin-x86.mk
+++ b/content/browser/service_worker/database_proto.target.darwin-x86.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -193,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.darwin-x86_64.mk b/content/browser/service_worker/database_proto.target.darwin-x86_64.mk
index d2f2b4effc..460c316555 100644
--- a/content/browser/service_worker/database_proto.target.darwin-x86_64.mk
+++ b/content/browser/service_worker/database_proto.target.darwin-x86_64.mk
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -193,12 +198,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.linux-arm.mk b/content/browser/service_worker/database_proto.target.linux-arm.mk
index 16495c56c6..546e3949b5 100644
--- a/content/browser/service_worker/database_proto.target.linux-arm.mk
+++ b/content/browser/service_worker/database_proto.target.linux-arm.mk
@@ -62,8 +62,15 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -155,8 +167,15 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -192,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.linux-arm64.mk b/content/browser/service_worker/database_proto.target.linux-arm64.mk
index f7d896ec8e..c87999ce83 100644
--- a/content/browser/service_worker/database_proto.target.linux-arm64.mk
+++ b/content/browser/service_worker/database_proto.target.linux-arm64.mk
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -185,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.linux-mips.mk b/content/browser/service_worker/database_proto.target.linux-mips.mk
index 7c0e14bbf1..ba325090c1 100644
--- a/content/browser/service_worker/database_proto.target.linux-mips.mk
+++ b/content/browser/service_worker/database_proto.target.linux-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -157,6 +163,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -194,12 +201,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.linux-x86.mk b/content/browser/service_worker/database_proto.target.linux-x86.mk
index a862113542..9e040d6c87 100644
--- a/content/browser/service_worker/database_proto.target.linux-x86.mk
+++ b/content/browser/service_worker/database_proto.target.linux-x86.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -193,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/database_proto.target.linux-x86_64.mk b/content/browser/service_worker/database_proto.target.linux-x86_64.mk
index d2f2b4effc..460c316555 100644
--- a/content/browser/service_worker/database_proto.target.linux-x86_64.mk
+++ b/content/browser/service_worker/database_proto.target.linux-x86_64.mk
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -193,12 +198,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 24d2a9529a..fd2d201a66 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -4,14 +4,20 @@
#include "content/browser/service_worker/embedded_worker_instance.h"
+#include "base/bind_helpers.h"
+#include "content/browser/devtools/embedded_worker_devtools_manager.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/common/service_worker/embedded_worker_messages.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host.h"
#include "ipc/ipc_message.h"
#include "url/gurl.h"
namespace content {
namespace {
+
// Functor to sort by the .second element of a struct.
struct SecondGreater {
template <typename Value>
@@ -19,9 +25,75 @@ struct SecondGreater {
return lhs.second > rhs.second;
}
};
+
+void NotifyWorkerContextStarted(int worker_process_id, int worker_route_id) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(
+ NotifyWorkerContextStarted, worker_process_id, worker_route_id));
+ return;
+ }
+ EmbeddedWorkerDevToolsManager::GetInstance()->WorkerContextStarted(
+ worker_process_id, worker_route_id);
+}
+
+void NotifyWorkerDestroyed(int worker_process_id, int worker_route_id) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(NotifyWorkerDestroyed, worker_process_id, worker_route_id));
+ return;
+ }
+ EmbeddedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(
+ worker_process_id, worker_route_id);
+}
+
+void RegisterToWorkerDevToolsManager(
+ int process_id,
+ const ServiceWorkerContextCore* const service_worker_context,
+ int64 service_worker_version_id,
+ const base::Callback<void(int worker_devtools_agent_route_id,
+ bool pause_on_start)>& callback) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(RegisterToWorkerDevToolsManager,
+ process_id,
+ service_worker_context,
+ service_worker_version_id,
+ callback));
+ return;
+ }
+ int worker_devtools_agent_route_id = MSG_ROUTING_NONE;
+ bool pause_on_start = false;
+ if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) {
+ // |rph| may be NULL in unit tests.
+ worker_devtools_agent_route_id = rph->GetNextRoutingID();
+ pause_on_start =
+ EmbeddedWorkerDevToolsManager::GetInstance()->ServiceWorkerCreated(
+ process_id,
+ worker_devtools_agent_route_id,
+ EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier(
+ service_worker_context, service_worker_version_id));
+ }
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(callback, worker_devtools_agent_route_id, pause_on_start));
+}
+
} // namespace
EmbeddedWorkerInstance::~EmbeddedWorkerInstance() {
+ if (status_ == STARTING || status_ == RUNNING)
+ Stop();
+ if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE)
+ NotifyWorkerDestroyed(process_id_, worker_devtools_agent_route_id_);
+ if (context_ && process_id_ != -1)
+ context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_);
registry_->RemoveWorker(process_id_, embedded_worker_id_);
}
@@ -30,15 +102,29 @@ void EmbeddedWorkerInstance::Start(int64 service_worker_version_id,
const GURL& script_url,
const std::vector<int>& possible_process_ids,
const StatusCallback& callback) {
+ if (!context_) {
+ callback.Run(SERVICE_WORKER_ERROR_ABORT);
+ return;
+ }
DCHECK(status_ == STOPPED);
status_ = STARTING;
- std::vector<int> ordered_process_ids = SortProcesses(possible_process_ids);
- registry_->StartWorker(ordered_process_ids,
- embedded_worker_id_,
- service_worker_version_id,
- scope,
- script_url,
- callback);
+ scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params(
+ new EmbeddedWorkerMsg_StartWorker_Params());
+ params->embedded_worker_id = embedded_worker_id_;
+ params->service_worker_version_id = service_worker_version_id;
+ params->scope = scope;
+ params->script_url = script_url;
+ params->worker_devtools_agent_route_id = MSG_ROUTING_NONE;
+ params->pause_on_start = false;
+ context_->process_manager()->AllocateWorkerProcess(
+ embedded_worker_id_,
+ SortProcesses(possible_process_ids),
+ script_url,
+ base::Bind(&EmbeddedWorkerInstance::RunProcessAllocated,
+ weak_factory_.GetWeakPtr(),
+ context_,
+ base::Passed(&params),
+ callback));
}
ServiceWorkerStatusCode EmbeddedWorkerInstance::Stop() {
@@ -75,32 +161,80 @@ void EmbeddedWorkerInstance::ReleaseProcessReference(int process_id) {
process_refs_.erase(found);
}
-EmbeddedWorkerInstance::EmbeddedWorkerInstance(EmbeddedWorkerRegistry* registry,
- int embedded_worker_id)
- : registry_(registry),
+EmbeddedWorkerInstance::EmbeddedWorkerInstance(
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ int embedded_worker_id)
+ : context_(context),
+ registry_(context->embedded_worker_registry()),
embedded_worker_id_(embedded_worker_id),
status_(STOPPED),
process_id_(-1),
thread_id_(-1),
- worker_devtools_agent_route_id_(MSG_ROUTING_NONE) {
+ worker_devtools_agent_route_id_(MSG_ROUTING_NONE),
+ weak_factory_(this) {
}
-void EmbeddedWorkerInstance::RecordProcessId(
- int process_id,
+// static
+void EmbeddedWorkerInstance::RunProcessAllocated(
+ base::WeakPtr<EmbeddedWorkerInstance> instance,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const EmbeddedWorkerInstance::StatusCallback& callback,
ServiceWorkerStatusCode status,
- int worker_devtools_agent_route_id) {
+ int process_id) {
+ if (!context) {
+ callback.Run(SERVICE_WORKER_ERROR_ABORT);
+ return;
+ }
+ if (!instance) {
+ if (status == SERVICE_WORKER_OK) {
+ // We only have a process allocated if the status is OK.
+ context->process_manager()->ReleaseWorkerProcess(
+ params->embedded_worker_id);
+ }
+ callback.Run(SERVICE_WORKER_ERROR_ABORT);
+ return;
+ }
+ instance->ProcessAllocated(params.Pass(), callback, process_id, status);
+}
+
+void EmbeddedWorkerInstance::ProcessAllocated(
+ scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const StatusCallback& callback,
+ int process_id,
+ ServiceWorkerStatusCode status) {
DCHECK_EQ(process_id_, -1);
- DCHECK_EQ(worker_devtools_agent_route_id_, MSG_ROUTING_NONE);
- if (status == SERVICE_WORKER_OK) {
- process_id_ = process_id;
- worker_devtools_agent_route_id_ = worker_devtools_agent_route_id;
- } else {
+ if (status != SERVICE_WORKER_OK) {
status_ = STOPPED;
+ callback.Run(status);
+ return;
}
+ const int64 service_worker_version_id = params->service_worker_version_id;
+ process_id_ = process_id;
+ RegisterToWorkerDevToolsManager(
+ process_id,
+ context_.get(),
+ service_worker_version_id,
+ base::Bind(&EmbeddedWorkerInstance::SendStartWorker,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(&params),
+ callback));
+}
+
+void EmbeddedWorkerInstance::SendStartWorker(
+ scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const StatusCallback& callback,
+ int worker_devtools_agent_route_id,
+ bool pause_on_start) {
+ worker_devtools_agent_route_id_ = worker_devtools_agent_route_id;
+ params->worker_devtools_agent_route_id = worker_devtools_agent_route_id;
+ params->pause_on_start = pause_on_start;
+ registry_->SendStartWorker(params.Pass(), callback, process_id_);
}
void EmbeddedWorkerInstance::OnScriptLoaded() {
- // TODO(horo): Implement this.
+ if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE)
+ NotifyWorkerContextStarted(process_id_, worker_devtools_agent_route_id_);
}
void EmbeddedWorkerInstance::OnScriptLoadFailed() {
@@ -117,6 +251,10 @@ void EmbeddedWorkerInstance::OnStarted(int thread_id) {
}
void EmbeddedWorkerInstance::OnStopped() {
+ if (worker_devtools_agent_route_id_ != MSG_ROUTING_NONE)
+ NotifyWorkerDestroyed(process_id_, worker_devtools_agent_route_id_);
+ if (context_)
+ context_->process_manager()->ReleaseWorkerProcess(embedded_worker_id_);
status_ = STOPPED;
process_id_ = -1;
thread_id_ = -1;
diff --git a/content/browser/service_worker/embedded_worker_instance.h b/content/browser/service_worker/embedded_worker_instance.h
index f9d382c277..9e404ff464 100644
--- a/content/browser/service_worker/embedded_worker_instance.h
+++ b/content/browser/service_worker/embedded_worker_instance.h
@@ -13,12 +13,14 @@
#include "base/gtest_prod_util.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/strings/string16.h"
#include "content/common/content_export.h"
#include "content/common/service_worker/service_worker_status_code.h"
+#include "url/gurl.h"
-class GURL;
+struct EmbeddedWorkerMsg_StartWorker_Params;
namespace IPC {
class Message;
@@ -27,6 +29,7 @@ class Message;
namespace content {
class EmbeddedWorkerRegistry;
+class ServiceWorkerContextCore;
struct ServiceWorkerFetchRequest;
// This gives an interface to control one EmbeddedWorker instance, which
@@ -106,19 +109,34 @@ class CONTENT_EXPORT EmbeddedWorkerInstance {
friend class EmbeddedWorkerRegistry;
FRIEND_TEST_ALL_PREFIXES(EmbeddedWorkerInstanceTest, StartAndStop);
+ FRIEND_TEST_ALL_PREFIXES(EmbeddedWorkerInstanceTest, SortProcesses);
typedef std::map<int, int> ProcessRefMap;
// Constructor is called via EmbeddedWorkerRegistry::CreateWorker().
// This instance holds a ref of |registry|.
- EmbeddedWorkerInstance(EmbeddedWorkerRegistry* registry,
+ EmbeddedWorkerInstance(base::WeakPtr<ServiceWorkerContextCore> context,
int embedded_worker_id);
- // Called back from EmbeddedWorkerRegistry after Start() passes control to the
- // UI thread to acquire a reference to the process.
- void RecordProcessId(int process_id,
- ServiceWorkerStatusCode status,
- int worker_devtools_agent_route_id);
+ // Called back from ServiceWorkerProcessManager after Start() passes control
+ // to the UI thread to acquire a reference to the process.
+ static void RunProcessAllocated(
+ base::WeakPtr<EmbeddedWorkerInstance> instance,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const EmbeddedWorkerInstance::StatusCallback& callback,
+ ServiceWorkerStatusCode status,
+ int process_id);
+ void ProcessAllocated(scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const StatusCallback& callback,
+ int process_id,
+ ServiceWorkerStatusCode status);
+ // Called back after ProcessAllocated() passes control to the UI thread to
+ // register to WorkerDevToolsManager.
+ void SendStartWorker(scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const StatusCallback& callback,
+ int worker_devtools_agent_route_id,
+ bool pause_on_start);
// Called back from Registry when the worker instance has ack'ed that
// it finished loading the script.
@@ -163,6 +181,7 @@ class CONTENT_EXPORT EmbeddedWorkerInstance {
std::vector<int> SortProcesses(
const std::vector<int>& possible_process_ids) const;
+ base::WeakPtr<ServiceWorkerContextCore> context_;
scoped_refptr<EmbeddedWorkerRegistry> registry_;
const int embedded_worker_id_;
Status status_;
@@ -175,6 +194,8 @@ class CONTENT_EXPORT EmbeddedWorkerInstance {
ProcessRefMap process_refs_;
ListenerList listener_list_;
+ base::WeakPtrFactory<EmbeddedWorkerInstance> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstance);
};
diff --git a/content/browser/service_worker/embedded_worker_instance_unittest.cc b/content/browser/service_worker/embedded_worker_instance_unittest.cc
index 244b5f9344..d14ccd22f2 100644
--- a/content/browser/service_worker/embedded_worker_instance_unittest.cc
+++ b/content/browser/service_worker/embedded_worker_instance_unittest.cc
@@ -12,6 +12,7 @@
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/common/service_worker/embedded_worker_messages.h"
#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
@@ -129,7 +130,7 @@ TEST_F(EmbeddedWorkerInstanceTest, InstanceDestroyedBeforeStartFinishes) {
ipc_sink()->GetUniqueMessageMatching(EmbeddedWorkerMsg_StartWorker::ID));
}
-TEST_F(EmbeddedWorkerInstanceTest, ChooseProcess) {
+TEST_F(EmbeddedWorkerInstanceTest, SortProcesses) {
scoped_ptr<EmbeddedWorkerInstance> worker =
embedded_worker_registry()->CreateWorker();
EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker->status());
@@ -145,22 +146,22 @@ TEST_F(EmbeddedWorkerInstanceTest, ChooseProcess) {
helper_->SimulateAddProcessToWorker(embedded_worker_id, 3);
// Process 3 has the biggest # of references and it should be chosen.
- ServiceWorkerStatusCode status;
- base::RunLoop run_loop;
- worker->Start(
- 1L,
- GURL("http://example.com/*"),
- GURL("http://example.com/worker.js"),
- std::vector<int>(),
- base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
- run_loop.Run();
- EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status);
- EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status());
- EXPECT_EQ(3, worker->process_id());
-
- // Wait until started message is sent back.
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(EmbeddedWorkerInstance::RUNNING, worker->status());
+ EXPECT_THAT(worker->SortProcesses(std::vector<int>()),
+ testing::ElementsAre(3, 2, 1));
+ EXPECT_EQ(-1, worker->process_id());
+
+ // Argument processes are added to the existing set, but only for a single
+ // call.
+ std::vector<int> registering_processes;
+ registering_processes.push_back(1);
+ registering_processes.push_back(1);
+ registering_processes.push_back(1);
+ registering_processes.push_back(4);
+ EXPECT_THAT(worker->SortProcesses(registering_processes),
+ testing::ElementsAre(1, 3, 2, 4));
+
+ EXPECT_THAT(worker->SortProcesses(std::vector<int>()),
+ testing::ElementsAre(3, 2, 1));
}
} // namespace content
diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc
index a859268c39..988b0563f4 100644
--- a/content/browser/service_worker/embedded_worker_registry.cc
+++ b/content/browser/service_worker/embedded_worker_registry.cc
@@ -19,47 +19,18 @@ namespace content {
EmbeddedWorkerRegistry::EmbeddedWorkerRegistry(
base::WeakPtr<ServiceWorkerContextCore> context)
- : context_(context),
- next_embedded_worker_id_(0) {}
+ : context_(context), next_embedded_worker_id_(0) {
+}
scoped_ptr<EmbeddedWorkerInstance> EmbeddedWorkerRegistry::CreateWorker() {
scoped_ptr<EmbeddedWorkerInstance> worker(
- new EmbeddedWorkerInstance(this, next_embedded_worker_id_));
+ new EmbeddedWorkerInstance(context_, next_embedded_worker_id_));
worker_map_[next_embedded_worker_id_++] = worker.get();
return worker.Pass();
}
-void EmbeddedWorkerRegistry::StartWorker(const std::vector<int>& process_ids,
- int embedded_worker_id,
- int64 service_worker_version_id,
- const GURL& scope,
- const GURL& script_url,
- const StatusCallback& callback) {
- if (!context_) {
- callback.Run(SERVICE_WORKER_ERROR_ABORT);
- return;
- }
- scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params(
- new EmbeddedWorkerMsg_StartWorker_Params());
- params->embedded_worker_id = embedded_worker_id;
- params->service_worker_version_id = service_worker_version_id;
- params->scope = scope;
- params->script_url = script_url;
- params->worker_devtools_agent_route_id = MSG_ROUTING_NONE;
- context_->process_manager()->AllocateWorkerProcess(
- process_ids,
- script_url,
- base::Bind(&EmbeddedWorkerRegistry::StartWorkerWithProcessId,
- this,
- embedded_worker_id,
- base::Passed(&params),
- callback));
-}
-
ServiceWorkerStatusCode EmbeddedWorkerRegistry::StopWorker(
int process_id, int embedded_worker_id) {
- if (context_)
- context_->process_manager()->ReleaseWorkerProcess(process_id);
return Send(process_id,
new EmbeddedWorkerMsg_StopWorker(embedded_worker_id));
}
@@ -210,37 +181,10 @@ EmbeddedWorkerRegistry::~EmbeddedWorkerRegistry() {
Shutdown();
}
-void EmbeddedWorkerRegistry::StartWorkerWithProcessId(
- int embedded_worker_id,
+void EmbeddedWorkerRegistry::SendStartWorker(
scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
const StatusCallback& callback,
- ServiceWorkerStatusCode status,
int process_id) {
- WorkerInstanceMap::const_iterator worker =
- worker_map_.find(embedded_worker_id);
- if (worker == worker_map_.end()) {
- // The Instance was destroyed before it could finish starting. Undo what
- // we've done so far.
- if (context_)
- context_->process_manager()->ReleaseWorkerProcess(process_id);
- callback.Run(SERVICE_WORKER_ERROR_ABORT);
- return;
- }
- if (status == SERVICE_WORKER_OK) {
- // Gets the new routing id for the renderer process.
- scoped_refptr<RenderWidgetHelper> helper(
- RenderWidgetHelper::FromProcessHostID(process_id));
- // |helper| may be NULL in unittest.
- params->worker_devtools_agent_route_id =
- helper ? helper->GetNextRoutingID() : MSG_ROUTING_NONE;
- }
- worker->second->RecordProcessId(
- process_id, status, params->worker_devtools_agent_route_id);
-
- if (status != SERVICE_WORKER_OK) {
- callback.Run(status);
- return;
- }
// The ServiceWorkerDispatcherHost is supposed to be created when the process
// is created, and keep an entry in process_sender_map_ for its whole
// lifetime.
@@ -249,13 +193,14 @@ void EmbeddedWorkerRegistry::StartWorkerWithProcessId(
}
ServiceWorkerStatusCode EmbeddedWorkerRegistry::Send(
- int process_id, IPC::Message* message) {
+ int process_id, IPC::Message* message_ptr) {
+ scoped_ptr<IPC::Message> message(message_ptr);
if (!context_)
return SERVICE_WORKER_ERROR_ABORT;
ProcessToSenderMap::iterator found = process_sender_map_.find(process_id);
if (found == process_sender_map_.end())
return SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND;
- if (!found->second->Send(message))
+ if (!found->second->Send(message.release()))
return SERVICE_WORKER_ERROR_IPC_FAILED;
return SERVICE_WORKER_OK;
}
diff --git a/content/browser/service_worker/embedded_worker_registry.h b/content/browser/service_worker/embedded_worker_registry.h
index 24b5b69a50..3df2e23807 100644
--- a/content/browser/service_worker/embedded_worker_registry.h
+++ b/content/browser/service_worker/embedded_worker_registry.h
@@ -50,12 +50,9 @@ class CONTENT_EXPORT EmbeddedWorkerRegistry
scoped_ptr<EmbeddedWorkerInstance> CreateWorker();
// Called from EmbeddedWorkerInstance, relayed to the child process.
- void StartWorker(const std::vector<int>& process_ids,
- int embedded_worker_id,
- int64 service_worker_version_id,
- const GURL& scope,
- const GURL& script_url,
- const StatusCallback& callback);
+ void SendStartWorker(scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
+ const StatusCallback& callback,
+ int process_id);
ServiceWorkerStatusCode StopWorker(int process_id,
int embedded_worker_id);
@@ -96,13 +93,6 @@ class CONTENT_EXPORT EmbeddedWorkerRegistry
~EmbeddedWorkerRegistry();
- void StartWorkerWithProcessId(
- int embedded_worker_id,
- scoped_ptr<EmbeddedWorkerMsg_StartWorker_Params> params,
- const StatusCallback& callback,
- ServiceWorkerStatusCode status,
- int process_id);
-
ServiceWorkerStatusCode Send(int process_id, IPC::Message* message);
// RemoveWorker is called when EmbeddedWorkerInstance is destructed.
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc
index e6f8ce57a7..82d206142a 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.cc
+++ b/content/browser/service_worker/embedded_worker_test_helper.cc
@@ -15,22 +15,15 @@
namespace content {
-static bool AlwaysTrue(int process_id) {
- return true;
-}
-
EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(int mock_render_process_id)
: wrapper_(new ServiceWorkerContextWrapper(NULL)),
next_thread_id_(0),
weak_factory_(this) {
- wrapper_->InitForTesting(base::FilePath(),
- base::MessageLoopProxy::current(),
- NULL);
- scoped_ptr<ServiceWorkerProcessManager> process_manager(
- new ServiceWorkerProcessManager(wrapper_));
- process_manager->SetProcessRefcountOpsForTest(base::Bind(AlwaysTrue),
- base::Bind(AlwaysTrue));
- wrapper_->context()->SetProcessManagerForTest(process_manager.Pass());
+ wrapper_->InitInternal(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL);
+ wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id);
registry()->AddChildProcessSender(mock_render_process_id, this);
}
@@ -134,10 +127,12 @@ void EmbeddedWorkerTestHelper::OnFetchEvent(
const ServiceWorkerFetchRequest& request) {
SimulateSend(
new ServiceWorkerHostMsg_FetchEventFinished(
- embedded_worker_id, request_id,
+ embedded_worker_id,
+ request_id,
SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
- ServiceWorkerResponse(200, "OK", "GET",
- std::map<std::string, std::string>())));
+ ServiceWorkerResponse(200, "OK",
+ std::map<std::string, std::string>(),
+ std::string())));
}
void EmbeddedWorkerTestHelper::SimulateWorkerStarted(
@@ -153,8 +148,8 @@ void EmbeddedWorkerTestHelper::SimulateWorkerStarted(
void EmbeddedWorkerTestHelper::SimulateWorkerStopped(
int embedded_worker_id) {
EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
- ASSERT_TRUE(worker != NULL);
- registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
+ if (worker != NULL)
+ registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
}
void EmbeddedWorkerTestHelper::SimulateSend(
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 9b32308834..18c5f91d60 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -468,10 +468,11 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) {
ServiceWorkerResponse response;
FetchTestHelper("/service_worker/fetch_event.js", &result, &response);
ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
- EXPECT_EQ(200, response.status_code);
- EXPECT_EQ("OK", response.status_text);
- EXPECT_EQ("GET", response.method);
+ EXPECT_EQ(301, response.status_code);
+ EXPECT_EQ("Moved Permanently", response.status_text);
std::map<std::string, std::string> expected_headers;
+ expected_headers["Content-Language"] = "fi";
+ expected_headers["Content-Type"] = "text/html; charset=UTF-8";
EXPECT_EQ(expected_headers, response.headers);
}
@@ -550,10 +551,6 @@ class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest {
continuation.Run();
}
- int RenderProcessID() {
- return shell()->web_contents()->GetRenderProcessHost()->GetID();
- }
-
void FindRegistrationOnIO(const GURL& document_url,
ServiceWorkerStatusCode* status,
GURL* script_url,
@@ -583,7 +580,21 @@ class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest {
}
};
+static int CountRenderProcessHosts() {
+ int result = 0;
+ for (RenderProcessHost::iterator iter(RenderProcessHost::AllHostsIterator());
+ !iter.IsAtEnd();
+ iter.Advance()) {
+ result++;
+ }
+ return result;
+}
+
IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
+ // Close the only window to be sure we're not re-using its RenderProcessHost.
+ shell()->Close();
+ EXPECT_EQ(0, CountRenderProcessHosts());
+
const std::string kWorkerUrl = "/service_worker/fetch_event.js";
// Unregistering nothing should return true.
@@ -597,6 +608,19 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
run_loop.Run();
}
+ // If we use a worker URL that doesn't exist, registration fails.
+ {
+ base::RunLoop run_loop;
+ public_context()->RegisterServiceWorker(
+ embedded_test_server()->GetURL("/*"),
+ embedded_test_server()->GetURL("/does/not/exist"),
+ base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
+ false,
+ run_loop.QuitClosure()));
+ run_loop.Run();
+ }
+ EXPECT_EQ(0, CountRenderProcessHosts());
+
// Register returns when the promise would be resolved.
{
base::RunLoop run_loop;
@@ -608,6 +632,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
run_loop.QuitClosure()));
run_loop.Run();
}
+ EXPECT_EQ(1, CountRenderProcessHosts());
// Registering again should succeed, although the algo still
// might not be complete.
@@ -636,6 +661,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
run_loop.QuitClosure()));
run_loop.Run();
}
+ EXPECT_GE(1, CountRenderProcessHosts()) << "Unregistering doesn't stop the "
+ "workers eagerly, so their RPHs "
+ "can still be running.";
// Should not be able to find it.
{
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc
index 7a8e3860eb..cdc67460bc 100644
--- a/content/browser/service_worker/service_worker_context_core.cc
+++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -5,6 +5,7 @@
#include "content/browser/service_worker/service_worker_context_core.h"
#include "base/files/file_path.h"
+#include "base/message_loop/message_loop_proxy.h"
#include "base/strings/string_util.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
#include "content/browser/service_worker/service_worker_context_observer.h"
@@ -78,14 +79,19 @@ void ServiceWorkerContextCore::ProviderHostIterator::Initialize() {
ServiceWorkerContextCore::ServiceWorkerContextCore(
const base::FilePath& path,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy,
ObserverListThreadSafe<ServiceWorkerContextObserver>* observer_list,
- scoped_ptr<ServiceWorkerProcessManager> process_manager)
- : storage_(new ServiceWorkerStorage(
- path, AsWeakPtr(), database_task_runner, quota_manager_proxy)),
+ ServiceWorkerContextWrapper* wrapper)
+ : weak_factory_(this),
+ wrapper_(wrapper),
+ storage_(new ServiceWorkerStorage(path,
+ AsWeakPtr(),
+ database_task_runner,
+ disk_cache_thread,
+ quota_manager_proxy)),
embedded_worker_registry_(new EmbeddedWorkerRegistry(AsWeakPtr())),
job_coordinator_(new ServiceWorkerJobCoordinator(AsWeakPtr())),
- process_manager_(process_manager.Pass()),
next_handle_id_(0),
observer_list_(observer_list) {
}
@@ -96,10 +102,7 @@ ServiceWorkerContextCore::~ServiceWorkerContextCore() {
++it) {
it->second->RemoveListener(this);
}
- providers_.Clear();
- storage_.reset();
- job_coordinator_.reset();
- embedded_worker_registry_ = NULL;
+ weak_factory_.InvalidateWeakPtrs();
}
ServiceWorkerProviderHost* ServiceWorkerContextCore::GetProviderHost(
@@ -156,6 +159,7 @@ void ServiceWorkerContextCore::RegisterServiceWorker(
source_process_id,
base::Bind(&ServiceWorkerContextCore::RegistrationComplete,
AsWeakPtr(),
+ pattern,
callback));
}
@@ -164,10 +168,16 @@ void ServiceWorkerContextCore::UnregisterServiceWorker(
const UnregistrationCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- job_coordinator_->Unregister(pattern, callback);
+ job_coordinator_->Unregister(
+ pattern,
+ base::Bind(&ServiceWorkerContextCore::UnregistrationComplete,
+ AsWeakPtr(),
+ pattern,
+ callback));
}
void ServiceWorkerContextCore::RegistrationComplete(
+ const GURL& pattern,
const ServiceWorkerContextCore::RegistrationCallback& callback,
ServiceWorkerStatusCode status,
ServiceWorkerRegistration* registration,
@@ -185,6 +195,21 @@ void ServiceWorkerContextCore::RegistrationComplete(
callback.Run(status,
registration->id(),
version->version_id());
+ if (observer_list_) {
+ observer_list_->Notify(&ServiceWorkerContextObserver::OnRegistrationStored,
+ pattern);
+ }
+}
+
+void ServiceWorkerContextCore::UnregistrationComplete(
+ const GURL& pattern,
+ const ServiceWorkerContextCore::UnregistrationCallback& callback,
+ ServiceWorkerStatusCode status) {
+ callback.Run(status);
+ if (observer_list_) {
+ observer_list_->Notify(&ServiceWorkerContextObserver::OnRegistrationDeleted,
+ pattern);
+ }
}
ServiceWorkerRegistration* ServiceWorkerContextCore::GetLiveRegistration(
@@ -219,6 +244,30 @@ void ServiceWorkerContextCore::RemoveLiveVersion(int64 id) {
live_versions_.erase(id);
}
+std::vector<ServiceWorkerRegistrationInfo>
+ServiceWorkerContextCore::GetAllLiveRegistrationInfo() {
+ std::vector<ServiceWorkerRegistrationInfo> infos;
+ for (std::map<int64, ServiceWorkerRegistration*>::const_iterator iter =
+ live_registrations_.begin();
+ iter != live_registrations_.end();
+ ++iter) {
+ infos.push_back(iter->second->GetInfo());
+ }
+ return infos;
+}
+
+std::vector<ServiceWorkerVersionInfo>
+ServiceWorkerContextCore::GetAllLiveVersionInfo() {
+ std::vector<ServiceWorkerVersionInfo> infos;
+ for (std::map<int64, ServiceWorkerVersion*>::const_iterator iter =
+ live_versions_.begin();
+ iter != live_versions_.end();
+ ++iter) {
+ infos.push_back(iter->second->GetInfo());
+ }
+ return infos;
+}
+
int ServiceWorkerContextCore::GetNewServiceWorkerHandleId() {
return next_handle_id_++;
}
@@ -284,4 +333,8 @@ void ServiceWorkerContextCore::OnReportConsoleMessage(
source_identifier, message_level, message, line_number, source_url));
}
+ServiceWorkerProcessManager* ServiceWorkerContextCore::process_manager() {
+ return wrapper_->process_manager();
+}
+
} // namespace content
diff --git a/content/browser/service_worker/service_worker_context_core.h b/content/browser/service_worker/service_worker_context_core.h
index 54dcc9db6e..b3f97ae28f 100644
--- a/content/browser/service_worker/service_worker_context_core.h
+++ b/content/browser/service_worker/service_worker_context_core.h
@@ -25,6 +25,7 @@ class GURL;
namespace base {
class FilePath;
+class MessageLoopProxy;
class SequencedTaskRunner;
}
@@ -36,6 +37,7 @@ namespace content {
class EmbeddedWorkerRegistry;
class ServiceWorkerContextObserver;
+class ServiceWorkerContextWrapper;
class ServiceWorkerHandle;
class ServiceWorkerJobCoordinator;
class ServiceWorkerProviderHost;
@@ -48,8 +50,7 @@ class ServiceWorkerStorage;
// is the root of the containment hierarchy for service worker data
// associated with a particular partition.
class CONTENT_EXPORT ServiceWorkerContextCore
- : NON_EXPORTED_BASE(public base::SupportsWeakPtr<ServiceWorkerContextCore>),
- public ServiceWorkerVersion::Listener {
+ : public ServiceWorkerVersion::Listener {
public:
typedef base::Callback<void(ServiceWorkerStatusCode status,
int64 registration_id,
@@ -88,9 +89,10 @@ class CONTENT_EXPORT ServiceWorkerContextCore
ServiceWorkerContextCore(
const base::FilePath& user_data_directory,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy,
ObserverListThreadSafe<ServiceWorkerContextObserver>* observer_list,
- scoped_ptr<ServiceWorkerProcessManager> process_manager);
+ ServiceWorkerContextWrapper* wrapper);
virtual ~ServiceWorkerContextCore();
// ServiceWorkerVersion::Listener overrides.
@@ -110,9 +112,7 @@ class CONTENT_EXPORT ServiceWorkerContextCore
const GURL& source_url) OVERRIDE;
ServiceWorkerStorage* storage() { return storage_.get(); }
- ServiceWorkerProcessManager* process_manager() {
- return process_manager_.get();
- }
+ ServiceWorkerProcessManager* process_manager();
EmbeddedWorkerRegistry* embedded_worker_registry() {
return embedded_worker_registry_.get();
}
@@ -151,13 +151,14 @@ class CONTENT_EXPORT ServiceWorkerContextCore
void AddLiveVersion(ServiceWorkerVersion* version);
void RemoveLiveVersion(int64 registration_id);
+ std::vector<ServiceWorkerRegistrationInfo> GetAllLiveRegistrationInfo();
+ std::vector<ServiceWorkerVersionInfo> GetAllLiveVersionInfo();
+
// Returns new context-local unique ID for ServiceWorkerHandle.
int GetNewServiceWorkerHandleId();
- // Allows tests to change how processes are created.
- void SetProcessManagerForTest(
- scoped_ptr<ServiceWorkerProcessManager> new_process_manager) {
- process_manager_ = new_process_manager.Pass();
+ base::WeakPtr<ServiceWorkerContextCore> AsWeakPtr() {
+ return weak_factory_.GetWeakPtr();
}
private:
@@ -168,21 +169,28 @@ class CONTENT_EXPORT ServiceWorkerContextCore
return providers_.Lookup(process_id);
}
- void RegistrationComplete(
- const RegistrationCallback& callback,
- ServiceWorkerStatusCode status,
- ServiceWorkerRegistration* registration,
- ServiceWorkerVersion* version);
-
+ void RegistrationComplete(const GURL& pattern,
+ const RegistrationCallback& callback,
+ ServiceWorkerStatusCode status,
+ ServiceWorkerRegistration* registration,
+ ServiceWorkerVersion* version);
+
+ void UnregistrationComplete(const GURL& pattern,
+ const UnregistrationCallback& callback,
+ ServiceWorkerStatusCode status);
+
+ base::WeakPtrFactory<ServiceWorkerContextCore> weak_factory_;
+ // It's safe to store a raw pointer instead of a scoped_refptr to |wrapper_|
+ // because the Wrapper::Shutdown call that hops threads to destroy |this| uses
+ // Bind() to hold a reference to |wrapper_| until |this| is fully destroyed.
+ ServiceWorkerContextWrapper* wrapper_;
ProcessToProviderMap providers_;
scoped_ptr<ServiceWorkerStorage> storage_;
scoped_refptr<EmbeddedWorkerRegistry> embedded_worker_registry_;
scoped_ptr<ServiceWorkerJobCoordinator> job_coordinator_;
- scoped_ptr<ServiceWorkerProcessManager> process_manager_;
std::map<int64, ServiceWorkerRegistration*> live_registrations_;
std::map<int64, ServiceWorkerVersion*> live_versions_;
int next_handle_id_;
-
scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> >
observer_list_;
diff --git a/content/browser/service_worker/service_worker_context_observer.h b/content/browser/service_worker/service_worker_context_observer.h
index 8bf5e99fa8..8bdaeea394 100644
--- a/content/browser/service_worker/service_worker_context_observer.h
+++ b/content/browser/service_worker/service_worker_context_observer.h
@@ -58,6 +58,8 @@ class ServiceWorkerContextObserver {
int process_id,
int thread_id,
const ConsoleMessage& message) {}
+ virtual void OnRegistrationStored(const GURL& pattern) {}
+ virtual void OnRegistrationDeleted(const GURL& pattern) {}
protected:
virtual ~ServiceWorkerContextObserver() {}
diff --git a/content/browser/service_worker/service_worker_context_request_handler.cc b/content/browser/service_worker/service_worker_context_request_handler.cc
index cd6c200f71..248587fceb 100644
--- a/content/browser/service_worker/service_worker_context_request_handler.cc
+++ b/content/browser/service_worker/service_worker_context_request_handler.cc
@@ -4,9 +4,12 @@
#include "content/browser/service_worker/service_worker_context_request_handler.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_provider_host.h"
#include "content/browser/service_worker/service_worker_read_from_cache_job.h"
+#include "content/browser/service_worker/service_worker_storage.h"
#include "content/browser/service_worker/service_worker_version.h"
+#include "content/browser/service_worker/service_worker_write_to_cache_job.h"
#include "net/url_request/url_request.h"
namespace content {
@@ -14,8 +17,12 @@ namespace content {
ServiceWorkerContextRequestHandler::ServiceWorkerContextRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type)
- : ServiceWorkerRequestHandler(context, provider_host, resource_type),
+ : ServiceWorkerRequestHandler(context,
+ provider_host,
+ blob_storage_context,
+ resource_type),
version_(provider_host_->running_hosted_version()) {
DCHECK(provider_host_->IsHostToRunningServiceWorker());
}
@@ -26,7 +33,11 @@ ServiceWorkerContextRequestHandler::~ServiceWorkerContextRequestHandler() {
net::URLRequestJob* ServiceWorkerContextRequestHandler::MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) {
- if (!provider_host_ || !version_)
+ if (!provider_host_ || !version_ || !context_)
+ return NULL;
+
+ // We currently have no use case for hijacking a redirected request.
+ if (request->url_chain().size() > 1)
return NULL;
// We only use the script cache for main script loading and
@@ -40,8 +51,11 @@ net::URLRequestJob* ServiceWorkerContextRequestHandler::MaybeCreateJob(
}
if (ShouldAddToScriptCache(request->url())) {
- return NULL;
- // TODO(michaeln): return new ServiceWorkerWriteToCacheJob();
+ int64 response_id = context_->storage()->NewResourceId();
+ if (response_id == kInvalidServiceWorkerResponseId)
+ return NULL;
+ return new ServiceWorkerWriteToCacheJob(
+ request, network_delegate, context_, version_, response_id);
}
int64 response_id = kInvalidServiceWorkerResponseId;
@@ -56,11 +70,11 @@ net::URLRequestJob* ServiceWorkerContextRequestHandler::MaybeCreateJob(
bool ServiceWorkerContextRequestHandler::ShouldAddToScriptCache(
const GURL& url) {
- // TODO(michaeln): Ensure the transition to INSTALLING can't
- // happen prior to the initial eval completion.
+ // We only write imports that occur during the initial eval.
if (version_->status() != ServiceWorkerVersion::NEW)
return false;
- return version_->LookupInScriptCache(url) == kInvalidServiceWorkerResponseId;
+ return version_->script_cache_map()->Lookup(url) ==
+ kInvalidServiceWorkerResponseId;
}
bool ServiceWorkerContextRequestHandler::ShouldReadFromScriptCache(
@@ -69,7 +83,7 @@ bool ServiceWorkerContextRequestHandler::ShouldReadFromScriptCache(
if (version_->status() == ServiceWorkerVersion::NEW ||
version_->status() == ServiceWorkerVersion::INSTALLING)
return false;
- *response_id_out = version_->LookupInScriptCache(url);
+ *response_id_out = version_->script_cache_map()->Lookup(url);
return *response_id_out != kInvalidServiceWorkerResponseId;
}
diff --git a/content/browser/service_worker/service_worker_context_request_handler.h b/content/browser/service_worker/service_worker_context_request_handler.h
index d2e6adb560..ca894ce237 100644
--- a/content/browser/service_worker/service_worker_context_request_handler.h
+++ b/content/browser/service_worker/service_worker_context_request_handler.h
@@ -19,6 +19,7 @@ class CONTENT_EXPORT ServiceWorkerContextRequestHandler
ServiceWorkerContextRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type);
virtual ~ServiceWorkerContextRequestHandler();
diff --git a/content/browser/service_worker/service_worker_context_unittest.cc b/content/browser/service_worker/service_worker_context_unittest.cc
index 6a8088be9e..14f54f7cb5 100644
--- a/content/browser/service_worker/service_worker_context_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_unittest.cc
@@ -13,6 +13,7 @@
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/browser/service_worker/service_worker_storage.h"
+#include "content/common/service_worker/embedded_worker_messages.h"
#include "content/common/service_worker/service_worker_messages.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
@@ -28,6 +29,7 @@ void SaveResponseCallback(bool* called,
ServiceWorkerStatusCode status,
int64 registration_id,
int64 version_id) {
+ EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status);
*called = true;
*store_registration_id = registration_id;
*store_version_id = version_id;
@@ -54,7 +56,7 @@ ServiceWorkerContextCore::UnregistrationCallback MakeUnregisteredCallback(
void ExpectRegisteredWorkers(
ServiceWorkerStatusCode expect_status,
int64 expect_version_id,
- bool expect_pending,
+ bool expect_waiting,
bool expect_active,
ServiceWorkerStatusCode status,
const scoped_refptr<ServiceWorkerRegistration>& registration) {
@@ -64,12 +66,12 @@ void ExpectRegisteredWorkers(
return;
}
- if (expect_pending) {
- EXPECT_TRUE(registration->pending_version());
+ if (expect_waiting) {
+ EXPECT_TRUE(registration->waiting_version());
EXPECT_EQ(expect_version_id,
- registration->pending_version()->version_id());
+ registration->waiting_version()->version_id());
} else {
- EXPECT_FALSE(registration->pending_version());
+ EXPECT_FALSE(registration->waiting_version());
}
if (expect_active) {
@@ -150,11 +152,15 @@ TEST_F(ServiceWorkerContextTest, Register) {
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(called);
- EXPECT_EQ(3UL, helper_->ipc_sink()->message_count());
+ EXPECT_EQ(4UL, helper_->ipc_sink()->message_count());
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StartWorker::ID));
EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_InstallEvent::ID));
EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_ActivateEvent::ID));
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StopWorker::ID));
EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id);
EXPECT_NE(kInvalidServiceWorkerVersionId, version_id);
@@ -164,13 +170,13 @@ TEST_F(ServiceWorkerContextTest, Register) {
base::Bind(&ExpectRegisteredWorkers,
SERVICE_WORKER_OK,
version_id,
- false /* expect_pending */,
+ false /* expect_waiting */,
true /* expect_active */));
base::RunLoop().RunUntilIdle();
}
// Test registration when the service worker rejects the install event. The
-// registration callback should indicate success, but there should be no pending
+// registration callback should indicate success, but there should be no waiting
// or active worker in the registration.
TEST_F(ServiceWorkerContextTest, Register_RejectInstall) {
helper_.reset(); // Make sure the process lookups stay overridden.
@@ -189,11 +195,15 @@ TEST_F(ServiceWorkerContextTest, Register_RejectInstall) {
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(called);
- EXPECT_EQ(2UL, helper_->ipc_sink()->message_count());
+ EXPECT_EQ(3UL, helper_->ipc_sink()->message_count());
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StartWorker::ID));
EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_InstallEvent::ID));
EXPECT_FALSE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_ActivateEvent::ID));
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StopWorker::ID));
EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id);
EXPECT_NE(kInvalidServiceWorkerVersionId, version_id);
@@ -203,13 +213,13 @@ TEST_F(ServiceWorkerContextTest, Register_RejectInstall) {
base::Bind(&ExpectRegisteredWorkers,
SERVICE_WORKER_ERROR_NOT_FOUND,
kInvalidServiceWorkerVersionId,
- false /* expect_pending */,
+ false /* expect_waiting */,
false /* expect_active */));
base::RunLoop().RunUntilIdle();
}
// Test registration when the service worker rejects the activate event. The
-// registration callback should indicate success, but there should be no pending
+// registration callback should indicate success, but there should be no waiting
// or active worker in the registration.
TEST_F(ServiceWorkerContextTest, Register_RejectActivate) {
helper_.reset(); // Make sure the process lookups stay overridden.
@@ -228,11 +238,15 @@ TEST_F(ServiceWorkerContextTest, Register_RejectActivate) {
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(called);
- EXPECT_EQ(3UL, helper_->ipc_sink()->message_count());
+ EXPECT_EQ(4UL, helper_->ipc_sink()->message_count());
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StartWorker::ID));
EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_InstallEvent::ID));
EXPECT_TRUE(helper_->inner_ipc_sink()->GetUniqueMessageMatching(
ServiceWorkerMsg_ActivateEvent::ID));
+ EXPECT_TRUE(helper_->ipc_sink()->GetUniqueMessageMatching(
+ EmbeddedWorkerMsg_StopWorker::ID));
EXPECT_NE(kInvalidServiceWorkerRegistrationId, registration_id);
EXPECT_NE(kInvalidServiceWorkerVersionId, version_id);
@@ -242,7 +256,7 @@ TEST_F(ServiceWorkerContextTest, Register_RejectActivate) {
base::Bind(&ExpectRegisteredWorkers,
SERVICE_WORKER_ERROR_NOT_FOUND,
kInvalidServiceWorkerVersionId,
- false /* expect_pending */,
+ false /* expect_waiting */,
false /* expect_active */));
base::RunLoop().RunUntilIdle();
}
@@ -281,7 +295,7 @@ TEST_F(ServiceWorkerContextTest, Unregister) {
base::Bind(&ExpectRegisteredWorkers,
SERVICE_WORKER_ERROR_NOT_FOUND,
kInvalidServiceWorkerVersionId,
- false /* expect_pending */,
+ false /* expect_waiting */,
false /* expect_active */));
base::RunLoop().RunUntilIdle();
}
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
index fd808be2c1..460f6df36e 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.cc
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -18,7 +18,7 @@ ServiceWorkerContextWrapper::ServiceWorkerContextWrapper(
BrowserContext* browser_context)
: observer_list_(
new ObserverListThreadSafe<ServiceWorkerContextObserver>()),
- browser_context_(browser_context) {
+ process_manager_(new ServiceWorkerProcessManager(browser_context)) {
}
ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() {
@@ -32,20 +32,19 @@ void ServiceWorkerContextWrapper::Init(
GetSequencedTaskRunnerWithShutdownBehavior(
BrowserThread::GetBlockingPool()->GetSequenceToken(),
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
- InitInternal(user_data_directory, database_task_runner, quota_manager_proxy);
+ scoped_refptr<base::MessageLoopProxy> disk_cache_thread =
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE);
+ InitInternal(user_data_directory, database_task_runner,
+ disk_cache_thread, quota_manager_proxy);
}
void ServiceWorkerContextWrapper::Shutdown() {
- if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- browser_context_ = NULL;
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&ServiceWorkerContextWrapper::Shutdown, this));
- return;
- }
- // Breaks the reference cycle through ServiceWorkerProcessManager.
- context_core_.reset();
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ process_manager_->Shutdown();
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&ServiceWorkerContextWrapper::ShutdownOnIO, this));
}
ServiceWorkerContextCore* ServiceWorkerContextWrapper::context() {
@@ -118,6 +117,11 @@ void ServiceWorkerContextWrapper::UnregisterServiceWorker(
base::Bind(&FinishUnregistrationOnIO, continuation));
}
+void ServiceWorkerContextWrapper::Terminate() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ process_manager_->Shutdown();
+}
+
void ServiceWorkerContextWrapper::AddObserver(
ServiceWorkerContextObserver* observer) {
observer_list_->AddObserver(observer);
@@ -128,16 +132,10 @@ void ServiceWorkerContextWrapper::RemoveObserver(
observer_list_->RemoveObserver(observer);
}
-void ServiceWorkerContextWrapper::InitForTesting(
- const base::FilePath& user_data_directory,
- base::SequencedTaskRunner* database_task_runner,
- quota::QuotaManagerProxy* quota_manager_proxy) {
- InitInternal(user_data_directory, database_task_runner, quota_manager_proxy);
-}
-
void ServiceWorkerContextWrapper::InitInternal(
const base::FilePath& user_data_directory,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy) {
if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
BrowserThread::PostTask(
@@ -147,16 +145,22 @@ void ServiceWorkerContextWrapper::InitInternal(
this,
user_data_directory,
make_scoped_refptr(database_task_runner),
+ make_scoped_refptr(disk_cache_thread),
make_scoped_refptr(quota_manager_proxy)));
return;
}
DCHECK(!context_core_);
- context_core_.reset(new ServiceWorkerContextCore(
- user_data_directory,
- database_task_runner,
- quota_manager_proxy,
- observer_list_,
- make_scoped_ptr(new ServiceWorkerProcessManager(this))));
+ context_core_.reset(new ServiceWorkerContextCore(user_data_directory,
+ database_task_runner,
+ disk_cache_thread,
+ quota_manager_proxy,
+ observer_list_,
+ this));
+}
+
+void ServiceWorkerContextWrapper::ShutdownOnIO() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ context_core_.reset();
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h
index 6b5b841ca6..029af6f54c 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.h
+++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -16,6 +16,7 @@
namespace base {
class FilePath;
+class MessageLoopProxy;
class SequencedTaskRunner;
}
@@ -48,6 +49,11 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
// The core context is only for use on the IO thread.
ServiceWorkerContextCore* context();
+ // The process manager can be used on either UI or IO.
+ ServiceWorkerProcessManager* process_manager() {
+ return process_manager_.get();
+ }
+
// ServiceWorkerContext implementation:
virtual void RegisterServiceWorker(
const GURL& pattern,
@@ -56,6 +62,7 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
virtual void UnregisterServiceWorker(const GURL& pattern,
const ResultCallback& continuation)
OVERRIDE;
+ virtual void Terminate() OVERRIDE;
void AddObserver(ServiceWorkerContextObserver* observer);
void RemoveObserver(ServiceWorkerContextObserver* observer);
@@ -66,17 +73,16 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
friend class ServiceWorkerProcessManager;
virtual ~ServiceWorkerContextWrapper();
- void InitForTesting(const base::FilePath& user_data_directory,
- base::SequencedTaskRunner* database_task_runner,
- quota::QuotaManagerProxy* quota_manager_proxy);
void InitInternal(const base::FilePath& user_data_directory,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy);
+ void ShutdownOnIO();
const scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> >
observer_list_;
+ const scoped_ptr<ServiceWorkerProcessManager> process_manager_;
// Cleared in Shutdown():
- BrowserContext* browser_context_;
scoped_ptr<ServiceWorkerContextCore> context_core_;
};
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.cc b/content/browser/service_worker/service_worker_controllee_request_handler.cc
index 148ce44317..2465b3020a 100644
--- a/content/browser/service_worker/service_worker_controllee_request_handler.cc
+++ b/content/browser/service_worker/service_worker_controllee_request_handler.cc
@@ -17,8 +17,12 @@ namespace content {
ServiceWorkerControlleeRequestHandler::ServiceWorkerControlleeRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type)
- : ServiceWorkerRequestHandler(context, provider_host, resource_type),
+ : ServiceWorkerRequestHandler(context,
+ provider_host,
+ blob_storage_context,
+ resource_type),
weak_factory_(this) {
}
@@ -52,8 +56,8 @@ net::URLRequestJob* ServiceWorkerControlleeRequestHandler::MaybeCreateJob(
// It's for original request (A) or redirect case (B-a or B-b).
DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker());
- job_ = new ServiceWorkerURLRequestJob(request, network_delegate,
- provider_host_);
+ job_ = new ServiceWorkerURLRequestJob(
+ request, network_delegate, provider_host_, blob_storage_context_);
if (ServiceWorkerUtils::IsMainResourceType(resource_type_))
PrepareForMainResource(request->url());
else
@@ -77,7 +81,7 @@ void ServiceWorkerControlleeRequestHandler::PrepareForMainResource(
// The corresponding provider_host may already have associate version in
// redirect case, unassociate it now.
provider_host_->SetActiveVersion(NULL);
- provider_host_->SetPendingVersion(NULL);
+ provider_host_->SetWaitingVersion(NULL);
provider_host_->set_document_url(url);
context_->storage()->FindRegistrationForDocument(
url,
@@ -95,12 +99,12 @@ ServiceWorkerControlleeRequestHandler::DidLookupRegistrationForMainResource(
job_->FallbackToNetwork();
return;
}
- // TODO(michaeln): should SetPendingVersion() even if no active version so
+ // TODO(michaeln): should SetWaitingVersion() even if no active version so
// so the versions in the pipeline (.installing, .waiting) show up in the
// attribute values.
DCHECK(registration);
provider_host_->SetActiveVersion(registration->active_version());
- provider_host_->SetPendingVersion(registration->pending_version());
+ provider_host_->SetWaitingVersion(registration->waiting_version());
job_->ForwardToServiceWorker();
}
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.h b/content/browser/service_worker/service_worker_controllee_request_handler.h
index 4a12fd8610..87227cb32d 100644
--- a/content/browser/service_worker/service_worker_controllee_request_handler.h
+++ b/content/browser/service_worker/service_worker_controllee_request_handler.h
@@ -25,6 +25,7 @@ class CONTENT_EXPORT ServiceWorkerControlleeRequestHandler
ServiceWorkerControlleeRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type);
virtual ~ServiceWorkerControlleeRequestHandler();
diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc
index 37558b2b3d..e6bd79f6a2 100644
--- a/content/browser/service_worker/service_worker_database.cc
+++ b/content/browser/service_worker/service_worker_database.cc
@@ -9,6 +9,7 @@
#include "base/file_util.h"
#include "base/location.h"
#include "base/logging.h"
+#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
@@ -211,6 +212,18 @@ bool ParseResourceRecord(const std::string& serialized,
return true;
}
+ServiceWorkerDatabase::Status LevelDBStatusToStatus(
+ const leveldb::Status& status) {
+ if (status.ok())
+ return ServiceWorkerDatabase::STATUS_OK;
+ else if (status.IsNotFound())
+ return ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND;
+ else if (status.IsCorruption())
+ return ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED;
+ else
+ return ServiceWorkerDatabase::STATUS_ERROR_FAILED;
+}
+
} // namespace
ServiceWorkerDatabase::RegistrationData::RegistrationData()
@@ -228,9 +241,7 @@ ServiceWorkerDatabase::ServiceWorkerDatabase(const base::FilePath& path)
next_avail_registration_id_(0),
next_avail_resource_id_(0),
next_avail_version_id_(0),
- is_disabled_(false),
- was_corruption_detected_(false),
- is_initialized_(false) {
+ state_(UNINITIALIZED) {
sequence_checker_.DetachFromSequence();
}
@@ -239,7 +250,7 @@ ServiceWorkerDatabase::~ServiceWorkerDatabase() {
db_.reset();
}
-bool ServiceWorkerDatabase::GetNextAvailableIds(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetNextAvailableIds(
int64* next_avail_registration_id,
int64* next_avail_version_id,
int64* next_avail_resource_id) {
@@ -248,47 +259,49 @@ bool ServiceWorkerDatabase::GetNextAvailableIds(
DCHECK(next_avail_version_id);
DCHECK(next_avail_resource_id);
- if (!LazyOpen(false)) {
- if (is_disabled_)
- return false;
- // Database has never been used.
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status)) {
*next_avail_registration_id = 0;
*next_avail_version_id = 0;
*next_avail_resource_id = 0;
- return true;
+ return STATUS_OK;
}
+ if (status != STATUS_OK)
+ return status;
- if (!ReadNextAvailableId(kNextRegIdKey, &next_avail_registration_id_) ||
- !ReadNextAvailableId(kNextVerIdKey, &next_avail_version_id_) ||
- !ReadNextAvailableId(kNextResIdKey, &next_avail_resource_id_)) {
- return false;
- }
+ status = ReadNextAvailableId(kNextRegIdKey, &next_avail_registration_id_);
+ if (status != STATUS_OK)
+ return status;
+ status = ReadNextAvailableId(kNextVerIdKey, &next_avail_version_id_);
+ if (status != STATUS_OK)
+ return status;
+ status = ReadNextAvailableId(kNextResIdKey, &next_avail_resource_id_);
+ if (status != STATUS_OK)
+ return status;
*next_avail_registration_id = next_avail_registration_id_;
*next_avail_version_id = next_avail_version_id_;
*next_avail_resource_id = next_avail_resource_id_;
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::GetOriginsWithRegistrations(
- std::set<GURL>* origins) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::GetOriginsWithRegistrations(std::set<GURL>* origins) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- DCHECK(origins);
+ DCHECK(origins->empty());
- if (!LazyOpen(false)) {
- if (is_disabled_)
- return false;
- // Database has never been used.
- origins->clear();
- return true;
- }
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
for (itr->Seek(kUniqueOriginKey); itr->Valid(); itr->Next()) {
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
origins->clear();
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
std::string origin;
@@ -296,22 +309,20 @@ bool ServiceWorkerDatabase::GetOriginsWithRegistrations(
break;
origins->insert(GURL(origin));
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::GetRegistrationsForOrigin(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetRegistrationsForOrigin(
const GURL& origin,
std::vector<RegistrationData>* registrations) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- DCHECK(registrations);
+ DCHECK(registrations->empty());
- if (!LazyOpen(false)) {
- if (is_disabled_)
- return false;
- // Database has never been used.
- registrations->clear();
- return true;
- }
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
// Create a key prefix for registrations.
std::string prefix = base::StringPrintf(
@@ -322,7 +333,7 @@ bool ServiceWorkerDatabase::GetRegistrationsForOrigin(
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
registrations->clear();
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
@@ -332,32 +343,30 @@ bool ServiceWorkerDatabase::GetRegistrationsForOrigin(
if (!ParseRegistrationData(itr->value().ToString(), &registration)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
registrations->clear();
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
registrations->push_back(registration);
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::GetAllRegistrations(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::GetAllRegistrations(
std::vector<RegistrationData>* registrations) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- DCHECK(registrations);
+ DCHECK(registrations->empty());
- if (!LazyOpen(false)) {
- if (is_disabled_)
- return false;
- // Database has never been used.
- registrations->clear();
- return true;
- }
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
for (itr->Seek(kRegKeyPrefix); itr->Valid(); itr->Next()) {
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
registrations->clear();
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
if (!RemovePrefix(itr->key().ToString(), kRegKeyPrefix, NULL))
@@ -367,14 +376,14 @@ bool ServiceWorkerDatabase::GetAllRegistrations(
if (!ParseRegistrationData(itr->value().ToString(), &registration)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
registrations->clear();
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
registrations->push_back(registration);
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadRegistration(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistration(
int64 registration_id,
const GURL& origin,
RegistrationData* registration,
@@ -383,62 +392,46 @@ bool ServiceWorkerDatabase::ReadRegistration(
DCHECK(registration);
DCHECK(resources);
- if (!LazyOpen(false) || is_disabled_)
- return false;
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status) || status != STATUS_OK)
+ return status;
RegistrationData value;
- if (!ReadRegistrationData(registration_id, origin, &value))
- return false;
+ status = ReadRegistrationData(registration_id, origin, &value);
+ if (status != STATUS_OK)
+ return status;
- if (!ReadResourceRecords(value.version_id, resources))
- return false;
+ status = ReadResourceRecords(value.version_id, resources);
+ if (status != STATUS_OK)
+ return status;
*registration = value;
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::WriteRegistration(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteRegistration(
const RegistrationData& registration,
- const std::vector<ResourceRecord>& resources) {
+ const std::vector<ResourceRecord>& resources,
+ std::vector<int64>* newly_purgeable_resources) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (!LazyOpen(true) || is_disabled_)
- return false;
+ Status status = LazyOpen(true);
+ if (status != STATUS_OK)
+ return status;
leveldb::WriteBatch batch;
BumpNextRegistrationIdIfNeeded(registration.registration_id, &batch);
BumpNextVersionIdIfNeeded(registration.version_id, &batch);
- // TODO(nhiroki): Skip to add the origin into the unique origin list if it
- // has already been added.
PutUniqueOriginToBatch(registration.scope.GetOrigin(), &batch);
-
PutRegistrationDataToBatch(registration, &batch);
- // Retrieve a previous version to sweep purgeable resources.
- RegistrationData old_registration;
- if (!ReadRegistrationData(registration.registration_id,
- registration.scope.GetOrigin(),
- &old_registration)) {
- if (is_disabled_)
- return false;
- // Just not found.
- } else {
- DCHECK_LT(old_registration.version_id, registration.version_id);
- // Currently resource sharing across versions and registrations is not
- // suppported, so resource ids should not be overlapped between
- // |registration| and |old_registration|.
- // TODO(nhiroki): Add DCHECK to make sure the overlap does not exist.
- if (!DeleteResourceRecords(old_registration.version_id, &batch))
- return false;
- }
-
// Used for avoiding multiple writes for the same resource id or url.
std::set<int64> pushed_resources;
std::set<GURL> pushed_urls;
for (std::vector<ResourceRecord>::const_iterator itr = resources.begin();
itr != resources.end(); ++itr) {
if (!itr->url.is_valid())
- return false;
+ return STATUS_ERROR_FAILED;
// Duplicated resource id or url should not exist.
DCHECK(pushed_resources.insert(itr->resource_id).second);
@@ -451,18 +444,48 @@ bool ServiceWorkerDatabase::WriteRegistration(
kUncommittedResIdKeyPrefix, itr->resource_id));
}
+ // Retrieve a previous version to sweep purgeable resources.
+ RegistrationData old_registration;
+ status = ReadRegistrationData(registration.registration_id,
+ registration.scope.GetOrigin(),
+ &old_registration);
+ if (status != STATUS_OK && status != STATUS_ERROR_NOT_FOUND)
+ return status;
+ if (status == STATUS_OK) {
+ DCHECK_LT(old_registration.version_id, registration.version_id);
+ status = DeleteResourceRecords(
+ old_registration.version_id, newly_purgeable_resources, &batch);
+ if (status != STATUS_OK)
+ return status;
+
+ // Currently resource sharing across versions and registrations is not
+ // supported, so resource ids should not be overlapped between
+ // |registration| and |old_registration|.
+ std::set<int64> deleted_resources(newly_purgeable_resources->begin(),
+ newly_purgeable_resources->end());
+ DCHECK(base::STLSetIntersection<std::set<int64> >(
+ pushed_resources, deleted_resources).empty());
+ }
+
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::UpdateVersionToActive(int64 registration_id,
- const GURL& origin) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::UpdateVersionToActive(
+ int64 registration_id,
+ const GURL& origin) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (!LazyOpen(false) || is_disabled_)
- return false;
+ ServiceWorkerDatabase::Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_ERROR_NOT_FOUND;
+ if (status != STATUS_OK)
+ return status;
+ if (!origin.is_valid())
+ return STATUS_ERROR_FAILED;
RegistrationData registration;
- if (!ReadRegistrationData(registration_id, origin, &registration))
- return false;
+ status = ReadRegistrationData(registration_id, origin, &registration);
+ if (status != STATUS_OK)
+ return status;
registration.is_active = true;
@@ -471,16 +494,23 @@ bool ServiceWorkerDatabase::UpdateVersionToActive(int64 registration_id,
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::UpdateLastCheckTime(int64 registration_id,
- const GURL& origin,
- const base::Time& time) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::UpdateLastCheckTime(
+ int64 registration_id,
+ const GURL& origin,
+ const base::Time& time) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (!LazyOpen(false) || is_disabled_)
- return false;
+ ServiceWorkerDatabase::Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_ERROR_NOT_FOUND;
+ if (status != STATUS_OK)
+ return status;
+ if (!origin.is_valid())
+ return STATUS_ERROR_FAILED;
RegistrationData registration;
- if (!ReadRegistrationData(registration_id, origin, &registration))
- return false;
+ status = ReadRegistrationData(registration_id, origin, &registration);
+ if (status != STATUS_OK)
+ return status;
registration.last_update_check = time;
@@ -489,11 +519,18 @@ bool ServiceWorkerDatabase::UpdateLastCheckTime(int64 registration_id,
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::DeleteRegistration(int64 registration_id,
- const GURL& origin) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteRegistration(
+ int64 registration_id,
+ const GURL& origin,
+ std::vector<int64>* newly_purgeable_resources) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (!LazyOpen(false) || is_disabled_)
- return false;
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
+ if (!origin.is_valid())
+ return STATUS_ERROR_FAILED;
leveldb::WriteBatch batch;
@@ -501,8 +538,10 @@ bool ServiceWorkerDatabase::DeleteRegistration(int64 registration_id,
// |registration_id| is the only one for |origin|.
// TODO(nhiroki): Check the uniqueness by more efficient way.
std::vector<RegistrationData> registrations;
- if (!GetRegistrationsForOrigin(origin, &registrations))
- return false;
+ status = GetRegistrationsForOrigin(origin, &registrations);
+ if (status != STATUS_OK)
+ return status;
+
if (registrations.size() == 1 &&
registrations[0].registration_id == registration_id) {
batch.Delete(CreateUniqueOriginKey(origin));
@@ -515,8 +554,10 @@ bool ServiceWorkerDatabase::DeleteRegistration(int64 registration_id,
for (std::vector<RegistrationData>::const_iterator itr =
registrations.begin(); itr != registrations.end(); ++itr) {
if (itr->registration_id == registration_id) {
- if (!DeleteResourceRecords(itr->version_id, &batch))
- return false;
+ status = DeleteResourceRecords(
+ itr->version_id, newly_purgeable_resources, &batch);
+ if (status != STATUS_OK)
+ return status;
break;
}
}
@@ -524,38 +565,61 @@ bool ServiceWorkerDatabase::DeleteRegistration(int64 registration_id,
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::GetUncommittedResourceIds(std::set<int64>* ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::GetUncommittedResourceIds(std::set<int64>* ids) {
return ReadResourceIds(kUncommittedResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::WriteUncommittedResourceIds(
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::WriteUncommittedResourceIds(const std::set<int64>& ids) {
return WriteResourceIds(kUncommittedResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::ClearUncommittedResourceIds(
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::ClearUncommittedResourceIds(const std::set<int64>& ids) {
return DeleteResourceIds(kUncommittedResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::GetPurgeableResourceIds(std::set<int64>* ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::GetPurgeableResourceIds(std::set<int64>* ids) {
return ReadResourceIds(kPurgeableResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::WritePurgeableResourceIds(
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::WritePurgeableResourceIds(const std::set<int64>& ids) {
return WriteResourceIds(kPurgeableResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::ClearPurgeableResourceIds(
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::ClearPurgeableResourceIds(const std::set<int64>& ids) {
return DeleteResourceIds(kPurgeableResIdKeyPrefix, ids);
}
-bool ServiceWorkerDatabase::DeleteAllDataForOrigin(const GURL& origin) {
+ServiceWorkerDatabase::Status
+ServiceWorkerDatabase::PurgeUncommittedResourceIds(
+ const std::set<int64>& ids) {
+ leveldb::WriteBatch batch;
+ Status status = DeleteResourceIdsInBatch(
+ kUncommittedResIdKeyPrefix, ids, &batch);
+ if (status != STATUS_OK)
+ return status;
+ status = WriteResourceIdsInBatch(kPurgeableResIdKeyPrefix, ids, &batch);
+ if (status != STATUS_OK)
+ return status;
+ return WriteBatch(&batch);
+}
+
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteAllDataForOrigin(
+ const GURL& origin,
+ std::vector<int64>* newly_purgeable_resources) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (!LazyOpen(true) || is_disabled_ || !origin.is_valid())
- return false;
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
+ if (!origin.is_valid())
+ return STATUS_ERROR_FAILED;
leveldb::WriteBatch batch;
@@ -563,69 +627,85 @@ bool ServiceWorkerDatabase::DeleteAllDataForOrigin(const GURL& origin) {
batch.Delete(CreateUniqueOriginKey(origin));
std::vector<RegistrationData> registrations;
- if (!GetRegistrationsForOrigin(origin, &registrations))
- return false;
+ status = GetRegistrationsForOrigin(origin, &registrations);
+ if (status != STATUS_OK)
+ return status;
// Delete registrations and resource records.
for (std::vector<RegistrationData>::const_iterator itr =
registrations.begin(); itr != registrations.end(); ++itr) {
batch.Delete(CreateRegistrationKey(itr->registration_id, origin));
- if (!DeleteResourceRecords(itr->version_id, &batch))
- return false;
+ status = DeleteResourceRecords(
+ itr->version_id, newly_purgeable_resources, &batch);
+ if (status != STATUS_OK)
+ return status;
}
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::LazyOpen(bool create_if_needed) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::LazyOpen(
+ bool create_if_missing) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- if (IsOpen())
- return true;
// Do not try to open a database if we tried and failed once.
- if (is_disabled_)
- return false;
+ if (state_ == DISABLED)
+ return STATUS_ERROR_FAILED;
+ if (IsOpen())
+ return STATUS_OK;
// When |path_| is empty, open a database in-memory.
bool use_in_memory_db = path_.empty();
- if (!create_if_needed) {
+ if (!create_if_missing) {
// Avoid opening a database if it does not exist at the |path_|.
if (use_in_memory_db ||
!base::PathExists(path_) ||
base::IsDirectoryEmpty(path_)) {
- return false;
+ return STATUS_ERROR_NOT_FOUND;
}
}
leveldb::Options options;
- options.create_if_missing = create_if_needed;
+ options.create_if_missing = create_if_missing;
if (use_in_memory_db) {
env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
options.env = env_.get();
}
leveldb::DB* db = NULL;
- leveldb::Status status =
+ leveldb::Status db_status =
leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db);
- if (!status.ok()) {
+ if (!db_status.ok()) {
DCHECK(!db);
// TODO(nhiroki): Should we retry to open the database?
- HandleError(FROM_HERE, status);
- return false;
+ HandleError(FROM_HERE, db_status);
+ return LevelDBStatusToStatus(db_status);
}
db_.reset(db);
int64 db_version;
- if (!ReadDatabaseVersion(&db_version))
- return false;
+ Status status = ReadDatabaseVersion(&db_version);
+ if (status != STATUS_OK)
+ return status;
+ DCHECK_LE(0, db_version);
if (db_version > 0)
- is_initialized_ = true;
- return true;
+ state_ = INITIALIZED;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadNextAvailableId(
- const char* id_key, int64* next_avail_id) {
+bool ServiceWorkerDatabase::IsNewOrNonexistentDatabase(
+ ServiceWorkerDatabase::Status status) {
+ if (status == STATUS_ERROR_NOT_FOUND)
+ return true;
+ if (status == STATUS_OK && state_ == UNINITIALIZED)
+ return true;
+ return false;
+}
+
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadNextAvailableId(
+ const char* id_key,
+ int64* next_avail_id) {
DCHECK(id_key);
DCHECK(next_avail_id);
@@ -634,25 +714,25 @@ bool ServiceWorkerDatabase::ReadNextAvailableId(
if (status.IsNotFound()) {
// Nobody has gotten the next resource id for |id_key|.
*next_avail_id = 0;
- return true;
+ return STATUS_OK;
}
if (!status.ok()) {
HandleError(FROM_HERE, status);
- return false;
+ return LevelDBStatusToStatus(status);
}
int64 parsed;
if (!base::StringToInt64(value, &parsed)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
*next_avail_id = parsed;
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadRegistrationData(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadRegistrationData(
int64 registration_id,
const GURL& origin,
RegistrationData* registration) {
@@ -665,20 +745,20 @@ bool ServiceWorkerDatabase::ReadRegistrationData(
if (!status.ok()) {
if (!status.IsNotFound())
HandleError(FROM_HERE, status);
- return false;
+ return LevelDBStatusToStatus(status);
}
RegistrationData parsed;
if (!ParseRegistrationData(value, &parsed)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
*registration = parsed;
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadResourceRecords(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadResourceRecords(
int64 version_id,
std::vector<ResourceRecord>* resources) {
DCHECK(resources);
@@ -689,7 +769,7 @@ bool ServiceWorkerDatabase::ReadResourceRecords(
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
resources->clear();
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
if (!RemovePrefix(itr->key().ToString(), prefix, NULL))
@@ -699,15 +779,16 @@ bool ServiceWorkerDatabase::ReadResourceRecords(
if (!ParseResourceRecord(itr->value().ToString(), &resource)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
resources->clear();
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
resources->push_back(resource);
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::DeleteResourceRecords(
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteResourceRecords(
int64 version_id,
+ std::vector<int64>* newly_purgeable_resources,
leveldb::WriteBatch* batch) {
DCHECK(batch);
@@ -716,7 +797,7 @@ bool ServiceWorkerDatabase::DeleteResourceRecords(
for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
std::string key = itr->key().ToString();
@@ -727,7 +808,7 @@ bool ServiceWorkerDatabase::DeleteResourceRecords(
int64 resource_id;
if (!base::StringToInt64(unprefixed, &resource_id)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
// Remove a resource record.
@@ -736,25 +817,30 @@ bool ServiceWorkerDatabase::DeleteResourceRecords(
// Currently resource sharing across versions and registrations is not
// supported, so we can purge this without caring about it.
PutPurgeableResourceIdToBatch(resource_id, batch);
+ newly_purgeable_resources->push_back(resource_id);
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadResourceIds(const char* id_key_prefix,
- std::set<int64>* ids) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadResourceIds(
+ const char* id_key_prefix,
+ std::set<int64>* ids) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
DCHECK(id_key_prefix);
- DCHECK(ids);
+ DCHECK(ids->empty());
- if (!LazyOpen(false) || is_disabled_)
- return false;
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
for (itr->Seek(id_key_prefix); itr->Valid(); itr->Next()) {
if (!itr->status().ok()) {
HandleError(FROM_HERE, itr->status());
ids->clear();
- return false;
+ return LevelDBStatusToStatus(itr->status());
}
std::string unprefixed;
@@ -765,96 +851,122 @@ bool ServiceWorkerDatabase::ReadResourceIds(const char* id_key_prefix,
if (!base::StringToInt64(unprefixed, &resource_id)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
ids->clear();
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
ids->insert(resource_id);
}
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::WriteResourceIds(const char* id_key_prefix,
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteResourceIds(
+ const char* id_key_prefix,
+ const std::set<int64>& ids) {
+ leveldb::WriteBatch batch;
+ Status status = WriteResourceIdsInBatch(id_key_prefix, ids, &batch);
+ if (status != STATUS_OK)
+ return status;
+ return WriteBatch(&batch);
+}
+
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteResourceIdsInBatch(
+ const char* id_key_prefix,
+ const std::set<int64>& ids,
+ leveldb::WriteBatch* batch) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
DCHECK(id_key_prefix);
- if (!LazyOpen(true) || is_disabled_)
- return false;
+ Status status = LazyOpen(true);
+ if (status != STATUS_OK)
+ return status;
if (ids.empty())
- return true;
+ return STATUS_OK;
- leveldb::WriteBatch batch;
for (std::set<int64>::const_iterator itr = ids.begin();
itr != ids.end(); ++itr) {
// Value should be empty.
- batch.Put(CreateResourceIdKey(id_key_prefix, *itr), "");
+ batch->Put(CreateResourceIdKey(id_key_prefix, *itr), "");
}
+ return STATUS_OK;
+}
+
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteResourceIds(
+ const char* id_key_prefix,
+ const std::set<int64>& ids) {
+ leveldb::WriteBatch batch;
+ Status status = DeleteResourceIdsInBatch(id_key_prefix, ids, &batch);
+ if (status != STATUS_OK)
+ return status;
return WriteBatch(&batch);
}
-bool ServiceWorkerDatabase::DeleteResourceIds(const char* id_key_prefix,
- const std::set<int64>& ids) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteResourceIdsInBatch(
+ const char* id_key_prefix,
+ const std::set<int64>& ids,
+ leveldb::WriteBatch* batch) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
DCHECK(id_key_prefix);
- if (!LazyOpen(true) || is_disabled_)
- return false;
+ Status status = LazyOpen(false);
+ if (IsNewOrNonexistentDatabase(status))
+ return STATUS_OK;
+ if (status != STATUS_OK)
+ return status;
if (ids.empty())
- return true;
+ return STATUS_OK;
- leveldb::WriteBatch batch;
for (std::set<int64>::const_iterator itr = ids.begin();
itr != ids.end(); ++itr) {
- batch.Delete(CreateResourceIdKey(id_key_prefix, *itr));
+ batch->Delete(CreateResourceIdKey(id_key_prefix, *itr));
}
- return WriteBatch(&batch);
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::ReadDatabaseVersion(int64* db_version) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadDatabaseVersion(
+ int64* db_version) {
std::string value;
leveldb::Status status =
db_->Get(leveldb::ReadOptions(), kDatabaseVersionKey, &value);
if (status.IsNotFound()) {
// The database hasn't been initialized yet.
*db_version = 0;
- return true;
+ return STATUS_OK;
}
if (!status.ok()) {
HandleError(FROM_HERE, status);
- return false;
+ return LevelDBStatusToStatus(status);
}
int64 parsed;
if (!base::StringToInt64(value, &parsed)) {
HandleError(FROM_HERE, leveldb::Status::Corruption("failed to parse"));
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
const int kFirstValidVersion = 1;
if (parsed < kFirstValidVersion || kCurrentSchemaVersion < parsed) {
HandleError(FROM_HERE, leveldb::Status::Corruption("invalid DB version"));
- return false;
+ return STATUS_ERROR_CORRUPTED;
}
*db_version = parsed;
- return true;
+ return STATUS_OK;
}
-bool ServiceWorkerDatabase::WriteBatch(leveldb::WriteBatch* batch) {
+ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteBatch(
+ leveldb::WriteBatch* batch) {
DCHECK(batch);
- DCHECK(!is_disabled_);
+ DCHECK_NE(DISABLED, state_);
- if (!is_initialized_) {
+ if (state_ == UNINITIALIZED) {
// Write the database schema version.
batch->Put(kDatabaseVersionKey, base::Int64ToString(kCurrentSchemaVersion));
- is_initialized_ = true;
+ state_ = INITIALIZED;
}
leveldb::Status status = db_->Write(leveldb::WriteOptions(), batch);
- if (!status.ok()) {
+ if (!status.ok())
HandleError(FROM_HERE, status);
- return false;
- }
- return true;
+ return LevelDBStatusToStatus(status);
}
void ServiceWorkerDatabase::BumpNextRegistrationIdIfNeeded(
@@ -876,7 +988,7 @@ void ServiceWorkerDatabase::BumpNextVersionIdIfNeeded(
}
bool ServiceWorkerDatabase::IsOpen() {
- return db_.get() != NULL;
+ return db_ != NULL;
}
void ServiceWorkerDatabase::HandleError(
@@ -885,9 +997,7 @@ void ServiceWorkerDatabase::HandleError(
// TODO(nhiroki): Add an UMA histogram.
DLOG(ERROR) << "Failed at: " << from_here.ToString()
<< " with error: " << status.ToString();
- is_disabled_ = true;
- if (status.IsCorruption())
- was_corruption_detected_ = true;
+ state_ = DISABLED;
db_.reset();
}
diff --git a/content/browser/service_worker/service_worker_database.h b/content/browser/service_worker/service_worker_database.h
index 23d3ffd5fa..660b4c7b73 100644
--- a/content/browser/service_worker/service_worker_database.h
+++ b/content/browser/service_worker/service_worker_database.h
@@ -10,12 +10,13 @@
#include <vector>
#include "base/files/file_path.h"
+#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/sequence_checker.h"
#include "base/time/time.h"
-#include "content/browser/service_worker/service_worker_version.h"
#include "content/common/content_export.h"
+#include "content/common/service_worker/service_worker_status_code.h"
#include "url/gurl.h"
namespace leveldb {
@@ -38,6 +39,13 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
explicit ServiceWorkerDatabase(const base::FilePath& path);
~ServiceWorkerDatabase();
+ enum Status {
+ STATUS_OK,
+ STATUS_ERROR_NOT_FOUND,
+ STATUS_ERROR_CORRUPTED,
+ STATUS_ERROR_FAILED,
+ };
+
struct CONTENT_EXPORT RegistrationData {
// These values are immutable for the life of a registration.
int64 registration_id;
@@ -52,12 +60,6 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
bool has_fetch_handler;
base::Time last_update_check;
- ServiceWorkerVersion::Status GetVersionStatus() const {
- if (is_active)
- return ServiceWorkerVersion::ACTIVE;
- return ServiceWorkerVersion::INSTALLED;
- }
-
RegistrationData();
~RegistrationData();
};
@@ -65,39 +67,79 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
struct ResourceRecord {
int64 resource_id;
GURL url;
- };
-
- // For use during initialization.
- bool GetNextAvailableIds(int64* next_avail_registration_id,
- int64* next_avail_version_id,
- int64* next_avail_resource_id);
- bool GetOriginsWithRegistrations(std::set<GURL>* origins);
- // For use when first handling a request in an origin with registrations.
- bool GetRegistrationsForOrigin(const GURL& origin,
- std::vector<RegistrationData>* registrations);
+ ResourceRecord() {}
+ ResourceRecord(int64 id, GURL url) : resource_id(id), url(url) {}
+ };
- bool GetAllRegistrations(std::vector<RegistrationData>* registrations);
+ // Reads next available ids from the database. Returns OK if they are
+ // successfully read. Fills the arguments with an initial value and returns
+ // OK if they are not found in the database. Otherwise, returns an error.
+ Status GetNextAvailableIds(
+ int64* next_avail_registration_id,
+ int64* next_avail_version_id,
+ int64* next_avail_resource_id);
+
+ // Reads origins that have one or more than one registration from the
+ // database. Returns OK if they are successfully read or not found.
+ // Otherwise, returns an error.
+ Status GetOriginsWithRegistrations(std::set<GURL>* origins);
+
+ // Reads registrations for |origin| from the database. Returns OK if they are
+ // successfully read or not found. Otherwise, returns an error.
+ Status GetRegistrationsForOrigin(
+ const GURL& origin,
+ std::vector<RegistrationData>* registrations);
+
+ // Reads all registrations from the database. Returns OK if successfully read
+ // or not found. Otherwise, returns an error.
+ Status GetAllRegistrations(std::vector<RegistrationData>* registrations);
// Saving, retrieving, and updating registration data.
// (will bump next_avail_xxxx_ids as needed)
// (resource ids will be added/removed from the uncommitted/purgeable
// lists as needed)
- bool ReadRegistration(int64 registration_id,
- const GURL& origin,
- RegistrationData* registration,
- std::vector<ResourceRecord>* resources);
- bool WriteRegistration(const RegistrationData& registration,
- const std::vector<ResourceRecord>& resources);
-
- bool UpdateVersionToActive(int64 registration_id,
- const GURL& origin);
- bool UpdateLastCheckTime(int64 registration_id,
- const GURL& origin,
- const base::Time& time);
- bool DeleteRegistration(int64 registration_id,
- const GURL& origin);
+ // Reads a registration for |registration_id| and resource records associated
+ // with it from the database. Returns OK if they are successfully read.
+ // Otherwise, returns an error.
+ Status ReadRegistration(
+ int64 registration_id,
+ const GURL& origin,
+ RegistrationData* registration,
+ std::vector<ResourceRecord>* resources);
+
+ // Writes |registration| and |resources| into the database and does following
+ // things:
+ // - Deletes an old version of the registration if exists.
+ // - Bumps the next registration id and the next version id if needed.
+ // - Removes |resources| from the uncommitted list if exist.
+ // Returns OK they are successfully written. Otherwise, returns an error.
+ Status WriteRegistration(
+ const RegistrationData& registration,
+ const std::vector<ResourceRecord>& resources,
+ std::vector<int64>* newly_purgeable_resources);
+
+ // Updates a registration for |registration_id| to an active state. Returns OK
+ // if it's successfully updated. Otherwise, returns an error.
+ Status UpdateVersionToActive(
+ int64 registration_id,
+ const GURL& origin);
+
+ // Updates last check time of a registration for |registration_id| by |time|.
+ // Returns OK if it's successfully updated. Otherwise, returns an error.
+ Status UpdateLastCheckTime(
+ int64 registration_id,
+ const GURL& origin,
+ const base::Time& time);
+
+ // Deletes a registration for |registration_id| and moves resource records
+ // associated with it into the purgeable list. Returns OK if it's successfully
+ // deleted or not found in the database. Otherwise, returns an error.
+ Status DeleteRegistration(
+ int64 registration_id,
+ const GURL& origin,
+ std::vector<int64>* newly_purgeable_resources);
// As new resources are put into the diskcache, they go into an uncommitted
// list. When a registration is saved that refers to those ids, they're
@@ -106,80 +148,134 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
// the purgeable list can be purged from the diskcache. At system startup, all
// uncommitted ids are moved to the purgeable list.
- // Reads uncommitted resource ids from the database. Returns true on success.
- // Otherwise clears |ids| and returns false.
- bool GetUncommittedResourceIds(std::set<int64>* ids);
+ // Reads uncommitted resource ids from the database. Returns OK on success.
+ // Otherwise clears |ids| and returns an error.
+ Status GetUncommittedResourceIds(std::set<int64>* ids);
- // Writes |ids| into the database as uncommitted resources. Returns true on
- // success. Otherwise writes nothing and returns false.
- bool WriteUncommittedResourceIds(const std::set<int64>& ids);
+ // Writes |ids| into the database as uncommitted resources. Returns OK on
+ // success. Otherwise writes nothing and returns an error.
+ Status WriteUncommittedResourceIds(const std::set<int64>& ids);
// Deletes uncommitted resource ids specified by |ids| from the database.
- // Returns true on success. Otherwise deletes nothing and returns false.
- bool ClearUncommittedResourceIds(const std::set<int64>& ids);
+ // Returns OK on success. Otherwise deletes nothing and returns an error.
+ Status ClearUncommittedResourceIds(const std::set<int64>& ids);
- // Reads purgeable resource ids from the database. Returns true on success.
- // Otherwise clears |ids| and returns false.
- bool GetPurgeableResourceIds(std::set<int64>* ids);
+ // Reads purgeable resource ids from the database. Returns OK on success.
+ // Otherwise clears |ids| and returns an error.
+ Status GetPurgeableResourceIds(std::set<int64>* ids);
- // Writes |ids| into the database as purgeable resources. Returns true on
- // success. Otherwise writes nothing and returns false.
- bool WritePurgeableResourceIds(const std::set<int64>& ids);
+ // Writes |ids| into the database as purgeable resources. Returns OK on
+ // success. Otherwise writes nothing and returns an error.
+ Status WritePurgeableResourceIds(const std::set<int64>& ids);
// Deletes purgeable resource ids specified by |ids| from the database.
- // Returns true on success. Otherwise deletes nothing and returns false.
- bool ClearPurgeableResourceIds(const std::set<int64>& ids);
+ // Returns OK on success. Otherwise deletes nothing and returns an error.
+ Status ClearPurgeableResourceIds(const std::set<int64>& ids);
- // Delete all data for |origin|, namely, unique origin, registrations and
- // resource records. Resources are moved to the purgeable list.
- bool DeleteAllDataForOrigin(const GURL& origin);
+ // Moves |ids| from the uncommitted list to the purgeable list.
+ // Returns OK on success. Otherwise deletes nothing and returns an error.
+ Status PurgeUncommittedResourceIds(const std::set<int64>& ids);
- bool is_disabled() const { return is_disabled_; }
- bool was_corruption_detected() const { return was_corruption_detected_; }
+ // Deletes all data for |origin|, namely, unique origin, registrations and
+ // resource records. Resources are moved to the purgeable list. Returns OK if
+ // they are successfully deleted or not found in the database. Otherwise,
+ // returns an error.
+ Status DeleteAllDataForOrigin(
+ const GURL& origin,
+ std::vector<int64>* newly_purgeable_resources);
private:
// Opens the database at the |path_|. This is lazily called when the first
- // database API is called. Returns true if the database was opened. Returns
- // false if the opening failed or was not neccessary, that is, the database
- // does not exist and |create_if_needed| is false.
- bool LazyOpen(bool create_if_needed);
-
- bool ReadNextAvailableId(const char* id_key,
- int64* next_avail_id);
- bool ReadRegistrationData(int64 registration_id,
- const GURL& origin,
- RegistrationData* registration);
- bool ReadResourceRecords(int64 version_id,
- std::vector<ResourceRecord>* resources);
- bool DeleteResourceRecords(int64 version_id,
- leveldb::WriteBatch* batch);
- bool ReadResourceIds(const char* id_key_prefix,
- std::set<int64>* ids);
- bool WriteResourceIds(const char* id_key_prefix,
- const std::set<int64>& ids);
- bool DeleteResourceIds(const char* id_key_prefix,
- const std::set<int64>& ids);
+ // database API is called. Returns OK if the database is successfully opened.
+ // Returns NOT_FOUND if the database does not exist and |create_if_missing| is
+ // false. Otherwise, returns an error.
+ Status LazyOpen(bool create_if_missing);
+
+ // Helper for LazyOpen(). |status| must be the return value from LazyOpen()
+ // and this must be called just after LazyOpen() is called. Returns true if
+ // the database is new or nonexistent, that is, it has never been used.
+ bool IsNewOrNonexistentDatabase(Status status);
+
+ // Reads the next available id for |id_key|. Returns OK if it's successfully
+ // read. Fills |next_avail_id| with an initial value and returns OK if it's
+ // not found in the database. Otherwise, returns an error.
+ Status ReadNextAvailableId(
+ const char* id_key,
+ int64* next_avail_id);
+
+ // Reads registration data for |registration_id| from the database. Returns OK
+ // if successfully reads. Otherwise, returns an error.
+ Status ReadRegistrationData(
+ int64 registration_id,
+ const GURL& origin,
+ RegistrationData* registration);
+
+ // Reads resource records for |version_id| from the database. Returns OK if
+ // it's successfully read or not found in the database. Otherwise, returns an
+ // error.
+ Status ReadResourceRecords(
+ int64 version_id,
+ std::vector<ResourceRecord>* resources);
+
+ // Deletes resource records for |version_id| from the database. Returns OK if
+ // they are successfully deleted or not found in the database. Otherwise,
+ // returns an error.
+ Status DeleteResourceRecords(
+ int64 version_id,
+ std::vector<int64>* newly_purgeable_resources,
+ leveldb::WriteBatch* batch);
+
+ // Reads resource ids for |id_key_prefix| from the database. Returns OK if
+ // it's successfully read or not found in the database. Otherwise, returns an
+ // error.
+ Status ReadResourceIds(
+ const char* id_key_prefix,
+ std::set<int64>* ids);
+
+ // Write resource ids for |id_key_prefix| into the database. Returns OK on
+ // success. Otherwise, returns writes nothing and returns an error.
+ Status WriteResourceIds(
+ const char* id_key_prefix,
+ const std::set<int64>& ids);
+ Status WriteResourceIdsInBatch(
+ const char* id_key_prefix,
+ const std::set<int64>& ids,
+ leveldb::WriteBatch* batch);
+
+ // Deletes resource ids for |id_key_prefix| from the database. Returns OK if
+ // it's successfully deleted or not found in the database. Otherwise, returns
+ // an error.
+ Status DeleteResourceIds(
+ const char* id_key_prefix,
+ const std::set<int64>& ids);
+ Status DeleteResourceIdsInBatch(
+ const char* id_key_prefix,
+ const std::set<int64>& ids,
+ leveldb::WriteBatch* batch);
// Reads the current schema version from the database. If the database hasn't
- // been written anything yet, sets |db_version| to 0 and returns true.
- bool ReadDatabaseVersion(int64* db_version);
+ // been written anything yet, sets |db_version| to 0 and returns OK.
+ Status ReadDatabaseVersion(int64* db_version);
- // Write a batch into the database.
+ // Writes a batch into the database.
// NOTE: You must call this when you want to put something into the database
// because this initializes the database if needed.
- bool WriteBatch(leveldb::WriteBatch* batch);
+ Status WriteBatch(leveldb::WriteBatch* batch);
// Bumps the next available id if |used_id| is greater than or equal to the
// cached one.
- void BumpNextRegistrationIdIfNeeded(int64 used_id,
- leveldb::WriteBatch* batch);
- void BumpNextVersionIdIfNeeded(int64 used_id,
- leveldb::WriteBatch* batch);
+ void BumpNextRegistrationIdIfNeeded(
+ int64 used_id,
+ leveldb::WriteBatch* batch);
+ void BumpNextVersionIdIfNeeded(
+ int64 used_id,
+ leveldb::WriteBatch* batch);
bool IsOpen();
- void HandleError(const tracked_objects::Location& from_here,
- const leveldb::Status& status);
+ void HandleError(
+ const tracked_objects::Location& from_here,
+ const leveldb::Status& status);
base::FilePath path_;
scoped_ptr<leveldb::Env> env_;
@@ -189,16 +285,12 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
int64 next_avail_resource_id_;
int64 next_avail_version_id_;
- // True if a database error has occurred (e.g. cannot read data).
- // If true, all database accesses will fail.
- bool is_disabled_;
-
- // True if a database corruption was detected.
- bool was_corruption_detected_;
-
- // True if a database was initialized, that is, the schema version was written
- // in the database.
- bool is_initialized_;
+ enum State {
+ UNINITIALIZED,
+ INITIALIZED,
+ DISABLED,
+ };
+ State state_;
base::SequenceChecker sequence_checker_;
@@ -206,9 +298,6 @@ class CONTENT_EXPORT ServiceWorkerDatabase {
FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, OpenDatabase_InMemory);
FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, DatabaseVersion);
FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, GetNextAvailableIds);
- FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, Registration_Basic);
- FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, Registration_Overwrite);
- FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, Registration_Multiple);
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerDatabase);
};
diff --git a/content/browser/service_worker/service_worker_database_unittest.cc b/content/browser/service_worker/service_worker_database_unittest.cc
index cbacfccd20..0fe8c4b4af 100644
--- a/content/browser/service_worker/service_worker_database_unittest.cc
+++ b/content/browser/service_worker/service_worker_database_unittest.cc
@@ -27,28 +27,19 @@ struct AvailableIds {
~AvailableIds() {}
};
-// TODO(nhiroki): Refactor tests using this helper.
GURL URL(const GURL& origin, const std::string& path) {
EXPECT_TRUE(origin.is_valid());
- GURL out(origin.GetOrigin().spec() + path);
+ EXPECT_EQ(origin, origin.GetOrigin());
+ GURL out(origin.spec() + path);
EXPECT_TRUE(out.is_valid());
return out;
}
-// TODO(nhiroki): Remove this.
-Resource CreateResource(int64 resource_id, const std::string& url) {
- Resource resource;
- resource.resource_id = resource_id;
- resource.url = GURL(url);
- EXPECT_TRUE(resource.url.is_valid());
- return resource;
-}
-
Resource CreateResource(int64 resource_id, const GURL& url) {
+ EXPECT_TRUE(url.is_valid());
Resource resource;
resource.resource_id = resource_id;
resource.url = url;
- EXPECT_TRUE(resource.url.is_valid());
return resource;
}
@@ -73,9 +64,7 @@ void VerifyRegistrationData(const RegistrationData& expected,
void VerifyResourceRecords(const std::vector<Resource>& expected,
const std::vector<Resource>& actual) {
- EXPECT_EQ(expected.size(), actual.size());
- if (expected.size() != actual.size())
- return;
+ ASSERT_EQ(expected.size(), actual.size());
for (size_t i = 0; i < expected.size(); ++i) {
EXPECT_EQ(expected[i].resource_id, actual[i].resource_id);
EXPECT_EQ(expected[i].url, actual[i].url);
@@ -91,44 +80,52 @@ TEST(ServiceWorkerDatabaseTest, OpenDatabase) {
CreateDatabase(database_dir.path()));
// Should be false because the database does not exist at the path.
- EXPECT_FALSE(database->LazyOpen(false));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->LazyOpen(false));
- EXPECT_TRUE(database->LazyOpen(true));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
database.reset(CreateDatabase(database_dir.path()));
- EXPECT_TRUE(database->LazyOpen(false));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(false));
}
TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
// Should be false because the database does not exist in memory.
- EXPECT_FALSE(database->LazyOpen(false));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->LazyOpen(false));
- EXPECT_TRUE(database->LazyOpen(true));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
database.reset(CreateDatabaseInMemory());
// Should be false because the database is not persistent.
- EXPECT_FALSE(database->LazyOpen(false));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->LazyOpen(false));
}
TEST(ServiceWorkerDatabaseTest, DatabaseVersion) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
- EXPECT_TRUE(database->LazyOpen(true));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
// Opening a new database does not write anything, so its schema version
// should be 0.
int64 db_version = -1;
- EXPECT_TRUE(database->ReadDatabaseVersion(&db_version));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadDatabaseVersion(&db_version));
EXPECT_EQ(0u, db_version);
// First writing triggers database initialization and bumps the schema
// version.
std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
+ std::vector<int64> newly_purgeable_resources;
ServiceWorkerDatabase::RegistrationData data;
- ASSERT_TRUE(database->WriteRegistration(data, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data, resources,
+ &newly_purgeable_resources));
- EXPECT_TRUE(database->ReadDatabaseVersion(&db_version));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadDatabaseVersion(&db_version));
EXPECT_LT(0, db_version);
}
@@ -137,17 +134,19 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
ASSERT_TRUE(database_dir.CreateUniqueTempDir());
scoped_ptr<ServiceWorkerDatabase> database(
CreateDatabase(database_dir.path()));
- AvailableIds ids;
+
+ GURL origin("http://example.com");
// The database has never been used, so returns initial values.
- EXPECT_TRUE(database->GetNextAvailableIds(
+ AvailableIds ids;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
&ids.reg_id, &ids.ver_id, &ids.res_id));
EXPECT_EQ(0, ids.reg_id);
EXPECT_EQ(0, ids.ver_id);
EXPECT_EQ(0, ids.res_id);
- ASSERT_TRUE(database->LazyOpen(true));
- EXPECT_TRUE(database->GetNextAvailableIds(
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
&ids.reg_id, &ids.ver_id, &ids.res_id));
EXPECT_EQ(0, ids.reg_id);
EXPECT_EQ(0, ids.ver_id);
@@ -156,13 +155,16 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
// Writing a registration bumps the next available ids.
std::vector<Resource> resources;
RegistrationData data1;
+ std::vector<int64> newly_purgeable_resources;
data1.registration_id = 100;
- data1.scope = GURL("http://example.com/foo");
- data1.script = GURL("http://example.com/script1.js");
+ data1.scope = URL(origin, "/foo");
+ data1.script = URL(origin, "/script1.js");
data1.version_id = 200;
- ASSERT_TRUE(database->WriteRegistration(data1, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources,
+ &newly_purgeable_resources));
- EXPECT_TRUE(database->GetNextAvailableIds(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
&ids.reg_id, &ids.ver_id, &ids.res_id));
EXPECT_EQ(101, ids.reg_id);
EXPECT_EQ(201, ids.ver_id);
@@ -172,15 +174,17 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
// bump the next available ids.
RegistrationData data2;
data2.registration_id = 10;
- data2.scope = GURL("http://example.com/bar");
- data2.script = GURL("http://example.com/script2.js");
+ data2.scope = URL(origin, "/bar");
+ data2.script = URL(origin, "/script2.js");
data2.version_id = 20;
- ASSERT_TRUE(database->WriteRegistration(data2, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources,
+ &newly_purgeable_resources));
// Close and reopen the database to verify the stored values.
database.reset(CreateDatabase(database_dir.path()));
- EXPECT_TRUE(database->GetNextAvailableIds(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds(
&ids.reg_id, &ids.ver_id, &ids.res_id));
EXPECT_EQ(101, ids.reg_id);
EXPECT_EQ(201, ids.ver_id);
@@ -191,46 +195,56 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
std::set<GURL> origins;
- EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetOriginsWithRegistrations(&origins));
EXPECT_TRUE(origins.empty());
std::vector<Resource> resources;
+ std::vector<int64> newly_purgeable_resources;
+ GURL origin1("http://example.com");
RegistrationData data1;
data1.registration_id = 123;
- data1.scope = GURL("http://example.com/foo");
- data1.script = GURL("http://example.com/script1.js");
+ data1.scope = URL(origin1, "/foo");
+ data1.script = URL(origin1, "/script1.js");
data1.version_id = 456;
- GURL origin1 = data1.script.GetOrigin();
- ASSERT_TRUE(database->WriteRegistration(data1, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources,
+ &newly_purgeable_resources));
+ GURL origin2("https://www.example.com");
RegistrationData data2;
data2.registration_id = 234;
- data2.scope = GURL("https://www.example.com/bar");
- data2.script = GURL("https://www.example.com/script2.js");
+ data2.scope = URL(origin2, "/bar");
+ data2.script = URL(origin2, "/script2.js");
data2.version_id = 567;
- GURL origin2 = data2.script.GetOrigin();
- ASSERT_TRUE(database->WriteRegistration(data2, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources,
+ &newly_purgeable_resources));
+ GURL origin3("https://example.org");
RegistrationData data3;
data3.registration_id = 345;
- data3.scope = GURL("https://example.org/hoge");
- data3.script = GURL("https://example.org/script3.js");
+ data3.scope = URL(origin3, "/hoge");
+ data3.script = URL(origin3, "/script3.js");
data3.version_id = 678;
- GURL origin3 = data3.script.GetOrigin();
- ASSERT_TRUE(database->WriteRegistration(data3, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data3, resources,
+ &newly_purgeable_resources));
// |origin3| has two registrations.
RegistrationData data4;
data4.registration_id = 456;
- data4.scope = GURL("https://example.org/fuga");
- data4.script = GURL("https://example.org/script4.js");
+ data4.scope = URL(origin3, "/fuga");
+ data4.script = URL(origin3, "/script4.js");
data4.version_id = 789;
- ASSERT_EQ(origin3, data4.scope.GetOrigin());
- ASSERT_TRUE(database->WriteRegistration(data4, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data4, resources,
+ &newly_purgeable_resources));
origins.clear();
- EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetOriginsWithRegistrations(&origins));
EXPECT_EQ(3U, origins.size());
EXPECT_TRUE(ContainsKey(origins, origin1));
EXPECT_TRUE(ContainsKey(origins, origin2));
@@ -238,20 +252,26 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
// |origin3| has another registration, so should not remove it from the
// unique origin list.
- ASSERT_TRUE(database->DeleteRegistration(data4.registration_id, origin3));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data4.registration_id, origin3,
+ &newly_purgeable_resources));
origins.clear();
- EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetOriginsWithRegistrations(&origins));
EXPECT_EQ(3U, origins.size());
EXPECT_TRUE(ContainsKey(origins, origin1));
EXPECT_TRUE(ContainsKey(origins, origin2));
EXPECT_TRUE(ContainsKey(origins, origin3));
// |origin3| should be removed from the unique origin list.
- ASSERT_TRUE(database->DeleteRegistration(data3.registration_id, origin3));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data3.registration_id, origin3,
+ &newly_purgeable_resources));
origins.clear();
- EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetOriginsWithRegistrations(&origins));
EXPECT_EQ(2U, origins.size());
EXPECT_TRUE(ContainsKey(origins, origin1));
EXPECT_TRUE(ContainsKey(origins, origin2));
@@ -260,44 +280,58 @@ TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
- GURL origin("https://example.org");
+ GURL origin1("http://example.com");
+ GURL origin2("https://www.example.com");
+ GURL origin3("https://example.org");
+
std::vector<RegistrationData> registrations;
- EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, &registrations));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetRegistrationsForOrigin(origin1, &registrations));
EXPECT_TRUE(registrations.empty());
std::vector<Resource> resources;
+ std::vector<int64> newly_purgeable_resources;
RegistrationData data1;
data1.registration_id = 100;
- data1.scope = GURL("http://example.com/foo");
- data1.script = GURL("http://example.com/script1.js");
+ data1.scope = URL(origin1, "/foo");
+ data1.script = URL(origin1, "/script1.js");
data1.version_id = 1000;
- ASSERT_TRUE(database->WriteRegistration(data1, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources,
+ &newly_purgeable_resources));
RegistrationData data2;
data2.registration_id = 200;
- data2.scope = GURL("https://www.example.com/bar");
- data2.script = GURL("https://www.example.com/script2.js");
+ data2.scope = URL(origin2, "/bar");
+ data2.script = URL(origin2, "/script2.js");
data2.version_id = 2000;
- ASSERT_TRUE(database->WriteRegistration(data2, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources,
+ &newly_purgeable_resources));
RegistrationData data3;
data3.registration_id = 300;
- data3.scope = GURL("https://example.org/hoge");
- data3.script = GURL("https://example.org/script3.js");
+ data3.scope = URL(origin3, "/hoge");
+ data3.script = URL(origin3, "/script3.js");
data3.version_id = 3000;
- ASSERT_TRUE(database->WriteRegistration(data3, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data3, resources,
+ &newly_purgeable_resources));
- // Same origin with |data3|.
+ // |origin3| has two registrations.
RegistrationData data4;
data4.registration_id = 400;
- data4.scope = GURL("https://example.org/fuga");
- data4.script = GURL("https://example.org/script4.js");
+ data4.scope = URL(origin3, "/fuga");
+ data4.script = URL(origin3, "/script4.js");
data4.version_id = 4000;
- ASSERT_TRUE(database->WriteRegistration(data4, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data4, resources,
+ &newly_purgeable_resources));
registrations.clear();
- EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, &registrations));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetRegistrationsForOrigin(origin3, &registrations));
EXPECT_EQ(2U, registrations.size());
VerifyRegistrationData(data3, registrations[0]);
VerifyRegistrationData(data4, registrations[1]);
@@ -307,42 +341,56 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
std::vector<RegistrationData> registrations;
- EXPECT_TRUE(database->GetAllRegistrations(&registrations));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetAllRegistrations(&registrations));
EXPECT_TRUE(registrations.empty());
std::vector<Resource> resources;
+ std::vector<int64> newly_purgeable_resources;
+ GURL origin1("http://www1.example.com");
RegistrationData data1;
data1.registration_id = 100;
- data1.scope = GURL("http://www1.example.com/foo");
- data1.script = GURL("http://www1.example.com/script1.js");
+ data1.scope = URL(origin1, "/foo");
+ data1.script = URL(origin1, "/script1.js");
data1.version_id = 1000;
- ASSERT_TRUE(database->WriteRegistration(data1, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources,
+ &newly_purgeable_resources));
+ GURL origin2("http://www2.example.com");
RegistrationData data2;
data2.registration_id = 200;
- data2.scope = GURL("http://www2.example.com/bar");
- data2.script = GURL("http://www2.example.com/script2.js");
+ data2.scope = URL(origin2, "/bar");
+ data2.script = URL(origin2, "/script2.js");
data2.version_id = 2000;
- ASSERT_TRUE(database->WriteRegistration(data2, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources,
+ &newly_purgeable_resources));
+ GURL origin3("http://www3.example.com");
RegistrationData data3;
data3.registration_id = 300;
- data3.scope = GURL("http://www3.example.com/hoge");
- data3.script = GURL("http://www3.example.com/script3.js");
+ data3.scope = URL(origin3, "/hoge");
+ data3.script = URL(origin3, "/script3.js");
data3.version_id = 3000;
- ASSERT_TRUE(database->WriteRegistration(data3, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data3, resources,
+ &newly_purgeable_resources));
- // Same origin with |data3|.
+ // |origin3| has two registrations.
RegistrationData data4;
data4.registration_id = 400;
- data4.scope = GURL("http://www4.example.com/fuga");
- data4.script = GURL("http://www4.example.com/script4.js");
+ data4.scope = URL(origin3, "/fuga");
+ data4.script = URL(origin3, "/script4.js");
data4.version_id = 4000;
- ASSERT_TRUE(database->WriteRegistration(data4, resources));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data4, resources,
+ &newly_purgeable_resources));
registrations.clear();
- EXPECT_TRUE(database->GetAllRegistrations(&registrations));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetAllRegistrations(&registrations));
EXPECT_EQ(4U, registrations.size());
VerifyRegistrationData(data1, registrations[0]);
VerifyRegistrationData(data2, registrations[1]);
@@ -350,92 +398,99 @@ TEST(ServiceWorkerDatabaseTest, GetAllRegistrations) {
VerifyRegistrationData(data4, registrations[3]);
}
-// TODO(nhiroki): Record read/write operations using gtest fixture to avoid
-// building expectations by hand. For example, expected purgeable resource ids
-// should be calculated automatically.
TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ GURL origin("http://example.com");
RegistrationData data;
data.registration_id = 100;
- data.scope = GURL("http://example.com/foo");
- data.script = GURL("http://example.com/script.js");
+ data.scope = URL(origin, "/foo");
+ data.script = URL(origin, "/script.js");
data.version_id = 200;
- GURL origin = data.scope.GetOrigin();
-
- Resource resource1 = CreateResource(1, "http://example.com/resource1");
- Resource resource2 = CreateResource(2, "http://example.com/resource2");
std::vector<Resource> resources;
- resources.push_back(resource1);
- resources.push_back(resource2);
+ resources.push_back(CreateResource(1, URL(origin, "/resource1")));
+ resources.push_back(CreateResource(2, URL(origin, "/resource2")));
- // Write |resource1| to the uncommitted list to make sure that writing
+ // Write a resource to the uncommitted list to make sure that writing
// registration removes resource ids associated with the registration from
// the uncommitted list.
std::set<int64> uncommitted_ids;
- uncommitted_ids.insert(resource1.resource_id);
- EXPECT_TRUE(database->WriteUncommittedResourceIds(uncommitted_ids));
+ uncommitted_ids.insert(resources[0].resource_id);
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteUncommittedResourceIds(uncommitted_ids));
std::set<int64> uncommitted_ids_out;
- EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out));
- EXPECT_EQ(1u, uncommitted_ids_out.size());
- EXPECT_TRUE(ContainsKey(uncommitted_ids_out, resource1.resource_id));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetUncommittedResourceIds(&uncommitted_ids_out));
+ EXPECT_EQ(uncommitted_ids, uncommitted_ids_out);
- EXPECT_TRUE(database->WriteRegistration(data, resources));
+ std::vector<int64> newly_purgeable_resources;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data, resources,
+ &newly_purgeable_resources));
// Make sure that the registration and resource records are stored.
RegistrationData data_out;
std::vector<Resource> resources_out;
- EXPECT_TRUE(database->ReadRegistration(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadRegistration(
data.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(data, data_out);
VerifyResourceRecords(resources, resources_out);
- // Make sure that |resource1| is removed from the uncommitted list.
+ // Make sure that the resource is removed from the uncommitted list.
uncommitted_ids_out.clear();
- EXPECT_TRUE(database->GetUncommittedResourceIds(&uncommitted_ids_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetUncommittedResourceIds(&uncommitted_ids_out));
EXPECT_TRUE(uncommitted_ids_out.empty());
- EXPECT_TRUE(database->DeleteRegistration(
- data.registration_id, data.scope.GetOrigin()));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data.registration_id, origin,
+ &newly_purgeable_resources));
+ ASSERT_EQ(resources.size(), newly_purgeable_resources.size());
+ for (size_t i = 0; i < resources.size(); ++i)
+ EXPECT_EQ(newly_purgeable_resources[i], resources[i].resource_id);
// Make sure that the registration and resource records are gone.
resources_out.clear();
- EXPECT_FALSE(database->ReadRegistration(
- data.registration_id, origin, &data_out, &resources_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->ReadRegistration(
+ data.registration_id, origin, &data_out, &resources_out));
EXPECT_TRUE(resources_out.empty());
// Resources should be purgeable because these are no longer referred.
- std::set<int64> purgeable_resource_ids;
- EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
- EXPECT_EQ(2u, purgeable_resource_ids.size());
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
+ std::set<int64> purgeable_ids_out;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&purgeable_ids_out));
+ EXPECT_EQ(2u, purgeable_ids_out.size());
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[0].resource_id));
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources[1].resource_id));
}
TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ GURL origin("http://example.com");
RegistrationData data;
data.registration_id = 100;
- data.scope = GURL("http://example.com/foo");
- data.script = GURL("http://example.com/script.js");
+ data.scope = URL(origin, "/foo");
+ data.script = URL(origin, "/script.js");
data.version_id = 200;
- GURL origin = data.scope.GetOrigin();
-
- Resource resource1 = CreateResource(1, "http://example.com/resource1");
- Resource resource2 = CreateResource(2, "http://example.com/resource2");
std::vector<Resource> resources1;
- resources1.push_back(resource1);
- resources1.push_back(resource2);
+ resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
+ resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
+ std::vector<int64> newly_purgeable_resources;
- EXPECT_TRUE(database->WriteRegistration(data, resources1));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data, resources1,
+ &newly_purgeable_resources));
+ EXPECT_TRUE(newly_purgeable_resources.empty());
// Make sure that the registration and resource records are stored.
RegistrationData data_out;
std::vector<Resource> resources_out;
- EXPECT_TRUE(database->ReadRegistration(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
data.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(data, data_out);
VerifyResourceRecords(resources1, resources_out);
@@ -443,106 +498,224 @@ TEST(ServiceWorkerDatabaseTest, Registration_Overwrite) {
// Update the registration.
RegistrationData updated_data = data;
updated_data.version_id = data.version_id + 1;
- Resource resource3 = CreateResource(3, "http://example.com/resource3");
- Resource resource4 = CreateResource(4, "http://example.com/resource4");
std::vector<Resource> resources2;
- resources2.push_back(resource3);
- resources2.push_back(resource4);
+ resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
+ resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
- EXPECT_TRUE(database->WriteRegistration(updated_data, resources2));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(updated_data, resources2,
+ &newly_purgeable_resources));
+ ASSERT_EQ(resources1.size(), newly_purgeable_resources.size());
+ for(size_t i = 0; i < resources1.size(); ++i)
+ EXPECT_EQ(newly_purgeable_resources[i], resources1[i].resource_id);
// Make sure that |updated_data| is stored and resources referred from |data|
// is moved to the purgeable list.
resources_out.clear();
- EXPECT_TRUE(database->ReadRegistration(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
updated_data.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(updated_data, data_out);
VerifyResourceRecords(resources2, resources_out);
- std::set<int64> purgeable_resource_ids;
- EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
- EXPECT_EQ(2u, purgeable_resource_ids.size());
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
+ std::set<int64> purgeable_ids_out;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&purgeable_ids_out));
+ EXPECT_EQ(2u, purgeable_ids_out.size());
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
}
TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ GURL origin("http://example.com");
+
+ std::vector<int64> newly_purgeable_resources;
// Add registration1.
RegistrationData data1;
data1.registration_id = 100;
- data1.scope = GURL("http://example.com/foo");
- data1.script = GURL("http://example.com/script1.js");
+ data1.scope = URL(origin, "/foo");
+ data1.script = URL(origin, "/script1.js");
data1.version_id = 200;
- GURL origin1 = data1.scope.GetOrigin();
-
- Resource resource1 = CreateResource(1, "http://example.com/resource1");
- Resource resource2 = CreateResource(2, "http://example.com/resource2");
std::vector<Resource> resources1;
- resources1.push_back(resource1);
- resources1.push_back(resource2);
- EXPECT_TRUE(database->WriteRegistration(data1, resources1));
+ resources1.push_back(CreateResource(1, URL(origin, "/resource1")));
+ resources1.push_back(CreateResource(2, URL(origin, "/resource2")));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources1,
+ &newly_purgeable_resources));
// Add registration2.
RegistrationData data2;
data2.registration_id = 101;
- data2.scope = GURL("http://example.com/bar");
- data2.script = GURL("http://example.com/script2.js");
+ data2.scope = URL(origin, "/bar");
+ data2.script = URL(origin, "/script2.js");
data2.version_id = 201;
- GURL origin2 = data2.scope.GetOrigin();
-
- Resource resource3 = CreateResource(3, "http://example.com/resource3");
- Resource resource4 = CreateResource(4, "http://example.com/resource4");
std::vector<Resource> resources2;
- resources2.push_back(resource3);
- resources2.push_back(resource4);
- EXPECT_TRUE(database->WriteRegistration(data2, resources2));
+ resources2.push_back(CreateResource(3, URL(origin, "/resource3")));
+ resources2.push_back(CreateResource(4, URL(origin, "/resource4")));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources2,
+ &newly_purgeable_resources));
// Make sure that registration1 is stored.
RegistrationData data_out;
std::vector<Resource> resources_out;
- EXPECT_TRUE(database->ReadRegistration(
- data1.registration_id, origin1, &data_out, &resources_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
+ data1.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(data1, data_out);
VerifyResourceRecords(resources1, resources_out);
// Make sure that registration2 is also stored.
resources_out.clear();
- EXPECT_TRUE(database->ReadRegistration(
- data2.registration_id, origin2, &data_out, &resources_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
+ data2.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(data2, data_out);
VerifyResourceRecords(resources2, resources_out);
- std::set<int64> purgeable_resource_ids;
- EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
- EXPECT_TRUE(purgeable_resource_ids.empty());
+ std::set<int64> purgeable_ids_out;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&purgeable_ids_out));
+ EXPECT_TRUE(purgeable_ids_out.empty());
// Delete registration1.
- EXPECT_TRUE(database->DeleteRegistration(data1.registration_id, origin1));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data1.registration_id, origin,
+ &newly_purgeable_resources));
// Make sure that registration1 is gone.
resources_out.clear();
- EXPECT_FALSE(database->ReadRegistration(
- data1.registration_id, origin1, &data_out, &resources_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->ReadRegistration(
+ data1.registration_id, origin, &data_out, &resources_out));
EXPECT_TRUE(resources_out.empty());
- purgeable_resource_ids.clear();
- EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_resource_ids));
- EXPECT_EQ(2u, purgeable_resource_ids.size());
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource1.resource_id));
- EXPECT_TRUE(ContainsKey(purgeable_resource_ids, resource2.resource_id));
+ purgeable_ids_out.clear();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&purgeable_ids_out));
+ EXPECT_EQ(2u, purgeable_ids_out.size());
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[0].resource_id));
+ EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id));
// Make sure that registration2 is still alive.
resources_out.clear();
- EXPECT_TRUE(database->ReadRegistration(
- data2.registration_id, origin2, &data_out, &resources_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
+ data2.registration_id, origin, &data_out, &resources_out));
VerifyRegistrationData(data2, data_out);
VerifyResourceRecords(resources2, resources_out);
}
+TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) {
+ scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ GURL origin("http://example.com");
+
+ std::vector<int64> newly_purgeable_resources;
+
+ // Should be false because a registration does not exist.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->UpdateVersionToActive(0, origin));
+
+ // Add a registration.
+ RegistrationData data;
+ data.registration_id = 100;
+ data.scope = URL(origin, "/foo");
+ data.script = URL(origin, "/script.js");
+ data.version_id = 200;
+ data.is_active = false;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data, std::vector<Resource>(),
+ &newly_purgeable_resources));
+
+ // Make sure that the registration is stored.
+ RegistrationData data_out;
+ std::vector<Resource> resources_out;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadRegistration(
+ data.registration_id, origin, &data_out, &resources_out));
+ VerifyRegistrationData(data, data_out);
+ EXPECT_TRUE(resources_out.empty());
+
+ // Activate the registration.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->UpdateVersionToActive(data.registration_id, origin));
+
+ // Make sure that the registration is activated.
+ resources_out.clear();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadRegistration(
+ data.registration_id, origin, &data_out, &resources_out));
+ RegistrationData expected_data = data;
+ expected_data.is_active = true;
+ VerifyRegistrationData(expected_data, data_out);
+ EXPECT_TRUE(resources_out.empty());
+
+ // Delete the registration.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data.registration_id, origin,
+ &newly_purgeable_resources));
+
+ // Should be false because the registration is gone.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->UpdateVersionToActive(data.registration_id, origin));
+}
+
+TEST(ServiceWorkerDatabaseTest, UpdateLastCheckTime) {
+ scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ GURL origin("http://example.com");
+ std::vector<int64> newly_purgeable_resources;
+
+ // Should be false because a registration does not exist.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->UpdateLastCheckTime(0, origin, base::Time::Now()));
+
+ // Add a registration.
+ RegistrationData data;
+ data.registration_id = 100;
+ data.scope = URL(origin, "/foo");
+ data.script = URL(origin, "/script.js");
+ data.version_id = 200;
+ data.last_update_check = base::Time::Now();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data, std::vector<Resource>(),
+ &newly_purgeable_resources));
+
+ // Make sure that the registration is stored.
+ RegistrationData data_out;
+ std::vector<Resource> resources_out;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadRegistration(
+ data.registration_id, origin, &data_out, &resources_out));
+ VerifyRegistrationData(data, data_out);
+ EXPECT_TRUE(resources_out.empty());
+
+ // Update the last check time.
+ base::Time updated_time = base::Time::Now();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->UpdateLastCheckTime(
+ data.registration_id, origin, updated_time));
+
+ // Make sure that the registration is updated.
+ resources_out.clear();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ReadRegistration(
+ data.registration_id, origin, &data_out, &resources_out));
+ RegistrationData expected_data = data;
+ expected_data.last_update_check = updated_time;
+ VerifyRegistrationData(expected_data, data_out);
+ EXPECT_TRUE(resources_out.empty());
+
+ // Delete the registration.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteRegistration(data.registration_id, origin,
+ &newly_purgeable_resources));
+
+ // Should be false because the registration is gone.
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND,
+ database->UpdateLastCheckTime(
+ data.registration_id, origin, base::Time::Now()));
+}
+
TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
@@ -551,38 +724,39 @@ TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
ids1.insert(1);
ids1.insert(2);
ids1.insert(3);
- EXPECT_TRUE(database->WriteUncommittedResourceIds(ids1));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteUncommittedResourceIds(ids1));
std::set<int64> ids_out;
- EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
- EXPECT_EQ(ids1.size(), ids_out.size());
- EXPECT_TRUE(base::STLIncludes(ids1, ids_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetUncommittedResourceIds(&ids_out));
+ EXPECT_EQ(ids1, ids_out);
// Write {2, 4}.
std::set<int64> ids2;
ids2.insert(2);
ids2.insert(4);
- EXPECT_TRUE(database->WriteUncommittedResourceIds(ids2));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteUncommittedResourceIds(ids2));
ids_out.clear();
- EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
- EXPECT_EQ(4U, ids_out.size());
- EXPECT_TRUE(ContainsKey(ids_out, 1));
- EXPECT_TRUE(ContainsKey(ids_out, 2));
- EXPECT_TRUE(ContainsKey(ids_out, 3));
- EXPECT_TRUE(ContainsKey(ids_out, 4));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetUncommittedResourceIds(&ids_out));
+ std::set<int64> expected = base::STLSetUnion<std::set<int64> >(ids1, ids2);
+ EXPECT_EQ(expected, ids_out);
// Delete {2, 3}.
std::set<int64> ids3;
ids3.insert(2);
ids3.insert(3);
- EXPECT_TRUE(database->ClearUncommittedResourceIds(ids3));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ClearUncommittedResourceIds(ids3));
ids_out.clear();
- EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
- EXPECT_EQ(2U, ids_out.size());
- EXPECT_TRUE(ContainsKey(ids_out, 1));
- EXPECT_TRUE(ContainsKey(ids_out, 4));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetUncommittedResourceIds(&ids_out));
+ expected = base::STLSetDifference<std::set<int64> >(expected, ids3);
+ EXPECT_EQ(expected, ids_out);
}
TEST(ServiceWorkerDatabaseTest, PurgeableResourceIds) {
@@ -593,42 +767,44 @@ TEST(ServiceWorkerDatabaseTest, PurgeableResourceIds) {
ids1.insert(1);
ids1.insert(2);
ids1.insert(3);
- EXPECT_TRUE(database->WritePurgeableResourceIds(ids1));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WritePurgeableResourceIds(ids1));
std::set<int64> ids_out;
- EXPECT_TRUE(database->GetPurgeableResourceIds(&ids_out));
- EXPECT_EQ(ids1.size(), ids_out.size());
- EXPECT_TRUE(base::STLIncludes(ids1, ids_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&ids_out));
+ EXPECT_EQ(ids1, ids_out);
// Write {2, 4}.
std::set<int64> ids2;
ids2.insert(2);
ids2.insert(4);
- EXPECT_TRUE(database->WritePurgeableResourceIds(ids2));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WritePurgeableResourceIds(ids2));
ids_out.clear();
- EXPECT_TRUE(database->GetPurgeableResourceIds(&ids_out));
- EXPECT_EQ(4U, ids_out.size());
- EXPECT_TRUE(ContainsKey(ids_out, 1));
- EXPECT_TRUE(ContainsKey(ids_out, 2));
- EXPECT_TRUE(ContainsKey(ids_out, 3));
- EXPECT_TRUE(ContainsKey(ids_out, 4));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&ids_out));
+ std::set<int64> expected = base::STLSetUnion<std::set<int64> >(ids1, ids2);
+ EXPECT_EQ(expected, ids_out);
// Delete {2, 3}.
std::set<int64> ids3;
ids3.insert(2);
ids3.insert(3);
- EXPECT_TRUE(database->ClearPurgeableResourceIds(ids3));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->ClearPurgeableResourceIds(ids3));
ids_out.clear();
- EXPECT_TRUE(database->GetPurgeableResourceIds(&ids_out));
- EXPECT_EQ(2U, ids_out.size());
- EXPECT_TRUE(ContainsKey(ids_out, 1));
- EXPECT_TRUE(ContainsKey(ids_out, 4));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&ids_out));
+ expected = base::STLSetDifference<std::set<int64> >(expected, ids3);
+ EXPECT_EQ(expected, ids_out);
}
TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+ std::vector<int64> newly_purgeable_resources;
// Data associated with |origin1| will be removed.
GURL origin1("http://example.com");
@@ -644,7 +820,9 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources1;
resources1.push_back(CreateResource(1, URL(origin1, "/resource1")));
resources1.push_back(CreateResource(2, URL(origin1, "/resource2")));
- ASSERT_TRUE(database->WriteRegistration(data1, resources1));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data1, resources1,
+ &newly_purgeable_resources));
RegistrationData data2;
data2.registration_id = 11;
@@ -655,7 +833,9 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources2;
resources2.push_back(CreateResource(3, URL(origin1, "/resource3")));
resources2.push_back(CreateResource(4, URL(origin1, "/resource4")));
- ASSERT_TRUE(database->WriteRegistration(data2, resources2));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data2, resources2,
+ &newly_purgeable_resources));
// |origin2| has one registration.
RegistrationData data3;
@@ -667,32 +847,39 @@ TEST(ServiceWorkerDatabaseTest, DeleteAllDataForOrigin) {
std::vector<Resource> resources3;
resources3.push_back(CreateResource(5, URL(origin2, "/resource5")));
resources3.push_back(CreateResource(6, URL(origin2, "/resource6")));
- ASSERT_TRUE(database->WriteRegistration(data3, resources3));
+ ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->WriteRegistration(data3, resources3,
+ &newly_purgeable_resources));
- EXPECT_TRUE(database->DeleteAllDataForOrigin(origin1));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->DeleteAllDataForOrigin(origin1,
+ &newly_purgeable_resources));
// |origin1| should be removed from the unique origin list.
std::set<GURL> unique_origins;
- EXPECT_TRUE(database->GetOriginsWithRegistrations(&unique_origins));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetOriginsWithRegistrations(&unique_origins));
EXPECT_EQ(1u, unique_origins.size());
EXPECT_TRUE(ContainsKey(unique_origins, origin2));
// The registrations for |origin1| should be removed.
std::vector<RegistrationData> registrations;
- EXPECT_TRUE(database->GetRegistrationsForOrigin(origin1, &registrations));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetRegistrationsForOrigin(origin1, &registrations));
EXPECT_TRUE(registrations.empty());
// The registration for |origin2| should not be removed.
RegistrationData data_out;
std::vector<Resource> resources_out;
- EXPECT_TRUE(database->ReadRegistration(
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration(
data3.registration_id, origin2, &data_out, &resources_out));
VerifyRegistrationData(data3, data_out);
VerifyResourceRecords(resources3, resources_out);
// The resources associated with |origin1| should be purgeable.
std::set<int64> purgeable_ids_out;
- EXPECT_TRUE(database->GetPurgeableResourceIds(&purgeable_ids_out));
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(&purgeable_ids_out));
EXPECT_EQ(4u, purgeable_ids_out.size());
EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1));
EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2));
diff --git a/content/browser/service_worker/service_worker_disk_cache.h b/content/browser/service_worker/service_worker_disk_cache.h
index c0446c929b..83850129aa 100644
--- a/content/browser/service_worker/service_worker_disk_cache.h
+++ b/content/browser/service_worker/service_worker_disk_cache.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_
-#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_H_
#include "content/common/content_export.h"
#include "webkit/browser/appcache/appcache_disk_cache.h"
@@ -16,11 +16,11 @@ namespace content {
// TODO(michaeln): If this reuse sticks, refactor/move the
// resused classes to a more common location.
-class ServiceWorkerDiskCache
+class CONTENT_EXPORT ServiceWorkerDiskCache
: public appcache::AppCacheDiskCache {
};
-class ServiceWorkerResponseReader
+class CONTENT_EXPORT ServiceWorkerResponseReader
: public appcache::AppCacheResponseReader {
protected:
// Should only be constructed by the storage class.
@@ -30,7 +30,7 @@ class ServiceWorkerResponseReader
ServiceWorkerDiskCache* disk_cache);
};
-class ServiceWorkerResponseWriter
+class CONTENT_EXPORT ServiceWorkerResponseWriter
: public appcache::AppCacheResponseWriter {
protected:
// Should only be constructed by the storage class.
@@ -40,12 +40,16 @@ class ServiceWorkerResponseWriter
ServiceWorkerDiskCache* disk_cache);
};
-struct HttpResponseInfoIOBuffer
+struct CONTENT_EXPORT HttpResponseInfoIOBuffer
: public appcache::HttpResponseInfoIOBuffer {
+ public:
+ HttpResponseInfoIOBuffer() : appcache::HttpResponseInfoIOBuffer() {}
+ explicit HttpResponseInfoIOBuffer(net::HttpResponseInfo* info)
+ : appcache::HttpResponseInfoIOBuffer(info) {}
protected:
virtual ~HttpResponseInfoIOBuffer();
};
} // namespace content
-#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_
+#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DISK_CACHE_H_
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index ded0a37bb3..db9e373702 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -85,11 +85,9 @@ void ServiceWorkerDispatcherHost::OnDestruct() const {
}
bool ServiceWorkerDispatcherHost::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(
- ServiceWorkerDispatcherHost, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcherHost, message)
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_RegisterServiceWorker,
OnRegisterServiceWorker)
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_UnregisterServiceWorker,
@@ -157,7 +155,7 @@ void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
thread_id,
request_id,
- WebServiceWorkerError::DisabledError,
+ WebServiceWorkerError::ErrorTypeDisabled,
base::ASCIIToUTF16(kDisabledErrorMessage)));
return;
}
@@ -169,7 +167,7 @@ void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
thread_id,
request_id,
- WebServiceWorkerError::SecurityError,
+ WebServiceWorkerError::ErrorTypeSecurity,
base::ASCIIToUTF16(kDomainMismatchErrorMessage)));
return;
}
@@ -204,7 +202,7 @@ void ServiceWorkerDispatcherHost::OnUnregisterServiceWorker(
Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
thread_id,
request_id,
- blink::WebServiceWorkerError::DisabledError,
+ blink::WebServiceWorkerError::ErrorTypeDisabled,
base::ASCIIToUTF16(kDisabledErrorMessage)));
return;
}
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.h b/content/browser/service_worker/service_worker_dispatcher_host.h
index 7301eee48e..71999d55ae 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.h
+++ b/content/browser/service_worker/service_worker_dispatcher_host.h
@@ -34,8 +34,7 @@ class CONTENT_EXPORT ServiceWorkerDispatcherHost : public BrowserMessageFilter {
// BrowserMessageFilter implementation
virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE;
virtual void OnDestruct() const OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
// IPC::Sender implementation
diff --git a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
index 9c74777cfe..1eaeadbcdc 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
@@ -83,11 +83,8 @@ TEST_F(ServiceWorkerDispatcherHostTest, DisabledCausesError) {
new TestingServiceWorkerDispatcherHost(
kRenderProcessId, context_wrapper(), helper_.get());
- bool handled;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()));
// TODO(alecflett): Pump the message loop when this becomes async.
ASSERT_EQ(1UL, dispatcher_host->ipc_sink()->message_count());
@@ -110,11 +107,8 @@ TEST_F(ServiceWorkerDispatcherHostTest, DISABLED_Enabled) {
new TestingServiceWorkerDispatcherHost(
kRenderProcessId, context_wrapper(), helper_.get());
- bool handled;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()));
base::RunLoop().RunUntilIdle();
// TODO(alecflett): Pump the message loop when this becomes async.
@@ -137,11 +131,11 @@ TEST_F(ServiceWorkerDispatcherHostTest, EarlyContextDeletion) {
helper_->ShutdownContext();
- bool handled;
+ // Let the shutdown reach the simulated IO thread.
+ base::RunLoop().RunUntilIdle();
+
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, -1, GURL(), GURL()));
// TODO(alecflett): Pump the message loop when this becomes async.
ASSERT_EQ(1UL, dispatcher_host->ipc_sink()->message_count());
@@ -156,42 +150,28 @@ TEST_F(ServiceWorkerDispatcherHostTest, ProviderCreatedAndDestroyed) {
const int kProviderId = 1001; // Test with a value != kRenderProcessId.
- bool handled = false;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_ProviderCreated(kProviderId),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_ProviderCreated(kProviderId));
EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId));
// Two with the same ID should be seen as a bad message.
- handled = false;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_ProviderCreated(kProviderId),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_ProviderCreated(kProviderId));
EXPECT_EQ(1, dispatcher_host->bad_messages_received_count_);
- handled = false;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_ProviderDestroyed(kProviderId),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_ProviderDestroyed(kProviderId));
EXPECT_FALSE(context()->GetProviderHost(kRenderProcessId, kProviderId));
// Destroying an ID that does not exist warrants a bad message.
- handled = false;
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_ProviderDestroyed(kProviderId),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_ProviderDestroyed(kProviderId));
EXPECT_EQ(2, dispatcher_host->bad_messages_received_count_);
// Deletion of the dispatcher_host should cause providers for that
// process to get deleted as well.
dispatcher_host->OnMessageReceived(
- ServiceWorkerHostMsg_ProviderCreated(kProviderId),
- &handled);
- EXPECT_TRUE(handled);
+ ServiceWorkerHostMsg_ProviderCreated(kProviderId));
EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId));
EXPECT_TRUE(dispatcher_host->HasOneRef());
dispatcher_host = NULL;
diff --git a/content/browser/service_worker/service_worker_info.cc b/content/browser/service_worker/service_worker_info.cc
index 64d12fd249..aad3effa73 100644
--- a/content/browser/service_worker/service_worker_info.cc
+++ b/content/browser/service_worker/service_worker_info.cc
@@ -5,6 +5,7 @@
#include "content/browser/service_worker/service_worker_info.h"
#include "content/common/service_worker/service_worker_types.h"
+#include "ipc/ipc_message.h"
namespace content {
@@ -14,20 +15,26 @@ ServiceWorkerVersionInfo::ServiceWorkerVersionInfo()
status(ServiceWorkerVersion::NEW),
version_id(kInvalidServiceWorkerVersionId),
process_id(-1),
- thread_id(-1) {}
+ thread_id(-1),
+ devtools_agent_route_id(MSG_ROUTING_NONE) {
+}
ServiceWorkerVersionInfo::ServiceWorkerVersionInfo(
ServiceWorkerVersion::RunningStatus running_status,
ServiceWorkerVersion::Status status,
int64 version_id,
int process_id,
- int thread_id)
+ int thread_id,
+ int devtools_agent_route_id)
: is_null(false),
running_status(running_status),
status(status),
version_id(version_id),
process_id(process_id),
- thread_id(thread_id) {}
+ thread_id(thread_id),
+ devtools_agent_route_id(devtools_agent_route_id) {
+}
+
ServiceWorkerVersionInfo::~ServiceWorkerVersionInfo() {}
ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo() {}
@@ -35,12 +42,15 @@ ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo() {}
ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo(
const GURL& script_url,
const GURL& pattern,
+ int64 registration_id,
const ServiceWorkerVersionInfo& active_version,
const ServiceWorkerVersionInfo& pending_version)
: script_url(script_url),
pattern(pattern),
+ registration_id(registration_id),
active_version(active_version),
- pending_version(pending_version) {}
+ pending_version(pending_version) {
+}
ServiceWorkerRegistrationInfo::~ServiceWorkerRegistrationInfo() {}
diff --git a/content/browser/service_worker/service_worker_info.h b/content/browser/service_worker/service_worker_info.h
index 9d1a617ad6..47b1b94beb 100644
--- a/content/browser/service_worker/service_worker_info.h
+++ b/content/browser/service_worker/service_worker_info.h
@@ -20,7 +20,8 @@ class CONTENT_EXPORT ServiceWorkerVersionInfo {
ServiceWorkerVersion::Status status,
int64 version_id,
int process_id,
- int thread_id);
+ int thread_id,
+ int devtools_agent_route_id);
~ServiceWorkerVersionInfo();
bool is_null;
@@ -29,6 +30,7 @@ class CONTENT_EXPORT ServiceWorkerVersionInfo {
int64 version_id;
int process_id;
int thread_id;
+ int devtools_agent_route_id;
};
class CONTENT_EXPORT ServiceWorkerRegistrationInfo {
@@ -37,12 +39,14 @@ class CONTENT_EXPORT ServiceWorkerRegistrationInfo {
ServiceWorkerRegistrationInfo(
const GURL& script_url,
const GURL& pattern,
+ int64 registration_id,
const ServiceWorkerVersionInfo& active_version,
const ServiceWorkerVersionInfo& pending_version);
~ServiceWorkerRegistrationInfo();
GURL script_url;
GURL pattern;
+ int64 registration_id;
ServiceWorkerVersionInfo active_version;
ServiceWorkerVersionInfo pending_version;
};
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc
index 9e0ab94847..0d4e4445fc 100644
--- a/content/browser/service_worker/service_worker_internals_ui.cc
+++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -11,6 +11,8 @@
#include "base/memory/scoped_vector.h"
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
+#include "content/browser/devtools/devtools_manager_impl.h"
+#include "content/browser/devtools/embedded_worker_devtools_manager.h"
#include "content/browser/service_worker/service_worker_context_observer.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_registration.h"
@@ -33,54 +35,240 @@ using base::WeakPtr;
namespace content {
-// This class proxies calls to the ServiceWorker APIs on the IO
-// thread, and then calls back JavaScript on the UI thread.
-class ServiceWorkerInternalsUI::OperationProxy
- : public base::RefCountedThreadSafe<
- ServiceWorkerInternalsUI::OperationProxy> {
- public:
- OperationProxy(const WeakPtr<ServiceWorkerInternalsUI> internals,
- scoped_ptr<ListValue> original_args)
- : internals_(internals), original_args_(original_args.Pass()) {}
-
- void GetRegistrationsOnIOThread(int partition_id,
- ServiceWorkerContextWrapper* context,
- const base::FilePath& context_path);
- void UnregisterOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope);
- void StartWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope);
- void StopWorkerOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope);
- void DispatchSyncEventToWorkerOnIOThread(
- scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope);
+namespace {
- private:
- friend class base::RefCountedThreadSafe<OperationProxy>;
- ~OperationProxy() {}
- void OnHaveRegistrations(
- int partition_id,
- const base::FilePath& context_path,
- const std::vector<ServiceWorkerRegistrationInfo>& registrations);
+void OperationCompleteCallback(WeakPtr<ServiceWorkerInternalsUI> internals,
+ int callback_id,
+ ServiceWorkerStatusCode status) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(OperationCompleteCallback, internals, callback_id, status));
+ return;
+ }
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (internals) {
+ internals->web_ui()->CallJavascriptFunction(
+ "serviceworker.onOperationComplete",
+ FundamentalValue(static_cast<int>(status)),
+ FundamentalValue(callback_id));
+ }
+}
- void OperationComplete(ServiceWorkerStatusCode status);
+void CallServiceWorkerVersionMethodWithVersionID(
+ ServiceWorkerInternalsUI::ServiceWorkerVersionMethod method,
+ scoped_refptr<ServiceWorkerContextWrapper> context,
+ int64 version_id,
+ const ServiceWorkerInternalsUI::StatusCallback& callback) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(CallServiceWorkerVersionMethodWithVersionID,
+ method,
+ context,
+ version_id,
+ callback));
+ return;
+ }
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ scoped_refptr<ServiceWorkerVersion> version =
+ context->context()->GetLiveVersion(version_id);
+ if (!version) {
+ callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND);
+ return;
+ }
+ (*version.*method)(callback);
+}
- void StartActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration);
+void UnregisterWithScope(
+ scoped_refptr<ServiceWorkerContextWrapper> context,
+ const GURL& scope,
+ const ServiceWorkerInternalsUI::StatusCallback& callback) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(UnregisterWithScope, context, scope, callback));
+ return;
+ }
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ context->context()->UnregisterServiceWorker(scope, callback);
+}
- void StopActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration);
+void WorkerStarted(const scoped_refptr<ServiceWorkerRegistration>& registration,
+ const ServiceWorkerInternalsUI::StatusCallback& callback,
+ ServiceWorkerStatusCode status) {
+ callback.Run(status);
+}
- void DispatchSyncEventToActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration);
+void StartActiveWorker(
+ const ServiceWorkerInternalsUI::StatusCallback& callback,
+ ServiceWorkerStatusCode status,
+ const scoped_refptr<ServiceWorkerRegistration>& registration) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (status == SERVICE_WORKER_OK) {
+ // Pass the reference of |registration| to WorkerStarted callback to prevent
+ // it from being deleted while starting the worker. If the refcount of
+ // |registration| is 1, it will be deleted after WorkerStarted is called.
+ registration->active_version()->StartWorker(
+ base::Bind(WorkerStarted, registration, callback));
+ return;
+ }
+ callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND);
+}
- WeakPtr<ServiceWorkerInternalsUI> internals_;
- scoped_ptr<ListValue> original_args_;
-};
+void FindRegistrationForPattern(
+ scoped_refptr<ServiceWorkerContextWrapper> context,
+ const GURL& scope,
+ const ServiceWorkerStorage::FindRegistrationCallback callback) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(FindRegistrationForPattern, context, scope, callback));
+ return;
+ }
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ context->context()->storage()->FindRegistrationForPattern(scope, callback);
+}
+
+void UpdateVersionInfo(const ServiceWorkerVersionInfo& version,
+ DictionaryValue* info) {
+ switch (version.running_status) {
+ case ServiceWorkerVersion::STOPPED:
+ info->SetString("running_status", "STOPPED");
+ break;
+ case ServiceWorkerVersion::STARTING:
+ info->SetString("running_status", "STARTING");
+ break;
+ case ServiceWorkerVersion::RUNNING:
+ info->SetString("running_status", "RUNNING");
+ break;
+ case ServiceWorkerVersion::STOPPING:
+ info->SetString("running_status", "STOPPING");
+ break;
+ }
+
+ switch (version.status) {
+ case ServiceWorkerVersion::NEW:
+ info->SetString("status", "NEW");
+ break;
+ case ServiceWorkerVersion::INSTALLING:
+ info->SetString("status", "INSTALLING");
+ break;
+ case ServiceWorkerVersion::INSTALLED:
+ info->SetString("status", "INSTALLED");
+ break;
+ case ServiceWorkerVersion::ACTIVATING:
+ info->SetString("status", "ACTIVATING");
+ break;
+ case ServiceWorkerVersion::ACTIVE:
+ info->SetString("status", "ACTIVE");
+ break;
+ case ServiceWorkerVersion::DEACTIVATED:
+ info->SetString("status", "DEACTIVATED");
+ break;
+ }
+ info->SetString("version_id", base::Int64ToString(version.version_id));
+ info->SetInteger("process_id", version.process_id);
+ info->SetInteger("thread_id", version.thread_id);
+ info->SetInteger("devtools_agent_route_id", version.devtools_agent_route_id);
+}
+
+ListValue* GetRegistrationListValue(
+ const std::vector<ServiceWorkerRegistrationInfo>& registrations) {
+ ListValue* result = new ListValue();
+ for (std::vector<ServiceWorkerRegistrationInfo>::const_iterator it =
+ registrations.begin();
+ it != registrations.end();
+ ++it) {
+ const ServiceWorkerRegistrationInfo& registration = *it;
+ DictionaryValue* registration_info = new DictionaryValue();
+ registration_info->SetString("scope", registration.pattern.spec());
+ registration_info->SetString("script_url", registration.script_url.spec());
+ registration_info->SetString(
+ "registration_id", base::Int64ToString(registration.registration_id));
+
+ if (!registration.active_version.is_null) {
+ DictionaryValue* active_info = new DictionaryValue();
+ UpdateVersionInfo(registration.active_version, active_info);
+ registration_info->Set("active", active_info);
+ }
+
+ if (!registration.pending_version.is_null) {
+ DictionaryValue* pending_info = new DictionaryValue();
+ UpdateVersionInfo(registration.pending_version, pending_info);
+ registration_info->Set("pending", pending_info);
+ }
+
+ result->Append(registration_info);
+ }
+ return result;
+}
+
+ListValue* GetVersionListValue(
+ const std::vector<ServiceWorkerVersionInfo>& versions) {
+ ListValue* result = new ListValue();
+ for (std::vector<ServiceWorkerVersionInfo>::const_iterator it =
+ versions.begin();
+ it != versions.end();
+ ++it) {
+ DictionaryValue* info = new DictionaryValue();
+ UpdateVersionInfo(*it, info);
+ result->Append(info);
+ }
+ return result;
+}
+
+void GetRegistrationsOnIOThread(
+ scoped_refptr<ServiceWorkerContextWrapper> context,
+ base::Callback<void(const std::vector<ServiceWorkerRegistrationInfo>&)>
+ callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ context->context()->storage()->GetAllRegistrations(callback);
+}
+
+void OnStoredRegistrations(
+ scoped_refptr<ServiceWorkerContextWrapper> context,
+ base::Callback<void(const std::vector<ServiceWorkerRegistrationInfo>&,
+ const std::vector<ServiceWorkerVersionInfo>&,
+ const std::vector<ServiceWorkerRegistrationInfo>&)>
+ callback,
+ const std::vector<ServiceWorkerRegistrationInfo>& stored_registrations) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(callback,
+ context->context()->GetAllLiveRegistrationInfo(),
+ context->context()->GetAllLiveVersionInfo(),
+ stored_registrations));
+}
+
+void OnAllRegistrations(
+ WeakPtr<ServiceWorkerInternalsUI> internals,
+ int partition_id,
+ const base::FilePath& context_path,
+ const std::vector<ServiceWorkerRegistrationInfo>& live_registrations,
+ const std::vector<ServiceWorkerVersionInfo>& live_versions,
+ const std::vector<ServiceWorkerRegistrationInfo>& stored_registrations) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (!internals)
+ return;
+
+ ScopedVector<const Value> args;
+ args.push_back(GetRegistrationListValue(live_registrations));
+ args.push_back(GetVersionListValue(live_versions));
+ args.push_back(GetRegistrationListValue(stored_registrations));
+ args.push_back(new FundamentalValue(partition_id));
+ args.push_back(new StringValue(context_path.value()));
+ internals->web_ui()->CallJavascriptFunction("serviceworker.onPartitionData",
+ args.get());
+}
+
+} // namespace
class ServiceWorkerInternalsUI::PartitionObserver
: public ServiceWorkerContextObserver {
@@ -157,6 +345,15 @@ class ServiceWorkerInternalsUI::PartitionObserver
web_ui_->CallJavascriptFunction("serviceworker.onConsoleMessageReported",
args.get());
}
+ virtual void OnRegistrationStored(const GURL& pattern) OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ web_ui_->CallJavascriptFunction("serviceworker.onRegistrationStored",
+ StringValue(pattern.spec()));
+ }
+ virtual void OnRegistrationDeleted(const GURL& pattern) OVERRIDE {
+ web_ui_->CallJavascriptFunction("serviceworker.onRegistrationDeleted",
+ StringValue(pattern.spec()));
+ }
int partition_id() const { return partition_id_; }
private:
@@ -175,30 +372,44 @@ ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui)
source->AddResourcePath("serviceworker_internals.css",
IDR_SERVICE_WORKER_INTERNALS_CSS);
source->SetDefaultResource(IDR_SERVICE_WORKER_INTERNALS_HTML);
+ source->DisableDenyXFrameOptions();
BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
WebUIDataSource::Add(browser_context, source);
web_ui->RegisterMessageCallback(
- "getAllRegistrations",
- base::Bind(&ServiceWorkerInternalsUI::GetAllRegistrations,
+ "GetOptions",
+ base::Bind(&ServiceWorkerInternalsUI::GetOptions,
base::Unretained(this)));
web_ui->RegisterMessageCallback(
- "start",
- base::Bind(&ServiceWorkerInternalsUI::StartWorker,
+ "SetOption",
+ base::Bind(&ServiceWorkerInternalsUI::SetOption, base::Unretained(this)));
+ web_ui->RegisterMessageCallback(
+ "getAllRegistrations",
+ base::Bind(&ServiceWorkerInternalsUI::GetAllRegistrations,
base::Unretained(this)));
web_ui->RegisterMessageCallback(
"stop",
- base::Bind(&ServiceWorkerInternalsUI::StopWorker,
+ base::Bind(&ServiceWorkerInternalsUI::CallServiceWorkerVersionMethod,
+ base::Unretained(this),
+ &ServiceWorkerVersion::StopWorker));
+ web_ui->RegisterMessageCallback(
+ "sync",
+ base::Bind(&ServiceWorkerInternalsUI::CallServiceWorkerVersionMethod,
+ base::Unretained(this),
+ &ServiceWorkerVersion::DispatchSyncEvent));
+ web_ui->RegisterMessageCallback(
+ "inspect",
+ base::Bind(&ServiceWorkerInternalsUI::InspectWorker,
base::Unretained(this)));
web_ui->RegisterMessageCallback(
"unregister",
base::Bind(&ServiceWorkerInternalsUI::Unregister,
base::Unretained(this)));
web_ui->RegisterMessageCallback(
- "sync",
- base::Bind(&ServiceWorkerInternalsUI::DispatchSyncEventToWorker,
+ "start",
+ base::Bind(&ServiceWorkerInternalsUI::StartWorker,
base::Unretained(this)));
}
@@ -213,12 +424,29 @@ ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() {
BrowserContext::ForEachStoragePartition(browser_context, remove_observer_cb);
}
+void ServiceWorkerInternalsUI::GetOptions(const ListValue* args) {
+ DictionaryValue options;
+ options.SetBoolean("debug_on_start",
+ EmbeddedWorkerDevToolsManager::GetInstance()
+ ->debug_service_worker_on_start());
+ web_ui()->CallJavascriptFunction("serviceworker.onOptions", options);
+}
+
+void ServiceWorkerInternalsUI::SetOption(const ListValue* args) {
+ std::string option_name;
+ bool option_boolean;
+ if (!args->GetString(0, &option_name) || option_name != "debug_on_start" ||
+ !args->GetBoolean(1, &option_boolean)) {
+ return;
+ }
+ EmbeddedWorkerDevToolsManager::GetInstance()
+ ->set_debug_service_worker_on_start(option_boolean);
+}
+
void ServiceWorkerInternalsUI::GetAllRegistrations(const ListValue* args) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
BrowserContext* browser_context =
web_ui()->GetWebContents()->GetBrowserContext();
-
// Safe to use base::Unretained(this) because
// ForEachStoragePartition is synchronous.
BrowserContext::StoragePartitionCallback add_context_cb =
@@ -246,12 +474,14 @@ void ServiceWorkerInternalsUI::AddContextFromStoragePartition(
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
- base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::GetRegistrationsOnIOThread,
- new OperationProxy(AsWeakPtr(), scoped_ptr<ListValue>()),
- partition_id,
- context,
- partition->GetPath()));
+ base::Bind(GetRegistrationsOnIOThread,
+ context,
+ base::Bind(OnStoredRegistrations,
+ context,
+ base::Bind(OnAllRegistrations,
+ AsWeakPtr(),
+ partition_id,
+ partition->GetPath()))));
}
void ServiceWorkerInternalsUI::RemoveObserverFromStoragePartition(
@@ -266,339 +496,128 @@ void ServiceWorkerInternalsUI::RemoveObserverFromStoragePartition(
context->RemoveObserver(observer.get());
}
-namespace {
-void FindContext(const base::FilePath& partition_path,
- StoragePartition** result_partition,
- scoped_refptr<ServiceWorkerContextWrapper>* result_context,
- StoragePartition* storage_partition) {
- if (storage_partition->GetPath() == partition_path) {
+void ServiceWorkerInternalsUI::FindContext(
+ int partition_id,
+ StoragePartition** result_partition,
+ StoragePartition* storage_partition) const {
+ PartitionObserver* observer =
+ observers_.get(reinterpret_cast<uintptr_t>(storage_partition));
+ if (observer && partition_id == observer->partition_id()) {
*result_partition = storage_partition;
- *result_context = static_cast<ServiceWorkerContextWrapper*>(
- storage_partition->GetServiceWorkerContext());
}
}
-} // namespace
-bool ServiceWorkerInternalsUI::GetRegistrationInfo(
- const ListValue* args,
- base::FilePath* partition_path,
- GURL* scope,
+bool ServiceWorkerInternalsUI::GetServiceWorkerContext(
+ int partition_id,
scoped_refptr<ServiceWorkerContextWrapper>* context) const {
- base::FilePath::StringType path_string;
- if (!args->GetString(0, &path_string))
- return false;
- *partition_path = base::FilePath(path_string);
-
- std::string scope_string;
- if (!args->GetString(1, &scope_string))
- return false;
- *scope = GURL(scope_string);
-
BrowserContext* browser_context =
web_ui()->GetWebContents()->GetBrowserContext();
-
StoragePartition* result_partition(NULL);
BrowserContext::StoragePartitionCallback find_context_cb =
- base::Bind(&FindContext, *partition_path, &result_partition, context);
+ base::Bind(&ServiceWorkerInternalsUI::FindContext,
+ base::Unretained(this),
+ partition_id,
+ &result_partition);
BrowserContext::ForEachStoragePartition(browser_context, find_context_cb);
-
- if (!result_partition || !(*context))
+ if (!result_partition)
return false;
-
+ *context = static_cast<ServiceWorkerContextWrapper*>(
+ result_partition->GetServiceWorkerContext());
return true;
}
-void ServiceWorkerInternalsUI::DispatchSyncEventToWorker(
+void ServiceWorkerInternalsUI::CallServiceWorkerVersionMethod(
+ ServiceWorkerVersionMethod method,
const ListValue* args) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::FilePath partition_path;
- GURL scope;
- scoped_refptr<ServiceWorkerContextWrapper> context;
- if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
- return;
-
- scoped_ptr<ListValue> args_copy(args->DeepCopy());
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::
- DispatchSyncEventToWorkerOnIOThread,
- new OperationProxy(AsWeakPtr(), args_copy.Pass()),
- context,
- scope));
-}
-
-void ServiceWorkerInternalsUI::Unregister(const ListValue* args) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::FilePath partition_path;
- GURL scope;
- scoped_refptr<ServiceWorkerContextWrapper> context;
- if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
- return;
-
- scoped_ptr<ListValue> args_copy(args->DeepCopy());
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::UnregisterOnIOThread,
- new OperationProxy(AsWeakPtr(), args_copy.Pass()),
- context,
- scope));
-}
-
-void ServiceWorkerInternalsUI::StartWorker(const ListValue* args) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::FilePath partition_path;
- GURL scope;
+ int callback_id;
+ int partition_id;
+ int64 version_id;
+ std::string version_id_string;
+ const DictionaryValue* cmd_args = NULL;
scoped_refptr<ServiceWorkerContextWrapper> context;
- if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
+ if (!args->GetInteger(0, &callback_id) ||
+ !args->GetDictionary(1, &cmd_args) ||
+ !cmd_args->GetInteger("partition_id", &partition_id) ||
+ !GetServiceWorkerContext(partition_id, &context) ||
+ !cmd_args->GetString("version_id", &version_id_string) ||
+ !base::StringToInt64(version_id_string, &version_id)) {
return;
+ }
- scoped_ptr<ListValue> args_copy(args->DeepCopy());
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::StartWorkerOnIOThread,
- new OperationProxy(AsWeakPtr(), args_copy.Pass()),
- context,
- scope));
+ base::Callback<void(ServiceWorkerStatusCode)> callback =
+ base::Bind(OperationCompleteCallback, AsWeakPtr(), callback_id);
+ CallServiceWorkerVersionMethodWithVersionID(
+ method, context, version_id, callback);
}
-void ServiceWorkerInternalsUI::StopWorker(const ListValue* args) {
+void ServiceWorkerInternalsUI::InspectWorker(const ListValue* args) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- base::FilePath partition_path;
- GURL scope;
+ int callback_id;
+ int process_id;
+ int devtools_agent_route_id;
+ const DictionaryValue* cmd_args = NULL;
scoped_refptr<ServiceWorkerContextWrapper> context;
- if (!GetRegistrationInfo(args, &partition_path, &scope, &context))
+ if (!args->GetInteger(0, &callback_id) ||
+ !args->GetDictionary(1, &cmd_args) ||
+ !cmd_args->GetInteger("process_id", &process_id) ||
+ !cmd_args->GetInteger("devtools_agent_route_id",
+ &devtools_agent_route_id)) {
return;
-
- scoped_ptr<ListValue> args_copy(args->DeepCopy());
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::StopWorkerOnIOThread,
- new OperationProxy(AsWeakPtr(), args_copy.Pass()),
- context,
- scope));
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::GetRegistrationsOnIOThread(
- int partition_id,
- ServiceWorkerContextWrapper* context,
- const base::FilePath& context_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- context->context()->storage()->GetAllRegistrations(
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations,
- this,
- partition_id,
- context_path));
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::UnregisterOnIOThread(
- scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- context->context()->UnregisterServiceWorker(
- scope,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::OperationComplete,
- this));
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::StartWorkerOnIOThread(
- scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- // TODO(alecflett): Add support for starting/stopping workers for
- // pending versions too.
- context->context()->storage()->FindRegistrationForPattern(
- scope,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::StartActiveWorker,
- this));
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::StopWorkerOnIOThread(
- scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- // TODO(alecflett): Add support for starting/stopping workers for
- // pending versions too.
- context->context()->storage()->FindRegistrationForPattern(
- scope,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::StopActiveWorker,
- this));
-}
-
-void
-ServiceWorkerInternalsUI::OperationProxy::DispatchSyncEventToWorkerOnIOThread(
- scoped_refptr<ServiceWorkerContextWrapper> context,
- const GURL& scope) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- context->context()->storage()->FindRegistrationForPattern(
- scope,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::
- DispatchSyncEventToActiveWorker,
- this));
-}
-
-namespace {
-void UpdateVersionInfo(const ServiceWorkerVersionInfo& version,
- DictionaryValue* info) {
- switch (version.running_status) {
- case ServiceWorkerVersion::STOPPED:
- info->SetString("running_status", "STOPPED");
- break;
- case ServiceWorkerVersion::STARTING:
- info->SetString("running_status", "STARTING");
- break;
- case ServiceWorkerVersion::RUNNING:
- info->SetString("running_status", "RUNNING");
- break;
- case ServiceWorkerVersion::STOPPING:
- info->SetString("running_status", "STOPPING");
- break;
}
-
- switch (version.status) {
- case ServiceWorkerVersion::NEW:
- info->SetString("status", "NEW");
- break;
- case ServiceWorkerVersion::INSTALLING:
- info->SetString("status", "INSTALLING");
- break;
- case ServiceWorkerVersion::INSTALLED:
- info->SetString("status", "INSTALLED");
- break;
- case ServiceWorkerVersion::ACTIVATING:
- info->SetString("status", "ACTIVATING");
- break;
- case ServiceWorkerVersion::ACTIVE:
- info->SetString("status", "ACTIVE");
- break;
- case ServiceWorkerVersion::DEACTIVATED:
- info->SetString("status", "DEACTIVATED");
- break;
- }
- info->SetString("version_id", base::Int64ToString(version.version_id));
- info->SetInteger("process_id", version.process_id);
- info->SetInteger("thread_id", version.thread_id);
-}
-} // namespace
-
-void ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations(
- int partition_id,
- const base::FilePath& context_path,
- const std::vector<ServiceWorkerRegistrationInfo>& registrations) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations,
- this,
- partition_id,
- context_path,
- registrations));
+ base::Callback<void(ServiceWorkerStatusCode)> callback =
+ base::Bind(OperationCompleteCallback, AsWeakPtr(), callback_id);
+ scoped_refptr<DevToolsAgentHost> agent_host(
+ EmbeddedWorkerDevToolsManager::GetInstance()
+ ->GetDevToolsAgentHostForWorker(process_id, devtools_agent_route_id));
+ if (!agent_host) {
+ callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND);
return;
}
-
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- ListValue result;
- for (std::vector<ServiceWorkerRegistrationInfo>::const_iterator it =
- registrations.begin();
- it != registrations.end();
- ++it) {
- const ServiceWorkerRegistrationInfo& registration = *it;
- DictionaryValue* registration_info = new DictionaryValue();
- registration_info->SetString("scope", registration.pattern.spec());
- registration_info->SetString("script_url", registration.script_url.spec());
-
- if (!registration.active_version.is_null) {
- DictionaryValue* active_info = new DictionaryValue();
- UpdateVersionInfo(registration.active_version, active_info);
- registration_info->Set("active", active_info);
- }
-
- if (!registration.pending_version.is_null) {
- DictionaryValue* pending_info = new DictionaryValue();
- UpdateVersionInfo(registration.pending_version, pending_info);
- registration_info->Set("pending", pending_info);
- }
-
- result.Append(registration_info);
- }
-
- if (internals_ && !result.empty())
- internals_->web_ui()->CallJavascriptFunction(
- "serviceworker.onPartitionData",
- result,
- FundamentalValue(partition_id),
- StringValue(context_path.value()));
+ DevToolsManagerImpl::GetInstance()->Inspect(
+ web_ui()->GetWebContents()->GetBrowserContext(), agent_host.get());
+ callback.Run(SERVICE_WORKER_OK);
}
-void ServiceWorkerInternalsUI::OperationProxy::OperationComplete(
- ServiceWorkerStatusCode status) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ServiceWorkerInternalsUI::OperationProxy::OperationComplete,
- this,
- status));
- return;
- }
-
+void ServiceWorkerInternalsUI::Unregister(const ListValue* args) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- original_args_->Insert(0, new FundamentalValue(static_cast<int>(status)));
- if (internals_)
- internals_->web_ui()->CallJavascriptFunction(
- "serviceworker.onOperationComplete",
- std::vector<const Value*>(original_args_->begin(),
- original_args_->end()));
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::StartActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (status == SERVICE_WORKER_OK) {
- registration->active_version()->StartWorker(base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this));
- return;
- }
-
- OperationComplete(status);
-}
-
-void ServiceWorkerInternalsUI::OperationProxy::StopActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (status == SERVICE_WORKER_OK) {
- registration->active_version()->StopWorker(base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this));
+ int callback_id;
+ int partition_id;
+ std::string scope_string;
+ const DictionaryValue* cmd_args = NULL;
+ scoped_refptr<ServiceWorkerContextWrapper> context;
+ if (!args->GetInteger(0, &callback_id) ||
+ !args->GetDictionary(1, &cmd_args) ||
+ !cmd_args->GetInteger("partition_id", &partition_id) ||
+ !GetServiceWorkerContext(partition_id, &context) ||
+ !cmd_args->GetString("scope", &scope_string)) {
return;
}
- OperationComplete(status);
+ base::Callback<void(ServiceWorkerStatusCode)> callback =
+ base::Bind(OperationCompleteCallback, AsWeakPtr(), callback_id);
+ UnregisterWithScope(context, GURL(scope_string), callback);
}
-void ServiceWorkerInternalsUI::OperationProxy::DispatchSyncEventToActiveWorker(
- ServiceWorkerStatusCode status,
- const scoped_refptr<ServiceWorkerRegistration>& registration) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (status == SERVICE_WORKER_OK && registration->active_version() &&
- registration->active_version()->status() ==
- ServiceWorkerVersion::ACTIVE) {
- registration->active_version()->DispatchSyncEvent(base::Bind(
- &ServiceWorkerInternalsUI::OperationProxy::OperationComplete, this));
+void ServiceWorkerInternalsUI::StartWorker(const ListValue* args) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ int callback_id;
+ int partition_id;
+ std::string scope_string;
+ const DictionaryValue* cmd_args = NULL;
+ scoped_refptr<ServiceWorkerContextWrapper> context;
+ if (!args->GetInteger(0, &callback_id) ||
+ !args->GetDictionary(1, &cmd_args) ||
+ !cmd_args->GetInteger("partition_id", &partition_id) ||
+ !GetServiceWorkerContext(partition_id, &context) ||
+ !cmd_args->GetString("scope", &scope_string)) {
return;
}
- OperationComplete(SERVICE_WORKER_ERROR_FAILED);
+ base::Callback<void(ServiceWorkerStatusCode)> callback =
+ base::Bind(OperationCompleteCallback, AsWeakPtr(), callback_id);
+ FindRegistrationForPattern(
+ context, GURL(scope_string), base::Bind(StartActiveWorker, callback));
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_internals_ui.h b/content/browser/service_worker/service_worker_internals_ui.h
index 715fe70bd0..3e239e2ecb 100644
--- a/content/browser/service_worker/service_worker_internals_ui.h
+++ b/content/browser/service_worker/service_worker_internals_ui.h
@@ -32,6 +32,10 @@ class ServiceWorkerInternalsUI
: public WebUIController,
public base::SupportsWeakPtr<ServiceWorkerInternalsUI> {
public:
+ typedef base::Callback<void(ServiceWorkerStatusCode)> StatusCallback;
+ typedef void (ServiceWorkerVersion::*ServiceWorkerVersionMethod)(
+ const StatusCallback& callback);
+
explicit ServiceWorkerInternalsUI(WebUI* web_ui);
private:
@@ -44,17 +48,21 @@ class ServiceWorkerInternalsUI
void RemoveObserverFromStoragePartition(StoragePartition* partition);
// Called from Javascript.
+ void GetOptions(const base::ListValue* args);
+ void SetOption(const base::ListValue* args);
void GetAllRegistrations(const base::ListValue* args);
- void StartWorker(const base::ListValue* args);
- void StopWorker(const base::ListValue* args);
- void DispatchSyncEventToWorker(const base::ListValue* args);
+ void CallServiceWorkerVersionMethod(ServiceWorkerVersionMethod method,
+ const base::ListValue* args);
+ void InspectWorker(const base::ListValue* args);
void Unregister(const base::ListValue* args);
+ void StartWorker(const base::ListValue* args);
- bool GetRegistrationInfo(
- const base::ListValue* args,
- base::FilePath* partition_path,
- GURL* scope,
+ bool GetServiceWorkerContext(
+ int partition_id,
scoped_refptr<ServiceWorkerContextWrapper>* context) const;
+ void FindContext(int partition_id,
+ StoragePartition** result_partition,
+ StoragePartition* storage_partition) const;
base::ScopedPtrHashMap<uintptr_t, PartitionObserver> observers_;
int next_partition_id_;
diff --git a/content/browser/service_worker/service_worker_job_coordinator.cc b/content/browser/service_worker/service_worker_job_coordinator.cc
index ccf42b062c..f2b54389d1 100644
--- a/content/browser/service_worker/service_worker_job_coordinator.cc
+++ b/content/browser/service_worker/service_worker_job_coordinator.cc
@@ -41,12 +41,23 @@ void ServiceWorkerJobCoordinator::JobQueue::Pop(
jobs_.front()->Start();
}
+void ServiceWorkerJobCoordinator::JobQueue::ClearForShutdown() {
+ STLDeleteElements(&jobs_);
+}
+
ServiceWorkerJobCoordinator::ServiceWorkerJobCoordinator(
base::WeakPtr<ServiceWorkerContextCore> context)
: context_(context) {
}
ServiceWorkerJobCoordinator::~ServiceWorkerJobCoordinator() {
+ if (!context_) {
+ for (RegistrationJobMap::iterator it = jobs_.begin(); it != jobs_.end();
+ ++it) {
+ it->second.ClearForShutdown();
+ }
+ jobs_.clear();
+ }
DCHECK(jobs_.empty()) << "Destroying ServiceWorkerJobCoordinator with "
<< jobs_.size() << " job queues";
}
diff --git a/content/browser/service_worker/service_worker_job_coordinator.h b/content/browser/service_worker/service_worker_job_coordinator.h
index 02ab6e3823..4817a52fcb 100644
--- a/content/browser/service_worker/service_worker_job_coordinator.h
+++ b/content/browser/service_worker/service_worker_job_coordinator.h
@@ -55,6 +55,10 @@ class CONTENT_EXPORT ServiceWorkerJobCoordinator {
bool empty() { return jobs_.empty(); }
+ // Marks that the browser is shutting down, so jobs may be destroyed before
+ // finishing.
+ void ClearForShutdown();
+
private:
std::deque<ServiceWorkerRegisterJobBase*> jobs_;
};
diff --git a/content/browser/service_worker/service_worker_process_manager.cc b/content/browser/service_worker/service_worker_process_manager.cc
index b6a2891e2d..7395e7b7b7 100644
--- a/content/browser/service_worker/service_worker_process_manager.cc
+++ b/content/browser/service_worker/service_worker_process_manager.cc
@@ -12,38 +12,93 @@
namespace content {
+static bool IncrementWorkerRefCountByPid(int process_id) {
+ RenderProcessHost* rph = RenderProcessHost::FromID(process_id);
+ if (!rph || rph->FastShutdownStarted())
+ return false;
+
+ static_cast<RenderProcessHostImpl*>(rph)->IncrementWorkerRefCount();
+ return true;
+}
+
+ServiceWorkerProcessManager::ProcessInfo::ProcessInfo(
+ const scoped_refptr<SiteInstance>& site_instance)
+ : site_instance(site_instance),
+ process_id(site_instance->GetProcess()->GetID()) {
+}
+
+ServiceWorkerProcessManager::ProcessInfo::ProcessInfo(int process_id)
+ : process_id(process_id) {
+}
+
+ServiceWorkerProcessManager::ProcessInfo::~ProcessInfo() {
+}
+
ServiceWorkerProcessManager::ServiceWorkerProcessManager(
- ServiceWorkerContextWrapper* context_wrapper)
- : context_wrapper_(context_wrapper),
+ BrowserContext* browser_context)
+ : browser_context_(browser_context),
+ process_id_for_test_(-1),
weak_this_factory_(this),
weak_this_(weak_this_factory_.GetWeakPtr()) {
}
ServiceWorkerProcessManager::~ServiceWorkerProcessManager() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ DCHECK(browser_context_ == NULL)
+ << "Call Shutdown() before destroying |this|, so that racing method "
+ << "invocations don't use a destroyed BrowserContext.";
+}
+
+void ServiceWorkerProcessManager::Shutdown() {
+ browser_context_ = NULL;
+ for (std::map<int, ProcessInfo>::const_iterator it = instance_info_.begin();
+ it != instance_info_.end();
+ ++it) {
+ RenderProcessHost* rph = RenderProcessHost::FromID(it->second.process_id);
+ DCHECK(rph);
+ static_cast<RenderProcessHostImpl*>(rph)->DecrementWorkerRefCount();
+ }
+ instance_info_.clear();
}
void ServiceWorkerProcessManager::AllocateWorkerProcess(
+ int embedded_worker_id,
const std::vector<int>& process_ids,
const GURL& script_url,
const base::Callback<void(ServiceWorkerStatusCode, int process_id)>&
- callback) const {
+ callback) {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(&ServiceWorkerProcessManager::AllocateWorkerProcess,
weak_this_,
+ embedded_worker_id,
process_ids,
script_url,
callback));
return;
}
+ if (process_id_for_test_ != -1) {
+ // Let tests specify the returned process ID. Note: We may need to be able
+ // to specify the error code too.
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(callback, SERVICE_WORKER_OK, process_id_for_test_));
+ return;
+ }
+
+ DCHECK(!ContainsKey(instance_info_, embedded_worker_id))
+ << embedded_worker_id << " already has a process allocated";
+
for (std::vector<int>::const_iterator it = process_ids.begin();
it != process_ids.end();
++it) {
- if (IncrementWorkerRefcountByPid(*it)) {
+ if (IncrementWorkerRefCountByPid(*it)) {
+ instance_info_.insert(
+ std::make_pair(embedded_worker_id, ProcessInfo(*it)));
BrowserThread::PostTask(BrowserThread::IO,
FROM_HERE,
base::Bind(callback, SERVICE_WORKER_OK, *it));
@@ -51,7 +106,7 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess(
}
}
- if (!context_wrapper_->browser_context_) {
+ if (!browser_context_) {
// Shutdown has started.
BrowserThread::PostTask(
BrowserThread::IO,
@@ -60,8 +115,8 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess(
return;
}
// No existing processes available; start a new one.
- scoped_refptr<SiteInstance> site_instance = SiteInstance::CreateForURL(
- context_wrapper_->browser_context_, script_url);
+ scoped_refptr<SiteInstance> site_instance =
+ SiteInstance::CreateForURL(browser_context_, script_url);
RenderProcessHost* rph = site_instance->GetProcess();
// This Init() call posts a task to the IO thread that adds the RPH's
// ServiceWorkerDispatcherHost to the
@@ -75,6 +130,9 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess(
return;
}
+ instance_info_.insert(
+ std::make_pair(embedded_worker_id, ProcessInfo(site_instance)));
+
static_cast<RenderProcessHostImpl*>(rph)->IncrementWorkerRefCount();
BrowserThread::PostTask(
BrowserThread::IO,
@@ -82,53 +140,43 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess(
base::Bind(callback, SERVICE_WORKER_OK, rph->GetID()));
}
-void ServiceWorkerProcessManager::ReleaseWorkerProcess(int process_id) {
+void ServiceWorkerProcessManager::ReleaseWorkerProcess(int embedded_worker_id) {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(&ServiceWorkerProcessManager::ReleaseWorkerProcess,
weak_this_,
- process_id));
+ embedded_worker_id));
return;
}
- if (!DecrementWorkerRefcountByPid(process_id)) {
- DCHECK(false) << "DecrementWorkerRef(" << process_id
- << ") doesn't match a previous IncrementWorkerRef";
+ if (process_id_for_test_ != -1) {
+ // Unittests don't increment or decrement the worker refcount of a
+ // RenderProcessHost.
+ return;
}
-}
-
-void ServiceWorkerProcessManager::SetProcessRefcountOpsForTest(
- const base::Callback<bool(int)>& increment_for_test,
- const base::Callback<bool(int)>& decrement_for_test) {
- increment_for_test_ = increment_for_test;
- decrement_for_test_ = decrement_for_test;
-}
-
-bool ServiceWorkerProcessManager::IncrementWorkerRefcountByPid(
- int process_id) const {
- if (!increment_for_test_.is_null())
- return increment_for_test_.Run(process_id);
-
- RenderProcessHost* rph = RenderProcessHost::FromID(process_id);
- if (rph && !rph->FastShutdownStarted()) {
- static_cast<RenderProcessHostImpl*>(rph)->IncrementWorkerRefCount();
- return true;
+ if (browser_context_ == NULL) {
+ // Shutdown already released all instances.
+ DCHECK(instance_info_.empty());
+ return;
}
-
- return false;
-}
-
-bool ServiceWorkerProcessManager::DecrementWorkerRefcountByPid(
- int process_id) const {
- if (!decrement_for_test_.is_null())
- return decrement_for_test_.Run(process_id);
-
- RenderProcessHost* rph = RenderProcessHost::FromID(process_id);
- if (rph)
- static_cast<RenderProcessHostImpl*>(rph)->DecrementWorkerRefCount();
-
- return rph != NULL;
+ std::map<int, ProcessInfo>::iterator info =
+ instance_info_.find(embedded_worker_id);
+ DCHECK(info != instance_info_.end());
+ RenderProcessHost* rph = NULL;
+ if (info->second.site_instance) {
+ rph = info->second.site_instance->GetProcess();
+ DCHECK_EQ(info->second.process_id, rph->GetID())
+ << "A SiteInstance's process shouldn't get destroyed while we're "
+ "holding a reference to it. Was the reference actually held?";
+ } else {
+ rph = RenderProcessHost::FromID(info->second.process_id);
+ DCHECK(rph)
+ << "Process " << info->second.process_id
+ << " was destroyed unexpectedly. Did we actually hold a reference?";
+ }
+ static_cast<RenderProcessHostImpl*>(rph)->DecrementWorkerRefCount();
+ instance_info_.erase(info);
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_process_manager.h b/content/browser/service_worker/service_worker_process_manager.h
index 51d8eefcd8..85fbcc1c05 100644
--- a/content/browser/service_worker/service_worker_process_manager.h
+++ b/content/browser/service_worker/service_worker_process_manager.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROCESS_MANAGER_H_
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_PROCESS_MANAGER_H_
+#include <map>
#include <vector>
#include "base/callback.h"
@@ -17,20 +18,25 @@ class GURL;
namespace content {
class BrowserContext;
-class ServiceWorkerContextWrapper;
+class SiteInstance;
// Interacts with the UI thread to keep RenderProcessHosts alive while the
-// ServiceWorker system is using them. Each instance of
+// ServiceWorker system is using them. Each instance of
// ServiceWorkerProcessManager is destroyed on the UI thread shortly after its
-// ServiceWorkerContextCore is destroyed on the IO thread.
+// ServiceWorkerContextWrapper is destroyed.
class CONTENT_EXPORT ServiceWorkerProcessManager {
public:
- // |*this| must be owned by |context_wrapper|->context().
- explicit ServiceWorkerProcessManager(
- ServiceWorkerContextWrapper* context_wrapper);
+ // |*this| must be owned by a ServiceWorkerContextWrapper in a
+ // StoragePartition within |browser_context|.
+ explicit ServiceWorkerProcessManager(BrowserContext* browser_context);
+ // Shutdown must be called before the ProcessManager is destroyed.
~ServiceWorkerProcessManager();
+ // Synchronously prevents new processes from being allocated.
+ // TODO(jyasskin): Drop references to RenderProcessHosts too.
+ void Shutdown();
+
// Returns a reference to a running process suitable for starting the Service
// Worker at |script_url|. Processes in |process_ids| will be checked in order
// for existence, and if none exist, then a new process will be created. Posts
@@ -40,37 +46,63 @@ class CONTENT_EXPORT ServiceWorkerProcessManager {
// Allocation can fail with SERVICE_WORKER_ERROR_START_WORKER_FAILED if
// RenderProcessHost::Init fails.
void AllocateWorkerProcess(
+ int embedded_worker_id,
const std::vector<int>& process_ids,
const GURL& script_url,
const base::Callback<void(ServiceWorkerStatusCode, int process_id)>&
- callback) const;
+ callback);
- // Drops a reference to a process that was running a Service Worker. This
- // must match a call to AllocateWorkerProcess.
- void ReleaseWorkerProcess(int process_id);
+ // Drops a reference to a process that was running a Service Worker, and its
+ // SiteInstance. This must match a call to AllocateWorkerProcess.
+ void ReleaseWorkerProcess(int embedded_worker_id);
- // |increment_for_test| and |decrement_for_test| define how to look up a
- // process by ID and increment or decrement its worker reference count. This
- // must be called before any reference to this object escapes to another
- // thread, and is considered part of construction.
- void SetProcessRefcountOpsForTest(
- const base::Callback<bool(int)>& increment_for_test,
- const base::Callback<bool(int)>& decrement_for_test);
+ // Sets a single process ID that will be used for all embedded workers. This
+ // bypasses the work of creating a process and managing its worker refcount so
+ // that unittests can run without a BrowserContext. The test is in charge of
+ // making sure this is only called on the same thread as runs the UI message
+ // loop.
+ void SetProcessIdForTest(int process_id) {
+ process_id_for_test_ = process_id;
+ }
private:
- bool IncrementWorkerRefcountByPid(int process_id) const;
- bool DecrementWorkerRefcountByPid(int process_id) const;
-
- // These fields are only accessed on the UI thread after construction.
- // The reference cycle through context_wrapper_ is broken in
- // ServiceWorkerContextWrapper::Shutdown().
- scoped_refptr<ServiceWorkerContextWrapper> context_wrapper_;
- base::Callback<bool(int)> increment_for_test_;
- base::Callback<bool(int)> decrement_for_test_;
+ // Information about the process for an EmbeddedWorkerInstance.
+ struct ProcessInfo {
+ explicit ProcessInfo(const scoped_refptr<SiteInstance>& site_instance);
+ explicit ProcessInfo(int process_id);
+ ~ProcessInfo();
+
+ // Stores the SiteInstance the Worker lives inside. This needs to outlive
+ // the instance's use of its RPH to uphold assumptions in the
+ // ContentBrowserClient interface.
+ scoped_refptr<SiteInstance> site_instance;
+
+ // In case the process was allocated without using a SiteInstance, we need
+ // to store a process ID to decrement a worker reference on shutdown.
+ // TODO(jyasskin): Implement http://crbug.com/372045 or thread a frame_id in
+ // so all processes can be allocated with a SiteInstance.
+ int process_id;
+ };
+
+ // These fields are only accessed on the UI thread.
+ BrowserContext* browser_context_;
+
+ // Maps the ID of a running EmbeddedWorkerInstance to information about the
+ // process it's running inside. Since the Instances themselves live on the IO
+ // thread, this can be slightly out of date:
+ // * instance_info_ is populated while an Instance is STARTING and before
+ // it's RUNNING.
+ // * instance_info_ is depopulated in a message sent as the Instance becomes
+ // STOPPED.
+ std::map<int, ProcessInfo> instance_info_;
+
+ // In unit tests, this will be returned as the process for all
+ // EmbeddedWorkerInstances.
+ int process_id_for_test_;
// Used to double-check that we don't access *this after it's destroyed.
base::WeakPtrFactory<ServiceWorkerProcessManager> weak_this_factory_;
- base::WeakPtr<ServiceWorkerProcessManager> weak_this_;
+ const base::WeakPtr<ServiceWorkerProcessManager> weak_this_;
};
} // namespace content
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index 2da7d3e665..8113e71145 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -32,8 +32,8 @@ ServiceWorkerProviderHost::ServiceWorkerProviderHost(
ServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
if (active_version_)
active_version_->RemoveControllee(this);
- if (pending_version_)
- pending_version_->RemovePendingControllee(this);
+ if (waiting_version_)
+ waiting_version_->RemoveWaitingControllee(this);
}
void ServiceWorkerProviderHost::SetActiveVersion(
@@ -63,16 +63,16 @@ void ServiceWorkerProviderHost::SetActiveVersion(
kDocumentMainThreadId, provider_id(), info));
}
-void ServiceWorkerProviderHost::SetPendingVersion(
+void ServiceWorkerProviderHost::SetWaitingVersion(
ServiceWorkerVersion* version) {
- if (version == pending_version_)
+ if (version == waiting_version_)
return;
- scoped_refptr<ServiceWorkerVersion> previous_version = pending_version_;
- pending_version_ = version;
+ scoped_refptr<ServiceWorkerVersion> previous_version = waiting_version_;
+ waiting_version_ = version;
if (version)
- version->AddPendingControllee(this);
+ version->AddWaitingControllee(this);
if (previous_version)
- previous_version->RemovePendingControllee(this);
+ previous_version->RemoveWaitingControllee(this);
if (!dispatcher_host_)
return; // Could be NULL in some tests.
@@ -104,17 +104,18 @@ bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {
scoped_ptr<ServiceWorkerRequestHandler>
ServiceWorkerProviderHost::CreateRequestHandler(
- ResourceType::Type resource_type) {
+ ResourceType::Type resource_type,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context) {
if (IsHostToRunningServiceWorker()) {
return scoped_ptr<ServiceWorkerRequestHandler>(
new ServiceWorkerContextRequestHandler(
- context_, AsWeakPtr(), resource_type));
+ context_, AsWeakPtr(), blob_storage_context, resource_type));
}
if (ServiceWorkerUtils::IsMainResourceType(resource_type) ||
active_version()) {
return scoped_ptr<ServiceWorkerRequestHandler>(
new ServiceWorkerControlleeRequestHandler(
- context_, AsWeakPtr(), resource_type));
+ context_, AsWeakPtr(), blob_storage_context, resource_type));
}
return scoped_ptr<ServiceWorkerRequestHandler>();
}
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h
index 5aceebf47d..18f5cef24c 100644
--- a/content/browser/service_worker/service_worker_provider_host.h
+++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -17,6 +17,10 @@ namespace IPC {
class Sender;
}
+namespace webkit_blob {
+class BlobStorageContext;
+}
+
namespace content {
class ServiceWorkerContextCore;
@@ -55,9 +59,9 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
}
// The service worker version that corresponds with
- // navigate.serviceWorker.pending for our document.
- ServiceWorkerVersion* pending_version() const {
- return pending_version_.get();
+ // navigate.serviceWorker.waiting for our document.
+ ServiceWorkerVersion* waiting_version() const {
+ return waiting_version_.get();
}
// The running version, if any, that this provider is providing resource
@@ -69,11 +73,11 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
void set_document_url(const GURL& url) { document_url_ = url; }
const GURL& document_url() const { return document_url_; }
- // Associate |version| to this provider as its '.active' or '.pending'
+ // Associate |version| to this provider as its '.active' or '.waiting'
// version.
// Giving NULL to this method will unset the corresponding field.
void SetActiveVersion(ServiceWorkerVersion* version);
- void SetPendingVersion(ServiceWorkerVersion* version);
+ void SetWaitingVersion(ServiceWorkerVersion* version);
// Returns false if the version is not in the expected STARTING in our
// our process state. That would be indicative of a bad IPC message.
@@ -82,7 +86,8 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
// Returns a handler for a request, the handler may return NULL if
// the request doesn't require special handling.
scoped_ptr<ServiceWorkerRequestHandler> CreateRequestHandler(
- ResourceType::Type resource_type);
+ ResourceType::Type resource_type,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context);
// Dispatches message event to the document.
void PostMessage(const base::string16& message,
@@ -93,7 +98,7 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
const int provider_id_;
GURL document_url_;
scoped_refptr<ServiceWorkerVersion> active_version_;
- scoped_refptr<ServiceWorkerVersion> pending_version_;
+ scoped_refptr<ServiceWorkerVersion> waiting_version_;
scoped_refptr<ServiceWorkerVersion> running_hosted_version_;
base::WeakPtr<ServiceWorkerContextCore> context_;
ServiceWorkerDispatcherHost* dispatcher_host_;
diff --git a/content/browser/service_worker/service_worker_provider_host_unittest.cc b/content/browser/service_worker/service_worker_provider_host_unittest.cc
index 5da54fb27d..8969f598aa 100644
--- a/content/browser/service_worker/service_worker_provider_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -23,12 +23,13 @@ class ServiceWorkerProviderHostTest : public testing::Test {
virtual ~ServiceWorkerProviderHostTest() {}
virtual void SetUp() OVERRIDE {
- context_.reset(new ServiceWorkerContextCore(
- base::FilePath(),
- base::MessageLoopProxy::current(),
- NULL,
- NULL,
- scoped_ptr<ServiceWorkerProcessManager>()));
+ context_.reset(
+ new ServiceWorkerContextCore(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL,
+ NULL,
+ NULL));
scope_ = GURL("http://www.example.com/*");
script_url_ = GURL("http://www.example.com/service_worker.js");
@@ -113,81 +114,144 @@ TEST_F(ServiceWorkerProviderHostTest,
ASSERT_FALSE(version_->HasProcessToRun());
}
-TEST_F(ServiceWorkerProviderHostTest, SetPendingVersion_ProcessStatus) {
+TEST_F(ServiceWorkerProviderHostTest, SetWaitingVersion_ProcessStatus) {
ASSERT_FALSE(version_->HasProcessToRun());
- // Associating version_ to a provider_host's pending version will internally
+ // Associating version_ to a provider_host's waiting version will internally
// add the provider_host's process ref to the version.
- provider_host1_->SetPendingVersion(version_);
+ provider_host1_->SetWaitingVersion(version_);
ASSERT_TRUE(version_->HasProcessToRun());
// Re-associating the same version and provider_host should just work too.
- provider_host1_->SetPendingVersion(version_);
+ provider_host1_->SetWaitingVersion(version_);
ASSERT_TRUE(version_->HasProcessToRun());
- // Resetting the provider_host's pending version should remove process refs
+ // Resetting the provider_host's waiting version should remove process refs
// from the version.
- provider_host1_->SetPendingVersion(NULL);
+ provider_host1_->SetWaitingVersion(NULL);
ASSERT_FALSE(version_->HasProcessToRun());
}
TEST_F(ServiceWorkerProviderHostTest,
- SetPendingVersion_MultipleHostsForSameProcess) {
+ SetWaitingVersion_MultipleHostsForSameProcess) {
ASSERT_FALSE(version_->HasProcessToRun());
// Associating version_ to two providers as active version.
- provider_host1_->SetPendingVersion(version_);
- provider_host2_->SetPendingVersion(version_);
+ provider_host1_->SetWaitingVersion(version_);
+ provider_host2_->SetWaitingVersion(version_);
ASSERT_TRUE(version_->HasProcessToRun());
// Disassociating one provider_host shouldn't remove all process refs
// from the version yet.
- provider_host1_->SetPendingVersion(NULL);
+ provider_host1_->SetWaitingVersion(NULL);
ASSERT_TRUE(version_->HasProcessToRun());
// Disassociating the other provider_host will remove all process refs.
- provider_host2_->SetPendingVersion(NULL);
+ provider_host2_->SetWaitingVersion(NULL);
ASSERT_FALSE(version_->HasProcessToRun());
}
-class ServiceWorkerRegisterJobAndProviderHostTest
- : public ServiceWorkerProviderHostTest {
+class ServiceWorkerProviderHostWaitingVersionTest : public testing::Test {
protected:
- ServiceWorkerRegisterJobAndProviderHostTest() {}
- virtual ~ServiceWorkerRegisterJobAndProviderHostTest() {}
+ ServiceWorkerProviderHostWaitingVersionTest()
+ : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
+ next_provider_id_(1L) {}
+ virtual ~ServiceWorkerProviderHostWaitingVersionTest() {}
virtual void SetUp() OVERRIDE {
- ServiceWorkerProviderHostTest::SetUp();
- register_job_.reset(new ServiceWorkerRegisterJob(
- context_->AsWeakPtr(), scope_, script_url_));
- provider_host1_->set_document_url(GURL("http://www.example.com/foo"));
- provider_host2_->set_document_url(GURL("http://www.example.com/bar"));
- provider_host3_->set_document_url(GURL("http://www.example.ca/foo"));
+ context_.reset(
+ new ServiceWorkerContextCore(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL,
+ NULL,
+ NULL));
+
+ // Prepare provider hosts (for the same process).
+ provider_host1_ = CreateProviderHost(GURL("http://www.example.com/foo"));
+ provider_host2_ = CreateProviderHost(GURL("http://www.example.com/bar"));
+ provider_host3_ = CreateProviderHost(GURL("http://www.example.ca/foo"));
+ }
+
+ base::WeakPtr<ServiceWorkerProviderHost> CreateProviderHost(
+ const GURL& document_url) {
+ scoped_ptr<ServiceWorkerProviderHost> host(new ServiceWorkerProviderHost(
+ kRenderProcessId, next_provider_id_++, context_->AsWeakPtr(), NULL));
+ host->set_document_url(document_url);
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host = host->AsWeakPtr();
+ context_->AddProviderHost(host.Pass());
+ return provider_host;
}
virtual void TearDown() OVERRIDE {
- ServiceWorkerProviderHostTest::TearDown();
- register_job_.reset();
+ context_.reset();
}
- scoped_ptr<ServiceWorkerRegisterJob> register_job_;
+ content::TestBrowserThreadBundle thread_bundle_;
+ scoped_ptr<ServiceWorkerContextCore> context_;
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host1_;
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host2_;
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host3_;
private:
- DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegisterJobAndProviderHostTest);
+ int64 next_provider_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostWaitingVersionTest);
};
-// Test for ServiceWorkerRegisterJob::AssociatePendingVersionToDocuments.
-TEST_F(ServiceWorkerRegisterJobAndProviderHostTest,
- AssociatePendingVersionToDocuments) {
- register_job_->AssociatePendingVersionToDocuments(version_.get());
- EXPECT_EQ(version_.get(), provider_host1_->pending_version());
- EXPECT_EQ(version_.get(), provider_host2_->pending_version());
- EXPECT_EQ(NULL, provider_host3_->pending_version());
-
- register_job_->AssociatePendingVersionToDocuments(NULL);
- EXPECT_EQ(NULL, provider_host1_->pending_version());
- EXPECT_EQ(NULL, provider_host2_->pending_version());
- EXPECT_EQ(NULL, provider_host3_->pending_version());
+TEST_F(ServiceWorkerProviderHostWaitingVersionTest,
+ AssociateWaitingVersionToDocuments) {
+ const GURL scope("http://www.example.com/*");
+ const GURL script_url("http://www.example.com/service_worker.js");
+
+ scoped_refptr<ServiceWorkerRegistration> registration(
+ new ServiceWorkerRegistration(
+ scope, script_url, 1L, context_->AsWeakPtr()));
+ scoped_refptr<ServiceWorkerVersion> version(
+ new ServiceWorkerVersion(registration, 1L, context_->AsWeakPtr()));
+
+ ServiceWorkerRegisterJob::AssociateWaitingVersionToDocuments(
+ context_->AsWeakPtr(), version.get());
+ EXPECT_EQ(version.get(), provider_host1_->waiting_version());
+ EXPECT_EQ(version.get(), provider_host2_->waiting_version());
+ EXPECT_EQ(NULL, provider_host3_->waiting_version());
+}
+
+TEST_F(ServiceWorkerProviderHostWaitingVersionTest,
+ DisassociateWaitingVersionFromDocuments) {
+ const GURL scope1("http://www.example.com/*");
+ const GURL script_url1("http://www.example.com/service_worker.js");
+ scoped_refptr<ServiceWorkerRegistration> registration1(
+ new ServiceWorkerRegistration(
+ scope1, script_url1, 1L, context_->AsWeakPtr()));
+ scoped_refptr<ServiceWorkerVersion> version1(
+ new ServiceWorkerVersion(registration1, 1L, context_->AsWeakPtr()));
+
+ const GURL scope2("http://www.example.ca/*");
+ const GURL script_url2("http://www.example.ca/service_worker.js");
+ scoped_refptr<ServiceWorkerRegistration> registration2(
+ new ServiceWorkerRegistration(
+ scope2, script_url2, 2L, context_->AsWeakPtr()));
+ scoped_refptr<ServiceWorkerVersion> version2(
+ new ServiceWorkerVersion(registration2, 2L, context_->AsWeakPtr()));
+
+ ServiceWorkerRegisterJob::AssociateWaitingVersionToDocuments(
+ context_->AsWeakPtr(), version1.get());
+ ServiceWorkerRegisterJob::AssociateWaitingVersionToDocuments(
+ context_->AsWeakPtr(), version2.get());
+
+ // Host1 and host2 are associated with version1 as a waiting version, whereas
+ // host3 is associated with version2.
+ EXPECT_EQ(version1.get(), provider_host1_->waiting_version());
+ EXPECT_EQ(version1.get(), provider_host2_->waiting_version());
+ EXPECT_EQ(version2.get(), provider_host3_->waiting_version());
+
+ // Disassociate version1 from host1 and host2.
+ ServiceWorkerRegisterJob::DisassociateWaitingVersionFromDocuments(
+ context_->AsWeakPtr(), version1->version_id());
+ EXPECT_EQ(NULL, provider_host1_->waiting_version());
+ EXPECT_EQ(NULL, provider_host2_->waiting_version());
+ EXPECT_EQ(version2.get(), provider_host3_->waiting_version());
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_read_from_cache_job.cc b/content/browser/service_worker/service_worker_read_from_cache_job.cc
index bb2a39f597..eddbcd42f8 100644
--- a/content/browser/service_worker/service_worker_read_from_cache_job.cc
+++ b/content/browser/service_worker/service_worker_read_from_cache_job.cc
@@ -63,8 +63,9 @@ void ServiceWorkerReadFromCacheJob::Kill() {
}
net::LoadState ServiceWorkerReadFromCacheJob::GetLoadState() const {
- NOTIMPLEMENTED();
- return net::LOAD_STATE_WAITING_FOR_APPCACHE;
+ if (reader_.get() && reader_->IsReadPending())
+ return net::LOAD_STATE_READING_RESPONSE;
+ return net::LOAD_STATE_IDLE;
}
bool ServiceWorkerReadFromCacheJob::GetCharset(std::string* charset) {
diff --git a/content/browser/service_worker/service_worker_read_from_cache_job.h b/content/browser/service_worker/service_worker_read_from_cache_job.h
index 6d61c3bac7..5fb7401512 100644
--- a/content/browser/service_worker/service_worker_read_from_cache_job.h
+++ b/content/browser/service_worker/service_worker_read_from_cache_job.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_
-#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_H_
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
@@ -70,4 +70,4 @@ class CONTENT_EXPORT ServiceWorkerReadFromCacheJob
} // namespace content
-#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_
+#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_READ_FROM_CACHE_JOB_H_
diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
index 4cb4c9191a..dca493fb85 100644
--- a/content/browser/service_worker/service_worker_register_job.cc
+++ b/content/browser/service_worker/service_worker_register_job.cc
@@ -38,7 +38,8 @@ ServiceWorkerRegisterJob::ServiceWorkerRegisterJob(
weak_factory_(this) {}
ServiceWorkerRegisterJob::~ServiceWorkerRegisterJob() {
- DCHECK(phase_ == INITIAL || phase_ == COMPLETE);
+ DCHECK(!context_ || phase_ == INITIAL || phase_ == COMPLETE)
+ << "Jobs should only be interrupted during shutdown.";
}
void ServiceWorkerRegisterJob::AddCallback(const RegistrationCallback& callback,
@@ -89,14 +90,13 @@ void ServiceWorkerRegisterJob::set_registration(
ServiceWorkerRegistration* ServiceWorkerRegisterJob::registration() {
DCHECK(phase_ >= REGISTER) << phase_;
- DCHECK(internal_.registration);
return internal_.registration;
}
void ServiceWorkerRegisterJob::set_pending_version(
ServiceWorkerVersion* version) {
- DCHECK(phase_ == UPDATE || phase_ == ACTIVATE) << phase_;
- DCHECK(!internal_.pending_version || !version);
+ DCHECK(phase_ == UPDATE) << phase_;
+ DCHECK(!internal_.pending_version);
internal_.pending_version = version;
}
@@ -177,7 +177,7 @@ void ServiceWorkerRegisterJob::HandleExistingRegistrationAndContinue(
// script." We accomplish this by deleting the existing registration and
// registering a new one.
// TODO(falken): Match the spec. We now throw away the active_version_ and
- // pending_version_ of the existing registration, which isn't in the spec.
+ // waiting_version_ of the existing registration, which isn't in the spec.
// TODO(michaeln): Deactivate the live existing_registration object and
// eventually call storage->DeleteVersionResources()
// when it no longer has any controllees.
@@ -215,11 +215,12 @@ void ServiceWorkerRegisterJob::UpdateAndContinue(
return;
}
- // TODO(falken): "If serviceWorkerRegistration.pendingWorker is not null..."
- // then terminate the pending worker. It doesn't make sense to implement yet
- // since we always activate the worker if install completed, so there can be
- // no pending worker at this point.
- DCHECK(!registration()->pending_version());
+ // TODO(falken): "If serviceWorkerRegistration.installingWorker is not null.."
+ // then terminate the installing worker. It doesn't make sense to implement
+ // yet since we always activate the worker if install completed, so there can
+ // be no installing worker at this point.
+ // TODO(nhiroki): Check 'installing_version()' instead when it's supported.
+ DCHECK(!registration()->waiting_version());
// "Let serviceWorker be a newly-created ServiceWorker object..." and start
// the worker.
@@ -250,14 +251,14 @@ void ServiceWorkerRegisterJob::OnStartWorkerFinished(
// since there's nothing new.
// "Resolve promise with serviceWorker."
- // Although the spec doesn't set pendingWorker until after resolving the
+ // Although the spec doesn't set waitingWorker until after resolving the
// promise, our system's resolving works by passing ServiceWorkerRegistration
- // to the callbacks, so pendingWorker must be set first.
- DCHECK(!registration()->pending_version());
- registration()->set_pending_version(pending_version());
+ // to the callbacks, so waitingWorker must be set first.
+ DCHECK(!registration()->waiting_version());
+ registration()->set_waiting_version(pending_version());
ResolvePromise(status, registration(), pending_version());
- AssociatePendingVersionToDocuments(pending_version());
+ AssociateWaitingVersionToDocuments(context_, pending_version());
InstallAndContinue();
}
@@ -265,7 +266,7 @@ void ServiceWorkerRegisterJob::OnStartWorkerFinished(
// This function corresponds to the spec's _Install algorithm.
void ServiceWorkerRegisterJob::InstallAndContinue() {
SetPhase(INSTALL);
- // "Set serviceWorkerRegistration.pendingWorker._state to installing."
+ // "Set serviceWorkerRegistration.installingWorker._state to installing."
// "Fire install event on the associated ServiceWorkerGlobalScope object."
pending_version()->DispatchInstallEvent(
-1,
@@ -324,10 +325,11 @@ void ServiceWorkerRegisterJob::ActivateAndContinue() {
return;
}
- // "Set serviceWorkerRegistration.pendingWorker to null."
+ // "Set serviceWorkerRegistration.waitingWorker to null."
// "Set serviceWorkerRegistration.activeWorker to activatingWorker."
- registration()->set_pending_version(NULL);
- AssociatePendingVersionToDocuments(NULL);
+ DisassociateWaitingVersionFromDocuments(
+ context_, pending_version()->version_id());
+ registration()->set_waiting_version(NULL);
DCHECK(!registration()->active_version());
registration()->set_active_version(pending_version());
@@ -359,11 +361,10 @@ void ServiceWorkerRegisterJob::OnActivateFinished(
void ServiceWorkerRegisterJob::Complete(ServiceWorkerStatusCode status) {
SetPhase(COMPLETE);
if (status != SERVICE_WORKER_OK) {
- if (registration() && registration()->pending_version()) {
- AssociatePendingVersionToDocuments(NULL);
- registration()->set_pending_version(NULL);
- // TODO(michaeln): Take care of deleteting the version's
- // script resources too.
+ if (registration() && registration()->waiting_version()) {
+ DisassociateWaitingVersionFromDocuments(
+ context_, registration()->waiting_version()->version_id());
+ registration()->set_waiting_version(NULL);
}
if (registration() && !registration()->active_version()) {
context_->storage()->DeleteRegistration(
@@ -375,7 +376,10 @@ void ServiceWorkerRegisterJob::Complete(ServiceWorkerStatusCode status) {
ResolvePromise(status, NULL, NULL);
}
DCHECK(callbacks_.empty());
- context_->storage()->NotifyDoneInstallingRegistration(registration());
+ if (registration()) {
+ context_->storage()->NotifyDoneInstallingRegistration(
+ registration(), pending_version(), status);
+ }
context_->job_coordinator()->FinishJob(pattern_, this);
}
@@ -396,19 +400,42 @@ void ServiceWorkerRegisterJob::ResolvePromise(
callbacks_.clear();
}
-void ServiceWorkerRegisterJob::AssociatePendingVersionToDocuments(
+// static
+void ServiceWorkerRegisterJob::AssociateWaitingVersionToDocuments(
+ base::WeakPtr<ServiceWorkerContextCore> context,
ServiceWorkerVersion* version) {
+ DCHECK(context);
+ DCHECK(version);
+
// TODO(michaeln): This needs to respect the longest prefix wins
// when it comes to finding a registration for a document url.
- // This should should utilize storage->FindRegistrationForDocument().
+ // This should utilize storage->FindRegistrationForDocument().
for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it =
- context_->GetProviderHostIterator();
+ context->GetProviderHostIterator();
!it->IsAtEnd();
it->Advance()) {
- ServiceWorkerProviderHost* provider_host = it->GetProviderHost();
- if (ServiceWorkerUtils::ScopeMatches(pattern_,
- provider_host->document_url()))
- provider_host->SetPendingVersion(version);
+ ServiceWorkerProviderHost* host = it->GetProviderHost();
+ if (ServiceWorkerUtils::ScopeMatches(version->scope(),
+ host->document_url()))
+ host->SetWaitingVersion(version);
+ // TODO(nhiroki): Take care of 'installing' version when it's supported.
+ }
+}
+
+// static
+void ServiceWorkerRegisterJob::DisassociateWaitingVersionFromDocuments(
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ int64 version_id) {
+ DCHECK(context);
+ for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it =
+ context->GetProviderHostIterator();
+ !it->IsAtEnd();
+ it->Advance()) {
+ ServiceWorkerProviderHost* host = it->GetProviderHost();
+ if (host->waiting_version() &&
+ host->waiting_version()->version_id() == version_id) {
+ host->SetWaitingVersion(NULL);
+ }
}
}
diff --git a/content/browser/service_worker/service_worker_register_job.h b/content/browser/service_worker/service_worker_register_job.h
index 0a0c198fcb..2d668ede24 100644
--- a/content/browser/service_worker/service_worker_register_job.h
+++ b/content/browser/service_worker/service_worker_register_job.h
@@ -57,8 +57,10 @@ class ServiceWorkerRegisterJob : public ServiceWorkerRegisterJobBase {
virtual RegistrationJobType GetType() OVERRIDE;
private:
- FRIEND_TEST_ALL_PREFIXES(ServiceWorkerRegisterJobAndProviderHostTest,
- AssociatePendingVersionToDocuments);
+ FRIEND_TEST_ALL_PREFIXES(ServiceWorkerProviderHostWaitingVersionTest,
+ AssociateWaitingVersionToDocuments);
+ FRIEND_TEST_ALL_PREFIXES(ServiceWorkerProviderHostWaitingVersionTest,
+ DisassociateWaitingVersionFromDocuments);
enum Phase {
INITIAL,
@@ -77,6 +79,8 @@ class ServiceWorkerRegisterJob : public ServiceWorkerRegisterJobBase {
Internal();
~Internal();
scoped_refptr<ServiceWorkerRegistration> registration;
+
+ // Holds 'installing' or 'waiting' version depending on the phase.
scoped_refptr<ServiceWorkerVersion> pending_version;
};
@@ -104,9 +108,17 @@ class ServiceWorkerRegisterJob : public ServiceWorkerRegisterJobBase {
ServiceWorkerRegistration* registration,
ServiceWorkerVersion* version);
- CONTENT_EXPORT void AssociatePendingVersionToDocuments(
+ // Associates a waiting version to documents matched with a scope of the
+ // version.
+ CONTENT_EXPORT static void AssociateWaitingVersionToDocuments(
+ base::WeakPtr<ServiceWorkerContextCore> context,
ServiceWorkerVersion* version);
+ // Disassociates a waiting version specified by |version_id| from documents.
+ CONTENT_EXPORT static void DisassociateWaitingVersionFromDocuments(
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ int64 version_id);
+
// The ServiceWorkerContextCore object should always outlive this.
base::WeakPtr<ServiceWorkerContextCore> context_;
diff --git a/content/browser/service_worker/service_worker_registration.cc b/content/browser/service_worker/service_worker_registration.cc
index 1baeda7ca1..9e166b6f7b 100644
--- a/content/browser/service_worker/service_worker_registration.cc
+++ b/content/browser/service_worker/service_worker_registration.cc
@@ -36,23 +36,24 @@ ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() {
return ServiceWorkerRegistrationInfo(
script_url(),
pattern(),
+ registration_id_,
active_version_ ? active_version_->GetInfo() : ServiceWorkerVersionInfo(),
- pending_version_ ? pending_version_->GetInfo()
+ waiting_version_ ? waiting_version_->GetInfo()
: ServiceWorkerVersionInfo());
}
ServiceWorkerVersion* ServiceWorkerRegistration::GetNewestVersion() {
if (active_version())
return active_version();
- return pending_version();
+ return waiting_version();
}
-void ServiceWorkerRegistration::ActivatePendingVersion() {
+void ServiceWorkerRegistration::ActivateWaitingVersion() {
active_version_->SetStatus(ServiceWorkerVersion::DEACTIVATED);
- active_version_ = pending_version_;
+ active_version_ = waiting_version_;
// TODO(kinuko): This should be set to ACTIVATING until activation finishes.
active_version_->SetStatus(ServiceWorkerVersion::ACTIVE);
- pending_version_ = NULL;
+ waiting_version_ = NULL;
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_registration.h b/content/browser/service_worker/service_worker_registration.h
index 6a2b6932c5..df23dc3d61 100644
--- a/content/browser/service_worker/service_worker_registration.h
+++ b/content/browser/service_worker/service_worker_registration.h
@@ -31,7 +31,7 @@ class ServiceWorkerVersion;
//
// This class also manages the state of the upgrade process, which
// includes managing which ServiceWorkerVersion is "active" vs "in
-// waiting" (or "pending")
+// waiting".
class CONTENT_EXPORT ServiceWorkerRegistration
: NON_EXPORTED_BASE(public base::RefCounted<ServiceWorkerRegistration>) {
public:
@@ -49,9 +49,9 @@ class CONTENT_EXPORT ServiceWorkerRegistration
return active_version_.get();
}
- ServiceWorkerVersion* pending_version() const {
+ ServiceWorkerVersion* waiting_version() const {
DCHECK(!is_shutdown_);
- return pending_version_.get();
+ return waiting_version_.get();
}
void set_active_version(ServiceWorkerVersion* version) {
@@ -59,20 +59,20 @@ class CONTENT_EXPORT ServiceWorkerRegistration
active_version_ = version;
}
- void set_pending_version(ServiceWorkerVersion* version) {
+ void set_waiting_version(ServiceWorkerVersion* version) {
DCHECK(!is_shutdown_);
- pending_version_ = version;
+ waiting_version_ = version;
}
ServiceWorkerRegistrationInfo GetInfo();
// Returns the active version, if it is not null; otherwise, returns the
- // pending version.
+ // waiting version.
ServiceWorkerVersion* GetNewestVersion();
// The final synchronous switchover after all events have been
// fired, and the old "active version" is being shut down.
- void ActivatePendingVersion();
+ void ActivateWaitingVersion();
private:
~ServiceWorkerRegistration();
@@ -83,7 +83,7 @@ class CONTENT_EXPORT ServiceWorkerRegistration
const int64 registration_id_;
scoped_refptr<ServiceWorkerVersion> active_version_;
- scoped_refptr<ServiceWorkerVersion> pending_version_;
+ scoped_refptr<ServiceWorkerVersion> waiting_version_;
bool is_shutdown_;
base::WeakPtr<ServiceWorkerContextCore> context_;
diff --git a/content/browser/service_worker/service_worker_registration_status.cc b/content/browser/service_worker/service_worker_registration_status.cc
index 43f1c5dcb9..ee5ea90667 100644
--- a/content/browser/service_worker/service_worker_registration_status.cc
+++ b/content/browser/service_worker/service_worker_registration_status.cc
@@ -15,7 +15,7 @@ void GetServiceWorkerRegistrationStatusResponse(
ServiceWorkerStatusCode status,
blink::WebServiceWorkerError::ErrorType* error_type,
base::string16* message) {
- *error_type = WebServiceWorkerError::UnknownError;
+ *error_type = WebServiceWorkerError::ErrorTypeUnknown;
*message = base::ASCIIToUTF16(ServiceWorkerStatusToString(status));
switch (status) {
case SERVICE_WORKER_OK:
@@ -24,15 +24,15 @@ void GetServiceWorkerRegistrationStatusResponse(
case SERVICE_WORKER_ERROR_START_WORKER_FAILED:
case SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED:
- *error_type = WebServiceWorkerError::InstallError;
+ *error_type = WebServiceWorkerError::ErrorTypeInstall;
return;
case SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED:
- *error_type = WebServiceWorkerError::ActivateError;
+ *error_type = WebServiceWorkerError::ErrorTypeActivate;
return;
case SERVICE_WORKER_ERROR_NOT_FOUND:
- *error_type = WebServiceWorkerError::NotFoundError;
+ *error_type = WebServiceWorkerError::ErrorTypeNotFound;
return;
case SERVICE_WORKER_ERROR_ABORT:
diff --git a/content/browser/service_worker/service_worker_registration_unittest.cc b/content/browser/service_worker/service_worker_registration_unittest.cc
index 311e114e31..ccce641752 100644
--- a/content/browser/service_worker/service_worker_registration_unittest.cc
+++ b/content/browser/service_worker/service_worker_registration_unittest.cc
@@ -22,12 +22,13 @@ class ServiceWorkerRegistrationTest : public testing::Test {
: io_thread_(BrowserThread::IO, &message_loop_) {}
virtual void SetUp() OVERRIDE {
- context_.reset(new ServiceWorkerContextCore(
- base::FilePath(),
- base::MessageLoopProxy::current(),
- NULL,
- NULL,
- scoped_ptr<ServiceWorkerProcessManager>()));
+ context_.reset(
+ new ServiceWorkerContextCore(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL,
+ NULL,
+ NULL));
context_ptr_ = context_->AsWeakPtr();
}
@@ -62,9 +63,9 @@ TEST_F(ServiceWorkerRegistrationTest, ActivatePending) {
scoped_refptr<ServiceWorkerVersion> version_2 =
new ServiceWorkerVersion(registration, version_2_id, context_ptr_);
- registration->set_pending_version(version_2);
+ registration->set_waiting_version(version_2);
- registration->ActivatePendingVersion();
+ registration->ActivateWaitingVersion();
DCHECK_EQ(version_2, registration->active_version());
DCHECK(version_1->HasOneRef());
version_1 = NULL;
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc
index 4fbd76e78e..3faf502ab9 100644
--- a/content/browser/service_worker/service_worker_request_handler.cc
+++ b/content/browser/service_worker/service_worker_request_handler.cc
@@ -12,6 +12,8 @@
#include "content/browser/service_worker/service_worker_utils.h"
#include "content/common/service_worker/service_worker_types.h"
#include "net/url_request/url_request.h"
+#include "net/url_request/url_request_interceptor.h"
+#include "webkit/browser/blob/blob_storage_context.h"
namespace content {
@@ -20,11 +22,11 @@ namespace {
int kUserDataKey; // Key value is not important.
class ServiceWorkerRequestInterceptor
- : public net::URLRequestJobFactory::ProtocolHandler {
+ : public net::URLRequestInterceptor {
public:
ServiceWorkerRequestInterceptor() {}
virtual ~ServiceWorkerRequestInterceptor() {}
- virtual net::URLRequestJob* MaybeCreateJob(
+ virtual net::URLRequestJob* MaybeInterceptRequest(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const OVERRIDE {
ServiceWorkerRequestHandler* handler =
@@ -38,16 +40,28 @@ class ServiceWorkerRequestInterceptor
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRequestInterceptor);
};
+bool IsMethodSupported(const std::string& method) {
+ return (method == "GET") || (method == "HEAD");
+}
+
+bool IsSchemeAndMethodSupported(const net::URLRequest* request) {
+ return request->url().SchemeIsHTTPOrHTTPS() &&
+ IsMethodSupported(request->method());
+}
+
} // namespace
void ServiceWorkerRequestHandler::InitializeHandler(
net::URLRequest* request,
ServiceWorkerContextWrapper* context_wrapper,
+ webkit_blob::BlobStorageContext* blob_storage_context,
int process_id,
int provider_id,
ResourceType::Type resource_type) {
- if (!ServiceWorkerUtils::IsFeatureEnabled())
+ if (!ServiceWorkerUtils::IsFeatureEnabled() ||
+ !IsSchemeAndMethodSupported(request)) {
return;
+ }
if (!context_wrapper || !context_wrapper->context() ||
provider_id == kInvalidServiceWorkerProviderId) {
@@ -60,7 +74,8 @@ void ServiceWorkerRequestHandler::InitializeHandler(
return;
scoped_ptr<ServiceWorkerRequestHandler> handler(
- provider_host->CreateRequestHandler(resource_type));
+ provider_host->CreateRequestHandler(resource_type,
+ blob_storage_context->AsWeakPtr()));
if (!handler)
return;
@@ -73,9 +88,9 @@ ServiceWorkerRequestHandler* ServiceWorkerRequestHandler::GetHandler(
request->GetUserData(&kUserDataKey));
}
-scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
+scoped_ptr<net::URLRequestInterceptor>
ServiceWorkerRequestHandler::CreateInterceptor() {
- return make_scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
+ return scoped_ptr<net::URLRequestInterceptor>(
new ServiceWorkerRequestInterceptor);
}
@@ -85,9 +100,11 @@ ServiceWorkerRequestHandler::~ServiceWorkerRequestHandler() {
ServiceWorkerRequestHandler::ServiceWorkerRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type)
: context_(context),
provider_host_(provider_host),
+ blob_storage_context_(blob_storage_context),
resource_type_(resource_type) {
}
diff --git a/content/browser/service_worker/service_worker_request_handler.h b/content/browser/service_worker/service_worker_request_handler.h
index ca5ed5ed20..0c666b548d 100644
--- a/content/browser/service_worker/service_worker_request_handler.h
+++ b/content/browser/service_worker/service_worker_request_handler.h
@@ -16,6 +16,11 @@
namespace net {
class NetworkDelegate;
class URLRequest;
+class URLRequestInterceptor;
+}
+
+namespace webkit_blob {
+class BlobStorageContext;
}
namespace content {
@@ -38,6 +43,7 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
static void InitializeHandler(
net::URLRequest* request,
ServiceWorkerContextWrapper* context_wrapper,
+ webkit_blob::BlobStorageContext* blob_storage_context,
int process_id,
int provider_id,
ResourceType::Type resource_type);
@@ -48,8 +54,7 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
net::URLRequest* request);
// Creates a protocol interceptor for ServiceWorker.
- static scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
- CreateInterceptor();
+ static scoped_ptr<net::URLRequestInterceptor> CreateInterceptor();
virtual ~ServiceWorkerRequestHandler();
@@ -62,10 +67,12 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
ServiceWorkerRequestHandler(
base::WeakPtr<ServiceWorkerContextCore> context,
base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
ResourceType::Type resource_type);
base::WeakPtr<ServiceWorkerContextCore> context_;
base::WeakPtr<ServiceWorkerProviderHost> provider_host_;
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context_;
ResourceType::Type resource_type_;
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRequestHandler);
diff --git a/content/browser/service_worker/service_worker_script_cache_map.cc b/content/browser/service_worker/service_worker_script_cache_map.cc
new file mode 100644
index 0000000000..60876b8d71
--- /dev/null
+++ b/content/browser/service_worker/service_worker_script_cache_map.cc
@@ -0,0 +1,72 @@
+// 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 "content/browser/service_worker/service_worker_script_cache_map.h"
+
+#include "base/logging.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_storage.h"
+#include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/service_worker/service_worker_types.h"
+
+namespace content {
+
+ServiceWorkerScriptCacheMap::ServiceWorkerScriptCacheMap(
+ ServiceWorkerVersion* owner,
+ base::WeakPtr<ServiceWorkerContextCore> context)
+ : owner_(owner),
+ context_(context),
+ has_error_(false) {
+}
+
+ServiceWorkerScriptCacheMap::~ServiceWorkerScriptCacheMap() {
+}
+
+int64 ServiceWorkerScriptCacheMap::Lookup(const GURL& url) {
+ ResourceIDMap::const_iterator found = resource_ids_.find(url);
+ if (found == resource_ids_.end())
+ return kInvalidServiceWorkerResponseId;
+ return found->second;
+}
+
+void ServiceWorkerScriptCacheMap::NotifyStartedCaching(
+ const GURL& url, int64 resource_id) {
+ DCHECK_EQ(kInvalidServiceWorkerResponseId, Lookup(url));
+ DCHECK(owner_->status() == ServiceWorkerVersion::NEW);
+ resource_ids_[url] = resource_id;
+ context_->storage()->StoreUncommittedReponseId(resource_id);
+}
+
+void ServiceWorkerScriptCacheMap::NotifyFinishedCaching(
+ const GURL& url, bool success) {
+ DCHECK_NE(kInvalidServiceWorkerResponseId, Lookup(url));
+ DCHECK(owner_->status() == ServiceWorkerVersion::NEW);
+ if (!success) {
+ context_->storage()->DoomUncommittedResponse(Lookup(url));
+ has_error_ = true;
+ resource_ids_.erase(url);
+ }
+}
+
+void ServiceWorkerScriptCacheMap::GetResources(
+ std::vector<ServiceWorkerDatabase::ResourceRecord>* resources) {
+ DCHECK(resources->empty());
+ for (ResourceIDMap::const_iterator it = resource_ids_.begin();
+ it != resource_ids_.end(); ++it) {
+ resources->push_back(
+ ServiceWorkerDatabase::ResourceRecord(it->second, it->first));
+ }
+}
+
+void ServiceWorkerScriptCacheMap::SetResources(
+ const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources) {
+ DCHECK(resource_ids_.empty());
+ typedef std::vector<ServiceWorkerDatabase::ResourceRecord> RecordVector;
+ for (RecordVector::const_iterator it = resources.begin();
+ it != resources.end(); ++it) {
+ resource_ids_[it->url] = it->resource_id;
+ }
+}
+
+} // namespace content
diff --git a/content/browser/service_worker/service_worker_script_cache_map.h b/content/browser/service_worker/service_worker_script_cache_map.h
new file mode 100644
index 0000000000..4513f3d9ea
--- /dev/null
+++ b/content/browser/service_worker/service_worker_script_cache_map.h
@@ -0,0 +1,62 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CACHE_MAP_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CACHE_MAP_H_
+
+#include <map>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/memory/weak_ptr.h"
+#include "content/browser/service_worker/service_worker_database.h"
+
+class GURL;
+
+namespace content {
+
+class ServiceWorkerContextCore;
+class ServiceWorkerVersion;
+
+// Class that maintains the mapping between urls and a resource id
+// for a particular versions implicit script resources.
+class ServiceWorkerScriptCacheMap {
+ public:
+ int64 Lookup(const GURL& url);
+
+ // Used during the initial run of a new version to build the map
+ // of resources ids.
+ void NotifyStartedCaching(const GURL& url, int64 resource_id);
+ void NotifyFinishedCaching(const GURL& url, bool success);
+
+ // Used to retrieve the results of the initial run of a new version.
+ bool HasError() const { return has_error_; }
+ void GetResources(
+ std::vector<ServiceWorkerDatabase::ResourceRecord>* resources);
+
+ // Used when loading an existing version.
+ void SetResources(
+ const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources);
+
+ private:
+ typedef std::map<GURL, int64> ResourceIDMap;
+
+ // The version objects owns its script cache and provides a rawptr to it.
+ friend class ServiceWorkerVersion;
+ ServiceWorkerScriptCacheMap(
+ ServiceWorkerVersion* owner,
+ base::WeakPtr<ServiceWorkerContextCore> context);
+ ~ServiceWorkerScriptCacheMap();
+
+ ServiceWorkerVersion* owner_;
+ base::WeakPtr<ServiceWorkerContextCore> context_;
+ ResourceIDMap resource_ids_;
+ bool has_error_;
+
+ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptCacheMap);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CACHE_MAP_H_
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc
index 1a3dd36b0d..62d198bd5a 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -25,17 +25,6 @@ namespace content {
namespace {
-typedef base::Callback<void(
- ServiceWorkerStorage::InitialData* data,
- bool success)> InitializeCallback;
-typedef base::Callback<void(
- const ServiceWorkerDatabase::RegistrationData& data,
- const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources,
- ServiceWorkerStatusCode status)> ReadRegistrationCallback;
-typedef base::Callback<void(
- bool origin_is_deletable,
- ServiceWorkerStatusCode status)> DeleteRegistrationCallback;
-
void RunSoon(const tracked_objects::Location& from_here,
const base::Closure& closure) {
base::MessageLoop::current()->PostTask(from_here, closure);
@@ -60,91 +49,24 @@ const base::FilePath::CharType kServiceWorkerDirectory[] =
FILE_PATH_LITERAL("Service Worker");
const base::FilePath::CharType kDatabaseName[] =
FILE_PATH_LITERAL("Database");
+const base::FilePath::CharType kDiskCacheName[] =
+ FILE_PATH_LITERAL("Cache");
const int kMaxMemDiskCacheSize = 10 * 1024 * 1024;
+const int kMaxDiskCacheSize = 250 * 1024 * 1024;
void EmptyCompletionCallback(int) {}
-void ReadInitialDataFromDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- const InitializeCallback& callback) {
- DCHECK(database);
- ServiceWorkerStorage::InitialData* data =
- new ServiceWorkerStorage::InitialData();
- bool success =
- database->GetNextAvailableIds(&data->next_registration_id,
- &data->next_version_id,
- &data->next_resource_id) &&
- database->GetOriginsWithRegistrations(&data->origins);
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, base::Owned(data), success));
-}
-
-void ReadRegistrationFromDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- int64 registration_id,
- const GURL& origin,
- const ReadRegistrationCallback& callback) {
- DCHECK(database);
- ServiceWorkerDatabase::RegistrationData data;
- std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
-
- // TODO(nhiroki): The database should return more detailed status like
- // ServiceWorkerStatusCode instead of bool value.
- ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
- if (!database->ReadRegistration(registration_id, origin, &data, &resources)) {
- status = database->is_disabled() ? SERVICE_WORKER_ERROR_FAILED
- : SERVICE_WORKER_ERROR_NOT_FOUND;
- }
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, data, resources, status));
-}
-
-void DeleteRegistrationFromDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- int64 registration_id,
- const GURL& origin,
- const DeleteRegistrationCallback& callback) {
- DCHECK(database);
- if (!database->DeleteRegistration(registration_id, origin)) {
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, false, SERVICE_WORKER_ERROR_FAILED));
- return;
- }
-
- // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the
- // unique origin list.
- std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
- if (!database->GetRegistrationsForOrigin(origin, &registrations)) {
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, false, SERVICE_WORKER_ERROR_FAILED));
- return;
- }
-
- bool deletable = registrations.empty();
- original_task_runner->PostTask(
- FROM_HERE, base::Bind(callback, deletable, SERVICE_WORKER_OK));
-}
-
-void UpdateToActiveStateInDB(
- ServiceWorkerDatabase* database,
- scoped_refptr<base::SequencedTaskRunner> original_task_runner,
- int64 registration_id,
- const GURL& origin,
- const ServiceWorkerStorage::StatusCallback& callback) {
- DCHECK(database);
-
- // TODO(nhiroki): The database should return more detailed status like
- // ServiceWorkerStatusCode instead of bool value.
- ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
- if (!database->UpdateVersionToActive(registration_id, origin)) {
- status = database->is_disabled() ? SERVICE_WORKER_ERROR_FAILED
- : SERVICE_WORKER_ERROR_NOT_FOUND;
+ServiceWorkerStatusCode DatabaseStatusToStatusCode(
+ ServiceWorkerDatabase::Status status) {
+ switch (status) {
+ case ServiceWorkerDatabase::STATUS_OK:
+ return SERVICE_WORKER_OK;
+ case ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND:
+ return SERVICE_WORKER_ERROR_NOT_FOUND;
+ default:
+ return SERVICE_WORKER_ERROR_FAILED;
}
- original_task_runner->PostTask(FROM_HERE, base::Bind(callback, status));
}
} // namespace
@@ -162,6 +84,7 @@ ServiceWorkerStorage::ServiceWorkerStorage(
const base::FilePath& path,
base::WeakPtr<ServiceWorkerContextCore> context,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy)
: next_registration_id_(kInvalidServiceWorkerRegistrationId),
next_version_id_(kInvalidServiceWorkerVersionId),
@@ -169,15 +92,13 @@ ServiceWorkerStorage::ServiceWorkerStorage(
state_(UNINITIALIZED),
context_(context),
database_task_runner_(database_task_runner),
+ disk_cache_thread_(disk_cache_thread),
quota_manager_proxy_(quota_manager_proxy),
+ is_purge_pending_(false),
weak_factory_(this) {
- if (!path.empty()) {
+ if (!path.empty())
path_ = path.Append(kServiceWorkerDirectory);
- database_.reset(new ServiceWorkerDatabase(path_.Append(kDatabaseName)));
- } else {
- // Create an in-memory database.
- database_.reset(new ServiceWorkerDatabase(base::FilePath()));
- }
+ database_.reset(new ServiceWorkerDatabase(GetDatabasePath()));
}
ServiceWorkerStorage::~ServiceWorkerStorage() {
@@ -185,112 +106,107 @@ ServiceWorkerStorage::~ServiceWorkerStorage() {
database_task_runner_->DeleteSoon(FROM_HERE, database_.release());
}
-void ServiceWorkerStorage::FindRegistrationForPattern(
- const GURL& scope,
+void ServiceWorkerStorage::FindRegistrationForDocument(
+ const GURL& document_url,
const FindRegistrationCallback& callback) {
- scoped_refptr<ServiceWorkerRegistration> null_registration;
if (!LazyInitialize(base::Bind(
- &ServiceWorkerStorage::FindRegistrationForPattern,
- weak_factory_.GetWeakPtr(), scope, callback))) {
+ &ServiceWorkerStorage::FindRegistrationForDocument,
+ weak_factory_.GetWeakPtr(), document_url, callback))) {
if (state_ != INITIALIZING || !context_) {
- CompleteFindSoon(FROM_HERE, null_registration,
- SERVICE_WORKER_ERROR_FAILED, callback);
+ CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(),
+ SERVICE_WORKER_ERROR_FAILED, callback);
}
return;
}
DCHECK_EQ(INITIALIZED, state_);
// See if there are any stored registrations for the origin.
- if (!ContainsKey(registered_origins_, scope.GetOrigin())) {
+ if (!ContainsKey(registered_origins_, document_url.GetOrigin())) {
// Look for something currently being installed.
scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForPattern(scope);
- if (installing_registration) {
- CompleteFindSoon(
- FROM_HERE, installing_registration, SERVICE_WORKER_OK, callback);
- return;
- }
- CompleteFindSoon(
- FROM_HERE, null_registration, SERVICE_WORKER_ERROR_NOT_FOUND, callback);
+ FindInstallingRegistrationForDocument(document_url);
+ CompleteFindNow(
+ installing_registration,
+ installing_registration ?
+ SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND,
+ callback);
return;
}
- RegistrationList* registrations = new RegistrationList();
- PostTaskAndReplyWithResult(
- database_task_runner_,
+ database_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&ServiceWorkerDatabase::GetRegistrationsForOrigin,
- base::Unretained(database_.get()),
- scope.GetOrigin(), base::Unretained(registrations)),
- base::Bind(&ServiceWorkerStorage::DidGetRegistrationsForPattern,
- weak_factory_.GetWeakPtr(), scope, callback,
- base::Owned(registrations)));
+ base::Bind(
+ &FindForDocumentInDB,
+ database_.get(),
+ base::MessageLoopProxy::current(),
+ document_url,
+ base::Bind(&ServiceWorkerStorage::DidFindRegistrationForDocument,
+ weak_factory_.GetWeakPtr(), document_url, callback)));
}
-void ServiceWorkerStorage::FindRegistrationForDocument(
- const GURL& document_url,
+void ServiceWorkerStorage::FindRegistrationForPattern(
+ const GURL& scope,
const FindRegistrationCallback& callback) {
- scoped_refptr<ServiceWorkerRegistration> null_registration;
if (!LazyInitialize(base::Bind(
- &ServiceWorkerStorage::FindRegistrationForDocument,
- weak_factory_.GetWeakPtr(), document_url, callback))) {
- if (state_ != INITIALIZING || !context_)
- CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_FAILED, callback);
+ &ServiceWorkerStorage::FindRegistrationForPattern,
+ weak_factory_.GetWeakPtr(), scope, callback))) {
+ if (state_ != INITIALIZING || !context_) {
+ CompleteFindSoon(FROM_HERE, scoped_refptr<ServiceWorkerRegistration>(),
+ SERVICE_WORKER_ERROR_FAILED, callback);
+ }
return;
}
DCHECK_EQ(INITIALIZED, state_);
// See if there are any stored registrations for the origin.
- if (!ContainsKey(registered_origins_, document_url.GetOrigin())) {
+ if (!ContainsKey(registered_origins_, scope.GetOrigin())) {
// Look for something currently being installed.
scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForDocument(document_url);
- if (installing_registration) {
- CompleteFindNow(installing_registration, SERVICE_WORKER_OK, callback);
- return;
- }
- CompleteFindNow(
- null_registration, SERVICE_WORKER_ERROR_NOT_FOUND, callback);
+ FindInstallingRegistrationForPattern(scope);
+ CompleteFindSoon(
+ FROM_HERE, installing_registration,
+ installing_registration ?
+ SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND,
+ callback);
return;
}
- RegistrationList* registrations = new RegistrationList();
- PostTaskAndReplyWithResult(
- database_task_runner_,
+ database_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&ServiceWorkerDatabase::GetRegistrationsForOrigin,
- base::Unretained(database_.get()),
- document_url.GetOrigin(), base::Unretained(registrations)),
- base::Bind(&ServiceWorkerStorage::DidGetRegistrationsForDocument,
- weak_factory_.GetWeakPtr(), document_url, callback,
- base::Owned(registrations)));
+ base::Bind(
+ &FindForPatternInDB,
+ database_.get(),
+ base::MessageLoopProxy::current(),
+ scope,
+ base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern,
+ weak_factory_.GetWeakPtr(), scope, callback)));
}
void ServiceWorkerStorage::FindRegistrationForId(
int64 registration_id,
const GURL& origin,
const FindRegistrationCallback& callback) {
- scoped_refptr<ServiceWorkerRegistration> null_registration;
if (!LazyInitialize(base::Bind(
&ServiceWorkerStorage::FindRegistrationForId,
weak_factory_.GetWeakPtr(), registration_id, origin, callback))) {
- if (state_ != INITIALIZING || !context_)
- CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_FAILED, callback);
+ if (state_ != INITIALIZING || !context_) {
+ CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(),
+ SERVICE_WORKER_ERROR_FAILED, callback);
+ }
return;
}
DCHECK_EQ(INITIALIZED, state_);
// See if there are any stored registrations for the origin.
if (!ContainsKey(registered_origins_, origin)) {
- // Look for somthing currently being installed.
+ // Look for something currently being installed.
scoped_refptr<ServiceWorkerRegistration> installing_registration =
FindInstallingRegistrationForId(registration_id);
- if (installing_registration) {
- CompleteFindNow(installing_registration, SERVICE_WORKER_OK, callback);
- return;
- }
CompleteFindNow(
- null_registration, SERVICE_WORKER_ERROR_NOT_FOUND, callback);
+ installing_registration,
+ installing_registration ?
+ SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND,
+ callback);
return;
}
@@ -303,11 +219,11 @@ void ServiceWorkerStorage::FindRegistrationForId(
database_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&ReadRegistrationFromDB,
+ base::Bind(&FindForIdInDB,
database_.get(),
base::MessageLoopProxy::current(),
registration_id, origin,
- base::Bind(&ServiceWorkerStorage::DidReadRegistrationForId,
+ base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId,
weak_factory_.GetWeakPtr(), callback)));
}
@@ -360,15 +276,17 @@ void ServiceWorkerStorage::StoreRegistration(
data.is_active = false; // initially stored in the waiting state
ResourceList resources;
- PostTaskAndReplyWithResult(
- database_task_runner_,
+ version->script_cache_map()->GetResources(&resources);
+
+ database_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&ServiceWorkerDatabase::WriteRegistration,
- base::Unretained(database_.get()), data, resources),
- base::Bind(&ServiceWorkerStorage::DidStoreRegistration,
- weak_factory_.GetWeakPtr(),
- registration->script_url().GetOrigin(),
- callback));
+ base::Bind(&WriteRegistrationInDB,
+ database_.get(),
+ base::MessageLoopProxy::current(),
+ data, resources,
+ base::Bind(&ServiceWorkerStorage::DidStoreRegistration,
+ weak_factory_.GetWeakPtr(),
+ callback)));
}
void ServiceWorkerStorage::UpdateToActiveState(
@@ -382,13 +300,15 @@ void ServiceWorkerStorage::UpdateToActiveState(
return;
}
- database_task_runner_->PostTask(
+ PostTaskAndReplyWithResult(
+ database_task_runner_,
FROM_HERE,
- base::Bind(&UpdateToActiveStateInDB,
- database_.get(),
- base::MessageLoopProxy::current(),
+ base::Bind(&ServiceWorkerDatabase::UpdateVersionToActive,
+ base::Unretained(database_.get()),
registration->id(),
- registration->script_url().GetOrigin(),
+ registration->script_url().GetOrigin()),
+ base::Bind(&ServiceWorkerStorage::DidUpdateToActiveState,
+ weak_factory_.GetWeakPtr(),
callback));
}
@@ -429,6 +349,27 @@ ServiceWorkerStorage::CreateResponseWriter(int64 response_id) {
new ServiceWorkerResponseWriter(response_id, disk_cache()));
}
+void ServiceWorkerStorage::StoreUncommittedReponseId(int64 id) {
+ DCHECK_NE(kInvalidServiceWorkerResponseId, id);
+ database_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(
+ &ServiceWorkerDatabase::WriteUncommittedResourceIds),
+ base::Unretained(database_.get()),
+ std::set<int64>(&id, &id + 1)));
+}
+
+void ServiceWorkerStorage::DoomUncommittedResponse(int64 id) {
+ DCHECK_NE(kInvalidServiceWorkerResponseId, id);
+ database_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(
+ &ServiceWorkerDatabase::PurgeUncommittedResourceIds),
+ base::Unretained(database_.get()),
+ std::set<int64>(&id, &id + 1)));
+ StartPurgingResources(std::vector<int64>(1, id));
+}
+
int64 ServiceWorkerStorage::NewRegistrationId() {
if (state_ == DISABLED)
return kInvalidServiceWorkerRegistrationId;
@@ -456,8 +397,39 @@ void ServiceWorkerStorage::NotifyInstallingRegistration(
}
void ServiceWorkerStorage::NotifyDoneInstallingRegistration(
- ServiceWorkerRegistration* registration) {
+ ServiceWorkerRegistration* registration,
+ ServiceWorkerVersion* version,
+ ServiceWorkerStatusCode status) {
installing_registrations_.erase(registration->id());
+ if (status != SERVICE_WORKER_OK && version) {
+ ResourceList resources;
+ version->script_cache_map()->GetResources(&resources);
+
+ std::set<int64> ids;
+ for (size_t i = 0; i < resources.size(); ++i)
+ ids.insert(resources[i].resource_id);
+
+ database_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(
+ &ServiceWorkerDatabase::PurgeUncommittedResourceIds),
+ base::Unretained(database_.get()),
+ ids));
+
+ StartPurgingResources(resources);
+ }
+}
+
+base::FilePath ServiceWorkerStorage::GetDatabasePath() {
+ if (path_.empty())
+ return base::FilePath();
+ return path_.Append(kDatabaseName);
+}
+
+base::FilePath ServiceWorkerStorage::GetDiskCachePath() {
+ if (path_.empty())
+ return base::FilePath();
+ return path_.Append(kDiskCacheName);
}
bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) {
@@ -490,18 +462,20 @@ bool ServiceWorkerStorage::LazyInitialize(const base::Closure& callback) {
void ServiceWorkerStorage::DidReadInitialData(
InitialData* data,
- bool success) {
+ ServiceWorkerDatabase::Status status) {
DCHECK(data);
DCHECK_EQ(INITIALIZING, state_);
- if (success) {
+ if (status == ServiceWorkerDatabase::STATUS_OK) {
next_registration_id_ = data->next_registration_id;
next_version_id_ = data->next_version_id;
next_resource_id_ = data->next_resource_id;
registered_origins_.swap(data->origins);
state_ = INITIALIZED;
} else {
- DLOG(WARNING) << "Failed to initialize.";
+ // TODO(nhiroki): If status==STATUS_ERROR_CORRUPTED, do corruption recovery
+ // (http://crbug.com/371675).
+ DLOG(WARNING) << "Failed to initialize: " << status;
state_ = DISABLED;
}
@@ -512,119 +486,79 @@ void ServiceWorkerStorage::DidReadInitialData(
pending_tasks_.clear();
}
-void ServiceWorkerStorage::DidGetRegistrationsForPattern(
- const GURL& scope,
+void ServiceWorkerStorage::DidFindRegistrationForDocument(
+ const GURL& document_url,
const FindRegistrationCallback& callback,
- RegistrationList* registrations,
- bool success) {
- DCHECK(registrations);
- if (!success) {
- callback.Run(SERVICE_WORKER_ERROR_FAILED,
- scoped_refptr<ServiceWorkerRegistration>());
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ ServiceWorkerDatabase::Status status) {
+ if (status == ServiceWorkerDatabase::STATUS_OK) {
+ callback.Run(SERVICE_WORKER_OK, GetOrCreateRegistration(data, resources));
return;
}
- // Find one with a matching scope.
- for (RegistrationList::const_iterator it = registrations->begin();
- it != registrations->end(); ++it) {
- if (scope == it->scope) {
- scoped_refptr<ServiceWorkerRegistration> registration =
- context_->GetLiveRegistration(it->registration_id);
- if (!registration)
- registration = CreateRegistration(*it);
- callback.Run(SERVICE_WORKER_OK, registration);
- return;
- }
- }
-
- // Look for something currently being installed.
- scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForPattern(scope);
- if (installing_registration) {
- callback.Run(SERVICE_WORKER_OK, installing_registration);
+ if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
+ // Look for something currently being installed.
+ scoped_refptr<ServiceWorkerRegistration> installing_registration =
+ FindInstallingRegistrationForDocument(document_url);
+ callback.Run(installing_registration ?
+ SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND,
+ installing_registration);
return;
}
- callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND,
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status),
scoped_refptr<ServiceWorkerRegistration>());
}
-void ServiceWorkerStorage::DidGetRegistrationsForDocument(
- const GURL& document_url,
+void ServiceWorkerStorage::DidFindRegistrationForPattern(
+ const GURL& scope,
const FindRegistrationCallback& callback,
- RegistrationList* registrations,
- bool success) {
- DCHECK(registrations);
- if (!success) {
- callback.Run(SERVICE_WORKER_ERROR_FAILED,
- scoped_refptr<ServiceWorkerRegistration>());
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ ServiceWorkerDatabase::Status status) {
+ if (status == ServiceWorkerDatabase::STATUS_OK) {
+ callback.Run(SERVICE_WORKER_OK, GetOrCreateRegistration(data, resources));
return;
}
- // Find one with a pattern match.
- for (RegistrationList::const_iterator it = registrations->begin();
- it != registrations->end(); ++it) {
- // TODO(michaeln): if there are multiple matches the one with
- // the longest scope should win.
- if (ServiceWorkerUtils::ScopeMatches(it->scope, document_url)) {
- scoped_refptr<ServiceWorkerRegistration> registration =
- context_->GetLiveRegistration(it->registration_id);
- if (registration) {
- callback.Run(SERVICE_WORKER_OK, registration);
- return;
- }
- callback.Run(SERVICE_WORKER_OK, CreateRegistration(*it));
- return;
- }
- }
-
- // Look for something currently being installed.
- // TODO(michaeln): Should be mixed in with the stored registrations
- // for this test.
- scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForDocument(document_url);
- if (installing_registration) {
- callback.Run(SERVICE_WORKER_OK, installing_registration);
+ if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
+ scoped_refptr<ServiceWorkerRegistration> installing_registration =
+ FindInstallingRegistrationForPattern(scope);
+ callback.Run(installing_registration ?
+ SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND,
+ installing_registration);
return;
}
- callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND,
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status),
scoped_refptr<ServiceWorkerRegistration>());
}
-void ServiceWorkerStorage::DidReadRegistrationForId(
+void ServiceWorkerStorage::DidFindRegistrationForId(
const FindRegistrationCallback& callback,
- const ServiceWorkerDatabase::RegistrationData& registration,
+ const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources,
- ServiceWorkerStatusCode status) {
- if (status == SERVICE_WORKER_OK) {
- callback.Run(status, CreateRegistration(registration));
- return;
- }
-
- if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
- // Look for somthing currently being installed.
- scoped_refptr<ServiceWorkerRegistration> installing_registration =
- FindInstallingRegistrationForId(registration.registration_id);
- if (installing_registration) {
- callback.Run(SERVICE_WORKER_OK, installing_registration);
- return;
- }
- callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND,
- scoped_refptr<ServiceWorkerRegistration>());
+ ServiceWorkerDatabase::Status status) {
+ if (status == ServiceWorkerDatabase::STATUS_OK) {
+ callback.Run(SERVICE_WORKER_OK,
+ GetOrCreateRegistration(data, resources));
return;
}
-
- callback.Run(status, scoped_refptr<ServiceWorkerRegistration>());
- return;
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status),
+ scoped_refptr<ServiceWorkerRegistration>());
}
void ServiceWorkerStorage::DidGetAllRegistrations(
const GetAllRegistrationInfosCallback& callback,
RegistrationList* registrations,
- bool success) {
+ ServiceWorkerDatabase::Status status) {
DCHECK(registrations);
- if (!success) {
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
callback.Run(std::vector<ServiceWorkerRegistrationInfo>());
return;
}
@@ -644,6 +578,7 @@ void ServiceWorkerStorage::DidGetAllRegistrations(
ServiceWorkerRegistrationInfo info;
info.pattern = it->scope;
info.script_url = it->script;
+ info.registration_id = it->registration_id;
info.active_version.is_null = false;
if (it->is_active)
info.active_version.status = ServiceWorkerVersion::ACTIVE;
@@ -665,50 +600,72 @@ void ServiceWorkerStorage::DidGetAllRegistrations(
}
void ServiceWorkerStorage::DidStoreRegistration(
- const GURL& origin,
const StatusCallback& callback,
- bool success) {
- if (!success) {
- callback.Run(SERVICE_WORKER_ERROR_FAILED);
+ const GURL& origin,
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status) {
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status));
return;
}
registered_origins_.insert(origin);
callback.Run(SERVICE_WORKER_OK);
+ StartPurgingResources(newly_purgeable_resources);
+}
+
+void ServiceWorkerStorage::DidUpdateToActiveState(
+ const StatusCallback& callback,
+ ServiceWorkerDatabase::Status status) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status));
}
void ServiceWorkerStorage::DidDeleteRegistration(
const GURL& origin,
const StatusCallback& callback,
bool origin_is_deletable,
- ServiceWorkerStatusCode status) {
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status) {
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ // TODO(nhiroki): Handle database error (http://crbug.com/371675).
+ callback.Run(DatabaseStatusToStatusCode(status));
+ return;
+ }
if (origin_is_deletable)
registered_origins_.erase(origin);
- callback.Run(status);
+ callback.Run(SERVICE_WORKER_OK);
+ StartPurgingResources(newly_purgeable_resources);
}
scoped_refptr<ServiceWorkerRegistration>
-ServiceWorkerStorage::CreateRegistration(
- const ServiceWorkerDatabase::RegistrationData& data) {
- scoped_refptr<ServiceWorkerRegistration> registration(
- new ServiceWorkerRegistration(
- data.scope, data.script, data.registration_id, context_));
+ServiceWorkerStorage::GetOrCreateRegistration(
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources) {
+ scoped_refptr<ServiceWorkerRegistration> registration =
+ context_->GetLiveRegistration(data.registration_id);
+ if (registration)
+ return registration;
+ registration = new ServiceWorkerRegistration(
+ data.scope, data.script, data.registration_id, context_);
scoped_refptr<ServiceWorkerVersion> version =
context_->GetLiveVersion(data.version_id);
if (!version) {
version = new ServiceWorkerVersion(registration, data.version_id, context_);
- version->SetStatus(data.GetVersionStatus());
+ version->SetStatus(data.is_active ?
+ ServiceWorkerVersion::ACTIVE : ServiceWorkerVersion::INSTALLED);
+ version->script_cache_map()->SetResources(resources);
}
if (version->status() == ServiceWorkerVersion::ACTIVE)
registration->set_active_version(version);
else if (version->status() == ServiceWorkerVersion::INSTALLED)
- registration->set_pending_version(version);
+ registration->set_waiting_version(version);
else
NOTREACHED();
// TODO(michaeln): Hmmm, what if DeleteReg was invoked after
// the Find result we're returning here? NOTREACHED condition?
-
return registration;
}
@@ -716,8 +673,7 @@ ServiceWorkerRegistration*
ServiceWorkerStorage::FindInstallingRegistrationForDocument(
const GURL& document_url) {
// TODO(michaeln): if there are multiple matches the one with
- // the longest scope should win, and these should on equal footing
- // with the stored registrations in FindRegistrationForDocument().
+ // the longest scope should win.
for (RegistrationRefsById::const_iterator it =
installing_registrations_.begin();
it != installing_registrations_.end(); ++it) {
@@ -755,13 +711,250 @@ ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() {
if (disk_cache_)
return disk_cache_.get();
- // TODO(michaeln): Store data on disk and do error checking.
disk_cache_.reset(new ServiceWorkerDiskCache);
- int rv = disk_cache_->InitWithMemBackend(
- kMaxMemDiskCacheSize,
- base::Bind(&EmptyCompletionCallback));
- DCHECK_EQ(net::OK, rv);
+
+ base::FilePath path = GetDiskCachePath();
+ if (path.empty()) {
+ int rv = disk_cache_->InitWithMemBackend(
+ kMaxMemDiskCacheSize,
+ base::Bind(&EmptyCompletionCallback));
+ DCHECK_EQ(net::OK, rv);
+ return disk_cache_.get();
+ }
+
+ int rv = disk_cache_->InitWithDiskBackend(
+ path, kMaxDiskCacheSize, false,
+ disk_cache_thread_.get(),
+ base::Bind(&ServiceWorkerStorage::OnDiskCacheInitialized,
+ weak_factory_.GetWeakPtr()));
+ if (rv != net::ERR_IO_PENDING)
+ OnDiskCacheInitialized(rv);
+
return disk_cache_.get();
}
+void ServiceWorkerStorage::OnDiskCacheInitialized(int rv) {
+ if (rv != net::OK) {
+ LOG(ERROR) << "Failed to open the serviceworker diskcache: "
+ << net::ErrorToString(rv);
+ // TODO(michaeln): DeleteAndStartOver()
+ disk_cache_->Disable();
+ state_ = DISABLED;
+ }
+}
+
+void ServiceWorkerStorage::StartPurgingResources(
+ const std::vector<int64>& ids) {
+ for (size_t i = 0; i < ids.size(); ++i)
+ purgeable_reource_ids_.push_back(ids[i]);
+ ContinuePurgingResources();
+}
+
+void ServiceWorkerStorage::StartPurgingResources(
+ const ResourceList& resources) {
+ for (size_t i = 0; i < resources.size(); ++i)
+ purgeable_reource_ids_.push_back(resources[i].resource_id);
+ ContinuePurgingResources();
+}
+
+void ServiceWorkerStorage::ContinuePurgingResources() {
+ if (purgeable_reource_ids_.empty() || is_purge_pending_)
+ return;
+
+ // Do one at a time until we're done, use RunSoon to avoid recursion when
+ // DoomEntry returns immediately.
+ is_purge_pending_ = true;
+ int64 id = purgeable_reource_ids_.front();
+ purgeable_reource_ids_.pop_front();
+ RunSoon(FROM_HERE,
+ base::Bind(&ServiceWorkerStorage::PurgeResource,
+ weak_factory_.GetWeakPtr(), id));
+}
+
+void ServiceWorkerStorage::PurgeResource(int64 id) {
+ DCHECK(is_purge_pending_);
+ int rv = disk_cache()->DoomEntry(
+ id, base::Bind(&ServiceWorkerStorage::OnResourcePurged,
+ weak_factory_.GetWeakPtr(), id));
+ if (rv != net::ERR_IO_PENDING)
+ OnResourcePurged(id, rv);
+}
+
+void ServiceWorkerStorage::OnResourcePurged(int64 id, int rv) {
+ DCHECK(is_purge_pending_);
+ is_purge_pending_ = false;
+
+ database_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(
+ &ServiceWorkerDatabase::ClearPurgeableResourceIds),
+ base::Unretained(database_.get()),
+ std::set<int64>(&id, &id + 1)));
+
+ ContinuePurgingResources();
+}
+
+void ServiceWorkerStorage::ReadInitialDataFromDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const InitializeCallback& callback) {
+ DCHECK(database);
+ scoped_ptr<ServiceWorkerStorage::InitialData> data(
+ new ServiceWorkerStorage::InitialData());
+
+ ServiceWorkerDatabase::Status status =
+ database->GetNextAvailableIds(&data->next_registration_id,
+ &data->next_version_id,
+ &data->next_resource_id);
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
+ return;
+ }
+
+ status = database->GetOriginsWithRegistrations(&data->origins);
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, base::Owned(data.release()), status));
+}
+
+void ServiceWorkerStorage::DeleteRegistrationFromDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ int64 registration_id,
+ const GURL& origin,
+ const DeleteRegistrationCallback& callback) {
+ DCHECK(database);
+
+ std::vector<int64> newly_purgeable_resources;
+ ServiceWorkerDatabase::Status status =
+ database->DeleteRegistration(registration_id, origin,
+ &newly_purgeable_resources);
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, false, std::vector<int64>(), status));
+ return;
+ }
+
+ // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the
+ // unique origin list.
+ std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
+ status = database->GetRegistrationsForOrigin(origin, &registrations);
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, false, std::vector<int64>(), status));
+ return;
+ }
+
+ bool deletable = registrations.empty();
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, deletable,
+ newly_purgeable_resources, status));
+}
+
+void ServiceWorkerStorage::WriteRegistrationInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ const WriteRegistrationCallback& callback) {
+ DCHECK(database);
+ std::vector<int64> newly_purgeable_resources;
+ ServiceWorkerDatabase::Status status =
+ database->WriteRegistration(data, resources, &newly_purgeable_resources);
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback, data.script.GetOrigin(),
+ newly_purgeable_resources, status));
+}
+
+void ServiceWorkerStorage::FindForDocumentInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const GURL& document_url,
+ const FindInDBCallback& callback) {
+ GURL origin = document_url.GetOrigin();
+ RegistrationList registrations;
+ ServiceWorkerDatabase::Status status =
+ database->GetRegistrationsForOrigin(origin, &registrations);
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ ServiceWorkerDatabase::RegistrationData(),
+ ResourceList(),
+ status));
+ return;
+ }
+
+ // Find one with a pattern match.
+ // TODO(michaeln): if there are multiple matches the one with
+ // the longest scope should win.
+ ServiceWorkerDatabase::RegistrationData data;
+ ResourceList resources;
+ status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND;
+ for (RegistrationList::const_iterator it = registrations.begin();
+ it != registrations.end(); ++it) {
+ if (!ServiceWorkerUtils::ScopeMatches(it->scope, document_url))
+ continue;
+ status = database->ReadRegistration(it->registration_id, origin,
+ &data, &resources);
+ break; // We're done looping.
+ }
+
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback, data, resources, status));
+}
+
+void ServiceWorkerStorage::FindForPatternInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const GURL& scope,
+ const FindInDBCallback& callback) {
+ GURL origin = scope.GetOrigin();
+ std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
+ ServiceWorkerDatabase::Status status =
+ database->GetRegistrationsForOrigin(origin, &registrations);
+ if (status != ServiceWorkerDatabase::STATUS_OK) {
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ ServiceWorkerDatabase::RegistrationData(),
+ ResourceList(),
+ status));
+ return;
+ }
+
+ // Find one with an exact matching scope.
+ ServiceWorkerDatabase::RegistrationData data;
+ ResourceList resources;
+ status = ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND;
+ for (RegistrationList::const_iterator it = registrations.begin();
+ it != registrations.end(); ++it) {
+ if (scope != it->scope)
+ continue;
+ status = database->ReadRegistration(it->registration_id, origin,
+ &data, &resources);
+ break; // We're done looping.
+ }
+
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback, data, resources, status));
+}
+
+void ServiceWorkerStorage::FindForIdInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ int64 registration_id,
+ const GURL& origin,
+ const FindInDBCallback& callback) {
+ ServiceWorkerDatabase::RegistrationData data;
+ ResourceList resources;
+ ServiceWorkerDatabase::Status status =
+ database->ReadRegistration(registration_id, origin, &data, &resources);
+ original_task_runner->PostTask(
+ FROM_HERE, base::Bind(callback, data, resources, status));
+}
+
} // namespace content
diff --git a/content/browser/service_worker/service_worker_storage.h b/content/browser/service_worker/service_worker_storage.h
index 6780d4ca48..5d89864dc2 100644
--- a/content/browser/service_worker/service_worker_storage.h
+++ b/content/browser/service_worker/service_worker_storage.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_
+#include <deque>
#include <map>
#include <set>
#include <vector>
@@ -20,6 +21,7 @@
#include "url/gurl.h"
namespace base {
+class MessageLoopProxy;
class SequencedTaskRunner;
}
@@ -41,6 +43,7 @@ class ServiceWorkerVersion;
// registration data.
class CONTENT_EXPORT ServiceWorkerStorage {
public:
+ typedef std::vector<ServiceWorkerDatabase::ResourceRecord> ResourceList;
typedef base::Callback<void(ServiceWorkerStatusCode status)> StatusCallback;
typedef base::Callback<void(ServiceWorkerStatusCode status,
const scoped_refptr<ServiceWorkerRegistration>&
@@ -52,19 +55,10 @@ class CONTENT_EXPORT ServiceWorkerStorage {
void(ServiceWorkerStatusCode status, int result)>
CompareCallback;
- struct InitialData {
- int64 next_registration_id;
- int64 next_version_id;
- int64 next_resource_id;
- std::set<GURL> origins;
-
- InitialData();
- ~InitialData();
- };
-
ServiceWorkerStorage(const base::FilePath& path,
base::WeakPtr<ServiceWorkerContextCore> context,
base::SequencedTaskRunner* database_task_runner,
+ base::MessageLoopProxy* disk_cache_thread,
quota::QuotaManagerProxy* quota_manager_proxy);
~ServiceWorkerStorage();
@@ -115,6 +109,14 @@ class CONTENT_EXPORT ServiceWorkerStorage {
scoped_ptr<ServiceWorkerResponseWriter> CreateResponseWriter(
int64 response_id);
+ // Adds |id| to the set of resources ids that are in the disk
+ // cache but not yet stored with a registration.
+ void StoreUncommittedReponseId(int64 id);
+
+ // Removes |id| from uncommitted list, adds it to the
+ // purgeable list and purges it.
+ void DoomUncommittedResponse(int64 id);
+
// Returns new IDs which are guaranteed to be unique in the storage.
int64 NewRegistrationId();
int64 NewVersionId();
@@ -124,50 +126,91 @@ class CONTENT_EXPORT ServiceWorkerStorage {
void NotifyInstallingRegistration(
ServiceWorkerRegistration* registration);
void NotifyDoneInstallingRegistration(
- ServiceWorkerRegistration* registration);
+ ServiceWorkerRegistration* registration,
+ ServiceWorkerVersion* version,
+ ServiceWorkerStatusCode status);
private:
friend class ServiceWorkerStorageTest;
+ FRIEND_TEST_ALL_PREFIXES(ServiceWorkerStorageTest,
+ ResourceIdsAreStoredAndPurged);
+
+ struct InitialData {
+ int64 next_registration_id;
+ int64 next_version_id;
+ int64 next_resource_id;
+ std::set<GURL> origins;
+
+ InitialData();
+ ~InitialData();
+ };
typedef std::vector<ServiceWorkerDatabase::RegistrationData> RegistrationList;
- typedef std::vector<ServiceWorkerDatabase::ResourceRecord> ResourceList;
+ typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> >
+ RegistrationRefsById;
+ typedef base::Callback<void(
+ InitialData* data,
+ ServiceWorkerDatabase::Status status)> InitializeCallback;
+ typedef base::Callback<void(
+ const GURL& origin,
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status)> WriteRegistrationCallback;
+ typedef base::Callback<void(
+ bool origin_is_deletable,
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status)> DeleteRegistrationCallback;
+ typedef base::Callback<void(
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ ServiceWorkerDatabase::Status status)> FindInDBCallback;
+
+ base::FilePath GetDatabasePath();
+ base::FilePath GetDiskCachePath();
bool LazyInitialize(
const base::Closure& callback);
void DidReadInitialData(
InitialData* data,
- bool success);
- void DidGetRegistrationsForPattern(
- const GURL& scope,
+ ServiceWorkerDatabase::Status status);
+ void DidFindRegistrationForDocument(
+ const GURL& document_url,
const FindRegistrationCallback& callback,
- RegistrationList* registrations,
- bool succcess);
- void DidGetRegistrationsForDocument(
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ ServiceWorkerDatabase::Status status);
+ void DidFindRegistrationForPattern(
const GURL& scope,
const FindRegistrationCallback& callback,
- RegistrationList* registrations,
- bool succcess);
- void DidReadRegistrationForId(
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources,
+ ServiceWorkerDatabase::Status status);
+ void DidFindRegistrationForId(
const FindRegistrationCallback& callback,
- const ServiceWorkerDatabase::RegistrationData& registration,
+ const ServiceWorkerDatabase::RegistrationData& data,
const ResourceList& resources,
- ServiceWorkerStatusCode status);
+ ServiceWorkerDatabase::Status status);
void DidGetAllRegistrations(
const GetAllRegistrationInfosCallback& callback,
RegistrationList* registrations,
- bool success);
+ ServiceWorkerDatabase::Status status);
void DidStoreRegistration(
+ const StatusCallback& callback,
const GURL& origin,
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status);
+ void DidUpdateToActiveState(
const StatusCallback& callback,
- bool success);
+ ServiceWorkerDatabase::Status status);
void DidDeleteRegistration(
const GURL& origin,
const StatusCallback& callback,
bool origin_is_deletable,
- ServiceWorkerStatusCode status);
+ const std::vector<int64>& newly_purgeable_resources,
+ ServiceWorkerDatabase::Status status);
- scoped_refptr<ServiceWorkerRegistration> CreateRegistration(
- const ServiceWorkerDatabase::RegistrationData& data);
+ scoped_refptr<ServiceWorkerRegistration> GetOrCreateRegistration(
+ const ServiceWorkerDatabase::RegistrationData& data,
+ const ResourceList& resources);
ServiceWorkerRegistration* FindInstallingRegistrationForDocument(
const GURL& document_url);
ServiceWorkerRegistration* FindInstallingRegistrationForPattern(
@@ -175,13 +218,52 @@ class CONTENT_EXPORT ServiceWorkerStorage {
ServiceWorkerRegistration* FindInstallingRegistrationForId(
int64 registration_id);
- // For finding registrations being installed.
- typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> >
- RegistrationRefsById;
- RegistrationRefsById installing_registrations_;
-
// Lazy disk_cache getter.
ServiceWorkerDiskCache* disk_cache();
+ void OnDiskCacheInitialized(int rv);
+
+ void StartPurgingResources(const std::vector<int64>& ids);
+ void StartPurgingResources(const ResourceList& resources);
+ void ContinuePurgingResources();
+ void PurgeResource(int64 id);
+ void OnResourcePurged(int64 id, int rv);
+
+ // Static cross-thread helpers.
+ static void ReadInitialDataFromDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const InitializeCallback& callback);
+ static void DeleteRegistrationFromDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ int64 registration_id,
+ const GURL& origin,
+ const DeleteRegistrationCallback& callback);
+ static void WriteRegistrationInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const ServiceWorkerDatabase::RegistrationData& registration,
+ const ResourceList& resources,
+ const WriteRegistrationCallback& callback);
+ static void FindForDocumentInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const GURL& document_url,
+ const FindInDBCallback& callback);
+ static void FindForPatternInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ const GURL& scope,
+ const FindInDBCallback& callback);
+ static void FindForIdInDB(
+ ServiceWorkerDatabase* database,
+ scoped_refptr<base::SequencedTaskRunner> original_task_runner,
+ int64 registration_id,
+ const GURL& origin,
+ const FindInDBCallback& callback);
+
+ // For finding registrations being installed.
+ RegistrationRefsById installing_registrations_;
// Origins having registations.
std::set<GURL> registered_origins_;
@@ -208,8 +290,11 @@ class CONTENT_EXPORT ServiceWorkerStorage {
scoped_ptr<ServiceWorkerDatabase> database_;
scoped_refptr<base::SequencedTaskRunner> database_task_runner_;
+ scoped_refptr<base::MessageLoopProxy> disk_cache_thread_;
scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_;
scoped_ptr<ServiceWorkerDiskCache> disk_cache_;
+ std::deque<int64> purgeable_reource_ids_;
+ bool is_purge_pending_;
base::WeakPtrFactory<ServiceWorkerStorage> weak_factory_;
diff --git a/content/browser/service_worker/service_worker_storage_unittest.cc b/content/browser/service_worker/service_worker_storage_unittest.cc
index 2265e9ca07..c47430f8fc 100644
--- a/content/browser/service_worker/service_worker_storage_unittest.cc
+++ b/content/browser/service_worker/service_worker_storage_unittest.cc
@@ -2,22 +2,32 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/service_worker/service_worker_storage.h"
-
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "content/browser/browser_thread_impl.h"
#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_disk_cache.h"
#include "content/browser/service_worker/service_worker_registration.h"
+#include "content/browser/service_worker/service_worker_storage.h"
#include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/service_worker/service_worker_status_code.h"
#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_response_headers.h"
#include "testing/gtest/include/gtest/gtest.h"
+using net::IOBuffer;
+using net::WrappedIOBuffer;
+
namespace content {
namespace {
+typedef ServiceWorkerDatabase::RegistrationData RegistrationData;
+typedef ServiceWorkerDatabase::ResourceRecord ResourceRecord;
+
void StatusCallback(bool* was_called,
ServiceWorkerStatusCode* result,
ServiceWorkerStatusCode status) {
@@ -63,6 +73,74 @@ ServiceWorkerStorage::GetAllRegistrationInfosCallback MakeGetAllCallback(
return base::Bind(&GetAllCallback, was_called, all);
}
+void OnIOComplete(int* rv_out, int rv) {
+ *rv_out = rv;
+}
+
+void WriteBasicResponse(ServiceWorkerStorage* storage, int64 id) {
+ scoped_ptr<ServiceWorkerResponseWriter> writer =
+ storage->CreateResponseWriter(id);
+
+ const char kHttpHeaders[] =
+ "HTTP/1.0 200 HONKYDORY\0Content-Length: 6\0\0";
+ const char kHttpBody[] = "Hello\0";
+ scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBody));
+ std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders));
+ scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo);
+ info->request_time = base::Time::Now();
+ info->response_time = base::Time::Now();
+ info->was_cached = false;
+ info->headers = new net::HttpResponseHeaders(raw_headers);
+ scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
+ new HttpResponseInfoIOBuffer(info.release());
+
+ int rv = -1234;
+ writer->WriteInfo(info_buffer, base::Bind(&OnIOComplete, &rv));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_LT(0, rv);
+
+ rv = -1234;
+ writer->WriteData(body, arraysize(kHttpBody),
+ base::Bind(&OnIOComplete, &rv));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(static_cast<int>(arraysize(kHttpBody)), rv);
+}
+
+bool VerifyBasicResponse(ServiceWorkerStorage* storage, int64 id,
+ bool expected_positive_result) {
+ const char kExpectedHttpBody[] = "Hello\0";
+ scoped_ptr<ServiceWorkerResponseReader> reader =
+ storage->CreateResponseReader(id);
+ scoped_refptr<HttpResponseInfoIOBuffer> info_buffer =
+ new HttpResponseInfoIOBuffer();
+ int rv = -1234;
+ reader->ReadInfo(info_buffer, base::Bind(&OnIOComplete, &rv));
+ base::RunLoop().RunUntilIdle();
+ if (expected_positive_result)
+ EXPECT_LT(0, rv);
+ if (rv <= 0)
+ return false;
+
+ const int kBigEnough = 512;
+ scoped_refptr<net::IOBuffer> buffer = new IOBuffer(kBigEnough);
+ rv = -1234;
+ reader->ReadData(buffer, kBigEnough, base::Bind(&OnIOComplete, &rv));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(static_cast<int>(arraysize(kExpectedHttpBody)), rv);
+ if (rv <= 0)
+ return false;
+
+ bool status_match =
+ std::string("HONKYDORY") ==
+ info_buffer->http_info->headers->GetStatusText();
+ bool data_match =
+ std::string(kExpectedHttpBody) == std::string(buffer->data());
+
+ EXPECT_TRUE(status_match);
+ EXPECT_TRUE(data_match);
+ return status_match && data_match;
+}
+
} // namespace
class ServiceWorkerStorageTest : public testing::Test {
@@ -72,12 +150,13 @@ class ServiceWorkerStorageTest : public testing::Test {
}
virtual void SetUp() OVERRIDE {
- context_.reset(new ServiceWorkerContextCore(
- base::FilePath(),
- base::MessageLoopProxy::current(),
- NULL,
- NULL,
- scoped_ptr<ServiceWorkerProcessManager>()));
+ context_.reset(
+ new ServiceWorkerContextCore(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL,
+ NULL,
+ NULL));
context_ptr_ = context_->AsWeakPtr();
}
@@ -87,6 +166,19 @@ class ServiceWorkerStorageTest : public testing::Test {
ServiceWorkerStorage* storage() { return context_->storage(); }
+ // A static class method for friendliness.
+ static void VerifyPurgeableListStatusCallback(
+ ServiceWorkerDatabase* database,
+ std::set<int64> *purgeable_ids,
+ bool* was_called,
+ ServiceWorkerStatusCode* result,
+ ServiceWorkerStatusCode status) {
+ *was_called = true;
+ *result = status;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ database->GetPurgeableResourceIds(purgeable_ids));
+ }
+
protected:
scoped_ptr<ServiceWorkerContextCore> context_;
base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
@@ -94,9 +186,9 @@ class ServiceWorkerStorageTest : public testing::Test {
};
TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
- const GURL kScope("http://www.test.com/scope/*");
- const GURL kScript("http://www.test.com/script.js");
- const GURL kDocumentUrl("http://www.test.com/scope/document.html");
+ const GURL kScope("http://www.test.not/scope/*");
+ const GURL kScript("http://www.test.not/script.js");
+ const GURL kDocumentUrl("http://www.test.not/scope/document.html");
const int64 kRegistrationId = 0;
const int64 kVersionId = 0;
@@ -139,7 +231,7 @@ TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
new ServiceWorkerVersion(
live_registration, kVersionId, context_ptr_);
live_version->SetStatus(ServiceWorkerVersion::INSTALLED);
- live_registration->set_pending_version(live_version);
+ live_registration->set_waiting_version(live_version);
storage()->StoreRegistration(live_registration, live_version,
MakeStatusCallback(&was_called, &result));
EXPECT_FALSE(was_called); // always async
@@ -200,7 +292,7 @@ TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
EXPECT_EQ(kRegistrationId, found_registration->id());
EXPECT_TRUE(found_registration->HasOneRef());
EXPECT_EQ(live_version,
- found_registration->pending_version());
+ found_registration->waiting_version());
was_called = false;
found_registration = NULL;
@@ -219,15 +311,15 @@ TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
EXPECT_EQ(kRegistrationId, found_registration->id());
EXPECT_TRUE(found_registration->HasOneRef());
EXPECT_FALSE(found_registration->active_version());
- ASSERT_TRUE(found_registration->pending_version());
+ ASSERT_TRUE(found_registration->waiting_version());
EXPECT_EQ(ServiceWorkerVersion::INSTALLED,
- found_registration->pending_version()->status());
+ found_registration->waiting_version()->status());
was_called = false;
// Update to active.
scoped_refptr<ServiceWorkerVersion> temp_version =
- found_registration->pending_version();
- found_registration->set_pending_version(NULL);
+ found_registration->waiting_version();
+ found_registration->set_waiting_version(NULL);
temp_version->SetStatus(ServiceWorkerVersion::ACTIVE);
found_registration->set_active_version(temp_version);
temp_version = NULL;
@@ -266,7 +358,7 @@ TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
ASSERT_TRUE(found_registration);
EXPECT_EQ(kRegistrationId, found_registration->id());
EXPECT_TRUE(found_registration->HasOneRef());
- EXPECT_FALSE(found_registration->pending_version());
+ EXPECT_FALSE(found_registration->waiting_version());
ASSERT_TRUE(found_registration->active_version());
EXPECT_EQ(ServiceWorkerVersion::ACTIVE,
found_registration->active_version()->status());
@@ -309,9 +401,9 @@ TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
}
TEST_F(ServiceWorkerStorageTest, InstallingRegistrationsAreFindable) {
- const GURL kScope("http://www.test.com/scope/*");
- const GURL kScript("http://www.test.com/script.js");
- const GURL kDocumentUrl("http://www.test.com/scope/document.html");
+ const GURL kScope("http://www.test.not/scope/*");
+ const GURL kScript("http://www.test.not/script.js");
+ const GURL kDocumentUrl("http://www.test.not/scope/document.html");
const int64 kRegistrationId = 0;
const int64 kVersionId = 0;
@@ -327,7 +419,7 @@ TEST_F(ServiceWorkerStorageTest, InstallingRegistrationsAreFindable) {
new ServiceWorkerVersion(
live_registration, kVersionId, context_ptr_);
live_version->SetStatus(ServiceWorkerVersion::INSTALLING);
- live_registration->set_pending_version(live_version);
+ live_registration->set_waiting_version(live_version);
// Should not be findable, including by GetAllRegistrations.
storage()->FindRegistrationForId(
@@ -404,7 +496,8 @@ TEST_F(ServiceWorkerStorageTest, InstallingRegistrationsAreFindable) {
all_registrations.clear();
// Notify storage of installation no longer happening.
- storage()->NotifyDoneInstallingRegistration(live_registration);
+ storage()->NotifyDoneInstallingRegistration(
+ live_registration, NULL, SERVICE_WORKER_OK);
// Once again, should not be findable.
storage()->FindRegistrationForId(
@@ -441,4 +534,80 @@ TEST_F(ServiceWorkerStorageTest, InstallingRegistrationsAreFindable) {
was_called = false;
}
+TEST_F(ServiceWorkerStorageTest, ResourceIdsAreStoredAndPurged) {
+ storage()->LazyInitialize(base::Bind(&base::DoNothing));
+ base::RunLoop().RunUntilIdle();
+ const GURL kScope("http://www.test.not/scope/*");
+ const GURL kScript("http://www.test.not/script.js");
+ const GURL kImport("http://www.test.not/import.js");
+ const GURL kDocumentUrl("http://www.test.not/scope/document.html");
+ const int64 kRegistrationId = storage()->NewRegistrationId();
+ const int64 kVersionId = storage()->NewVersionId();
+ const int64 kResourceId1 = storage()->NewResourceId();
+ const int64 kResourceId2 = storage()->NewResourceId();
+
+ // Cons up a new registration+version with two script resources.
+ RegistrationData data;
+ data.registration_id = kRegistrationId;
+ data.scope = kScope;
+ data.script = kScript;
+ data.version_id = kVersionId;
+ data.is_active = false;
+ std::vector<ResourceRecord> resources;
+ resources.push_back(ResourceRecord(kResourceId1, kScript));
+ resources.push_back(ResourceRecord(kResourceId2, kImport));
+ scoped_refptr<ServiceWorkerRegistration> registration =
+ storage()->GetOrCreateRegistration(data, resources);
+ registration->waiting_version()->SetStatus(ServiceWorkerVersion::NEW);
+
+ // Add the resources ids to the uncommitted list.
+ std::set<int64> resource_ids;
+ resource_ids.insert(kResourceId1);
+ resource_ids.insert(kResourceId2);
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ storage()->database_->WriteUncommittedResourceIds(resource_ids));
+
+ // And dump something in the disk cache for them.
+ WriteBasicResponse(storage(), kResourceId1);
+ WriteBasicResponse(storage(), kResourceId2);
+ EXPECT_TRUE(VerifyBasicResponse(storage(), kResourceId1, true));
+ EXPECT_TRUE(VerifyBasicResponse(storage(), kResourceId2, true));
+
+ // Storing the registration/version should take the resources ids out
+ // of the uncommitted list.
+ bool was_called = false;
+ ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED;
+ storage()->StoreRegistration(registration, registration->waiting_version(),
+ MakeStatusCallback(&was_called, &result));
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(was_called);
+ EXPECT_EQ(SERVICE_WORKER_OK, result);
+ std::set<int64> verify_ids;
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ storage()->database_->GetUncommittedResourceIds(&verify_ids));
+ EXPECT_TRUE(verify_ids.empty());
+
+ // Deleting it should result in the resources being added to the
+ // purgeable list and then doomed in the disk cache and removed from
+ // that list.
+ was_called = false;
+ verify_ids.clear();
+ storage()->DeleteRegistration(
+ registration->id(), kScope.GetOrigin(),
+ base::Bind(&VerifyPurgeableListStatusCallback,
+ base::Unretained(storage()->database_.get()),
+ &verify_ids, &was_called, &result));
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(was_called);
+ EXPECT_EQ(SERVICE_WORKER_OK, result);
+ EXPECT_EQ(2u, verify_ids.size());
+ verify_ids.clear();
+ EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK,
+ storage()->database_->GetPurgeableResourceIds(&verify_ids));
+ EXPECT_TRUE(verify_ids.empty());
+
+ EXPECT_FALSE(VerifyBasicResponse(storage(), kResourceId1, false));
+ EXPECT_FALSE(VerifyBasicResponse(storage(), kResourceId2, false));
+}
+
} // namespace content
diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
index 37d22d01df..b48b8d96a6 100644
--- a/content/browser/service_worker/service_worker_url_request_job.cc
+++ b/content/browser/service_worker/service_worker_url_request_job.cc
@@ -12,17 +12,22 @@
#include "net/http/http_response_headers.h"
#include "net/http/http_response_info.h"
#include "net/http/http_util.h"
+#include "webkit/browser/blob/blob_data_handle.h"
+#include "webkit/browser/blob/blob_storage_context.h"
+#include "webkit/browser/blob/blob_url_request_job_factory.h"
namespace content {
ServiceWorkerURLRequestJob::ServiceWorkerURLRequestJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
- base::WeakPtr<ServiceWorkerProviderHost> provider_host)
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context)
: net::URLRequestJob(request, network_delegate),
provider_host_(provider_host),
response_type_(NOT_DETERMINED),
is_started_(false),
+ blob_storage_context_(blob_storage_context),
weak_factory_(this) {
}
@@ -46,6 +51,7 @@ void ServiceWorkerURLRequestJob::Start() {
void ServiceWorkerURLRequestJob::Kill() {
net::URLRequestJob::Kill();
fetch_dispatcher_.reset();
+ blob_request_.reset();
weak_factory_.InvalidateWeakPtrs();
}
@@ -94,13 +100,64 @@ void ServiceWorkerURLRequestJob::SetExtraRequestHeaders(
bool ServiceWorkerURLRequestJob::ReadRawData(
net::IOBuffer* buf, int buf_size, int *bytes_read) {
- // TODO(kinuko): Implement this.
- // If the response returned from ServiceWorker had an
- // identifier to on-disk data (e.g. blob or cache entry) we'll need to
- // pull the body from disk.
- NOTIMPLEMENTED();
- *bytes_read = 0;
- return true;
+ if (!blob_request_) {
+ *bytes_read = 0;
+ return true;
+ }
+
+ blob_request_->Read(buf, buf_size, bytes_read);
+ net::URLRequestStatus status = blob_request_->status();
+ SetStatus(status);
+ if (status.is_io_pending())
+ return false;
+ return status.is_success();
+}
+
+void ServiceWorkerURLRequestJob::OnReceivedRedirect(net::URLRequest* request,
+ const GURL& new_url,
+ bool* defer_redirect) {
+ NOTREACHED();
+}
+
+void ServiceWorkerURLRequestJob::OnAuthRequired(
+ net::URLRequest* request,
+ net::AuthChallengeInfo* auth_info) {
+ NOTREACHED();
+}
+
+void ServiceWorkerURLRequestJob::OnCertificateRequested(
+ net::URLRequest* request,
+ net::SSLCertRequestInfo* cert_request_info) {
+ NOTREACHED();
+}
+
+void ServiceWorkerURLRequestJob::OnSSLCertificateError(
+ net::URLRequest* request,
+ const net::SSLInfo& ssl_info,
+ bool fatal) {
+ NOTREACHED();
+}
+
+void ServiceWorkerURLRequestJob::OnBeforeNetworkStart(net::URLRequest* request,
+ bool* defer) {
+ NOTREACHED();
+}
+
+void ServiceWorkerURLRequestJob::OnResponseStarted(net::URLRequest* request) {
+ // TODO(falken): Add Content-Length, Content-Type if they were not provided in
+ // the ServiceWorkerResponse.
+ CommitResponseHeader();
+}
+
+void ServiceWorkerURLRequestJob::OnReadCompleted(net::URLRequest* request,
+ int bytes_read) {
+ if (!request->status().is_success()) {
+ NotifyDone(request->status());
+ return;
+ }
+ NotifyReadComplete(bytes_read);
+ if (bytes_read == 0)
+ NotifyDone(request->status());
}
const net::HttpResponseInfo* ServiceWorkerURLRequestJob::http_info() const {
@@ -183,36 +240,64 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent(
return;
}
- // We should have response now.
+ // We should have a response now.
DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result);
- CreateResponseHeader(response);
- NotifyHeadersComplete();
+ // Set up a request for reading the blob.
+ if (!response.blob_uuid.empty() && blob_storage_context_) {
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle =
+ blob_storage_context_->GetBlobDataFromUUID(response.blob_uuid);
+ if (!blob_data_handle) {
+ // The renderer gave us a bad blob UUID.
+ DeliverErrorResponse();
+ return;
+ }
+ blob_request_ = webkit_blob::BlobProtocolHandler::CreateBlobRequest(
+ blob_data_handle.Pass(), request()->context(), this);
+ blob_request_->Start();
+ }
+
+ CreateResponseHeader(
+ response.status_code, response.status_text, response.headers);
+ if (!blob_request_)
+ CommitResponseHeader();
}
void ServiceWorkerURLRequestJob::CreateResponseHeader(
- const ServiceWorkerResponse& response) {
+ int status_code,
+ const std::string& status_text,
+ const std::map<std::string, std::string>& headers) {
// TODO(kinuko): If the response has an identifier to on-disk cache entry,
// pull response header from the disk.
- std::string status_line(base::StringPrintf("HTTP/1.1 %d %s",
- response.status_code,
- response.status_text.c_str()));
+ std::string status_line(
+ base::StringPrintf("HTTP/1.1 %d %s", status_code, status_text.c_str()));
status_line.push_back('\0');
- scoped_refptr<net::HttpResponseHeaders> headers(
- new net::HttpResponseHeaders(status_line));
- for (std::map<std::string, std::string>::const_iterator it =
- response.headers.begin();
- it != response.headers.end(); ++it) {
+ http_response_headers_ = new net::HttpResponseHeaders(status_line);
+ for (std::map<std::string, std::string>::const_iterator it = headers.begin();
+ it != headers.end();
+ ++it) {
std::string header;
header.reserve(it->first.size() + 2 + it->second.size());
header.append(it->first);
header.append(": ");
header.append(it->second);
- headers->AddHeader(header);
+ http_response_headers_->AddHeader(header);
}
+}
+void ServiceWorkerURLRequestJob::CommitResponseHeader() {
http_response_info_.reset(new net::HttpResponseInfo());
- http_response_info_->headers = headers;
+ http_response_info_->headers.swap(http_response_headers_);
+ NotifyHeadersComplete();
+}
+
+void ServiceWorkerURLRequestJob::DeliverErrorResponse() {
+ // TODO(falken): Print an error to the console of the ServiceWorker and of
+ // the requesting page.
+ CreateResponseHeader(500,
+ "Service Worker Response Error",
+ std::map<std::string, std::string>());
+ CommitResponseHeader();
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_url_request_job.h b/content/browser/service_worker/service_worker_url_request_job.h
index f0a24adfa2..498058cffb 100644
--- a/content/browser/service_worker/service_worker_url_request_job.h
+++ b/content/browser/service_worker/service_worker_url_request_job.h
@@ -10,8 +10,13 @@
#include "content/common/service_worker/service_worker_status_code.h"
#include "content/common/service_worker/service_worker_types.h"
#include "net/http/http_byte_range.h"
+#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
+namespace webkit_blob {
+class BlobStorageContext;
+}
+
namespace content {
class ServiceWorkerContextCore;
@@ -19,12 +24,14 @@ class ServiceWorkerFetchDispatcher;
class ServiceWorkerProviderHost;
class CONTENT_EXPORT ServiceWorkerURLRequestJob
- : public net::URLRequestJob {
+ : public net::URLRequestJob,
+ public net::URLRequest::Delegate {
public:
ServiceWorkerURLRequestJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
- base::WeakPtr<ServiceWorkerProviderHost> provider_host);
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context);
// Sets the response type.
void FallbackToNetwork();
@@ -51,6 +58,25 @@ class CONTENT_EXPORT ServiceWorkerURLRequestJob
int buf_size,
int *bytes_read) OVERRIDE;
+ // net::URLRequest::Delegate overrides that read the blob from the
+ // ServiceWorkerFetchResponse.
+ virtual void OnReceivedRedirect(net::URLRequest* request,
+ const GURL& new_url,
+ bool* defer_redirect) OVERRIDE;
+ virtual void OnAuthRequired(net::URLRequest* request,
+ net::AuthChallengeInfo* auth_info) OVERRIDE;
+ virtual void OnCertificateRequested(
+ net::URLRequest* request,
+ net::SSLCertRequestInfo* cert_request_info) OVERRIDE;
+ virtual void OnSSLCertificateError(net::URLRequest* request,
+ const net::SSLInfo& ssl_info,
+ bool fatal) OVERRIDE;
+ virtual void OnBeforeNetworkStart(net::URLRequest* request,
+ bool* defer) OVERRIDE;
+ virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
+ virtual void OnReadCompleted(net::URLRequest* request,
+ int bytes_read) OVERRIDE;
+
const net::HttpResponseInfo* http_info() const;
protected:
@@ -73,7 +99,17 @@ class CONTENT_EXPORT ServiceWorkerURLRequestJob
ServiceWorkerFetchEventResult fetch_result,
const ServiceWorkerResponse& response);
- void CreateResponseHeader(const ServiceWorkerResponse& response);
+ // Populates |http_response_headers_|.
+ void CreateResponseHeader(int status_code,
+ const std::string& status_text,
+ const std::map<std::string, std::string>& headers);
+
+ // Creates |http_response_info_| using |http_response_headers_| and calls
+ // NotifyHeadersComplete.
+ void CommitResponseHeader();
+
+ // Creates and commits a response header indicating error.
+ void DeliverErrorResponse();
base::WeakPtr<ServiceWorkerProviderHost> provider_host_;
@@ -83,9 +119,13 @@ class CONTENT_EXPORT ServiceWorkerURLRequestJob
net::HttpByteRange byte_range_;
scoped_ptr<net::HttpResponseInfo> range_response_info_;
scoped_ptr<net::HttpResponseInfo> http_response_info_;
+ // Headers that have not yet been committed to |http_response_info_|.
+ scoped_refptr<net::HttpResponseHeaders> http_response_headers_;
// Used when response type is FORWARD_TO_SERVICE_WORKER.
scoped_ptr<ServiceWorkerFetchDispatcher> fetch_dispatcher_;
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context_;
+ scoped_ptr<net::URLRequest> blob_request_;
base::WeakPtrFactory<ServiceWorkerURLRequestJob> weak_factory_;
diff --git a/content/browser/service_worker/service_worker_url_request_job_unittest.cc b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
index 931cace061..54a2cc966f 100644
--- a/content/browser/service_worker/service_worker_url_request_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
@@ -5,7 +5,10 @@
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
+#include "content/browser/fileapi/chrome_blob_storage_context.h"
+#include "content/browser/fileapi/mock_url_request_delegate.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
#include "content/browser/service_worker/embedded_worker_test_helper.h"
#include "content/browser/service_worker/service_worker_context_core.h"
@@ -14,6 +17,9 @@
#include "content/browser/service_worker/service_worker_test_utils.h"
#include "content/browser/service_worker/service_worker_url_request_job.h"
#include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/service_worker/service_worker_messages.h"
+#include "content/public/browser/blob_handle.h"
+#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "net/base/io_buffer.h"
#include "net/http/http_request_headers.h"
@@ -22,74 +28,71 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job_factory_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/blob/blob_storage_context.h"
+#include "webkit/browser/blob/blob_url_request_job.h"
+#include "webkit/browser/blob/blob_url_request_job_factory.h"
+#include "webkit/common/blob/blob_data.h"
namespace content {
+class ServiceWorkerURLRequestJobTest;
+
namespace {
-const int kBufferSize = 1024;
const int kProcessID = 1;
const int kProviderID = 100;
+const char kTestData[] = "Here is sample text for the blob.";
-class MockURLRequestDelegate : public net::URLRequest::Delegate {
- public:
- MockURLRequestDelegate() : received_data_(new net::IOBuffer(kBufferSize)) {}
- virtual ~MockURLRequestDelegate() {}
- virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE {
- if (request->status().is_success()) {
- EXPECT_TRUE(request->response_headers());
- Read(request);
- }
- }
- virtual void OnReadCompleted(net::URLRequest* request,
- int bytes_read) OVERRIDE {
- EXPECT_EQ(0, bytes_read);
- }
-
- private:
- void Read(net::URLRequest* request) {
- if (request->is_pending()) {
- int bytes_read = 0;
- request->Read(received_data_.get(), kBufferSize, &bytes_read);
- // For now ServiceWorkerURLRequestJob wouldn't return
- // any content data yet.
- EXPECT_EQ(0, bytes_read);
- }
- }
-
- scoped_refptr<net::IOBuffer> received_data_;
- base::Closure on_complete_;
-};
-
-class MockProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
+class MockHttpProtocolHandler
+ : public net::URLRequestJobFactory::ProtocolHandler {
public:
- MockProtocolHandler(base::WeakPtr<ServiceWorkerProviderHost> provider_host)
- : provider_host_(provider_host) {}
- virtual ~MockProtocolHandler() {}
+ MockHttpProtocolHandler(
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host,
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context)
+ : provider_host_(provider_host),
+ blob_storage_context_(blob_storage_context) {}
+ virtual ~MockHttpProtocolHandler() {}
virtual net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const OVERRIDE {
ServiceWorkerURLRequestJob* job = new ServiceWorkerURLRequestJob(
- request, network_delegate, provider_host_);
+ request, network_delegate, provider_host_, blob_storage_context_);
job->ForwardToServiceWorker();
return job;
}
private:
base::WeakPtr<ServiceWorkerProviderHost> provider_host_;
+ base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context_;
};
+// Returns a BlobProtocolHandler that uses |blob_storage_context|. Caller owns
+// the memory.
+webkit_blob::BlobProtocolHandler* CreateMockBlobProtocolHandler(
+ webkit_blob::BlobStorageContext* blob_storage_context) {
+ // The FileSystemContext and MessageLoopProxy are not actually used but a
+ // MessageLoopProxy is needed to avoid a DCHECK in BlobURLRequestJob ctor.
+ return new webkit_blob::BlobProtocolHandler(
+ blob_storage_context, NULL, base::MessageLoopProxy::current().get());
+}
+
} // namespace
class ServiceWorkerURLRequestJobTest : public testing::Test {
protected:
ServiceWorkerURLRequestJobTest()
- : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
+ : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
+ blob_data_(new webkit_blob::BlobData("blob-id:myblob")) {}
virtual ~ServiceWorkerURLRequestJobTest() {}
virtual void SetUp() OVERRIDE {
- helper_.reset(new EmbeddedWorkerTestHelper(kProcessID));
+ browser_context_.reset(new TestBrowserContext);
+ SetUpWithHelper(new EmbeddedWorkerTestHelper(kProcessID));
+ }
+
+ void SetUpWithHelper(EmbeddedWorkerTestHelper* helper) {
+ helper_.reset(helper);
registration_ = new ServiceWorkerRegistration(
GURL("http://example.com/*"),
@@ -104,9 +107,21 @@ class ServiceWorkerURLRequestJobTest : public testing::Test {
kProcessID, kProviderID, helper_->context()->AsWeakPtr(), NULL));
provider_host->SetActiveVersion(version_.get());
- url_request_job_factory_.SetProtocolHandler(
- "http", new MockProtocolHandler(provider_host->AsWeakPtr()));
- url_request_context_.set_job_factory(&url_request_job_factory_);
+ ChromeBlobStorageContext* chrome_blob_storage_context =
+ ChromeBlobStorageContext::GetFor(browser_context_.get());
+ // Wait for chrome_blob_storage_context to finish initializing.
+ base::RunLoop().RunUntilIdle();
+ webkit_blob::BlobStorageContext* blob_storage_context =
+ chrome_blob_storage_context->context();
+
+ url_request_job_factory_.reset(new net::URLRequestJobFactoryImpl);
+ url_request_job_factory_->SetProtocolHandler(
+ "http",
+ new MockHttpProtocolHandler(provider_host->AsWeakPtr(),
+ blob_storage_context->AsWeakPtr()));
+ url_request_job_factory_->SetProtocolHandler(
+ "blob", CreateMockBlobProtocolHandler(blob_storage_context));
+ url_request_context_.set_job_factory(url_request_job_factory_.get());
helper_->context()->AddProviderHost(provider_host.Pass());
}
@@ -117,7 +132,9 @@ class ServiceWorkerURLRequestJobTest : public testing::Test {
helper_.reset();
}
- void TestRequest() {
+ void TestRequest(int expected_status_code,
+ const std::string& expected_status_text,
+ const std::string& expected_response) {
request_ = url_request_context_.CreateRequest(
GURL("http://example.com/foo.html"),
net::DEFAULT_PRIORITY,
@@ -127,29 +144,34 @@ class ServiceWorkerURLRequestJobTest : public testing::Test {
request_->set_method("GET");
request_->Start();
base::RunLoop().RunUntilIdle();
-
- // Verify response.
EXPECT_TRUE(request_->status().is_success());
- EXPECT_EQ(200, request_->response_headers()->response_code());
+ EXPECT_EQ(expected_status_code,
+ request_->response_headers()->response_code());
+ EXPECT_EQ(expected_status_text,
+ request_->response_headers()->GetStatusText());
+ EXPECT_EQ(expected_response, url_request_delegate_.response_data());
}
TestBrowserThreadBundle thread_bundle_;
+ scoped_ptr<TestBrowserContext> browser_context_;
scoped_ptr<EmbeddedWorkerTestHelper> helper_;
scoped_refptr<ServiceWorkerRegistration> registration_;
scoped_refptr<ServiceWorkerVersion> version_;
- net::URLRequestJobFactoryImpl url_request_job_factory_;
+ scoped_ptr<net::URLRequestJobFactoryImpl> url_request_job_factory_;
net::URLRequestContext url_request_context_;
MockURLRequestDelegate url_request_delegate_;
scoped_ptr<net::URLRequest> request_;
+ scoped_refptr<webkit_blob::BlobData> blob_data_;
+
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerURLRequestJobTest);
};
TEST_F(ServiceWorkerURLRequestJobTest, Simple) {
version_->SetStatus(ServiceWorkerVersion::ACTIVE);
- TestRequest();
+ TestRequest(200, "OK", std::string());
}
TEST_F(ServiceWorkerURLRequestJobTest, WaitForActivation) {
@@ -157,11 +179,59 @@ TEST_F(ServiceWorkerURLRequestJobTest, WaitForActivation) {
version_->SetStatus(ServiceWorkerVersion::INSTALLED);
version_->DispatchActivateEvent(CreateReceiverOnCurrentThread(&status));
- TestRequest();
+ TestRequest(200, "OK", std::string());
EXPECT_EQ(SERVICE_WORKER_OK, status);
}
+// Responds to fetch events with a blob.
+class BlobResponder : public EmbeddedWorkerTestHelper {
+ public:
+ BlobResponder(int mock_render_process_id, const std::string& blob_uuid)
+ : EmbeddedWorkerTestHelper(mock_render_process_id),
+ blob_uuid_(blob_uuid) {}
+ virtual ~BlobResponder() {}
+
+ protected:
+ virtual void OnFetchEvent(int embedded_worker_id,
+ int request_id,
+ const ServiceWorkerFetchRequest& request) OVERRIDE {
+ SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished(
+ embedded_worker_id,
+ request_id,
+ SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
+ ServiceWorkerResponse(200,
+ "OK",
+ std::map<std::string, std::string>(),
+ blob_uuid_)));
+ }
+
+ std::string blob_uuid_;
+ DISALLOW_COPY_AND_ASSIGN(BlobResponder);
+};
+
+TEST_F(ServiceWorkerURLRequestJobTest, BlobResponse) {
+ ChromeBlobStorageContext* blob_storage_context =
+ ChromeBlobStorageContext::GetFor(browser_context_.get());
+ std::string expected_response;
+ for (int i = 0; i < 1024; ++i) {
+ blob_data_->AppendData(kTestData);
+ expected_response += kTestData;
+ }
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_handle =
+ blob_storage_context->context()->AddFinishedBlob(blob_data_);
+ SetUpWithHelper(new BlobResponder(kProcessID, blob_handle->uuid()));
+
+ version_->SetStatus(ServiceWorkerVersion::ACTIVE);
+ TestRequest(200, "OK", expected_response);
+}
+
+TEST_F(ServiceWorkerURLRequestJobTest, NonExistentBlobUUIDResponse) {
+ SetUpWithHelper(new BlobResponder(kProcessID, "blob-id:nothing-is-here"));
+ version_->SetStatus(ServiceWorkerVersion::ACTIVE);
+ TestRequest(500, "Service Worker Response Error", std::string());
+}
+
// TODO(kinuko): Add more tests with different response data and also for
// FallbackToNetwork case.
diff --git a/content/browser/service_worker/service_worker_utils.cc b/content/browser/service_worker/service_worker_utils.cc
index e05c546d73..165bcbec56 100644
--- a/content/browser/service_worker/service_worker_utils.cc
+++ b/content/browser/service_worker/service_worker_utils.cc
@@ -5,7 +5,7 @@
#include "content/browser/service_worker/service_worker_utils.h"
#include "base/command_line.h"
-#include "base/strings/string_util.h"
+#include "base/logging.h"
#include "content/public/common/content_switches.h"
namespace content {
@@ -19,15 +19,15 @@ bool ServiceWorkerUtils::IsFeatureEnabled() {
// static
bool ServiceWorkerUtils::ScopeMatches(const GURL& scope, const GURL& url) {
- // This is a really basic, naive
- // TODO(alecflett): Formalize what scope matches mean.
- // Temporarily borrowed directly from appcache::Namespace::IsMatch().
- // We have to escape '?' characters since MatchPattern also treats those
- // as wildcards which we don't want here, we only do '*'s.
- std::string scope_spec(scope.spec());
- if (scope.has_query())
- ReplaceSubstringsAfterOffset(&scope_spec, 0, "?", "\\?");
- return MatchPattern(url.spec(), scope_spec);
+ DCHECK(!scope.has_ref());
+ DCHECK(!url.has_ref());
+ const std::string& scope_spec = scope.spec();
+ const std::string& url_spec = url.spec();
+
+ size_t len = scope_spec.size();
+ if (len > 0 && scope_spec[len - 1] == '*')
+ return scope_spec.compare(0, len - 1, url_spec, 0, len - 1) == 0;
+ return scope_spec == url_spec;
}
} // namespace content
diff --git a/content/browser/service_worker/service_worker_utils_unittest.cc b/content/browser/service_worker/service_worker_utils_unittest.cc
index 7667d8bfdc..d6e0ba1a02 100644
--- a/content/browser/service_worker/service_worker_utils_unittest.cc
+++ b/content/browser/service_worker/service_worker_utils_unittest.cc
@@ -30,6 +30,7 @@ TEST(ServiceWorkerUtilsTest, ScopeMatches) {
ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(
GURL("http://www.example.com/"), GURL("http://www.example.com/x")));
+ // '?' is not a wildcard.
ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(
GURL("http://www.example.com/?"), GURL("http://www.example.com/x")));
ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(
@@ -39,6 +40,30 @@ TEST(ServiceWorkerUtilsTest, ScopeMatches) {
ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches(
GURL("http://www.example.com/?"), GURL("http://www.example.com/?")));
+ // Query string is part of the resource.
+ ASSERT_TRUE(
+ ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/?a=b"),
+ GURL("http://www.example.com/?a=b")));
+ ASSERT_TRUE(
+ ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/?a=*"),
+ GURL("http://www.example.com/?a=b")));
+ ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches(
+ GURL("http://www.example.com/*"), GURL("http://www.example.com/?a=b")));
+ ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(
+ GURL("http://www.example.com/"), GURL("http://www.example.com/?a=b")));
+
+ // '*' only has special meaning in terminal position.
+ ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches(
+ GURL("http://www.example.com/*/x"), GURL("http://www.example.com/*/x")));
+ ASSERT_FALSE(ServiceWorkerUtils::ScopeMatches(
+ GURL("http://www.example.com/*/x"), GURL("http://www.example.com/a/x")));
+ ASSERT_FALSE(
+ ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/*/x/*"),
+ GURL("http://www.example.com/a/x/b")));
+ ASSERT_TRUE(
+ ServiceWorkerUtils::ScopeMatches(GURL("http://www.example.com/*/x/*"),
+ GURL("http://www.example.com/*/x/b")));
+
// URLs canonicalize \ to / so this is equivalent to "...//*" and "...//x"
ASSERT_TRUE(ServiceWorkerUtils::ScopeMatches(
GURL("http://www.example.com/\\*"), GURL("http://www.example.com/\\x")));
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 66ca883075..8f6ee72298 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -11,6 +11,7 @@
#include "content/browser/service_worker/embedded_worker_registry.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_registration.h"
+#include "content/browser/service_worker/service_worker_utils.h"
#include "content/common/service_worker/service_worker_messages.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/content_switches.h"
@@ -22,6 +23,12 @@ typedef ServiceWorkerVersion::MessageCallback MessageCallback;
namespace {
+// Default delay to stop the worker context after all documents that
+// are associated to the worker are closed.
+// (Note that if all references to the version is dropped the worker
+// is also stopped without delay)
+const int64 kStopWorkerDelay = 30; // 30 secs.
+
void RunSoon(const base::Closure& callback) {
if (!callback.is_null())
base::MessageLoop::current()->PostTask(FROM_HERE, callback);
@@ -88,8 +95,10 @@ ServiceWorkerVersion::ServiceWorkerVersion(
registration_id_(kInvalidServiceWorkerVersionId),
status_(NEW),
context_(context),
+ script_cache_map_(this, context),
weak_factory_(this) {
DCHECK(context_);
+ DCHECK(registration);
if (registration) {
registration_id_ = registration->id();
script_url_ = registration->script_url();
@@ -101,12 +110,10 @@ ServiceWorkerVersion::ServiceWorkerVersion(
}
ServiceWorkerVersion::~ServiceWorkerVersion() {
- if (embedded_worker_) {
- embedded_worker_->RemoveListener(this);
- embedded_worker_.reset();
- }
+ embedded_worker_->RemoveListener(this);
if (context_)
context_->RemoveLiveVersion(version_id_);
+ // EmbeddedWorker's dtor sends StopWorker if it's still running.
}
void ServiceWorkerVersion::SetStatus(Status status) {
@@ -132,11 +139,13 @@ void ServiceWorkerVersion::RegisterStatusChangeCallback(
ServiceWorkerVersionInfo ServiceWorkerVersion::GetInfo() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return ServiceWorkerVersionInfo(running_status(),
- status(),
- version_id(),
- embedded_worker()->process_id(),
- embedded_worker()->thread_id());
+ return ServiceWorkerVersionInfo(
+ running_status(),
+ status(),
+ version_id(),
+ embedded_worker()->process_id(),
+ embedded_worker()->thread_id(),
+ embedded_worker()->worker_devtools_agent_route_id());
}
void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
@@ -146,7 +155,6 @@ void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
void ServiceWorkerVersion::StartWorkerWithCandidateProcesses(
const std::vector<int>& possible_process_ids,
const StatusCallback& callback) {
- DCHECK(embedded_worker_);
switch (running_status()) {
case RUNNING:
RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
@@ -171,7 +179,6 @@ void ServiceWorkerVersion::StartWorkerWithCandidateProcesses(
}
void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) {
- DCHECK(embedded_worker_);
if (running_status() == STOPPED) {
RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
return;
@@ -188,7 +195,6 @@ void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) {
void ServiceWorkerVersion::SendMessage(
const IPC::Message& message, const StatusCallback& callback) {
- DCHECK(embedded_worker_);
if (running_status() != RUNNING) {
// Schedule calling this method after starting the worker.
StartWorker(base::Bind(&RunTaskAfterStartWorker,
@@ -316,6 +322,8 @@ void ServiceWorkerVersion::AddControllee(
int controllee_id = controllee_by_id_.Add(provider_host);
controllee_map_[provider_host] = controllee_id;
AddProcessToWorker(provider_host->process_id());
+ if (stop_worker_timer_.IsRunning())
+ stop_worker_timer_.Stop();
}
void ServiceWorkerVersion::RemoveControllee(
@@ -325,6 +333,8 @@ void ServiceWorkerVersion::RemoveControllee(
controllee_by_id_.Remove(found->second);
controllee_map_.erase(found);
RemoveProcessFromWorker(provider_host->process_id());
+ if (!HasControllee())
+ ScheduleStopWorker();
// TODO(kinuko): Fire NoControllees notification when the # of controllees
// reaches 0, so that a new pending version can be activated (which will
// deactivate this version).
@@ -333,12 +343,12 @@ void ServiceWorkerVersion::RemoveControllee(
// NoControllees for versions that have been deleted.
}
-void ServiceWorkerVersion::AddPendingControllee(
+void ServiceWorkerVersion::AddWaitingControllee(
ServiceWorkerProviderHost* provider_host) {
AddProcessToWorker(provider_host->process_id());
}
-void ServiceWorkerVersion::RemovePendingControllee(
+void ServiceWorkerVersion::RemoveWaitingControllee(
ServiceWorkerProviderHost* provider_host) {
RemoveProcessFromWorker(provider_host->process_id());
}
@@ -550,20 +560,6 @@ void ServiceWorkerVersion::OnSyncEventFinished(
sync_callbacks_.Remove(request_id);
}
-void ServiceWorkerVersion::AddToScriptCache(
- const GURL& url, int64 resource_id) {
- DCHECK_EQ(kInvalidServiceWorkerResponseId, LookupInScriptCache(url));
- DCHECK_EQ(NEW, status_);
- script_cache_map_[url] = resource_id;
-}
-
-int64 ServiceWorkerVersion::LookupInScriptCache(const GURL& url) {
- ResourceIDMap::const_iterator found = script_cache_map_.find(url);
- if (found == script_cache_map_.end())
- return kInvalidServiceWorkerResponseId;
- return found->second;
-}
-
void ServiceWorkerVersion::OnPostMessageToDocument(
int client_id,
const base::string16& message,
@@ -577,4 +573,18 @@ void ServiceWorkerVersion::OnPostMessageToDocument(
provider_host->PostMessage(message, sent_message_port_ids);
}
+void ServiceWorkerVersion::ScheduleStopWorker() {
+ if (running_status() != RUNNING)
+ return;
+ if (stop_worker_timer_.IsRunning()) {
+ stop_worker_timer_.Reset();
+ return;
+ }
+ stop_worker_timer_.Start(
+ FROM_HERE, base::TimeDelta::FromSeconds(kStopWorkerDelay),
+ base::Bind(&ServiceWorkerVersion::StopWorker,
+ weak_factory_.GetWeakPtr(),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)));
+}
+
} // namespace content
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index 84ecc011ad..621ae7a40e 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -14,7 +14,9 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
+#include "base/timer/timer.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
+#include "content/browser/service_worker/service_worker_script_cache_map.h"
#include "content/common/content_export.h"
#include "content/common/service_worker/service_worker_status_code.h"
#include "content/common/service_worker/service_worker_types.h"
@@ -95,13 +97,12 @@ class CONTENT_EXPORT ServiceWorkerVersion
int64 version_id() const { return version_id_; }
int64 registration_id() const { return registration_id_; }
-
+ const GURL& script_url() const { return script_url_; }
+ const GURL& scope() const { return scope_; }
RunningStatus running_status() const {
return static_cast<RunningStatus>(embedded_worker_->status());
}
-
ServiceWorkerVersionInfo GetInfo();
-
Status status() const { return status_; }
// This sets the new status and also run status change callbacks
@@ -186,18 +187,27 @@ class CONTENT_EXPORT ServiceWorkerVersion
// Adds and removes |provider_host| as a controllee of this ServiceWorker.
void AddControllee(ServiceWorkerProviderHost* provider_host);
void RemoveControllee(ServiceWorkerProviderHost* provider_host);
- void AddPendingControllee(ServiceWorkerProviderHost* provider_host);
- void RemovePendingControllee(ServiceWorkerProviderHost* provider_host);
+ void AddWaitingControllee(ServiceWorkerProviderHost* provider_host);
+ void RemoveWaitingControllee(ServiceWorkerProviderHost* provider_host);
- // Returns if it has (non-pending) controllee.
+ // Returns if it has controllee.
bool HasControllee() const { return !controllee_map_.empty(); }
// Adds and removes Listeners.
void AddListener(Listener* listener);
void RemoveListener(Listener* listener);
+ ServiceWorkerScriptCacheMap* script_cache_map() { return &script_cache_map_; }
EmbeddedWorkerInstance* embedded_worker() { return embedded_worker_.get(); }
+ private:
+ typedef ServiceWorkerVersion self;
+ typedef std::map<ServiceWorkerProviderHost*, int> ControlleeMap;
+ typedef IDMap<ServiceWorkerProviderHost> ControlleeByIDMap;
+ friend class base::RefCounted<ServiceWorkerVersion>;
+
+ virtual ~ServiceWorkerVersion();
+
// EmbeddedWorkerInstance::Listener overrides:
virtual void OnStarted() OVERRIDE;
virtual void OnStopped() OVERRIDE;
@@ -212,18 +222,6 @@ class CONTENT_EXPORT ServiceWorkerVersion
const GURL& source_url) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- void AddToScriptCache(const GURL& url, int64 resource_id);
- int64 LookupInScriptCache(const GURL& url);
-
- private:
- typedef ServiceWorkerVersion self;
- typedef std::map<ServiceWorkerProviderHost*, int> ControlleeMap;
- typedef IDMap<ServiceWorkerProviderHost> ControlleeByIDMap;
- typedef std::map<GURL, int64> ResourceIDMap;
- friend class base::RefCounted<ServiceWorkerVersion>;
-
- virtual ~ServiceWorkerVersion();
-
void RunStartWorkerCallbacksOnError(ServiceWorkerStatusCode status);
void DispatchInstallEventAfterStartWorker(int active_version_id,
@@ -244,6 +242,8 @@ class CONTENT_EXPORT ServiceWorkerVersion
const base::string16& message,
const std::vector<int>& sent_message_port_ids);
+ void ScheduleStopWorker();
+
const int64 version_id_;
int64 registration_id_;
GURL script_url_;
@@ -264,8 +264,8 @@ class CONTENT_EXPORT ServiceWorkerVersion
ControlleeByIDMap controllee_by_id_;
base::WeakPtr<ServiceWorkerContextCore> context_;
ObserverList<Listener> listeners_;
-
- ResourceIDMap script_cache_map_;
+ ServiceWorkerScriptCacheMap script_cache_map_;
+ base::OneShotTimer<ServiceWorkerVersion> stop_worker_timer_;
base::WeakPtrFactory<ServiceWorkerVersion> weak_factory_;
diff --git a/content/browser/service_worker/service_worker_write_to_cache_job.cc b/content/browser/service_worker/service_worker_write_to_cache_job.cc
new file mode 100644
index 0000000000..313e3a4796
--- /dev/null
+++ b/content/browser/service_worker/service_worker_write_to_cache_job.cc
@@ -0,0 +1,320 @@
+// 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 "content/browser/service_worker/service_worker_write_to_cache_job.h"
+
+#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_disk_cache.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_request_headers.h"
+#include "net/http/http_response_headers.h"
+#include "net/http/http_util.h"
+#include "net/url_request/url_request.h"
+#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_status.h"
+
+namespace content {
+
+ServiceWorkerWriteToCacheJob::ServiceWorkerWriteToCacheJob(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ ServiceWorkerVersion* version,
+ int64 response_id)
+ : net::URLRequestJob(request, network_delegate),
+ context_(context),
+ url_(request->url()),
+ response_id_(response_id),
+ version_(version),
+ has_been_killed_(false),
+ did_notify_started_(false),
+ did_notify_finished_(false),
+ weak_factory_(this) {
+ InitNetRequest();
+}
+
+ServiceWorkerWriteToCacheJob::~ServiceWorkerWriteToCacheJob() {
+ DCHECK_EQ(did_notify_started_, did_notify_finished_);
+}
+
+void ServiceWorkerWriteToCacheJob::Start() {
+ if (!context_) {
+ NotifyStartError(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ return;
+ }
+ version_->script_cache_map()->NotifyStartedCaching(
+ url_, response_id_);
+ did_notify_started_ = true;
+ StartNetRequest();
+}
+
+void ServiceWorkerWriteToCacheJob::Kill() {
+ if (has_been_killed_)
+ return;
+ weak_factory_.InvalidateWeakPtrs();
+ has_been_killed_ = true;
+ net_request_.reset();
+ if (did_notify_started_ && !did_notify_finished_) {
+ version_->script_cache_map()->NotifyFinishedCaching(
+ url_, false);
+ did_notify_finished_ = true;
+ }
+ writer_.reset();
+ context_.reset();
+ net::URLRequestJob::Kill();
+}
+
+net::LoadState ServiceWorkerWriteToCacheJob::GetLoadState() const {
+ if (writer_ && writer_->IsWritePending())
+ return net::LOAD_STATE_WAITING_FOR_APPCACHE;
+ if (net_request_)
+ return net_request_->GetLoadState().state;
+ return net::LOAD_STATE_IDLE;
+}
+
+bool ServiceWorkerWriteToCacheJob::GetCharset(std::string* charset) {
+ if (!http_info())
+ return false;
+ return http_info()->headers->GetCharset(charset);
+}
+
+bool ServiceWorkerWriteToCacheJob::GetMimeType(std::string* mime_type) const {
+ if (!http_info())
+ return false;
+ return http_info()->headers->GetMimeType(mime_type);
+}
+
+void ServiceWorkerWriteToCacheJob::GetResponseInfo(
+ net::HttpResponseInfo* info) {
+ if (!http_info())
+ return;
+ *info = *http_info();
+}
+
+int ServiceWorkerWriteToCacheJob::GetResponseCode() const {
+ if (!http_info())
+ return -1;
+ return http_info()->headers->response_code();
+}
+
+void ServiceWorkerWriteToCacheJob::SetExtraRequestHeaders(
+ const net::HttpRequestHeaders& headers) {
+ std::string value;
+ DCHECK(!headers.GetHeader(net::HttpRequestHeaders::kRange, &value));
+ net_request_->SetExtraRequestHeaders(headers);
+}
+
+bool ServiceWorkerWriteToCacheJob::ReadRawData(
+ net::IOBuffer* buf,
+ int buf_size,
+ int *bytes_read) {
+ net::URLRequestStatus status = ReadNetData(buf, buf_size, bytes_read);
+ SetStatus(status);
+ if (status.is_io_pending())
+ return false;
+
+ // No more data to process, the job is complete.
+ io_buffer_ = NULL;
+ version_->script_cache_map()->NotifyFinishedCaching(
+ url_, status.is_success());
+ did_notify_finished_ = true;
+ return status.is_success();
+}
+
+const net::HttpResponseInfo* ServiceWorkerWriteToCacheJob::http_info() const {
+ return http_info_.get();
+}
+
+void ServiceWorkerWriteToCacheJob::InitNetRequest() {
+ DCHECK(request());
+ net_request_ = request()->context()->CreateRequest(
+ request()->url(),
+ request()->priority(),
+ this,
+ this->GetCookieStore());
+ net_request_->set_first_party_for_cookies(
+ request()->first_party_for_cookies());
+ net_request_->SetReferrer(request()->referrer());
+ net_request_->SetExtraRequestHeaders(request()->extra_request_headers());
+}
+
+void ServiceWorkerWriteToCacheJob::StartNetRequest() {
+ net_request_->Start(); // We'll continue in OnResponseStarted.
+}
+
+net::URLRequestStatus ServiceWorkerWriteToCacheJob::ReadNetData(
+ net::IOBuffer* buf,
+ int buf_size,
+ int *bytes_read) {
+ DCHECK_GT(buf_size, 0);
+ DCHECK(bytes_read);
+
+ *bytes_read = 0;
+ io_buffer_ = buf;
+ int net_bytes_read = 0;
+ if (!net_request_->Read(buf, buf_size, &net_bytes_read)) {
+ if (net_request_->status().is_io_pending())
+ return net_request_->status();
+ DCHECK(!net_request_->status().is_success());
+ return net_request_->status();
+ }
+
+ if (net_bytes_read != 0) {
+ WriteDataToCache(net_bytes_read);
+ DCHECK(GetStatus().is_io_pending());
+ return GetStatus();
+ }
+
+ DCHECK(net_request_->status().is_success());
+ return net_request_->status();
+}
+
+void ServiceWorkerWriteToCacheJob::WriteHeadersToCache() {
+ if (!context_) {
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ return;
+ }
+ writer_ = context_->storage()->CreateResponseWriter(response_id_);
+ info_buffer_ = new HttpResponseInfoIOBuffer(
+ new net::HttpResponseInfo(net_request_->response_info()));
+ writer_->WriteInfo(
+ info_buffer_,
+ base::Bind(&ServiceWorkerWriteToCacheJob::OnWriteHeadersComplete,
+ weak_factory_.GetWeakPtr()));
+ SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0));
+}
+
+void ServiceWorkerWriteToCacheJob::OnWriteHeadersComplete(int result) {
+ SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status
+ if (result < 0) {
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, result));
+ return;
+ }
+ http_info_.reset(info_buffer_->http_info.release());
+ info_buffer_ = NULL;
+ NotifyHeadersComplete();
+}
+
+void ServiceWorkerWriteToCacheJob::WriteDataToCache(int amount_to_write) {
+ DCHECK_NE(0, amount_to_write);
+ SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0));
+ writer_->WriteData(
+ io_buffer_, amount_to_write,
+ base::Bind(&ServiceWorkerWriteToCacheJob::OnWriteDataComplete,
+ weak_factory_.GetWeakPtr()));
+}
+
+void ServiceWorkerWriteToCacheJob::OnWriteDataComplete(int result) {
+ DCHECK_NE(0, result);
+ io_buffer_ = NULL;
+ if (!context_) {
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ return;
+ }
+ if (result < 0) {
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, result));
+ return;
+ }
+ SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status
+ NotifyReadComplete(result);
+}
+
+void ServiceWorkerWriteToCacheJob::OnReceivedRedirect(
+ net::URLRequest* request,
+ const GURL& new_url,
+ bool* defer_redirect) {
+ DCHECK_EQ(net_request_, request);
+ // Script resources can't redirect.
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+}
+
+void ServiceWorkerWriteToCacheJob::OnAuthRequired(
+ net::URLRequest* request,
+ net::AuthChallengeInfo* auth_info) {
+ DCHECK_EQ(net_request_, request);
+ // TODO(michaeln): Pass this thru to our jobs client.
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+}
+
+void ServiceWorkerWriteToCacheJob::OnCertificateRequested(
+ net::URLRequest* request,
+ net::SSLCertRequestInfo* cert_request_info) {
+ DCHECK_EQ(net_request_, request);
+ // TODO(michaeln): Pass this thru to our jobs client.
+ // see NotifyCertificateRequested.
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+}
+
+void ServiceWorkerWriteToCacheJob:: OnSSLCertificateError(
+ net::URLRequest* request,
+ const net::SSLInfo& ssl_info,
+ bool fatal) {
+ DCHECK_EQ(net_request_, request);
+ // TODO(michaeln): Pass this thru to our jobs client,
+ // see NotifySSLCertificateError.
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+}
+
+void ServiceWorkerWriteToCacheJob::OnBeforeNetworkStart(
+ net::URLRequest* request,
+ bool* defer) {
+ DCHECK_EQ(net_request_, request);
+ NotifyBeforeNetworkStart(defer);
+}
+
+void ServiceWorkerWriteToCacheJob::OnResponseStarted(
+ net::URLRequest* request) {
+ DCHECK_EQ(net_request_, request);
+ if (!request->status().is_success()) {
+ AsyncNotifyDoneHelper(request->status());
+ return;
+ }
+ if (request->GetResponseCode() / 100 != 2) {
+ AsyncNotifyDoneHelper(net::URLRequestStatus(
+ net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ // TODO(michaeln): Instead of error'ing immediately, send the net
+ // response to our consumer, just don't cache it?
+ return;
+ }
+ WriteHeadersToCache();
+}
+
+void ServiceWorkerWriteToCacheJob::OnReadCompleted(
+ net::URLRequest* request,
+ int bytes_read) {
+ DCHECK_EQ(net_request_, request);
+ if (!request->status().is_success()) {
+ AsyncNotifyDoneHelper(request->status());
+ return;
+ }
+ if (bytes_read > 0) {
+ WriteDataToCache(bytes_read);
+ return;
+ }
+ // We're done with all.
+ AsyncNotifyDoneHelper(request->status());
+ return;
+}
+
+void ServiceWorkerWriteToCacheJob::AsyncNotifyDoneHelper(
+ const net::URLRequestStatus& status) {
+ DCHECK(!status.is_io_pending());
+ version_->script_cache_map()->NotifyFinishedCaching(
+ url_, status.is_success());
+ did_notify_finished_ = true;
+ SetStatus(status);
+ NotifyDone(status);
+}
+
+} // namespace content
diff --git a/content/browser/service_worker/service_worker_write_to_cache_job.h b/content/browser/service_worker/service_worker_write_to_cache_job.h
new file mode 100644
index 0000000000..040df41b4c
--- /dev/null
+++ b/content/browser/service_worker/service_worker_write_to_cache_job.h
@@ -0,0 +1,117 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_WRITE_TO_CACHE_JOB_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_WRITE_TO_CACHE_JOB_H_
+
+#include "base/memory/weak_ptr.h"
+#include "content/browser/service_worker/service_worker_disk_cache.h"
+#include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/content_export.h"
+#include "content/common/service_worker/service_worker_status_code.h"
+#include "content/common/service_worker/service_worker_types.h"
+#include "net/url_request/url_request.h"
+#include "net/url_request/url_request_job.h"
+
+namespace content {
+
+class ServiceWorkerContextCore;
+class ServiceWorkerResponseWriter;
+class ServiceWorkerVersions;
+
+// A URLRequestJob derivative used to cache the main script
+// and its imports during the initial install of a new version.
+// Another separate URLRequest is started which will perform
+// a network fetch. The response produced for that separate
+// request is written to the service worker script cache and piped
+// to the consumer of the ServiceWorkerWriteToCacheJob for delivery
+// to the renderer process housing the worker.
+class CONTENT_EXPORT ServiceWorkerWriteToCacheJob
+ : public net::URLRequestJob,
+ public net::URLRequest::Delegate {
+ public:
+ ServiceWorkerWriteToCacheJob(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ ServiceWorkerVersion* version,
+ int64 response_id);
+
+ private:
+ virtual ~ServiceWorkerWriteToCacheJob();
+
+ // net::URLRequestJob overrides
+ virtual void Start() OVERRIDE;
+ virtual void Kill() OVERRIDE;
+ virtual net::LoadState GetLoadState() const OVERRIDE;
+ virtual bool GetCharset(std::string* charset) OVERRIDE;
+ virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
+ virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE;
+ virtual int GetResponseCode() const OVERRIDE;
+ virtual void SetExtraRequestHeaders(
+ const net::HttpRequestHeaders& headers) OVERRIDE;
+ virtual bool ReadRawData(net::IOBuffer* buf,
+ int buf_size,
+ int *bytes_read) OVERRIDE;
+
+ const net::HttpResponseInfo* http_info() const;
+
+ // Methods to drive the net request forward and
+ // write data to the disk cache.
+ void InitNetRequest();
+ void StartNetRequest();
+ net::URLRequestStatus ReadNetData(
+ net::IOBuffer* buf,
+ int buf_size,
+ int *bytes_read);
+ void WriteHeadersToCache();
+ void OnWriteHeadersComplete(int result);
+ void WriteDataToCache(int bytes_to_write);
+ void OnWriteDataComplete(int result);
+
+ // net::URLRequest::Delegate overrides that observe the net request.
+ virtual void OnReceivedRedirect(
+ net::URLRequest* request,
+ const GURL& new_url,
+ bool* defer_redirect) OVERRIDE;
+ virtual void OnAuthRequired(
+ net::URLRequest* request,
+ net::AuthChallengeInfo* auth_info) OVERRIDE;
+ virtual void OnCertificateRequested(
+ net::URLRequest* request,
+ net::SSLCertRequestInfo* cert_request_info) OVERRIDE;
+ virtual void OnSSLCertificateError(
+ net::URLRequest* request,
+ const net::SSLInfo& ssl_info,
+ bool fatal) OVERRIDE;
+ virtual void OnBeforeNetworkStart(
+ net::URLRequest* request,
+ bool* defer) OVERRIDE;
+ virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
+ virtual void OnReadCompleted(
+ net::URLRequest* request,
+ int bytes_read) OVERRIDE;
+
+ void AsyncNotifyDoneHelper(const net::URLRequestStatus& status);
+
+ scoped_refptr<net::IOBuffer> io_buffer_;
+ scoped_refptr<HttpResponseInfoIOBuffer> info_buffer_;
+ base::WeakPtr<ServiceWorkerContextCore> context_;
+ GURL url_;
+ int64 response_id_;
+ scoped_ptr<net::URLRequest> net_request_;
+ scoped_ptr<net::HttpResponseInfo> http_info_;
+ scoped_ptr<ServiceWorkerResponseWriter> writer_;
+ scoped_refptr<ServiceWorkerVersion> version_;
+ bool has_been_killed_;
+ bool did_notify_started_;
+ bool did_notify_finished_;
+ base::WeakPtrFactory<ServiceWorkerWriteToCacheJob> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerWriteToCacheJob);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_WRITE_TO_CACHE_JOB_H_
diff --git a/content/browser/shared_worker/shared_worker_host.cc b/content/browser/shared_worker/shared_worker_host.cc
index 6f6e4207a7..9fc9d67ec3 100644
--- a/content/browser/shared_worker/shared_worker_host.cc
+++ b/content/browser/shared_worker/shared_worker_host.cc
@@ -31,14 +31,27 @@ void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) {
host->delegate()->WorkerCrashed(host);
}
-void NotifyWorkerScriptLoadedOnUI(int worker_process_id, int worker_route_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+void NotifyWorkerContextStarted(int worker_process_id, int worker_route_id) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(
+ NotifyWorkerContextStarted, worker_process_id, worker_route_id));
+ return;
+ }
EmbeddedWorkerDevToolsManager::GetInstance()->WorkerContextStarted(
worker_process_id, worker_route_id);
}
-void NotifyWorkerDestroyedOnUI(int worker_process_id, int worker_route_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+void NotifyWorkerDestroyed(int worker_process_id, int worker_route_id) {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(NotifyWorkerDestroyed, worker_process_id, worker_route_id));
+ return;
+ }
EmbeddedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(
worker_process_id, worker_route_id);
}
@@ -78,11 +91,8 @@ SharedWorkerHost::~SharedWorkerHost() {
parent_iter->render_frame_id()));
}
}
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- &NotifyWorkerDestroyedOnUI, worker_process_id_, worker_route_id_));
+ if (!closed_)
+ NotifyWorkerDestroyed(worker_process_id_, worker_route_id_);
SharedWorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed(
worker_process_id_, worker_route_id_);
}
@@ -154,6 +164,7 @@ void SharedWorkerHost::WorkerContextClosed() {
// being sent to the worker (messages can still be sent from the worker,
// for exception reporting, etc).
closed_ = true;
+ NotifyWorkerDestroyed(worker_process_id_, worker_route_id_);
}
void SharedWorkerHost::WorkerContextDestroyed() {
@@ -166,11 +177,7 @@ void SharedWorkerHost::WorkerContextDestroyed() {
void SharedWorkerHost::WorkerScriptLoaded() {
UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoaded",
base::TimeTicks::Now() - creation_time_);
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- &NotifyWorkerScriptLoadedOnUI, worker_process_id_, worker_route_id_));
+ NotifyWorkerContextStarted(worker_process_id_, worker_route_id_);
}
void SharedWorkerHost::WorkerScriptLoadFailed() {
@@ -237,12 +244,12 @@ void SharedWorkerHost::RelayMessage(
return;
if (message.type() == WorkerMsg_Connect::ID) {
// Crack the SharedWorker Connect message to setup routing for the port.
- int sent_message_port_id;
- int new_routing_id;
- if (!WorkerMsg_Connect::Read(
- &message, &sent_message_port_id, &new_routing_id)) {
+ WorkerMsg_Connect::Param param;
+ if (!WorkerMsg_Connect::Read(&message, &param))
return;
- }
+ int sent_message_port_id = param.a;
+ int new_routing_id = param.b;
+
DCHECK(container_render_filter_);
new_routing_id = container_render_filter_->GetNextRoutingID();
MessagePortService::GetInstance()->UpdateMessagePort(
diff --git a/content/browser/shared_worker/shared_worker_message_filter.cc b/content/browser/shared_worker/shared_worker_message_filter.cc
index 59587290d2..fa5f15b603 100644
--- a/content/browser/shared_worker/shared_worker_message_filter.cc
+++ b/content/browser/shared_worker/shared_worker_message_filter.cc
@@ -41,10 +41,9 @@ void SharedWorkerMessageFilter::OnChannelClosing() {
this);
}
-bool SharedWorkerMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool SharedWorkerMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(SharedWorkerMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(SharedWorkerMessageFilter, message)
// Only sent from renderer for now, until we have nested workers.
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWorker, OnCreateWorker)
IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToWorker, OnForwardToWorker)
@@ -62,10 +61,11 @@ bool SharedWorkerMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected,
OnWorkerConnected)
IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase)
- IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowFileSystem, OnAllowFileSystem)
+ IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_RequestFileSystemAccessSync,
+ OnRequestFileSystemAccessSync)
IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -144,9 +144,10 @@ void SharedWorkerMessageFilter::OnAllowDatabase(
this);
}
-void SharedWorkerMessageFilter::OnAllowFileSystem(int worker_route_id,
- const GURL& url,
- bool* result) {
+void SharedWorkerMessageFilter::OnRequestFileSystemAccessSync(
+ int worker_route_id,
+ const GURL& url,
+ bool* result) {
SharedWorkerServiceImpl::GetInstance()->AllowFileSystem(worker_route_id,
url,
result,
diff --git a/content/browser/shared_worker/shared_worker_message_filter.h b/content/browser/shared_worker/shared_worker_message_filter.h
index 7ca41c286e..8fb927b805 100644
--- a/content/browser/shared_worker/shared_worker_message_filter.h
+++ b/content/browser/shared_worker/shared_worker_message_filter.h
@@ -27,8 +27,7 @@ class CONTENT_EXPORT SharedWorkerMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
int GetNextRoutingID();
int render_process_id() const { return render_process_id_; }
@@ -58,9 +57,9 @@ class CONTENT_EXPORT SharedWorkerMessageFilter : public BrowserMessageFilter {
const base::string16& display_name,
unsigned long estimated_size,
bool* result);
- void OnAllowFileSystem(int worker_route_id,
- const GURL& url,
- bool* result);
+ void OnRequestFileSystemAccessSync(int worker_route_id,
+ const GURL& url,
+ bool* result);
void OnAllowIndexedDB(int worker_route_id,
const GURL& url,
const base::string16& name,
diff --git a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
index 878d3bc8b4..e08da83efb 100644
--- a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
@@ -187,10 +187,8 @@ class MockRendererProcessHost {
bool OnMessageReceived(IPC::Message* message) {
scoped_ptr<IPC::Message> msg(message);
- bool message_was_ok = false;
- const bool ret =
- message_filter_->OnMessageReceived(*message, &message_was_ok) ||
- worker_filter_->OnMessageReceived(*message, &message_was_ok);
+ const bool ret = message_filter_->OnMessageReceived(*message) ||
+ worker_filter_->OnMessageReceived(*message);
if (message->is_sync()) {
CHECK(!queued_messages_.empty());
const IPC::Message* response_msg = queued_messages_.back();
@@ -357,8 +355,10 @@ void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host,
scoped_ptr<IPC::Message> msg(renderer_host->PopMessage());
EXPECT_EQ(WorkerMsg_Connect::ID, msg->type());
EXPECT_EQ(expected_msg_route_id, msg->routing_id());
- int port_id;
- EXPECT_TRUE(WorkerMsg_Connect::Read(msg.get(), &port_id, routing_id));
+ WorkerMsg_Connect::Param params;
+ EXPECT_TRUE(WorkerMsg_Connect::Read(msg.get(), &params));
+ int port_id = params.a;
+ *routing_id = params.b;
EXPECT_EQ(expected_sent_message_port_id, port_id);
}
@@ -368,11 +368,9 @@ void CheckMessagePortMsgMessage(MockRendererProcessHost* renderer_host,
scoped_ptr<IPC::Message> msg(renderer_host->PopMessage());
EXPECT_EQ(MessagePortMsg_Message::ID, msg->type());
EXPECT_EQ(expected_msg_route_id, msg->routing_id());
- base::string16 data;
- std::vector<int> sent_message_port_ids;
- std::vector<int> new_routing_ids;
- EXPECT_TRUE(MessagePortMsg_Message::Read(
- msg.get(), &data, &sent_message_port_ids, &new_routing_ids));
+ MessagePortMsg_Message::Param params;
+ EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), &params));
+ base::string16 data = params.a;
EXPECT_EQ(base::ASCIIToUTF16(expected_data), data);
}
diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
index 9bb1e755d8..b6e6918c0a 100644
--- a/content/browser/site_instance_impl.cc
+++ b/content/browser/site_instance_impl.cc
@@ -182,6 +182,10 @@ bool SiteInstanceImpl::IsRelatedSiteInstance(const SiteInstance* instance) {
instance)->browsing_instance_.get();
}
+size_t SiteInstanceImpl::GetRelatedActiveContentsCount() {
+ return browsing_instance_->active_contents_count();
+}
+
bool SiteInstanceImpl::HasWrongProcessForURL(const GURL& url) {
// Having no process isn't a problem, since we'll assign it correctly.
// Note that HasProcess() may return true if process_ is null, in
@@ -203,6 +207,14 @@ bool SiteInstanceImpl::HasWrongProcessForURL(const GURL& url) {
GetProcess(), browsing_instance_->browser_context(), site_url);
}
+void SiteInstanceImpl::IncrementRelatedActiveContentsCount() {
+ browsing_instance_->increment_active_contents_count();
+}
+
+void SiteInstanceImpl::DecrementRelatedActiveContentsCount() {
+ browsing_instance_->decrement_active_contents_count();
+}
+
void SiteInstanceImpl::set_render_process_host_factory(
const RenderProcessHostFactory* rph_factory) {
g_render_process_host_factory_ = rph_factory;
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h
index edaeb3e702..69197eeeab 100644
--- a/content/browser/site_instance_impl.h
+++ b/content/browser/site_instance_impl.h
@@ -12,6 +12,7 @@
#include "url/gurl.h"
namespace content {
+class BrowsingInstance;
class RenderProcessHostFactory;
class CONTENT_EXPORT SiteInstanceImpl : public SiteInstance,
@@ -21,10 +22,11 @@ class CONTENT_EXPORT SiteInstanceImpl : public SiteInstance,
virtual int32 GetId() OVERRIDE;
virtual bool HasProcess() const OVERRIDE;
virtual RenderProcessHost* GetProcess() OVERRIDE;
+ virtual BrowserContext* GetBrowserContext() const OVERRIDE;
virtual const GURL& GetSiteURL() const OVERRIDE;
virtual SiteInstance* GetRelatedSiteInstance(const GURL& url) OVERRIDE;
virtual bool IsRelatedSiteInstance(const SiteInstance* instance) OVERRIDE;
- virtual BrowserContext* GetBrowserContext() const OVERRIDE;
+ virtual size_t GetRelatedActiveContentsCount() OVERRIDE;
// Set the web site that this SiteInstance is rendering pages for.
// This includes the scheme and registered domain, but not the port. If the
@@ -59,6 +61,14 @@ class CONTENT_EXPORT SiteInstanceImpl : public SiteInstance,
// discarded to save memory.
size_t active_view_count() { return active_view_count_; }
+ // Increase the number of active WebContentses using this SiteInstance. Note
+ // that, unlike active_view_count, this does not count pending RVHs.
+ void IncrementRelatedActiveContentsCount();
+
+ // Decrease the number of active WebContentses using this SiteInstance. Note
+ // that, unlike active_view_count, this does not count pending RVHs.
+ void DecrementRelatedActiveContentsCount();
+
// Sets the global factory used to create new RenderProcessHosts. It may be
// NULL, in which case the default BrowserRenderProcessHost will be created
// (this is the behavior if you don't call this function). The factory must
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index 5c3be864b9..1bcf3fc8a4 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -216,6 +216,14 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) {
NavigateFrameToURL(root->child_at(0), http_url);
EXPECT_EQ(http_url, observer.navigation_url());
EXPECT_TRUE(observer.navigation_succeeded());
+ {
+ // There should be only one RenderWidgetHost when there are no
+ // cross-process iframes.
+ std::set<RenderWidgetHostImpl*> widgets_set =
+ static_cast<WebContentsImpl*>(shell()->web_contents())
+ ->GetRenderWidgetHostsInTree();
+ EXPECT_EQ(1U, widgets_set.size());
+ }
// These must stay in scope with replace_host.
GURL::Replacements replace_host;
@@ -238,6 +246,14 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) {
EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh);
EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance);
EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph);
+ {
+ // There should be now two RenderWidgetHosts, one for each process
+ // rendering a frame.
+ std::set<RenderWidgetHostImpl*> widgets_set =
+ static_cast<WebContentsImpl*>(shell()->web_contents())
+ ->GetRenderWidgetHostsInTree();
+ EXPECT_EQ(2U, widgets_set.size());
+ }
// Load another cross-site page into the same iframe.
cross_site_url = test_server()->GetURL("files/title3.html");
@@ -262,6 +278,12 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) {
EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(),
child->current_frame_host()->GetProcess());
EXPECT_NE(rph, child->current_frame_host()->GetProcess());
+ {
+ std::set<RenderWidgetHostImpl*> widgets_set =
+ static_cast<WebContentsImpl*>(shell()->web_contents())
+ ->GetRenderWidgetHostsInTree();
+ EXPECT_EQ(2U, widgets_set.size());
+ }
}
// Crash a subframe and ensures its children are cleared from the FrameTree.
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-arm.mk b/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
index b4c926eeff..f859dbb886 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
@@ -62,8 +62,15 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -155,8 +167,15 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -192,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-arm64.mk b/content/browser/speech/proto/speech_proto.target.darwin-arm64.mk
index e1e2bc36eb..9d28b34b56 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-arm64.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-arm64.mk
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -185,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-mips.mk b/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
index fcd9499670..e8cea33e1a 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -157,6 +163,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -194,12 +201,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-x86.mk b/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
index 1ad1a252b7..50180657d2 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -193,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk b/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
index 7009b489bc..9f0df35ff2 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -193,12 +198,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.linux-arm.mk b/content/browser/speech/proto/speech_proto.target.linux-arm.mk
index b4c926eeff..f859dbb886 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-arm.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-arm.mk
@@ -62,8 +62,15 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -155,8 +167,15 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -192,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.linux-arm64.mk b/content/browser/speech/proto/speech_proto.target.linux-arm64.mk
index e1e2bc36eb..9d28b34b56 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-arm64.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-arm64.mk
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -185,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.linux-mips.mk b/content/browser/speech/proto/speech_proto.target.linux-mips.mk
index fcd9499670..e8cea33e1a 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-mips.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -157,6 +163,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-EL \
-mhard-float \
@@ -194,12 +201,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.linux-x86.mk b/content/browser/speech/proto/speech_proto.target.linux-x86.mk
index 1ad1a252b7..50180657d2 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-x86.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-x86.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-Wno-format \
-msse2 \
-mfpmath=sse \
@@ -193,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk b/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
index 7009b489bc..9f0df35ff2 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -193,12 +198,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DPROTOBUF_USE_DLLS' \
'-DGOOGLE_PROTOBUF_NO_RTTI' \
diff --git a/content/browser/speech/speech_recognition_dispatcher_host.cc b/content/browser/speech/speech_recognition_dispatcher_host.cc
index 1c97a4f442..0197bcf4ac 100644
--- a/content/browser/speech/speech_recognition_dispatcher_host.cc
+++ b/content/browser/speech/speech_recognition_dispatcher_host.cc
@@ -21,11 +21,9 @@
namespace content {
SpeechRecognitionDispatcherHost::SpeechRecognitionDispatcherHost(
- bool is_guest,
int render_process_id,
net::URLRequestContextGetter* context_getter)
: BrowserMessageFilter(SpeechRecognitionMsgStart),
- is_guest_(is_guest),
render_process_id_(render_process_id),
context_getter_(context_getter),
weak_factory_(this) {
@@ -45,10 +43,9 @@ SpeechRecognitionDispatcherHost::AsWeakPtr() {
}
bool SpeechRecognitionDispatcherHost::OnMessageReceived(
- const IPC::Message& message, bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(SpeechRecognitionDispatcherHost, message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(SpeechRecognitionDispatcherHost, message)
IPC_MESSAGE_HANDLER(SpeechRecognitionHostMsg_StartRequest,
OnStartRequest)
IPC_MESSAGE_HANDLER(SpeechRecognitionHostMsg_AbortRequest,
@@ -87,15 +84,14 @@ void SpeechRecognitionDispatcherHost::OnStartRequest(
int embedder_render_process_id = 0;
int embedder_render_view_id = MSG_ROUTING_NONE;
- if (is_guest_) {
+ RenderViewHostImpl* render_view_host =
+ RenderViewHostImpl::FromID(render_process_id_, params.render_view_id);
+ WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
+ WebContents::FromRenderViewHost(render_view_host));
+ BrowserPluginGuest* guest = web_contents->GetBrowserPluginGuest();
+ if (guest) {
// If the speech API request was from a guest, save the context of the
// embedder since we will use it to decide permission.
- RenderViewHostImpl* render_view_host =
- RenderViewHostImpl::FromID(render_process_id_, params.render_view_id);
- WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
- WebContents::FromRenderViewHost(render_view_host));
- BrowserPluginGuest* guest = web_contents->GetBrowserPluginGuest();
-
embedder_render_process_id =
guest->embedder_web_contents()->GetRenderProcessHost()->GetID();
DCHECK_NE(embedder_render_process_id, 0);
diff --git a/content/browser/speech/speech_recognition_dispatcher_host.h b/content/browser/speech/speech_recognition_dispatcher_host.h
index e74447139a..f8853f1e8d 100644
--- a/content/browser/speech/speech_recognition_dispatcher_host.h
+++ b/content/browser/speech/speech_recognition_dispatcher_host.h
@@ -28,7 +28,6 @@ class CONTENT_EXPORT SpeechRecognitionDispatcherHost
public SpeechRecognitionEventListener {
public:
SpeechRecognitionDispatcherHost(
- bool is_guest,
int render_process_id,
net::URLRequestContextGetter* context_getter);
@@ -53,8 +52,7 @@ class CONTENT_EXPORT SpeechRecognitionDispatcherHost
float noise_volume) OVERRIDE;
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
@@ -74,7 +72,6 @@ class CONTENT_EXPORT SpeechRecognitionDispatcherHost
void OnAbortRequest(int render_view_id, int request_id);
void OnStopCaptureRequest(int render_view_id, int request_id);
- bool is_guest_;
int render_process_id_;
scoped_refptr<net::URLRequestContextGetter> context_getter_;
diff --git a/content/browser/speech/speech_recognizer_impl.h b/content/browser/speech/speech_recognizer_impl.h
index 6c8a093216..abd3ab433b 100644
--- a/content/browser/speech/speech_recognizer_impl.h
+++ b/content/browser/speech/speech_recognizer_impl.h
@@ -133,6 +133,8 @@ class CONTENT_EXPORT SpeechRecognizerImpl
media::AudioInputController::ErrorCode error_code) OVERRIDE;
virtual void OnData(media::AudioInputController* controller,
const uint8* data, uint32 size) OVERRIDE;
+ virtual void OnLog(media::AudioInputController* controller,
+ const std::string& message) OVERRIDE {}
// SpeechRecognitionEngineDelegate methods.
virtual void OnSpeechRecognitionEngineResults(
diff --git a/content/browser/storage_partition_impl_map.cc b/content/browser/storage_partition_impl_map.cc
index 7fe79344be..16fc2fe6c5 100644
--- a/content/browser/storage_partition_impl_map.cc
+++ b/content/browser/storage_partition_impl_map.cc
@@ -377,12 +377,12 @@ StoragePartitionImpl* StoragePartitionImplMap::Get(
ChromeBlobStorageContext::GetFor(browser_context_);
StreamContext* stream_context = StreamContext::GetFor(browser_context_);
ProtocolHandlerMap protocol_handlers;
- protocol_handlers[kBlobScheme] =
+ protocol_handlers[url::kBlobScheme] =
linked_ptr<net::URLRequestJobFactory::ProtocolHandler>(
new BlobProtocolHandler(blob_storage_context,
stream_context,
partition->GetFileSystemContext()));
- protocol_handlers[kFileSystemScheme] =
+ protocol_handlers[url::kFileSystemScheme] =
linked_ptr<net::URLRequestJobFactory::ProtocolHandler>(
CreateFileSystemProtocolHandler(partition_domain,
partition->GetFileSystemContext()));
@@ -413,8 +413,8 @@ StoragePartitionImpl* StoragePartitionImplMap::Get(
CreateDevToolsProtocolHandler(browser_context_->GetResourceContext(),
browser_context_->IsOffTheRecord()));
- ProtocolHandlerScopedVector protocol_interceptors;
- protocol_interceptors.push_back(
+ URLRequestInterceptorScopedVector request_interceptors;
+ request_interceptors.push_back(
ServiceWorkerRequestHandler::CreateInterceptor().release());
// These calls must happen after StoragePartitionImpl::Create().
@@ -423,7 +423,7 @@ StoragePartitionImpl* StoragePartitionImplMap::Get(
GetContentClient()->browser()->CreateRequestContext(
browser_context_,
&protocol_handlers,
- protocol_interceptors.Pass()));
+ request_interceptors.Pass()));
} else {
partition->SetURLRequestContext(
GetContentClient()->browser()->CreateRequestContextForStoragePartition(
@@ -431,7 +431,7 @@ StoragePartitionImpl* StoragePartitionImplMap::Get(
partition->GetPath(),
in_memory,
&protocol_handlers,
- protocol_interceptors.Pass()));
+ request_interceptors.Pass()));
}
partition->SetMediaURLRequestContext(
partition_domain.empty() ?
diff --git a/content/browser/streams/stream_handle_impl.cc b/content/browser/streams/stream_handle_impl.cc
index d13bdc6a71..6ff49621b5 100644
--- a/content/browser/streams/stream_handle_impl.cc
+++ b/content/browser/streams/stream_handle_impl.cc
@@ -12,6 +12,15 @@
namespace content {
+namespace {
+
+void RunCloseListeners(const std::vector<base::Closure>& close_listeners) {
+ for (size_t i = 0; i < close_listeners.size(); ++i)
+ close_listeners[i].Run();
+}
+
+} // namespace
+
StreamHandleImpl::StreamHandleImpl(
const base::WeakPtr<Stream>& stream,
const GURL& original_url,
@@ -25,8 +34,9 @@ StreamHandleImpl::StreamHandleImpl(
stream_message_loop_(base::MessageLoopProxy::current().get()) {}
StreamHandleImpl::~StreamHandleImpl() {
- stream_message_loop_->PostTask(FROM_HERE,
- base::Bind(&Stream::CloseHandle, stream_));
+ stream_message_loop_->PostTaskAndReply(FROM_HERE,
+ base::Bind(&Stream::CloseHandle, stream_),
+ base::Bind(&RunCloseListeners, close_listeners_));
}
const GURL& StreamHandleImpl::GetURL() {
@@ -45,4 +55,8 @@ scoped_refptr<net::HttpResponseHeaders> StreamHandleImpl::GetResponseHeaders() {
return response_headers_;
}
+void StreamHandleImpl::AddCloseListener(const base::Closure& callback) {
+ close_listeners_.push_back(callback);
+}
+
} // namespace content
diff --git a/content/browser/streams/stream_handle_impl.h b/content/browser/streams/stream_handle_impl.h
index fc8f5355a3..dc64dade6d 100644
--- a/content/browser/streams/stream_handle_impl.h
+++ b/content/browser/streams/stream_handle_impl.h
@@ -5,6 +5,8 @@
#ifndef CONTENT_BROWSER_STREAMS_STREAM_HANDLE_IMPL_H_
#define CONTENT_BROWSER_STREAMS_STREAM_HANDLE_IMPL_H_
+#include <vector>
+
#include "base/memory/weak_ptr.h"
#include "base/synchronization/lock.h"
#include "content/public/browser/stream_handle.h"
@@ -31,6 +33,7 @@ class StreamHandleImpl : public StreamHandle {
virtual const GURL& GetOriginalURL() OVERRIDE;
virtual const std::string& GetMimeType() OVERRIDE;
virtual scoped_refptr<net::HttpResponseHeaders> GetResponseHeaders() OVERRIDE;
+ virtual void AddCloseListener(const base::Closure& callback) OVERRIDE;
base::WeakPtr<Stream> stream_;
GURL url_;
@@ -38,6 +41,7 @@ class StreamHandleImpl : public StreamHandle {
std::string mime_type_;
scoped_refptr<net::HttpResponseHeaders> response_headers_;
base::MessageLoopProxy* stream_message_loop_;
+ std::vector<base::Closure> close_listeners_;
};
} // namespace content
diff --git a/content/browser/tracing/trace_message_filter.cc b/content/browser/tracing/trace_message_filter.cc
index bc9bac84b8..ba8ec65de1 100644
--- a/content/browser/tracing/trace_message_filter.cc
+++ b/content/browser/tracing/trace_message_filter.cc
@@ -34,11 +34,10 @@ void TraceMessageFilter::OnChannelClosing() {
}
}
-bool TraceMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool TraceMessageFilter::OnMessageReceived(const IPC::Message& message) {
// Always on IO thread (BrowserMessageFilter guarantee).
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(TraceMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(TraceMessageFilter, message)
IPC_MESSAGE_HANDLER(TracingHostMsg_ChildSupportsTracing,
OnChildSupportsTracing)
IPC_MESSAGE_HANDLER(TracingHostMsg_EndTracingAck, OnEndTracingAck)
@@ -53,7 +52,7 @@ bool TraceMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(TracingHostMsg_TraceBufferPercentFullReply,
OnTraceBufferPercentFullReply)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/tracing/trace_message_filter.h b/content/browser/tracing/trace_message_filter.h
index 0f9e18ed9c..4233fe0448 100644
--- a/content/browser/tracing/trace_message_filter.h
+++ b/content/browser/tracing/trace_message_filter.h
@@ -22,8 +22,7 @@ class TraceMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void SendBeginTracing(const std::string& category_filter_str,
base::debug::TraceLog::Options options);
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc
index dd153403be..63a44fcbcb 100644
--- a/content/browser/tracing/tracing_controller_impl.cc
+++ b/content/browser/tracing/tracing_controller_impl.cc
@@ -333,6 +333,25 @@ void TracingControllerImpl::OnDisableRecordingDone(
pending_disable_recording_ack_count_ = trace_message_filters_.size() + 1;
pending_disable_recording_filters_ = trace_message_filters_;
+#if defined(OS_CHROMEOS) || defined(OS_WIN)
+ if (is_system_tracing_) {
+ // Disable system tracing.
+ is_system_tracing_ = false;
+ ++pending_disable_recording_ack_count_;
+
+#if defined(OS_CHROMEOS)
+ chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()->
+ RequestStopSystemTracing(
+ base::Bind(&TracingControllerImpl::OnEndSystemTracingAcked,
+ base::Unretained(this)));
+#elif defined(OS_WIN)
+ EtwSystemEventConsumer::GetInstance()->StopSystemTracing(
+ base::Bind(&TracingControllerImpl::OnEndSystemTracingAcked,
+ base::Unretained(this)));
+#endif
+ }
+#endif // defined(OS_CHROMEOS) || defined(OS_WIN)
+
// Handle special case of zero child processes by immediately flushing the
// trace log. Once the flush has completed the caller will be notified that
// tracing has ended.
@@ -681,37 +700,6 @@ void TracingControllerImpl::OnDisableRecordingComplete() {
// received.
is_recording_ = false;
-#if defined(OS_CHROMEOS)
- if (is_system_tracing_) {
- // Disable system tracing.
- is_system_tracing_ = false;
-
- // Disable system tracing now that the local trace has shutdown.
- // This must be done last because we potentially need to push event
- // records into the system event log for synchronizing system event
- // timestamps with chrome event timestamps--and since the system event
- // log is a ring-buffer (on linux) adding them at the end is the only
- // way we're confident we'll have them in the final result.
- chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()->
- RequestStopSystemTracing(
- base::Bind(&TracingControllerImpl::OnEndSystemTracingAcked,
- base::Unretained(this)));
- return;
- }
-#elif defined(OS_WIN)
- if (is_system_tracing_) {
- // Disable system tracing.
- is_system_tracing_ = false;
-
-
- // Stop kernel tracing and flush events.
- EtwSystemEventConsumer::GetInstance()->StopSystemTracing(
- base::Bind(&TracingControllerImpl::OnEndSystemTracingAcked,
- base::Unretained(this)));
- return;
- }
-#endif
-
// Trigger callback if one is set.
if (!pending_get_categories_done_callback_.is_null()) {
pending_get_categories_done_callback_.Run(known_category_groups_);
@@ -745,7 +733,8 @@ void TracingControllerImpl::OnEndSystemTracingAcked(
result_file_->WriteSystemTrace(events_str_ptr);
DCHECK(!is_system_tracing_);
- OnDisableRecordingComplete();
+ std::vector<std::string> category_groups;
+ OnDisableRecordingAcked(NULL, category_groups);
}
#endif
diff --git a/content/browser/vibration/vibration_message_filter.cc b/content/browser/vibration/vibration_message_filter.cc
index 8f3507537b..fbc9041c71 100644
--- a/content/browser/vibration/vibration_message_filter.cc
+++ b/content/browser/vibration/vibration_message_filter.cc
@@ -29,16 +29,13 @@ VibrationMessageFilter::~VibrationMessageFilter() {
}
bool VibrationMessageFilter::OnMessageReceived(
- const IPC::Message& message,
- bool* message_was_ok) {
+ const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(VibrationMessageFilter,
- message,
- *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(VibrationMessageFilter, message)
IPC_MESSAGE_HANDLER(ViewHostMsg_Vibrate, OnVibrate)
IPC_MESSAGE_HANDLER(ViewHostMsg_CancelVibration, OnCancelVibration)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/vibration/vibration_message_filter.h b/content/browser/vibration/vibration_message_filter.h
index 086cc562aa..1d603ee412 100644
--- a/content/browser/vibration/vibration_message_filter.h
+++ b/content/browser/vibration/vibration_message_filter.h
@@ -19,8 +19,7 @@ class VibrationMessageFilter : public BrowserMessageFilter {
private:
virtual ~VibrationMessageFilter();
// BrowserMessageFilter implementation.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnVibrate(int64 milliseconds);
void OnCancelVibration();
diff --git a/content/browser/web_contents/aura/gesture_nav_simple.cc b/content/browser/web_contents/aura/gesture_nav_simple.cc
index 44f16bce1f..f904fe28cf 100644
--- a/content/browser/web_contents/aura/gesture_nav_simple.cc
+++ b/content/browser/web_contents/aura/gesture_nav_simple.cc
@@ -9,6 +9,7 @@
#include "content/browser/renderer_host/overscroll_controller.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/browser/web_contents/web_contents_view.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/overscroll_configuration.h"
#include "content/public/common/content_client.h"
#include "grit/ui_resources.h"
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
index 1a17d9056a..226f97be32 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
@@ -9,8 +9,10 @@
#include "content/browser/web_contents/aura/image_window_delegate.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/view_messages.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_widget_host_view.h"
#include "ui/aura/window.h"
+#include "ui/base/layout.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
@@ -195,8 +197,7 @@ ui::Layer* OverscrollNavigationOverlay::CreateSlideLayer(int offset) {
if (entry && entry->screenshot().get()) {
std::vector<gfx::ImagePNGRep> image_reps;
image_reps.push_back(gfx::ImagePNGRep(entry->screenshot(),
- ui::GetImageScale(
- ui::GetScaleFactorForNativeView(window_.get()))));
+ ui::GetScaleFactorForNativeView(window_.get())));
image = gfx::Image(image_reps);
}
if (!layer_delegate_)
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
index a9419b30e6..05c2c7b845 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
@@ -73,11 +73,6 @@ class OverscrollNavigationOverlayTest : public RenderViewHostImplTestHarness {
contents()->NavigateAndCommit(second);
EXPECT_TRUE(controller().CanGoBack());
- // Turn on compositing.
- ViewHostMsg_DidActivateAcceleratedCompositing msg(
- test_rvh()->GetRoutingID(), true);
- RenderViewHostTester::TestOnMessageReceived(test_rvh(), msg);
-
// Receive a paint update. This is necessary to make sure the size is set
// correctly in RenderWidgetHostImpl.
ViewHostMsg_UpdateRect_Params params;
diff --git a/content/browser/web_contents/aura/shadow_layer_delegate.cc b/content/browser/web_contents/aura/shadow_layer_delegate.cc
index c8819072b6..0d0fe93426 100644
--- a/content/browser/web_contents/aura/shadow_layer_delegate.cc
+++ b/content/browser/web_contents/aura/shadow_layer_delegate.cc
@@ -42,7 +42,7 @@ void ShadowLayerDelegate::OnPaintLayer(gfx::Canvas* canvas) {
skia::RefPtr<SkShader> shader = skia::AdoptRef(
SkGradientShader::CreateLinear(points, kShadowColors, NULL,
- arraysize(points), SkShader::kRepeat_TileMode, NULL));
+ arraysize(points), SkShader::kRepeat_TileMode));
gfx::Rect paint_rect = gfx::Rect(0, 0, kShadowThick,
layer_->bounds().height());
diff --git a/content/browser/web_contents/touch_editable_impl_aura.cc b/content/browser/web_contents/touch_editable_impl_aura.cc
index b161773aa1..648d888c44 100644
--- a/content/browser/web_contents/touch_editable_impl_aura.cc
+++ b/content/browser/web_contents/touch_editable_impl_aura.cc
@@ -104,6 +104,7 @@ void TouchEditableImplAura::EndTouchEditing(bool quick) {
if (touch_selection_controller_->IsHandleDragInProgress()) {
touch_selection_controller_->SelectionChanged();
} else {
+ selection_gesture_in_process_ = false;
touch_selection_controller_->HideHandles(quick);
touch_selection_controller_.reset();
}
@@ -135,12 +136,9 @@ void TouchEditableImplAura::OnTextInputTypeChanged(ui::TextInputType type) {
bool TouchEditableImplAura::HandleInputEvent(const ui::Event* event) {
DCHECK(rwhva_);
- if (event->IsTouchEvent())
- return false;
-
if (!event->IsGestureEvent()) {
- selection_gesture_in_process_ = false;
- EndTouchEditing(false);
+ // Ignore all non-gesture events. Non-gesture events that can deactivate
+ // touch editing are handled in TouchSelectionControllerImpl.
return false;
}
diff --git a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
index 0479984fde..ce1f602371 100644
--- a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
+++ b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
@@ -91,31 +91,6 @@ class TestTouchEditableImplAura : public TouchEditableImplAura {
DISALLOW_COPY_AND_ASSIGN(TestTouchEditableImplAura);
};
-// This class ignores mouse-moved, mouse-entered and mouse-exited events
-// without passing them to TouchEditableImplAura. Normally, we should not
-// receive these events; but, sometimes we receive them which breaks the tests
-// and makes them flaky: crbug.com/276992.
-class TestTouchEditableImplAuraIgnoreMouseMovement
- : public TestTouchEditableImplAura {
- public:
- TestTouchEditableImplAuraIgnoreMouseMovement() {}
-
- virtual bool HandleInputEvent(const ui::Event* event) OVERRIDE {
- if (event->type() == ui::ET_MOUSE_ENTERED ||
- event->type() == ui::ET_MOUSE_MOVED ||
- event->type() == ui::ET_MOUSE_EXITED) {
- return false;
- }
- return TestTouchEditableImplAura::HandleInputEvent(event);
- }
-
- protected:
- virtual ~TestTouchEditableImplAuraIgnoreMouseMovement() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestTouchEditableImplAuraIgnoreMouseMovement);
-};
-
class TouchEditableImplAuraTest : public ContentBrowserTest {
public:
TouchEditableImplAuraTest() {}
@@ -169,8 +144,7 @@ IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
RenderFrameHost* main_frame = web_contents->GetMainFrame();
WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
web_contents->GetView());
- TestTouchEditableImplAura* touch_editable =
- new TestTouchEditableImplAuraIgnoreMouseMovement;
+ TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
view_aura->SetTouchEditableForTest(touch_editable);
RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
web_contents->GetRenderWidgetHostView());
@@ -355,8 +329,7 @@ IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
RenderFrameHost* main_frame = web_contents->GetMainFrame();
WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
web_contents->GetView());
- TestTouchEditableImplAura* touch_editable =
- new TestTouchEditableImplAuraIgnoreMouseMovement;
+ TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
view_aura->SetTouchEditableForTest(touch_editable);
RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
web_contents->GetRenderWidgetHostView());
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 0f3ea7ac13..48eed0dd4b 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -20,7 +20,6 @@
#include "base/time/time.h"
#include "content/browser/browser_plugin/browser_plugin_embedder.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
-#include "content/browser/browser_plugin/browser_plugin_guest_manager.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/devtools/render_view_devtools_agent_host.h"
#include "content/browser/dom_storage/dom_storage_context_wrapper.h"
@@ -34,6 +33,7 @@
#include "content/browser/frame_host/navigator_impl.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/frame_host/render_widget_host_view_child_frame.h"
+#include "content/browser/geolocation/geolocation_dispatcher_host.h"
#include "content/browser/host_zoom_map_impl.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/message_port_message_filter.h"
@@ -58,6 +58,7 @@
#include "content/common/view_messages.h"
#include "content/public/browser/ax_event_notification_details.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/download_manager.h"
@@ -96,9 +97,7 @@
#if defined(OS_ANDROID)
#include "content/browser/android/date_time_chooser_android.h"
#include "content/browser/media/android/browser_media_player_manager.h"
-#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h"
#include "content/browser/web_contents/web_contents_android.h"
-#include "content/common/java_bridge_messages.h"
#include "content/public/browser/android/content_view_core.h"
#endif
@@ -161,6 +160,12 @@
namespace content {
namespace {
+const int kMinimumDelayBetweenLoadingUpdatesMS = 100;
+
+// This matches what Blink's ProgressTracker has traditionally used for a
+// minimum progress value.
+const double kMinimumLoadingProgress = 0.1;
+
const char kDotGoogleDotCom[] = ".google.com";
#if defined(OS_ANDROID)
@@ -206,28 +211,15 @@ bool ForEachFrameInternal(
return true;
}
-bool ForEachPendingFrameInternal(
- const base::Callback<void(RenderFrameHost*)>& on_frame,
- FrameTreeNode* node) {
- RenderFrameHost* pending_frame_host =
- node->render_manager()->pending_frame_host();
- if (pending_frame_host)
- on_frame.Run(pending_frame_host);
- return true;
-}
-
void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) {
IPC::Message* message_copy = new IPC::Message(*message);
message_copy->set_routing_id(rfh->GetRoutingID());
rfh->Send(message_copy);
}
-void RunRenderFrameDeleted(
- ObserverList<WebContentsObserver>* observer_list,
- RenderFrameHost* render_frame_host) {
- FOR_EACH_OBSERVER(WebContentsObserver,
- *observer_list,
- RenderFrameDeleted(render_frame_host));
+void AddRenderWidgetHostToSet(std::set<RenderWidgetHostImpl*>* set,
+ RenderFrameHost* rfh) {
+ set->insert(static_cast<RenderFrameHostImpl*>(rfh)->GetRenderWidgetHost());
}
} // namespace
@@ -329,10 +321,14 @@ WebContentsImpl::WebContentsImpl(
frame_tree_(new NavigatorImpl(&controller_, this),
this, this, this, this),
is_loading_(false),
+ is_load_to_different_document_(false),
crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING),
crashed_error_code_(0),
waiting_for_response_(false),
load_state_(net::LOAD_STATE_IDLE, base::string16()),
+ loading_total_progress_(0.0),
+ loading_weak_factory_(this),
+ loading_frames_in_progress_(0),
upload_size_(0),
upload_position_(0),
displayed_insecure_content_(false),
@@ -347,7 +343,6 @@ WebContentsImpl::WebContentsImpl(
closed_by_user_gesture_(false),
minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)),
maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)),
- temporary_zoom_settings_(false),
totalPinchGestureAmount_(0),
currentPinchZoomStepDelta_(0),
render_view_message_source_(NULL),
@@ -392,23 +387,30 @@ WebContentsImpl::~WebContentsImpl() {
Source<WebContents>(this),
NotificationService::NoDetails());
- base::Callback<void(RenderFrameHost*)> run_render_frame_deleted_callback =
- base::Bind(&RunRenderFrameDeleted, base::Unretained(&observers_));
- frame_tree_.ForEach(base::Bind(&ForEachPendingFrameInternal,
- run_render_frame_deleted_callback));
+ // Destroy all frame tree nodes except for the root; this notifies observers.
+ frame_tree_.ResetForMainFrameSwap();
+ GetRenderManager()->ResetProxyHosts();
- RenderViewHost* pending_rvh = GetRenderManager()->pending_render_view_host();
- if (pending_rvh) {
+ // Manually call the observer methods for the root frame tree node.
+ RenderFrameHostManager* root = GetRenderManager();
+ if (root->pending_frame_host()) {
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
- RenderViewDeleted(pending_rvh));
+ RenderFrameDeleted(root->pending_frame_host()));
}
+ FOR_EACH_OBSERVER(WebContentsObserver,
+ observers_,
+ RenderFrameDeleted(root->current_frame_host()));
- ForEachFrame(run_render_frame_deleted_callback);
+ if (root->pending_render_view_host()) {
+ FOR_EACH_OBSERVER(WebContentsObserver,
+ observers_,
+ RenderViewDeleted(root->pending_render_view_host()));
+ }
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
- RenderViewDeleted(GetRenderManager()->current_host()));
+ RenderViewDeleted(root->current_host()));
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
@@ -429,35 +431,27 @@ WebContentsImpl* WebContentsImpl::CreateWithOpener(
WebContentsImpl* opener) {
TRACE_EVENT0("browser", "WebContentsImpl::CreateWithOpener");
WebContentsImpl* new_contents = new WebContentsImpl(
- params.browser_context, opener);
+ params.browser_context, params.opener_suppressed ? NULL : opener);
+ if (params.guest_instance_id) {
+ scoped_ptr<base::DictionaryValue> extra_params;
+ if (params.guest_extra_params)
+ extra_params.reset(params.guest_extra_params->DeepCopy());
+ // This makes |new_contents| act as a guest.
+ // For more info, see comment above class BrowserPluginGuest.
+ BrowserPluginGuest::Create(params.guest_instance_id,
+ params.site_instance,
+ new_contents,
+ extra_params.Pass(),
+ opener ? opener->GetBrowserPluginGuest() : NULL);
+ // We are instantiating a WebContents for browser plugin. Set its subframe
+ // bit to true.
+ new_contents->is_subframe_ = true;
+ }
new_contents->Init(params);
return new_contents;
}
-// static
-BrowserPluginGuest* WebContentsImpl::CreateGuest(
- BrowserContext* browser_context,
- SiteInstance* site_instance,
- int guest_instance_id,
- scoped_ptr<base::DictionaryValue> extra_params) {
- WebContentsImpl* new_contents = new WebContentsImpl(browser_context, NULL);
-
- // This makes |new_contents| act as a guest.
- // For more info, see comment above class BrowserPluginGuest.
- BrowserPluginGuest::Create(
- guest_instance_id, site_instance, new_contents, extra_params.Pass());
-
- WebContents::CreateParams create_params(browser_context, site_instance);
- new_contents->Init(create_params);
-
- // We are instantiating a WebContents for browser plugin. Set its subframe bit
- // to true.
- new_contents->is_subframe_ = true;
-
- return new_contents->browser_plugin_guest_.get();
-}
-
RenderFrameHostManager* WebContentsImpl::GetRenderManagerForTesting() {
return GetRenderManager();
}
@@ -478,9 +472,15 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host,
ObserverListBase<WebContentsObserver>::Iterator it(observers_);
WebContentsObserver* observer;
- while ((observer = it.GetNext()) != NULL)
- if (observer->OnMessageReceived(message))
- return true;
+ if (render_frame_host) {
+ while ((observer = it.GetNext()) != NULL)
+ if (observer->OnMessageReceived(message, render_frame_host))
+ return true;
+ } else {
+ while ((observer = it.GetNext()) != NULL)
+ if (observer->OnMessageReceived(message))
+ return true;
+ }
// Message handlers should be aware of which
// RenderViewHost/RenderFrameHost sent the message, which is temporarily
@@ -498,8 +498,7 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host,
}
bool handled = true;
- bool message_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(WebContentsImpl, message, message_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(WebContentsImpl, message)
IPC_MESSAGE_HANDLER(FrameHostMsg_PepperPluginHung, OnPepperPluginHung)
IPC_MESSAGE_HANDLER(FrameHostMsg_PluginCrashed, OnPluginCrashed)
IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse,
@@ -507,6 +506,10 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host,
IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishDocumentLoad,
OnDocumentLoadedInFrame)
IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishLoad, OnDidFinishLoad)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartLoading, OnDidStartLoading)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidStopLoading, OnDidStopLoading)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeLoadProgress,
+ OnDidChangeLoadProgress)
IPC_MESSAGE_HANDLER(FrameHostMsg_OpenColorChooser, OnOpenColorChooser)
IPC_MESSAGE_HANDLER(FrameHostMsg_EndColorChooser, OnEndColorChooser)
IPC_MESSAGE_HANDLER(FrameHostMsg_SetSelectedColorInColorChooser,
@@ -550,19 +553,12 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host,
OnFindMatchRectsReply)
IPC_MESSAGE_HANDLER(ViewHostMsg_OpenDateTimeDialog,
OnOpenDateTimeDialog)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(JavaBridgeHostMsg_GetChannelHandle,
- OnJavaBridgeGetChannelHandle)
#endif
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
render_view_message_source_ = NULL;
render_frame_message_source_ = NULL;
- if (!message_is_ok) {
- RecordAction(base::UserMetricsAction("BadMessageTerminate_RVD"));
- GetRenderProcessHost()->ReceivedBadMessage();
- }
-
return handled;
}
@@ -651,20 +647,6 @@ RenderViewHost* WebContentsImpl::GetRenderViewHost() const {
return GetRenderManager()->current_host();
}
-WebContents* WebContentsImpl::GetEmbedderWebContents() const {
- BrowserPluginGuest* guest = GetBrowserPluginGuest();
- if (guest)
- return guest->embedder_web_contents();
- return NULL;
-}
-
-int WebContentsImpl::GetEmbeddedInstanceID() const {
- BrowserPluginGuest* guest = GetBrowserPluginGuest();
- if (guest)
- return guest->instance_id();
- return 0;
-}
-
int WebContentsImpl::GetRoutingID() const {
if (!GetRenderViewHost())
return MSG_ROUTING_NONE;
@@ -846,8 +828,12 @@ bool WebContentsImpl::IsLoading() const {
return is_loading_;
}
+bool WebContentsImpl::IsLoadingToDifferentDocument() const {
+ return is_loading_ && is_load_to_different_document_;
+}
+
bool WebContentsImpl::IsWaitingForResponse() const {
- return waiting_for_response_;
+ return waiting_for_response_ && is_load_to_different_document_;
}
const net::LoadStateWithParam& WebContentsImpl::GetLoadState() const {
@@ -875,7 +861,7 @@ std::set<GURL> WebContentsImpl::GetSitesInTab() const {
}
const std::string& WebContentsImpl::GetEncoding() const {
- return encoding_;
+ return canonical_encoding_;
}
bool WebContentsImpl::DisplayedInsecureContent() const {
@@ -956,12 +942,18 @@ base::TimeTicks WebContentsImpl::GetLastActiveTime() const {
void WebContentsImpl::WasShown() {
controller_.SetActive(true);
- RenderWidgetHostView* rwhv = GetRenderWidgetHostView();
- if (rwhv) {
- rwhv->Show();
+
+ std::set<RenderWidgetHostImpl*> widgets = GetRenderWidgetHostsInTree();
+ for (std::set<RenderWidgetHostImpl*>::iterator iter = widgets.begin();
+ iter != widgets.end();
+ iter++) {
+ RenderWidgetHostView* rwhv = (*iter)->GetView();
+ if (rwhv) {
+ rwhv->Show();
#if defined(OS_MACOSX)
- rwhv->SetActive(true);
+ rwhv->SetActive(true);
#endif
+ }
}
last_active_time_ = base::TimeTicks::Now();
@@ -989,9 +981,14 @@ void WebContentsImpl::WasHidden() {
// removes the |GetRenderViewHost()|; then when we actually destroy the
// window, OnWindowPosChanged() notices and calls WasHidden() (which
// calls us).
- RenderWidgetHostView* rwhv = GetRenderWidgetHostView();
- if (rwhv)
- rwhv->Hide();
+ std::set<RenderWidgetHostImpl*> widgets = GetRenderWidgetHostsInTree();
+ for (std::set<RenderWidgetHostImpl*>::iterator iter = widgets.begin();
+ iter != widgets.end();
+ iter++) {
+ RenderWidgetHostView* rwhv = (*iter)->GetView();
+ if (rwhv)
+ rwhv->Hide();
+ }
}
FOR_EACH_OBSERVER(WebContentsObserver, observers_, WasHidden());
@@ -1095,9 +1092,10 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
registrar_.Add(this,
NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
NotificationService::AllBrowserContextsAndSources());
+
+ geolocation_dispatcher_host_.reset(new GeolocationDispatcherHost(this));
+
#if defined(OS_ANDROID)
- java_bridge_dispatcher_host_manager_.reset(
- new JavaBridgeDispatcherHostManager(this));
date_time_chooser_.reset(new DateTimeChooserAndroid());
#endif
}
@@ -1146,6 +1144,12 @@ void WebContentsImpl::RemoveObserver(WebContentsObserver* observer) {
observers_.RemoveObserver(observer);
}
+std::set<RenderWidgetHostImpl*> WebContentsImpl::GetRenderWidgetHostsInTree() {
+ std::set<RenderWidgetHostImpl*> set;
+ ForEachFrame(base::Bind(&AddRenderWidgetHostToSet, base::Unretained(&set)));
+ return set;
+}
+
void WebContentsImpl::Activate() {
if (delegate_)
delegate_->ActivateContents(this);
@@ -1193,11 +1197,6 @@ bool WebContentsImpl::PreHandleKeyboardEvent(
}
void WebContentsImpl::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
- if (browser_plugin_embedder_ &&
- browser_plugin_embedder_->HandleKeyboardEvent(event)) {
- return;
- }
-
if (delegate_)
delegate_->HandleKeyboardEvent(this, event);
}
@@ -1344,7 +1343,7 @@ void WebContentsImpl::CreateNewWindow(
// script-related windows), by passing in the current SiteInstance. However,
// if the opener is being suppressed (in a non-guest), we create a new
// SiteInstance in its own BrowsingInstance.
- bool is_guest = GetRenderProcessHost()->IsGuest();
+ bool is_guest = BrowserPluginGuest::IsGuest(this);
// If the opener is to be suppressed, the new window can be in any process.
// Since routing ids are process specific, we must not have one passed in
@@ -1407,35 +1406,27 @@ void WebContentsImpl::CreateNewWindow(
// Create the new web contents. This will automatically create the new
// WebContentsView. In the future, we may want to create the view separately.
- WebContentsImpl* new_contents =
- new WebContentsImpl(GetBrowserContext(),
- params.opener_suppressed ? NULL : this);
-
- new_contents->GetController().SetSessionStorageNamespace(
- partition_id,
- session_storage_namespace);
CreateParams create_params(GetBrowserContext(), site_instance.get());
create_params.routing_id = route_id;
create_params.main_frame_routing_id = main_frame_route_id;
+ create_params.opener = this;
+ create_params.opener_suppressed = params.opener_suppressed;
+ if (params.disposition == NEW_BACKGROUND_TAB)
+ create_params.initially_hidden = true;
+
if (!is_guest) {
create_params.context = view_->GetNativeView();
create_params.initial_size = GetContainerBounds().size();
} else {
- // This makes |new_contents| act as a guest.
- // For more info, see comment above class BrowserPluginGuest.
- int instance_id =
- BrowserPluginGuestManager::FromBrowserContext(GetBrowserContext())->
- GetNextInstanceID();
- WebContentsImpl* new_contents_impl =
- static_cast<WebContentsImpl*>(new_contents);
- BrowserPluginGuest::CreateWithOpener(instance_id,
- new_contents_impl->opener() != NULL,
- new_contents_impl,
- GetBrowserPluginGuest());
+ create_params.guest_instance_id =
+ GetBrowserContext()->GetGuestManager()->GetNextInstanceID();
}
- if (params.disposition == NEW_BACKGROUND_TAB)
- create_params.initially_hidden = true;
- new_contents->Init(create_params);
+ WebContentsImpl* new_contents = static_cast<WebContentsImpl*>(
+ WebContents::Create(create_params));
+ new_contents->GetController().SetSessionStorageNamespace(
+ partition_id,
+ session_storage_namespace);
+ new_contents->RenderViewCreated(new_contents->GetRenderViewHost());
// Save the window for later if we're not suppressing the opener (since it
// will be shown immediately).
@@ -1621,7 +1612,7 @@ WebContentsImpl* WebContentsImpl::GetCreatedWindow(int route_id) {
RemoveDestructionObserver(new_contents);
// Don't initialize the guest WebContents immediately.
- if (new_contents->GetRenderProcessHost()->IsGuest())
+ if (BrowserPluginGuest::IsGuest(new_contents))
return new_contents;
if (!new_contents->GetRenderProcessHost()->HasConnection() ||
@@ -2096,7 +2087,7 @@ void WebContentsImpl::SetOverrideEncoding(const std::string& encoding) {
}
void WebContentsImpl::ResetOverrideEncoding() {
- encoding_.clear();
+ canonical_encoding_.clear();
Send(new ViewMsg_ResetPageEncodingToDefault(GetRoutingID()));
}
@@ -2170,35 +2161,13 @@ bool WebContentsImpl::GetClosedByUserGesture() const {
return closed_by_user_gesture_;
}
-double WebContentsImpl::GetZoomLevel() const {
- HostZoomMapImpl* zoom_map = static_cast<HostZoomMapImpl*>(
- HostZoomMap::GetForBrowserContext(GetBrowserContext()));
- if (!zoom_map)
- return 0;
-
- double zoom_level;
- if (temporary_zoom_settings_) {
- zoom_level = zoom_map->GetTemporaryZoomLevel(
- GetRenderProcessHost()->GetID(), GetRenderViewHost()->GetRoutingID());
- } else {
- GURL url;
- NavigationEntry* entry = GetController().GetLastCommittedEntry();
- // Since zoom map is updated using rewritten URL, use rewritten URL
- // to get the zoom level.
- url = entry ? entry->GetURL() : GURL::EmptyGURL();
- zoom_level = zoom_map->GetZoomLevelForHostAndScheme(url.scheme(),
- net::GetHostOrSpecFromURL(url));
- }
- return zoom_level;
-}
-
int WebContentsImpl::GetZoomPercent(bool* enable_increment,
bool* enable_decrement) const {
*enable_decrement = *enable_increment = false;
// Calculate the zoom percent from the factor. Round up to the nearest whole
// number.
int percent = static_cast<int>(
- ZoomLevelToZoomFactor(GetZoomLevel()) * 100 + 0.5);
+ ZoomLevelToZoomFactor(HostZoomMap::GetZoomLevel(this)) * 100 + 0.5);
*enable_decrement = percent > minimum_zoom_percent_;
*enable_increment = percent < maximum_zoom_percent_;
return percent;
@@ -2236,6 +2205,9 @@ gfx::Size WebContentsImpl::GetPreferredSize() const {
}
bool WebContentsImpl::GotResponseToLockMouseRequest(bool allowed) {
+ if (GetBrowserPluginGuest())
+ return GetBrowserPluginGuest()->LockMouse(allowed);
+
return GetRenderViewHost() ?
GetRenderViewHostImpl()->GotResponseToLockMouseRequest(allowed) : false;
}
@@ -2284,13 +2256,6 @@ bool WebContentsImpl::IsSubframe() const {
return is_subframe_;
}
-void WebContentsImpl::SetZoomLevel(double level) {
- Send(new ViewMsg_SetZoomLevel(GetRoutingID(), level));
- BrowserPluginEmbedder* embedder = GetBrowserPluginEmbedder();
- if (embedder)
- embedder->SetZoomLevel(level);
-}
-
void WebContentsImpl::Find(int request_id,
const base::string16& search_text,
const blink::WebFindOptions& options) {
@@ -2325,8 +2290,6 @@ void WebContentsImpl::DidStartProvisionalLoad(
bool is_error_page,
bool is_iframe_srcdoc) {
bool is_main_frame = render_frame_host->frame_tree_node()->IsMainFrame();
- if (is_main_frame)
- DidChangeLoadProgress(0);
// Notify observers about the start of the provisional load.
int render_frame_id = render_frame_host->GetRoutingID();
@@ -2631,17 +2594,100 @@ void WebContentsImpl::OnDidFinishLoad(
is_main_frame, render_view_host));
}
+void WebContentsImpl::OnDidStartLoading(bool to_different_document) {
+ RenderFrameHostImpl* rfh =
+ static_cast<RenderFrameHostImpl*>(render_frame_message_source_);
+ int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id();
+
+ // It is possible to get multiple calls to OnDidStartLoading that don't have
+ // corresponding calls to OnDidStopLoading:
+ // - With "swappedout://" URLs, this happens when a RenderView gets swapped
+ // out for a cross-process navigation, and it turns into a placeholder for
+ // one being rendered in a different process.
+ // - Also, there might be more than one RenderFrameHost sharing the same
+ // FrameTreeNode (and thus sharing its ID) each sending a start.
+ // - But in the future, once clamy@ moves navigation network requests to the
+ // browser process, there's a good chance that callbacks about starting and
+ // stopping will all be handled by the browser. When that happens, there
+ // should no longer be a start/stop call imbalance. TODO(avi): When this
+ // future arrives, update this code to not allow this case.
+ DCHECK_GE(loading_frames_in_progress_, 0);
+ if (loading_progresses_.find(render_frame_id) == loading_progresses_.end()) {
+ if (loading_frames_in_progress_ == 0)
+ DidStartLoading(rfh, to_different_document);
+ ++loading_frames_in_progress_;
+ }
+
+ loading_progresses_[render_frame_id] = kMinimumLoadingProgress;
+ SendLoadProgressChanged();
+}
+
+void WebContentsImpl::OnDidStopLoading() {
+ RenderFrameHostImpl* rfh =
+ static_cast<RenderFrameHostImpl*>(render_frame_message_source_);
+ int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id();
+
+ if (loading_progresses_.find(render_frame_id) != loading_progresses_.end()) {
+ // Load stopped while we were still tracking load. Make sure we update
+ // progress based on this frame's completion.
+ loading_progresses_[render_frame_id] = 1.0;
+ SendLoadProgressChanged();
+ // Then we clean-up our states.
+ if (loading_total_progress_ == 1.0)
+ ResetLoadProgressState();
+ }
+
+ // TODO(japhet): This should be a DCHECK, but the pdf plugin sometimes
+ // calls DidStopLoading() without a matching DidStartLoading().
+ if (loading_frames_in_progress_ == 0)
+ return;
+ --loading_frames_in_progress_;
+ if (loading_frames_in_progress_ == 0)
+ DidStopLoading(rfh);
+}
+
+void WebContentsImpl::OnDidChangeLoadProgress(double load_progress) {
+ RenderFrameHostImpl* rfh =
+ static_cast<RenderFrameHostImpl*>(render_frame_message_source_);
+ int64 render_frame_id = rfh->frame_tree_node()->frame_tree_node_id();
+
+ loading_progresses_[render_frame_id] = load_progress;
+
+ // We notify progress change immediately for the first and last updates.
+ // Also, since the message loop may be pretty busy when a page is loaded, it
+ // might not execute a posted task in a timely manner so we make sure to
+ // immediately send progress report if enough time has passed.
+ base::TimeDelta min_delay =
+ base::TimeDelta::FromMilliseconds(kMinimumDelayBetweenLoadingUpdatesMS);
+ if (load_progress == 1.0 || loading_last_progress_update_.is_null() ||
+ base::TimeTicks::Now() - loading_last_progress_update_ > min_delay) {
+ // If there is a pending task to send progress, it is now obsolete.
+ loading_weak_factory_.InvalidateWeakPtrs();
+ SendLoadProgressChanged();
+ if (loading_total_progress_ == 1.0)
+ ResetLoadProgressState();
+ return;
+ }
+
+ if (loading_weak_factory_.HasWeakPtrs())
+ return;
+
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&WebContentsImpl::SendLoadProgressChanged,
+ loading_weak_factory_.GetWeakPtr()),
+ min_delay);
+}
+
void WebContentsImpl::OnGoToEntryAtOffset(int offset) {
if (!delegate_ || delegate_->OnGoToEntryOffset(offset))
controller_.GoToOffset(offset);
}
void WebContentsImpl::OnUpdateZoomLimits(int minimum_percent,
- int maximum_percent,
- bool remember) {
+ int maximum_percent) {
minimum_zoom_percent_ = minimum_percent;
maximum_zoom_percent_ = maximum_percent;
- temporary_zoom_settings_ = !remember;
}
void WebContentsImpl::OnEnumerateDirectory(int request_id,
@@ -2667,7 +2713,7 @@ void WebContentsImpl::OnRegisterProtocolHandler(const std::string& protocol,
if (policy->IsPseudoScheme(protocol))
return;
- delegate_->RegisterProtocolHandler(this, protocol, url, title, user_gesture);
+ delegate_->RegisterProtocolHandler(this, protocol, url, user_gesture);
}
void WebContentsImpl::OnFindReply(int request_id,
@@ -2702,11 +2748,6 @@ void WebContentsImpl::OnOpenDateTimeDialog(
value.suggestions);
}
-void WebContentsImpl::OnJavaBridgeGetChannelHandle(IPC::Message* reply_msg) {
- java_bridge_dispatcher_host_manager_->OnGetChannelHandle(
- render_frame_message_source_, reply_msg);
-}
-
#endif
void WebContentsImpl::OnPepperPluginHung(int plugin_child_id,
@@ -2923,6 +2964,7 @@ void WebContentsImpl::SetIsLoading(RenderViewHost* render_view_host,
is_loading_ = is_loading;
waiting_for_response_ = is_loading;
+ is_load_to_different_document_ = to_different_document;
if (delegate_)
delegate_->LoadingStateChanged(this, to_different_document);
@@ -3021,6 +3063,37 @@ bool WebContentsImpl::UpdateTitleForEntry(NavigationEntryImpl* entry,
return true;
}
+void WebContentsImpl::SendLoadProgressChanged() {
+ loading_last_progress_update_ = base::TimeTicks::Now();
+ double progress = 0.0;
+ int frame_count = 0;
+
+ for (LoadingProgressMap::iterator it = loading_progresses_.begin();
+ it != loading_progresses_.end();
+ ++it) {
+ progress += it->second;
+ ++frame_count;
+ }
+ if (frame_count == 0)
+ return;
+ progress /= frame_count;
+ DCHECK(progress <= 1.0);
+
+ if (progress <= loading_total_progress_)
+ return;
+ loading_total_progress_ = progress;
+
+ if (delegate_)
+ delegate_->LoadProgressChanged(this, progress);
+}
+
+void WebContentsImpl::ResetLoadProgressState() {
+ loading_progresses_.clear();
+ loading_total_progress_ = 0.0;
+ loading_weak_factory_.InvalidateWeakPtrs();
+ loading_last_progress_update_ = base::TimeTicks();
+}
+
void WebContentsImpl::NotifySwapped(RenderViewHost* old_host,
RenderViewHost* new_host) {
// After sending out a swap notification, we need to send a disconnect
@@ -3094,11 +3167,18 @@ void WebContentsImpl::WorkerCrashed(RenderFrameHost* render_frame_host) {
void WebContentsImpl::ShowContextMenu(RenderFrameHost* render_frame_host,
const ContextMenuParams& params) {
+ ContextMenuParams context_menu_params(params);
// Allow WebContentsDelegates to handle the context menu operation first.
- if (delegate_ && delegate_->HandleContextMenu(params))
+ if (GetBrowserPluginGuest()) {
+ WebContentsViewGuest* view_guest =
+ static_cast<WebContentsViewGuest*>(GetView());
+ context_menu_params = view_guest->ConvertContextMenuParams(params);
+ }
+ if (delegate_ && delegate_->HandleContextMenu(context_menu_params))
return;
- render_view_host_delegate_view_->ShowContextMenu(render_frame_host, params);
+ render_view_host_delegate_view_->ShowContextMenu(render_frame_host,
+ context_menu_params);
}
void WebContentsImpl::RunJavaScriptMessage(
@@ -3301,10 +3381,12 @@ void WebContentsImpl::RenderViewTerminated(RenderViewHost* rvh,
NotifyDisconnected();
SetIsCrashed(status, error_code);
-#if defined(OS_ANDROID)
- if (GetRenderViewHostImpl()->media_player_manager())
- GetRenderViewHostImpl()->media_player_manager()->DestroyAllMediaPlayers();
-#endif
+ // Reset the loading progress. TODO(avi): What does it mean to have a
+ // "renderer crash" when there is more than one renderer process serving a
+ // webpage? Once this function is called at a more granular frame level, we
+ // probably will need to more granularly reset the state here.
+ ResetLoadProgressState();
+ loading_frames_in_progress_ = 0;
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
@@ -3346,39 +3428,6 @@ void WebContentsImpl::UpdateState(RenderViewHost* rvh,
controller_.NotifyEntryChanged(entry, entry_index);
}
-void WebContentsImpl::UpdateTitle(RenderViewHost* rvh,
- int32 page_id,
- const base::string16& title,
- base::i18n::TextDirection title_direction) {
- // If we have a title, that's a pretty good indication that we've started
- // getting useful data.
- SetNotWaitingForResponse();
-
- // Try to find the navigation entry, which might not be the current one.
- // For example, it might be from a pending RVH for the pending entry.
- NavigationEntryImpl* entry = controller_.GetEntryWithPageID(
- rvh->GetSiteInstance(), page_id);
-
- // We can handle title updates when we don't have an entry in
- // UpdateTitleForEntry, but only if the update is from the current RVH.
- if (!entry && rvh != GetRenderViewHost())
- return;
-
- // TODO(evan): make use of title_direction.
- // http://code.google.com/p/chromium/issues/detail?id=27094
- if (!UpdateTitleForEntry(entry, title))
- return;
-
- // Broadcast notifications when the UI should be updated.
- if (entry == controller_.GetEntryAtOffset(0))
- NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
-}
-
-void WebContentsImpl::UpdateEncoding(RenderViewHost* render_view_host,
- const std::string& encoding) {
- SetEncoding(encoding);
-}
-
void WebContentsImpl::UpdateTargetURL(int32 page_id, const GURL& url) {
if (delegate_)
delegate_->UpdateTargetURL(this, page_id, url);
@@ -3453,11 +3502,6 @@ void WebContentsImpl::DidCancelLoading() {
NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
}
-void WebContentsImpl::DidChangeLoadProgress(double progress) {
- if (delegate_)
- delegate_->LoadProgressChanged(this, progress);
-}
-
void WebContentsImpl::DidAccessInitialDocument() {
has_accessed_initial_document_ = true;
@@ -3497,6 +3541,42 @@ void WebContentsImpl::DocumentOnLoadCompleted(
NotificationService::NoDetails());
}
+void WebContentsImpl::UpdateTitle(RenderFrameHost* render_frame_host,
+ int32 page_id,
+ const base::string16& title,
+ base::i18n::TextDirection title_direction) {
+ RenderViewHost* rvh = render_frame_host->GetRenderViewHost();
+
+ // If we have a title, that's a pretty good indication that we've started
+ // getting useful data.
+ SetNotWaitingForResponse();
+
+ // Try to find the navigation entry, which might not be the current one.
+ // For example, it might be from a pending RVH for the pending entry.
+ NavigationEntryImpl* entry = controller_.GetEntryWithPageID(
+ rvh->GetSiteInstance(), page_id);
+
+ // We can handle title updates when we don't have an entry in
+ // UpdateTitleForEntry, but only if the update is from the current RVH.
+ // TODO(avi): Change to make decisions based on the RenderFrameHost.
+ if (!entry && rvh != GetRenderViewHost())
+ return;
+
+ // TODO(evan): make use of title_direction.
+ // http://code.google.com/p/chromium/issues/detail?id=27094
+ if (!UpdateTitleForEntry(entry, title))
+ return;
+
+ // Broadcast notifications when the UI should be updated.
+ if (entry == controller_.GetEntryAtOffset(0))
+ NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
+}
+
+void WebContentsImpl::UpdateEncoding(RenderFrameHost* render_frame_host,
+ const std::string& encoding) {
+ SetEncoding(encoding);
+}
+
void WebContentsImpl::DocumentAvailableInMainFrame(
RenderViewHost* render_view_host) {
FOR_EACH_OBSERVER(WebContentsObserver, observers_,
@@ -3782,7 +3862,8 @@ NavigationEntry*
bool WebContentsImpl::CreateRenderViewForRenderManager(
RenderViewHost* render_view_host,
int opener_route_id,
- CrossProcessFrameConnector* frame_connector) {
+ int proxy_routing_id,
+ bool for_main_frame) {
TRACE_EVENT0("browser", "WebContentsImpl::CreateRenderViewForRenderManager");
// Can be NULL during tests.
RenderWidgetHostViewBase* rwh_view;
@@ -3790,10 +3871,9 @@ bool WebContentsImpl::CreateRenderViewForRenderManager(
// until RenderWidgetHost is attached to RenderFrameHost. We need to special
// case this because RWH is still a base class of RenderViewHost, and child
// frame RWHVs are unique in that they do not have their own WebContents.
- if (frame_connector) {
+ if (!for_main_frame) {
RenderWidgetHostViewChildFrame* rwh_view_child =
new RenderWidgetHostViewChildFrame(render_view_host);
- frame_connector->set_view(rwh_view_child);
rwh_view = rwh_view_child;
} else {
rwh_view = view_->CreateViewForWidget(render_view_host);
@@ -3811,6 +3891,7 @@ bool WebContentsImpl::CreateRenderViewForRenderManager(
if (!static_cast<RenderViewHostImpl*>(
render_view_host)->CreateRenderView(base::string16(),
opener_route_id,
+ proxy_routing_id,
max_page_id,
created_with_opener_)) {
return false;
@@ -3846,7 +3927,8 @@ WebContentsImpl::GetJavaWebContents() {
bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() {
return CreateRenderViewForRenderManager(GetRenderViewHost(),
MSG_ROUTING_NONE,
- NULL);
+ MSG_ROUTING_NONE,
+ true);
}
#elif defined(OS_MACOSX)
@@ -3903,7 +3985,11 @@ void WebContentsImpl::OnDialogClosed(int render_process_id,
}
void WebContentsImpl::SetEncoding(const std::string& encoding) {
- encoding_ = GetContentClient()->browser()->
+ if (encoding == last_reported_encoding_)
+ return;
+ last_reported_encoding_ = encoding;
+
+ canonical_encoding_ = GetContentClient()->browser()->
GetCanonicalEncodingNameByAliasName(encoding);
}
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 92c8fead92..b4cab03c13 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -24,7 +24,6 @@
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/common/content_export.h"
-#include "content/public/browser/ax_event_notification_details.h"
#include "content/public/browser/color_chooser.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
@@ -48,8 +47,8 @@ class BrowserPluginGuest;
class BrowserPluginGuestManager;
class DateTimeChooserAndroid;
class DownloadItem;
+class GeolocationDispatcherHost;
class InterstitialPageImpl;
-class JavaBridgeDispatcherHostManager;
class JavaScriptDialogManager;
class PowerSaveBlocker;
class RenderViewHost;
@@ -99,13 +98,6 @@ class CONTENT_EXPORT WebContentsImpl
// opener is closed or the page clears its window.opener.
WebContentsImpl* opener() const { return opener_; }
- // Creates a WebContents to be used as a browser plugin guest.
- static BrowserPluginGuest* CreateGuest(
- BrowserContext* browser_context,
- content::SiteInstance* site_instance,
- int guest_instance_id,
- scoped_ptr<base::DictionaryValue> extra_params);
-
// Creates a swapped out RenderView. This is used by the browser plugin to
// create a swapped out RenderView in the embedder render process for the
// guest, to expose the guest's window object to the embedder.
@@ -120,10 +112,6 @@ class CONTENT_EXPORT WebContentsImpl
SavePackage* save_package() const { return save_package_.get(); }
#if defined(OS_ANDROID)
- JavaBridgeDispatcherHostManager* java_bridge_dispatcher_host_manager() const {
- return java_bridge_dispatcher_host_manager_.get();
- }
-
// In Android WebView, the RenderView needs created even there is no
// navigation entry, this allows Android WebViews to use
// javascript: URLs that load into the DOMWindow before the first page
@@ -172,6 +160,12 @@ class CONTENT_EXPORT WebContentsImpl
WebContentsView* GetView() const;
+ GeolocationDispatcherHost* geolocation_dispatcher_host() {
+ return geolocation_dispatcher_host_.get();
+ }
+
+ bool should_normally_be_visible() { return should_normally_be_visible_; }
+
// WebContents ------------------------------------------------------
virtual WebContentsDelegate* GetDelegate() OVERRIDE;
virtual void SetDelegate(WebContentsDelegate* delegate) OVERRIDE;
@@ -188,8 +182,6 @@ class CONTENT_EXPORT WebContentsImpl
const base::Callback<void(RenderFrameHost*)>& on_frame) OVERRIDE;
virtual void SendToAllFrames(IPC::Message* message) OVERRIDE;
virtual RenderViewHost* GetRenderViewHost() const OVERRIDE;
- virtual WebContents* GetEmbedderWebContents() const OVERRIDE;
- virtual int GetEmbeddedInstanceID() const OVERRIDE;
virtual int GetRoutingID() const OVERRIDE;
virtual RenderWidgetHostView* GetRenderWidgetHostView() const OVERRIDE;
virtual RenderWidgetHostView* GetFullscreenRenderWidgetHostView() const
@@ -210,6 +202,7 @@ class CONTENT_EXPORT WebContentsImpl
virtual SiteInstance* GetSiteInstance() const OVERRIDE;
virtual SiteInstance* GetPendingSiteInstance() const OVERRIDE;
virtual bool IsLoading() const OVERRIDE;
+ virtual bool IsLoadingToDifferentDocument() const OVERRIDE;
virtual bool IsWaitingForResponse() const OVERRIDE;
virtual const net::LoadStateWithParam& GetLoadState() const OVERRIDE;
virtual const base::string16& GetLoadStateHost() const OVERRIDE;
@@ -287,7 +280,6 @@ class CONTENT_EXPORT WebContentsImpl
virtual void UserGestureDone() OVERRIDE;
virtual void SetClosedByUserGesture(bool value) OVERRIDE;
virtual bool GetClosedByUserGesture() const OVERRIDE;
- virtual double GetZoomLevel() const OVERRIDE;
virtual int GetZoomPercent(bool* enable_increment,
bool* enable_decrement) const OVERRIDE;
virtual void ViewSource() OVERRIDE;
@@ -308,7 +300,6 @@ class CONTENT_EXPORT WebContentsImpl
virtual void Find(int request_id,
const base::string16& search_text,
const blink::WebFindOptions& options) OVERRIDE;
- virtual void SetZoomLevel(double level) OVERRIDE;
virtual void StopFinding(StopFindAction action) OVERRIDE;
virtual void InsertCSS(const std::string& css) OVERRIDE;
#if defined(OS_ANDROID)
@@ -336,7 +327,6 @@ class CONTENT_EXPORT WebContentsImpl
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void DidStartLoading(RenderFrameHost* render_frame_host,
bool to_different_document) OVERRIDE;
- virtual void DidStopLoading(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void SwappedOut(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void WorkerCrashed(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
@@ -355,6 +345,12 @@ class CONTENT_EXPORT WebContentsImpl
virtual void DidDisownOpener(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void DocumentOnLoadCompleted(
RenderFrameHost* render_frame_host) OVERRIDE;
+ virtual void UpdateTitle(RenderFrameHost* render_frame_host,
+ int32 page_id,
+ const base::string16& title,
+ base::i18n::TextDirection title_direction) OVERRIDE;
+ virtual void UpdateEncoding(RenderFrameHost* render_frame_host,
+ const std::string& encoding) OVERRIDE;
virtual WebContents* GetAsWebContents() OVERRIDE;
virtual bool IsNeverVisible() OVERRIDE;
@@ -375,17 +371,10 @@ class CONTENT_EXPORT WebContentsImpl
virtual void UpdateState(RenderViewHost* render_view_host,
int32 page_id,
const PageState& page_state) OVERRIDE;
- virtual void UpdateTitle(RenderViewHost* render_view_host,
- int32 page_id,
- const base::string16& title,
- base::i18n::TextDirection title_direction) OVERRIDE;
- virtual void UpdateEncoding(RenderViewHost* render_view_host,
- const std::string& encoding) OVERRIDE;
virtual void UpdateTargetURL(int32 page_id, const GURL& url) OVERRIDE;
virtual void Close(RenderViewHost* render_view_host) OVERRIDE;
virtual void RequestMove(const gfx::Rect& new_bounds) OVERRIDE;
virtual void DidCancelLoading() OVERRIDE;
- virtual void DidChangeLoadProgress(double progress) OVERRIDE;
virtual void DocumentAvailableInMainFrame(
RenderViewHost* render_view_host) OVERRIDE;
virtual void RouteCloseEvent(RenderViewHost* rvh) OVERRIDE;
@@ -528,7 +517,8 @@ class CONTENT_EXPORT WebContentsImpl
virtual bool CreateRenderViewForRenderManager(
RenderViewHost* render_view_host,
int opener_route_id,
- CrossProcessFrameConnector* frame_connector) OVERRIDE;
+ int proxy_routing_id,
+ bool for_main_frame) OVERRIDE;
virtual void BeforeUnloadFiredFromRenderManager(
bool proceed, const base::TimeTicks& proceed_time,
bool* proceed_to_fire_unload) OVERRIDE;
@@ -637,6 +627,7 @@ class CONTENT_EXPORT WebContentsImpl
private:
friend class TestNavigationObserver;
+ friend class WebContentsAddedObserver;
friend class WebContentsObserver;
friend class WebContents; // To implement factory methods.
@@ -651,6 +642,7 @@ class CONTENT_EXPORT WebContentsImpl
FRIEND_TEST_ALL_PREFIXES(FormStructureBrowserTest, HTMLFiles);
FRIEND_TEST_ALL_PREFIXES(NavigationControllerTest, HistoryNavigate);
FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest, PageDoesBackAndReload);
+ FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, CrossSiteIframe);
// So InterstitialPageImpl can access SetIsLoading.
friend class InterstitialPageImpl;
@@ -681,6 +673,10 @@ class CONTENT_EXPORT WebContentsImpl
// watching |web_contents|. No-op if there is no such observer.
void RemoveDestructionObserver(WebContentsImpl* web_contents);
+ // Traverses all the RenderFrameHosts in the FrameTree and creates a set
+ // all the unique RenderWidgetHosts.
+ std::set<RenderWidgetHostImpl*> GetRenderWidgetHostsInTree();
+
// Callback function when showing JavaScript dialogs. Takes in a routing ID
// pair to identify the RenderFrameHost that opened the dialog, because it's
// possible for the RenderFrameHost to be deleted by the time this is called.
@@ -710,10 +706,12 @@ class CONTENT_EXPORT WebContentsImpl
const GURL& target_url);
void OnDocumentLoadedInFrame();
void OnDidFinishLoad(const GURL& url);
+ void OnDidStartLoading(bool to_different_document);
+ void OnDidStopLoading();
+ void OnDidChangeLoadProgress(double load_progress);
void OnGoToEntryAtOffset(int offset);
void OnUpdateZoomLimits(int minimum_percent,
- int maximum_percent,
- bool remember);
+ int maximum_percent);
void OnEnumerateDirectory(int request_id, const base::FilePath& path);
void OnRegisterProtocolHandler(const std::string& protocol,
@@ -732,7 +730,6 @@ class CONTENT_EXPORT WebContentsImpl
void OnOpenDateTimeDialog(
const ViewHostMsg_DateTimeDialogValue_Params& value);
- void OnJavaBridgeGetChannelHandle(IPC::Message* reply_msg);
#endif
void OnPepperPluginHung(int plugin_child_id,
const base::FilePath& path,
@@ -771,7 +768,6 @@ class CONTENT_EXPORT WebContentsImpl
void OnHideValidationMessage();
void OnMoveValidationMessage(const gfx::Rect& anchor_in_root_view);
-
// Called by derived classes to indicate that we're no longer waiting for a
// response. This won't actually update the throbber, but it will get picked
// up at the next animation step if the throbber is going.
@@ -829,6 +825,17 @@ class CONTENT_EXPORT WebContentsImpl
// called once as this call also removes it from the internal map.
WebContentsImpl* GetCreatedWindow(int route_id);
+ // Tracking loading progress -------------------------------------------------
+
+ // Resets the tracking state of the current load.
+ void ResetLoadProgressState();
+
+ // Calculates the progress of the current load and notifies the delegate.
+ void SendLoadProgressChanged();
+
+ // Called once when the last frame on the page has stopped loading.
+ void DidStopLoading(RenderFrameHost* render_frame_host);
+
// Misc non-view stuff -------------------------------------------------------
// Helper functions for sending notifications.
@@ -927,13 +934,6 @@ class CONTENT_EXPORT WebContentsImpl
// Manages the frame tree of the page and process swaps in each node.
FrameTree frame_tree_;
-#if defined(OS_ANDROID)
- // Manages injecting Java objects into all RenderViewHosts associated with
- // this WebContentsImpl.
- scoped_ptr<JavaBridgeDispatcherHostManager>
- java_bridge_dispatcher_host_manager_;
-#endif
-
// SavePackage, lazily created.
scoped_refptr<SavePackage> save_package_;
@@ -942,6 +942,10 @@ class CONTENT_EXPORT WebContentsImpl
// Indicates whether we're currently loading a resource.
bool is_loading_;
+ // Indicates whether the current load is to a different document. Only valid
+ // if is_loading_ is true.
+ bool is_load_to_different_document_;
+
// Indicates if the tab is considered crashed.
base::TerminationStatus crashed_status_;
int crashed_error_code_;
@@ -959,6 +963,21 @@ class CONTENT_EXPORT WebContentsImpl
// The current load state and the URL associated with it.
net::LoadStateWithParam load_state_;
base::string16 load_state_host_;
+
+ // LoadingProgressMap maps FrameTreeNode IDs to a double representing that
+ // frame's completion (from 0 to 1).
+ typedef base::hash_map<int64, double> LoadingProgressMap;
+ LoadingProgressMap loading_progresses_;
+ double loading_total_progress_;
+
+ base::TimeTicks loading_last_progress_update_;
+
+ base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_;
+
+ // Counter to track how many frames have sent start notifications but not
+ // stop notifications.
+ int loading_frames_in_progress_;
+
// Upload progress, for displaying in the status bar.
// Set to zero when there is no significant upload happening.
uint64 upload_size_;
@@ -973,8 +992,11 @@ class CONTENT_EXPORT WebContentsImpl
// used to check whether we can do something for some special contents.
std::string contents_mime_type_;
- // Character encoding.
- std::string encoding_;
+ // The last reported character encoding, not canonicalized.
+ std::string last_reported_encoding_;
+
+ // The canonicalized character encoding.
+ std::string canonical_encoding_;
// True if this is a secure page which displayed insecure content.
bool displayed_insecure_content_;
@@ -1025,10 +1047,6 @@ class CONTENT_EXPORT WebContentsImpl
// Minimum/maximum zoom percent.
int minimum_zoom_percent_;
int maximum_zoom_percent_;
- // If true, the default zoom limits have been overriden for this tab, in which
- // case we don't want saved settings to apply to it and we don't want to
- // remember it.
- bool temporary_zoom_settings_;
// The raw accumulated zoom value and the actual zoom increments made for an
// an in-progress pinch gesture.
@@ -1109,6 +1127,8 @@ class CONTENT_EXPORT WebContentsImpl
// Whether the last JavaScript dialog shown was suppressed. Used for testing.
bool last_dialog_suppressed_;
+ scoped_ptr<GeolocationDispatcherHost> geolocation_dispatcher_host_;
+
DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
};
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index a8ada8f80d..1f0586cd33 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -97,6 +97,7 @@ class NavigateOnCommitObserver : public WebContentsObserver {
const LoadCommittedDetails& load_details) OVERRIDE {
if (!done_) {
done_ = true;
+ shell_->Stop();
shell_->LoadURL(url_);
}
}
@@ -158,7 +159,7 @@ class LoadingStateChangedDelegate : public WebContentsDelegate {
, loadingStateToDifferentDocumentCount_(0) {
}
- // WebContentsDelgate:
+ // WebContentsDelegate:
virtual void LoadingStateChanged(WebContents* contents,
bool to_different_document) OVERRIDE {
loadingStateChangedCount_++;
@@ -212,6 +213,7 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
MAYBE_DidStopLoadingDetailsWithPending) {
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ GURL url("data:text/html,<div>test</div>");
// Listen for the first load to stop.
LoadStopNotificationObserver load_observer(
@@ -221,10 +223,10 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
// is started.
NavigateOnCommitObserver commit_observer(
shell(), embedded_test_server()->GetURL("/title2.html"));
- NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html"));
+ NavigateToURL(shell(), url);
load_observer.Wait();
- EXPECT_EQ("/title1.html", load_observer.url_.path());
+ EXPECT_EQ(url, load_observer.url_);
EXPECT_EQ(0, load_observer.session_index_);
EXPECT_EQ(&shell()->web_contents()->GetController(),
load_observer.controller_);
@@ -437,5 +439,83 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
EXPECT_EQ(3, delegate->loadingStateToDifferentDocumentCount());
}
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
+ RenderViewCreatedForChildWindow) {
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+
+ NavigateToURL(shell(),
+ embedded_test_server()->GetURL("/title1.html"));
+
+ WebContentsAddedObserver new_web_contents_observer;
+ ASSERT_TRUE(ExecuteScript(shell()->web_contents(),
+ "var a = document.createElement('a');"
+ "a.href='./title2.html';"
+ "a.target = '_blank';"
+ "document.body.appendChild(a);"
+ "a.click();"));
+ WebContents* new_web_contents = new_web_contents_observer.GetWebContents();
+ WaitForLoadStop(new_web_contents);
+ EXPECT_TRUE(new_web_contents_observer.RenderViewCreatedCalled());
+}
+
+struct LoadProgressDelegateAndObserver : public WebContentsDelegate,
+ public WebContentsObserver {
+ LoadProgressDelegateAndObserver(Shell* shell)
+ : WebContentsObserver(shell->web_contents()),
+ did_start_loading(false),
+ did_stop_loading(false) {
+ web_contents()->SetDelegate(this);
+ }
+
+ // WebContentsDelegate:
+ virtual void LoadProgressChanged(WebContents* source,
+ double progress) OVERRIDE {
+ EXPECT_TRUE(did_start_loading);
+ EXPECT_FALSE(did_stop_loading);
+ progresses.push_back(progress);
+ }
+
+ // WebContentsObserver:
+ virtual void DidStartLoading(RenderViewHost* render_view_host) OVERRIDE {
+ EXPECT_FALSE(did_start_loading);
+ EXPECT_EQ(0U, progresses.size());
+ EXPECT_FALSE(did_stop_loading);
+ did_start_loading = true;
+ }
+
+ virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE {
+ EXPECT_TRUE(did_start_loading);
+ EXPECT_GE(progresses.size(), 1U);
+ EXPECT_FALSE(did_stop_loading);
+ did_stop_loading = true;
+ }
+
+ bool did_start_loading;
+ std::vector<double> progresses;
+ bool did_stop_loading;
+};
+
+IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, LoadProgress) {
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ scoped_ptr<LoadProgressDelegateAndObserver> delegate(
+ new LoadProgressDelegateAndObserver(shell()));
+
+ NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html"));
+
+ const std::vector<double>& progresses = delegate->progresses;
+ // All updates should be in order ...
+ if (std::adjacent_find(progresses.begin(),
+ progresses.end(),
+ std::greater<double>()) != progresses.end()) {
+ ADD_FAILURE() << "Progress values should be in order: "
+ << ::testing::PrintToString(progresses);
+ }
+
+ // ... and the last one should be 1.0, meaning complete.
+ ASSERT_GE(progresses.size(), 1U)
+ << "There should be at least one progress update";
+ EXPECT_EQ(1.0, *progresses.rbegin());
+}
+
} // namespace content
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index d49fcec850..b3cd30bfbf 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -330,7 +330,7 @@ TEST_F(WebContentsImplTest, UpdateTitle) {
LoadCommittedDetails details;
cont.RendererDidNavigate(main_test_rfh(), params, &details);
- contents()->UpdateTitle(rvh(), 0,
+ contents()->UpdateTitle(main_test_rfh(), 0,
base::ASCIIToUTF16(" Lots O' Whitespace\n"),
base::i18n::LEFT_TO_RIGHT);
EXPECT_EQ(base::ASCIIToUTF16("Lots O' Whitespace"), contents()->GetTitle());
@@ -2535,4 +2535,110 @@ TEST_F(WebContentsImplTest, HandleGestureEvent) {
contents()->SetDelegate(NULL);
}
+// Tests that GetRelatedActiveContentsCount is shared between related
+// SiteInstances and includes WebContents that have not navigated yet.
+TEST_F(WebContentsImplTest, ActiveContentsCountBasic) {
+ scoped_refptr<SiteInstance> instance1(
+ SiteInstance::CreateForURL(browser_context(), GURL("http://a.com")));
+ scoped_refptr<SiteInstance> instance2(
+ instance1->GetRelatedSiteInstance(GURL("http://b.com")));
+
+ EXPECT_EQ(0u, instance1->GetRelatedActiveContentsCount());
+ EXPECT_EQ(0u, instance2->GetRelatedActiveContentsCount());
+
+ scoped_ptr<TestWebContents> contents1(
+ TestWebContents::Create(browser_context(), instance1));
+ EXPECT_EQ(1u, instance1->GetRelatedActiveContentsCount());
+ EXPECT_EQ(1u, instance2->GetRelatedActiveContentsCount());
+
+ scoped_ptr<TestWebContents> contents2(
+ TestWebContents::Create(browser_context(), instance1));
+ EXPECT_EQ(2u, instance1->GetRelatedActiveContentsCount());
+ EXPECT_EQ(2u, instance2->GetRelatedActiveContentsCount());
+
+ contents1.reset();
+ EXPECT_EQ(1u, instance1->GetRelatedActiveContentsCount());
+ EXPECT_EQ(1u, instance2->GetRelatedActiveContentsCount());
+
+ contents2.reset();
+ EXPECT_EQ(0u, instance1->GetRelatedActiveContentsCount());
+ EXPECT_EQ(0u, instance2->GetRelatedActiveContentsCount());
+}
+
+// Tests that GetRelatedActiveContentsCount is preserved correctly across
+// same-site and cross-site navigations.
+TEST_F(WebContentsImplTest, ActiveContentsCountNavigate) {
+ scoped_refptr<SiteInstance> instance(
+ SiteInstance::Create(browser_context()));
+
+ EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+
+ scoped_ptr<TestWebContents> contents(
+ TestWebContents::Create(browser_context(), instance));
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ // Navigate to a URL.
+ contents->GetController().LoadURL(
+ GURL("http://a.com/1"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+ contents->CommitPendingNavigation();
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ // Navigate to a URL in the same site.
+ contents->GetController().LoadURL(
+ GURL("http://a.com/2"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+ contents->CommitPendingNavigation();
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ // Navigate to a URL in a different site.
+ contents->GetController().LoadURL(
+ GURL("http://b.com"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ EXPECT_TRUE(contents->cross_navigation_pending());
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+ contents->CommitPendingNavigation();
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ contents.reset();
+ EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+}
+
+// Tests that GetRelatedActiveContentsCount tracks BrowsingInstance changes
+// from WebUI.
+TEST_F(WebContentsImplTest, ActiveContentsCountChangeBrowsingInstance) {
+ scoped_refptr<SiteInstance> instance(
+ SiteInstance::Create(browser_context()));
+
+ EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+
+ scoped_ptr<TestWebContents> contents(
+ TestWebContents::Create(browser_context(), instance));
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ // Navigate to a URL.
+ contents->NavigateAndCommit(GURL("http://a.com"));
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+
+ // Navigate to a URL with WebUI. This will change BrowsingInstances.
+ contents->GetController().LoadURL(
+ GURL(kTestWebUIUrl), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ EXPECT_TRUE(contents->cross_navigation_pending());
+ scoped_refptr<SiteInstance> instance_webui(
+ contents->GetPendingRenderViewHost()->GetSiteInstance());
+ EXPECT_FALSE(instance->IsRelatedSiteInstance(instance_webui.get()));
+
+ // At this point, contents still counts for the old BrowsingInstance.
+ EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
+ EXPECT_EQ(0u, instance_webui->GetRelatedActiveContentsCount());
+
+ // Commit and contents counts for the new one.
+ contents->CommitPendingNavigation();
+ EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+ EXPECT_EQ(1u, instance_webui->GetRelatedActiveContentsCount());
+
+ contents.reset();
+ EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
+ EXPECT_EQ(0u, instance_webui->GetRelatedActiveContentsCount());
+}
+
} // namespace content
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index c818fa189e..4b740e4baf 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -9,6 +9,7 @@
#include "base/file_util.h"
#include "base/metrics/histogram.h"
#include "base/strings/utf_string_conversions.h"
+#include "content/browser/browser_plugin/browser_plugin_guest.h"
#include "content/browser/download/drag_download_util.h"
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
@@ -98,13 +99,26 @@ bool ShouldNavigateBack(const NavigationController& controller,
controller.CanGoBack();
}
+// Update the |web contents| to be |visible|.
+void UpdateWebContentsVisibility(WebContentsImpl* web_contents, bool visible) {
+ if (visible) {
+ if (!web_contents->should_normally_be_visible())
+ web_contents->WasShown();
+ } else {
+ if (web_contents->should_normally_be_visible())
+ web_contents->WasHidden();
+ }
+}
+
RenderWidgetHostViewAura* ToRenderWidgetHostViewAura(
RenderWidgetHostView* view) {
if (!view || RenderViewHostFactory::has_factory())
return NULL; // Can't cast to RenderWidgetHostViewAura in unit tests.
- RenderProcessHostImpl* process = static_cast<RenderProcessHostImpl*>(
- view->GetRenderWidgetHost()->GetProcess());
- if (process->IsGuest())
+
+ RenderViewHost* rvh = RenderViewHost::From(view->GetRenderWidgetHost());
+ WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
+ rvh ? WebContents::FromRenderViewHost(rvh) : NULL);
+ if (BrowserPluginGuest::IsGuest(web_contents))
return NULL;
return static_cast<RenderWidgetHostViewAura*>(view);
}
@@ -132,8 +146,7 @@ class OverscrollWindowDelegate : public ImageWindowDelegate {
if (entry && entry->screenshot().get()) {
std::vector<gfx::ImagePNGRep> image_reps;
image_reps.push_back(gfx::ImagePNGRep(entry->screenshot(),
- ui::GetImageScale(
- ui::GetScaleFactorForNativeView(web_contents_window()))));
+ ui::GetScaleFactorForNativeView(web_contents_window())));
image = gfx::Image(image_reps);
}
SetImage(image);
@@ -718,6 +731,7 @@ WebContentsViewAura::~WebContentsViewAura() {
return;
window_observer_.reset();
+ window_->RemoveObserver(this);
// Window needs a valid delegate during its destructor, so we explicitly
// delete it here.
@@ -1045,6 +1059,7 @@ void WebContentsViewAura::CreateView(
window_->SetType(ui::wm::WINDOW_TYPE_CONTROL);
window_->SetTransparent(false);
window_->Init(aura::WINDOW_LAYER_NOT_DRAWN);
+ window_->AddObserver(this);
aura::Window* root_window = context ? context->GetRootWindow() : NULL;
if (root_window) {
// There are places where there is no context currently because object
@@ -1068,7 +1083,7 @@ void WebContentsViewAura::CreateView(
// The use cases for WindowObserver do not apply to Browser Plugins:
// 1) guests do not support NPAPI plugins.
// 2) guests' window bounds are supposed to come from its embedder.
- if (!web_contents_->GetRenderProcessHost()->IsGuest())
+ if (!BrowserPluginGuest::IsGuest(web_contents_))
window_observer_.reset(new WindowObserver(this));
// delegate_->GetDragDestDelegate() creates a new delegate on every call.
@@ -1257,8 +1272,6 @@ void WebContentsViewAura::OnOverscrollUpdate(float delta_x, float delta_y) {
return;
aura::Window* target = GetWindowToAnimateForOverscroll();
- ui::ScopedLayerAnimationSettings settings(target->layer()->GetAnimator());
- settings.SetPreemptionStrategy(ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET);
gfx::Vector2d translate = GetTranslationForOverscroll(delta_x, delta_y);
gfx::Transform transform;
@@ -1429,10 +1442,6 @@ void WebContentsViewAura::OnWindowDestroyed(aura::Window* window) {
}
void WebContentsViewAura::OnWindowTargetVisibilityChanged(bool visible) {
- if (visible)
- web_contents_->WasShown();
- else
- web_contents_->WasHidden();
}
bool WebContentsViewAura::HasHitTestMask() const {
@@ -1472,17 +1481,25 @@ void WebContentsViewAura::OnMouseEvent(ui::MouseEvent* event) {
// WebContentsViewAura, aura::client::DragDropDelegate implementation:
void WebContentsViewAura::OnDragEntered(const ui::DropTargetEvent& event) {
- if (drag_dest_delegate_)
- drag_dest_delegate_->DragInitialize(web_contents_);
-
+ current_rvh_for_drag_ = web_contents_->GetRenderViewHost();
current_drop_data_.reset(new DropData());
PrepareDropData(current_drop_data_.get(), event.data());
blink::WebDragOperationsMask op = ConvertToWeb(event.source_operations());
+ // Give the delegate an opportunity to cancel the drag.
+ if (!web_contents_->GetDelegate()->CanDragEnter(web_contents_,
+ *current_drop_data_.get(),
+ op)) {
+ current_drop_data_.reset(NULL);
+ return;
+ }
+
+ if (drag_dest_delegate_)
+ drag_dest_delegate_->DragInitialize(web_contents_);
+
gfx::Point screen_pt =
gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint();
- current_rvh_for_drag_ = web_contents_->GetRenderViewHost();
web_contents_->GetRenderViewHost()->DragTargetDragEnter(
*current_drop_data_.get(), event.location(), screen_pt, op,
ConvertAuraEventFlagsToWebInputEventModifiers(event.flags()));
@@ -1498,6 +1515,9 @@ int WebContentsViewAura::OnDragUpdated(const ui::DropTargetEvent& event) {
if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
OnDragEntered(event);
+ if (!current_drop_data_)
+ return ui::DragDropTypes::DRAG_NONE;
+
blink::WebDragOperationsMask op = ConvertToWeb(event.source_operations());
gfx::Point screen_pt =
gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint();
@@ -1516,6 +1536,9 @@ void WebContentsViewAura::OnDragExited() {
if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
return;
+ if (!current_drop_data_)
+ return;
+
web_contents_->GetRenderViewHost()->DragTargetDragLeave();
if (drag_dest_delegate_)
drag_dest_delegate_->OnDragLeave();
@@ -1528,6 +1551,9 @@ int WebContentsViewAura::OnPerformDrop(const ui::DropTargetEvent& event) {
if (current_rvh_for_drag_ != web_contents_->GetRenderViewHost())
OnDragEntered(event);
+ if (!current_drop_data_)
+ return ui::DragDropTypes::DRAG_NONE;
+
web_contents_->GetRenderViewHost()->DragTargetDrop(
event.location(),
gfx::Screen::GetScreenFor(GetNativeView())->GetCursorScreenPoint(),
@@ -1538,4 +1564,22 @@ int WebContentsViewAura::OnPerformDrop(const ui::DropTargetEvent& event) {
return ConvertFromWeb(current_drag_op_);
}
+void WebContentsViewAura::OnWindowParentChanged(aura::Window* window,
+ aura::Window* parent) {
+ // On Windows we will get called with a parent of NULL as part of the shut
+ // down process. As such we do only change the visibility when a parent gets
+ // set.
+ if (parent)
+ UpdateWebContentsVisibility(web_contents_, window->IsVisible());
+}
+
+void WebContentsViewAura::OnWindowVisibilityChanged(aura::Window* window,
+ bool visible) {
+ // Ignore any visibility changes in the hierarchy below.
+ if (window != window_.get() && window_->Contains(window))
+ return;
+
+ UpdateWebContentsVisibility(web_contents_, visible);
+}
+
} // namespace content
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index 9cf4182ea9..8b9004d18b 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -14,6 +14,7 @@
#include "content/browser/web_contents/web_contents_view.h"
#include "content/common/content_export.h"
#include "ui/aura/window_delegate.h"
+#include "ui/aura/window_observer.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/wm/public/drag_drop_delegate.h"
@@ -41,7 +42,8 @@ class WebContentsViewAura
public OverscrollControllerDelegate,
public ui::ImplicitAnimationObserver,
public aura::WindowDelegate,
- public aura::client::DragDropDelegate {
+ public aura::client::DragDropDelegate,
+ public aura::WindowObserver {
public:
WebContentsViewAura(WebContentsImpl* web_contents,
WebContentsViewDelegate* delegate);
@@ -176,6 +178,12 @@ class WebContentsViewAura
virtual void OnDragExited() OVERRIDE;
virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE;
+ // Overridden from aura::WindowObserver:
+ virtual void OnWindowParentChanged(aura::Window* window,
+ aura::Window* parent) OVERRIDE;
+ virtual void OnWindowVisibilityChanged(aura::Window* window,
+ bool visible) OVERRIDE;
+
scoped_ptr<aura::Window> window_;
// The window that shows the screenshot of the history page during an
diff --git a/content/browser/web_contents/web_contents_view_aura_browsertest.cc b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
index 330f624685..8399a84b4b 100644
--- a/content/browser/web_contents/web_contents_view_aura_browsertest.cc
+++ b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
@@ -267,17 +267,14 @@ class WebContentsViewAuraTest : public ContentBrowserTest {
DISALLOW_COPY_AND_ASSIGN(WebContentsViewAuraTest);
};
-// Flaky on Windows (perhaps just Win-Aura): http://crbug.com/305722
-#if defined(OS_WIN)
-#define MAYBE_OverscrollNavigation DISABLED_OverscrollNavigation
-#else
-#define MAYBE_OverscrollNavigation OverscrollNavigation
-#endif
-IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest, MAYBE_OverscrollNavigation) {
+// Flaky on Windows and ChromeOS: http://crbug.com/305722
+IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
+ DISABLED_OverscrollNavigation) {
TestOverscrollNavigation(false);
}
-// Flaky on Windows (perhaps just Win-Aura): http://crbug.com/305722
+// Flaky on Windows (might be related to the above test):
+// http://crbug.com/305722
#if defined(OS_WIN)
#define MAYBE_OverscrollNavigationWithTouchHandler \
DISABLED_OverscrollNavigationWithTouchHandler
@@ -380,13 +377,9 @@ IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
// - interactively, when user does an overscroll gesture
// - interactively, when user navigates in history without the overscroll
// gesture.
-#if defined(OS_WIN)
-// http://crbug.com/357311
-#define MAYBE_OverscrollScreenshot DISABLED_OverscrollScreenshot
-#else
-#define MAYBE_OverscrollScreenshot OverscrollScreenshot
-#endif
-IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest, MAYBE_OverscrollScreenshot) {
+// Flaky on Windows and ChromeOS (http://crbug.com/357311). Might be related to
+// OverscrollNavigation test.
+IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest, DISABLED_OverscrollScreenshot) {
// Disable the test for WinXP. See http://crbug/294116.
#if defined(OS_WIN)
if (base::win::GetVersion() < base::win::VERSION_VISTA) {
@@ -594,8 +587,7 @@ IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
window->AddChild(shell()->web_contents()->GetContentNativeView());
}
-IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
- ContentWindowClose) {
+IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest, ContentWindowClose) {
ASSERT_NO_FATAL_FAILURE(
StartTestWithPage("files/overscroll_navigation.html"));
@@ -684,4 +676,17 @@ IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
EXPECT_FALSE(controller.CanGoForward());
}
+// Verify that hiding a parent of the renderer will hide the content too.
+IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest, HideContentOnParenHide) {
+ ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/title1.html"));
+ WebContentsImpl* web_contents =
+ static_cast<WebContentsImpl*>(shell()->web_contents());
+ aura::Window* content = web_contents->GetNativeView()->parent();
+ EXPECT_TRUE(web_contents->should_normally_be_visible());
+ content->Hide();
+ EXPECT_FALSE(web_contents->should_normally_be_visible());
+ content->Show();
+ EXPECT_TRUE(web_contents->should_normally_be_visible());
+}
+
} // namespace content
diff --git a/content/browser/web_contents/web_drag_source_mac.mm b/content/browser/web_contents/web_drag_source_mac.mm
index 9741b44c3f..b0f2160933 100644
--- a/content/browser/web_contents/web_drag_source_mac.mm
+++ b/content/browser/web_contents/web_drag_source_mac.mm
@@ -24,7 +24,6 @@
#include "content/public/browser/content_browser_client.h"
#include "content/public/common/content_client.h"
#include "content/public/common/drop_data.h"
-#include "content/public/common/url_constants.h"
#include "grit/ui_resources.h"
#include "net/base/escape.h"
#include "net/base/filename_util.h"
@@ -32,6 +31,7 @@
#include "ui/base/clipboard/custom_data_helper.h"
#include "ui/base/dragdrop/cocoa_dnd_util.h"
#include "ui/gfx/image/image.h"
+#include "url/url_constants.h"
using base::SysNSStringToUTF8;
using base::SysUTF8ToNSString;
@@ -169,7 +169,7 @@ void PromiseWriterHelper(const DropData& drop_data,
NSURL* url = [NSURL URLWithString:SysUTF8ToNSString(dropData_->url.spec())];
// If NSURL creation failed, check for a badly-escaped JavaScript URL.
// Strip out any existing escapes and then re-escape uniformly.
- if (!url && dropData_->url.SchemeIs(content::kJavaScriptScheme)) {
+ if (!url && dropData_->url.SchemeIs(url::kJavaScriptScheme)) {
net::UnescapeRule::Type unescapeRules =
net::UnescapeRule::SPACES |
net::UnescapeRule::URL_SPECIAL_CHARS |
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc
index e75132695f..e9b66efd71 100644
--- a/content/browser/webui/url_data_manager_backend.cc
+++ b/content/browser/webui/url_data_manager_backend.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/compiler_specific.h"
+#include "base/debug/alias.h"
#include "base/debug/trace_event.h"
#include "base/lazy_instance.h"
#include "base/memory/ref_counted.h"
@@ -341,6 +342,11 @@ bool URLRequestChromeJob::ReadRawData(net::IOBuffer* buf, int buf_size,
void URLRequestChromeJob::CompleteRead(net::IOBuffer* buf, int buf_size,
int* bytes_read) {
+ // http://crbug.com/373841
+ char url_buf[128];
+ base::strlcpy(url_buf, request_->url().spec().c_str(), arraysize(url_buf));
+ base::debug::Alias(url_buf);
+
int remaining = static_cast<int>(data_->size()) - data_offset_;
if (buf_size > remaining)
buf_size = remaining;
diff --git a/content/browser/webui/web_ui_impl.cc b/content/browser/webui/web_ui_impl.cc
index 72261c37ec..340a047b39 100644
--- a/content/browser/webui/web_ui_impl.cc
+++ b/content/browser/webui/web_ui_impl.cc
@@ -98,7 +98,7 @@ WebContents* WebUIImpl::GetWebContents() const {
return web_contents_;
}
-ui::ScaleFactor WebUIImpl::GetDeviceScaleFactor() const {
+float WebUIImpl::GetDeviceScaleFactor() const {
return GetScaleFactorForView(web_contents_->GetRenderWidgetHostView());
}
diff --git a/content/browser/webui/web_ui_impl.h b/content/browser/webui/web_ui_impl.h
index b718dad52c..40cb559c1f 100644
--- a/content/browser/webui/web_ui_impl.h
+++ b/content/browser/webui/web_ui_impl.h
@@ -34,7 +34,7 @@ class CONTENT_EXPORT WebUIImpl : public WebUI,
virtual WebContents* GetWebContents() const OVERRIDE;
virtual WebUIController* GetController() const OVERRIDE;
virtual void SetController(WebUIController* controller) OVERRIDE;
- virtual ui::ScaleFactor GetDeviceScaleFactor() const OVERRIDE;
+ virtual float GetDeviceScaleFactor() const OVERRIDE;
virtual const base::string16& GetOverriddenTitle() const OVERRIDE;
virtual void OverrideTitle(const base::string16& title) OVERRIDE;
virtual PageTransition GetLinkTransitionType() const OVERRIDE;
diff --git a/content/browser/webui/web_ui_mojo_browsertest.cc b/content/browser/webui/web_ui_mojo_browsertest.cc
index 039db85b8f..2128e9e346 100644
--- a/content/browser/webui/web_ui_mojo_browsertest.cc
+++ b/content/browser/webui/web_ui_mojo_browsertest.cc
@@ -24,7 +24,6 @@
#include "content/test/data/web_ui_test_mojo_bindings.mojom.h"
#include "grit/content_resources.h"
#include "mojo/common/test/test_utils.h"
-#include "mojo/public/cpp/bindings/allocation_scope.h"
#include "mojo/public/js/bindings/constants.h"
namespace content {
@@ -57,9 +56,9 @@ class BrowserTargetImpl : public BrowserTarget {
public:
BrowserTargetImpl(mojo::ScopedMessagePipeHandle handle,
base::RunLoop* run_loop)
- : renderer_(mojo::MakeProxy<RendererTarget>(handle.Pass())),
- run_loop_(run_loop) {
- renderer_->SetClient(this);
+ : run_loop_(run_loop) {
+ renderer_.Bind(handle.Pass());
+ renderer_.set_client(this);
}
virtual ~BrowserTargetImpl() {}
diff --git a/content/browser/worker_host/worker_message_filter.cc b/content/browser/worker_host/worker_message_filter.cc
index 1e515e6fd5..62348b5ff0 100644
--- a/content/browser/worker_host/worker_message_filter.cc
+++ b/content/browser/worker_host/worker_message_filter.cc
@@ -34,10 +34,9 @@ void WorkerMessageFilter::OnChannelClosing() {
WorkerServiceImpl::GetInstance()->OnWorkerMessageFilterClosing(this);
}
-bool WorkerMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool WorkerMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(WorkerMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(WorkerMessageFilter, message)
// Worker messages.
// Only sent from renderer for now, until we have nested workers.
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWorker, OnCreateWorker)
@@ -45,7 +44,7 @@ bool WorkerMessageFilter::OnMessageReceived(const IPC::Message& message,
// Only sent from renderer.
IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentDetached, OnDocumentDetached)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/browser/worker_host/worker_message_filter.h b/content/browser/worker_host/worker_message_filter.h
index 937f67ca3f..ab9bade8e6 100644
--- a/content/browser/worker_host/worker_message_filter.h
+++ b/content/browser/worker_host/worker_message_filter.h
@@ -25,8 +25,7 @@ class WorkerMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OnChannelClosing() OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
int GetNextRoutingID();
int render_process_id() const { return render_process_id_; }
diff --git a/content/browser/worker_host/worker_process_host.cc b/content/browser/worker_host/worker_process_host.cc
index ee9548e807..81645f6673 100644
--- a/content/browser/worker_host/worker_process_host.cc
+++ b/content/browser/worker_host/worker_process_host.cc
@@ -373,9 +373,8 @@ void WorkerProcessHost::OnProcessLaunched() {
}
bool WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
- bool msg_is_ok = true;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(WorkerProcessHost, message)
IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextClosed,
OnWorkerContextClosed)
IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextDestroyed,
@@ -387,19 +386,13 @@ bool WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected,
OnWorkerConnected)
IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase)
- IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowFileSystem, OnAllowFileSystem)
+ IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_RequestFileSystemAccessSync,
+ OnRequestFileSystemAccessSync)
IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB)
IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_ForceKillWorker,
OnForceKillWorkerProcess)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- NOTREACHED();
- RecordAction(base::UserMetricsAction("BadMessageTerminate_WPH"));
- base::KillProcess(
- process_->GetData().handle, RESULT_CODE_KILLED_BAD_MESSAGE, false);
- }
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -480,9 +473,9 @@ void WorkerProcessHost::OnAllowDatabase(int worker_route_id,
GetRenderFrameIDsForWorker(worker_route_id));
}
-void WorkerProcessHost::OnAllowFileSystem(int worker_route_id,
- const GURL& url,
- bool* result) {
+void WorkerProcessHost::OnRequestFileSystemAccessSync(int worker_route_id,
+ const GURL& url,
+ bool* result) {
*result = GetContentClient()->browser()->AllowWorkerFileSystem(
url, resource_context_, GetRenderFrameIDsForWorker(worker_route_id));
}
@@ -510,12 +503,12 @@ void WorkerProcessHost::RelayMessage(
WorkerInstance* instance) {
if (message.type() == WorkerMsg_Connect::ID) {
// Crack the SharedWorker Connect message to setup routing for the port.
- int sent_message_port_id;
- int new_routing_id;
- if (!WorkerMsg_Connect::Read(
- &message, &sent_message_port_id, &new_routing_id)) {
+ WorkerMsg_Connect::Param params;
+ if (!WorkerMsg_Connect::Read(&message, &params))
return;
- }
+
+ int sent_message_port_id = params.a;
+ int new_routing_id = params.b;
new_routing_id = worker_message_filter_->GetNextRoutingID();
MessagePortService::GetInstance()->UpdateMessagePort(
sent_message_port_id,
diff --git a/content/browser/worker_host/worker_process_host.h b/content/browser/worker_host/worker_process_host.h
index 10ea12a3e1..150153139f 100644
--- a/content/browser/worker_host/worker_process_host.h
+++ b/content/browser/worker_host/worker_process_host.h
@@ -224,9 +224,9 @@ class WorkerProcessHost : public BrowserChildProcessHostDelegate,
const base::string16& display_name,
unsigned long estimated_size,
bool* result);
- void OnAllowFileSystem(int worker_route_id,
- const GURL& url,
- bool* result);
+ void OnRequestFileSystemAccessSync(int worker_route_id,
+ const GURL& url,
+ bool* result);
void OnAllowIndexedDB(int worker_route_id,
const GURL& url,
const base::string16& name,
diff --git a/content/browser/zygote_host/zygote_host_impl_linux.cc b/content/browser/zygote_host/zygote_host_impl_linux.cc
index 9d63ad9abf..81d075688d 100644
--- a/content/browser/zygote_host/zygote_host_impl_linux.cc
+++ b/content/browser/zygote_host/zygote_host_impl_linux.cc
@@ -559,10 +559,6 @@ pid_t ZygoteHostImpl::GetPid() const {
return pid_;
}
-pid_t ZygoteHostImpl::GetSandboxHelperPid() const {
- return RenderSandboxHostLinux::GetInstance()->pid();
-}
-
int ZygoteHostImpl::GetSandboxStatus() const {
if (have_read_sandbox_status_word_)
return sandbox_status_;
diff --git a/content/browser/zygote_host/zygote_host_impl_linux.h b/content/browser/zygote_host/zygote_host_impl_linux.h
index 08044fa5a8..c443546984 100644
--- a/content/browser/zygote_host/zygote_host_impl_linux.h
+++ b/content/browser/zygote_host/zygote_host_impl_linux.h
@@ -55,7 +55,6 @@ class CONTENT_EXPORT ZygoteHostImpl : public ZygoteHost {
// ZygoteHost implementation:
virtual pid_t GetPid() const OVERRIDE;
- virtual pid_t GetSandboxHelperPid() const OVERRIDE;
virtual int GetSandboxStatus() const OVERRIDE;
virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
int score) OVERRIDE;
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index 78f648ed31..ca09c86dd7 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -32,7 +32,6 @@
#include "content/child/web_discardable_memory_impl.h"
#include "content/child/web_socket_stream_handle_impl.h"
#include "content/child/web_url_loader_impl.h"
-#include "content/child/webcrypto/webcrypto_impl.h"
#include "content/child/websocket_bridge.h"
#include "content/child/webthread_impl.h"
#include "content/child/worker_task_runner.h"
@@ -316,6 +315,8 @@ static int ToMessageID(WebLocalizedString::Name name) {
return IDS_RECENT_SEARCHES_NONE;
case WebLocalizedString::SearchMenuRecentSearchesText:
return IDS_RECENT_SEARCHES;
+ case WebLocalizedString::SelectMenuListText:
+ return IDS_FORM_SELECT_MENU_LIST_TEXT;
case WebLocalizedString::SubmitButtonDefaultLabel:
return IDS_FORM_SUBMIT_LABEL;
case WebLocalizedString::ThisMonthButtonLabel:
@@ -907,9 +908,8 @@ void BlinkPlatformImpl::didStopWorkerRunLoop(
}
blink::WebCrypto* BlinkPlatformImpl::crypto() {
- if (!web_crypto_)
- web_crypto_.reset(new WebCryptoImpl());
- return web_crypto_.get();
+ WebCryptoImpl::EnsureInit();
+ return &web_crypto_;
}
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h
index 156c773bf2..32e872e883 100644
--- a/content/child/blink_platform_impl.h
+++ b/content/child/blink_platform_impl.h
@@ -10,6 +10,7 @@
#include "base/platform_file.h"
#include "base/threading/thread_local_storage.h"
#include "base/timer/timer.h"
+#include "content/child/webcrypto/webcrypto_impl.h"
#include "content/child/webfallbackthemeengine_impl.h"
#include "content/common/content_export.h"
#include "third_party/WebKit/public/platform/Platform.h"
@@ -174,7 +175,7 @@ class CONTENT_EXPORT BlinkPlatformImpl
int shared_timer_suspended_; // counter
scoped_ptr<FlingCurveConfiguration> fling_curve_configuration_;
base::ThreadLocalStorage::Slot current_thread_slot_;
- scoped_ptr<WebCryptoImpl> web_crypto_;
+ WebCryptoImpl web_crypto_;
};
} // namespace content
diff --git a/content/child/child_thread.cc b/content/child/child_thread.cc
index 1ac546861e..0d2e7e0a34 100644
--- a/content/child/child_thread.cc
+++ b/content/child/child_thread.cc
@@ -353,7 +353,7 @@ void ChildThread::OnChannelError() {
base::MessageLoop::current()->Quit();
}
-void ChildThread::AcceptConnection(
+void ChildThread::ConnectToService(
const mojo::String& service_name,
mojo::ScopedMessagePipeHandle message_pipe) {
// By default, we don't expect incoming connections.
diff --git a/content/child/child_thread.h b/content/child/child_thread.h
index 1b04830763..1728c71d75 100644
--- a/content/child/child_thread.h
+++ b/content/child/child_thread.h
@@ -16,7 +16,7 @@
#include "content/common/content_export.h"
#include "content/common/message_router.h"
#include "ipc/ipc_message.h" // For IPC_MESSAGE_LOG_ENABLED.
-#include "mojo/public/interfaces/shell/shell.mojom.h"
+#include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
namespace base {
class MessageLoop;
@@ -56,9 +56,10 @@ class WebSocketDispatcher;
struct RequestInfo;
// The main thread of a child process derives from this class.
-class CONTENT_EXPORT ChildThread : public IPC::Listener,
- public IPC::Sender,
- public NON_EXPORTED_BASE(mojo::ShellClient) {
+class CONTENT_EXPORT ChildThread
+ : public IPC::Listener,
+ public IPC::Sender,
+ public NON_EXPORTED_BASE(mojo::ServiceProvider) {
public:
// Creates the thread.
ChildThread();
@@ -170,7 +171,7 @@ class CONTENT_EXPORT ChildThread : public IPC::Listener,
virtual void OnChannelError() OVERRIDE;
// mojo::ShellClient implementation:
- virtual void AcceptConnection(
+ virtual void ConnectToService(
const mojo::String& service_name,
mojo::ScopedMessagePipeHandle message_pipe) OVERRIDE;
diff --git a/content/child/content_child_helpers.cc b/content/child/content_child_helpers.cc
index bafd28f6ee..d6d62922d0 100644
--- a/content/child/content_child_helpers.cc
+++ b/content/child/content_child_helpers.cc
@@ -29,7 +29,9 @@ size_t GetMemoryUsageKB() {
v8::HeapStatistics stat;
// TODO(svenpanne) The call below doesn't take web workers into account, this
// has to be done manually by iterating over all Isolates involved.
- v8::Isolate::GetCurrent()->GetHeapStatistics(&stat);
+ v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ if (isolate)
+ isolate->GetHeapStatistics(&stat);
return mem_usage + (static_cast<uint64_t>(stat.total_heap_size()) >> 10);
}
#elif defined(OS_MACOSX)
diff --git a/content/child/fileapi/webfilewriter_impl.cc b/content/child/fileapi/webfilewriter_impl.cc
index 2c9b4801fa..7ae6c285d0 100644
--- a/content/child/fileapi/webfilewriter_impl.cc
+++ b/content/child/fileapi/webfilewriter_impl.cc
@@ -5,7 +5,6 @@
#include "content/child/fileapi/webfilewriter_impl.h"
#include "base/bind.h"
-#include "base/platform_file.h"
#include "base/synchronization/waitable_event.h"
#include "content/child/child_thread.h"
#include "content/child/fileapi/file_system_dispatcher.h"
diff --git a/content/child/fling_animator_impl_android.cc b/content/child/fling_animator_impl_android.cc
index 377af483c0..7583c03772 100644
--- a/content/child/fling_animator_impl_android.cc
+++ b/content/child/fling_animator_impl_android.cc
@@ -66,6 +66,11 @@ void FlingAnimatorImpl::CancelFling() {
bool FlingAnimatorImpl::apply(double time,
blink::WebGestureCurveTarget* target) {
+ // If the fling has yet to start, simply return and report true to prevent
+ // fling termination.
+ if (time <= 0)
+ return true;
+
const base::TimeTicks time_ticks =
base::TimeTicks() + base::TimeDelta::FromMicroseconds(
time * base::Time::kMicrosecondsPerSecond);
diff --git a/content/child/ftp_directory_listing_response_delegate.cc b/content/child/ftp_directory_listing_response_delegate.cc
index e6e7feb0ed..c3cc82705d 100644
--- a/content/child/ftp_directory_listing_response_delegate.cc
+++ b/content/child/ftp_directory_listing_response_delegate.cc
@@ -21,12 +21,10 @@
#include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
#include "webkit/child/weburlresponse_extradata_impl.h"
-using net::FtpDirectoryListingEntry;
-
using blink::WebURLLoader;
using blink::WebURLLoaderClient;
using blink::WebURLResponse;
-
+using net::FtpDirectoryListingEntry;
using webkit_glue::WebURLResponseExtraDataImpl;
namespace {
@@ -72,6 +70,11 @@ FtpDirectoryListingResponseDelegate::FtpDirectoryListingResponseDelegate(
Init(response.url());
}
+void FtpDirectoryListingResponseDelegate::Cancel() {
+ client_ = NULL;
+ loader_ = NULL;
+}
+
void FtpDirectoryListingResponseDelegate::OnReceivedData(const char* data,
int data_len) {
buffer_.append(data, data_len);
@@ -119,7 +122,8 @@ void FtpDirectoryListingResponseDelegate::Init(const GURL& response_url) {
void FtpDirectoryListingResponseDelegate::SendDataToClient(
const std::string& data) {
- client_->didReceiveData(loader_, data.data(), data.length(), -1);
+ if (client_)
+ client_->didReceiveData(loader_, data.data(), data.length(), -1);
}
} // namespace content
diff --git a/content/child/ftp_directory_listing_response_delegate.h b/content/child/ftp_directory_listing_response_delegate.h
index 93e8311da8..7d910fc739 100644
--- a/content/child/ftp_directory_listing_response_delegate.h
+++ b/content/child/ftp_directory_listing_response_delegate.h
@@ -28,6 +28,9 @@ class FtpDirectoryListingResponseDelegate {
blink::WebURLLoader* loader,
const blink::WebURLResponse& response);
+ // The request has been canceled, so stop making calls to the client.
+ void Cancel();
+
// Passed through from ResourceHandleInternal
void OnReceivedData(const char* data, int data_len);
void OnCompletedRequest();
diff --git a/content/child/mojo/mojo_application.cc b/content/child/mojo/mojo_application.cc
index 5cec176e5c..79eea23846 100644
--- a/content/child/mojo/mojo_application.cc
+++ b/content/child/mojo/mojo_application.cc
@@ -10,8 +10,8 @@
namespace content {
-MojoApplication::MojoApplication(mojo::ShellClient* shell_client)
- : shell_client_(shell_client) {
+MojoApplication::MojoApplication(mojo::ServiceProvider* service_provider)
+ : service_provider_(service_provider) {
}
MojoApplication::~MojoApplication() {
@@ -38,8 +38,8 @@ void MojoApplication::OnActivate(
ChildProcess::current()->io_message_loop_proxy());
DCHECK(message_pipe.is_valid());
- shell_.Bind(message_pipe.Pass());
- shell_->SetClient(shell_client_);
+ host_service_provider_.Bind(message_pipe.Pass());
+ host_service_provider_.set_client(service_provider_);
}
} // namespace content
diff --git a/content/child/mojo/mojo_application.h b/content/child/mojo/mojo_application.h
index 88646b63ff..ef05f75fb7 100644
--- a/content/child/mojo/mojo_application.h
+++ b/content/child/mojo/mojo_application.h
@@ -7,7 +7,7 @@
#include "ipc/ipc_platform_file.h"
#include "mojo/common/channel_init.h"
-#include "mojo/public/interfaces/shell/shell.mojom.h"
+#include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
namespace IPC {
class Message;
@@ -24,19 +24,21 @@ class MojoApplication {
public:
// The ShellClient pointer must remain valid for the lifetime of the
// MojoApplication instance.
- explicit MojoApplication(mojo::ShellClient* shell_client);
+ explicit MojoApplication(mojo::ServiceProvider* service_provider);
~MojoApplication();
bool OnMessageReceived(const IPC::Message& msg);
- mojo::Shell* shell() { return shell_.get(); }
+ mojo::ServiceProvider* host_service_provider() {
+ return host_service_provider_.get();
+ }
private:
void OnActivate(const IPC::PlatformFileForTransit& file);
mojo::common::ChannelInit channel_init_;
- mojo::ShellPtr shell_;
- mojo::ShellClient* shell_client_;
+ mojo::ServiceProviderPtr host_service_provider_;
+ mojo::ServiceProvider* service_provider_;
DISALLOW_COPY_AND_ASSIGN(MojoApplication);
};
diff --git a/content/child/multipart_response_delegate_unittest.cc b/content/child/multipart_response_delegate_unittest.cc
new file mode 100644
index 0000000000..e12133a315
--- /dev/null
+++ b/content/child/multipart_response_delegate_unittest.cc
@@ -0,0 +1,676 @@
+// 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 <vector>
+
+#include "base/basictypes.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/platform/WebURL.h"
+#include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
+#include "third_party/WebKit/public/platform/WebURLResponse.h"
+#include "webkit/child/multipart_response_delegate.h"
+
+using std::string;
+using blink::WebString;
+using blink::WebURL;
+using blink::WebURLError;
+using blink::WebURLLoader;
+using blink::WebURLLoaderClient;
+using blink::WebURLRequest;
+using blink::WebURLResponse;
+using content::MultipartResponseDelegateTester;
+using webkit_glue::MultipartResponseDelegate;
+
+namespace content {
+
+class MultipartResponseDelegateTester {
+ public:
+ MultipartResponseDelegateTester(MultipartResponseDelegate* delegate)
+ : delegate_(delegate) {
+ }
+
+ int PushOverLine(const std::string& data, size_t pos) {
+ return delegate_->PushOverLine(data, pos);
+ }
+
+ bool ParseHeaders() { return delegate_->ParseHeaders(); }
+ size_t FindBoundary() { return delegate_->FindBoundary(); }
+ std::string& boundary() { return delegate_->boundary_; }
+ std::string& data() { return delegate_->data_; }
+
+ private:
+ MultipartResponseDelegate* delegate_;
+};
+
+namespace {
+
+class MultipartResponseTest : public testing::Test {
+};
+
+class MockWebURLLoaderClient : public WebURLLoaderClient {
+ public:
+ MockWebURLLoaderClient() { Reset(); }
+
+ virtual void willSendRequest(
+ WebURLLoader*, WebURLRequest&, const WebURLResponse&) {}
+ virtual void didSendData(
+ WebURLLoader*, unsigned long long, unsigned long long) {}
+
+ virtual void didReceiveResponse(WebURLLoader* loader,
+ const WebURLResponse& response) {
+ ++received_response_;
+ response_ = response;
+ data_.clear();
+ }
+ virtual void didReceiveData(
+ blink::WebURLLoader* loader,
+ const char* data,
+ int data_length,
+ int encoded_data_length) {
+ ++received_data_;
+ data_.append(data, data_length);
+ total_encoded_data_length_ += encoded_data_length;
+ }
+ virtual void didFinishLoading(
+ WebURLLoader*, double finishTime, int64_t total_encoded_data_length) {}
+ virtual void didFail(WebURLLoader*, const WebURLError&) {}
+
+ void Reset() {
+ received_response_ = received_data_ = total_encoded_data_length_ = 0;
+ data_.clear();
+ response_.reset();
+ }
+
+ string GetResponseHeader(const char* name) const {
+ return string(response_.httpHeaderField(WebString::fromUTF8(name)).utf8());
+ }
+
+ int received_response_, received_data_, total_encoded_data_length_;
+ string data_;
+ WebURLResponse response_;
+};
+
+// We can't put this in an anonymous function because it's a friend class for
+// access to private members.
+TEST(MultipartResponseTest, Functions) {
+ // PushOverLine tests
+
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ response.setHTTPHeaderField("Foo", "Bar");
+ response.setHTTPHeaderField("Content-type", "text/plain");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+ MultipartResponseDelegateTester delegate_tester(&delegate);
+
+ struct {
+ const char* input;
+ const int position;
+ const int expected;
+ } line_tests[] = {
+ { "Line", 0, 0 },
+ { "Line", 2, 0 },
+ { "Line", 10, 0 },
+ { "\r\nLine", 0, 2 },
+ { "\nLine", 0, 1 },
+ { "\n\nLine", 0, 2 },
+ { "\rLine", 0, 1 },
+ { "Line\r\nLine", 4, 2 },
+ { "Line\nLine", 4, 1 },
+ { "Line\n\nLine", 4, 2 },
+ { "Line\rLine", 4, 1 },
+ { "Line\r\rLine", 4, 1 },
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(line_tests); ++i) {
+ EXPECT_EQ(line_tests[i].expected,
+ delegate_tester.PushOverLine(line_tests[i].input,
+ line_tests[i].position));
+ }
+
+ // ParseHeaders tests
+ struct {
+ const char* data;
+ const bool rv;
+ const int received_response_calls;
+ const char* newdata;
+ } header_tests[] = {
+ { "This is junk", false, 0, "This is junk" },
+ { "Foo: bar\nBaz:\n\nAfter:\n", true, 1, "After:\n" },
+ { "Foo: bar\nBaz:\n", false, 0, "Foo: bar\nBaz:\n" },
+ { "Foo: bar\r\nBaz:\r\n\r\nAfter:\r\n", true, 1, "After:\r\n" },
+ { "Foo: bar\r\nBaz:\r\n", false, 0, "Foo: bar\r\nBaz:\r\n" },
+ { "Foo: bar\nBaz:\r\n\r\nAfter:\n\n", true, 1, "After:\n\n" },
+ { "Foo: bar\r\nBaz:\n", false, 0, "Foo: bar\r\nBaz:\n" },
+ { "\r\n", true, 1, "" },
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(header_tests); ++i) {
+ client.Reset();
+ delegate_tester.data().assign(header_tests[i].data);
+ EXPECT_EQ(header_tests[i].rv,
+ delegate_tester.ParseHeaders());
+ EXPECT_EQ(header_tests[i].received_response_calls,
+ client.received_response_);
+ EXPECT_EQ(string(header_tests[i].newdata),
+ delegate_tester.data());
+ }
+ // Test that the resource response is filled in correctly when parsing
+ // headers.
+ client.Reset();
+ string test_header("content-type: image/png\ncontent-length: 10\n\n");
+ delegate_tester.data().assign(test_header);
+ EXPECT_TRUE(delegate_tester.ParseHeaders());
+ EXPECT_TRUE(delegate_tester.data().length() == 0);
+ EXPECT_EQ(string("image/png"), client.GetResponseHeader("Content-Type"));
+ EXPECT_EQ(string("10"), client.GetResponseHeader("content-length"));
+ // This header is passed from the original request.
+ EXPECT_EQ(string("Bar"), client.GetResponseHeader("foo"));
+
+ // Make sure we parse the right mime-type if a charset is provided.
+ client.Reset();
+ string test_header2("content-type: text/html; charset=utf-8\n\n");
+ delegate_tester.data().assign(test_header2);
+ EXPECT_TRUE(delegate_tester.ParseHeaders());
+ EXPECT_TRUE(delegate_tester.data().length() == 0);
+ EXPECT_EQ(string("text/html; charset=utf-8"),
+ client.GetResponseHeader("Content-Type"));
+ EXPECT_EQ(string("utf-8"),
+ string(client.response_.textEncodingName().utf8()));
+
+ // FindBoundary tests
+ struct {
+ const char* boundary;
+ const char* data;
+ const size_t position;
+ } boundary_tests[] = {
+ { "bound", "bound", 0 },
+ { "bound", "--bound", 0 },
+ { "bound", "junkbound", 4 },
+ { "bound", "junk--bound", 4 },
+ { "foo", "bound", string::npos },
+ { "bound", "--boundbound", 0 },
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(boundary_tests); ++i) {
+ delegate_tester.boundary().assign(boundary_tests[i].boundary);
+ delegate_tester.data().assign(boundary_tests[i].data);
+ EXPECT_EQ(boundary_tests[i].position,
+ delegate_tester.FindBoundary());
+ }
+}
+
+TEST(MultipartResponseTest, MissingBoundaries) {
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ response.setHTTPHeaderField("Foo", "Bar");
+ response.setHTTPHeaderField("Content-type", "text/plain");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+
+ // No start boundary
+ string no_start_boundary(
+ "Content-type: text/plain\n\n"
+ "This is a sample response\n"
+ "--bound--"
+ "ignore junk after end token --bound\n\nTest2\n");
+ delegate.OnReceivedData(no_start_boundary.c_str(),
+ static_cast<int>(no_start_boundary.length()),
+ static_cast<int>(no_start_boundary.length()));
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ(string("This is a sample response"), client.data_);
+ EXPECT_EQ(static_cast<int>(no_start_boundary.length()),
+ client.total_encoded_data_length_);
+
+ delegate.OnCompletedRequest();
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+
+ // No end boundary
+ client.Reset();
+ MultipartResponseDelegate delegate2(&client, NULL, response, "bound");
+ string no_end_boundary(
+ "bound\nContent-type: text/plain\n\n"
+ "This is a sample response\n");
+ delegate2.OnReceivedData(no_end_boundary.c_str(),
+ static_cast<int>(no_end_boundary.length()),
+ static_cast<int>(no_end_boundary.length()));
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ("This is a sample response\n", client.data_);
+ EXPECT_EQ(static_cast<int>(no_end_boundary.length()),
+ client.total_encoded_data_length_);
+
+ delegate2.OnCompletedRequest();
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ(string("This is a sample response\n"), client.data_);
+ EXPECT_EQ(static_cast<int>(no_end_boundary.length()),
+ client.total_encoded_data_length_);
+
+ // Neither boundary
+ client.Reset();
+ MultipartResponseDelegate delegate3(&client, NULL, response, "bound");
+ string no_boundaries(
+ "Content-type: text/plain\n\n"
+ "This is a sample response\n");
+ delegate3.OnReceivedData(no_boundaries.c_str(),
+ static_cast<int>(no_boundaries.length()),
+ static_cast<int>(no_boundaries.length()));
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ("This is a sample response\n", client.data_);
+ EXPECT_EQ(static_cast<int>(no_boundaries.length()),
+ client.total_encoded_data_length_);
+
+ delegate3.OnCompletedRequest();
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ(string("This is a sample response\n"), client.data_);
+ EXPECT_EQ(static_cast<int>(no_boundaries.length()),
+ client.total_encoded_data_length_);
+}
+
+TEST(MultipartResponseTest, MalformedBoundary) {
+ // Some servers send a boundary that is prefixed by "--". See bug 5786.
+
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ response.setHTTPHeaderField("Foo", "Bar");
+ response.setHTTPHeaderField("Content-type", "text/plain");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "--bound");
+
+ string data(
+ "--bound\n"
+ "Content-type: text/plain\n\n"
+ "This is a sample response\n"
+ "--bound--"
+ "ignore junk after end token --bound\n\nTest2\n");
+ delegate.OnReceivedData(data.c_str(),
+ static_cast<int>(data.length()),
+ static_cast<int>(data.length()));
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ(string("This is a sample response"), client.data_);
+ EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_);
+
+ delegate.OnCompletedRequest();
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+}
+
+
+// Used in for tests that break the data in various places.
+struct TestChunk {
+ const int start_pos; // offset in data
+ const int end_pos; // end offset in data
+ const int expected_responses;
+ const int expected_received_data;
+ const char* expected_data;
+ const int expected_encoded_data_length;
+};
+
+void VariousChunkSizesTest(const TestChunk chunks[], int chunks_size,
+ int responses, int received_data,
+ const char* completed_data,
+ int completed_encoded_data_length) {
+ const string data(
+ "--bound\n" // 0-7
+ "Content-type: image/png\n\n" // 8-32
+ "datadatadatadatadata" // 33-52
+ "--bound\n" // 53-60
+ "Content-type: image/jpg\n\n" // 61-85
+ "foofoofoofoofoo" // 86-100
+ "--bound--"); // 101-109
+
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+
+ for (int i = 0; i < chunks_size; ++i) {
+ ASSERT_TRUE(chunks[i].start_pos < chunks[i].end_pos);
+ string chunk = data.substr(chunks[i].start_pos,
+ chunks[i].end_pos - chunks[i].start_pos);
+ delegate.OnReceivedData(
+ chunk.c_str(),
+ static_cast<int>(chunk.length()),
+ static_cast<int>(chunk.length()));
+ EXPECT_EQ(chunks[i].expected_responses, client.received_response_);
+ EXPECT_EQ(chunks[i].expected_received_data, client.received_data_);
+ EXPECT_EQ(string(chunks[i].expected_data), client.data_);
+ EXPECT_EQ(chunks[i].expected_encoded_data_length,
+ client.total_encoded_data_length_);
+ }
+ // Check final state
+ delegate.OnCompletedRequest();
+ EXPECT_EQ(responses, client.received_response_);
+ EXPECT_EQ(received_data, client.received_data_);
+ string completed_data_string(completed_data);
+ EXPECT_EQ(completed_data_string, client.data_);
+ EXPECT_EQ(completed_encoded_data_length, client.total_encoded_data_length_);
+}
+
+TEST(MultipartResponseTest, BreakInBoundary) {
+ // Break in the first boundary
+ const TestChunk bound1[] = {
+ { 0, 4, 0, 0, "", 0 },
+ { 4, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(bound1, arraysize(bound1),
+ 2, 2, "foofoofoofoofoo", 110);
+
+ // Break in first and second
+ const TestChunk bound2[] = {
+ { 0, 4, 0, 0, "", 0 },
+ { 4, 55, 1, 1, "datadatadatadat", 55 },
+ { 55, 65, 1, 2, "datadatadatadatadata", 65 },
+ { 65, 110, 2, 3, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(bound2, arraysize(bound2),
+ 2, 3, "foofoofoofoofoo", 110);
+
+ // Break in second only
+ const TestChunk bound3[] = {
+ { 0, 55, 1, 1, "datadatadatadat", 55 },
+ { 55, 110, 2, 3, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(bound3, arraysize(bound3),
+ 2, 3, "foofoofoofoofoo", 110);
+}
+
+TEST(MultipartResponseTest, BreakInHeaders) {
+ // Break in first header
+ const TestChunk header1[] = {
+ { 0, 10, 0, 0, "", 0 },
+ { 10, 35, 1, 0, "", 0 },
+ { 35, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(header1, arraysize(header1),
+ 2, 2, "foofoofoofoofoo", 110);
+
+ // Break in both headers
+ const TestChunk header2[] = {
+ { 0, 10, 0, 0, "", 0 },
+ { 10, 65, 1, 1, "datadatadatadatadata", 65 },
+ { 65, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(header2, arraysize(header2),
+ 2, 2, "foofoofoofoofoo", 110);
+
+ // Break at end of a header
+ const TestChunk header3[] = {
+ { 0, 33, 1, 0, "", 0 },
+ { 33, 65, 1, 1, "datadatadatadatadata", 65 },
+ { 65, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(header3, arraysize(header3),
+ 2, 2, "foofoofoofoofoo", 110);
+}
+
+TEST(MultipartResponseTest, BreakInData) {
+ // All data as one chunk
+ const TestChunk data1[] = {
+ { 0, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(data1, arraysize(data1),
+ 2, 2, "foofoofoofoofoo", 110);
+
+ // breaks in data segment
+ const TestChunk data2[] = {
+ { 0, 35, 1, 0, "", 0 },
+ { 35, 65, 1, 1, "datadatadatadatadata", 65 },
+ { 65, 90, 2, 1, "", 65 },
+ { 90, 110, 2, 2, "foofoofoofoofoo", 110 },
+ };
+ VariousChunkSizesTest(data2, arraysize(data2),
+ 2, 2, "foofoofoofoofoo", 110);
+
+ // Incomplete send
+ const TestChunk data3[] = {
+ { 0, 35, 1, 0, "", 0 },
+ { 35, 90, 2, 1, "", 90 },
+ };
+ VariousChunkSizesTest(data3, arraysize(data3),
+ 2, 2, "foof", 90);
+}
+
+TEST(MultipartResponseTest, SmallChunk) {
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ response.setHTTPHeaderField("Content-type", "text/plain");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+
+ // Test chunks of size 1, 2, and 0.
+ string data(
+ "--boundContent-type: text/plain\n\n"
+ "\n--boundContent-type: text/plain\n\n"
+ "\n\n--boundContent-type: text/plain\n\n"
+ "--boundContent-type: text/plain\n\n"
+ "end--bound--");
+ delegate.OnReceivedData(data.c_str(),
+ static_cast<int>(data.length()),
+ static_cast<int>(data.length()));
+ EXPECT_EQ(4, client.received_response_);
+ EXPECT_EQ(2, client.received_data_);
+ EXPECT_EQ(string("end"), client.data_);
+ EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_);
+
+ delegate.OnCompletedRequest();
+ EXPECT_EQ(4, client.received_response_);
+ EXPECT_EQ(2, client.received_data_);
+}
+
+TEST(MultipartResponseTest, MultipleBoundaries) {
+ // Test multiple boundaries back to back
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+
+ string data("--bound\r\n\r\n--bound\r\n\r\nfoofoo--bound--");
+ delegate.OnReceivedData(data.c_str(),
+ static_cast<int>(data.length()),
+ static_cast<int>(data.length()));
+ EXPECT_EQ(2, client.received_response_);
+ EXPECT_EQ(1, client.received_data_);
+ EXPECT_EQ(string("foofoo"), client.data_);
+ EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_);
+}
+
+TEST(MultipartResponseTest, MultipartByteRangeParsingTest) {
+ // Test multipart/byteranges based boundary parsing.
+ WebURLResponse response1;
+ response1.initialize();
+ response1.setMIMEType("multipart/x-mixed-replace");
+ response1.setHTTPHeaderField("Content-Length", "200");
+ response1.setHTTPHeaderField("Content-type",
+ "multipart/byteranges; boundary=--bound--");
+
+ std::string multipart_boundary;
+ bool result = MultipartResponseDelegate::ReadMultipartBoundary(
+ response1, &multipart_boundary);
+ EXPECT_EQ(result, true);
+ EXPECT_EQ(string("--bound--"),
+ multipart_boundary);
+
+ WebURLResponse response2;
+ response2.initialize();
+ response2.setMIMEType("image/png");
+
+ response2.setHTTPHeaderField("Content-Length", "300");
+ response2.setHTTPHeaderField("Last-Modified",
+ "Mon, 04 Apr 2005 20:36:01 GMT");
+ response2.setHTTPHeaderField("Date", "Thu, 11 Sep 2008 18:21:42 GMT");
+
+ multipart_boundary.clear();
+ result = MultipartResponseDelegate::ReadMultipartBoundary(
+ response2, &multipart_boundary);
+ EXPECT_EQ(result, false);
+
+ WebURLResponse response3;
+ response3.initialize();
+ response3.setMIMEType("multipart/byteranges");
+
+ response3.setHTTPHeaderField("Content-Length", "300");
+ response3.setHTTPHeaderField("Last-Modified",
+ "Mon, 04 Apr 2005 20:36:01 GMT");
+ response3.setHTTPHeaderField("Date", "Thu, 11 Sep 2008 18:21:42 GMT");
+ response3.setHTTPHeaderField("Content-type", "multipart/byteranges");
+
+ multipart_boundary.clear();
+ result = MultipartResponseDelegate::ReadMultipartBoundary(
+ response3, &multipart_boundary);
+ EXPECT_EQ(result, false);
+ EXPECT_EQ(multipart_boundary.length(), 0U);
+
+ WebURLResponse response4;
+ response4.initialize();
+ response4.setMIMEType("multipart/byteranges");
+ response4.setHTTPHeaderField("Content-Length", "200");
+ response4.setHTTPHeaderField("Content-type",
+ "multipart/byteranges; boundary=--bound--; charSet=utf8");
+
+ multipart_boundary.clear();
+
+ result = MultipartResponseDelegate::ReadMultipartBoundary(
+ response4, &multipart_boundary);
+ EXPECT_EQ(result, true);
+ EXPECT_EQ(string("--bound--"), multipart_boundary);
+
+ WebURLResponse response5;
+ response5.initialize();
+ response5.setMIMEType("multipart/byteranges");
+ response5.setHTTPHeaderField("Content-Length", "200");
+ response5.setHTTPHeaderField("Content-type",
+ "multipart/byteranges; boundary=\"--bound--\"; charSet=utf8");
+
+ multipart_boundary.clear();
+
+ result = MultipartResponseDelegate::ReadMultipartBoundary(
+ response5, &multipart_boundary);
+ EXPECT_EQ(result, true);
+ EXPECT_EQ(string("--bound--"), multipart_boundary);
+}
+
+TEST(MultipartResponseTest, MultipartContentRangesTest) {
+ WebURLResponse response1;
+ response1.initialize();
+ response1.setMIMEType("application/pdf");
+ response1.setHTTPHeaderField("Content-Length", "200"); // Ignored!
+ // Use intentionally >32bit values to check they are handled correctly.
+ response1.setHTTPHeaderField("Content-Range",
+ "bytes 5000000000-5000000050/6000000000");
+
+ int64 content_range_lower_bound = 0;
+ int64 content_range_upper_bound = 0;
+ int64 content_range_instance_size = 0;
+
+ bool result = MultipartResponseDelegate::ReadContentRanges(
+ response1, &content_range_lower_bound,
+ &content_range_upper_bound,
+ &content_range_instance_size);
+
+ EXPECT_EQ(result, true);
+ EXPECT_EQ(content_range_lower_bound, 5e9);
+ EXPECT_EQ(content_range_upper_bound, 5e9+50);
+ EXPECT_EQ(content_range_instance_size, 6e9);
+
+ WebURLResponse response2;
+ response2.initialize();
+ response2.setMIMEType("application/pdf");
+ response2.setHTTPHeaderField("Content-Length", "200");
+ response2.setHTTPHeaderField("Content-Range", "bytes 1000/1050");
+
+ content_range_lower_bound = 0;
+ content_range_upper_bound = 0;
+ content_range_instance_size = 0;
+
+ result = MultipartResponseDelegate::ReadContentRanges(
+ response2, &content_range_lower_bound,
+ &content_range_upper_bound,
+ &content_range_instance_size);
+
+ EXPECT_EQ(result, false);
+
+ WebURLResponse response3;
+ response3.initialize();
+ response3.setMIMEType("application/pdf");
+ response3.setHTTPHeaderField("Content-Length", "200");
+ response3.setHTTPHeaderField("Range", "bytes 1000-1050/5000");
+
+ content_range_lower_bound = 0;
+ content_range_upper_bound = 0;
+ content_range_instance_size = 0;
+
+ result = MultipartResponseDelegate::ReadContentRanges(
+ response3, &content_range_lower_bound,
+ &content_range_upper_bound,
+ &content_range_instance_size);
+
+ EXPECT_EQ(result, true);
+ EXPECT_EQ(content_range_lower_bound, 1000);
+ EXPECT_EQ(content_range_upper_bound, 1050);
+
+ WebURLResponse response4;
+ response4.initialize();
+ response4.setMIMEType("application/pdf");
+ response4.setHTTPHeaderField("Content-Length", "200");
+
+ content_range_lower_bound = 0;
+ content_range_upper_bound = 0;
+ content_range_instance_size = 0;
+
+ result = MultipartResponseDelegate::ReadContentRanges(
+ response4, &content_range_lower_bound,
+ &content_range_upper_bound,
+ &content_range_instance_size);
+
+ EXPECT_EQ(result, false);
+}
+
+TEST(MultipartResponseTest, MultipartPayloadSet) {
+ WebURLResponse response;
+ response.initialize();
+ response.setMIMEType("multipart/x-mixed-replace");
+ MockWebURLLoaderClient client;
+ MultipartResponseDelegate delegate(&client, NULL, response, "bound");
+
+ string data(
+ "--bound\n"
+ "Content-type: text/plain\n\n"
+ "response data\n"
+ "--bound\n");
+ delegate.OnReceivedData(data.c_str(),
+ static_cast<int>(data.length()),
+ static_cast<int>(data.length()));
+ EXPECT_EQ(1, client.received_response_);
+ EXPECT_EQ(string("response data"), client.data_);
+ EXPECT_EQ(static_cast<int>(data.length()), client.total_encoded_data_length_);
+ EXPECT_FALSE(client.response_.isMultipartPayload());
+
+ string data2(
+ "Content-type: text/plain\n\n"
+ "response data2\n"
+ "--bound\n");
+ delegate.OnReceivedData(data2.c_str(),
+ static_cast<int>(data2.length()),
+ static_cast<int>(data2.length()));
+ EXPECT_EQ(2, client.received_response_);
+ EXPECT_EQ(string("response data2"), client.data_);
+ EXPECT_EQ(static_cast<int>(data.length()) + static_cast<int>(data2.length()),
+ client.total_encoded_data_length_);
+ EXPECT_TRUE(client.response_.isMultipartPayload());
+}
+
+} // namespace
+
+} // namespace content
diff --git a/content/child/npapi/plugin_url_fetcher.cc b/content/child/npapi/plugin_url_fetcher.cc
index d1c5c248a2..d596b96a8d 100644
--- a/content/child/npapi/plugin_url_fetcher.cc
+++ b/content/child/npapi/plugin_url_fetcher.cc
@@ -18,6 +18,7 @@
#include "content/child/web_url_loader_impl.h"
#include "content/common/resource_request_body.h"
#include "content/common/service_worker/service_worker_types.h"
+#include "content/public/common/resource_response_info.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/http/http_response_headers.h"
@@ -25,7 +26,6 @@
#include "third_party/WebKit/public/platform/WebURLResponse.h"
#include "webkit/child/multipart_response_delegate.h"
#include "webkit/child/resource_loader_bridge.h"
-#include "webkit/common/resource_response_info.h"
namespace content {
namespace {
@@ -190,9 +190,8 @@ void PluginURLFetcher::OnUploadProgress(uint64 position, uint64 size) {
bool PluginURLFetcher::OnReceivedRedirect(
const GURL& new_url,
- const webkit_glue::ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) {
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) {
if (!plugin_stream_)
return false;
@@ -218,8 +217,7 @@ bool PluginURLFetcher::OnReceivedRedirect(
method_ = "GET";
GURL old_url = url_;
url_ = new_url;
- *has_new_first_party_for_cookies = true;
- *new_first_party_for_cookies = first_party_for_cookies_;
+ first_party_for_cookies_ = new_first_party_for_cookies;
// If the plugin does not participate in url redirect notifications then just
// block cross origin 307 POST redirects.
@@ -238,8 +236,7 @@ bool PluginURLFetcher::OnReceivedRedirect(
return true;
}
-void PluginURLFetcher::OnReceivedResponse(
- const webkit_glue::ResourceResponseInfo& info) {
+void PluginURLFetcher::OnReceivedResponse(const ResourceResponseInfo& info) {
if (!plugin_stream_)
return;
diff --git a/content/child/npapi/plugin_url_fetcher.h b/content/child/npapi/plugin_url_fetcher.h
index bffb9af37e..7eab78e432 100644
--- a/content/child/npapi/plugin_url_fetcher.h
+++ b/content/child/npapi/plugin_url_fetcher.h
@@ -57,11 +57,9 @@ class PluginURLFetcher : public RequestPeer {
// RequestPeer implementation:
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
virtual bool OnReceivedRedirect(const GURL& new_url,
- const webkit_glue::ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) OVERRIDE;
- virtual void OnReceivedResponse(
- const webkit_glue::ResourceResponseInfo& info) OVERRIDE;
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) OVERRIDE;
+ virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
virtual void OnReceivedData(const char* data,
int data_length,
diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc
index 9e6e923d96..700a4f0f2e 100644
--- a/content/child/resource_dispatcher.cc
+++ b/content/child/resource_dispatcher.cc
@@ -32,7 +32,6 @@
#include "webkit/common/resource_type.h"
using webkit_glue::ResourceLoaderBridge;
-using webkit_glue::ResourceResponseInfo;
namespace content {
@@ -84,8 +83,6 @@ class IPCResourceLoaderBridge : public ResourceLoaderBridge {
virtual void SyncLoad(SyncLoadResponse* response) OVERRIDE;
private:
- RequestPeer* peer_;
-
// The resource dispatcher for this loader. The bridge doesn't own it, but
// it's guaranteed to outlive the bridge.
ResourceDispatcher* dispatcher_;
@@ -109,8 +106,7 @@ class IPCResourceLoaderBridge : public ResourceLoaderBridge {
IPCResourceLoaderBridge::IPCResourceLoaderBridge(
ResourceDispatcher* dispatcher,
const RequestInfo& request_info)
- : peer_(NULL),
- dispatcher_(dispatcher),
+ : dispatcher_(dispatcher),
request_id_(-1),
routing_id_(request_info.routing_id),
is_synchronous_request_(false) {
@@ -177,10 +173,8 @@ bool IPCResourceLoaderBridge::Start(RequestPeer* peer) {
return false;
}
- peer_ = peer;
-
// generate the request ID, and append it to the message
- request_id_ = dispatcher_->AddPendingRequest(peer_,
+ request_id_ = dispatcher_->AddPendingRequest(peer,
request_.resource_type,
request_.origin_pid,
frame_origin_,
@@ -215,14 +209,15 @@ void IPCResourceLoaderBridge::SetDefersLoading(bool value) {
}
void IPCResourceLoaderBridge::DidChangePriority(
- net::RequestPriority new_priority, int intra_priority_value) {
+ net::RequestPriority new_priority,
+ int intra_priority_value) {
if (request_id_ < 0) {
NOTREACHED() << "Trying to change priority of an unstarted request";
return;
}
- dispatcher_->DidChangePriority(routing_id_, request_id_, new_priority,
- intra_priority_value);
+ dispatcher_->DidChangePriority(
+ request_id_, new_priority, intra_priority_value);
}
void IPCResourceLoaderBridge::SyncLoad(SyncLoadResponse* response) {
@@ -292,18 +287,6 @@ bool ResourceDispatcher::OnMessageReceived(const IPC::Message& message) {
return true;
}
- // If the request has been canceled, only dispatch
- // ResourceMsg_RequestComplete (otherwise resource leaks) and drop other
- // messages.
- if (request_info->is_canceled) {
- if (message.type() == ResourceMsg_RequestComplete::ID) {
- DispatchMessage(message);
- } else {
- ReleaseResourcesInDataMessage(message);
- }
- return true;
- }
-
if (request_info->is_deferred) {
request_info->deferred_message_queue.push_back(new IPC::Message(message));
return true;
@@ -486,6 +469,7 @@ void ResourceDispatcher::OnDownloadedData(int request_id,
void ResourceDispatcher::OnReceivedRedirect(
int request_id,
const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
const ResourceResponseHead& response_head) {
TRACE_EVENT0("loader", "ResourceDispatcher::OnReceivedRedirect");
PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
@@ -493,13 +477,10 @@ void ResourceDispatcher::OnReceivedRedirect(
return;
request_info->response_start = ConsumeIOTimestamp();
- bool has_new_first_party_for_cookies = false;
- GURL new_first_party_for_cookies;
ResourceResponseInfo renderer_response_info;
ToResourceResponseInfo(*request_info, response_head, &renderer_response_info);
- if (request_info->peer->OnReceivedRedirect(new_url, renderer_response_info,
- &has_new_first_party_for_cookies,
- &new_first_party_for_cookies)) {
+ if (request_info->peer->OnReceivedRedirect(
+ new_url, new_first_party_for_cookies, renderer_response_info)) {
// Double-check if the request is still around. The call above could
// potentially remove it.
request_info = GetPendingRequestInfo(request_id);
@@ -509,9 +490,7 @@ void ResourceDispatcher::OnReceivedRedirect(
// SiteIsolationPolicy later when OnReceivedResponse is called.
request_info->response_url = new_url;
request_info->pending_redirect_message.reset(
- new ResourceHostMsg_FollowRedirect(request_id,
- has_new_first_party_for_cookies,
- new_first_party_for_cookies));
+ new ResourceHostMsg_FollowRedirect(request_id));
if (!request_info->is_deferred) {
FollowPendingRedirect(request_id, *request_info);
}
@@ -609,47 +588,9 @@ void ResourceDispatcher::CancelPendingRequest(int request_id) {
}
PendingRequestInfo& request_info = it->second;
- request_info.is_canceled = true;
-
- // Because message handlers could result in request_info being destroyed,
- // we need to work with a stack reference to the deferred queue.
- MessageQueue queue;
- queue.swap(request_info.deferred_message_queue);
- // Removes pending requests. If ResourceMsg_RequestComplete was queued,
- // dispatch it.
- bool first_message = true;
- while (!queue.empty()) {
- IPC::Message* message = queue.front();
- if (message->type() == ResourceMsg_RequestComplete::ID) {
- if (first_message) {
- // Dispatch as-is.
- DispatchMessage(*message);
- } else {
- // If we skip some ResourceMsg_DataReceived and then dispatched the
- // original ResourceMsg_RequestComplete(status=success), chrome will
- // crash because it entered an unexpected state. So replace
- // ResourceMsg_RequestComplete with failure status.
- ResourceMsg_RequestCompleteData request_complete_data;
- request_complete_data.error_code = net::ERR_ABORTED;
- request_complete_data.was_ignored_by_handler = false;
- request_complete_data.exists_in_cache = false;
- request_complete_data.completion_time = base::TimeTicks();
- request_complete_data.encoded_data_length = 0;
-
- ResourceMsg_RequestComplete error_message(request_id,
- request_complete_data);
- DispatchMessage(error_message);
- }
- } else {
- ReleaseResourcesInDataMessage(*message);
- }
- first_message = false;
- queue.pop_front();
- delete message;
- }
+ ReleaseResourcesInMessageQueue(&request_info.deferred_message_queue);
+ pending_requests_.erase(it);
- // |request_id| will be removed from |pending_requests_| when
- // OnRequestComplete returns with ERR_ABORTED.
message_sender()->Send(new ResourceHostMsg_CancelRequest(request_id));
}
@@ -675,8 +616,7 @@ void ResourceDispatcher::SetDefersLoading(int request_id, bool value) {
}
}
-void ResourceDispatcher::DidChangePriority(int routing_id,
- int request_id,
+void ResourceDispatcher::DidChangePriority(int request_id,
net::RequestPriority new_priority,
int intra_priority_value) {
DCHECK(ContainsKey(pending_requests_, request_id));
@@ -688,7 +628,6 @@ ResourceDispatcher::PendingRequestInfo::PendingRequestInfo()
: peer(NULL),
resource_type(ResourceType::SUB_RESOURCE),
is_deferred(false),
- is_canceled(false),
download_to_file(false),
blocked_response(false),
buffer_size(0) {
@@ -705,7 +644,6 @@ ResourceDispatcher::PendingRequestInfo::PendingRequestInfo(
resource_type(resource_type),
origin_pid(origin_pid),
is_deferred(false),
- is_canceled(false),
url(request_url),
frame_origin(frame_origin),
response_url(request_url),
diff --git a/content/child/resource_dispatcher.h b/content/child/resource_dispatcher.h
index d407579307..2e4b54e3d3 100644
--- a/content/child/resource_dispatcher.h
+++ b/content/child/resource_dispatcher.h
@@ -25,12 +25,12 @@ struct ResourceMsg_RequestCompleteData;
namespace webkit_glue {
class ResourceLoaderBridge;
-struct ResourceResponseInfo;
}
namespace content {
class RequestPeer;
class ResourceDispatcherDelegate;
+struct ResourceResponseInfo;
struct RequestInfo;
struct ResourceResponseHead;
struct SiteIsolationResponseMetaData;
@@ -72,8 +72,7 @@ class CONTENT_EXPORT ResourceDispatcher : public IPC::Listener {
void SetDefersLoading(int request_id, bool value);
// Indicates the priority of the specified request changed.
- void DidChangePriority(int routing_id,
- int request_id,
+ void DidChangePriority(int request_id,
net::RequestPriority new_priority,
int intra_priority_value);
@@ -114,7 +113,6 @@ class CONTENT_EXPORT ResourceDispatcher : public IPC::Listener {
int origin_pid;
MessageQueue deferred_message_queue;
bool is_deferred;
- bool is_canceled;
// Original requested url.
GURL url;
// The security origin of the frame that initiates this request.
@@ -146,6 +144,7 @@ class CONTENT_EXPORT ResourceDispatcher : public IPC::Listener {
void OnReceivedCachedMetadata(int request_id, const std::vector<char>& data);
void OnReceivedRedirect(int request_id,
const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
const ResourceResponseHead& response_head);
void OnSetDataBuffer(int request_id,
base::SharedMemoryHandle shm_handle,
@@ -167,10 +166,9 @@ class CONTENT_EXPORT ResourceDispatcher : public IPC::Listener {
// again in the deferred state.
void FlushDeferredMessages(int request_id);
- void ToResourceResponseInfo(
- const PendingRequestInfo& request_info,
- const ResourceResponseHead& browser_info,
- webkit_glue::ResourceResponseInfo* renderer_info) const;
+ void ToResourceResponseInfo(const PendingRequestInfo& request_info,
+ const ResourceResponseHead& browser_info,
+ ResourceResponseInfo* renderer_info) const;
base::TimeTicks ToRendererCompletionTime(
const PendingRequestInfo& request_info,
diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc
index b12db6b290..35c64c8549 100644
--- a/content/child/resource_dispatcher_unittest.cc
+++ b/content/child/resource_dispatcher_unittest.cc
@@ -23,7 +23,6 @@
#include "webkit/common/appcache/appcache_interfaces.h"
using webkit_glue::ResourceLoaderBridge;
-using webkit_glue::ResourceResponseInfo;
namespace content {
@@ -46,12 +45,9 @@ class TestRequestCallback : public RequestPeer {
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE {
}
- virtual bool OnReceivedRedirect(
- const GURL& new_url,
- const ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) OVERRIDE {
- *has_new_first_party_for_cookies = false;
+ virtual bool OnReceivedRedirect(const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) OVERRIDE {
return true;
}
@@ -112,10 +108,11 @@ class ResourceDispatcherTest : public testing::Test, public IPC::Sender {
// returning the hardcoded file contents.
void ProcessMessages() {
while (!message_queue_.empty()) {
- int request_id;
- ResourceHostMsg_Request request;
+ ResourceHostMsg_RequestResource::Param params;
ASSERT_TRUE(ResourceHostMsg_RequestResource::Read(
- &message_queue_[0], &request_id, &request));
+ &message_queue_[0], &params));
+ int request_id = params.b;
+ ResourceHostMsg_Request request = params.c;
// check values
EXPECT_EQ(test_page_url, request.url.spec());
@@ -268,12 +265,9 @@ class DeferredResourceLoadingTest : public ResourceDispatcherTest,
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE {
}
- virtual bool OnReceivedRedirect(
- const GURL& new_url,
- const ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) OVERRIDE {
- *has_new_first_party_for_cookies = false;
+ virtual bool OnReceivedRedirect(const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) OVERRIDE {
return true;
}
@@ -359,11 +353,9 @@ class TimeConversionTest : public ResourceDispatcherTest,
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE {
}
- virtual bool OnReceivedRedirect(
- const GURL& new_url,
- const ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) OVERRIDE {
+ virtual bool OnReceivedRedirect(const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) OVERRIDE {
return true;
}
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 8792cdaed7..916f08d31b 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -129,16 +129,21 @@ void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
if (command_line.HasSwitch(switches::kEnableWebGLDraftExtensions))
WebRuntimeFeatures::enableWebGLDraftExtensions(true);
+ if (command_line.HasSwitch(switches::kEnableWebGLImageChromium))
+ WebRuntimeFeatures::enableWebGLImageChromium(true);
+
if (command_line.HasSwitch(switches::kEnableOverlayFullscreenVideo))
WebRuntimeFeatures::enableOverlayFullscreenVideo(true);
if (ui::IsOverlayScrollbarEnabled())
WebRuntimeFeatures::enableOverlayScrollbars(true);
- if (command_line.HasSwitch(switches::kEnableFastTextAutosizing)
- && !command_line.HasSwitch(switches::kDisableFastTextAutosizing))
+ if (command_line.HasSwitch(switches::kEnableFastTextAutosizing))
WebRuntimeFeatures::enableFastTextAutosizing(true);
+ if (command_line.HasSwitch(switches::kDisableFastTextAutosizing))
+ WebRuntimeFeatures::enableFastTextAutosizing(false);
+
if (command_line.HasSwitch(switches::kDisableRepaintAfterLayout))
WebRuntimeFeatures::enableRepaintAfterLayout(false);
@@ -153,6 +158,9 @@ void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
if (command_line.HasSwitch(switches::kEnablePreciseMemoryInfo))
WebRuntimeFeatures::enablePreciseMemoryInfo(true);
+
+ if (command_line.HasSwitch(switches::kEnableLayerSquashing))
+ WebRuntimeFeatures::enableLayerSquashing(true);
}
} // namespace content
diff --git a/content/child/service_worker/OWNERS b/content/child/service_worker/OWNERS
index 633b8a4fd9..bac2f14ac4 100644
--- a/content/child/service_worker/OWNERS
+++ b/content/child/service_worker/OWNERS
@@ -1,3 +1,5 @@
-alecflett@chromium.org
-kinuko@chromium.org
michaeln@chromium.org
+falken@chromium.org
+
+# may not be available
+kinuko@chromium.org
diff --git a/content/child/site_isolation_policy.cc b/content/child/site_isolation_policy.cc
index d0f2ec4caa..026f625a1d 100644
--- a/content/child/site_isolation_policy.cc
+++ b/content/child/site_isolation_policy.cc
@@ -11,9 +11,9 @@
#include "base/metrics/histogram.h"
#include "base/strings/string_util.h"
#include "content/public/common/content_switches.h"
+#include "content/public/common/resource_response_info.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/http/http_response_headers.h"
-#include "webkit/common/resource_response_info.h"
using base::StringPiece;
@@ -140,12 +140,11 @@ void SiteIsolationPolicy::SetPolicyEnabled(bool enabled) {
}
linked_ptr<SiteIsolationResponseMetaData>
-SiteIsolationPolicy::OnReceivedResponse(
- const GURL& frame_origin,
- const GURL& response_url,
- ResourceType::Type resource_type,
- int origin_pid,
- const webkit_glue::ResourceResponseInfo& info) {
+SiteIsolationPolicy::OnReceivedResponse(const GURL& frame_origin,
+ const GURL& response_url,
+ ResourceType::Type resource_type,
+ int origin_pid,
+ const ResourceResponseInfo& info) {
if (!g_policy_enabled)
return linked_ptr<SiteIsolationResponseMetaData>();
diff --git a/content/child/site_isolation_policy.h b/content/child/site_isolation_policy.h
index 961193ba3a..6c48697b59 100644
--- a/content/child/site_isolation_policy.h
+++ b/content/child/site_isolation_policy.h
@@ -16,12 +16,10 @@
class GURL;
-namespace webkit_glue {
-struct ResourceResponseInfo;
-}
-
namespace content {
+struct ResourceResponseInfo;
+
// SiteIsolationPolicy implements the cross-site document blocking policy (XSDP)
// for Site Isolation. XSDP will monitor network responses to a renderer and
// block illegal responses so that a compromised renderer cannot steal private
@@ -86,9 +84,11 @@ class CONTENT_EXPORT SiteIsolationPolicy {
// request identified by |request_id|. Any data returned should then be
// passed to ShouldBlockResponse with the first packet.
static linked_ptr<SiteIsolationResponseMetaData> OnReceivedResponse(
- const GURL& frame_origin, const GURL& response_url,
- ResourceType::Type resource_type, int origin_pid,
- const webkit_glue::ResourceResponseInfo& info);
+ const GURL& frame_origin,
+ const GURL& response_url,
+ ResourceType::Type resource_type,
+ int origin_pid,
+ const ResourceResponseInfo& info);
// Examines the first network packet in case response_url is registered as a
// cross-site document by DidReceiveResponse(). In case that this response is
diff --git a/content/child/sync_load_response.h b/content/child/sync_load_response.h
index d19985f375..918bdeba9c 100644
--- a/content/child/sync_load_response.h
+++ b/content/child/sync_load_response.h
@@ -7,14 +7,14 @@
#include <string>
+#include "content/public/common/resource_response_info.h"
#include "url/gurl.h"
-#include "webkit/common/resource_response_info.h"
namespace content {
// See the SyncLoad method. (The name of this struct is not
// suffixed with "Info" because it also contains the response data.)
-struct SyncLoadResponse : webkit_glue::ResourceResponseInfo {
+struct SyncLoadResponse : ResourceResponseInfo {
SyncLoadResponse();
~SyncLoadResponse();
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc
index ca8fa82101..085cd6d243 100644
--- a/content/child/web_url_loader_impl.cc
+++ b/content/child/web_url_loader_impl.cc
@@ -60,7 +60,6 @@ using blink::WebURLResponse;
using webkit_glue::MultipartResponseDelegate;
using webkit_glue::ResourceDevToolsInfo;
using webkit_glue::ResourceLoaderBridge;
-using webkit_glue::ResourceResponseInfo;
using webkit_glue::WebURLResponseExtraDataImpl;
namespace content {
@@ -239,11 +238,9 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context>,
// RequestPeer methods:
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnReceivedRedirect(
- const GURL& new_url,
- const ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) OVERRIDE;
+ virtual bool OnReceivedRedirect(const GURL& new_url,
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) OVERRIDE;
virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
virtual void OnReceivedData(const char* data,
@@ -292,6 +289,9 @@ void WebURLLoaderImpl::Context::Cancel() {
// its own pointer to the client.
if (multipart_delegate_)
multipart_delegate_->Cancel();
+ // Ditto for the ftp delegate.
+ if (ftp_listing_delegate_)
+ ftp_listing_delegate_->Cancel();
// Do not make any further calls to the client.
client_ = NULL;
@@ -474,9 +474,8 @@ void WebURLLoaderImpl::Context::OnUploadProgress(uint64 position, uint64 size) {
bool WebURLLoaderImpl::Context::OnReceivedRedirect(
const GURL& new_url,
- const ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) {
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) {
if (!client_)
return false;
@@ -487,7 +486,7 @@ bool WebURLLoaderImpl::Context::OnReceivedRedirect(
// TODO(darin): We lack sufficient information to construct the actual
// request that resulted from the redirect.
WebURLRequest new_request(new_url);
- new_request.setFirstPartyForCookies(request_.firstPartyForCookies());
+ new_request.setFirstPartyForCookies(new_first_party_for_cookies);
new_request.setDownloadToFile(request_.downloadToFile());
WebString referrer_string = WebString::fromUTF8("Referer");
@@ -507,12 +506,16 @@ bool WebURLLoaderImpl::Context::OnReceivedRedirect(
client_->willSendRequest(loader_, new_request, response);
request_ = new_request;
- *has_new_first_party_for_cookies = true;
- *new_first_party_for_cookies = request_.firstPartyForCookies();
// Only follow the redirect if WebKit left the URL unmodified.
- if (new_url == GURL(new_request.url()))
+ if (new_url == GURL(new_request.url())) {
+ // First-party cookie logic moved from DocumentLoader in Blink to
+ // CrossSiteResourceHandler in the browser. Assert that Blink didn't try to
+ // change it to something else.
+ DCHECK_EQ(new_first_party_for_cookies.spec(),
+ request_.firstPartyForCookies().string().utf8());
return true;
+ }
// We assume that WebKit only changes the URL to suppress a redirect, and we
// assume that it does so by setting it to be invalid.
diff --git a/content/child/web_url_loader_impl.h b/content/child/web_url_loader_impl.h
index 94f72a152c..a2c1f3c67b 100644
--- a/content/child/web_url_loader_impl.h
+++ b/content/child/web_url_loader_impl.h
@@ -9,12 +9,10 @@
#include "content/common/content_export.h"
#include "third_party/WebKit/public/platform/WebURLLoader.h"
-namespace webkit_glue {
-struct ResourceResponseInfo;
-}
-
namespace content {
+struct ResourceResponseInfo;
+
class WebURLLoaderImpl : public blink::WebURLLoader {
public:
WebURLLoaderImpl();
@@ -25,7 +23,7 @@ class WebURLLoaderImpl : public blink::WebURLLoader {
int reason);
CONTENT_EXPORT static void PopulateURLResponse(
const GURL& url,
- const webkit_glue::ResourceResponseInfo& info,
+ const ResourceResponseInfo& info,
blink::WebURLResponse* response);
// WebURLLoader methods:
diff --git a/content/child/webcrypto/jwk.cc b/content/child/webcrypto/jwk.cc
index 1b3997c872..a3d65da205 100644
--- a/content/child/webcrypto/jwk.cc
+++ b/content/child/webcrypto/jwk.cc
@@ -20,6 +20,189 @@
#include "content/child/webcrypto/webcrypto_util.h"
#include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h"
+// JSON Web Key Format (JWK)
+// http://tools.ietf.org/html/draft-ietf-jose-json-web-key-21
+//
+// A JWK is a simple JSON dictionary with the following entries
+// - "kty" (Key Type) Parameter, REQUIRED
+// - <kty-specific parameters, see below>, REQUIRED
+// - "use" (Key Use) Parameter, OPTIONAL
+// - "key_ops" (Key Operations) Parameter, OPTIONAL
+// - "alg" (Algorithm) Parameter, OPTIONAL
+// - "ext" (Key Exportability), OPTIONAL
+// (all other entries are ignored)
+//
+// OPTIONAL here means that this code does not require the entry to be present
+// in the incoming JWK, because the method input parameters contain similar
+// information. If the optional JWK entry is present, it will be validated
+// against the corresponding input parameter for consistency and combined with
+// it according to rules defined below.
+//
+// Input 'key_data' contains the JWK. To build a Web Crypto Key, the JWK
+// values are parsed out and combined with the method input parameters to
+// build a Web Crypto Key:
+// Web Crypto Key type <-- (deduced)
+// Web Crypto Key extractable <-- JWK ext + input extractable
+// Web Crypto Key algorithm <-- JWK alg + input algorithm
+// Web Crypto Key keyUsage <-- JWK use, key_ops + input usage_mask
+// Web Crypto Key keying material <-- kty-specific parameters
+//
+// Values for each JWK entry are case-sensitive and defined in
+// http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18.
+// Note that not all values specified by JOSE are handled by this code. Only
+// handled values are listed.
+// - kty (Key Type)
+// +-------+--------------------------------------------------------------+
+// | "RSA" | RSA [RFC3447] |
+// | "oct" | Octet sequence (used to represent symmetric keys) |
+// +-------+--------------------------------------------------------------+
+//
+// - key_ops (Key Use Details)
+// The key_ops field is an array that contains one or more strings from
+// the table below, and describes the operations for which this key may be
+// used.
+// +-------+--------------------------------------------------------------+
+// | "encrypt" | encrypt operations |
+// | "decrypt" | decrypt operations |
+// | "sign" | sign (MAC) operations |
+// | "verify" | verify (MAC) operations |
+// | "wrapKey" | key wrap |
+// | "unwrapKey" | key unwrap |
+// | "deriveKey" | key derivation |
+// | "deriveBits" | key derivation |
+// +-------+--------------------------------------------------------------+
+//
+// - use (Key Use)
+// The use field contains a single entry from the table below.
+// +-------+--------------------------------------------------------------+
+// | "sig" | equivalent to key_ops of [sign, verify] |
+// | "enc" | equivalent to key_ops of [encrypt, decrypt, wrapKey, |
+// | | unwrapKey, deriveKey, deriveBits] |
+// +-------+--------------------------------------------------------------+
+//
+// NOTE: If both "use" and "key_ops" JWK members are present, the usages
+// specified by them MUST be consistent. In particular, the "use" value
+// "sig" corresponds to "sign" and/or "verify". The "use" value "enc"
+// corresponds to all other values defined above. If "key_ops" values
+// corresponding to both "sig" and "enc" "use" values are present, the "use"
+// member SHOULD NOT be present, and if present, its value MUST NOT be
+// either "sig" or "enc".
+//
+// - ext (Key Exportability)
+// +-------+--------------------------------------------------------------+
+// | true | Key may be exported from the trusted environment |
+// | false | Key cannot exit the trusted environment |
+// +-------+--------------------------------------------------------------+
+//
+// - alg (Algorithm)
+// See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18
+// +--------------+-------------------------------------------------------+
+// | Digital Signature or MAC Algorithm |
+// +--------------+-------------------------------------------------------+
+// | "HS1" | HMAC using SHA-1 hash algorithm |
+// | "HS256" | HMAC using SHA-256 hash algorithm |
+// | "HS384" | HMAC using SHA-384 hash algorithm |
+// | "HS512" | HMAC using SHA-512 hash algorithm |
+// | "RS1" | RSASSA using SHA-1 hash algorithm
+// | "RS256" | RSASSA using SHA-256 hash algorithm |
+// | "RS384" | RSASSA using SHA-384 hash algorithm |
+// | "RS512" | RSASSA using SHA-512 hash algorithm |
+// +--------------+-------------------------------------------------------|
+// | Key Management Algorithm |
+// +--------------+-------------------------------------------------------+
+// | "RSA-OAEP" | RSAES using Optimal Asymmetric Encryption Padding |
+// | | (OAEP) [RFC3447], with the default parameters |
+// | | specified by RFC3447 in Section A.2.1 |
+// | "A128KW" | Advanced Encryption Standard (AES) Key Wrap Algorithm |
+// | | [RFC3394] using 128 bit keys |
+// | "A192KW" | AES Key Wrap Algorithm using 192 bit keys |
+// | "A256KW" | AES Key Wrap Algorithm using 256 bit keys |
+// | "A128GCM" | AES in Galois/Counter Mode (GCM) [NIST.800-38D] using |
+// | | 128 bit keys |
+// | "A192GCM" | AES GCM using 192 bit keys |
+// | "A256GCM" | AES GCM using 256 bit keys |
+// | "A128CBC" | AES in Cipher Block Chaining Mode (CBC) with PKCS #5 |
+// | | padding [NIST.800-38A] |
+// | "A192CBC" | AES CBC using 192 bit keys |
+// | "A256CBC" | AES CBC using 256 bit keys |
+// +--------------+-------------------------------------------------------+
+//
+// kty-specific parameters
+// The value of kty determines the type and content of the keying material
+// carried in the JWK to be imported.
+// // - kty == "oct" (symmetric or other raw key)
+// +-------+--------------------------------------------------------------+
+// | "k" | Contains the value of the symmetric (or other single-valued) |
+// | | key. It is represented as the base64url encoding of the |
+// | | octet sequence containing the key value. |
+// +-------+--------------------------------------------------------------+
+// - kty == "RSA" (RSA public key)
+// +-------+--------------------------------------------------------------+
+// | "n" | Contains the modulus value for the RSA public key. It is |
+// | | represented as the base64url encoding of the value's |
+// | | unsigned big endian representation as an octet sequence. |
+// +-------+--------------------------------------------------------------+
+// | "e" | Contains the exponent value for the RSA public key. It is |
+// | | represented as the base64url encoding of the value's |
+// | | unsigned big endian representation as an octet sequence. |
+// +-------+--------------------------------------------------------------+
+// - If key == "RSA" and the "d" parameter is present then it is a private key.
+// All the parameters above for public keys apply, as well as the following.
+// (Note that except for "d", all of these are optional):
+// +-------+--------------------------------------------------------------+
+// | "d" | Contains the private exponent value for the RSA private key. |
+// | | It is represented as the base64url encoding of the value's |
+// | | unsigned big endian representation as an octet sequence. |
+// +-------+--------------------------------------------------------------+
+// | "p" | Contains the first prime factor value for the RSA private |
+// | | key. It is represented as the base64url encoding of the |
+// | | value's |
+// | | unsigned big endian representation as an octet sequence. |
+// +-------+--------------------------------------------------------------+
+// | "q" | Contains the second prime factor value for the RSA private |
+// | | key. It is represented as the base64url encoding of the |
+// | | value's unsigned big endian representation as an octet |
+// | | sequence. |
+// +-------+--------------------------------------------------------------+
+// | "dp" | Contains the first factor CRT exponent value for the RSA |
+// | | private key. It is represented as the base64url encoding of |
+// | | the value's unsigned big endian representation as an octet |
+// | | sequence. |
+// +-------+--------------------------------------------------------------+
+// | "dq" | Contains the second factor CRT exponent value for the RSA |
+// | | private key. It is represented as the base64url encoding of |
+// | | the value's unsigned big endian representation as an octet |
+// | | sequence. |
+// +-------+--------------------------------------------------------------+
+// | "dq" | Contains the first CRT coefficient value for the RSA private |
+// | | key. It is represented as the base64url encoding of the |
+// | | value's unsigned big endian representation as an octet |
+// | | sequence. |
+// +-------+--------------------------------------------------------------+
+//
+// Consistency and conflict resolution
+// The 'algorithm', 'extractable', and 'usage_mask' input parameters
+// may be different than the corresponding values inside the JWK. The Web
+// Crypto spec says that if a JWK value is present but is inconsistent with
+// the input value, it is an error and the operation must fail. If no
+// inconsistency is found then the input parameters are used.
+//
+// algorithm
+// If the JWK algorithm is provided, it must match the web crypto input
+// algorithm (both the algorithm ID and inner hash if applicable).
+//
+// extractable
+// If the JWK ext field is true but the input parameter is false, make the
+// Web Crypto Key non-extractable. Conversely, if the JWK ext field is
+// false but the input parameter is true, it is an inconsistency. If both
+// are true or both are false, use that value.
+//
+// usage_mask
+// The input usage_mask must be a strict subset of the interpreted JWK use
+// value, else it is judged inconsistent. In all cases the input usage_mask
+// is used as the final usage_mask.
+//
+
namespace content {
namespace webcrypto {
@@ -43,11 +226,10 @@ blink::WebCryptoAlgorithm CreateRsaOaepImportAlgorithm(
}
// Web Crypto equivalent usage mask for JWK 'use' = 'enc'.
-// TODO(padolph): Add 'deriveBits' once supported by Blink.
const blink::WebCryptoKeyUsageMask kJwkEncUsage =
blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt |
blink::WebCryptoKeyUsageWrapKey | blink::WebCryptoKeyUsageUnwrapKey |
- blink::WebCryptoKeyUsageDeriveKey;
+ blink::WebCryptoKeyUsageDeriveKey | blink::WebCryptoKeyUsageDeriveBits;
// Web Crypto equivalent usage mask for JWK 'use' = 'sig'.
const blink::WebCryptoKeyUsageMask kJwkSigUsage =
blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify;
@@ -124,12 +306,18 @@ class JwkAlgorithmRegistry {
alg_to_info_["RS512"] =
JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaSsaImportAlgorithm,
blink::WebCryptoAlgorithmIdSha512>);
- alg_to_info_["RSA1_5"] = JwkAlgorithmInfo(
- &BindAlgorithmId<CreateAlgorithm,
- blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5>);
alg_to_info_["RSA-OAEP"] =
JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepImportAlgorithm,
blink::WebCryptoAlgorithmIdSha1>);
+ alg_to_info_["RSA-OAEP-256"] =
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepImportAlgorithm,
+ blink::WebCryptoAlgorithmIdSha256>);
+ alg_to_info_["RSA-OAEP-384"] =
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepImportAlgorithm,
+ blink::WebCryptoAlgorithmIdSha384>);
+ alg_to_info_["RSA-OAEP-512"] =
+ JwkAlgorithmInfo(&BindAlgorithmId<CreateRsaOaepImportAlgorithm,
+ blink::WebCryptoAlgorithmIdSha512>);
alg_to_info_["A128KW"] = JwkAlgorithmInfo(
&BindAlgorithmId<CreateAlgorithm, blink::WebCryptoAlgorithmIdAesKw>,
128);
@@ -276,6 +464,31 @@ Status GetJwkBytes(base::DictionaryValue* dict,
return Status::Success();
}
+// Extracts the optional string property with key |path| from |dict| and saves
+// the base64url-decoded bytes to |*result|. If the property exist and is not a
+// string, or could not be base64url-decoded, returns an error. In the case
+// where the property does not exist, |result| is guaranteed to be empty.
+Status GetOptionalJwkBytes(base::DictionaryValue* dict,
+ const std::string& path,
+ std::string* result,
+ bool* property_exists) {
+ std::string base64_string;
+ Status status =
+ GetOptionalJwkString(dict, path, &base64_string, property_exists);
+ if (status.IsError())
+ return status;
+
+ if (!*property_exists) {
+ result->clear();
+ return Status::Success();
+ }
+
+ if (!Base64DecodeUrlSafe(base64_string, result))
+ return Status::ErrorJwkBase64Decode(path);
+
+ return Status::Success();
+}
+
// Extracts the optional boolean property with key |path| from |dict| and saves
// the result to |*result| if it was found. If the property exists and is not a
// boolean, returns an error. Otherwise returns success, and sets
@@ -296,12 +509,6 @@ Status GetOptionalJwkBool(base::DictionaryValue* dict,
return Status::Success();
}
-// Returns true if the set bits in b make up a subset of the set bits in a.
-bool ContainsKeyUsages(blink::WebCryptoKeyUsageMask a,
- blink::WebCryptoKeyUsageMask b) {
- return (a & b) == b;
-}
-
// Writes a secret/symmetric key to a JWK dictionary.
void WriteSecretKey(const std::vector<uint8>& raw_key,
base::DictionaryValue* jwk_dict) {
@@ -326,6 +533,53 @@ void WriteRsaPublicKey(const std::vector<uint8>& modulus,
jwk_dict->SetString("e", Base64EncodeUrlSafe(public_exponent));
}
+// Writes an RSA private key to a JWK dictionary
+Status ExportRsaPrivateKeyJwk(const blink::WebCryptoKey& key,
+ base::DictionaryValue* jwk_dict) {
+ platform::PrivateKey* private_key;
+ Status status = ToPlatformPrivateKey(key, &private_key);
+ if (status.IsError())
+ return status;
+
+ // TODO(eroman): Copying the key properties to temporary vectors is
+ // inefficient. Once there aren't two implementations of platform_crypto this
+ // and other code will be easier to streamline.
+ std::vector<uint8> modulus;
+ std::vector<uint8> public_exponent;
+ std::vector<uint8> private_exponent;
+ std::vector<uint8> prime1;
+ std::vector<uint8> prime2;
+ std::vector<uint8> exponent1;
+ std::vector<uint8> exponent2;
+ std::vector<uint8> coefficient;
+
+ status = platform::ExportRsaPrivateKey(private_key,
+ &modulus,
+ &public_exponent,
+ &private_exponent,
+ &prime1,
+ &prime2,
+ &exponent1,
+ &exponent2,
+ &coefficient);
+ if (status.IsError())
+ return status;
+
+ jwk_dict->SetString("kty", "RSA");
+ jwk_dict->SetString("n", Base64EncodeUrlSafe(modulus));
+ jwk_dict->SetString("e", Base64EncodeUrlSafe(public_exponent));
+ jwk_dict->SetString("d", Base64EncodeUrlSafe(private_exponent));
+ // Although these are "optional" in the JWA, WebCrypto spec requires them to
+ // be emitted.
+ jwk_dict->SetString("p", Base64EncodeUrlSafe(prime1));
+ jwk_dict->SetString("q", Base64EncodeUrlSafe(prime2));
+ jwk_dict->SetString("dp", Base64EncodeUrlSafe(exponent1));
+ jwk_dict->SetString("dq", Base64EncodeUrlSafe(exponent2));
+ jwk_dict->SetString("qi", Base64EncodeUrlSafe(coefficient));
+
+ return Status::Success();
+}
+
// Writes a Web Crypto usage mask to a JWK dictionary.
void WriteKeyOps(blink::WebCryptoKeyUsageMask key_usages,
base::DictionaryValue* jwk_dict) {
@@ -400,33 +654,48 @@ Status WriteAlg(const blink::WebCryptoKeyAlgorithm& algorithm,
}
break;
}
- case blink::WebCryptoKeyAlgorithmParamsTypeRsa:
- switch (algorithm.id()) {
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5:
- jwk_dict->SetString("alg", "RSA1_5");
- break;
- default:
- NOTREACHED();
- return Status::ErrorUnexpected();
- }
- break;
case blink::WebCryptoKeyAlgorithmParamsTypeRsaHashed:
- switch (algorithm.rsaHashedParams()->hash().id()) {
- case blink::WebCryptoAlgorithmIdRsaOaep:
- jwk_dict->SetString("alg", "RSA-OAEP");
- break;
- case blink::WebCryptoAlgorithmIdSha1:
- jwk_dict->SetString("alg", "RS1");
- break;
- case blink::WebCryptoAlgorithmIdSha256:
- jwk_dict->SetString("alg", "RS256");
- break;
- case blink::WebCryptoAlgorithmIdSha384:
- jwk_dict->SetString("alg", "RS384");
+ switch (algorithm.id()) {
+ case blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: {
+ switch (algorithm.rsaHashedParams()->hash().id()) {
+ case blink::WebCryptoAlgorithmIdSha1:
+ jwk_dict->SetString("alg", "RS1");
+ break;
+ case blink::WebCryptoAlgorithmIdSha256:
+ jwk_dict->SetString("alg", "RS256");
+ break;
+ case blink::WebCryptoAlgorithmIdSha384:
+ jwk_dict->SetString("alg", "RS384");
+ break;
+ case blink::WebCryptoAlgorithmIdSha512:
+ jwk_dict->SetString("alg", "RS512");
+ break;
+ default:
+ NOTREACHED();
+ return Status::ErrorUnexpected();
+ }
break;
- case blink::WebCryptoAlgorithmIdSha512:
- jwk_dict->SetString("alg", "RS512");
+ }
+ case blink::WebCryptoAlgorithmIdRsaOaep: {
+ switch (algorithm.rsaHashedParams()->hash().id()) {
+ case blink::WebCryptoAlgorithmIdSha1:
+ jwk_dict->SetString("alg", "RSA-OAEP");
+ break;
+ case blink::WebCryptoAlgorithmIdSha256:
+ jwk_dict->SetString("alg", "RSA-OAEP-256");
+ break;
+ case blink::WebCryptoAlgorithmIdSha384:
+ jwk_dict->SetString("alg", "RSA-OAEP-384");
+ break;
+ case blink::WebCryptoAlgorithmIdSha512:
+ jwk_dict->SetString("alg", "RSA-OAEP-512");
+ break;
+ default:
+ NOTREACHED();
+ return Status::ErrorUnexpected();
+ }
break;
+ }
default:
NOTREACHED();
return Status::ErrorUnexpected();
@@ -438,194 +707,116 @@ Status WriteAlg(const blink::WebCryptoKeyAlgorithm& algorithm,
return Status::Success();
}
-bool IsRsaPublicKey(const blink::WebCryptoKey& key) {
- if (key.type() != blink::WebCryptoKeyTypePublic)
- return false;
- const blink::WebCryptoAlgorithmId algorithm_id = key.algorithm().id();
- return algorithm_id == blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 ||
- algorithm_id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 ||
- algorithm_id == blink::WebCryptoAlgorithmIdRsaOaep;
+bool IsRsaKey(const blink::WebCryptoKey& key) {
+ return IsAlgorithmRsa(key.algorithm().id());
}
-// TODO(padolph): This function is duplicated in shared_crypto.cc
-Status ToPlatformPublicKey(const blink::WebCryptoKey& key,
- platform::PublicKey** out) {
- *out = static_cast<platform::Key*>(key.handle())->AsPublicKey();
- if (!*out)
- return Status::ErrorUnexpectedKeyType();
- return Status::Success();
+Status ImportRsaKey(base::DictionaryValue* dict,
+ const blink::WebCryptoAlgorithm& algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKey* key) {
+ // An RSA public key must have an "n" (modulus) and an "e" (exponent) entry
+ // in the JWK, while an RSA private key must have those, plus at least a "d"
+ // (private exponent) entry.
+ // See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18,
+ // section 6.3.
+ std::string jwk_n_value;
+ Status status = GetJwkBytes(dict, "n", &jwk_n_value);
+ if (status.IsError())
+ return status;
+ std::string jwk_e_value;
+ status = GetJwkBytes(dict, "e", &jwk_e_value);
+ if (status.IsError())
+ return status;
+
+ bool is_public_key = !dict->HasKey("d");
+
+ // Now that the key type is known, do an additional check on the usages to
+ // make sure they are all applicable for this algorithm + key type.
+ status = CheckKeyUsages(algorithm.id(),
+ is_public_key ? blink::WebCryptoKeyTypePublic
+ : blink::WebCryptoKeyTypePrivate,
+ usage_mask);
+
+ if (status.IsError())
+ return status;
+
+ if (is_public_key) {
+ return platform::ImportRsaPublicKey(algorithm,
+ extractable,
+ usage_mask,
+ CryptoData(jwk_n_value),
+ CryptoData(jwk_e_value),
+ key);
+ }
+
+ std::string jwk_d_value;
+ status = GetJwkBytes(dict, "d", &jwk_d_value);
+ if (status.IsError())
+ return status;
+
+ // The "p", "q", "dp", "dq", and "qi" properties are optional. Treat these
+ // properties the same if they are unspecified, as if they were specified-but
+ // empty, since ImportRsaPrivateKey() doesn't do validation checks anyway.
+
+ std::string jwk_p_value;
+ bool has_p;
+ status = GetOptionalJwkBytes(dict, "p", &jwk_p_value, &has_p);
+ if (status.IsError())
+ return status;
+
+ std::string jwk_q_value;
+ bool has_q;
+ status = GetOptionalJwkBytes(dict, "q", &jwk_q_value, &has_q);
+ if (status.IsError())
+ return status;
+
+ std::string jwk_dp_value;
+ bool has_dp;
+ status = GetOptionalJwkBytes(dict, "dp", &jwk_dp_value, &has_dp);
+ if (status.IsError())
+ return status;
+
+ std::string jwk_dq_value;
+ bool has_dq;
+ status = GetOptionalJwkBytes(dict, "dq", &jwk_dq_value, &has_dq);
+ if (status.IsError())
+ return status;
+
+ std::string jwk_qi_value;
+ bool has_qi;
+ status = GetOptionalJwkBytes(dict, "qi", &jwk_qi_value, &has_qi);
+ if (status.IsError())
+ return status;
+
+ int num_optional_properties = has_p + has_q + has_dp + has_dq + has_qi;
+ if (num_optional_properties != 0 && num_optional_properties != 5)
+ return Status::ErrorJwkIncompleteOptionalRsaPrivateKey();
+
+ return platform::ImportRsaPrivateKey(
+ algorithm,
+ extractable,
+ usage_mask,
+ CryptoData(jwk_n_value), // modulus
+ CryptoData(jwk_e_value), // public_exponent
+ CryptoData(jwk_d_value), // private_exponent
+ CryptoData(jwk_p_value), // prime1
+ CryptoData(jwk_q_value), // prime2
+ CryptoData(jwk_dp_value), // exponent1
+ CryptoData(jwk_dq_value), // exponent2
+ CryptoData(jwk_qi_value), // coefficient
+ key);
}
} // namespace
+// TODO(eroman): Split this up into smaller functions.
Status ImportKeyJwk(const CryptoData& key_data,
const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usage_mask,
blink::WebCryptoKey* key) {
- // TODO(padolph): Generalize this comment to include export, and move to top
- // of file.
-
- // The goal of this method is to extract key material and meta data from the
- // incoming JWK, combine them with the input parameters, and ultimately import
- // a Web Crypto Key.
- //
- // JSON Web Key Format (JWK)
- // http://tools.ietf.org/html/draft-ietf-jose-json-web-key-21
- //
- // A JWK is a simple JSON dictionary with the following entries
- // - "kty" (Key Type) Parameter, REQUIRED
- // - <kty-specific parameters, see below>, REQUIRED
- // - "use" (Key Use) Parameter, OPTIONAL
- // - "key_ops" (Key Operations) Parameter, OPTIONAL
- // - "alg" (Algorithm) Parameter, OPTIONAL
- // - "ext" (Key Exportability), OPTIONAL
- // (all other entries are ignored)
- //
- // OPTIONAL here means that this code does not require the entry to be present
- // in the incoming JWK, because the method input parameters contain similar
- // information. If the optional JWK entry is present, it will be validated
- // against the corresponding input parameter for consistency and combined with
- // it according to rules defined below. A special case is that the method
- // input parameter 'algorithm' is also optional. If it is null, the JWK 'alg'
- // value (if present) is used as a fallback.
- //
- // Input 'key_data' contains the JWK. To build a Web Crypto Key, the JWK
- // values are parsed out and combined with the method input parameters to
- // build a Web Crypto Key:
- // Web Crypto Key type <-- (deduced)
- // Web Crypto Key extractable <-- JWK ext + input extractable
- // Web Crypto Key algorithm <-- JWK alg + input algorithm
- // Web Crypto Key keyUsage <-- JWK use, key_ops + input usage_mask
- // Web Crypto Key keying material <-- kty-specific parameters
- //
- // Values for each JWK entry are case-sensitive and defined in
- // http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18.
- // Note that not all values specified by JOSE are handled by this code. Only
- // handled values are listed.
- // - kty (Key Type)
- // +-------+--------------------------------------------------------------+
- // | "RSA" | RSA [RFC3447] |
- // | "oct" | Octet sequence (used to represent symmetric keys) |
- // +-------+--------------------------------------------------------------+
- //
- // - key_ops (Key Use Details)
- // The key_ops field is an array that contains one or more strings from
- // the table below, and describes the operations for which this key may be
- // used.
- // +-------+--------------------------------------------------------------+
- // | "encrypt" | encrypt operations |
- // | "decrypt" | decrypt operations |
- // | "sign" | sign (MAC) operations |
- // | "verify" | verify (MAC) operations |
- // | "wrapKey" | key wrap |
- // | "unwrapKey" | key unwrap |
- // | "deriveKey" | key derivation |
- // | "deriveBits" | key derivation TODO(padolph): not currently supported |
- // +-------+--------------------------------------------------------------+
- //
- // - use (Key Use)
- // The use field contains a single entry from the table below.
- // +-------+--------------------------------------------------------------+
- // | "sig" | equivalent to key_ops of [sign, verify] |
- // | "enc" | equivalent to key_ops of [encrypt, decrypt, wrapKey, |
- // | | unwrapKey, deriveKey, deriveBits] |
- // +-------+--------------------------------------------------------------+
- //
- // NOTE: If both "use" and "key_ops" JWK members are present, the usages
- // specified by them MUST be consistent. In particular, the "use" value
- // "sig" corresponds to "sign" and/or "verify". The "use" value "enc"
- // corresponds to all other values defined above. If "key_ops" values
- // corresponding to both "sig" and "enc" "use" values are present, the "use"
- // member SHOULD NOT be present, and if present, its value MUST NOT be
- // either "sig" or "enc".
- //
- // - ext (Key Exportability)
- // +-------+--------------------------------------------------------------+
- // | true | Key may be exported from the trusted environment |
- // | false | Key cannot exit the trusted environment |
- // +-------+--------------------------------------------------------------+
- //
- // - alg (Algorithm)
- // See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18
- // +--------------+-------------------------------------------------------+
- // | Digital Signature or MAC Algorithm |
- // +--------------+-------------------------------------------------------+
- // | "HS1" | HMAC using SHA-1 hash algorithm |
- // | "HS256" | HMAC using SHA-256 hash algorithm |
- // | "HS384" | HMAC using SHA-384 hash algorithm |
- // | "HS512" | HMAC using SHA-512 hash algorithm |
- // | "RS1" | RSASSA using SHA-1 hash algorithm
- // | "RS256" | RSASSA using SHA-256 hash algorithm |
- // | "RS384" | RSASSA using SHA-384 hash algorithm |
- // | "RS512" | RSASSA using SHA-512 hash algorithm |
- // +--------------+-------------------------------------------------------|
- // | Key Management Algorithm |
- // +--------------+-------------------------------------------------------+
- // | "RSA1_5" | RSAES-PKCS1-V1_5 [RFC3447] |
- // | "RSA-OAEP" | RSAES using Optimal Asymmetric Encryption Padding |
- // | | (OAEP) [RFC3447], with the default parameters |
- // | | specified by RFC3447 in Section A.2.1 |
- // | "A128KW" | Advanced Encryption Standard (AES) Key Wrap Algorithm |
- // | | [RFC3394] using 128 bit keys |
- // | "A192KW" | AES Key Wrap Algorithm using 192 bit keys |
- // | "A256KW" | AES Key Wrap Algorithm using 256 bit keys |
- // | "A128GCM" | AES in Galois/Counter Mode (GCM) [NIST.800-38D] using |
- // | | 128 bit keys |
- // | "A192GCM" | AES GCM using 192 bit keys |
- // | "A256GCM" | AES GCM using 256 bit keys |
- // | "A128CBC" | AES in Cipher Block Chaining Mode (CBC) with PKCS #5 |
- // | | padding [NIST.800-38A] |
- // | "A192CBC" | AES CBC using 192 bit keys |
- // | "A256CBC" | AES CBC using 256 bit keys |
- // +--------------+-------------------------------------------------------+
- //
- // kty-specific parameters
- // The value of kty determines the type and content of the keying material
- // carried in the JWK to be imported. Currently only two possibilities are
- // supported: a raw key or an RSA public key. RSA private keys are not
- // supported because typical applications seldom need to import a private key,
- // and the large number of JWK parameters required to describe one.
- // - kty == "oct" (symmetric or other raw key)
- // +-------+--------------------------------------------------------------+
- // | "k" | Contains the value of the symmetric (or other single-valued) |
- // | | key. It is represented as the base64url encoding of the |
- // | | octet sequence containing the key value. |
- // +-------+--------------------------------------------------------------+
- // - kty == "RSA" (RSA public key)
- // +-------+--------------------------------------------------------------+
- // | "n" | Contains the modulus value for the RSA public key. It is |
- // | | represented as the base64url encoding of the value's |
- // | | unsigned big endian representation as an octet sequence. |
- // +-------+--------------------------------------------------------------+
- // | "e" | Contains the exponent value for the RSA public key. It is |
- // | | represented as the base64url encoding of the value's |
- // | | unsigned big endian representation as an octet sequence. |
- // +-------+--------------------------------------------------------------+
- //
- // Consistency and conflict resolution
- // The 'algorithm', 'extractable', and 'usage_mask' input parameters
- // may be different than the corresponding values inside the JWK. The Web
- // Crypto spec says that if a JWK value is present but is inconsistent with
- // the input value, it is an error and the operation must fail. If no
- // inconsistency is found then the input parameters are used.
- //
- // algorithm
- // If the JWK algorithm is provided, it must match the web crypto input
- // algorithm (both the algorithm ID and inner hash if applicable).
- //
- // extractable
- // If the JWK ext field is true but the input parameter is false, make the
- // Web Crypto Key non-extractable. Conversely, if the JWK ext field is
- // false but the input parameter is true, it is an inconsistency. If both
- // are true or both are false, use that value.
- //
- // usage_mask
- // The input usage_mask must be a strict subset of the interpreted JWK use
- // value, else it is judged inconsistent. In all cases the input usage_mask
- // is used as the final usage_mask.
- //
-
if (!key_data.byte_length())
return Status::ErrorImportEmptyKeyData();
DCHECK(key);
@@ -756,36 +947,9 @@ Status ImportKeyJwk(const CryptoData& key_data,
usage_mask,
key);
}
- if (jwk_kty_value == "RSA") {
- // An RSA public key must have an "n" (modulus) and an "e" (exponent) entry
- // in the JWK, while an RSA private key must have those, plus at least a "d"
- // (private exponent) entry.
- // See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18,
- // section 6.3.
-
- // RSA private key import is not currently supported, so fail here if a "d"
- // entry is found.
- // TODO(padolph): Support RSA private key import.
- if (dict_value->HasKey("d"))
- return Status::ErrorJwkRsaPrivateKeyUnsupported();
-
- std::string jwk_n_value;
- status = GetJwkBytes(dict_value, "n", &jwk_n_value);
- if (status.IsError())
- return status;
- std::string jwk_e_value;
- status = GetJwkBytes(dict_value, "e", &jwk_e_value);
- if (status.IsError())
- return status;
-
- return platform::ImportRsaPublicKey(algorithm,
- extractable,
- usage_mask,
- CryptoData(jwk_n_value),
- CryptoData(jwk_e_value),
- key);
- }
+ if (jwk_kty_value == "RSA")
+ return ImportRsaKey(dict_value, algorithm, extractable, usage_mask, key);
return Status::ErrorJwkUnrecognizedKty();
}
@@ -806,8 +970,8 @@ Status ExportKeyJwk(const blink::WebCryptoKey& key,
break;
}
case blink::WebCryptoKeyTypePublic: {
- // Currently only RSA public key export is supported.
- if (!IsRsaPublicKey(key))
+ // TODO(eroman): Update when there are asymmetric keys other than RSA.
+ if (!IsRsaKey(key))
return Status::ErrorUnsupported();
platform::PublicKey* public_key;
status = ToPlatformPublicKey(key, &public_key);
@@ -822,7 +986,17 @@ Status ExportKeyJwk(const blink::WebCryptoKey& key,
WriteRsaPublicKey(modulus, public_exponent, &jwk_dict);
break;
}
- case blink::WebCryptoKeyTypePrivate: // TODO(padolph)
+ case blink::WebCryptoKeyTypePrivate: {
+ // TODO(eroman): Update when there are asymmetric keys other than RSA.
+ if (!IsRsaKey(key))
+ return Status::ErrorUnsupported();
+
+ status = ExportRsaPrivateKeyJwk(key, &jwk_dict);
+ if (status.IsError())
+ return status;
+ break;
+ }
+
default:
return Status::ErrorUnsupported();
}
diff --git a/content/child/webcrypto/platform_crypto.h b/content/child/webcrypto/platform_crypto.h
index accebe726e..0de21dc08b 100644
--- a/content/child/webcrypto/platform_crypto.h
+++ b/content/child/webcrypto/platform_crypto.h
@@ -97,17 +97,24 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode,
std::vector<uint8>* buffer);
// Preconditions:
-// * |key| is non-null.
-// * |data| is not empty.
-Status EncryptRsaEsPkcs1v1_5(PublicKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer);
+// * |key| is non-null
+// * |hash| is a digest algorithm
+// * |label| MAY be empty (e.g. 0 bytes long).
+Status EncryptRsaOaep(PublicKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer);
// Preconditions:
-// * |key| is non-null.
-Status DecryptRsaEsPkcs1v1_5(PrivateKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer);
+// * |key| is non-null
+// * |hash| is a digest algorithm
+// * |label| MAY be empty (e.g. 0 bytes long).
+Status DecryptRsaOaep(PrivateKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer);
// Preconditions:
// * |key| is a non-null HMAC key.
@@ -151,6 +158,7 @@ Status VerifyRsaSsaPkcs1v1_5(PublicKey* key,
// * algorithm.id() is for a symmetric key algorithm.
// * keylen_bytes is non-zero (TODO(eroman): revisit this).
// * For AES algorithms |keylen_bytes| is either 16, 24, or 32 bytes long.
+// * usage_mask makes sense for the algorithm.
Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usage_mask,
@@ -161,16 +169,15 @@ Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm,
// * algorithm.id() is for an RSA algorithm.
// * public_exponent, modulus_length_bits and hash_or_null are the same as what
// is in algorithm. They are split out for convenience.
-// * hash_or_null.isNull() may be true if a hash is not applicable to the
-// algorithm
// * modulus_length_bits is not 0
// * public_exponent is not empty.
+// * {public|private}_key_usage_mask make sense for the algorithm.
Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKeyUsageMask public_key_usage_mask,
+ blink::WebCryptoKeyUsageMask private_key_usage_mask,
unsigned int modulus_length_bits,
const CryptoData& public_exponent,
- const blink::WebCryptoAlgorithm& hash,
blink::WebCryptoKey* public_key,
blink::WebCryptoKey* private_key);
@@ -178,6 +185,7 @@ Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
// * |key| is non-null.
// * |algorithm.id()| is for a symmetric key algorithm.
// * For AES algorithms |key_data| is either 16, 24, or 32 bytes long.
+// * usage_mask makes sense for the algorithm.
// Note that this may be called from target Blink thread.
Status ImportKeyRaw(const blink::WebCryptoAlgorithm& algorithm,
const CryptoData& key_data,
@@ -187,6 +195,7 @@ Status ImportKeyRaw(const blink::WebCryptoAlgorithm& algorithm,
// Preconditions:
// * algorithm.id() is for an RSA algorithm.
+// * usage_mask makes sense for the algorithm.
Status ImportRsaPublicKey(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usage_mask,
@@ -194,7 +203,28 @@ Status ImportRsaPublicKey(const blink::WebCryptoAlgorithm& algorithm,
const CryptoData& exponent_data,
blink::WebCryptoKey* key);
+// Preconditions:
+// * algorithm.id() is for an RSA algorithm.
+// * modulus, public_exponent, and private_exponent will be non-empty. The
+// others will either all be specified (non-empty), or all be unspecified
+// (empty).
+// * usage_mask makes sense for the algorithm.
+Status ImportRsaPrivateKey(const blink::WebCryptoAlgorithm& algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usage_mask,
+ const CryptoData& modulus,
+ const CryptoData& public_exponent,
+ const CryptoData& private_exponent,
+ const CryptoData& prime1,
+ const CryptoData& prime2,
+ const CryptoData& exponent1,
+ const CryptoData& exponent2,
+ const CryptoData& coefficient,
+ blink::WebCryptoKey* key);
+
// Note that this may be called from target Blink thread.
+// Preconditions:
+// * usage_mask makes sense for the algorithm.
Status ImportKeySpki(const blink::WebCryptoAlgorithm& algorithm,
const CryptoData& key_data,
bool extractable,
@@ -202,6 +232,8 @@ Status ImportKeySpki(const blink::WebCryptoAlgorithm& algorithm,
blink::WebCryptoKey* key);
// Note that this may be called from target Blink thread.
+// Preconditions:
+// * usage_mask makes sense for the algorithm.
Status ImportKeyPkcs8(const blink::WebCryptoAlgorithm& algorithm,
const CryptoData& key_data,
bool extractable,
@@ -224,15 +256,27 @@ Status ExportRsaPublicKey(PublicKey* key,
// Preconditions:
// * |key| is non-null.
+Status ExportRsaPrivateKey(PrivateKey* key,
+ std::vector<uint8>* modulus,
+ std::vector<uint8>* public_exponent,
+ std::vector<uint8>* private_exponent,
+ std::vector<uint8>* prime1,
+ std::vector<uint8>* prime2,
+ std::vector<uint8>* exponent1,
+ std::vector<uint8>* exponent2,
+ std::vector<uint8>* coefficient);
+
+// Preconditions:
+// * |key| is non-null.
Status ExportKeyPkcs8(PrivateKey* key,
const blink::WebCryptoKeyAlgorithm& key_algorithm,
std::vector<uint8>* buffer);
// Preconditions:
-// * |wrapping_key| is non-null
// * |key| is non-null
-Status WrapSymKeyAesKw(SymKey* wrapping_key,
- SymKey* key,
+// * |wrapping_key| is non-null
+Status WrapSymKeyAesKw(SymKey* key,
+ SymKey* wrapping_key,
std::vector<uint8>* buffer);
// Unwraps (decrypts) |wrapped_key_data| using AES-KW and places the results in
@@ -244,6 +288,7 @@ Status WrapSymKeyAesKw(SymKey* wrapping_key,
// * |key| is non-null
// * |wrapped_key_data| is at least 24 bytes and a multiple of 8 bytes
// * |algorithm.id()| is for a symmetric key algorithm.
+// * usage_mask makes sense for the algorithm.
Status UnwrapSymKeyAesKw(const CryptoData& wrapped_key_data,
SymKey* wrapping_key,
const blink::WebCryptoAlgorithm& algorithm,
@@ -262,24 +307,6 @@ Status DecryptAesKw(SymKey* key,
const CryptoData& data,
std::vector<uint8>* buffer);
-// Preconditions:
-// * |wrapping_key| is non-null
-// * |key| is non-null
-Status WrapSymKeyRsaEs(PublicKey* wrapping_key,
- SymKey* key,
- std::vector<uint8>* buffer);
-
-// Preconditions:
-// * |wrapping_key| is non-null
-// * |key| is non-null
-// * |algorithm.id()| is for a symmetric key algorithm.
-Status UnwrapSymKeyRsaEs(const CryptoData& wrapped_key_data,
- PrivateKey* wrapping_key,
- const blink::WebCryptoAlgorithm& algorithm,
- bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
- blink::WebCryptoKey* key);
-
} // namespace platform
} // namespace webcrypto
diff --git a/content/child/webcrypto/platform_crypto_nss.cc b/content/child/webcrypto/platform_crypto_nss.cc
index 65dbb2f464..3d0e9923a6 100644
--- a/content/child/webcrypto/platform_crypto_nss.cc
+++ b/content/child/webcrypto/platform_crypto_nss.cc
@@ -60,6 +60,8 @@ struct CK_GCM_PARAMS {
};
#endif // !defined(CKM_AES_GCM)
+namespace {
+
// Signature for PK11_Encrypt and PK11_Decrypt.
typedef SECStatus (*PK11_EncryptDecryptFunction)(PK11SymKey*,
CK_MECHANISM_TYPE,
@@ -70,10 +72,38 @@ typedef SECStatus (*PK11_EncryptDecryptFunction)(PK11SymKey*,
const unsigned char*,
unsigned int);
+// Signature for PK11_PubEncrypt
+typedef SECStatus (*PK11_PubEncryptFunction)(SECKEYPublicKey*,
+ CK_MECHANISM_TYPE,
+ SECItem*,
+ unsigned char*,
+ unsigned int*,
+ unsigned int,
+ const unsigned char*,
+ unsigned int,
+ void*);
+
+// Signature for PK11_PrivDecrypt
+typedef SECStatus (*PK11_PrivDecryptFunction)(SECKEYPrivateKey*,
+ CK_MECHANISM_TYPE,
+ SECItem*,
+ unsigned char*,
+ unsigned int*,
+ unsigned int,
+ const unsigned char*,
+ unsigned int);
+
// Singleton to abstract away dynamically loading libnss3.so
-class AesGcmSupport {
+class NssRuntimeSupport {
public:
- bool IsSupported() const { return pk11_encrypt_func_ && pk11_decrypt_func_; }
+ bool IsAesGcmSupported() const {
+ return pk11_encrypt_func_ && pk11_decrypt_func_;
+ }
+
+ bool IsRsaOaepSupported() const {
+ return pk11_pub_encrypt_func_ && pk11_priv_decrypt_func_ &&
+ internal_slot_does_oaep_;
+ }
// Returns NULL if unsupported.
PK11_EncryptDecryptFunction pk11_encrypt_func() const {
@@ -85,14 +115,27 @@ class AesGcmSupport {
return pk11_decrypt_func_;
}
+ // Returns NULL if unsupported.
+ PK11_PubEncryptFunction pk11_pub_encrypt_func() const {
+ return pk11_pub_encrypt_func_;
+ }
+
+ // Returns NULL if unsupported.
+ PK11_PrivDecryptFunction pk11_priv_decrypt_func() const {
+ return pk11_priv_decrypt_func_;
+ }
+
private:
- friend struct base::DefaultLazyInstanceTraits<AesGcmSupport>;
+ friend struct base::DefaultLazyInstanceTraits<NssRuntimeSupport>;
- AesGcmSupport() {
+ NssRuntimeSupport() : internal_slot_does_oaep_(false) {
#if !defined(USE_NSS)
// Using a bundled version of NSS that is guaranteed to have this symbol.
pk11_encrypt_func_ = PK11_Encrypt;
pk11_decrypt_func_ = PK11_Decrypt;
+ pk11_pub_encrypt_func_ = PK11_PubEncrypt;
+ pk11_priv_decrypt_func_ = PK11_PrivDecrypt;
+ internal_slot_does_oaep_ = true;
#else
// Using system NSS libraries and PCKS #11 modules, which may not have the
// necessary function (PK11_Encrypt) or mechanism support (CKM_AES_GCM).
@@ -103,16 +146,34 @@ class AesGcmSupport {
dlsym(RTLD_DEFAULT, "PK11_Encrypt"));
pk11_decrypt_func_ = reinterpret_cast<PK11_EncryptDecryptFunction>(
dlsym(RTLD_DEFAULT, "PK11_Decrypt"));
+
+ // Even though NSS's pk11wrap layer may support
+ // PK11_PubEncrypt/PK11_PubDecrypt (introduced in NSS 3.16.2), it may have
+ // loaded a softoken that does not include OAEP support.
+ pk11_pub_encrypt_func_ = reinterpret_cast<PK11_PubEncryptFunction>(
+ dlsym(RTLD_DEFAULT, "PK11_PubEncrypt"));
+ pk11_priv_decrypt_func_ = reinterpret_cast<PK11_PrivDecryptFunction>(
+ dlsym(RTLD_DEFAULT, "PK11_PrivDecrypt"));
+ if (pk11_priv_decrypt_func_ && pk11_pub_encrypt_func_) {
+ crypto::ScopedPK11Slot slot(PK11_GetInternalKeySlot());
+ internal_slot_does_oaep_ =
+ !!PK11_DoesMechanism(slot.get(), CKM_RSA_PKCS_OAEP);
+ }
#endif
}
PK11_EncryptDecryptFunction pk11_encrypt_func_;
PK11_EncryptDecryptFunction pk11_decrypt_func_;
+ PK11_PubEncryptFunction pk11_pub_encrypt_func_;
+ PK11_PrivDecryptFunction pk11_priv_decrypt_func_;
+ bool internal_slot_does_oaep_;
};
-base::LazyInstance<AesGcmSupport>::Leaky g_aes_gcm_support =
+base::LazyInstance<NssRuntimeSupport>::Leaky g_nss_runtime_support =
LAZY_INSTANCE_INITIALIZER;
+} // namespace
+
namespace content {
namespace webcrypto {
@@ -260,6 +321,56 @@ CK_MECHANISM_TYPE WebCryptoHashToHMACMechanism(
}
}
+CK_MECHANISM_TYPE WebCryptoHashToDigestMechanism(
+ const blink::WebCryptoAlgorithm& algorithm) {
+ switch (algorithm.id()) {
+ case blink::WebCryptoAlgorithmIdSha1:
+ return CKM_SHA_1;
+ case blink::WebCryptoAlgorithmIdSha256:
+ return CKM_SHA256;
+ case blink::WebCryptoAlgorithmIdSha384:
+ return CKM_SHA384;
+ case blink::WebCryptoAlgorithmIdSha512:
+ return CKM_SHA512;
+ default:
+ // Not a supported algorithm.
+ return CKM_INVALID_MECHANISM;
+ }
+}
+
+CK_MECHANISM_TYPE WebCryptoHashToMGFMechanism(
+ const blink::WebCryptoAlgorithm& algorithm) {
+ switch (algorithm.id()) {
+ case blink::WebCryptoAlgorithmIdSha1:
+ return CKG_MGF1_SHA1;
+ case blink::WebCryptoAlgorithmIdSha256:
+ return CKG_MGF1_SHA256;
+ case blink::WebCryptoAlgorithmIdSha384:
+ return CKG_MGF1_SHA384;
+ case blink::WebCryptoAlgorithmIdSha512:
+ return CKG_MGF1_SHA512;
+ default:
+ return CKM_INVALID_MECHANISM;
+ }
+}
+
+bool InitializeRsaOaepParams(const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ CK_RSA_PKCS_OAEP_PARAMS* oaep_params) {
+ oaep_params->source = CKZ_DATA_SPECIFIED;
+ oaep_params->pSourceData = const_cast<unsigned char*>(label.bytes());
+ oaep_params->ulSourceDataLen = label.byte_length();
+ oaep_params->mgf = WebCryptoHashToMGFMechanism(hash);
+ oaep_params->hashAlg = WebCryptoHashToDigestMechanism(hash);
+
+ if (oaep_params->mgf == CKM_INVALID_MECHANISM ||
+ oaep_params->hashAlg == CKM_INVALID_MECHANISM) {
+ return false;
+ }
+
+ return true;
+}
+
Status AesCbcEncryptDecrypt(EncryptOrDecrypt mode,
SymKey* key,
const CryptoData& iv,
@@ -337,7 +448,7 @@ Status AesGcmEncryptDecrypt(EncryptOrDecrypt mode,
const CryptoData& additional_data,
unsigned int tag_length_bits,
std::vector<uint8>* buffer) {
- if (!g_aes_gcm_support.Get().IsSupported())
+ if (!g_nss_runtime_support.Get().IsAesGcmSupported())
return Status::ErrorUnsupported();
unsigned int tag_length_bytes = tag_length_bits / 8;
@@ -383,8 +494,8 @@ Status AesGcmEncryptDecrypt(EncryptOrDecrypt mode,
unsigned char* buffer_data = Uint8VectorStart(buffer);
PK11_EncryptDecryptFunction func =
- (mode == ENCRYPT) ? g_aes_gcm_support.Get().pk11_encrypt_func()
- : g_aes_gcm_support.Get().pk11_decrypt_func();
+ (mode == ENCRYPT) ? g_nss_runtime_support.Get().pk11_encrypt_func()
+ : g_nss_runtime_support.Get().pk11_decrypt_func();
unsigned int output_len = 0;
SECStatus result = func(key->key(),
@@ -442,12 +553,6 @@ bool BigIntegerToLong(const uint8* data,
return true;
}
-bool IsAlgorithmRsa(const blink::WebCryptoAlgorithm& algorithm) {
- return algorithm.id() == blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 ||
- algorithm.id() == blink::WebCryptoAlgorithmIdRsaOaep ||
- algorithm.id() == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5;
-}
-
bool CreatePublicKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
SECKEYPublicKey* key,
blink::WebCryptoKeyAlgorithm* key_algorithm) {
@@ -469,14 +574,6 @@ bool CreatePublicKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
public_exponent.byte_length(),
GetInnerHashAlgorithm(algorithm).id());
return true;
- case blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams:
- case blink::WebCryptoAlgorithmParamsTypeNone:
- *key_algorithm = blink::WebCryptoKeyAlgorithm::createRsa(
- algorithm.id(),
- modulus_length_bits,
- public_exponent.bytes(),
- public_exponent.byte_length());
- return true;
default:
return false;
}
@@ -522,7 +619,7 @@ Status WebCryptoAlgorithmToNssMechFlags(
break;
}
case blink::WebCryptoAlgorithmIdAesGcm: {
- if (!g_aes_gcm_support.Get().IsSupported())
+ if (!g_nss_runtime_support.Get().IsAesGcmSupported())
return Status::ErrorUnsupported();
*mechanism = CKM_AES_GCM;
*flags = CKF_ENCRYPT | CKF_DECRYPT;
@@ -596,10 +693,6 @@ void CopySECItemToVector(const SECItem& item, std::vector<uint8>* out) {
out->assign(item.data, item.data + item.len);
}
-// The system NSS library doesn't have the new PK11_ExportDERPrivateKeyInfo
-// function yet (https://bugzilla.mozilla.org/show_bug.cgi?id=519255). So we
-// provide a fallback implementation.
-#if defined(USE_NSS)
// From PKCS#1 [http://tools.ietf.org/html/rfc3447]:
//
// RSAPrivateKey ::= SEQUENCE {
@@ -629,6 +722,10 @@ struct RSAPrivateKey {
SECItem coefficient;
};
+// The system NSS library doesn't have the new PK11_ExportDERPrivateKeyInfo
+// function yet (https://bugzilla.mozilla.org/show_bug.cgi?id=519255). So we
+// provide a fallback implementation.
+#if defined(USE_NSS)
const SEC_ASN1Template RSAPrivateKeyTemplate[] = {
{SEC_ASN1_SEQUENCE, 0, NULL, sizeof(RSAPrivateKey)},
{SEC_ASN1_INTEGER, offsetof(RSAPrivateKey, version)},
@@ -641,6 +738,7 @@ const SEC_ASN1Template RSAPrivateKeyTemplate[] = {
{SEC_ASN1_INTEGER, offsetof(RSAPrivateKey, exponent2)},
{SEC_ASN1_INTEGER, offsetof(RSAPrivateKey, coefficient)},
{0}};
+#endif // defined(USE_NSS)
// On success |value| will be filled with data which must be freed by
// SECITEM_FreeItem(value, PR_FALSE);
@@ -709,7 +807,6 @@ struct FreeRsaPrivateKey {
SECITEM_FreeItem(&out->coefficient, PR_FALSE);
}
};
-#endif // defined(USE_NSS)
} // namespace
@@ -876,7 +973,7 @@ bool ValidateNssKeyTypeAgainstInputAlgorithm(
const blink::WebCryptoAlgorithm& algorithm) {
switch (key_type) {
case rsaKey:
- return IsAlgorithmRsa(algorithm);
+ return IsAlgorithmRsa(algorithm.id());
case dsaKey:
case ecKey:
case rsaPssKey:
@@ -968,14 +1065,47 @@ Status ExportRsaPublicKey(PublicKey* key,
return Status::Success();
}
+void AssignVectorFromSecItem(const SECItem& item, std::vector<uint8>* output) {
+ output->assign(item.data, item.data + item.len);
+}
+
+Status ExportRsaPrivateKey(PrivateKey* key,
+ std::vector<uint8>* modulus,
+ std::vector<uint8>* public_exponent,
+ std::vector<uint8>* private_exponent,
+ std::vector<uint8>* prime1,
+ std::vector<uint8>* prime2,
+ std::vector<uint8>* exponent1,
+ std::vector<uint8>* exponent2,
+ std::vector<uint8>* coefficient) {
+ RSAPrivateKey key_props = {};
+ scoped_ptr<RSAPrivateKey, FreeRsaPrivateKey> free_private_key(&key_props);
+
+ if (!InitRSAPrivateKey(key->key(), &key_props))
+ return Status::OperationError();
+
+ AssignVectorFromSecItem(key_props.modulus, modulus);
+ AssignVectorFromSecItem(key_props.public_exponent, public_exponent);
+ AssignVectorFromSecItem(key_props.private_exponent, private_exponent);
+ AssignVectorFromSecItem(key_props.prime1, prime1);
+ AssignVectorFromSecItem(key_props.prime2, prime2);
+ AssignVectorFromSecItem(key_props.exponent1, exponent1);
+ AssignVectorFromSecItem(key_props.exponent2, exponent2);
+ AssignVectorFromSecItem(key_props.coefficient, coefficient);
+
+ return Status::Success();
+}
+
Status ExportKeyPkcs8(PrivateKey* key,
const blink::WebCryptoKeyAlgorithm& key_algorithm,
std::vector<uint8>* buffer) {
// TODO(eroman): Support other RSA key types as they are added to Blink.
- if (key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 &&
- key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5)
+ if (key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 &&
+ key_algorithm.id() != blink::WebCryptoAlgorithmIdRsaOaep)
return Status::ErrorUnsupported();
+// TODO(rsleevi): Implement OAEP support according to the spec.
+
#if defined(USE_NSS)
// PK11_ExportDERPrivateKeyInfo isn't available. Use our fallback code.
const SECOidTag algorithm = SEC_OID_PKCS1_RSA_ENCRYPTION;
@@ -1122,56 +1252,85 @@ Status SignHmac(SymKey* key,
}
// -----------------------------------
-// RsaEsPkcs1v1_5
+// RsaOaep
// -----------------------------------
-Status EncryptRsaEsPkcs1v1_5(PublicKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
- const unsigned int encrypted_length_bytes =
- SECKEY_PublicKeyStrength(key->key());
-
- // RSAES can operate on messages up to a length of k - 11, where k is the
- // octet length of the RSA modulus.
- if (encrypted_length_bytes < 11 ||
- encrypted_length_bytes - 11 < data.byte_length())
- return Status::ErrorDataTooLarge();
+Status EncryptRsaOaep(PublicKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
+ if (!g_nss_runtime_support.Get().IsRsaOaepSupported())
+ return Status::ErrorUnsupported();
- buffer->resize(encrypted_length_bytes);
- unsigned char* const buffer_data = Uint8VectorStart(buffer);
+ CK_RSA_PKCS_OAEP_PARAMS oaep_params = {0};
+ if (!InitializeRsaOaepParams(hash, label, &oaep_params))
+ return Status::ErrorUnsupported();
+
+ SECItem param;
+ param.type = siBuffer;
+ param.data = reinterpret_cast<unsigned char*>(&oaep_params);
+ param.len = sizeof(oaep_params);
- if (PK11_PubEncryptPKCS1(key->key(),
- buffer_data,
- const_cast<unsigned char*>(data.bytes()),
- data.byte_length(),
- NULL) != SECSuccess) {
+ buffer->resize(SECKEY_PublicKeyStrength(key->key()));
+ unsigned char* buffer_data = Uint8VectorStart(buffer);
+ unsigned int output_len;
+ if (g_nss_runtime_support.Get().pk11_pub_encrypt_func()(key->key(),
+ CKM_RSA_PKCS_OAEP,
+ &param,
+ buffer_data,
+ &output_len,
+ buffer->size(),
+ data.bytes(),
+ data.byte_length(),
+ NULL) != SECSuccess) {
return Status::OperationError();
}
+
+ DCHECK_LE(output_len, buffer->size());
+ buffer->resize(output_len);
return Status::Success();
}
-Status DecryptRsaEsPkcs1v1_5(PrivateKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
+Status DecryptRsaOaep(PrivateKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
+ if (!g_nss_runtime_support.Get().IsRsaOaepSupported())
+ return Status::ErrorUnsupported();
+
+ CK_RSA_PKCS_OAEP_PARAMS oaep_params = {0};
+ if (!InitializeRsaOaepParams(hash, label, &oaep_params))
+ return Status::ErrorUnsupported();
+
+ SECItem param;
+ param.type = siBuffer;
+ param.data = reinterpret_cast<unsigned char*>(&oaep_params);
+ param.len = sizeof(oaep_params);
+
const int modulus_length_bytes = PK11_GetPrivateModulusLen(key->key());
if (modulus_length_bytes <= 0)
return Status::ErrorUnexpected();
- const unsigned int max_output_length_bytes = modulus_length_bytes;
-
- buffer->resize(max_output_length_bytes);
- unsigned char* const buffer_data = Uint8VectorStart(buffer);
-
- unsigned int output_length_bytes = 0;
- if (PK11_PrivDecryptPKCS1(key->key(),
- buffer_data,
- &output_length_bytes,
- max_output_length_bytes,
- const_cast<unsigned char*>(data.bytes()),
- data.byte_length()) != SECSuccess) {
+
+ buffer->resize(modulus_length_bytes);
+
+ unsigned char* buffer_data = Uint8VectorStart(buffer);
+ unsigned int output_len;
+ if (g_nss_runtime_support.Get().pk11_priv_decrypt_func()(
+ key->key(),
+ CKM_RSA_PKCS_OAEP,
+ &param,
+ buffer_data,
+ &output_len,
+ buffer->size(),
+ data.bytes(),
+ data.byte_length()) != SECSuccess) {
return Status::OperationError();
}
- DCHECK_LE(output_length_bytes, max_output_length_bytes);
- buffer->resize(output_length_bytes);
+
+ DCHECK_LE(output_len, buffer->size());
+ buffer->resize(output_len);
return Status::Success();
}
@@ -1281,12 +1440,17 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode,
Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKeyUsageMask public_key_usage_mask,
+ blink::WebCryptoKeyUsageMask private_key_usage_mask,
unsigned int modulus_length_bits,
const CryptoData& public_exponent,
- const blink::WebCryptoAlgorithm& hash_or_null,
blink::WebCryptoKey* public_key,
blink::WebCryptoKey* private_key) {
+ if (algorithm.id() == blink::WebCryptoAlgorithmIdRsaOaep &&
+ !g_nss_runtime_support.Get().IsRsaOaepSupported()) {
+ return Status::ErrorUnsupported();
+ }
+
crypto::ScopedPK11Slot slot(PK11_GetInternalKeySlot());
if (!slot)
return Status::OperationError();
@@ -1307,7 +1471,6 @@ Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
// possible operations for the given key type.
CK_FLAGS operation_flags;
switch (algorithm.id()) {
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5:
case blink::WebCryptoAlgorithmIdRsaOaep:
operation_flags = CKF_ENCRYPT | CKF_DECRYPT | CKF_WRAP | CKF_UNWRAP;
break;
@@ -1361,12 +1524,12 @@ Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
blink::WebCryptoKeyTypePublic,
true,
key_algorithm,
- usage_mask);
+ public_key_usage_mask);
*private_key = blink::WebCryptoKey::create(private_key_handle.release(),
blink::WebCryptoKeyTypePrivate,
extractable,
key_algorithm,
- usage_mask);
+ private_key_usage_mask);
return Status::Success();
}
@@ -1494,8 +1657,116 @@ Status ImportRsaPublicKey(const blink::WebCryptoAlgorithm& algorithm,
return Status::Success();
}
-Status WrapSymKeyAesKw(SymKey* wrapping_key,
- SymKey* key,
+struct DestroyGenericObject {
+ void operator()(PK11GenericObject* o) const {
+ if (o)
+ PK11_DestroyGenericObject(o);
+ }
+};
+
+typedef scoped_ptr<PK11GenericObject, DestroyGenericObject>
+ ScopedPK11GenericObject;
+
+// Helper to add an attribute to a template.
+void AddAttribute(CK_ATTRIBUTE_TYPE type,
+ void* value,
+ unsigned long length,
+ std::vector<CK_ATTRIBUTE>* templ) {
+ CK_ATTRIBUTE attribute = {type, value, length};
+ templ->push_back(attribute);
+}
+
+// Helper to optionally add an attribute to a template, if the provided data is
+// non-empty.
+void AddOptionalAttribute(CK_ATTRIBUTE_TYPE type,
+ const CryptoData& data,
+ std::vector<CK_ATTRIBUTE>* templ) {
+ if (!data.byte_length())
+ return;
+ CK_ATTRIBUTE attribute = {type, const_cast<unsigned char*>(data.bytes()),
+ data.byte_length()};
+ templ->push_back(attribute);
+}
+
+Status ImportRsaPrivateKey(const blink::WebCryptoAlgorithm& algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usage_mask,
+ const CryptoData& modulus,
+ const CryptoData& public_exponent,
+ const CryptoData& private_exponent,
+ const CryptoData& prime1,
+ const CryptoData& prime2,
+ const CryptoData& exponent1,
+ const CryptoData& exponent2,
+ const CryptoData& coefficient,
+ blink::WebCryptoKey* key) {
+ CK_OBJECT_CLASS obj_class = CKO_PRIVATE_KEY;
+ CK_KEY_TYPE key_type = CKK_RSA;
+ CK_BBOOL ck_false = CK_FALSE;
+
+ std::vector<CK_ATTRIBUTE> key_template;
+
+ AddAttribute(CKA_CLASS, &obj_class, sizeof(obj_class), &key_template);
+ AddAttribute(CKA_KEY_TYPE, &key_type, sizeof(key_type), &key_template);
+ AddAttribute(CKA_TOKEN, &ck_false, sizeof(ck_false), &key_template);
+ AddAttribute(CKA_SENSITIVE, &ck_false, sizeof(ck_false), &key_template);
+ AddAttribute(CKA_PRIVATE, &ck_false, sizeof(ck_false), &key_template);
+
+ // Required properties.
+ AddOptionalAttribute(CKA_MODULUS, modulus, &key_template);
+ AddOptionalAttribute(CKA_PUBLIC_EXPONENT, public_exponent, &key_template);
+ AddOptionalAttribute(CKA_PRIVATE_EXPONENT, private_exponent, &key_template);
+
+ // Optional properties (all of these will have been specified or none).
+ AddOptionalAttribute(CKA_PRIME_1, prime1, &key_template);
+ AddOptionalAttribute(CKA_PRIME_2, prime2, &key_template);
+ AddOptionalAttribute(CKA_EXPONENT_1, exponent1, &key_template);
+ AddOptionalAttribute(CKA_EXPONENT_2, exponent2, &key_template);
+ AddOptionalAttribute(CKA_COEFFICIENT, coefficient, &key_template);
+
+ crypto::ScopedPK11Slot slot(PK11_GetInternalSlot());
+
+ ScopedPK11GenericObject key_object(PK11_CreateGenericObject(
+ slot.get(), &key_template[0], key_template.size(), PR_FALSE));
+
+ if (!key_object)
+ return Status::OperationError();
+
+ // The ID isn't guaranteed to be set by PKCS#11. However it is by softtoken so
+ // this should work.
+ SECItem object_id = {};
+ if (PK11_ReadRawAttribute(
+ PK11_TypeGeneric, key_object.get(), CKA_ID, &object_id) != SECSuccess)
+ return Status::OperationError();
+
+ crypto::ScopedSECKEYPrivateKey private_key(
+ PK11_FindKeyByKeyID(slot.get(), &object_id, NULL));
+
+ SECITEM_FreeItem(&object_id, PR_FALSE);
+
+ if (!private_key)
+ return Status::OperationError();
+
+ blink::WebCryptoKeyAlgorithm key_algorithm;
+ if (!CreatePrivateKeyAlgorithm(algorithm, private_key.get(), &key_algorithm))
+ return Status::ErrorUnexpected();
+
+ scoped_ptr<PrivateKey> key_handle;
+ Status status =
+ PrivateKey::Create(private_key.Pass(), key_algorithm, &key_handle);
+ if (status.IsError())
+ return status;
+
+ *key = blink::WebCryptoKey::create(key_handle.release(),
+ blink::WebCryptoKeyTypePrivate,
+ extractable,
+ key_algorithm,
+ usage_mask);
+ return Status::Success();
+}
+
+Status WrapSymKeyAesKw(SymKey* key,
+ SymKey* wrapping_key,
std::vector<uint8>* buffer) {
// The data size must be at least 16 bytes and a multiple of 8 bytes.
// RFC 3394 does not specify a maximum allowed data length, but since only
@@ -1594,89 +1865,6 @@ Status DecryptAesKw(SymKey* wrapping_key,
return Status::Success();
}
-Status WrapSymKeyRsaEs(PublicKey* wrapping_key,
- SymKey* key,
- std::vector<uint8>* buffer) {
- // Check the raw length of the key to be wrapped against the max size allowed
- // by the RSA wrapping key. With PKCS#1 v1.5 padding used in this function,
- // the maximum data length that can be encrypted is the wrapping_key's modulus
- // byte length minus eleven bytes.
- const unsigned int input_length_bytes = PK11_GetKeyLength(key->key());
- const unsigned int modulus_length_bytes =
- SECKEY_PublicKeyStrength(wrapping_key->key());
- if (modulus_length_bytes < 11 ||
- modulus_length_bytes - 11 < input_length_bytes)
- return Status::ErrorDataTooLarge();
-
- buffer->resize(modulus_length_bytes);
- SECItem wrapped_key_item = MakeSECItemForBuffer(CryptoData(*buffer));
-
- if (SECSuccess !=
- PK11_PubWrapSymKey(
- CKM_RSA_PKCS, wrapping_key->key(), key->key(), &wrapped_key_item)) {
- return Status::OperationError();
- }
- if (wrapped_key_item.len != modulus_length_bytes)
- return Status::ErrorUnexpected();
-
- return Status::Success();
-}
-
-Status UnwrapSymKeyRsaEs(const CryptoData& wrapped_key_data,
- PrivateKey* wrapping_key,
- const blink::WebCryptoAlgorithm& algorithm,
- bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
- blink::WebCryptoKey* key) {
- // Verify wrapped_key_data size does not exceed the modulus of the RSA key.
- const int modulus_length_bytes =
- PK11_GetPrivateModulusLen(wrapping_key->key());
- if (modulus_length_bytes <= 0)
- return Status::ErrorUnexpected();
- if (wrapped_key_data.byte_length() >
- static_cast<unsigned int>(modulus_length_bytes))
- return Status::ErrorDataTooLarge();
-
- // Determine the proper NSS key properties from the input algorithm.
- CK_MECHANISM_TYPE mechanism;
- CK_FLAGS flags;
- Status status =
- WebCryptoAlgorithmToNssMechFlags(algorithm, &mechanism, &flags);
- if (status.IsError())
- return status;
-
- SECItem wrapped_key_item = MakeSECItemForBuffer(wrapped_key_data);
-
- crypto::ScopedPK11SymKey unwrapped_key(
- PK11_PubUnwrapSymKeyWithFlagsPerm(wrapping_key->key(),
- &wrapped_key_item,
- mechanism,
- CKA_DECRYPT,
- 0,
- flags,
- false));
- if (!unwrapped_key)
- return Status::OperationError();
-
- const unsigned int key_length = PK11_GetKeyLength(unwrapped_key.get());
-
- blink::WebCryptoKeyAlgorithm key_algorithm;
- if (!CreateSecretKeyAlgorithm(algorithm, key_length, &key_algorithm))
- return Status::ErrorUnexpected();
-
- scoped_ptr<SymKey> key_handle;
- status = SymKey::Create(unwrapped_key.Pass(), &key_handle);
- if (status.IsError())
- return status;
-
- *key = blink::WebCryptoKey::create(key_handle.release(),
- blink::WebCryptoKeyTypeSecret,
- extractable,
- key_algorithm,
- usage_mask);
- return Status::Success();
-}
-
} // namespace platform
} // namespace webcrypto
diff --git a/content/child/webcrypto/platform_crypto_openssl.cc b/content/child/webcrypto/platform_crypto_openssl.cc
index 1f2bebef7e..5c704a8090 100644
--- a/content/child/webcrypto/platform_crypto_openssl.cc
+++ b/content/child/webcrypto/platform_crypto_openssl.cc
@@ -300,10 +300,10 @@ Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm,
Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKeyUsageMask public_key_usage_mask,
+ blink::WebCryptoKeyUsageMask private_key_usage_mask,
unsigned int modulus_length_bits,
const CryptoData& public_exponent,
- const blink::WebCryptoAlgorithm& hash,
blink::WebCryptoKey* public_key,
blink::WebCryptoKey* private_key) {
// TODO(padolph): Placeholder for OpenSSL implementation.
@@ -381,6 +381,22 @@ Status ImportRsaPublicKey(const blink::WebCryptoAlgorithm& algorithm,
return Status::ErrorUnsupported();
}
+Status ImportRsaPrivateKey(const blink::WebCryptoAlgorithm& algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usage_mask,
+ const CryptoData& modulus,
+ const CryptoData& public_exponent,
+ const CryptoData& private_exponent,
+ const CryptoData& prime1,
+ const CryptoData& prime2,
+ const CryptoData& exponent1,
+ const CryptoData& exponent2,
+ const CryptoData& coefficient,
+ blink::WebCryptoKey* key) {
+ // TODO(eroman): http://crbug.com/267888
+ return Status::ErrorUnsupported();
+}
+
Status EncryptDecryptAesGcm(EncryptOrDecrypt mode,
SymKey* key,
const CryptoData& data,
@@ -392,17 +408,20 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode,
return Status::ErrorUnsupported();
}
-// Guaranteed that key is valid.
-Status EncryptRsaEsPkcs1v1_5(PublicKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
+Status EncryptRsaOaep(PublicKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
// TODO(eroman): http://crbug.com/267888
return Status::ErrorUnsupported();
}
-Status DecryptRsaEsPkcs1v1_5(PrivateKey* key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
+Status DecryptRsaOaep(PrivateKey* key,
+ const blink::WebCryptoAlgorithm& hash,
+ const CryptoData& label,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
// TODO(eroman): http://crbug.com/267888
return Status::ErrorUnsupported();
}
@@ -462,8 +481,21 @@ Status ExportRsaPublicKey(PublicKey* key,
return Status::ErrorUnsupported();
}
-Status WrapSymKeyAesKw(SymKey* wrapping_key,
- SymKey* key,
+Status ExportRsaPrivateKey(PrivateKey* key,
+ std::vector<uint8>* modulus,
+ std::vector<uint8>* public_exponent,
+ std::vector<uint8>* private_exponent,
+ std::vector<uint8>* prime1,
+ std::vector<uint8>* prime2,
+ std::vector<uint8>* exponent1,
+ std::vector<uint8>* exponent2,
+ std::vector<uint8>* coefficient) {
+ // TODO(eroman): http://crbug.com/267888
+ return Status::ErrorUnsupported();
+}
+
+Status WrapSymKeyAesKw(SymKey* key,
+ SymKey* wrapping_key,
std::vector<uint8>* buffer) {
// TODO(eroman): http://crbug.com/267888
return Status::ErrorUnsupported();
@@ -486,23 +518,6 @@ Status DecryptAesKw(SymKey* key,
return Status::ErrorUnsupported();
}
-Status WrapSymKeyRsaEs(PublicKey* wrapping_key,
- SymKey* key,
- std::vector<uint8>* buffer) {
- // TODO(eroman): http://crbug.com/267888
- return Status::ErrorUnsupported();
-}
-
-Status UnwrapSymKeyRsaEs(const CryptoData& wrapped_key_data,
- PrivateKey* wrapping_key,
- const blink::WebCryptoAlgorithm& algorithm,
- bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
- blink::WebCryptoKey* key) {
- // TODO(eroman): http://crbug.com/267888
- return Status::ErrorUnsupported();
-}
-
bool ThreadSafeDeserializeKeyForClone(
const blink::WebCryptoKeyAlgorithm& algorithm,
blink::WebCryptoKeyType type,
diff --git a/content/child/webcrypto/shared_crypto.cc b/content/child/webcrypto/shared_crypto.cc
index 81c66cf983..b4d5931327 100644
--- a/content/child/webcrypto/shared_crypto.cc
+++ b/content/child/webcrypto/shared_crypto.cc
@@ -47,30 +47,6 @@ bool IsValidAesKeyLengthBytes(unsigned int length_bytes) {
return length_bytes == 16 || length_bytes == 24 || length_bytes == 32;
}
-Status ToPlatformSymKey(const blink::WebCryptoKey& key,
- platform::SymKey** out) {
- *out = static_cast<platform::Key*>(key.handle())->AsSymKey();
- if (!*out)
- return Status::ErrorUnexpectedKeyType();
- return Status::Success();
-}
-
-Status ToPlatformPublicKey(const blink::WebCryptoKey& key,
- platform::PublicKey** out) {
- *out = static_cast<platform::Key*>(key.handle())->AsPublicKey();
- if (!*out)
- return Status::ErrorUnexpectedKeyType();
- return Status::Success();
-}
-
-Status ToPlatformPrivateKey(const blink::WebCryptoKey& key,
- platform::PrivateKey** out) {
- *out = static_cast<platform::Key*>(key.handle())->AsPrivateKey();
- if (!*out)
- return Status::ErrorUnexpectedKeyType();
- return Status::Success();
-}
-
const size_t kAesBlockSizeBytes = 16;
Status EncryptDecryptAesCbc(EncryptOrDecrypt mode,
@@ -127,36 +103,44 @@ Status EncryptDecryptAesGcm(EncryptOrDecrypt mode,
buffer);
}
-Status EncryptRsaEsPkcs1v1_5(const blink::WebCryptoAlgorithm& algorithm,
- const blink::WebCryptoKey& key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
+Status EncryptRsaOaep(const blink::WebCryptoAlgorithm& algorithm,
+ const blink::WebCryptoKey& key,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
platform::PublicKey* public_key;
Status status = ToPlatformPublicKey(key, &public_key);
if (status.IsError())
return status;
- // RSAES encryption does not support empty input
- if (!data.byte_length())
- return Status::ErrorDataTooSmall();
+ const blink::WebCryptoRsaOaepParams* params = algorithm.rsaOaepParams();
+ if (!params)
+ return Status::ErrorUnexpected();
- return platform::EncryptRsaEsPkcs1v1_5(public_key, data, buffer);
+ return platform::EncryptRsaOaep(public_key,
+ key.algorithm().rsaHashedParams()->hash(),
+ CryptoData(params->optionalLabel()),
+ data,
+ buffer);
}
-Status DecryptRsaEsPkcs1v1_5(const blink::WebCryptoAlgorithm& algorithm,
- const blink::WebCryptoKey& key,
- const CryptoData& data,
- std::vector<uint8>* buffer) {
+Status DecryptRsaOaep(const blink::WebCryptoAlgorithm& algorithm,
+ const blink::WebCryptoKey& key,
+ const CryptoData& data,
+ std::vector<uint8>* buffer) {
platform::PrivateKey* private_key;
Status status = ToPlatformPrivateKey(key, &private_key);
if (status.IsError())
return status;
- // RSAES decryption does not support empty input
- if (!data.byte_length())
- return Status::ErrorDataTooSmall();
+ const blink::WebCryptoRsaOaepParams* params = algorithm.rsaOaepParams();
+ if (!params)
+ return Status::ErrorUnexpected();
- return platform::DecryptRsaEsPkcs1v1_5(private_key, data, buffer);
+ return platform::DecryptRsaOaep(private_key,
+ key.algorithm().rsaHashedParams()->hash(),
+ CryptoData(params->optionalLabel()),
+ data,
+ buffer);
}
Status SignHmac(const blink::WebCryptoAlgorithm& algorithm,
@@ -265,7 +249,6 @@ blink::WebCryptoAlgorithm KeyAlgorithmToImportAlgorithm(
const blink::WebCryptoKeyAlgorithm& algorithm) {
switch (algorithm.paramsType()) {
case blink::WebCryptoKeyAlgorithmParamsTypeAes:
- case blink::WebCryptoKeyAlgorithmParamsTypeRsa:
return CreateAlgorithm(algorithm.id());
case blink::WebCryptoKeyAlgorithmParamsTypeHmac:
return CreateHmacImportAlgorithm(algorithm.hmacParams()->hash().id());
@@ -274,6 +257,8 @@ blink::WebCryptoAlgorithm KeyAlgorithmToImportAlgorithm(
algorithm.id(), algorithm.rsaHashedParams()->hash().id());
case blink::WebCryptoKeyAlgorithmParamsTypeNone:
break;
+ default:
+ break;
}
return blink::WebCryptoAlgorithm::createNull();
}
@@ -300,22 +285,24 @@ bool ValidateDeserializedKey(const blink::WebCryptoKey& key,
key.algorithm().aesParams()->lengthBits())
return false;
break;
- case blink::WebCryptoKeyAlgorithmParamsTypeRsa:
case blink::WebCryptoKeyAlgorithmParamsTypeRsaHashed:
- if (algorithm.rsaParams()->modulusLengthBits() !=
- key.algorithm().rsaParams()->modulusLengthBits())
+ if (algorithm.rsaHashedParams()->modulusLengthBits() !=
+ key.algorithm().rsaHashedParams()->modulusLengthBits())
return false;
- if (algorithm.rsaParams()->publicExponent().size() !=
- key.algorithm().rsaParams()->publicExponent().size())
+ if (algorithm.rsaHashedParams()->publicExponent().size() !=
+ key.algorithm().rsaHashedParams()->publicExponent().size())
return false;
- if (memcmp(algorithm.rsaParams()->publicExponent().data(),
- key.algorithm().rsaParams()->publicExponent().data(),
- key.algorithm().rsaParams()->publicExponent().size()) != 0)
+ if (memcmp(algorithm.rsaHashedParams()->publicExponent().data(),
+ key.algorithm().rsaHashedParams()->publicExponent().data(),
+ key.algorithm().rsaHashedParams()->publicExponent().size()) !=
+ 0)
return false;
break;
case blink::WebCryptoKeyAlgorithmParamsTypeNone:
case blink::WebCryptoKeyAlgorithmParamsTypeHmac:
break;
+ default:
+ return false;
}
return true;
@@ -355,28 +342,13 @@ Status UnwrapKeyRaw(const CryptoData& wrapped_key_data,
usage_mask,
key);
}
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5: {
- platform::PrivateKey* platform_wrapping_key;
- Status status =
- ToPlatformPrivateKey(wrapping_key, &platform_wrapping_key);
- if (status.IsError())
- return status;
- if (!wrapped_key_data.byte_length())
- return Status::ErrorDataTooSmall();
- return platform::UnwrapSymKeyRsaEs(wrapped_key_data,
- platform_wrapping_key,
- algorithm,
- extractable,
- usage_mask,
- key);
- }
default:
return Status::ErrorUnsupported();
}
}
-Status WrapKeyRaw(const blink::WebCryptoKey& wrapping_key,
- const blink::WebCryptoKey& key_to_wrap,
+Status WrapKeyRaw(const blink::WebCryptoKey& key_to_wrap,
+ const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoAlgorithm& wrapping_algorithm,
std::vector<uint8>* buffer) {
// A raw key is always a symmetric key.
@@ -393,15 +365,7 @@ Status WrapKeyRaw(const blink::WebCryptoKey& wrapping_key,
if (status.IsError())
return status;
return platform::WrapSymKeyAesKw(
- platform_wrapping_key, platform_key, buffer);
- }
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5: {
- platform::PublicKey* platform_wrapping_key;
- status = ToPlatformPublicKey(wrapping_key, &platform_wrapping_key);
- if (status.IsError())
- return status;
- return platform::WrapSymKeyRsaEs(
- platform_wrapping_key, platform_key, buffer);
+ platform_key, platform_wrapping_key, buffer);
}
default:
return Status::ErrorUnsupported();
@@ -433,8 +397,8 @@ Status DecryptDontCheckKeyUsage(const blink::WebCryptoAlgorithm& algorithm,
return EncryptDecryptAesCbc(DECRYPT, algorithm, key, data, buffer);
case blink::WebCryptoAlgorithmIdAesGcm:
return EncryptDecryptAesGcm(DECRYPT, algorithm, key, data, buffer);
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5:
- return DecryptRsaEsPkcs1v1_5(algorithm, key, data, buffer);
+ case blink::WebCryptoAlgorithmIdRsaOaep:
+ return DecryptRsaOaep(algorithm, key, data, buffer);
case blink::WebCryptoAlgorithmIdAesKw:
return DecryptAesKw(algorithm, key, data, buffer);
default:
@@ -453,8 +417,8 @@ Status EncryptDontCheckUsage(const blink::WebCryptoAlgorithm& algorithm,
return EncryptDecryptAesCbc(ENCRYPT, algorithm, key, data, buffer);
case blink::WebCryptoAlgorithmIdAesGcm:
return EncryptDecryptAesGcm(ENCRYPT, algorithm, key, data, buffer);
- case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5:
- return EncryptRsaEsPkcs1v1_5(algorithm, key, data, buffer);
+ case blink::WebCryptoAlgorithmIdRsaOaep:
+ return EncryptRsaOaep(algorithm, key, data, buffer);
default:
return Status::ErrorUnsupported();
}
@@ -474,18 +438,19 @@ Status UnwrapKeyDecryptAndImport(
wrapping_algorithm, wrapping_key, wrapped_key_data, &buffer);
if (status.IsError())
return status;
- status = ImportKey(
+ // NOTE that returning the details of ImportKey() failures may leak
+ // information about the plaintext of the encrypted key (for instance the JWK
+ // key_ops). As long as the ImportKey error messages don't describe actual
+ // key bytes however this should be OK. For more discussion see
+ // http://crubg.com/372040
+ return ImportKey(
format, CryptoData(buffer), algorithm, extractable, usage_mask, key);
- // NOTE! Returning the details of any ImportKey() failure here would leak
- // information about the plaintext internals of the encrypted key. Instead,
- // collapse any error into the generic Status::OperationError().
- return status.IsError() ? Status::OperationError() : Status::Success();
}
Status WrapKeyExportAndEncrypt(
blink::WebCryptoKeyFormat format,
- const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoKey& key_to_wrap,
+ const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoAlgorithm& wrapping_algorithm,
std::vector<uint8>* buffer) {
std::vector<uint8> exported_data;
@@ -511,6 +476,131 @@ unsigned int ShaBlockSizeBytes(blink::WebCryptoAlgorithmId hash_id) {
}
}
+// Returns the mask of all key usages that are possible for |algorithm| and
+// |key_type|. If the combination of |algorithm| and |key_type| doesn't make
+// sense, then returns 0 (no usages).
+blink::WebCryptoKeyUsageMask GetValidKeyUsagesForKeyType(
+ blink::WebCryptoAlgorithmId algorithm,
+ blink::WebCryptoKeyType key_type) {
+ if (IsAlgorithmAsymmetric(algorithm) ==
+ (key_type == blink::WebCryptoKeyTypeSecret))
+ return 0;
+
+ switch (algorithm) {
+ case blink::WebCryptoAlgorithmIdAesCbc:
+ case blink::WebCryptoAlgorithmIdAesGcm:
+ case blink::WebCryptoAlgorithmIdAesCtr:
+ return blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt |
+ blink::WebCryptoKeyUsageWrapKey |
+ blink::WebCryptoKeyUsageUnwrapKey;
+ case blink::WebCryptoAlgorithmIdAesKw:
+ return blink::WebCryptoKeyUsageWrapKey |
+ blink::WebCryptoKeyUsageUnwrapKey;
+ case blink::WebCryptoAlgorithmIdHmac:
+ return blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify;
+ case blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5:
+ switch (key_type) {
+ case blink::WebCryptoKeyTypePublic:
+ return blink::WebCryptoKeyUsageVerify;
+ case blink::WebCryptoKeyTypePrivate:
+ return blink::WebCryptoKeyUsageSign;
+ default:
+ return 0;
+ }
+ case blink::WebCryptoAlgorithmIdRsaOaep:
+ switch (key_type) {
+ case blink::WebCryptoKeyTypePublic:
+ return blink::WebCryptoKeyUsageEncrypt |
+ blink::WebCryptoKeyUsageWrapKey;
+ case blink::WebCryptoKeyTypePrivate:
+ return blink::WebCryptoKeyUsageDecrypt |
+ blink::WebCryptoKeyUsageUnwrapKey;
+ default:
+ return 0;
+ }
+ default:
+ return 0;
+ }
+}
+
+// Returns Status::Success() if |usages| is a valid set of key usages for
+// |algorithm| and |key_type|. Otherwise returns an error.
+// In the case of JWK format the check is incomplete for asymmetric algorithms.
+Status BestEffortCheckKeyUsagesForImport(blink::WebCryptoAlgorithmId algorithm,
+ blink::WebCryptoKeyFormat format,
+ blink::WebCryptoKeyUsageMask usages) {
+ if (!IsAlgorithmAsymmetric(algorithm))
+ return CheckKeyUsages(algorithm, blink::WebCryptoKeyTypeSecret, usages);
+
+ // Try to infer the key type given the import format.
+ blink::WebCryptoKeyType key_type;
+ bool key_type_known = false;
+
+ switch (format) {
+ case blink::WebCryptoKeyFormatRaw:
+ // TODO(eroman): The spec defines Diffie-Hellman raw import for public
+ // keys, so this will need to be updated in the future when DH is
+ // implemented.
+ return Status::ErrorUnexpected();
+ case blink::WebCryptoKeyFormatSpki:
+ key_type = blink::WebCryptoKeyTypePublic;
+ key_type_known = true;
+ break;
+ case blink::WebCryptoKeyFormatPkcs8:
+ key_type = blink::WebCryptoKeyTypePrivate;
+ key_type_known = true;
+ break;
+ case blink::WebCryptoKeyFormatJwk:
+ key_type_known = false;
+ break;
+ default:
+ return Status::ErrorUnexpected();
+ }
+
+ if (key_type_known)
+ return CheckKeyUsages(algorithm, key_type, usages);
+
+ // If the key type is not known, then the algorithm is asymmetric. Whether the
+ // key data describes a public or private key isn't known yet. But it must at
+ // least be ONE of those two.
+ DCHECK(IsAlgorithmAsymmetric(algorithm));
+
+ if (CheckKeyUsages(algorithm, blink::WebCryptoKeyTypePublic, usages)
+ .IsError() &&
+ CheckKeyUsages(algorithm, blink::WebCryptoKeyTypePrivate, usages)
+ .IsError()) {
+ return Status::ErrorCreateKeyBadUsages();
+ }
+
+ return Status::Success();
+}
+
+// Returns an error if |combined_usage_mask| is invalid for generating a key
+// pair for |algorithm|. Otherwise returns Status::Success(), and fills
+// |public_key_usages| with the usages for the public key, and
+// |private_key_usages| with those for the private key.
+Status CheckKeyUsagesForGenerateKeyPair(
+ blink::WebCryptoAlgorithmId algorithm,
+ blink::WebCryptoKeyUsageMask combined_usage_mask,
+ blink::WebCryptoKeyUsageMask* public_key_usages,
+ blink::WebCryptoKeyUsageMask* private_key_usages) {
+ DCHECK(IsAlgorithmAsymmetric(algorithm));
+
+ blink::WebCryptoKeyUsageMask all_public_key_usages =
+ GetValidKeyUsagesForKeyType(algorithm, blink::WebCryptoKeyTypePublic);
+ blink::WebCryptoKeyUsageMask all_private_key_usages =
+ GetValidKeyUsagesForKeyType(algorithm, blink::WebCryptoKeyTypePrivate);
+
+ if (!ContainsKeyUsages(all_public_key_usages | all_private_key_usages,
+ combined_usage_mask))
+ return Status::ErrorCreateKeyBadUsages();
+
+ *public_key_usages = combined_usage_mask & all_public_key_usages;
+ *private_key_usages = combined_usage_mask & all_private_key_usages;
+
+ return Status::Success();
+}
+
} // namespace
void Init() { platform::Init(); }
@@ -556,6 +646,11 @@ Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
blink::WebCryptoKeyUsageMask usage_mask,
blink::WebCryptoKey* key) {
+ Status status =
+ CheckKeyUsages(algorithm.id(), blink::WebCryptoKeyTypeSecret, usage_mask);
+ if (status.IsError())
+ return status;
+
unsigned int keylen_bytes = 0;
// Get the secret key length in bytes from generation parameters.
@@ -600,22 +695,24 @@ Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm,
Status GenerateKeyPair(const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKeyUsageMask combined_usage_mask,
blink::WebCryptoKey* public_key,
blink::WebCryptoKey* private_key) {
+ blink::WebCryptoKeyUsageMask public_key_usage_mask = 0;
+ blink::WebCryptoKeyUsageMask private_key_usage_mask = 0;
+
+ Status status = CheckKeyUsagesForGenerateKeyPair(algorithm.id(),
+ combined_usage_mask,
+ &public_key_usage_mask,
+ &private_key_usage_mask);
+ if (status.IsError())
+ return status;
+
// TODO(padolph): Handle other asymmetric algorithm key generation.
switch (algorithm.paramsType()) {
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams:
- case blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams: {
- const blink::WebCryptoRsaKeyGenParams* params = NULL;
- blink::WebCryptoAlgorithm hash_or_null =
- blink::WebCryptoAlgorithm::createNull();
- if (algorithm.rsaHashedKeyGenParams()) {
- params = algorithm.rsaHashedKeyGenParams();
- hash_or_null = algorithm.rsaHashedKeyGenParams()->hash();
- } else {
- params = algorithm.rsaKeyGenParams();
- }
+ case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams: {
+ const blink::WebCryptoRsaHashedKeyGenParams* params =
+ algorithm.rsaHashedKeyGenParams();
if (!params->modulusLengthBits())
return Status::ErrorGenerateRsaZeroModulus();
@@ -626,10 +723,10 @@ Status GenerateKeyPair(const blink::WebCryptoAlgorithm& algorithm,
return platform::GenerateRsaKeyPair(algorithm,
extractable,
- usage_mask,
+ public_key_usage_mask,
+ private_key_usage_mask,
params->modulusLengthBits(),
publicExponent,
- hash_or_null,
public_key,
private_key);
}
@@ -645,6 +742,14 @@ Status ImportKey(blink::WebCryptoKeyFormat format,
bool extractable,
blink::WebCryptoKeyUsageMask usage_mask,
blink::WebCryptoKey* key) {
+ // This is "best effort" because it is incomplete for JWK (for which the key
+ // type is not yet known). ImportKeyJwk() does extra checks on key usage once
+ // the key type has been determined.
+ Status status =
+ BestEffortCheckKeyUsagesForImport(algorithm.id(), format, usage_mask);
+ if (status.IsError())
+ return status;
+
switch (format) {
case blink::WebCryptoKeyFormatRaw:
return ImportKeyRaw(key_data, algorithm, extractable, usage_mask, key);
@@ -751,8 +856,8 @@ Status VerifySignature(const blink::WebCryptoAlgorithm& algorithm,
}
Status WrapKey(blink::WebCryptoKeyFormat format,
- const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoKey& key_to_wrap,
+ const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoAlgorithm& wrapping_algorithm,
std::vector<uint8>* buffer) {
if (!KeyUsageAllows(wrapping_key, blink::WebCryptoKeyUsageWrapKey))
@@ -760,19 +865,15 @@ Status WrapKey(blink::WebCryptoKeyFormat format,
if (wrapping_algorithm.id() != wrapping_key.algorithm().id())
return Status::ErrorUnexpected();
- switch (format) {
- case blink::WebCryptoKeyFormatRaw:
- return WrapKeyRaw(wrapping_key, key_to_wrap, wrapping_algorithm, buffer);
- case blink::WebCryptoKeyFormatJwk:
- return WrapKeyExportAndEncrypt(
- format, wrapping_key, key_to_wrap, wrapping_algorithm, buffer);
- case blink::WebCryptoKeyFormatSpki:
- case blink::WebCryptoKeyFormatPkcs8:
- return Status::ErrorUnsupported(); // TODO(padolph)
- default:
- NOTREACHED();
- return Status::ErrorUnsupported();
+ if (format == blink::WebCryptoKeyFormatRaw &&
+ wrapping_algorithm.id() == blink::WebCryptoAlgorithmIdAesKw) {
+ // AES-KW is a special case, due to NSS's implementation only
+ // supporting C_Wrap/C_Unwrap with AES-KW
+ return WrapKeyRaw(key_to_wrap, wrapping_key, wrapping_algorithm, buffer);
}
+
+ return WrapKeyExportAndEncrypt(
+ format, key_to_wrap, wrapping_key, wrapping_algorithm, buffer);
}
Status UnwrapKey(blink::WebCryptoKeyFormat format,
@@ -788,31 +889,35 @@ Status UnwrapKey(blink::WebCryptoKeyFormat format,
if (wrapping_algorithm.id() != wrapping_key.algorithm().id())
return Status::ErrorUnexpected();
- switch (format) {
- case blink::WebCryptoKeyFormatRaw:
- return UnwrapKeyRaw(wrapped_key_data,
- wrapping_key,
- wrapping_algorithm,
- algorithm,
- extractable,
- usage_mask,
- key);
- case blink::WebCryptoKeyFormatJwk:
- return UnwrapKeyDecryptAndImport(format,
- wrapped_key_data,
- wrapping_key,
- wrapping_algorithm,
- algorithm,
- extractable,
- usage_mask,
- key);
- case blink::WebCryptoKeyFormatSpki:
- case blink::WebCryptoKeyFormatPkcs8:
- return Status::ErrorUnsupported(); // TODO(padolph)
- default:
- NOTREACHED();
- return Status::ErrorUnsupported();
+ // Fail-fast if the key usages don't make sense. This avoids decrypting the
+ // key only to then have import fail. It is "best effort" because when
+ // unwrapping JWK for asymmetric algorithms the key type isn't known yet.
+ Status status =
+ BestEffortCheckKeyUsagesForImport(algorithm.id(), format, usage_mask);
+ if (status.IsError())
+ return status;
+
+ if (format == blink::WebCryptoKeyFormatRaw &&
+ wrapping_algorithm.id() == blink::WebCryptoAlgorithmIdAesKw) {
+ // AES-KW is a special case, due to NSS's implementation only
+ // supporting C_Wrap/C_Unwrap with AES-KW
+ return UnwrapKeyRaw(wrapped_key_data,
+ wrapping_key,
+ wrapping_algorithm,
+ algorithm,
+ extractable,
+ usage_mask,
+ key);
}
+
+ return UnwrapKeyDecryptAndImport(format,
+ wrapped_key_data,
+ wrapping_key,
+ wrapping_algorithm,
+ algorithm,
+ extractable,
+ usage_mask,
+ key);
}
// Note that this function is called from the target Blink thread.
@@ -848,6 +953,42 @@ bool DeserializeKeyForClone(const blink::WebCryptoKeyAlgorithm& algorithm,
return ValidateDeserializedKey(*key, algorithm, type);
}
+Status ToPlatformSymKey(const blink::WebCryptoKey& key,
+ platform::SymKey** out) {
+ *out = static_cast<platform::Key*>(key.handle())->AsSymKey();
+ if (!*out)
+ return Status::ErrorUnexpectedKeyType();
+ return Status::Success();
+}
+
+Status ToPlatformPublicKey(const blink::WebCryptoKey& key,
+ platform::PublicKey** out) {
+ *out = static_cast<platform::Key*>(key.handle())->AsPublicKey();
+ if (!*out)
+ return Status::ErrorUnexpectedKeyType();
+ return Status::Success();
+}
+
+Status ToPlatformPrivateKey(const blink::WebCryptoKey& key,
+ platform::PrivateKey** out) {
+ *out = static_cast<platform::Key*>(key.handle())->AsPrivateKey();
+ if (!*out)
+ return Status::ErrorUnexpectedKeyType();
+ return Status::Success();
+}
+
+// Returns Status::Success() if |usages| is a valid set of key usages for
+// |algorithm| and |key_type|. Otherwise returns an error.
+Status CheckKeyUsages(blink::WebCryptoAlgorithmId algorithm,
+ blink::WebCryptoKeyType key_type,
+ blink::WebCryptoKeyUsageMask usages) {
+ if (!ContainsKeyUsages(GetValidKeyUsagesForKeyType(algorithm, key_type),
+ usages))
+ return Status::ErrorCreateKeyBadUsages();
+
+ return Status::Success();
+}
+
} // namespace webcrypto
} // namespace content
diff --git a/content/child/webcrypto/shared_crypto.h b/content/child/webcrypto/shared_crypto.h
index d2eaa912f2..d9e5a959db 100644
--- a/content/child/webcrypto/shared_crypto.h
+++ b/content/child/webcrypto/shared_crypto.h
@@ -22,6 +22,7 @@ class CryptoData;
class Status;
// Do one-time initialization. It is safe to call this multiple times.
+// May be called concurrently from multiple threads.
CONTENT_EXPORT void Init();
// The functions exported by shared_crypto.h provide a common entry point for
@@ -131,8 +132,8 @@ CONTENT_EXPORT Status
CONTENT_EXPORT Status
WrapKey(blink::WebCryptoKeyFormat format,
- const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoKey& key_to_wrap,
+ const blink::WebCryptoKey& wrapping_key,
const blink::WebCryptoAlgorithm& wrapping_algorithm,
std::vector<uint8>* buffer);
@@ -159,6 +160,26 @@ CONTENT_EXPORT bool DeserializeKeyForClone(
const CryptoData& key_data,
blink::WebCryptoKey* key);
+namespace platform {
+class SymKey;
+class PublicKey;
+class PrivateKey;
+}
+
+Status ToPlatformSymKey(const blink::WebCryptoKey& key, platform::SymKey** out);
+
+Status ToPlatformPublicKey(const blink::WebCryptoKey& key,
+ platform::PublicKey** out);
+
+Status ToPlatformPrivateKey(const blink::WebCryptoKey& key,
+ platform::PrivateKey** out);
+
+// Returns Staus::Success() if |usages| is valid for |key_type| and |algorithm|.
+// Otherwise returns a failure
+Status CheckKeyUsages(blink::WebCryptoAlgorithmId algorithm,
+ blink::WebCryptoKeyType key_type,
+ blink::WebCryptoKeyUsageMask usages);
+
} // namespace webcrypto
} // namespace content
diff --git a/content/child/webcrypto/shared_crypto_unittest.cc b/content/child/webcrypto/shared_crypto_unittest.cc
index 20f1ad5027..c10f5b1a14 100644
--- a/content/child/webcrypto/shared_crypto_unittest.cc
+++ b/content/child/webcrypto/shared_crypto_unittest.cc
@@ -29,6 +29,13 @@
#include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h"
#include "third_party/re2/re2/re2.h"
+#if !defined(USE_OPENSSL)
+#include <nss.h>
+#include <pk11pub.h>
+
+#include "crypto/scoped_nss_types.h"
+#endif
+
// The OpenSSL implementation of WebCrypto is less complete, so don't run all of
// the tests: http://crbug.com/267888
#if defined(USE_OPENSSL)
@@ -106,17 +113,17 @@ bool SupportsAesGcm() {
return status.IsSuccess();
}
-blink::WebCryptoAlgorithm CreateRsaKeyGenAlgorithm(
- blink::WebCryptoAlgorithmId algorithm_id,
- unsigned int modulus_length,
- const std::vector<uint8>& public_exponent) {
- DCHECK_EQ(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, algorithm_id);
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
- algorithm_id,
- new blink::WebCryptoRsaKeyGenParams(
- modulus_length,
- webcrypto::Uint8VectorStart(public_exponent),
- public_exponent.size()));
+bool SupportsRsaOaep() {
+#if defined(USE_OPENSSL)
+ return false;
+#else
+#if defined(USE_NSS)
+ if (!NSS_VersionCheck("3.16.2"))
+ return false;
+#endif
+ crypto::ScopedPK11Slot slot(PK11_GetInternalKeySlot());
+ return !!PK11_DoesMechanism(slot.get(), CKM_RSA_PKCS_OAEP);
+#endif
}
blink::WebCryptoAlgorithm CreateRsaHashedKeyGenAlgorithm(
@@ -126,7 +133,7 @@ blink::WebCryptoAlgorithm CreateRsaHashedKeyGenAlgorithm(
const std::vector<uint8>& public_exponent) {
DCHECK(algorithm_id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 ||
algorithm_id == blink::WebCryptoAlgorithmIdRsaOaep);
- DCHECK(IsHashAlgorithm(hash_id));
+ DCHECK(blink::WebCryptoAlgorithm::isHash(hash_id));
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
algorithm_id,
new blink::WebCryptoRsaHashedKeyGenParams(
@@ -136,6 +143,15 @@ blink::WebCryptoAlgorithm CreateRsaHashedKeyGenAlgorithm(
public_exponent.size()));
}
+// Creates an RSA-OAEP algorithm
+blink::WebCryptoAlgorithm CreateRsaOaepAlgorithm(
+ const std::vector<uint8>& label) {
+ return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ new blink::WebCryptoRsaOaepParams(
+ !label.empty(), Uint8VectorStart(label), label.size()));
+}
+
// Creates an AES-CBC algorithm.
blink::WebCryptoAlgorithm CreateAesCbcAlgorithm(const std::vector<uint8>& iv) {
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
@@ -143,7 +159,7 @@ blink::WebCryptoAlgorithm CreateAesCbcAlgorithm(const std::vector<uint8>& iv) {
new blink::WebCryptoAesCbcParams(Uint8VectorStart(iv), iv.size()));
}
-// Creates and AES-GCM algorithm.
+// Creates an AES-GCM algorithm.
blink::WebCryptoAlgorithm CreateAesGcmAlgorithm(
const std::vector<uint8>& iv,
const std::vector<uint8>& additional_data,
@@ -166,7 +182,7 @@ blink::WebCryptoAlgorithm CreateAesGcmAlgorithm(
blink::WebCryptoAlgorithm CreateHmacKeyGenAlgorithm(
blink::WebCryptoAlgorithmId hash_id,
unsigned int key_length_bits) {
- DCHECK(IsHashAlgorithm(hash_id));
+ DCHECK(blink::WebCryptoAlgorithm::isHash(hash_id));
// key_length_bytes == 0 means unspecified
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
blink::WebCryptoAlgorithmIdHmac,
@@ -318,8 +334,8 @@ void RestoreJwkOctDictionary(base::DictionaryValue* dict) {
void RestoreJwkRsaDictionary(base::DictionaryValue* dict) {
dict->Clear();
dict->SetString("kty", "RSA");
- dict->SetString("alg", "RSA1_5");
- dict->SetString("use", "enc");
+ dict->SetString("alg", "RS256");
+ dict->SetString("use", "sig");
dict->SetBoolean("ext", false);
dict->SetString(
"n",
@@ -403,6 +419,13 @@ const char* const kPrivateKeyPkcs8DerHex =
"156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319"
"584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24"
"a79f4d";
+// The modulus and exponent (in hex) of kPublicKeySpkiDerHex
+const char* const kPublicKeyModulusHex =
+ "A56E4A0E701017589A5187DC7EA841D156F2EC0E36AD52A44DFEB1E61F7AD991D8C51056"
+ "FFEDB162B4C0F283A12A88A394DFF526AB7291CBB307CEABFCE0B1DFD5CD9508096D5B2B"
+ "8B6DF5D671EF6377C0921CB23C270A70E2598E6FF89D19F105ACC2D3F0CB35F29280E138"
+ "6B6F64C4EF22E1E1F20D0CE8CFFB2249BD9A2137";
+const char* const kPublicKeyExponentHex = "010001";
class SharedCryptoTest : public testing::Test {
protected:
@@ -436,36 +459,37 @@ void ImportRsaKeyPair(const std::vector<uint8>& spki_der,
const std::vector<uint8>& pkcs8_der,
const blink::WebCryptoAlgorithm& algorithm,
bool extractable,
- blink::WebCryptoKeyUsageMask usage_mask,
+ blink::WebCryptoKeyUsageMask public_key_usage_mask,
+ blink::WebCryptoKeyUsageMask private_key_usage_mask,
blink::WebCryptoKey* public_key,
blink::WebCryptoKey* private_key) {
- EXPECT_EQ(Status::Success(),
+ ASSERT_EQ(Status::Success(),
ImportKey(blink::WebCryptoKeyFormatSpki,
CryptoData(spki_der),
algorithm,
true,
- usage_mask,
+ public_key_usage_mask,
public_key));
EXPECT_FALSE(public_key->isNull());
EXPECT_TRUE(public_key->handle());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key->type());
EXPECT_EQ(algorithm.id(), public_key->algorithm().id());
- EXPECT_EQ(extractable, extractable);
- EXPECT_EQ(usage_mask, public_key->usages());
+ EXPECT_TRUE(public_key->extractable());
+ EXPECT_EQ(public_key_usage_mask, public_key->usages());
- EXPECT_EQ(Status::Success(),
+ ASSERT_EQ(Status::Success(),
ImportKey(blink::WebCryptoKeyFormatPkcs8,
CryptoData(pkcs8_der),
algorithm,
extractable,
- usage_mask,
+ private_key_usage_mask,
private_key));
EXPECT_FALSE(private_key->isNull());
EXPECT_TRUE(private_key->handle());
EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key->type());
EXPECT_EQ(algorithm.id(), private_key->algorithm().id());
- EXPECT_EQ(extractable, extractable);
- EXPECT_EQ(usage_mask, private_key->usages());
+ EXPECT_EQ(extractable, private_key->extractable());
+ EXPECT_EQ(private_key_usage_mask, private_key->usages());
}
Status AesGcmEncrypt(const blink::WebCryptoKey& key,
@@ -1195,9 +1219,7 @@ TEST_F(SharedCryptoTest, ImportJwkKeyUsage) {
{"verify", "HS256", hmac_algorithm, blink::WebCryptoKeyUsageVerify},
{"wrapKey", "A128KW", aes_kw_algorithm, blink::WebCryptoKeyUsageWrapKey},
{"unwrapKey", "A128KW", aes_kw_algorithm,
- blink::WebCryptoKeyUsageUnwrapKey},
- {"deriveKey", "HS256", hmac_algorithm,
- blink::WebCryptoKeyUsageDeriveKey}};
+ blink::WebCryptoKeyUsageUnwrapKey}};
for (size_t test_index = 0; test_index < ARRAYSIZE_UNSAFE(test_case);
++test_index) {
SCOPED_TRACE(test_index);
@@ -1288,13 +1310,11 @@ TEST_F(SharedCryptoTest, ImportJwkKeyUsage) {
blink::WebCryptoKeyUsageDecrypt |
blink::WebCryptoKeyUsageEncrypt |
blink::WebCryptoKeyUsageWrapKey |
- blink::WebCryptoKeyUsageUnwrapKey |
- blink::WebCryptoKeyUsageDeriveKey,
+ blink::WebCryptoKeyUsageUnwrapKey,
&key));
EXPECT_EQ(blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageEncrypt |
blink::WebCryptoKeyUsageWrapKey |
- blink::WebCryptoKeyUsageUnwrapKey |
- blink::WebCryptoKeyUsageDeriveKey,
+ blink::WebCryptoKeyUsageUnwrapKey,
key.usages());
}
@@ -1439,15 +1459,11 @@ TEST_F(SharedCryptoTest, ImportJwkOctFailures) {
}
TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkRsaPublicKey)) {
- // This test uses kPublicKeySpkiDerHex as the RSA key. The data below
- // represents the modulus and public exponent extracted from this SPKI blob.
- // These values appear explicitly in the JWK rendering of the key.
- const std::string n_hex =
- "A56E4A0E701017589A5187DC7EA841D156F2EC0E36AD52A44DFEB1E61F7AD991D8C51056"
- "FFEDB162B4C0F283A12A88A394DFF526AB7291CBB307CEABFCE0B1DFD5CD9508096D5B2B"
- "8B6DF5D671EF6377C0921CB23C270A70E2598E6FF89D19F105ACC2D3F0CB35F29280E138"
- "6B6F64C4EF22E1E1F20D0CE8CFFB2249BD9A2137";
- const std::string e_hex = "010001";
+ const bool supports_rsa_oaep = SupportsRsaOaep();
+ if (!supports_rsa_oaep) {
+ LOG(WARNING) << "RSA-OAEP not supported on this platform. Skipping some"
+ << "tests.";
+ }
struct TestCase {
const blink::WebCryptoAlgorithm algorithm;
@@ -1455,34 +1471,51 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkRsaPublicKey)) {
const char* const jwk_alg;
};
const TestCase kTests[] = {
- // RSAES-PKCS1-v1_5
- {CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
- blink::WebCryptoKeyUsageEncrypt, "RSA1_5"},
// RSASSA-PKCS1-v1_5 SHA-1
{CreateRsaHashedImportAlgorithm(
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha1),
- blink::WebCryptoKeyUsageSign, "RS1"},
+ blink::WebCryptoKeyUsageVerify, "RS1"},
// RSASSA-PKCS1-v1_5 SHA-256
{CreateRsaHashedImportAlgorithm(
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha256),
- blink::WebCryptoKeyUsageSign, "RS256"},
+ blink::WebCryptoKeyUsageVerify, "RS256"},
// RSASSA-PKCS1-v1_5 SHA-384
{CreateRsaHashedImportAlgorithm(
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha384),
- blink::WebCryptoKeyUsageSign, "RS384"},
+ blink::WebCryptoKeyUsageVerify, "RS384"},
// RSASSA-PKCS1-v1_5 SHA-512
{CreateRsaHashedImportAlgorithm(
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha512),
- blink::WebCryptoKeyUsageSign, "RS512"}};
+ blink::WebCryptoKeyUsageVerify, "RS512"},
+ // RSA-OAEP with SHA-1 and MGF-1 / SHA-1
+ {CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ blink::WebCryptoKeyUsageEncrypt, "RSA-OAEP"},
+ // RSA-OAEP with SHA-256 and MGF-1 / SHA-256
+ {CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha256),
+ blink::WebCryptoKeyUsageEncrypt, "RSA-OAEP-256"},
+ // RSA-OAEP with SHA-384 and MGF-1 / SHA-384
+ {CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha384),
+ blink::WebCryptoKeyUsageEncrypt, "RSA-OAEP-384"},
+ // RSA-OAEP with SHA-512 and MGF-1 / SHA-512
+ {CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha512),
+ blink::WebCryptoKeyUsageEncrypt, "RSA-OAEP-512"}};
for (size_t test_index = 0; test_index < ARRAYSIZE_UNSAFE(kTests);
++test_index) {
SCOPED_TRACE(test_index);
const TestCase& test = kTests[test_index];
+ if (!supports_rsa_oaep &&
+ test.algorithm.id() == blink::WebCryptoAlgorithmIdRsaOaep) {
+ continue;
+ }
// Import the spki to create a public key
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
@@ -1498,24 +1531,32 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkRsaPublicKey)) {
std::vector<uint8> jwk;
ASSERT_EQ(Status::Success(),
ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk));
- EXPECT_TRUE(VerifyPublicJwk(jwk, test.jwk_alg, n_hex, e_hex, test.usage));
+ EXPECT_TRUE(VerifyPublicJwk(jwk,
+ test.jwk_alg,
+ kPublicKeyModulusHex,
+ kPublicKeyExponentHex,
+ test.usage));
// Import the JWK back in to create a new key
blink::WebCryptoKey public_key2 = blink::WebCryptoKey::createNull();
- EXPECT_EQ(
+ ASSERT_EQ(
Status::Success(),
ImportKeyJwk(
CryptoData(jwk), test.algorithm, true, test.usage, &public_key2));
- EXPECT_TRUE(public_key2.handle());
+ ASSERT_TRUE(public_key2.handle());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key2.type());
- EXPECT_EQ(true, public_key2.extractable());
+ EXPECT_TRUE(public_key2.extractable());
EXPECT_EQ(test.algorithm.id(), public_key2.algorithm().id());
- // Export the new key as spki and compare to the original.
- std::vector<uint8> spki;
- ASSERT_EQ(Status::Success(),
- ExportKey(blink::WebCryptoKeyFormatSpki, public_key2, &spki));
- EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, CryptoData(spki));
+ // Only perform SPKI consistency test for RSA-SSA as its
+ // export format is the same as kPublicKeySpkiDerHex
+ if (test.algorithm.id() == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5) {
+ // Export the new key as spki and compare to the original.
+ std::vector<uint8> spki;
+ ASSERT_EQ(Status::Success(),
+ ExportKey(blink::WebCryptoKeyFormatSpki, public_key2, &spki));
+ EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, CryptoData(spki));
+ }
}
}
@@ -1523,8 +1564,9 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkRsaFailures)) {
base::DictionaryValue dict;
RestoreJwkRsaDictionary(&dict);
blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKeyUsageMask usage_mask = blink::WebCryptoKeyUsageEncrypt;
+ CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256);
+ blink::WebCryptoKeyUsageMask usage_mask = blink::WebCryptoKeyUsageVerify;
blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
// An RSA public key JWK _must_ have an "n" (modulus) and an "e" (exponent)
@@ -1538,7 +1580,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkRsaFailures)) {
ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key));
EXPECT_EQ(algorithm.id(), key.algorithm().id());
EXPECT_FALSE(key.extractable());
- EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, key.usages());
+ EXPECT_EQ(blink::WebCryptoKeyUsageVerify, key.usages());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, key.type());
// The following are specific failure cases for when kty = "RSA".
@@ -1564,13 +1606,6 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkRsaFailures)) {
ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key));
RestoreJwkRsaDictionary(&dict);
}
-
- // Fail if "d" parameter is present, implying the JWK is a private key, which
- // is not supported.
- dict.SetString("d", "Qk3f0Dsyt");
- EXPECT_EQ(Status::ErrorJwkRsaPrivateKeyUnsupported(),
- ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key));
- RestoreJwkRsaDictionary(&dict);
}
TEST_F(SharedCryptoTest, MAYBE(ImportJwkInputConsistency)) {
@@ -1643,7 +1678,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkInputConsistency)) {
ImportKeyJwk(CryptoData(json_vec),
CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc),
extractable,
- usage_mask,
+ blink::WebCryptoKeyUsageEncrypt,
&key));
// Fail: Input algorithm (HMAC SHA1) is inconsistent with JWK value
@@ -1669,8 +1704,8 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkInputConsistency)) {
dict.SetString("alg", "HS256");
// Fail: Input usage_mask (encrypt) is not a subset of the JWK value
- // (sign|verify)
- EXPECT_EQ(Status::ErrorJwkUseInconsistent(),
+ // (sign|verify). Moreover "encrypt" is not a valid usage for HMAC.
+ EXPECT_EQ(Status::ErrorCreateKeyBadUsages(),
ImportKeyJwk(CryptoData(json_vec),
algorithm,
extractable,
@@ -1678,11 +1713,11 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkInputConsistency)) {
&key));
// Fail: Input usage_mask (encrypt|sign|verify) is not a subset of the JWK
- // value (sign|verify)
+ // value (sign|verify). Moreover "encrypt" is not a valid usage for HMAC.
usage_mask = blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageSign |
blink::WebCryptoKeyUsageVerify;
EXPECT_EQ(
- Status::ErrorJwkUseInconsistent(),
+ Status::ErrorCreateKeyBadUsages(),
ImportKeyJwk(
CryptoData(json_vec), algorithm, extractable, usage_mask, &key));
@@ -1909,31 +1944,33 @@ TEST_F(SharedCryptoTest, MAYBE(ExportJwkEmptySymmetricKey)) {
TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) {
// Passing case: Import a valid RSA key in SPKI format.
blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
- ASSERT_EQ(
- Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatSpki,
- CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
- true,
- blink::WebCryptoKeyUsageEncrypt,
- &key));
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatSpki,
+ CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256),
+ true,
+ blink::WebCryptoKeyUsageVerify,
+ &key));
EXPECT_TRUE(key.handle());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, key.type());
EXPECT_TRUE(key.extractable());
- EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, key.usages());
+ EXPECT_EQ(blink::WebCryptoKeyUsageVerify, key.usages());
EXPECT_EQ(kModulusLengthBits,
- key.algorithm().rsaParams()->modulusLengthBits());
+ key.algorithm().rsaHashedParams()->modulusLengthBits());
EXPECT_BYTES_EQ_HEX(
- "010001", CryptoData(key.algorithm().rsaParams()->publicExponent()));
+ "010001",
+ CryptoData(key.algorithm().rsaHashedParams()->publicExponent()));
// Failing case: Empty SPKI data
EXPECT_EQ(
Status::ErrorImportEmptyKeyData(),
ImportKey(blink::WebCryptoKeyFormatSpki,
CryptoData(std::vector<uint8>()),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
true,
- blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageVerify,
&key));
// Failing case: Bad DER encoding.
@@ -1941,9 +1978,9 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) {
Status::DataError(),
ImportKey(blink::WebCryptoKeyFormatSpki,
CryptoData(HexStringToBytes("618333c4cb")),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
true,
- blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageVerify,
&key));
// Failing case: Import RSA key but provide an inconsistent input algorithm.
@@ -1968,18 +2005,26 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) {
ExportKey(blink::WebCryptoKeyFormatRaw, key, &output));
// Failing case: Try to export a non-extractable key
- ASSERT_EQ(
- Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatSpki,
- CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
- false,
- blink::WebCryptoKeyUsageEncrypt,
- &key));
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatSpki,
+ CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256),
+ false,
+ blink::WebCryptoKeyUsageVerify,
+ &key));
EXPECT_TRUE(key.handle());
EXPECT_FALSE(key.extractable());
EXPECT_EQ(Status::ErrorKeyNotExtractable(),
ExportKey(blink::WebCryptoKeyFormatSpki, key, &output));
+
+ // TODO(eroman): Failing test: Import a SPKI with an unrecognized hash OID
+ // TODO(eroman): Failing test: Import a SPKI with invalid algorithm params
+ // TODO(eroman): Failing test: Import a SPKI with inconsistent parameters
+ // (e.g. SHA-1 in OID, SHA-256 in params)
+ // TODO(eroman): Failing test: Import a SPKI for RSA-SSA, but with params
+ // as OAEP/PSS
}
TEST_F(SharedCryptoTest, MAYBE(ImportExportPkcs8)) {
@@ -2032,8 +2077,11 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportPkcs8)) {
blink::WebCryptoKeyUsageSign,
&key));
- // Failing case: Import RSA key but provide an inconsistent input algorithm.
- EXPECT_EQ(Status::DataError(),
+ // Failing case: Import RSA key but provide an inconsistent input algorithm
+ // and usage. Several issues here:
+ // * AES-CBC doesn't support PKCS8 key format
+ // * AES-CBC doesn't support "sign" usage
+ EXPECT_EQ(Status::ErrorCreateKeyBadUsages(),
ImportKey(blink::WebCryptoKeyFormatPkcs8,
CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc),
@@ -2042,27 +2090,180 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportPkcs8)) {
&key));
}
+// Tests JWK import and export by doing a roundtrip key conversion and ensuring
+// it was lossless:
+//
+// PKCS8 --> JWK --> PKCS8
+TEST_F(SharedCryptoTest, MAYBE(ImportRsaPrivateKeyJwkToPkcs8RoundTrip)) {
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatPkcs8,
+ CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageSign,
+ &key));
+
+ std::vector<uint8> exported_key_jwk;
+ ASSERT_EQ(Status::Success(),
+ ExportKey(blink::WebCryptoKeyFormatJwk, key, &exported_key_jwk));
+
+ // All of the optional parameters (p, q, dp, dq, qi) should be present in the
+ // output.
+ const char* expected_jwk =
+ "{\"alg\":\"RS1\",\"d\":\"M6UEKpCyfU9UUcqbu9C0R3GhAa-IQ0Cu-YhfKku-"
+ "kuiUpySsPFaMj5eFOtB8AmbIxqPKCSnx6PESMYhEKfxNmuVf7olqEM5wfD7X5zTkRyejlXRQ"
+ "GlMmgxCcKrrKuig8MbS9L1PD7jfjUs7jT55QO9gMBiKtecbc7og1R8ajsyU\",\"dp\":"
+ "\"KPoTk4ZVvh-"
+ "KFZy6ylpy6hkMMAieGc0nSlVvNsT24Z9VSzTAd3kEJ7vdjdPt4kSDKPOF2Bsw6OQ7L_-"
+ "gJ4YZeQ\",\"dq\":\"Gos485j6cSBJiY1_t57gp3ZoeRKZzfoJ78DlB6yyHtdDAe9b_Ui-"
+ "RV6utuFnglWCdYCo5OjhQVHRUQqCo_LnKQ\",\"e\":\"AQAB\",\"ext\":true,\"key_"
+ "ops\":[\"sign\"],\"kty\":\"RSA\",\"n\":"
+ "\"pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_"
+ "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_"
+ "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc\",\"p\":\"5-"
+ "iUJyCod1Fyc6NWBT6iobwMlKpy1VxuhilrLfyWeUjApyy8zKfqyzVwbgmh31WhU1vZs8w0Fg"
+ "s7bc0-2o5kQw\",\"q\":\"tp3KHPfU1-yB51uQ_MqHSrzeEj_"
+ "ScAGAqpBHm25I3o1n7ST58Z2FuidYdPVCzSDccj5pYzZKH5QlRSsmmmeZ_Q\",\"qi\":"
+ "\"JxVqukEm0kqB86Uoy_sn9WiG-"
+ "ECp9uhuF6RLlP6TGVhLjiL93h5aLjvYqluo2FhBlOshkKz4MrhH8To9JKefTQ\"}";
+
+ ASSERT_EQ(CryptoData(std::string(expected_jwk)),
+ CryptoData(exported_key_jwk));
+
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatJwk,
+ CryptoData(exported_key_jwk),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageSign,
+ &key));
+
+ std::vector<uint8> exported_key_pkcs8;
+ ASSERT_EQ(
+ Status::Success(),
+ ExportKey(blink::WebCryptoKeyFormatPkcs8, key, &exported_key_pkcs8));
+
+ ASSERT_EQ(CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
+ CryptoData(exported_key_pkcs8));
+}
+
+// Import a JWK RSA private key with some optional parameters missing (q, dp,
+// dq, qi).
+//
+// The only optional parameter included is "p".
+//
+// This fails because JWA says that producers must include either ALL optional
+// parameters or NONE.
+TEST_F(SharedCryptoTest, MAYBE(ImportRsaPrivateKeyJwkMissingOptionalParams)) {
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+
+ base::DictionaryValue dict;
+ dict.SetString("kty", "RSA");
+ dict.SetString("alg", "RS1");
+
+ dict.SetString(
+ "n",
+ "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_"
+ "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_"
+ "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc");
+ dict.SetString("e", "AQAB");
+ dict.SetString(
+ "d",
+ "M6UEKpCyfU9UUcqbu9C0R3GhAa-IQ0Cu-YhfKku-"
+ "kuiUpySsPFaMj5eFOtB8AmbIxqPKCSnx6PESMYhEKfxNmuVf7olqEM5wfD7X5zTkRyejlXRQ"
+ "GlMmgxCcKrrKuig8MbS9L1PD7jfjUs7jT55QO9gMBiKtecbc7og1R8ajsyU");
+
+ dict.SetString("p",
+ "5-"
+ "iUJyCod1Fyc6NWBT6iobwMlKpy1VxuhilrLfyWeUjApyy8zKfqyzVwbgmh31W"
+ "hU1vZs8w0Fgs7bc0-2o5kQw");
+
+ ASSERT_EQ(Status::ErrorJwkIncompleteOptionalRsaPrivateKey(),
+ ImportKeyJwkFromDict(dict,
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageSign,
+ &key));
+}
+
+// Import a JWK RSA private key, without any of the optional parameters.
+//
+// This is expected to work, however based on the current NSS implementation it
+// does not.
+//
+// TODO(eroman): http://crbug/com/374927
+TEST_F(SharedCryptoTest, MAYBE(ImportRsaPrivateKeyJwkIncorrectOptionalEmpty)) {
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+
+ base::DictionaryValue dict;
+ dict.SetString("kty", "RSA");
+ dict.SetString("alg", "RS1");
+
+ dict.SetString(
+ "n",
+ "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_"
+ "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_"
+ "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc");
+ dict.SetString("e", "AQAB");
+ dict.SetString(
+ "d",
+ "M6UEKpCyfU9UUcqbu9C0R3GhAa-IQ0Cu-YhfKku-"
+ "kuiUpySsPFaMj5eFOtB8AmbIxqPKCSnx6PESMYhEKfxNmuVf7olqEM5wfD7X5zTkRyejlXRQ"
+ "GlMmgxCcKrrKuig8MbS9L1PD7jfjUs7jT55QO9gMBiKtecbc7og1R8ajsyU");
+
+ // TODO(eroman): This should pass, see: http://crbug/com/374927
+ //
+ // Technically it is OK to fail since JWA says that consumer are not required
+ // to support lack of the optional parameters.
+ ASSERT_EQ(Status::OperationError(),
+ ImportKeyJwkFromDict(dict,
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageSign,
+ &key));
+
+}
+
TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
// Note: using unrealistic short key lengths here to avoid bogging down tests.
- // Successful WebCryptoAlgorithmIdRsaEsPkcs1v1_5 key generation.
+ // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha256)
const unsigned int modulus_length = 256;
const std::vector<uint8> public_exponent = HexStringToBytes("010001");
blink::WebCryptoAlgorithm algorithm =
- CreateRsaKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5,
- modulus_length,
- public_exponent);
+ CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ public_exponent);
bool extractable = true;
const blink::WebCryptoKeyUsageMask usage_mask = 0;
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ASSERT_EQ(Status::Success(),
+
+ EXPECT_EQ(Status::Success(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
EXPECT_FALSE(public_key.isNull());
EXPECT_FALSE(private_key.isNull());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
+ EXPECT_EQ(modulus_length,
+ public_key.algorithm().rsaHashedParams()->modulusLengthBits());
+ EXPECT_EQ(modulus_length,
+ private_key.algorithm().rsaHashedParams()->modulusLengthBits());
+ EXPECT_EQ(blink::WebCryptoAlgorithmIdSha256,
+ public_key.algorithm().rsaHashedParams()->hash().id());
+ EXPECT_EQ(blink::WebCryptoAlgorithmIdSha256,
+ private_key.algorithm().rsaHashedParams()->hash().id());
EXPECT_TRUE(public_key.extractable());
EXPECT_EQ(extractable, private_key.extractable());
EXPECT_EQ(usage_mask, public_key.usages());
@@ -2075,16 +2276,17 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
Status::Success(),
ExportKey(blink::WebCryptoKeyFormatSpki, public_key, &public_key_spki));
public_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(
- Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatSpki,
- CryptoData(public_key_spki),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
- true,
- usage_mask,
- &public_key));
+ EXPECT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatSpki,
+ CryptoData(public_key_spki),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256),
+ true,
+ usage_mask,
+ &public_key));
EXPECT_EQ(modulus_length,
- public_key.algorithm().rsaParams()->modulusLengthBits());
+ public_key.algorithm().rsaHashedParams()->modulusLengthBits());
std::vector<uint8> private_key_pkcs8;
EXPECT_EQ(
@@ -2092,20 +2294,24 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
ExportKey(
blink::WebCryptoKeyFormatPkcs8, private_key, &private_key_pkcs8));
private_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(
- Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatPkcs8,
- CryptoData(private_key_pkcs8),
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
- true,
- usage_mask,
- &private_key));
+ EXPECT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatPkcs8,
+ CryptoData(private_key_pkcs8),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256),
+ true,
+ usage_mask,
+ &private_key));
EXPECT_EQ(modulus_length,
- private_key.algorithm().rsaParams()->modulusLengthBits());
+ private_key.algorithm().rsaHashedParams()->modulusLengthBits());
// Fail with bad modulus.
- algorithm = CreateRsaKeyGenAlgorithm(
- blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, 0, public_exponent);
+ algorithm =
+ CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ 0,
+ public_exponent);
EXPECT_EQ(Status::ErrorGenerateRsaZeroModulus(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
@@ -2113,8 +2319,11 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
// Fail with bad exponent: larger than unsigned long.
unsigned int exponent_length = sizeof(unsigned long) + 1; // NOLINT
const std::vector<uint8> long_exponent(exponent_length, 0x01);
- algorithm = CreateRsaKeyGenAlgorithm(
- blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, modulus_length, long_exponent);
+ algorithm =
+ CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ long_exponent);
EXPECT_EQ(Status::ErrorGenerateKeyPublicExponent(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
@@ -2122,9 +2331,10 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
// Fail with bad exponent: empty.
const std::vector<uint8> empty_exponent;
algorithm =
- CreateRsaKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5,
- modulus_length,
- empty_exponent);
+ CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ empty_exponent);
EXPECT_EQ(Status::ErrorGenerateKeyPublicExponent(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
@@ -2132,9 +2342,10 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
// Fail with bad exponent: all zeros.
std::vector<uint8> exponent_with_leading_zeros(15, 0x00);
algorithm =
- CreateRsaKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5,
- modulus_length,
- exponent_with_leading_zeros);
+ CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ exponent_with_leading_zeros);
EXPECT_EQ(Status::ErrorGenerateKeyPublicExponent(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
@@ -2144,27 +2355,10 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
public_exponent.begin(),
public_exponent.end());
algorithm =
- CreateRsaKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5,
- modulus_length,
- exponent_with_leading_zeros);
- EXPECT_EQ(Status::Success(),
- GenerateKeyPair(
- algorithm, extractable, usage_mask, &public_key, &private_key));
- EXPECT_FALSE(public_key.isNull());
- EXPECT_FALSE(private_key.isNull());
- EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
- EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
- EXPECT_TRUE(public_key.extractable());
- EXPECT_EQ(extractable, private_key.extractable());
- EXPECT_EQ(usage_mask, public_key.usages());
- EXPECT_EQ(usage_mask, private_key.usages());
-
- // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha256)
- algorithm =
CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha256,
modulus_length,
- public_exponent);
+ exponent_with_leading_zeros);
EXPECT_EQ(Status::Success(),
GenerateKeyPair(
algorithm, extractable, usage_mask, &public_key, &private_key));
@@ -2172,20 +2366,12 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
EXPECT_FALSE(private_key.isNull());
EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
- EXPECT_EQ(modulus_length,
- public_key.algorithm().rsaHashedParams()->modulusLengthBits());
- EXPECT_EQ(modulus_length,
- private_key.algorithm().rsaHashedParams()->modulusLengthBits());
- EXPECT_EQ(blink::WebCryptoAlgorithmIdSha256,
- public_key.algorithm().rsaHashedParams()->hash().id());
- EXPECT_EQ(blink::WebCryptoAlgorithmIdSha256,
- private_key.algorithm().rsaHashedParams()->hash().id());
EXPECT_TRUE(public_key.extractable());
EXPECT_EQ(extractable, private_key.extractable());
EXPECT_EQ(usage_mask, public_key.usages());
EXPECT_EQ(usage_mask, private_key.usages());
- // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation.
+ // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha1)
algorithm =
CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha1,
@@ -2228,201 +2414,22 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) {
ExportKey(blink::WebCryptoKeyFormatSpki, private_key, &output));
}
-TEST_F(SharedCryptoTest, MAYBE(RsaEsRoundTrip)) {
- // Import a key pair.
- blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
- blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- algorithm,
- false,
- blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
- &public_key,
- &private_key);
-
- // Make a maximum-length data message. RSAES can operate on messages up to
- // length of k - 11 bytes, where k is the octet length of the RSA modulus.
- const unsigned int kMaxMsgSizeBytes = kModulusLengthBits / 8 - 11;
- // There are two hex chars for each byte.
- const unsigned int kMsgHexSize = kMaxMsgSizeBytes * 2;
- char max_data_hex[kMsgHexSize + 1];
- std::fill(&max_data_hex[0], &max_data_hex[0] + kMsgHexSize, 'a');
- max_data_hex[kMsgHexSize] = '\0';
-
- // Verify encrypt / decrypt round trip on a few messages. Note that RSA
- // encryption does not support empty input.
- algorithm = CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- const char* const kTestDataHex[] = {"ff", "0102030405060708090a0b0c0d0e0f",
- max_data_hex};
- std::vector<uint8> encrypted_data;
- std::vector<uint8> decrypted_data;
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestDataHex); ++i) {
- SCOPED_TRACE(i);
- EXPECT_EQ(Status::Success(),
- Encrypt(algorithm,
- public_key,
- CryptoData(HexStringToBytes(kTestDataHex[i])),
- &encrypted_data));
- EXPECT_EQ(kModulusLengthBits / 8, encrypted_data.size());
- ASSERT_EQ(Status::Success(),
- Decrypt(algorithm,
- private_key,
- CryptoData(encrypted_data),
- &decrypted_data));
- EXPECT_BYTES_EQ_HEX(kTestDataHex[i], decrypted_data);
- }
-}
-
-TEST_F(SharedCryptoTest, MAYBE(RsaEsKnownAnswer)) {
- scoped_ptr<base::Value> json;
- ASSERT_TRUE(ReadJsonTestFile("rsa_es.json", &json));
- base::DictionaryValue* test = NULL;
- ASSERT_TRUE(json->GetAsDictionary(&test));
-
- // Because the random data in PKCS1.5 padding makes the encryption output non-
- // deterministic, we cannot easily do a typical known-answer test for RSA
- // encryption / decryption. Instead we will take a known-good encrypted
- // message, decrypt it, re-encrypt it, then decrypt again, verifying that the
- // original known cleartext is the result.
-
- const std::vector<uint8> rsa_spki_der =
- GetBytesFromHexString(test, "rsa_spki_der");
-
- const std::vector<uint8> rsa_pkcs8_der =
- GetBytesFromHexString(test, "rsa_pkcs8_der");
- const std::vector<uint8> ciphertext =
- GetBytesFromHexString(test, "ciphertext");
- const std::vector<uint8> cleartext = GetBytesFromHexString(test, "cleartext");
-
- // Import the key pair.
- blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
- blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- rsa_spki_der,
- rsa_pkcs8_der,
- algorithm,
- false,
- blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
- &public_key,
- &private_key);
-
- // Decrypt the known-good ciphertext with the private key. As a check we must
- // get the known original cleartext.
- std::vector<uint8> decrypted_data;
- ASSERT_EQ(
- Status::Success(),
- Decrypt(algorithm, private_key, CryptoData(ciphertext), &decrypted_data));
- EXPECT_BYTES_EQ(cleartext, decrypted_data);
-
- // Encrypt this decrypted data with the public key.
- std::vector<uint8> encrypted_data;
- ASSERT_EQ(
- Status::Success(),
- Encrypt(
- algorithm, public_key, CryptoData(decrypted_data), &encrypted_data));
- EXPECT_EQ(128u, encrypted_data.size());
-
- // Finally, decrypt the newly encrypted result with the private key, and
- // compare to the known original cleartext.
- decrypted_data.clear();
- ASSERT_EQ(
- Status::Success(),
- Decrypt(
- algorithm, private_key, CryptoData(encrypted_data), &decrypted_data));
- EXPECT_EQ(cleartext, decrypted_data);
-}
-
-TEST_F(SharedCryptoTest, MAYBE(RsaEsFailures)) {
- // Import a key pair.
- blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
- blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- algorithm,
- false,
- blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
- &public_key,
- &private_key);
-
- // Fail encrypt with a private key.
- std::vector<uint8> encrypted_data;
- const std::string message_hex_str("0102030405060708090a0b0c0d0e0f");
- const std::vector<uint8> message_hex(HexStringToBytes(message_hex_str));
- EXPECT_EQ(
- Status::ErrorUnexpectedKeyType(),
- Encrypt(
- algorithm, private_key, CryptoData(message_hex), &encrypted_data));
-
- // Fail encrypt with empty message.
- EXPECT_EQ(Status::ErrorDataTooSmall(),
- Encrypt(algorithm,
- public_key,
- CryptoData(std::vector<uint8>()),
- &encrypted_data));
-
- // Fail encrypt with message too large. RSAES can operate on messages up to
- // length of k - 11 bytes, where k is the octet length of the RSA modulus.
- const unsigned int kMaxMsgSizeBytes = kModulusLengthBits / 8 - 11;
- EXPECT_EQ(Status::ErrorDataTooLarge(),
- Encrypt(algorithm,
- public_key,
- CryptoData(std::vector<uint8>(kMaxMsgSizeBytes + 1, '0')),
- &encrypted_data));
-
- // Generate encrypted data.
- EXPECT_EQ(
- Status::Success(),
- Encrypt(algorithm, public_key, CryptoData(message_hex), &encrypted_data));
-
- // Fail decrypt with a public key.
- std::vector<uint8> decrypted_data;
- EXPECT_EQ(
- Status::ErrorUnexpectedKeyType(),
- Decrypt(
- algorithm, public_key, CryptoData(encrypted_data), &decrypted_data));
-
- // Corrupt encrypted data; ensure decrypt fails because padding was disrupted.
- EXPECT_EQ(Status::OperationError(),
- Decrypt(algorithm,
- private_key,
- CryptoData(Corrupted(encrypted_data)),
- &decrypted_data));
-
- // TODO(padolph): Are there other specific data corruption scenarios to
- // consider?
-
- // Do a successful decrypt with good data just for confirmation.
- EXPECT_EQ(
- Status::Success(),
- Decrypt(
- algorithm, private_key, CryptoData(encrypted_data), &decrypted_data));
- EXPECT_BYTES_EQ_HEX(message_hex_str, decrypted_data);
-}
-
TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) {
// Import a key pair.
- blink::WebCryptoKeyUsageMask usage_mask =
- blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify;
blink::WebCryptoAlgorithm importAlgorithm =
CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha1);
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- importAlgorithm,
- false,
- usage_mask,
- &public_key,
- &private_key);
+ ASSERT_NO_FATAL_FAILURE(
+ ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex),
+ HexStringToBytes(kPrivateKeyPkcs8DerHex),
+ importAlgorithm,
+ false,
+ blink::WebCryptoKeyUsageVerify,
+ blink::WebCryptoKeyUsageSign,
+ &public_key,
+ &private_key));
blink::WebCryptoAlgorithm algorithm =
CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5);
@@ -2477,20 +2484,8 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) {
&signature_match));
EXPECT_FALSE(signature_match);
- // Ensure that verifying using a private key, rather than a public key, fails.
- EXPECT_EQ(Status::ErrorUnexpectedKeyType(),
- VerifySignature(algorithm,
- private_key,
- CryptoData(signature),
- CryptoData(data),
- &signature_match));
-
- // Ensure that signing using a public key, rather than a private key, fails.
- EXPECT_EQ(Status::ErrorUnexpectedKeyType(),
- Sign(algorithm, public_key, CryptoData(data), &signature));
-
// Ensure that signing and verifying with an incompatible algorithm fails.
- algorithm = CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
+ algorithm = CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep);
EXPECT_EQ(Status::ErrorUnexpected(),
Sign(algorithm, private_key, CryptoData(data), &signature));
@@ -2525,7 +2520,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) {
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
blink::WebCryptoAlgorithmIdSha256),
true,
- usage_mask,
+ blink::WebCryptoKeyUsageVerify,
&public_key_256));
// Now verify using an algorithm whose inner hash is SHA-256, not SHA-1. The
@@ -2559,14 +2554,15 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSignVerifyKnownAnswer)) {
blink::WebCryptoAlgorithmIdSha1);
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- importAlgorithm,
- false,
- blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
- &public_key,
- &private_key);
+ ASSERT_NO_FATAL_FAILURE(
+ ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex),
+ HexStringToBytes(kPrivateKeyPkcs8DerHex),
+ importAlgorithm,
+ false,
+ blink::WebCryptoKeyUsageVerify,
+ blink::WebCryptoKeyUsageSign,
+ &public_key,
+ &private_key));
blink::WebCryptoAlgorithm algorithm =
CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5);
@@ -2698,22 +2694,7 @@ TEST_F(SharedCryptoTest, MAYBE(UnwrapFailures)) {
const std::vector<uint8> test_ciphertext =
GetBytesFromHexString(test, "ciphertext");
- // Using a key that does not have unwrapKey usage should fail.
- blink::WebCryptoKey bad_wrapping_key = ImportSecretKeyFromRaw(
- test_kek,
- webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw),
- blink::WebCryptoKeyUsageDecrypt); // <-- should be UnwrapKey
blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(
- Status::ErrorUnexpected(),
- UnwrapKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(test_ciphertext),
- bad_wrapping_key,
- webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw),
- webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc),
- true,
- blink::WebCryptoKeyUsageEncrypt,
- &unwrapped_key));
// Using a wrapping algorithm that does not match the wrapping key algorithm
// should fail.
@@ -2764,8 +2745,8 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapKnownAnswer)) {
std::vector<uint8> wrapped_key;
ASSERT_EQ(Status::Success(),
WrapKey(blink::WebCryptoKeyFormatRaw,
- wrapping_key,
key,
+ wrapping_key,
wrapping_algorithm,
&wrapped_key));
EXPECT_BYTES_EQ(test_ciphertext, wrapped_key);
@@ -3120,363 +3101,976 @@ TEST_F(SharedCryptoTest, MAYBE(AesGcmSampleSets)) {
}
}
-TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapKnownAnswer)) {
- scoped_ptr<base::Value> json;
- ASSERT_TRUE(ReadJsonTestFile("rsa_es.json", &json));
- base::DictionaryValue* test = NULL;
- ASSERT_TRUE(json->GetAsDictionary(&test));
- const std::vector<uint8> rsa_spki_der =
- GetBytesFromHexString(test, "rsa_spki_der");
- const std::vector<uint8> rsa_pkcs8_der =
- GetBytesFromHexString(test, "rsa_pkcs8_der");
- const std::vector<uint8> ciphertext =
- GetBytesFromHexString(test, "ciphertext");
- const std::vector<uint8> cleartext = GetBytesFromHexString(test, "cleartext");
- blink::WebCryptoAlgorithm key_algorithm =
- CreateHmacImportAlgorithm(blink::WebCryptoAlgorithmIdSha256);
+class SharedCryptoRsaOaepTest : public ::testing::Test {
+ public:
+ SharedCryptoRsaOaepTest() { Init(); }
- // Import the RSA key pair.
- blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
+ scoped_ptr<base::DictionaryValue> CreatePublicKeyJwkDict() {
+ scoped_ptr<base::DictionaryValue> jwk(new base::DictionaryValue());
+ jwk->SetString("kty", "RSA");
+ jwk->SetString("n",
+ Base64EncodeUrlSafe(HexStringToBytes(kPublicKeyModulusHex)));
+ jwk->SetString(
+ "e", Base64EncodeUrlSafe(HexStringToBytes(kPublicKeyExponentHex)));
+ return jwk.Pass();
+ }
+};
+
+// Import a PKCS#8 private key that uses RSAPrivateKey with the
+// id-rsaEncryption OID.
+TEST_F(SharedCryptoRsaOaepTest, ImportPkcs8WithRsaEncryption) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatPkcs8,
+ CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageDecrypt,
+ &private_key));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, ImportPublicJwkWithNoAlg) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, ImportPublicJwkWithMatchingAlg) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+ jwk->SetString("alg", "RSA-OAEP");
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, ImportPublicJwkWithMismatchedAlgFails) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+ jwk->SetString("alg", "RSA-OAEP-512");
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorJwkAlgorithmInconsistent(),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, ImportPublicJwkWithMismatchedTypeFails) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+ jwk->SetString("kty", "oct");
+ jwk->SetString("alg", "RSA-OAEP");
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorJwkPropertyMissing("k"),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, ExportPublicJwk) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ struct TestData {
+ blink::WebCryptoAlgorithmId hash_alg;
+ const char* expected_jwk_alg;
+ } kTestData[] = {{blink::WebCryptoAlgorithmIdSha1, "RSA-OAEP"},
+ {blink::WebCryptoAlgorithmIdSha256, "RSA-OAEP-256"},
+ {blink::WebCryptoAlgorithmIdSha384, "RSA-OAEP-384"},
+ {blink::WebCryptoAlgorithmIdSha512, "RSA-OAEP-512"}};
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestData); ++i) {
+ const TestData& test_data = kTestData[i];
+ SCOPED_TRACE(test_data.expected_jwk_alg);
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+ jwk->SetString("alg", test_data.expected_jwk_alg);
+
+ // Import the key in a known-good format
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKeyJwkFromDict(
+ *jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, test_data.hash_alg),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+
+ // Now export the key as JWK and verify its contents
+ std::vector<uint8> jwk_data;
+ ASSERT_EQ(Status::Success(),
+ ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk_data));
+ EXPECT_TRUE(VerifyPublicJwk(jwk_data,
+ test_data.expected_jwk_alg,
+ kPublicKeyModulusHex,
+ kPublicKeyExponentHex,
+ blink::WebCryptoKeyUsageEncrypt));
+ }
+}
+
+TEST_F(SharedCryptoRsaOaepTest, EncryptDecryptKnownAnswerTest) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ scoped_ptr<base::ListValue> tests;
+ ASSERT_TRUE(ReadJsonTestFileToList("rsa_oaep.json", &tests));
+
+ for (size_t test_index = 0; test_index < tests->GetSize(); ++test_index) {
+ SCOPED_TRACE(test_index);
+
+ base::DictionaryValue* test = NULL;
+ ASSERT_TRUE(tests->GetDictionary(test_index, &test));
+
+ blink::WebCryptoAlgorithm digest_algorithm =
+ GetDigestAlgorithm(test, "hash");
+ ASSERT_FALSE(digest_algorithm.isNull());
+ std::vector<uint8> public_key_der =
+ GetBytesFromHexString(test, "public_key");
+ std::vector<uint8> private_key_der =
+ GetBytesFromHexString(test, "private_key");
+ std::vector<uint8> ciphertext = GetBytesFromHexString(test, "ciphertext");
+ std::vector<uint8> plaintext = GetBytesFromHexString(test, "plaintext");
+ std::vector<uint8> label = GetBytesFromHexString(test, "label");
+
+ blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, digest_algorithm.id());
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
+
+ ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(public_key_der,
+ private_key_der,
+ import_algorithm,
+ false,
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageDecrypt,
+ &public_key,
+ &private_key));
+
+ blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label);
+ std::vector<uint8> decrypted_data;
+ ASSERT_EQ(Status::Success(),
+ Decrypt(op_algorithm,
+ private_key,
+ CryptoData(ciphertext),
+ &decrypted_data));
+ EXPECT_BYTES_EQ(plaintext, decrypted_data);
+ std::vector<uint8> encrypted_data;
+ ASSERT_EQ(
+ Status::Success(),
+ Encrypt(
+ op_algorithm, public_key, CryptoData(plaintext), &encrypted_data));
+ std::vector<uint8> redecrypted_data;
+ ASSERT_EQ(Status::Success(),
+ Decrypt(op_algorithm,
+ private_key,
+ CryptoData(encrypted_data),
+ &redecrypted_data));
+ EXPECT_BYTES_EQ(plaintext, redecrypted_data);
+ }
+}
+
+TEST_F(SharedCryptoRsaOaepTest, EncryptWithLargeMessageFails) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha1;
+ const size_t kHashSize = 20;
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, kHash),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+
+ // The maximum size of an encrypted message is:
+ // modulus length
+ // - 1 (leading octet)
+ // - hash size (maskedSeed)
+ // - hash size (lHash portion of maskedDB)
+ // - 1 (at least one octet for the padding string)
+ size_t kMaxMessageSize = (kModulusLengthBits / 8) - 2 - (2 * kHashSize);
+
+ // The label has no influence on the maximum message size. For simplicity,
+ // use the empty string.
+ std::vector<uint8> label;
+ blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label);
+
+ // Test that a message just before the boundary succeeds.
+ std::string large_message;
+ large_message.resize(kMaxMessageSize - 1, 'A');
+
+ std::vector<uint8> ciphertext;
+ ASSERT_EQ(
+ Status::Success(),
+ Encrypt(
+ op_algorithm, public_key, CryptoData(large_message), &ciphertext));
+
+ // Test that a message at the boundary succeeds.
+ large_message.resize(kMaxMessageSize, 'A');
+ ciphertext.clear();
+
+ ASSERT_EQ(
+ Status::Success(),
+ Encrypt(
+ op_algorithm, public_key, CryptoData(large_message), &ciphertext));
+
+ // Test that a message greater than the largest size fails.
+ large_message.resize(kMaxMessageSize + 1, 'A');
+ ciphertext.clear();
+
+ ASSERT_EQ(
+ Status::OperationError(),
+ Encrypt(
+ op_algorithm, public_key, CryptoData(large_message), &ciphertext));
+}
+
+// Ensures that if the selected hash algorithm for the RSA-OAEP message is too
+// large, then it is rejected, independent of the actual message to be
+// encrypted.
+// For example, a 1024-bit RSA key is too small to accomodate a message that
+// uses OAEP with SHA-512, since it requires 1040 bits to encode
+// (2 * hash size + 2 padding bytes).
+TEST_F(SharedCryptoRsaOaepTest, EncryptWithLargeDigestFails) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha512;
+
+ scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKeyJwkFromDict(*jwk.get(),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, kHash),
+ true,
+ blink::WebCryptoKeyUsageEncrypt,
+ &public_key));
+
+ // The label has no influence on the maximum message size. For simplicity,
+ // use the empty string.
+ std::vector<uint8> label;
+ blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label);
+
+ std::string small_message("A");
+ std::vector<uint8> ciphertext;
+ // This is an operation error, as the internal consistency checking of the
+ // algorithm parameters is up to the implementation.
+ ASSERT_EQ(
+ Status::OperationError(),
+ Encrypt(
+ op_algorithm, public_key, CryptoData(small_message), &ciphertext));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, DecryptWithLargeMessageFails) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatPkcs8,
+ CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
+ CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep,
+ blink::WebCryptoAlgorithmIdSha1),
+ true,
+ blink::WebCryptoKeyUsageDecrypt,
+ &private_key));
+
+ // The label has no influence on the maximum message size. For simplicity,
+ // use the empty string.
+ std::vector<uint8> label;
+ blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label);
+
+ std::string large_dummy_message(kModulusLengthBits / 8, 'A');
+ std::vector<uint8> plaintext;
+
+ ASSERT_EQ(Status::OperationError(),
+ Decrypt(op_algorithm,
+ private_key,
+ CryptoData(large_dummy_message),
+ &plaintext));
+}
+
+TEST_F(SharedCryptoRsaOaepTest, WrapUnwrapRawKey) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
+
+ blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1);
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- rsa_spki_der,
- rsa_pkcs8_der,
- algorithm,
+
+ ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(
+ HexStringToBytes(kPublicKeySpkiDerHex),
+ HexStringToBytes(kPrivateKeyPkcs8DerHex),
+ import_algorithm,
false,
- blink::WebCryptoKeyUsageWrapKey | blink::WebCryptoKeyUsageUnwrapKey,
+ blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey,
+ blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey,
&public_key,
- &private_key);
+ &private_key));
- // Import the symmetric key.
- blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
- ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(cleartext),
- key_algorithm,
- true,
- blink::WebCryptoKeyUsageSign,
- &key));
+ std::vector<uint8> label;
+ blink::WebCryptoAlgorithm wrapping_algorithm = CreateRsaOaepAlgorithm(label);
+
+ const std::string key_hex = "000102030405060708090A0B0C0D0E0F";
+ const blink::WebCryptoAlgorithm key_algorithm =
+ webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc);
+
+ blink::WebCryptoKey key =
+ ImportSecretKeyFromRaw(HexStringToBytes(key_hex),
+ key_algorithm,
+ blink::WebCryptoKeyUsageEncrypt);
+ ASSERT_FALSE(key.isNull());
- // Wrap the symmetric key with raw format.
std::vector<uint8> wrapped_key;
ASSERT_EQ(Status::Success(),
WrapKey(blink::WebCryptoKeyFormatRaw,
- public_key,
key,
- algorithm,
+ public_key,
+ wrapping_algorithm,
&wrapped_key));
- // Unwrap the wrapped key.
+ // Verify that |wrapped_key| can be decrypted and yields the key data.
+ // Because |private_key| supports both decrypt and unwrap, this is valid.
+ std::vector<uint8> decrypted_key;
+ ASSERT_EQ(Status::Success(),
+ Decrypt(wrapping_algorithm,
+ private_key,
+ CryptoData(wrapped_key),
+ &decrypted_key));
+ EXPECT_BYTES_EQ_HEX(key_hex, decrypted_key);
+
+ // Now attempt to unwrap the key, which should also decrypt the data.
blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
ASSERT_EQ(Status::Success(),
UnwrapKey(blink::WebCryptoKeyFormatRaw,
CryptoData(wrapped_key),
private_key,
- algorithm,
+ wrapping_algorithm,
key_algorithm,
true,
- blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageEncrypt,
&unwrapped_key));
- EXPECT_FALSE(key.isNull());
- EXPECT_TRUE(key.handle());
- EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type());
- EXPECT_EQ(key_algorithm.id(), key.algorithm().id());
- EXPECT_EQ(true, key.extractable());
- EXPECT_EQ(blink::WebCryptoKeyUsageSign, key.usages());
+ ASSERT_FALSE(unwrapped_key.isNull());
- // Export the new key and compare its raw bytes with the original known data.
std::vector<uint8> raw_key;
- EXPECT_EQ(Status::Success(),
- ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key));
- EXPECT_BYTES_EQ(cleartext, raw_key);
-
- // Unwrap the known wrapped key and compare to the known cleartext.
ASSERT_EQ(Status::Success(),
- UnwrapKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(ciphertext),
- private_key,
- algorithm,
- key_algorithm,
- true,
- blink::WebCryptoKeyUsageSign,
- &unwrapped_key));
- EXPECT_EQ(Status::Success(),
ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key));
- EXPECT_BYTES_EQ(cleartext, raw_key);
+ EXPECT_BYTES_EQ_HEX(key_hex, raw_key);
}
-TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapErrors)) {
- const std::vector<uint8> data(64, 0);
- blink::WebCryptoAlgorithm key_algorithm =
- CreateHmacImportAlgorithm(blink::WebCryptoAlgorithmIdSha256);
+TEST_F(SharedCryptoRsaOaepTest, WrapUnwrapJwkSymKey) {
+ if (!SupportsRsaOaep()) {
+ LOG(WARNING) << "RSA-OAEP support not present; skipping.";
+ return;
+ }
- // Import the RSA key pair.
- blink::WebCryptoAlgorithm wrapping_algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
+ // The public and private portions of a 2048-bit RSA key with the
+ // id-rsaEncryption OID
+ const char kPublicKey2048SpkiDerHex[] =
+ "30820122300d06092a864886f70d01010105000382010f003082010a0282010100c5d8ce"
+ "137a38168c8ab70229cfa5accc640567159750a312ce2e7d54b6e2fdd59b300c6a6c9764"
+ "f8de6f00519cdb90111453d273a967462786480621f9e7cee5b73d63358448e7183a3a68"
+ "e991186359f26aa88fbca5f53e673e502e4c5a2ba5068aeba60c9d0c44d872458d1b1e2f"
+ "7f339f986076d516e93dc750f0b7680b6f5f02bc0d5590495be04c4ae59d34ba17bc5d08"
+ "a93c75cfda2828f4a55b153af912038438276cb4a14f8116ca94db0ea9893652d02fc606"
+ "36f19975e3d79a4d8ea8bfed6f8e0a24b63d243b08ea70a086ad56dd6341d733711c89ca"
+ "749d4a80b3e6ecd2f8e53731eadeac2ea77788ee55d7b4b47c0f2523fbd61b557c16615d"
+ "5d0203010001";
+ const char kPrivateKey2048Pkcs8DerHex[] =
+ "308204bd020100300d06092a864886f70d0101010500048204a7308204a3020100028201"
+ "0100c5d8ce137a38168c8ab70229cfa5accc640567159750a312ce2e7d54b6e2fdd59b30"
+ "0c6a6c9764f8de6f00519cdb90111453d273a967462786480621f9e7cee5b73d63358448"
+ "e7183a3a68e991186359f26aa88fbca5f53e673e502e4c5a2ba5068aeba60c9d0c44d872"
+ "458d1b1e2f7f339f986076d516e93dc750f0b7680b6f5f02bc0d5590495be04c4ae59d34"
+ "ba17bc5d08a93c75cfda2828f4a55b153af912038438276cb4a14f8116ca94db0ea98936"
+ "52d02fc60636f19975e3d79a4d8ea8bfed6f8e0a24b63d243b08ea70a086ad56dd6341d7"
+ "33711c89ca749d4a80b3e6ecd2f8e53731eadeac2ea77788ee55d7b4b47c0f2523fbd61b"
+ "557c16615d5d02030100010282010074b70feb41a0b0fcbc207670400556c9450042ede3"
+ "d4383fb1ce8f3558a6d4641d26dd4c333fa4db842d2b9cf9d2354d3e16ad027a9f682d8c"
+ "f4145a1ad97b9edcd8a41c402bd9d8db10f62f43df854cdccbbb2100834f083f53ed6d42"
+ "b1b729a59072b004a4e945fc027db15e9c121d1251464d320d4774d5732df6b3dbf751f4"
+ "9b19c9db201e19989c883bbaad5333db47f64f6f7a95b8d4936b10d945aa3f794cfaab62"
+ "e7d47686129358914f3b8085f03698a650ab5b8c7e45813f2b0515ec05b6e5195b6a7c2a"
+ "0d36969745f431ded4fd059f6aa361a4649541016d356297362b778e90f077d48815b339"
+ "ec6f43aba345df93e67fcb6c2cb5b4544e9be902818100e9c90abe5f9f32468c5b6d630c"
+ "54a4d7d75e29a72cf792f21e242aac78fd7995c42dfd4ae871d2619ff7096cb05baa78e3"
+ "23ecab338401a8059adf7a0d8be3b21edc9a9c82c5605634a2ec81ec053271721351868a"
+ "4c2e50c689d7cef94e31ff23658af5843366e2b289c5bf81d72756a7b93487dd8770d69c"
+ "1f4e089d6d89f302818100d8a58a727c4e209132afd9933b98c89aca862a01cc0be74133"
+ "bee517909e5c379e526895ac4af11780c1fe91194c777c9670b6423f0f5a32fd7691a622"
+ "113eef4bed2ef863363a335fd55b0e75088c582437237d7f3ed3f0a643950237bc6e6277"
+ "ccd0d0a1b4170aa1047aa7ffa7c8c54be10e8c7327ae2e0885663963817f6f02818100e5"
+ "aed9ba4d71b7502e6748a1ce247ecb7bd10c352d6d9256031cdf3c11a65e44b0b7ca2945"
+ "134671195af84c6b3bb3d10ebf65ae916f38bd5dbc59a0ad1c69b8beaf57cb3a8335f19b"
+ "c7117b576987b48331cd9fd3d1a293436b7bb5e1a35c6560de4b5688ea834367cb0997eb"
+ "b578f59ed4cb724c47dba94d3b484c1876dcd70281807f15bc7d2406007cac2b138a96af"
+ "2d1e00276b84da593132c253fcb73212732dfd25824c2a615bc3d9b7f2c8d2fa542d3562"
+ "b0c7738e61eeff580a6056239fb367ea9e5efe73d4f846033602e90c36a78db6fa8ea792"
+ "0769675ec58e237bd994d189c8045a96f5dd3a4f12547257ce224e3c9af830a4da3c0eab"
+ "9227a0035ae9028180067caea877e0b23090fc689322b71fbcce63d6596e66ab5fcdbaa0"
+ "0d49e93aba8effb4518c2da637f209028401a68f344865b4956b032c69acde51d29177ca"
+ "3db99fdbf5e74848ed4fa7bdfc2ebb60e2aaa5354770a763e1399ab7a2099762d525fea0"
+ "37f3e1972c45a477e66db95c9609bb27f862700ef93379930786cf751b";
+ blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1);
blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- wrapping_algorithm,
+
+ ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(
+ HexStringToBytes(kPublicKey2048SpkiDerHex),
+ HexStringToBytes(kPrivateKey2048Pkcs8DerHex),
+ import_algorithm,
false,
- blink::WebCryptoKeyUsageWrapKey | blink::WebCryptoKeyUsageUnwrapKey,
+ blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey,
+ blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey,
&public_key,
- &private_key);
+ &private_key));
- // Import the symmetric key.
- blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
- ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(data),
- key_algorithm,
- true,
- blink::WebCryptoKeyUsageSign,
- &key));
+ std::vector<uint8> label;
+ blink::WebCryptoAlgorithm wrapping_algorithm = CreateRsaOaepAlgorithm(label);
+
+ const std::string key_hex = "000102030405060708090a0b0c0d0e0f";
+ const blink::WebCryptoAlgorithm key_algorithm =
+ webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc);
+
+ blink::WebCryptoKey key =
+ ImportSecretKeyFromRaw(HexStringToBytes(key_hex),
+ key_algorithm,
+ blink::WebCryptoKeyUsageEncrypt);
+ ASSERT_FALSE(key.isNull());
- // Wrapping with a private key should fail.
std::vector<uint8> wrapped_key;
- EXPECT_EQ(Status::ErrorUnexpectedKeyType(),
- WrapKey(blink::WebCryptoKeyFormatRaw,
- private_key,
+ ASSERT_EQ(Status::Success(),
+ WrapKey(blink::WebCryptoKeyFormatJwk,
key,
+ public_key,
wrapping_algorithm,
&wrapped_key));
- // Wrapping a key whose raw keying material is too large for the wrapping key
- // should fail.
- // RSAES can encrypt data up to length of k - 11 bytes, where k is the octet
- // length of the RSA modulus, and can decrypt data up to length k. Fabricate a
- // big piece of data here that fails both of these criteria, so it can be used
- // for both wrap and unwrap negative tests below.
- const std::vector<uint8> big_data(kModulusLengthBits / 8 + 1, 0);
- blink::WebCryptoKey big_key = blink::WebCryptoKey::createNull();
+ // Verify that |wrapped_key| can be decrypted and yields a valid JWK object.
+ // Because |private_key| supports both decrypt and unwrap, this is valid.
+ std::vector<uint8> decrypted_jwk;
ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(big_data),
- key_algorithm,
- true,
- blink::WebCryptoKeyUsageSign,
- &big_key));
- EXPECT_EQ(Status::ErrorDataTooLarge(),
- WrapKey(blink::WebCryptoKeyFormatRaw,
- public_key,
- big_key,
- wrapping_algorithm,
- &wrapped_key));
+ Decrypt(wrapping_algorithm,
+ private_key,
+ CryptoData(wrapped_key),
+ &decrypted_jwk));
+ EXPECT_TRUE(VerifySecretJwk(
+ decrypted_jwk, "A128CBC", key_hex, blink::WebCryptoKeyUsageEncrypt));
- // Unwrapping with a public key should fail.
+ // Now attempt to unwrap the key, which should also decrypt the data.
blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(Status::ErrorUnexpectedKeyType(),
- UnwrapKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(data),
- public_key,
+ ASSERT_EQ(Status::Success(),
+ UnwrapKey(blink::WebCryptoKeyFormatJwk,
+ CryptoData(wrapped_key),
+ private_key,
wrapping_algorithm,
key_algorithm,
true,
- blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageEncrypt,
&unwrapped_key));
+ ASSERT_FALSE(unwrapped_key.isNull());
- // Unwrapping empty data should fail.
- const std::vector<uint8> emtpy_data;
- EXPECT_EQ(Status::ErrorDataTooSmall(),
- UnwrapKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(emtpy_data),
- private_key,
- wrapping_algorithm,
- key_algorithm,
+ std::vector<uint8> raw_key;
+ ASSERT_EQ(Status::Success(),
+ ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key));
+ EXPECT_BYTES_EQ_HEX(key_hex, raw_key);
+}
+
+// Try importing an RSA-SSA public key with unsupported key usages using SPKI
+// format. RSA-SSA public keys only support the 'verify' usage.
+TEST_F(SharedCryptoTest, MAYBE(ImportRsaSsaPublicKeyBadUsage_SPKI)) {
+ const blink::WebCryptoAlgorithm algorithm =
+ CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
+ };
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ ImportKey(blink::WebCryptoKeyFormatSpki,
+ CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
+ algorithm,
+ false,
+ bad_usages[i],
+ &public_key));
+ }
+}
+
+// Try importing an RSA-SSA public key with unsupported key usages using JWK
+// format. RSA-SSA public keys only support the 'verify' usage.
+TEST_F(SharedCryptoTest, MAYBE(ImportRsaSsaPublicKeyBadUsage_JWK)) {
+ const blink::WebCryptoAlgorithm algorithm =
+ CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
+ };
+
+ base::DictionaryValue dict;
+ RestoreJwkRsaDictionary(&dict);
+ dict.Remove("use", NULL);
+ dict.SetString("alg", "RS256");
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ ImportKeyJwkFromDict(
+ dict, algorithm, false, bad_usages[i], &public_key));
+ }
+}
+
+// Try importing an AES-CBC key with unsupported key usages using raw
+// format. AES-CBC keys support the following usages:
+// 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey'
+TEST_F(SharedCryptoTest, MAYBE(ImportAesCbcKeyBadUsage_Raw)) {
+ const blink::WebCryptoAlgorithm algorithm =
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageDeriveBits,
+ blink::WebCryptoKeyUsageUnwrapKey | blink::WebCryptoKeyUsageVerify,
+ };
+
+ std::vector<uint8> key_bytes(16);
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ ImportKey(blink::WebCryptoKeyFormatRaw,
+ CryptoData(key_bytes),
+ algorithm,
+ true,
+ bad_usages[i],
+ &key));
+ }
+}
+
+// Try importing an AES-KW key with unsupported key usages using raw
+// format. AES-KW keys support the following usages:
+// 'wrapKey', 'unwrapKey'
+TEST_F(SharedCryptoTest, MAYBE(ImportAesKwKeyBadUsage_Raw)) {
+ const blink::WebCryptoAlgorithm algorithm =
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageUnwrapKey,
+ blink::WebCryptoKeyUsageDeriveBits,
+ blink::WebCryptoKeyUsageUnwrapKey | blink::WebCryptoKeyUsageVerify,
+ };
+
+ std::vector<uint8> key_bytes(16);
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ ImportKey(blink::WebCryptoKeyFormatRaw,
+ CryptoData(key_bytes),
+ algorithm,
+ true,
+ bad_usages[i],
+ &key));
+ }
+}
+
+// Try unwrapping an HMAC key with unsupported usages using JWK format and
+// AES-KW. HMAC keys support the following usages:
+// 'sign', 'verify'
+TEST_F(SharedCryptoTest, MAYBE(UnwrapHmacKeyBadUsage_JWK)) {
+ const blink::WebCryptoAlgorithm unwrap_algorithm =
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageWrapKey,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageWrapKey,
+ blink::WebCryptoKeyUsageVerify | blink::WebCryptoKeyUsageDeriveKey,
+ };
+
+ // Import the wrapping key.
+ blink::WebCryptoKey wrapping_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatRaw,
+ CryptoData(std::vector<uint8>(16)),
+ unwrap_algorithm,
true,
- blink::WebCryptoKeyUsageSign,
- &unwrapped_key));
+ blink::WebCryptoKeyUsageUnwrapKey,
+ &wrapping_key));
- // Unwrapping data too large for the wrapping key should fail.
- EXPECT_EQ(Status::ErrorDataTooLarge(),
- UnwrapKey(blink::WebCryptoKeyFormatRaw,
- CryptoData(big_data),
- private_key,
- wrapping_algorithm,
- key_algorithm,
+ // The JWK plain text is:
+ // { "kty": "oct","alg": "HS256","k": "GADWrMRHwQfoNaXU5fZvTg=="}
+ const char* kWrappedJwk =
+ "0AA245F17064FFB2A7A094436A39BEBFC962C627303D1327EA750CE9F917688C2782A943"
+ "7AE7586547AC490E8AE7D5B02D63868D5C3BB57D36C4C8C5BF3962ACEC6F42E767E5706"
+ "4";
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ UnwrapKey(blink::WebCryptoKeyFormatJwk,
+ CryptoData(HexStringToBytes(kWrappedJwk)),
+ wrapping_key,
+ unwrap_algorithm,
+ webcrypto::CreateHmacImportAlgorithm(
+ blink::WebCryptoAlgorithmIdSha256),
+ true,
+ bad_usages[i],
+ &key));
+ }
+}
+
+// Try unwrapping an RSA-SSA public key with unsupported usages using JWK format
+// and AES-KW. RSA-SSA public keys support the following usages:
+// 'verify'
+TEST_F(SharedCryptoTest, MAYBE(UnwrapRsaSsaPublicKeyBadUsage_JWK)) {
+ const blink::WebCryptoAlgorithm unwrap_algorithm =
+ CreateAlgorithm(blink::WebCryptoAlgorithmIdAesKw);
+
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageEncrypt,
+ blink::WebCryptoKeyUsageSign,
+ blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageWrapKey,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageWrapKey,
+ };
+
+ // Import the wrapping key.
+ blink::WebCryptoKey wrapping_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ ImportKey(blink::WebCryptoKeyFormatRaw,
+ CryptoData(std::vector<uint8>(16)),
+ unwrap_algorithm,
true,
- blink::WebCryptoKeyUsageSign,
- &unwrapped_key));
+ blink::WebCryptoKeyUsageUnwrapKey,
+ &wrapping_key));
+
+ // The JWK plaintext is:
+ // { "kty": "RSA","alg": "RS256","n": "...","e": "AQAB"}
+
+ const char* kWrappedJwk =
+ "CE8DAEF99E977EE58958B8C4494755C846E883B2ECA575C5366622839AF71AB30875F152"
+ "E8E33E15A7817A3A2874EB53EFE05C774D98BC936BA9BA29BEB8BB3F3C3CE2323CB3359D"
+ "E3F426605CF95CCF0E01E870ABD7E35F62E030B5FB6E520A5885514D1D850FB64B57806D"
+ "1ADA57C6E27DF345D8292D80F6B074F1BE51C4CF3D76ECC8886218551308681B44FAC60B"
+ "8CF6EA439BC63239103D0AE81ADB96F908680586C6169284E32EB7DD09D31103EBDAC0C2"
+ "40C72DCF0AEA454113CC47457B13305B25507CBEAB9BDC8D8E0F867F9167F9DCEF0D9F9B"
+ "30F2EE83CEDFD51136852C8A5939B768";
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ UnwrapKey(blink::WebCryptoKeyFormatJwk,
+ CryptoData(HexStringToBytes(kWrappedJwk)),
+ wrapping_key,
+ unwrap_algorithm,
+ webcrypto::CreateRsaHashedImportAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256),
+ true,
+ bad_usages[i],
+ &key));
+ }
}
-TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyUnwrapKnownAnswer)) {
- // The following data lists a known 128-bit AES-CBC key, then a JWK
- // representation of this key that was encrypted ("wrapped") using
- // RSAES-PKCS1-v1_5 and kPublicKeySpkiDerHex as the wrapping key.
- // For reference, the intermediate clear JWK is
- // {"alg":"A128CBC","ext":true,"k":<b64url>,"key_ops":["encrypt"],"kty":"oct"}
- const std::vector<uint8> key_data =
- HexStringToBytes("8f56a26e7e8b77dca15ed54339724bf5");
- const std::vector<uint8> wrapped_key_data = HexStringToBytes(
- "9debcabd9c731d6a779622dbef38635419c409b3077af67b3cf0601b2da7054f2ec26156"
- "06bb764e4986f45dd09ce660432a7abbac48b5249924f12dea52275b6d67d8b8a2f63525"
- "fbbf67d61244c1afa9e30857b87b7a48cdc0b3196dc1477738cbf9e42ea65d5e0edc3b05"
- "afafadc7d7400e26a51270d251040d51ce46cecc");
- const blink::WebCryptoAlgorithm wrapping_algorithm =
- webcrypto::CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
+// Generate an AES-CBC key with invalid usages. AES-CBC supports:
+// 'encrypt', 'decrypt', 'wrapKey', 'unwrapKey'
+TEST_F(SharedCryptoTest, MAYBE(GenerateAesKeyBadUsages)) {
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageSign, blink::WebCryptoKeyUsageVerify,
+ blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageVerify,
+ };
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
+
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ GenerateSecretKey(
+ CreateAesCbcKeyGenAlgorithm(128), true, bad_usages[i], &key));
+ }
+}
+
+// Generate an RSA-SSA key pair with invalid usages. RSA-SSA supports:
+// 'sign', 'verify'
+TEST_F(SharedCryptoTest, MAYBE(GenerateRsaSsaBadUsages)) {
+ blink::WebCryptoKeyUsageMask bad_usages[] = {
+ blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageVerify | blink::WebCryptoKeyUsageDecrypt,
+ blink::WebCryptoKeyUsageWrapKey,
+ };
+
+ const unsigned int modulus_length = 256;
+ const std::vector<uint8> public_exponent = HexStringToBytes("010001");
+
+ for (size_t i = 0; i < arraysize(bad_usages); ++i) {
+ SCOPED_TRACE(i);
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
+
+ ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
+ GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ public_exponent),
+ true,
+ bad_usages[i],
+ &public_key,
+ &private_key));
+ }
+}
+
+// Generate an RSA-SSA key pair. The public and private keys should select the
+// key usages which are applicable, and not have the exact same usages as was
+// specified to GenerateKey
+TEST_F(SharedCryptoTest, MAYBE(GenerateRsaSsaKeyPairIntersectUsages)) {
+ const unsigned int modulus_length = 256;
+ const std::vector<uint8> public_exponent = HexStringToBytes("010001");
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
- // Import the private wrapping key.
- blink::WebCryptoKey private_wrapping_key = blink::WebCryptoKey::createNull();
ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatPkcs8,
- CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
- wrapping_algorithm,
- false,
- blink::WebCryptoKeyUsageDecrypt |
- blink::WebCryptoKeyUsageUnwrapKey,
- &private_wrapping_key));
+ GenerateKeyPair(
+ CreateRsaHashedKeyGenAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ public_exponent),
+ true,
+ blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
+ &public_key,
+ &private_key));
- // Unwrap the key.
- blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(Status::Success(),
- UnwrapKey(blink::WebCryptoKeyFormatJwk,
- CryptoData(wrapped_key_data),
- private_wrapping_key,
- wrapping_algorithm,
- CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc),
- true,
- blink::WebCryptoKeyUsageEncrypt,
- &unwrapped_key));
- EXPECT_FALSE(unwrapped_key.isNull());
- EXPECT_TRUE(unwrapped_key.handle());
- EXPECT_EQ(blink::WebCryptoKeyTypeSecret, unwrapped_key.type());
- EXPECT_EQ(blink::WebCryptoAlgorithmIdAesCbc, unwrapped_key.algorithm().id());
- EXPECT_EQ(true, unwrapped_key.extractable());
- EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, unwrapped_key.usages());
+ EXPECT_EQ(blink::WebCryptoKeyUsageVerify, public_key.usages());
+ EXPECT_EQ(blink::WebCryptoKeyUsageSign, private_key.usages());
- // Export the unwrapped key and compare to the original.
- std::vector<uint8> raw_key;
- EXPECT_EQ(Status::Success(),
- ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key));
- EXPECT_BYTES_EQ(key_data, raw_key);
+ // Try again but this time without the Verify usages.
+ ASSERT_EQ(Status::Success(),
+ GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ public_exponent),
+ true,
+ blink::WebCryptoKeyUsageSign,
+ &public_key,
+ &private_key));
+
+ EXPECT_EQ(0, public_key.usages());
+ EXPECT_EQ(blink::WebCryptoKeyUsageSign, private_key.usages());
}
-TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapRoundTrip)) {
- // Generate the symkey to be wrapped (256-bit AES-CBC key).
- const blink::WebCryptoAlgorithm gen_algorithm =
- CreateAesCbcKeyGenAlgorithm(256);
- blink::WebCryptoKey key_to_wrap = blink::WebCryptoKey::createNull();
+// Generate an AES-CBC key and an RSA key pair. Use the AES-CBC key to wrap the
+// key pair (using SPKI format for public key, PKCS8 format for private key).
+// Then unwrap the wrapped key pair and verify that the key data is the same.
+TEST_F(SharedCryptoTest, MAYBE(WrapUnwrapRoundtripSpkiPkcs8UsingAesCbc)) {
+ // Generate the wrapping key.
+ blink::WebCryptoKey wrapping_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ GenerateSecretKey(CreateAesCbcKeyGenAlgorithm(128),
+ true,
+ blink::WebCryptoKeyUsageWrapKey |
+ blink::WebCryptoKeyUsageUnwrapKey,
+ &wrapping_key));
+
+ // Generate an RSA key pair to be wrapped.
+ const unsigned int modulus_length = 256;
+ const std::vector<uint8> public_exponent = HexStringToBytes("010001");
+
+ blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull();
+ blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull();
+ ASSERT_EQ(Status::Success(),
+ GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm(
+ blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256,
+ modulus_length,
+ public_exponent),
+ true,
+ 0,
+ &public_key,
+ &private_key));
+
+ // Export key pair as SPKI + PKCS8
+ std::vector<uint8> public_key_spki;
ASSERT_EQ(
Status::Success(),
- GenerateSecretKey(
- gen_algorithm, true, blink::WebCryptoKeyUsageEncrypt, &key_to_wrap));
+ ExportKey(blink::WebCryptoKeyFormatSpki, public_key, &public_key_spki));
- // Import the wrapping key pair.
- const blink::WebCryptoAlgorithm wrapping_algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKey public_wrapping_key = blink::WebCryptoKey::createNull();
- blink::WebCryptoKey private_wrapping_key = blink::WebCryptoKey::createNull();
- ImportRsaKeyPair(
- HexStringToBytes(kPublicKeySpkiDerHex),
- HexStringToBytes(kPrivateKeyPkcs8DerHex),
- wrapping_algorithm,
- false,
- blink::WebCryptoKeyUsageWrapKey | blink::WebCryptoKeyUsageUnwrapKey,
- &public_wrapping_key,
- &private_wrapping_key);
+ std::vector<uint8> private_key_pkcs8;
+ ASSERT_EQ(
+ Status::Success(),
+ ExportKey(
+ blink::WebCryptoKeyFormatPkcs8, private_key, &private_key_pkcs8));
+
+ // Wrap the key pair.
+ blink::WebCryptoAlgorithm wrap_algorithm =
+ CreateAesCbcAlgorithm(std::vector<uint8>(16, 0));
- // Wrap the symkey in JWK format, using the public wrapping key.
- std::vector<uint8> wrapped_data;
+ std::vector<uint8> wrapped_public_key;
ASSERT_EQ(Status::Success(),
- WrapKey(blink::WebCryptoKeyFormatJwk,
- public_wrapping_key,
- key_to_wrap,
- wrapping_algorithm,
- &wrapped_data));
+ WrapKey(blink::WebCryptoKeyFormatSpki,
+ public_key,
+ wrapping_key,
+ wrap_algorithm,
+ &wrapped_public_key));
- // Unwrap the key using the private wrapping key.
- blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
+ std::vector<uint8> wrapped_private_key;
ASSERT_EQ(Status::Success(),
- UnwrapKey(blink::WebCryptoKeyFormatJwk,
- CryptoData(wrapped_data),
- private_wrapping_key,
- wrapping_algorithm,
- CreateAlgorithm(blink::WebCryptoAlgorithmIdAesCbc),
+ WrapKey(blink::WebCryptoKeyFormatPkcs8,
+ private_key,
+ wrapping_key,
+ wrap_algorithm,
+ &wrapped_private_key));
+
+ // Unwrap the key pair.
+ blink::WebCryptoAlgorithm rsa_import_algorithm =
+ CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+ blink::WebCryptoAlgorithmIdSha256);
+
+ blink::WebCryptoKey unwrapped_public_key = blink::WebCryptoKey::createNull();
+
+ ASSERT_EQ(Status::Success(),
+ UnwrapKey(blink::WebCryptoKeyFormatSpki,
+ CryptoData(wrapped_public_key),
+ wrapping_key,
+ wrap_algorithm,
+ rsa_import_algorithm,
true,
- blink::WebCryptoKeyUsageEncrypt,
- &unwrapped_key));
+ 0,
+ &unwrapped_public_key));
+
+ blink::WebCryptoKey unwrapped_private_key = blink::WebCryptoKey::createNull();
- // Export the original symkey and the unwrapped key and compare.
- std::vector<uint8> raw_key1, raw_key2;
- EXPECT_EQ(Status::Success(),
- ExportKey(blink::WebCryptoKeyFormatRaw, key_to_wrap, &raw_key1));
- EXPECT_EQ(Status::Success(),
- ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key2));
- EXPECT_BYTES_EQ(raw_key1, raw_key2);
-}
-
-TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapErrors)) {
- // Unwrap JWK-formatted data that can be successfully decrypted, but contains
- // an error in the plaintext JWK so it cannot be subsequently imported, and
- // ensure that a generic error is returned instead of some other more specific
- // error. This shows that information about the plaintext JWK inside the
- // encrypted data is not leaked.
- // Note that it is sufficient to consider just one JWK import failure mode
- // here; others are validated in the ImportJwkFailures Test. The specific
- // error in the cleartext data below is kty = "foo", which is an invalid kty
- // value.
- const std::string cleartext =
- "{\"alg\":\"A128CBC\",\"ext\":true,\"k\":"
- "\"j1aibn6Ld9yhXtVDOXJL9Q\",\"key_ops\":[\"encrypt\"],\"kty\":\"foo\"}";
- // ciphertext is the cleartext above encrypted with kPublicKeySpkiDerHex, and
- // can be decrypted with kPrivateKeyPkcs8DerHex
- const std::vector<uint8> ciphertext = HexStringToBytes(
- "93bc7bb2ca8502fcf3224e19b12ba455ac32d01695611022c76d3dbdd797c044de047d44"
- "6c5ed5de5b8f79147ffe1df8da9c894b58881b238d39bd24cecd5c1a98a7c0b07354aee6"
- "24791b2d549b7ecf1219c49513a1bcbb0fac5c6b59d350b564c44dc3678dadf84b4ea3d1"
- "32e576e88f8d4a2d27c173e033a97bbda7e47bb9");
-
- // Import the private decryption key.
- const blink::WebCryptoAlgorithm algorithm =
- CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5);
- blink::WebCryptoKey private_decryption_key =
- blink::WebCryptoKey::createNull();
ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatPkcs8,
- CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
- algorithm,
- false,
- blink::WebCryptoKeyUsageDecrypt,
- &private_decryption_key));
+ UnwrapKey(blink::WebCryptoKeyFormatPkcs8,
+ CryptoData(wrapped_private_key),
+ wrapping_key,
+ wrap_algorithm,
+ rsa_import_algorithm,
+ true,
+ 0,
+ &unwrapped_private_key));
- // Decrypt the ciphertext and validate the result, to prove that decryption is
- // successful.
- std::vector<uint8> decrypted_data;
+ // Export unwrapped key pair as SPKI + PKCS8
+ std::vector<uint8> unwrapped_public_key_spki;
ASSERT_EQ(Status::Success(),
- Decrypt(algorithm,
- private_decryption_key,
- CryptoData(ciphertext),
- &decrypted_data));
- EXPECT_BYTES_EQ(cleartext, decrypted_data);
-
- // Import the private wrapping key. Note this is the same underlying keying
- // material used for private_decryption_key above. The only difference is that
- // it has unwrap rather than decrypt usage.
- blink::WebCryptoKey private_wrapping_key = blink::WebCryptoKey::createNull();
+ ExportKey(blink::WebCryptoKeyFormatSpki,
+ unwrapped_public_key,
+ &unwrapped_public_key_spki));
+
+ std::vector<uint8> unwrapped_private_key_pkcs8;
ASSERT_EQ(Status::Success(),
- ImportKey(blink::WebCryptoKeyFormatPkcs8,
- CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
- algorithm,
- false,
- blink::WebCryptoKeyUsageUnwrapKey,
- &private_wrapping_key));
+ ExportKey(blink::WebCryptoKeyFormatPkcs8,
+ unwrapped_private_key,
+ &unwrapped_private_key_pkcs8));
- // Treat the ciphertext as a wrapped key and try to unwrap it. Ensure a
- // generic error is received.
- blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull();
- EXPECT_EQ(Status::OperationError(),
- UnwrapKey(blink::WebCryptoKeyFormatJwk,
- CryptoData(ciphertext),
- private_wrapping_key,
- algorithm,
- CreateAesCbcAlgorithm(std::vector<uint8>(0, 16)),
- true,
- blink::WebCryptoKeyUsageEncrypt,
- &unwrapped_key));
+ EXPECT_EQ(public_key_spki, unwrapped_public_key_spki);
+ EXPECT_EQ(private_key_pkcs8, unwrapped_private_key_pkcs8);
+
+ EXPECT_NE(public_key_spki, wrapped_public_key);
+ EXPECT_NE(private_key_pkcs8, wrapped_private_key);
}
} // namespace webcrypto
diff --git a/content/child/webcrypto/status.cc b/content/child/webcrypto/status.cc
index 4fbfd70987..cc2599ebf7 100644
--- a/content/child/webcrypto/status.cc
+++ b/content/child/webcrypto/status.cc
@@ -99,12 +99,6 @@ Status Status::ErrorJwkUseAndKeyopsInconsistent() {
"but are inconsistent with each other.");
}
-Status Status::ErrorJwkRsaPrivateKeyUnsupported() {
- return Status(blink::WebCryptoErrorTypeNotSupported,
- "JWK RSA key contained \"d\" property: Private key import is "
- "not yet supported");
-}
-
Status Status::ErrorJwkUnrecognizedKty() {
return Status(blink::WebCryptoErrorTypeData,
"The JWK \"kty\" property was unrecognized");
@@ -116,6 +110,12 @@ Status Status::ErrorJwkIncorrectKeyLength() {
"of key data for the given algorithm.");
}
+Status Status::ErrorJwkIncompleteOptionalRsaPrivateKey() {
+ return Status(blink::WebCryptoErrorTypeData,
+ "The optional JWK properties p, q, dp, dq, qi must either all "
+ "be provided, or none provided");
+}
+
Status Status::ErrorImportEmptyKeyData() {
return Status(blink::WebCryptoErrorTypeData, "No key data was provided");
}
@@ -198,6 +198,11 @@ Status Status::ErrorGenerateKeyLength() {
"bits");
}
+Status Status::ErrorCreateKeyBadUsages() {
+ return Status(blink::WebCryptoErrorTypeData,
+ "Cannot create a key using the specified key usages.");
+}
+
Status::Status(blink::WebCryptoErrorType error_type,
const std::string& error_details_utf8)
: type_(TYPE_ERROR),
diff --git a/content/child/webcrypto/status.h b/content/child/webcrypto/status.h
index 69f40be7c4..8dbfce6e0c 100644
--- a/content/child/webcrypto/status.h
+++ b/content/child/webcrypto/status.h
@@ -19,11 +19,6 @@ namespace webcrypto {
//
// As such, it is important that errors DO NOT reveal any sensitive material
// (like key bytes).
-//
-// Care must be taken with what errors are reported back to Blink when doing
-// compound operations like unwrapping a JWK key. In this case, errors
-// generated by the JWK import are not appropriate to report since the wrapped
-// JWK is not visible to the caller.
class CONTENT_EXPORT Status {
public:
Status() : type_(TYPE_ERROR) {}
@@ -102,9 +97,6 @@ class CONTENT_EXPORT Status {
// are incompatible with each other.
static Status ErrorJwkUseAndKeyopsInconsistent();
- // TODO(eroman): Private key import through JWK is not yet supported.
- static Status ErrorJwkRsaPrivateKeyUnsupported();
-
// The "kty" parameter was given and was a string, however it was
// unrecognized.
static Status ErrorJwkUnrecognizedKty();
@@ -115,6 +107,10 @@ class CONTENT_EXPORT Status {
// given that is an error.
static Status ErrorJwkIncorrectKeyLength();
+ // The JWK was for an RSA private key but only partially provided the optional
+ // parameters (p, q, dq, dq, qi).
+ static Status ErrorJwkIncompleteOptionalRsaPrivateKey();
+
// ------------------------------------
// Other errors
// ------------------------------------
@@ -139,9 +135,7 @@ class CONTENT_EXPORT Status {
// The data provided to an encrypt/decrypt/sign/verify operation was too
// large. This can either represent an internal limitation (for instance
- // representing buffer lengths as uints), or an algorithm restriction (for
- // instance RSAES can operation on messages relative to the length of the
- // key's modulus).
+ // representing buffer lengths as uints).
static Status ErrorDataTooLarge();
// The data provided to an encrypt/decrypt/sign/verify operation was too
@@ -188,6 +182,11 @@ class CONTENT_EXPORT Status {
// zero, or it was not a multiple of 8 bits.
static Status ErrorGenerateKeyLength();
+ // Attempted to create a key (either by importKey(), generateKey(), or
+ // unwrapKey()) however the key usages were not applicable for the key type
+ // and algorithm.
+ static Status ErrorCreateKeyBadUsages();
+
private:
enum Type { TYPE_ERROR, TYPE_SUCCESS };
diff --git a/content/child/webcrypto/webcrypto_impl.cc b/content/child/webcrypto/webcrypto_impl.cc
index 8891689f50..ef0740ba66 100644
--- a/content/child/webcrypto/webcrypto_impl.cc
+++ b/content/child/webcrypto/webcrypto_impl.cc
@@ -134,14 +134,6 @@ void CompleteWithKeyOrError(const Status& status,
}
}
-bool IsAlgorithmAsymmetric(const blink::WebCryptoAlgorithm& algorithm) {
- // TODO(padolph): include all other asymmetric algorithms once they are
- // defined, e.g. EC and DH.
- return (algorithm.id() == blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 ||
- algorithm.id() == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 ||
- algorithm.id() == blink::WebCryptoAlgorithmIdRsaOaep);
-}
-
// Gets a task runner for the current thread. The current thread is either:
//
// * The main Blink thread
@@ -407,7 +399,8 @@ void DoGenerateKeyReply(scoped_ptr<GenerateKeyState> state) {
void DoGenerateKey(scoped_ptr<GenerateKeyState> passed_state) {
GenerateKeyState* state = passed_state.get();
- state->is_asymmetric = IsAlgorithmAsymmetric(state->algorithm);
+ state->is_asymmetric =
+ webcrypto::IsAlgorithmAsymmetric(state->algorithm.id());
if (state->is_asymmetric) {
state->status = webcrypto::GenerateKeyPair(state->algorithm,
state->extractable,
@@ -422,8 +415,6 @@ void DoGenerateKey(scoped_ptr<GenerateKeyState> passed_state) {
DCHECK_EQ(state->algorithm.id(), state->private_key.algorithm().id());
DCHECK_EQ(true, state->public_key.extractable());
DCHECK_EQ(state->extractable, state->private_key.extractable());
- DCHECK_EQ(state->usage_mask, state->public_key.usages());
- DCHECK_EQ(state->usage_mask, state->private_key.usages());
}
} else {
blink::WebCryptoKey* key = &state->public_key;
@@ -519,11 +510,9 @@ void DoWrapKeyReply(scoped_ptr<WrapKeyState> state) {
void DoWrapKey(scoped_ptr<WrapKeyState> passed_state) {
WrapKeyState* state = passed_state.get();
- // TODO(eroman): The parameter ordering of webcrypto::WrapKey() is
- // inconsistent with that of blink::WebCrypto::wrapKey().
state->status = webcrypto::WrapKey(state->format,
- state->wrapping_key,
state->key,
+ state->wrapping_key,
state->wrap_algorithm,
&state->buffer);
@@ -554,12 +543,15 @@ void DoUnwrapKey(scoped_ptr<UnwrapKeyState> passed_state) {
} // namespace
WebCryptoImpl::WebCryptoImpl() {
- webcrypto::Init();
}
WebCryptoImpl::~WebCryptoImpl() {
}
+void WebCryptoImpl::EnsureInit() {
+ webcrypto::Init();
+}
+
void WebCryptoImpl::encrypt(const blink::WebCryptoAlgorithm& algorithm,
const blink::WebCryptoKey& key,
const unsigned char* data,
diff --git a/content/child/webcrypto/webcrypto_impl.h b/content/child/webcrypto/webcrypto_impl.h
index 179de041cb..485beb9698 100644
--- a/content/child/webcrypto/webcrypto_impl.h
+++ b/content/child/webcrypto/webcrypto_impl.h
@@ -14,14 +14,19 @@
namespace content {
// Wrapper around the Blink WebCrypto asynchronous interface, which forwards to
-// the synchronous platfrom (NSS or OpenSSL) implementation.
+// the synchronous platform (NSS or OpenSSL) implementation.
//
-// TODO(eroman): Post the synchronous work to a background thread.
+// WebCryptoImpl is threadsafe.
+//
+// EnsureInit() must be called prior to using methods on WebCryptoImpl().
class WebCryptoImpl : public blink::WebCrypto {
public:
WebCryptoImpl();
+
virtual ~WebCryptoImpl();
+ static void EnsureInit();
+
virtual void encrypt(const blink::WebCryptoAlgorithm& algorithm,
const blink::WebCryptoKey& key,
const unsigned char* data,
diff --git a/content/child/webcrypto/webcrypto_util.cc b/content/child/webcrypto/webcrypto_util.cc
index f80fe32933..a46961c4e9 100644
--- a/content/child/webcrypto/webcrypto_util.cc
+++ b/content/child/webcrypto/webcrypto_util.cc
@@ -63,15 +63,22 @@ struct JwkToWebCryptoUsage {
const blink::WebCryptoKeyUsage webcrypto_usage;
};
+// Keep this ordered according to the definition
+// order of WebCrypto's "recognized key usage
+// values".
+//
+// This is not required for spec compliance,
+// however it makes the ordering of key_ops match
+// that of WebCrypto's Key.usages.
const JwkToWebCryptoUsage kJwkWebCryptoUsageMap[] = {
{"encrypt", blink::WebCryptoKeyUsageEncrypt},
{"decrypt", blink::WebCryptoKeyUsageDecrypt},
- {"deriveKey", blink::WebCryptoKeyUsageDeriveKey},
- // TODO(padolph): Add 'deriveBits' once supported by Blink.
{"sign", blink::WebCryptoKeyUsageSign},
- {"unwrapKey", blink::WebCryptoKeyUsageUnwrapKey},
{"verify", blink::WebCryptoKeyUsageVerify},
- {"wrapKey", blink::WebCryptoKeyUsageWrapKey}};
+ {"deriveKey", blink::WebCryptoKeyUsageDeriveKey},
+ {"deriveBits", blink::WebCryptoKeyUsageDeriveBits},
+ {"wrapKey", blink::WebCryptoKeyUsageWrapKey},
+ {"unwrapKey", blink::WebCryptoKeyUsageUnwrapKey}};
// Modifies the input usage_mask by according to the key_op value.
bool JwkKeyOpToWebCryptoUsage(const std::string& key_op,
@@ -114,13 +121,6 @@ base::ListValue* CreateJwkKeyOpsFromWebCryptoUsages(
return jwk_key_ops;
}
-bool IsHashAlgorithm(blink::WebCryptoAlgorithmId alg_id) {
- return alg_id == blink::WebCryptoAlgorithmIdSha1 ||
- alg_id == blink::WebCryptoAlgorithmIdSha256 ||
- alg_id == blink::WebCryptoAlgorithmIdSha384 ||
- alg_id == blink::WebCryptoAlgorithmIdSha512;
-}
-
blink::WebCryptoAlgorithm GetInnerHashAlgorithm(
const blink::WebCryptoAlgorithm& algorithm) {
DCHECK(!algorithm.isNull());
@@ -144,7 +144,7 @@ blink::WebCryptoAlgorithm CreateAlgorithm(blink::WebCryptoAlgorithmId id) {
blink::WebCryptoAlgorithm CreateHmacImportAlgorithm(
blink::WebCryptoAlgorithmId hash_id) {
- DCHECK(IsHashAlgorithm(hash_id));
+ DCHECK(blink::WebCryptoAlgorithm::isHash(hash_id));
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
blink::WebCryptoAlgorithmIdHmac,
new blink::WebCryptoHmacImportParams(CreateAlgorithm(hash_id)));
@@ -153,7 +153,7 @@ blink::WebCryptoAlgorithm CreateHmacImportAlgorithm(
blink::WebCryptoAlgorithm CreateRsaHashedImportAlgorithm(
blink::WebCryptoAlgorithmId id,
blink::WebCryptoAlgorithmId hash_id) {
- DCHECK(IsHashAlgorithm(hash_id));
+ DCHECK(blink::WebCryptoAlgorithm::isHash(hash_id));
DCHECK(id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 ||
id == blink::WebCryptoAlgorithmIdRsaOaep);
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
@@ -186,6 +186,22 @@ bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
}
}
+bool ContainsKeyUsages(blink::WebCryptoKeyUsageMask a,
+ blink::WebCryptoKeyUsageMask b) {
+ return (a & b) == b;
+}
+
+bool IsAlgorithmRsa(blink::WebCryptoAlgorithmId alg_id) {
+ return alg_id == blink::WebCryptoAlgorithmIdRsaOaep ||
+ alg_id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5;
+}
+
+bool IsAlgorithmAsymmetric(blink::WebCryptoAlgorithmId alg_id) {
+ // TODO(padolph): include all other asymmetric algorithms once they are
+ // defined, e.g. EC and DH.
+ return IsAlgorithmRsa(alg_id);
+}
+
} // namespace webcrypto
} // namespace content
diff --git a/content/child/webcrypto/webcrypto_util.h b/content/child/webcrypto/webcrypto_util.h
index 81d2c61cc1..f4a2a6f652 100644
--- a/content/child/webcrypto/webcrypto_util.h
+++ b/content/child/webcrypto/webcrypto_util.h
@@ -34,8 +34,8 @@ CONTENT_EXPORT bool Base64DecodeUrlSafe(const std::string& input,
// Returns an unpadded 'base64url' encoding of the input data, the opposite of
// Base64DecodeUrlSafe() above.
-std::string Base64EncodeUrlSafe(const base::StringPiece& input);
-std::string Base64EncodeUrlSafe(const std::vector<uint8>& input);
+CONTENT_EXPORT std::string Base64EncodeUrlSafe(const base::StringPiece& input);
+CONTENT_EXPORT std::string Base64EncodeUrlSafe(const std::vector<uint8>& input);
// Composes a Web Crypto usage mask from an array of JWK key_ops values.
CONTENT_EXPORT Status GetWebCryptoUsagesFromJwkKeyOps(
@@ -46,8 +46,6 @@ CONTENT_EXPORT Status GetWebCryptoUsagesFromJwkKeyOps(
base::ListValue* CreateJwkKeyOpsFromWebCryptoUsages(
blink::WebCryptoKeyUsageMask usage_mask);
-CONTENT_EXPORT bool IsHashAlgorithm(blink::WebCryptoAlgorithmId alg_id);
-
// Returns the "hash" param for an algorithm if it exists, otherwise returns
// a null algorithm.
blink::WebCryptoAlgorithm GetInnerHashAlgorithm(
@@ -73,6 +71,13 @@ bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
unsigned int keylen_bytes,
blink::WebCryptoKeyAlgorithm* key_algorithm);
+// Returns true if the set bits in b make up a subset of the set bits in a.
+bool ContainsKeyUsages(blink::WebCryptoKeyUsageMask a,
+ blink::WebCryptoKeyUsageMask b);
+
+bool IsAlgorithmRsa(blink::WebCryptoAlgorithmId alg_id);
+bool IsAlgorithmAsymmetric(blink::WebCryptoAlgorithmId alg_id);
+
} // namespace webcrypto
} // namespace content
diff --git a/content/child/webmessageportchannel_impl.cc b/content/child/webmessageportchannel_impl.cc
index 6e40b1c2cb..b32dde9bdb 100644
--- a/content/child/webmessageportchannel_impl.cc
+++ b/content/child/webmessageportchannel_impl.cc
@@ -86,6 +86,9 @@ std::vector<int> WebMessagePortChannelImpl::ExtractMessagePortIDs(
for (size_t i = 0; i < channels->size(); ++i) {
WebMessagePortChannelImpl* webchannel =
static_cast<WebMessagePortChannelImpl*>((*channels)[i]);
+ // The message port ids might not be set up yet if this channel
+ // wasn't created on the main thread.
+ DCHECK(webchannel->child_thread_loop_->BelongsToCurrentThread());
message_port_ids[i] = webchannel->message_port_id();
webchannel->QueueMessages();
DCHECK(message_port_ids[i] != MSG_ROUTING_NONE);
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
new file mode 100644
index 0000000000..88890f00fb
--- /dev/null
+++ b/content/common/BUILD.gn
@@ -0,0 +1,269 @@
+# 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.
+
+import("//build/config/features.gni")
+import("//build/config/ui.gni")
+import("//content/common/common.gni")
+import("//mojo/public/tools/bindings/mojom.gni")
+
+source_set("common") {
+ # Only targets in the content tree can depend directly on this target.
+ visibility = [ "//content/*" ]
+
+ sources = rebase_path(content_common_gypi_values.private_common_sources,
+ ".", "//content")
+
+ forward_dependent_configs_from = [
+ "//gpu/command_buffer/common",
+ "//third_party/WebKit/public:blink_headers",
+ ]
+
+ configs += [
+ "//content:content_implementation",
+ "//content:libjingle_stub_config",
+ ]
+
+ deps = [
+ "//base",
+ "//build/util:webkit_version",
+ "//components/tracing",
+ "//gpu/command_buffer/common",
+ "//net",
+ "//skia",
+ "//third_party/icu",
+ "//ui/accessibility",
+ "//ui/base",
+ "//ui/gfx",
+ "//ui/gfx/geometry",
+ "//url",
+ "//third_party/WebKit/public:blink_headers",
+ # TODO(GYP) convert these dependencies.
+ #'../third_party/libjingle/libjingle.gyp:libjingle',
+ #'../ui/shell_dialogs/shell_dialogs.gyp:shell_dialogs',
+ ]
+
+ if (!is_ios) {
+ deps += [
+ "//ipc",
+ "//gpu/command_buffer/client:gles2_c_lib",
+ "//gpu/command_buffer/client:gles2_implementation",
+ "//ui/gl",
+ #'../cc/cc.gyp:cc',
+ #'../gpu/gpu.gyp:command_buffer_service',
+ # TODO: the dependency on gl_in_process_context should be decoupled from
+ # content and moved to android_webview. See crbug.com/365797.
+ #'../gpu/gpu.gyp:gl_in_process_context',
+ #'../gpu/gpu.gyp:gpu_ipc',
+ #'../gpu/skia_bindings/skia_bindings.gyp:gpu_skia_bindings',
+ #'../media/media.gyp:media',
+ #'../media/media.gyp:shared_memory_support',
+ #'../mojo/mojo.gyp:mojo_environment_chromium',
+ #'../mojo/mojo.gyp:mojo_system_impl',
+ #'../third_party/WebKit/public/blink.gyp:blink',
+ #'../webkit/common/gpu/webkit_gpu.gyp:webkit_gpu',
+ #'../webkit/common/webkit_common.gyp:webkit_common',
+ #'../webkit/storage_browser.gyp:webkit_storage_browser',
+ #'../webkit/storage_common.gyp:webkit_storage_common',
+ ]
+ }
+
+ defines = []
+ include_dirs = []
+ libs = []
+ ldflags = []
+
+ if (is_android && use_seccomp_bpf) {
+ set_sources_assignment_filter([])
+ sources += [
+ "sandbox_linux/sandbox_bpf_base_policy_linux.cc",
+ "sandbox_linux/sandbox_bpf_base_policy_linux.h",
+ ]
+ set_sources_assignment_filter(sources_assignment_filter)
+ }
+
+ if (is_mac) {
+ sources += [
+ "gpu/client/gpu_memory_buffer_impl_io_surface.cc",
+ "gpu/client/gpu_memory_buffer_impl_io_surface.h",
+ ]
+ sources -= [
+ "plugin_list_posix.cc",
+ ]
+
+ # TODO(GYP) enable when converted to GN.
+ #deps += [
+ # "//webkit:webkit_resources",
+ #]
+ libs += [ "QuartzCore.framework" ]
+ }
+
+ if (is_android) {
+ sources += [
+ "gpu/client/gpu_memory_buffer_impl_surface_texture.cc",
+ "gpu/client/gpu_memory_buffer_impl_surface_texture.h",
+ ]
+
+ # TODO(GYP) enable when these targets are converted.
+ #deps += [
+ # "//content:content_jni_headers",
+ # "//content:common_aidl",
+ #]
+
+ libs += [ "android" ]
+ }
+
+ if (is_ios) {
+ sources -= [ "user_agent.cc" ]
+ assert(false, "Need to add lots of conditions here")
+ }
+
+ if (!use_ozone) {
+ sources -= [
+ "cursors/webcursor_ozone.cc",
+ "font_list_ozone.cc",
+ ]
+ }
+
+ if (!use_aura || !use_x11) {
+ sources -= [ "cursors/webcursor_aurax11.cc" ]
+ }
+
+ if (use_pango) {
+ configs += [ "//build/config/linux:pangocairo" ]
+ if (use_ozone) {
+ # If we're using pango, never use this ozone file (it was removed in all
+ # non-ozone cases above).
+ sources -= [ "font_list_ozone.cc" ]
+ }
+ } else {
+ sources -= [
+ "font_list_pango.cc",
+ ]
+ }
+
+ if (use_x11) {
+ include_dirs += [ "//third_party/khronos" ]
+ configs += [ "//build/config/linux:xcomposite" ]
+
+ if (cpu_arch != "arm" || !is_chromeos) {
+ sources +=[
+ "gpu/x_util.cc",
+ "gpu/x_util.h",
+ ]
+ }
+ }
+
+ if (enable_plugins) {
+ deps += [
+ # TODO(GYP) enable once supported in the GN build.
+ #"//ppapi:shared",
+ ]
+ } else {
+ sources -= [
+ "pepper_plugin_list.cc",
+ "pepper_plugin_list.h",
+ "sandbox_util.cc",
+ ]
+ }
+
+ if (is_android) {
+ sources += [
+ "gpu/media/android_video_decode_accelerator.cc",
+ "gpu/media/android_video_decode_accelerator.h",
+ ]
+ deps += [
+ # TODO(GYP) enable once supported in the GN build.
+ #"//media",
+ ]
+
+ if (enable_webrtc) {
+ deps += [ "//third_party/libyuv" ]
+ }
+ }
+
+ if (is_chromeos && use_x11) {
+ if (cpu_arch == "arm") {
+ sources += [
+ "gpu/media/exynos_v4l2_video_device.cc",
+ "gpu/media/exynos_v4l2_video_device.h",
+ "gpu/media/tegra_v4l2_video_device.cc",
+ "gpu/media/tegra_v4l2_video_device.h",
+ "gpu/media/v4l2_image_processor.cc",
+ "gpu/media/v4l2_image_processor.h",
+ "gpu/media/v4l2_video_decode_accelerator.cc",
+ "gpu/media/v4l2_video_decode_accelerator.h",
+ "gpu/media/v4l2_video_device.cc",
+ "gpu/media/v4l2_video_device.h",
+ "gpu/media/v4l2_video_encode_accelerator.cc",
+ "gpu/media/v4l2_video_encode_accelerator.h",
+ ]
+ # TODO(GYP) enable once supported in the GN build.
+ #deps += [ "//media" ]
+ libs = [ "EGL", "GLESv2" ]
+ } else { # !arm
+ sources += [
+ "gpu/media/h264_dpb.cc",
+ "gpu/media/h264_dpb.h",
+ "gpu/media/va_surface.h",
+ "gpu/media/vaapi_h264_decoder.cc",
+ "gpu/media/vaapi_h264_decoder.h",
+ "gpu/media/vaapi_video_decode_accelerator.cc",
+ "gpu/media/vaapi_video_decode_accelerator.h",
+ "gpu/media/vaapi_wrapper.cc",
+ "gpu/media/vaapi_wrapper.h",
+ ]
+ assert(false, "Implement generate_stubs for libva")
+ }
+ }
+
+ if (is_win) {
+ sources += [
+ "gpu/media/dxva_video_decode_accelerator.cc",
+ "gpu/media/dxva_video_decode_accelerator.h",
+ ]
+ include_dirs += [ "//third_party/khronos" ]
+ deps += [
+ # TODO(GYP) enable once supported in the GN build.
+ #"//media",
+ "//ui/gl",
+ ]
+
+ # TODO(GYP): extract_xinput action.
+ }
+
+ if (!is_win || !use_aura) {
+ sources -= [ "cursors/webcursor_aurawin.cc" ]
+ }
+
+ if (use_seccomp_bpf) {
+ defines += [ "USE_SECCOMP_BPF" ]
+ } else {
+ if (is_linux) {
+ sources -= [
+ "sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc",
+ "sandbox_linux/bpf_cros_arm_gpu_policy_linux.h",
+ "sandbox_linux/bpf_gpu_policy_linux.cc",
+ "sandbox_linux/bpf_gpu_policy_linux.h",
+ "sandbox_linux/bpf_ppapi_policy_linux.cc",
+ "sandbox_linux/bpf_ppapi_policy_linux.h",
+ "sandbox_linux/bpf_renderer_policy_linux.cc",
+ "sandbox_linux/bpf_renderer_policy_linux.h",
+ "sandbox_linux/sandbox_bpf_base_policy_linux.cc",
+ "sandbox_linux/sandbox_bpf_base_policy_linux.h",
+ ]
+ }
+ if (is_android) {
+ sources -= [
+ "sandbox_linux/android/sandbox_bpf_base_policy_android.cc",
+ "sandbox_linux/android/sandbox_bpf_base_policy_android.h",
+ ]
+ }
+ }
+}
+
+mojom("mojo_bindings") {
+ sources = [
+ "web_ui_setup.mojom",
+ ]
+}
diff --git a/content/common/DEPS b/content/common/DEPS
index 645304d8a1..afbcc16c77 100644
--- a/content/common/DEPS
+++ b/content/common/DEPS
@@ -8,6 +8,7 @@ include_rules = [
# No inclusion of WebKit from the browser, other than strictly enum/POD,
# header-only types, and some selected common code.
"-third_party/WebKit",
+ "+third_party/WebKit/public/platform/WebBatteryStatus.h",
"+third_party/WebKit/public/platform/WebCString.h",
"+third_party/WebKit/public/platform/WebDeviceMotionData.h",
"+third_party/WebKit/public/platform/WebDeviceOrientationData.h",
diff --git a/content/common/accessibility_messages.h b/content/common/accessibility_messages.h
index 1830a1b4d1..3a9ccb7ee3 100644
--- a/content/common/accessibility_messages.h
+++ b/content/common/accessibility_messages.h
@@ -105,11 +105,15 @@ IPC_MESSAGE_ROUTED3(AccessibilityMsg_SetTextSelection,
int /* New start offset */,
int /* New end offset */)
+// Determine the accessibility object under a given point and reply with
+// a AccessibilityHostMsg_HitTestResult with the same id.
+IPC_MESSAGE_ROUTED1(AccessibilityMsg_HitTest,
+ gfx::Point /* location to test */);
+
// Tells the render view that a AccessibilityHostMsg_Events
// message was processed and it can send addition events.
IPC_MESSAGE_ROUTED0(AccessibilityMsg_Events_ACK)
-
// Kill the renderer because we got a fatal error in the accessibility tree.
IPC_MESSAGE_ROUTED0(AccessibilityMsg_FatalError)
diff --git a/content/common/android/OWNERS b/content/common/android/OWNERS
index 29d0acf8c4..11d36ee957 100644
--- a/content/common/android/OWNERS
+++ b/content/common/android/OWNERS
@@ -1,3 +1,4 @@
+benm@chromium.org
bulach@chromium.org
tedchoc@chromium.org
yfriedman@chromium.org
diff --git a/content/common/battery_status_messages.h b/content/common/battery_status_messages.h
new file mode 100644
index 0000000000..dd09ed0ca2
--- /dev/null
+++ b/content/common/battery_status_messages.h
@@ -0,0 +1,32 @@
+// 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.
+
+// IPC messages for Battery Status API.
+// Multiply-included message file, hence no include guard.
+
+#include "ipc/ipc_message_macros.h"
+#include "third_party/WebKit/public/platform/WebBatteryStatus.h"
+
+#undef IPC_MESSAGE_EXPORT
+#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
+#define IPC_MESSAGE_START BatteryStatusMsgStart
+
+IPC_STRUCT_TRAITS_BEGIN(blink::WebBatteryStatus)
+ IPC_STRUCT_TRAITS_MEMBER(charging)
+ IPC_STRUCT_TRAITS_MEMBER(chargingTime)
+ IPC_STRUCT_TRAITS_MEMBER(dischargingTime)
+ IPC_STRUCT_TRAITS_MEMBER(level)
+IPC_STRUCT_TRAITS_END()
+
+// Notifies the browser process that the renderer process wants
+// to listen to battery status updates.
+IPC_MESSAGE_CONTROL0(BatteryStatusHostMsg_Start)
+
+// Notifies the render process with new battery status data.
+IPC_MESSAGE_CONTROL1(BatteryStatusMsg_DidChange,
+ blink::WebBatteryStatus /* new status */)
+
+// Notifies the browser process that the renderer process is not using the
+// battery status data anymore.
+IPC_MESSAGE_CONTROL0(BatteryStatusHostMsg_Stop)
diff --git a/content/common/browser_plugin/browser_plugin_constants.cc b/content/common/browser_plugin/browser_plugin_constants.cc
index 4b413d301b..ee86b05b49 100644
--- a/content/common/browser_plugin/browser_plugin_constants.cc
+++ b/content/common/browser_plugin/browser_plugin_constants.cc
@@ -8,31 +8,14 @@ namespace content {
namespace browser_plugin {
-// Method bindings.
-const char kMethodBack[] = "back";
-const char kMethodCanGoBack[] = "canGoBack";
-const char kMethodCanGoForward[] = "canGoForward";
-const char kMethodForward[] = "forward";
-const char kMethodGetInstanceId[] = "getInstanceId";
-const char kMethodGetGuestInstanceId[] = "getGuestInstanceId";
-const char kMethodGo[] = "go";
-const char kMethodReload[] = "reload";
-const char kMethodStop[] = "stop";
-const char kMethodTerminate[] = "terminate";
-
// Internal method bindings.
const char kMethodInternalAttach[] = "-internal-attach";
-const char kMethodInternalAttachWindowTo[] = "-internal-attachWindowTo";
-const char kMethodInternalTrackObjectLifetime[] =
- "-internal-trackObjectLifetime";
// Internal events.
const char kEventInternalInstanceIDAllocated[] = "instanceid-allocated";
-const char kEventInternalTrackedObjectGone[] = "trackedobjectgone";
// Attributes.
const char kAttributeAllowTransparency[] = "allowtransparency";
-const char kAttributeApi[] = "api";
const char kAttributeAutoSize[] = "autosize";
const char kAttributeContentWindow[] = "contentWindow";
const char kAttributeMaxHeight[] = "maxheight";
@@ -44,26 +27,8 @@ const char kAttributePartition[] = "partition";
const char kAttributeSrc[] = "src";
// Parameters/properties on events.
-const char kId[] = "id";
-const char kInitialHeight[] = "initialHeight";
-const char kInitialWidth[] = "initialWidth";
-const char kLastUnlockedBySelf[] = "lastUnlockedBySelf";
-const char kName[] = "name";
-const char kPermission[] = "permission";
-const char kPermissionTypeDialog[] = "dialog";
-const char kPermissionTypeDownload[] = "download";
-const char kPermissionTypeGeolocation[] = "geolocation";
-const char kPermissionTypeMedia[] = "media";
-const char kPermissionTypeNewWindow[] = "newwindow";
-const char kPermissionTypePointerLock[] = "pointerLock";
const char kPersistPrefix[] = "persist:";
-const char kProcessId[] = "processId";
-const char kRequestId[] = "requestId";
-const char kRequestMethod[] = "requestMethod";
-const char kTargetURL[] = "targetUrl";
-const char kURL[] = "url";
const char kWindowID[] = "windowId";
-const char kWindowOpenDisposition[] = "windowOpenDisposition";
// Error messages.
const char kErrorAlreadyNavigated[] =
@@ -74,7 +39,6 @@ const char kErrorCannotRemovePartition[] =
"Cannot remove partition attribute after navigating.";
// Other.
-const char kBrowserPluginGuestManagerKeyName[] = "browser_plugin_guest_manager";
const int kInstanceIDNone = 0;
const int kInvalidPermissionRequestID = 0;
diff --git a/content/common/browser_plugin/browser_plugin_constants.h b/content/common/browser_plugin/browser_plugin_constants.h
index efcc8be015..973cad3b66 100644
--- a/content/common/browser_plugin/browser_plugin_constants.h
+++ b/content/common/browser_plugin/browser_plugin_constants.h
@@ -9,30 +9,14 @@ namespace content {
namespace browser_plugin {
-// Method bindings.
-extern const char kMethodBack[];
-extern const char kMethodCanGoBack[];
-extern const char kMethodCanGoForward[];
-extern const char kMethodForward[];
-extern const char kMethodGetGuestInstanceId[];
-extern const char kMethodGetInstanceId[];
-extern const char kMethodGo[];
-extern const char kMethodReload[];
-extern const char kMethodStop[];
-extern const char kMethodTerminate[];
-
// Internal method bindings.
extern const char kMethodInternalAttach[];
-extern const char kMethodInternalAttachWindowTo[];
-extern const char kMethodInternalTrackObjectLifetime[];
// Internal events
extern const char kEventInternalInstanceIDAllocated[];
-extern const char kEventInternalTrackedObjectGone[];
// Attributes.
extern const char kAttributeAllowTransparency[];
-extern const char kAttributeApi[];
extern const char kAttributeAutoSize[];
extern const char kAttributeContentWindow[];
extern const char kAttributeMaxHeight[];
@@ -44,26 +28,8 @@ extern const char kAttributePartition[];
extern const char kAttributeSrc[];
// Parameters/properties on events.
-extern const char kId[];
-extern const char kInitialHeight[];
-extern const char kInitialWidth[];
-extern const char kLastUnlockedBySelf[];
-extern const char kName[];
-extern const char kPermission[];
-extern const char kPermissionTypeDialog[];
-extern const char kPermissionTypeDownload[];
-extern const char kPermissionTypeGeolocation[];
-extern const char kPermissionTypeMedia[];
-extern const char kPermissionTypeNewWindow[];
-extern const char kPermissionTypePointerLock[];
extern const char kPersistPrefix[];
-extern const char kProcessId[];
-extern const char kRequestId[];
-extern const char kRequestMethod[];
-extern const char kTargetURL[];
-extern const char kURL[];
extern const char kWindowID[];
-extern const char kWindowOpenDisposition[];
// Error messages.
extern const char kErrorAlreadyNavigated[];
@@ -71,7 +37,6 @@ extern const char kErrorInvalidPartition[];
extern const char kErrorCannotRemovePartition[];
// Other.
-extern const char kBrowserPluginGuestManagerKeyName[];
extern const int kInstanceIDNone;
extern const int kInvalidPermissionRequestID;
diff --git a/content/common/browser_plugin/browser_plugin_messages.h b/content/common/browser_plugin/browser_plugin_messages.h
index 60d0a91ae2..32e8f29bd6 100644
--- a/content/common/browser_plugin/browser_plugin_messages.h
+++ b/content/common/browser_plugin/browser_plugin_messages.h
@@ -14,7 +14,6 @@
#include "content/common/cursors/webcursor.h"
#include "content/common/edit_command.h"
#include "content/common/frame_param_macros.h"
-#include "content/public/common/browser_plugin_permission_type.h"
#include "content/public/common/common_param_traits.h"
#include "content/public/common/drop_data.h"
#include "ipc/ipc_channel_handle.h"
@@ -62,7 +61,6 @@ IPC_STRUCT_BEGIN(BrowserPluginHostMsg_Attach_Params)
IPC_STRUCT_MEMBER(bool, focused)
IPC_STRUCT_MEMBER(bool, visible)
IPC_STRUCT_MEMBER(bool, opaque)
- IPC_STRUCT_MEMBER(std::string, name)
IPC_STRUCT_MEMBER(std::string, src)
IPC_STRUCT_MEMBER(GURL, embedder_frame_url)
IPC_STRUCT_MEMBER(BrowserPluginHostMsg_AutoSize_Params, auto_size_params)
@@ -73,7 +71,6 @@ IPC_STRUCT_END()
IPC_STRUCT_BEGIN(BrowserPluginMsg_Attach_ACK_Params)
IPC_STRUCT_MEMBER(std::string, storage_partition_id)
IPC_STRUCT_MEMBER(bool, persist_storage)
- IPC_STRUCT_MEMBER(std::string, name)
IPC_STRUCT_END()
IPC_STRUCT_BEGIN(BrowserPluginMsg_UpdateRect_Params)
@@ -210,11 +207,6 @@ IPC_MESSAGE_ROUTED5(BrowserPluginHostMsg_DragStatusUpdate,
blink::WebDragOperationsMask /* operation_mask */,
gfx::Point /* plugin_location */)
-// Sets the name of the guest window to the provided |name|.
-IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetName,
- int /* instance_id */,
- std::string /* name */)
-
// Sends a PointerLock Lock ACK to the BrowserPluginGuest.
IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_LockMouse_ACK,
int /* instance_id */,
@@ -295,11 +287,6 @@ IPC_MESSAGE_CONTROL4(BrowserPluginMsg_CopyFromCompositingSurface,
gfx::Rect /* source_rect */,
gfx::Size /* dest_size */)
-// Informs BrowserPlugin of a new name set for the top-level guest frame.
-IPC_MESSAGE_CONTROL2(BrowserPluginMsg_UpdatedName,
- int /* instance_id */,
- std::string /* name */)
-
// Guest renders into an FBO with textures provided by the embedder.
// BrowserPlugin shares mostly the same logic as out-of-process RenderFrames but
// because BrowserPlugins implement custom a second level of routing logic,
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index 87201c4632..8d93e1f974 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -4,7 +4,6 @@
#include "content/common/cc_messages.h"
-#include "base/command_line.h"
#include "cc/output/compositor_frame.h"
#include "cc/output/filter_operations.h"
#include "content/public/common/common_param_traits.h"
@@ -216,8 +215,7 @@ void ParamTraits<cc::FilterOperations>::Log(
void ParamTraits<skia::RefPtr<SkImageFilter> >::Write(
Message* m, const param_type& p) {
SkImageFilter* filter = p.get();
- const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- if (filter && !command_line.HasSwitch(switches::kDisableFiltersOverIPC)) {
+ if (filter) {
skia::RefPtr<SkData> data =
skia::AdoptRef(SkValidatingSerializeFlattenable(filter));
m->WriteData(static_cast<const char*>(data->data()), data->size());
@@ -232,9 +230,7 @@ bool ParamTraits<skia::RefPtr<SkImageFilter> >::Read(
int length = 0;
if (!m->ReadData(iter, &data, &length))
return false;
- const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- if ((length > 0) &&
- !command_line.HasSwitch(switches::kDisableFiltersOverIPC)) {
+ if (length > 0) {
SkFlattenable* flattenable = SkValidatingDeserializeFlattenable(
data, length, SkImageFilter::GetFlattenableType());
*r = skia::AdoptRef(static_cast<SkImageFilter*>(flattenable));
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc
index ee656292bf..e840596534 100644
--- a/content/common/cc_messages_unittest.cc
+++ b/content/common/cc_messages_unittest.cc
@@ -267,7 +267,7 @@ TEST_F(CCMessagesTest, AllQuads) {
arbitrary_filters1.Append(FilterOperation::CreateGrayscaleFilter(
arbitrary_float1));
skia::RefPtr<SkImageFilter> arbitrary_filter = skia::AdoptRef(
- new SkBlurImageFilter(arbitrary_sigma, arbitrary_sigma));
+ SkBlurImageFilter::Create(arbitrary_sigma, arbitrary_sigma));
arbitrary_filters1.Append(
cc::FilterOperation::CreateReferenceFilter(arbitrary_filter));
diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc
index 488cdb0613..1dccab0838 100644
--- a/content/common/child_process_host_impl.cc
+++ b/content/common/child_process_host_impl.cc
@@ -164,8 +164,7 @@ void ChildProcessHostImpl::ForceShutdown() {
std::string ChildProcessHostImpl::CreateChannel() {
channel_id_ = IPC::Channel::GenerateVerifiedChannelID(std::string());
- channel_.reset(new IPC::Channel(
- channel_id_, IPC::Channel::MODE_SERVER, this));
+ channel_ = IPC::Channel::CreateServer(channel_id_, this);
if (!channel_->Connect())
return std::string();
@@ -293,6 +292,10 @@ void ChildProcessHostImpl::OnChannelError() {
delegate_->OnChildDisconnected();
}
+void ChildProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) {
+ delegate_->OnBadMessageReceived(message);
+}
+
void ChildProcessHostImpl::OnAllocateSharedMemory(
uint32 buffer_size,
base::SharedMemoryHandle* handle) {
diff --git a/content/common/child_process_host_impl.h b/content/common/child_process_host_impl.h
index 4ac660d185..d8a2032350 100644
--- a/content/common/child_process_host_impl.h
+++ b/content/common/child_process_host_impl.h
@@ -76,6 +76,7 @@ class CONTENT_EXPORT ChildProcessHostImpl : public ChildProcessHost,
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
virtual void OnChannelError() OVERRIDE;
+ virtual void OnBadMessageReceived(const IPC::Message& message) OVERRIDE;
// Message handlers:
void OnShutdownRequest();
diff --git a/content/common/common.gni b/content/common/common.gni
new file mode 100644
index 0000000000..36cb33960f
--- /dev/null
+++ b/content/common/common.gni
@@ -0,0 +1,14 @@
+# 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.
+
+# This file defines the content common gypi values. This file is read once and
+# cached, which is a performance optimization that allows us to share the
+# results of parsing the .gypi file between the public and private BUILD.gn
+# files. It also saves us from duplicating this exec_script call.
+content_common_gypi_values = exec_script(
+ "//build/gypi_to_gn.py",
+ [ rebase_path("../content_common.gypi") ],
+ "scope",
+ [ "../content_common.gypi" ])
+
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h
index 07943e8510..dd0f096459 100644
--- a/content/common/content_message_generator.h
+++ b/content/common/content_message_generator.h
@@ -8,6 +8,7 @@
#include "content/common/accessibility_messages.h"
#include "content/common/appcache_messages.h"
+#include "content/common/battery_status_messages.h"
#include "content/common/browser_plugin/browser_plugin_messages.h"
#include "content/common/cc_messages.h"
#include "content/common/clipboard_messages.h"
@@ -31,6 +32,8 @@
#include "content/common/input_messages.h"
#include "content/common/java_bridge_messages.h"
#include "content/common/media/audio_messages.h"
+// TODO(xhwang): Move this to a new ifdef block.
+#include "content/common/media/cdm_messages.h"
#include "content/common/media/media_stream_messages.h"
#include "content/common/media/media_stream_track_metrics_host_messages.h"
#include "content/common/media/midi_messages.h"
@@ -61,6 +64,5 @@
#if defined(OS_ANDROID)
#include "content/common/gin_java_bridge_messages.h"
-#include "content/common/media/cdm_messages.h"
#include "content/common/media/media_player_messages_android.h"
#endif // defined(OS_ANDROID)
diff --git a/content/common/content_param_traits_macros.h b/content/common/content_param_traits_macros.h
index 633c14ce3f..ebb83483e3 100644
--- a/content/common/content_param_traits_macros.h
+++ b/content/common/content_param_traits_macros.h
@@ -14,7 +14,6 @@
#include "third_party/WebKit/public/web/WebContentSecurityPolicy.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "third_party/WebKit/public/web/WebPageVisibilityState.h"
-#include "ui/events/latency_info.h"
#include "webkit/common/resource_type.h"
#undef IPC_MESSAGE_EXPORT
@@ -28,8 +27,6 @@ IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebInputEvent::Type,
blink::WebInputEvent::TypeLast)
IPC_ENUM_TRAITS_MAX_VALUE(blink::WebPageVisibilityState,
blink::WebPageVisibilityStateLast)
-IPC_ENUM_TRAITS_MAX_VALUE(ui::LatencyComponentType,
- ui::LATENCY_COMPONENT_TYPE_LAST)
IPC_STRUCT_TRAITS_BEGIN(blink::WebCompositionUnderline)
IPC_STRUCT_TRAITS_MEMBER(startOffset)
@@ -38,16 +35,4 @@ IPC_STRUCT_TRAITS_BEGIN(blink::WebCompositionUnderline)
IPC_STRUCT_TRAITS_MEMBER(thick)
IPC_STRUCT_TRAITS_END()
-IPC_STRUCT_TRAITS_BEGIN(ui::LatencyInfo::LatencyComponent)
- IPC_STRUCT_TRAITS_MEMBER(sequence_number)
- IPC_STRUCT_TRAITS_MEMBER(event_time)
- IPC_STRUCT_TRAITS_MEMBER(event_count)
-IPC_STRUCT_TRAITS_END()
-
-IPC_STRUCT_TRAITS_BEGIN(ui::LatencyInfo)
- IPC_STRUCT_TRAITS_MEMBER(latency_components)
- IPC_STRUCT_TRAITS_MEMBER(trace_id)
- IPC_STRUCT_TRAITS_MEMBER(terminated)
-IPC_STRUCT_TRAITS_END()
-
#endif // CONTENT_COMMON_CONTENT_PARAM_TRAITS_MACROS_H_
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 38f4e199fd..2fd20c73e8 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -301,9 +301,10 @@ IPC_MESSAGE_ROUTED1(FrameMsg_Navigate, FrameMsg_Navigate_Params)
IPC_MESSAGE_ROUTED0(FrameMsg_BeforeUnload)
// Instructs the frame to swap out for a cross-site transition, including
-// running the unload event handler. Expects a SwapOut_ACK message when
-// finished.
-IPC_MESSAGE_ROUTED0(FrameMsg_SwapOut)
+// running the unload event handler and creating a RenderFrameProxy with the
+// given |proxy_routing_id|. Expects a SwapOut_ACK message when finished.
+IPC_MESSAGE_ROUTED1(FrameMsg_SwapOut,
+ int /* proxy_routing_id */)
// Request for the renderer to insert CSS into the frame.
IPC_MESSAGE_ROUTED1(FrameMsg_CSSInsertRequest,
@@ -353,6 +354,10 @@ IPC_MESSAGE_ROUTED2(FrameMsg_DidChooseColorResponse, unsigned, SkColor)
// Notifies the color chooser client that the color chooser has ended.
IPC_MESSAGE_ROUTED1(FrameMsg_DidEndColorChooser, unsigned)
+// Notifies the corresponding RenderFrameProxy object to replace itself with the
+// RenderFrame object it is associated with.
+IPC_MESSAGE_ROUTED0(FrameMsg_DeleteProxy)
+
// -----------------------------------------------------------------------------
// Messages sent from the renderer to the browser.
@@ -409,18 +414,19 @@ IPC_MESSAGE_ROUTED3(FrameHostMsg_DidFailLoadWithError,
int /* error_code */,
base::string16 /* error_description */)
-// Sent when the renderer starts loading the page. This corresponds to
-// Blink's notion of the throbber starting. Note that sometimes you may get
-// duplicates of these during a single load.
-// |to_different_document| will be true unless the load is a fragment
-// navigation, or triggered by history.pushState/replaceState.
+// Sent when the renderer starts loading the page. |to_different_document| will
+// be true unless the load is a fragment navigation, or triggered by
+// history.pushState/replaceState.
IPC_MESSAGE_ROUTED1(FrameHostMsg_DidStartLoading,
bool /* to_different_document */)
-// Sent when the renderer is done loading a page. This corresponds to Blink's
-// notion of the throbber stopping.
+// Sent when the renderer is done loading a page.
IPC_MESSAGE_ROUTED0(FrameHostMsg_DidStopLoading)
+// Sent when the renderer changed the progress of a load.
+IPC_MESSAGE_ROUTED1(FrameHostMsg_DidChangeLoadProgress,
+ double /* load_progress */)
+
// Requests that the given URL be opened in the specified manner.
IPC_MESSAGE_ROUTED1(FrameHostMsg_OpenURL, FrameHostMsg_OpenURL_Params)
@@ -441,6 +447,18 @@ IPC_MESSAGE_ROUTED0(FrameHostMsg_DidAccessInitialDocument)
// the window. Sent for top-level frames.
IPC_MESSAGE_ROUTED0(FrameHostMsg_DidDisownOpener)
+// Changes the title for the page in the UI when the page is navigated or the
+// title changes. Sent for top-level frames.
+IPC_MESSAGE_ROUTED3(FrameHostMsg_UpdateTitle,
+ int32 /* page_id */,
+ base::string16 /* title */,
+ blink::WebTextDirection /* title direction */)
+
+// Change the encoding name of the page in UI when the page has detected
+// proper encoding name. Sent for top-level frames.
+IPC_MESSAGE_ROUTED1(FrameHostMsg_UpdateEncoding,
+ std::string /* new encoding name */)
+
// Following message is used to communicate the values received by the
// callback binding the JS to Cpp.
// An instance of browser that has an automation host listening to it can
diff --git a/content/common/geolocation_messages.h b/content/common/geolocation_messages.h
index 8582828916..55b4bd7736 100644
--- a/content/common/geolocation_messages.h
+++ b/content/common/geolocation_messages.h
@@ -42,33 +42,28 @@ IPC_MESSAGE_ROUTED1(GeolocationMsg_PositionUpdated,
// Messages sent from the renderer to the browser.
-// The |render_view_id| and |bridge_id| representing |host| is requesting
-// permission to access geolocation position.
-// This will be replied by GeolocationMsg_PermissionSet.
-IPC_MESSAGE_CONTROL4(GeolocationHostMsg_RequestPermission,
- int /* render_view_id */,
+// The |bridge_id| representing |host| is requesting permission to access
+// geolocation position. This will be replied by GeolocationMsg_PermissionSet.
+IPC_MESSAGE_ROUTED3(GeolocationHostMsg_RequestPermission,
int /* bridge_id */,
GURL /* GURL of the frame requesting geolocation */,
bool /* user_gesture */)
-// The |render_view_id| and |bridge_id| representing |GURL| is cancelling its
-// previous permission request to access geolocation position.
-IPC_MESSAGE_CONTROL3(GeolocationHostMsg_CancelPermissionRequest,
- int /* render_view_id */,
- int /* bridge_id */,
- GURL /* GURL of the frame */)
+// The |bridge_id| representing |GURL| is cancelling its previous permission
+// request to access geolocation position.
+IPC_MESSAGE_ROUTED2(GeolocationHostMsg_CancelPermissionRequest,
+ int /* bridge_id */,
+ GURL /* GURL of the frame */)
-// The |render_view_id| requests Geolocation service to start updating.
+// The render view requests the Geolocation service to start updating.
// This is an asynchronous call, and the browser process may eventually reply
// with the updated geoposition, or an error (access denied, location
// unavailable, etc.)
-IPC_MESSAGE_CONTROL3(GeolocationHostMsg_StartUpdating,
- int /* render_view_id */,
+IPC_MESSAGE_ROUTED2(GeolocationHostMsg_StartUpdating,
GURL /* GURL of the frame requesting geolocation */,
bool /* enable_high_accuracy */)
-// The |render_view_id| requests Geolocation service to stop updating.
+// The render view requests Geolocation service to stop updating.
// Note that the geolocation service may continue to fetch geolocation data
// for other origins.
-IPC_MESSAGE_CONTROL1(GeolocationHostMsg_StopUpdating,
- int /* render_view_id */)
+IPC_MESSAGE_ROUTED0(GeolocationHostMsg_StopUpdating)
diff --git a/content/common/gpu/client/command_buffer_proxy_impl.cc b/content/common/gpu/client/command_buffer_proxy_impl.cc
index 59153d6fd5..e2bd974c4d 100644
--- a/content/common/gpu/client/command_buffer_proxy_impl.cc
+++ b/content/common/gpu/client/command_buffer_proxy_impl.cc
@@ -128,6 +128,7 @@ void CommandBufferProxyImpl::SetChannelErrorCallback(
}
bool CommandBufferProxyImpl::Initialize() {
+ TRACE_EVENT0("gpu", "CommandBufferProxyImpl::Initialize");
shared_state_shm_.reset(channel_->factory()->AllocateSharedMemory(
sizeof(*shared_state())).release());
if (!shared_state_shm_)
diff --git a/content/common/gpu/client/gl_helper.cc b/content/common/gpu/client/gl_helper.cc
index 4058d4f5c0..c61737bce3 100644
--- a/content/common/gpu/client/gl_helper.cc
+++ b/content/common/gpu/client/gl_helper.cc
@@ -683,7 +683,8 @@ void GLHelper::CropScaleReadbackAndCleanTexture(
const gfx::Size& dst_size,
unsigned char* out,
const SkBitmap::Config config,
- const base::Callback<void(bool)>& callback) {
+ const base::Callback<void(bool)>& callback,
+ GLHelper::ScalerQuality quality) {
InitCopyTextToImpl();
copy_texture_to_impl_->CropScaleReadbackAndCleanTexture(
src_texture,
@@ -693,7 +694,7 @@ void GLHelper::CropScaleReadbackAndCleanTexture(
out,
config,
callback,
- GLHelper::SCALER_QUALITY_FAST);
+ quality);
}
void GLHelper::CropScaleReadbackAndCleanMailbox(
@@ -704,12 +705,14 @@ void GLHelper::CropScaleReadbackAndCleanMailbox(
const gfx::Size& dst_size,
unsigned char* out,
const SkBitmap::Config bitmap_config,
- const base::Callback<void(bool)>& callback) {
+ const base::Callback<void(bool)>& callback,
+ GLHelper::ScalerQuality quality) {
GLuint mailbox_texture = ConsumeMailboxToTexture(src_mailbox, sync_point);
CropScaleReadbackAndCleanTexture(
mailbox_texture, src_size, src_subrect, dst_size, out,
bitmap_config,
- callback);
+ callback,
+ quality);
gl_->DeleteTextures(1, &mailbox_texture);
}
diff --git a/content/common/gpu/client/gl_helper.h b/content/common/gpu/client/gl_helper.h
index 81e3aa04ed..4169c8b6da 100644
--- a/content/common/gpu/client/gl_helper.h
+++ b/content/common/gpu/client/gl_helper.h
@@ -173,7 +173,8 @@ class CONTENT_EXPORT GLHelper {
const gfx::Size& dst_size,
unsigned char* out,
const SkBitmap::Config config,
- const base::Callback<void(bool)>& callback);
+ const base::Callback<void(bool)>& callback,
+ GLHelper::ScalerQuality quality);
// Copies the block of pixels specified with |src_subrect| from |src_mailbox|,
// scales it to |dst_size|, and writes it into |out|.
@@ -192,7 +193,8 @@ class CONTENT_EXPORT GLHelper {
const gfx::Size& dst_size,
unsigned char* out,
const SkBitmap::Config config,
- const base::Callback<void(bool)>& callback);
+ const base::Callback<void(bool)>& callback,
+ GLHelper::ScalerQuality quality);
// Copies the texture data out of |texture| into |out|. |size| is the
// size of the texture. No post processing is applied to the pixels. The
diff --git a/content/common/gpu/client/gl_helper_unittest.cc b/content/common/gpu/client/gl_helper_unittest.cc
index acb1f59acc..5e5b555f96 100644
--- a/content/common/gpu/client/gl_helper_unittest.cc
+++ b/content/common/gpu/client/gl_helper_unittest.cc
@@ -855,9 +855,9 @@ class GLHelperTest : public testing::Test {
for (int x = 0; x < w; ++x) {
bool on_grid = (y_on_grid || ((x % grid_pitch) < grid_width));
- if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) {
+ if (bmp.config() == SkBitmap::kARGB_8888_Config) {
*bmp.getAddr32(x, y) = (on_grid ? grid_color : background_color);
- } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) {
+ } else if (bmp.config() == SkBitmap::kRGB_565_Config) {
*bmp.getAddr16(x, y) = (on_grid ? grid_color : background_color);
}
}
@@ -879,9 +879,9 @@ class GLHelperTest : public testing::Test {
bool x_bit = (((x / rect_w) & 0x1) == 0);
bool use_color2 = (x_bit != y_bit); // xor
- if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) {
+ if (bmp.config() == SkBitmap::kARGB_8888_Config) {
*bmp.getAddr32(x, y) = (use_color2 ? color2 : color1);
- } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) {
+ } else if (bmp.config() == SkBitmap::kRGB_565_Config) {
*bmp.getAddr16(x, y) = (use_color2 ? color2 : color1);
}
}
@@ -930,7 +930,7 @@ class GLHelperTest : public testing::Test {
LOG(ERROR) << "Bitmap geometry check failure";
return false;
}
- if (bmp1.getConfig() != bmp2.getConfig())
+ if (bmp1.config() != bmp2.config())
return false;
SkAutoLockPixels lock1(bmp1);
@@ -943,7 +943,7 @@ class GLHelperTest : public testing::Test {
for (int x = 0; x < bmp1.width(); ++x) {
if (!ColorsClose(bmp1.getColor(x,y),
bmp2.getColor(x,y),
- bmp1.getConfig())) {
+ bmp1.config())) {
LOG(ERROR) << "Bitmap color comparision failure";
return false;
}
diff --git a/content/common/gpu/client/gpu_channel_host.cc b/content/common/gpu/client/gpu_channel_host.cc
index afc0b5993c..f503051fb1 100644
--- a/content/common/gpu/client/gpu_channel_host.cc
+++ b/content/common/gpu/client/gpu_channel_host.cc
@@ -144,6 +144,19 @@ CommandBufferProxyImpl* GpuChannelHost::CreateViewCommandBuffer(
int32 route_id = GenerateRouteID();
if (!factory_->CreateViewCommandBuffer(surface_id, init_params, route_id)) {
LOG(ERROR) << "GpuChannelHost::CreateViewCommandBuffer failed.";
+
+ // The most likely reason CreateViewCommandBuffer will fail is
+ // that the GPU process crashed. In this case the GPU channel
+ // needs to be considered lost. The caller will then set up a new
+ // connection, and the GPU channel and any view command buffers
+ // will all be associated with the same GPU process.
+ DCHECK(MessageLoopProxy::current().get());
+
+ scoped_refptr<base::MessageLoopProxy> io_loop = factory_->GetIOLoopProxy();
+ io_loop->PostTask(FROM_HERE,
+ base::Bind(&GpuChannelHost::MessageFilter::OnChannelError,
+ channel_filter_.get()));
+
return NULL;
}
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl.h b/content/common/gpu/client/gpu_memory_buffer_impl.h
index af72599c7f..95bddccff2 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl.h
+++ b/content/common/gpu/client/gpu_memory_buffer_impl.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_
#define CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_
+#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "ui/gfx/gpu_memory_buffer.h"
#include "ui/gfx/size.h"
@@ -14,6 +15,9 @@ namespace content {
// Provides common implementation of a GPU memory buffer.
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
public:
+ typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)>
+ AllocationCallback;
+
virtual ~GpuMemoryBufferImpl();
// Creates a GPU memory buffer instance with |size| and |internalformat| for
@@ -29,7 +33,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle);
+ const AllocationCallback& callback);
// Creates an instance from the given |handle|. |size| and |internalformat|
// should match what was used to allocate the |handle|.
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_android.cc b/content/common/gpu/client/gpu_memory_buffer_impl_android.cc
index 0e31dc9b65..5af28171f9 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_android.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_android.cc
@@ -33,15 +33,15 @@ void GpuMemoryBufferImpl::AllocateForChildProcess(
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle) {
+ const AllocationCallback& callback) {
if (GpuMemoryBufferImplShm::IsConfigurationSupported(
size, internalformat, usage)) {
GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
- size, internalformat, child_process, handle);
+ size, internalformat, child_process, callback);
return;
}
- handle->type = gfx::EMPTY_BUFFER;
+ callback.Run(gfx::GpuMemoryBufferHandle());
}
// static
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_linux.cc b/content/common/gpu/client/gpu_memory_buffer_impl_linux.cc
index 8da027bbb5..d885f3f867 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_linux.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_linux.cc
@@ -32,15 +32,15 @@ void GpuMemoryBufferImpl::AllocateForChildProcess(
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle) {
+ const AllocationCallback& callback) {
if (GpuMemoryBufferImplShm::IsConfigurationSupported(
size, internalformat, usage)) {
GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
- size, internalformat, child_process, handle);
+ size, internalformat, child_process, callback);
return;
}
- handle->type = gfx::EMPTY_BUFFER;
+ callback.Run(gfx::GpuMemoryBufferHandle());
}
// static
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_mac.cc b/content/common/gpu/client/gpu_memory_buffer_impl_mac.cc
index 35831b54ca..0e77f468d2 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_mac.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_mac.cc
@@ -33,15 +33,15 @@ void GpuMemoryBufferImpl::AllocateForChildProcess(
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle) {
+ const AllocationCallback& callback) {
if (GpuMemoryBufferImplShm::IsConfigurationSupported(
size, internalformat, usage)) {
GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
- size, internalformat, child_process, handle);
+ size, internalformat, child_process, callback);
return;
}
- handle->type = gfx::EMPTY_BUFFER;
+ callback.Run(gfx::GpuMemoryBufferHandle());
}
// static
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_shm.cc b/content/common/gpu/client/gpu_memory_buffer_impl_shm.cc
index a978c66bba..8420931420 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_shm.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_shm.cc
@@ -20,16 +20,18 @@ void GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
const gfx::Size& size,
unsigned internalformat,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle) {
+ const AllocationCallback& callback) {
DCHECK(IsLayoutSupported(size, internalformat));
+ gfx::GpuMemoryBufferHandle handle;
base::SharedMemory shared_memory;
if (!shared_memory.CreateAnonymous(size.GetArea() *
BytesPerPixel(internalformat))) {
- handle->type = gfx::EMPTY_BUFFER;
+ handle.type = gfx::EMPTY_BUFFER;
return;
}
- handle->type = gfx::SHARED_MEMORY_BUFFER;
- shared_memory.GiveToProcess(child_process, &handle->handle);
+ handle.type = gfx::SHARED_MEMORY_BUFFER;
+ shared_memory.GiveToProcess(child_process, &handle.handle);
+ callback.Run(handle);
}
// static
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_shm.h b/content/common/gpu/client/gpu_memory_buffer_impl_shm.h
index 961ab52d5a..2ba552c50a 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_shm.h
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_shm.h
@@ -21,7 +21,7 @@ class GpuMemoryBufferImplShm : public GpuMemoryBufferImpl {
const gfx::Size& size,
unsigned internalformat,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle);
+ const AllocationCallback& callback);
static bool IsLayoutSupported(const gfx::Size& size, unsigned internalformat);
static bool IsUsageSupported(unsigned usage);
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_win.cc b/content/common/gpu/client/gpu_memory_buffer_impl_win.cc
index 8da027bbb5..d885f3f867 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_win.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_win.cc
@@ -32,15 +32,15 @@ void GpuMemoryBufferImpl::AllocateForChildProcess(
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
- gfx::GpuMemoryBufferHandle* handle) {
+ const AllocationCallback& callback) {
if (GpuMemoryBufferImplShm::IsConfigurationSupported(
size, internalformat, usage)) {
GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
- size, internalformat, child_process, handle);
+ size, internalformat, child_process, callback);
return;
}
- handle->type = gfx::EMPTY_BUFFER;
+ callback.Run(gfx::GpuMemoryBufferHandle());
}
// static
diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc
index 01917ff381..1708af23e9 100644
--- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc
+++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc
@@ -65,14 +65,6 @@ scoped_refptr<WebGraphicsContext3DCommandBufferImpl::ShareGroup>
return it->second;
}
-uint32_t GenFlushID() {
- static base::subtle::Atomic32 flush_id = 0;
-
- base::subtle::Atomic32 my_id = base::subtle::Barrier_AtomicIncrement(
- &flush_id, 1);
- return static_cast<uint32_t>(my_id);
-}
-
// Singleton used to initialize and terminate the gles2 library.
class GLES2Initializer {
public:
@@ -97,119 +89,6 @@ base::LazyInstance<GLES2Initializer> g_gles2_initializer =
} // namespace anonymous
-// Helper macros to reduce the amount of code.
-
-#define DELEGATE_TO_GL(name, glname) \
-void WebGraphicsContext3DCommandBufferImpl::name() { \
- gl_->glname(); \
-}
-
-#define DELEGATE_TO_GL_R(name, glname, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name() { \
- return gl_->glname(); \
-}
-
-#define DELEGATE_TO_GL_1(name, glname, t1) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \
- gl_->glname(a1); \
-}
-
-#define DELEGATE_TO_GL_1R(name, glname, t1, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \
- return gl_->glname(a1); \
-}
-
-#define DELEGATE_TO_GL_1RB(name, glname, t1, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1) { \
- return gl_->glname(a1) ? true : false; \
-}
-
-#define DELEGATE_TO_GL_2(name, glname, t1, t2) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \
- gl_->glname(a1, a2); \
-}
-
-#define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2) { \
- return gl_->glname(a1, a2); \
-}
-
-#define DELEGATE_TO_GL_3(name, glname, t1, t2, t3) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3) { \
- gl_->glname(a1, a2, a3); \
-}
-
-#define DELEGATE_TO_GL_3R(name, glname, t1, t2, t3, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3) { \
- return gl_->glname(a1, a2, a3); \
-}
-
-#define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4) { \
- gl_->glname(a1, a2, a3, a4); \
-}
-
-#define DELEGATE_TO_GL_4R(name, glname, t1, t2, t3, t4, rt) \
-rt WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4) { \
- return gl_->glname(a1, a2, a3, a4); \
-}
-
-#define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4, t5 a5) { \
- gl_->glname(a1, a2, a3, a4, a5); \
-}
-
-#define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4, t5 a5, t6 a6) { \
- gl_->glname(a1, a2, a3, a4, a5, a6); \
-}
-
-#define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4, t5 a5, t6 a6, \
- t7 a7) { \
- gl_->glname(a1, a2, a3, a4, a5, a6, a7); \
-}
-
-#define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4, t5 a5, t6 a6, \
- t7 a7, t8 a8) { \
- gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8); \
-}
-
-#define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \
-void WebGraphicsContext3DCommandBufferImpl::name(t1 a1, t2 a2, t3 a3, \
- t4 a4, t5 a5, t6 a6, \
- t7 a7, t8 a8, t9 a9) { \
- gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8, a9); \
-}
-
-class WebGraphicsContext3DErrorMessageCallback
- : public gpu::gles2::GLES2Implementation::ErrorMessageCallback {
- public:
- WebGraphicsContext3DErrorMessageCallback(
- WebGraphicsContext3DCommandBufferImpl* context)
- : graphics_context_(context) {
- }
-
- virtual void OnErrorMessage(const char* msg, int id) OVERRIDE;
-
- private:
- WebGraphicsContext3DCommandBufferImpl* graphics_context_;
-
- DISALLOW_COPY_AND_ASSIGN(WebGraphicsContext3DErrorMessageCallback);
-};
-
-void WebGraphicsContext3DErrorMessageCallback::OnErrorMessage(
- const char* msg, int id) {
- graphics_context_->OnErrorMessage(msg, id);
-}
-
WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits::SharedMemoryLimits()
: command_buffer_size(kDefaultCommandBufferSize),
start_transfer_buffer_size(kDefaultStartTransferBufferSize),
@@ -232,23 +111,15 @@ WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl(
bool lose_context_when_out_of_memory,
const SharedMemoryLimits& limits,
WebGraphicsContext3DCommandBufferImpl* share_context)
- : initialize_failed_(false),
+ : WebGraphicsContext3DImpl(attributes, lose_context_when_out_of_memory),
visible_(false),
host_(host),
surface_id_(surface_id),
active_url_(active_url),
- context_lost_callback_(0),
- context_lost_reason_(GL_NO_ERROR),
- error_message_callback_(0),
- attributes_(attributes),
gpu_preference_(attributes.preferDiscreteGPU ? gfx::PreferDiscreteGpu
: gfx::PreferIntegratedGpu),
weak_ptr_factory_(this),
- initialized_(false),
- gl_(NULL),
- lose_context_when_out_of_memory_(lose_context_when_out_of_memory),
- mem_limits_(limits),
- flush_id_(0) {
+ mem_limits_(limits) {
if (share_context) {
DCHECK(!attributes_.shareResources);
share_group_ = share_context->share_group_;
@@ -297,9 +168,7 @@ bool WebGraphicsContext3DCommandBufferImpl::MaybeInitializeGL() {
base::Bind(&WebGraphicsContext3DCommandBufferImpl::OnErrorMessage,
weak_ptr_factory_.GetWeakPtr()));
- client_error_message_callback_.reset(
- new WebGraphicsContext3DErrorMessageCallback(this));
- real_gl_->SetErrorMessageCallback(client_error_message_callback_.get());
+ real_gl_->SetErrorMessageCallback(getErrorMessageCallback());
// Set attributes_ from created offscreen context.
{
@@ -312,6 +181,7 @@ bool WebGraphicsContext3DCommandBufferImpl::MaybeInitializeGL() {
};
GLint pvalues[pcount] = { 0, 0, 0, 0 };
+ TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl initializing actual attributes");
gl_->GetMultipleIntegervCHROMIUM(pnames, pcount,
pvalues, sizeof(pvalues));
@@ -388,6 +258,7 @@ bool WebGraphicsContext3DCommandBufferImpl::InitializeCommandBuffer(
}
bool WebGraphicsContext3DCommandBufferImpl::CreateContext(bool onscreen) {
+ TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::CreateContext");
// Ensure the gles2 library is initialized first in a thread safe way.
g_gles2_initializer.Get();
@@ -436,7 +307,7 @@ bool WebGraphicsContext3DCommandBufferImpl::CreateContext(bool onscreen) {
bind_generates_resources,
lose_context_when_out_of_memory_,
command_buffer_.get()));
- gl_ = real_gl_.get();
+ setGLInterface(real_gl_.get());
if (!real_gl_->Initialize(
mem_limits_.start_transfer_buffer_size,
@@ -452,8 +323,8 @@ bool WebGraphicsContext3DCommandBufferImpl::CreateContext(bool onscreen) {
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGpuClientTracing)) {
- trace_gl_.reset(new gpu::gles2::GLES2TraceImplementation(gl_));
- gl_ = trace_gl_.get();
+ trace_gl_.reset(new gpu::gles2::GLES2TraceImplementation(GetGLInterface()));
+ setGLInterface(trace_gl_.get());
}
return true;
}
@@ -463,7 +334,7 @@ bool WebGraphicsContext3DCommandBufferImpl::makeContextCurrent() {
DLOG(ERROR) << "Failed to initialize context.";
return false;
}
- gles2::SetGLContext(gl_);
+ gles2::SetGLContext(GetGLInterface());
if (gpu::error::IsError(command_buffer_->GetLastError())) {
LOG(ERROR) << "Context dead on arrival. Last error: "
<< command_buffer_->GetLastError();
@@ -473,23 +344,18 @@ bool WebGraphicsContext3DCommandBufferImpl::makeContextCurrent() {
return true;
}
-uint32_t WebGraphicsContext3DCommandBufferImpl::lastFlushID() {
- return flush_id_;
-}
-
-DELEGATE_TO_GL_R(insertSyncPoint, InsertSyncPointCHROMIUM, unsigned int)
-
void WebGraphicsContext3DCommandBufferImpl::Destroy() {
share_group_->RemoveContext(this);
- if (gl_) {
+ gpu::gles2::GLES2Interface* gl = GetGLInterface();
+ if (gl) {
// First flush the context to ensure that any pending frees of resources
// are completed. Otherwise, if this context is part of a share group,
// those resources might leak. Also, any remaining side effects of commands
// issued on this context might not be visible to other contexts in the
// share group.
- gl_->Flush();
- gl_ = NULL;
+ gl->Flush();
+ setGLInterface(NULL);
}
trace_gl_.reset();
@@ -512,668 +378,12 @@ WebGraphicsContext3DCommandBufferImpl::GetContextSupport() {
return real_gl_.get();
}
-void WebGraphicsContext3DCommandBufferImpl::prepareTexture() {
- NOTREACHED();
-}
-
-void WebGraphicsContext3DCommandBufferImpl::postSubBufferCHROMIUM(
- int x, int y, int width, int height) {
- NOTREACHED();
-}
-
-DELEGATE_TO_GL_3(reshapeWithScaleFactor, ResizeCHROMIUM, int, int, float)
-
-void WebGraphicsContext3DCommandBufferImpl::synthesizeGLError(
- WGC3Denum error) {
- if (std::find(synthetic_errors_.begin(), synthetic_errors_.end(), error) ==
- synthetic_errors_.end()) {
- synthetic_errors_.push_back(error);
- }
-}
-
-DELEGATE_TO_GL_4R(mapBufferSubDataCHROMIUM, MapBufferSubDataCHROMIUM, WGC3Denum,
- WGC3Dintptr, WGC3Dsizeiptr, WGC3Denum, void*)
-
-DELEGATE_TO_GL_1(unmapBufferSubDataCHROMIUM, UnmapBufferSubDataCHROMIUM,
- const void*)
-
-void* WebGraphicsContext3DCommandBufferImpl::mapTexSubImage2DCHROMIUM(
- WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Denum type,
- WGC3Denum access) {
- return gl_->MapTexSubImage2DCHROMIUM(
- target, level, xoffset, yoffset, width, height, format, type, access);
-}
-
-DELEGATE_TO_GL_1(unmapTexSubImage2DCHROMIUM, UnmapTexSubImage2DCHROMIUM,
- const void*)
-
-void WebGraphicsContext3DCommandBufferImpl::setVisibilityCHROMIUM(
- bool visible) {
- NOTREACHED();
-}
-
-DELEGATE_TO_GL_3(discardFramebufferEXT, DiscardFramebufferEXT, WGC3Denum,
- WGC3Dsizei, const WGC3Denum*)
-
-void WebGraphicsContext3DCommandBufferImpl::copyTextureToParentTextureCHROMIUM(
- WebGLId texture, WebGLId parentTexture) {
- NOTIMPLEMENTED();
-}
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::
- getRequestableExtensionsCHROMIUM() {
- return blink::WebString::fromUTF8(
- gl_->GetRequestableExtensionsCHROMIUM());
-}
-
-DELEGATE_TO_GL_1(requestExtensionCHROMIUM, RequestExtensionCHROMIUM,
- const char*)
-
-void WebGraphicsContext3DCommandBufferImpl::blitFramebufferCHROMIUM(
- WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
- WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
- WGC3Dbitfield mask, WGC3Denum filter) {
- gl_->BlitFramebufferCHROMIUM(
- srcX0, srcY0, srcX1, srcY1,
- dstX0, dstY0, dstX1, dstY1,
- mask, filter);
-}
-
-DELEGATE_TO_GL_5(renderbufferStorageMultisampleCHROMIUM,
- RenderbufferStorageMultisampleCHROMIUM, WGC3Denum, WGC3Dsizei,
- WGC3Denum, WGC3Dsizei, WGC3Dsizei)
-
-DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum)
-
-DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId)
-
-DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId,
- WGC3Duint, const WGC3Dchar*)
-
-DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_2(bindFramebuffer, BindFramebuffer, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_4(blendColor, BlendColor,
- WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf)
-
-DELEGATE_TO_GL_1(blendEquation, BlendEquation, WGC3Denum)
-
-DELEGATE_TO_GL_2(blendEquationSeparate, BlendEquationSeparate,
- WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_2(blendFunc, BlendFunc, WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_4(blendFuncSeparate, BlendFuncSeparate,
- WGC3Denum, WGC3Denum, WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_4(bufferData, BufferData,
- WGC3Denum, WGC3Dsizeiptr, const void*, WGC3Denum)
-
-DELEGATE_TO_GL_4(bufferSubData, BufferSubData,
- WGC3Denum, WGC3Dintptr, WGC3Dsizeiptr, const void*)
-
-DELEGATE_TO_GL_1R(checkFramebufferStatus, CheckFramebufferStatus,
- WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_1(clear, Clear, WGC3Dbitfield)
-
-DELEGATE_TO_GL_4(clearColor, ClearColor,
- WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf)
-
-DELEGATE_TO_GL_1(clearDepth, ClearDepthf, WGC3Dclampf)
-
-DELEGATE_TO_GL_1(clearStencil, ClearStencil, WGC3Dint)
-
-DELEGATE_TO_GL_4(colorMask, ColorMask,
- WGC3Dboolean, WGC3Dboolean, WGC3Dboolean, WGC3Dboolean)
-
-DELEGATE_TO_GL_1(compileShader, CompileShader, WebGLId)
-
-DELEGATE_TO_GL_8(compressedTexImage2D, CompressedTexImage2D,
- WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dint, WGC3Dint,
- WGC3Dsizei, WGC3Dsizei, const void*)
-
-DELEGATE_TO_GL_9(compressedTexSubImage2D, CompressedTexSubImage2D,
- WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint,
- WGC3Denum, WGC3Dsizei, const void*)
-
-DELEGATE_TO_GL_8(copyTexImage2D, CopyTexImage2D,
- WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dint, WGC3Dint,
- WGC3Dsizei, WGC3Dsizei, WGC3Dint)
-
-DELEGATE_TO_GL_8(copyTexSubImage2D, CopyTexSubImage2D,
- WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint,
- WGC3Dsizei, WGC3Dsizei)
-
-DELEGATE_TO_GL_1(cullFace, CullFace, WGC3Denum)
-
-DELEGATE_TO_GL_1(depthFunc, DepthFunc, WGC3Denum)
-
-DELEGATE_TO_GL_1(depthMask, DepthMask, WGC3Dboolean)
-
-DELEGATE_TO_GL_2(depthRange, DepthRangef, WGC3Dclampf, WGC3Dclampf)
-
-DELEGATE_TO_GL_2(detachShader, DetachShader, WebGLId, WebGLId)
-
-DELEGATE_TO_GL_1(disable, Disable, WGC3Denum)
-
-DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray,
- WGC3Duint)
-
-DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei)
-
-void WebGraphicsContext3DCommandBufferImpl::drawElements(WGC3Denum mode,
- WGC3Dsizei count,
- WGC3Denum type,
- WGC3Dintptr offset) {
- gl_->DrawElements(
- mode, count, type,
- reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
-}
-
-DELEGATE_TO_GL_1(enable, Enable, WGC3Denum)
-
-DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray,
- WGC3Duint)
-
-void WebGraphicsContext3DCommandBufferImpl::finish() {
- flush_id_ = GenFlushID();
- gl_->Finish();
-}
-
-void WebGraphicsContext3DCommandBufferImpl::flush() {
- flush_id_ = GenFlushID();
- gl_->Flush();
-}
-
-DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer,
- WGC3Denum, WGC3Denum, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D,
- WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint)
-
-DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum)
-
-DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum)
-
-bool WebGraphicsContext3DCommandBufferImpl::getActiveAttrib(
- WebGLId program, WGC3Duint index, ActiveInfo& info) {
- if (!program) {
- synthesizeGLError(GL_INVALID_VALUE);
- return false;
- }
- GLint max_name_length = -1;
- gl_->GetProgramiv(
- program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length);
- if (max_name_length < 0)
- return false;
- scoped_ptr<GLchar[]> name(new GLchar[max_name_length]);
- if (!name) {
- synthesizeGLError(GL_OUT_OF_MEMORY);
- return false;
- }
- GLsizei length = 0;
- GLint size = -1;
- GLenum type = 0;
- gl_->GetActiveAttrib(
- program, index, max_name_length, &length, &size, &type, name.get());
- if (size < 0) {
- return false;
- }
- info.name = blink::WebString::fromUTF8(name.get(), length);
- info.type = type;
- info.size = size;
- return true;
-}
-
-bool WebGraphicsContext3DCommandBufferImpl::getActiveUniform(
- WebGLId program, WGC3Duint index, ActiveInfo& info) {
- GLint max_name_length = -1;
- gl_->GetProgramiv(
- program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length);
- if (max_name_length < 0)
- return false;
- scoped_ptr<GLchar[]> name(new GLchar[max_name_length]);
- if (!name) {
- synthesizeGLError(GL_OUT_OF_MEMORY);
- return false;
- }
- GLsizei length = 0;
- GLint size = -1;
- GLenum type = 0;
- gl_->GetActiveUniform(
- program, index, max_name_length, &length, &size, &type, name.get());
- if (size < 0) {
- return false;
- }
- info.name = blink::WebString::fromUTF8(name.get(), length);
- info.type = type;
- info.size = size;
- return true;
-}
-
-DELEGATE_TO_GL_4(getAttachedShaders, GetAttachedShaders,
- WebGLId, WGC3Dsizei, WGC3Dsizei*, WebGLId*)
-
-DELEGATE_TO_GL_2R(getAttribLocation, GetAttribLocation,
- WebGLId, const WGC3Dchar*, WGC3Dint)
-
-DELEGATE_TO_GL_2(getBooleanv, GetBooleanv, WGC3Denum, WGC3Dboolean*)
-
-DELEGATE_TO_GL_3(getBufferParameteriv, GetBufferParameteriv,
- WGC3Denum, WGC3Denum, WGC3Dint*)
-
-blink::WebGraphicsContext3D::Attributes
-WebGraphicsContext3DCommandBufferImpl::getContextAttributes() {
- return attributes_;
-}
-
-WGC3Denum WebGraphicsContext3DCommandBufferImpl::getError() {
- if (!synthetic_errors_.empty()) {
- std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin();
- WGC3Denum err = *iter;
- synthetic_errors_.erase(iter);
- return err;
- }
-
- return gl_->GetError();
-}
-
bool WebGraphicsContext3DCommandBufferImpl::isContextLost() {
return initialize_failed_ ||
(command_buffer_ && IsCommandBufferContextLost()) ||
context_lost_reason_ != GL_NO_ERROR;
}
-DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*)
-
-DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv,
- GetFramebufferAttachmentParameteriv,
- WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*)
-
-DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*)
-
-DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*)
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::getProgramInfoLog(
- WebGLId program) {
- GLint logLength = 0;
- gl_->GetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
- if (!logLength)
- return blink::WebString();
- scoped_ptr<GLchar[]> log(new GLchar[logLength]);
- if (!log)
- return blink::WebString();
- GLsizei returnedLogLength = 0;
- gl_->GetProgramInfoLog(
- program, logLength, &returnedLogLength, log.get());
- DCHECK_EQ(logLength, returnedLogLength + 1);
- blink::WebString res =
- blink::WebString::fromUTF8(log.get(), returnedLogLength);
- return res;
-}
-
-DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv,
- WGC3Denum, WGC3Denum, WGC3Dint*)
-
-DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*)
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::getShaderInfoLog(
- WebGLId shader) {
- GLint logLength = 0;
- gl_->GetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
- if (!logLength)
- return blink::WebString();
- scoped_ptr<GLchar[]> log(new GLchar[logLength]);
- if (!log)
- return blink::WebString();
- GLsizei returnedLogLength = 0;
- gl_->GetShaderInfoLog(
- shader, logLength, &returnedLogLength, log.get());
- DCHECK_EQ(logLength, returnedLogLength + 1);
- blink::WebString res =
- blink::WebString::fromUTF8(log.get(), returnedLogLength);
- return res;
-}
-
-DELEGATE_TO_GL_4(getShaderPrecisionFormat, GetShaderPrecisionFormat,
- WGC3Denum, WGC3Denum, WGC3Dint*, WGC3Dint*)
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::getShaderSource(
- WebGLId shader) {
- GLint logLength = 0;
- gl_->GetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &logLength);
- if (!logLength)
- return blink::WebString();
- scoped_ptr<GLchar[]> log(new GLchar[logLength]);
- if (!log)
- return blink::WebString();
- GLsizei returnedLogLength = 0;
- gl_->GetShaderSource(
- shader, logLength, &returnedLogLength, log.get());
- if (!returnedLogLength)
- return blink::WebString();
- DCHECK_EQ(logLength, returnedLogLength + 1);
- blink::WebString res =
- blink::WebString::fromUTF8(log.get(), returnedLogLength);
- return res;
-}
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::
- getTranslatedShaderSourceANGLE(WebGLId shader) {
- GLint logLength = 0;
- gl_->GetShaderiv(
- shader, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, &logLength);
- if (!logLength)
- return blink::WebString();
- scoped_ptr<GLchar[]> log(new GLchar[logLength]);
- if (!log)
- return blink::WebString();
- GLsizei returnedLogLength = 0;
- gl_->GetTranslatedShaderSourceANGLE(
- shader, logLength, &returnedLogLength, log.get());
- if (!returnedLogLength)
- return blink::WebString();
- DCHECK_EQ(logLength, returnedLogLength + 1);
- blink::WebString res =
- blink::WebString::fromUTF8(log.get(), returnedLogLength);
- return res;
-}
-
-blink::WebString WebGraphicsContext3DCommandBufferImpl::getString(
- WGC3Denum name) {
- return blink::WebString::fromUTF8(
- reinterpret_cast<const char*>(gl_->GetString(name)));
-}
-
-DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv,
- WGC3Denum, WGC3Denum, WGC3Dfloat*)
-
-DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv,
- WGC3Denum, WGC3Denum, WGC3Dint*)
-
-DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*)
-
-DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*)
-
-DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation,
- WebGLId, const WGC3Dchar*, WGC3Dint)
-
-DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv,
- WGC3Duint, WGC3Denum, WGC3Dfloat*)
-
-DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv,
- WGC3Duint, WGC3Denum, WGC3Dint*)
-
-WGC3Dsizeiptr WebGraphicsContext3DCommandBufferImpl::getVertexAttribOffset(
- WGC3Duint index, WGC3Denum pname) {
- GLvoid* value = NULL;
- // NOTE: If pname is ever a value that returns more then 1 element
- // this will corrupt memory.
- gl_->GetVertexAttribPointerv(index, pname, &value);
- return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value));
-}
-
-DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_1RB(isBuffer, IsBuffer, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isEnabled, IsEnabled, WGC3Denum, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isFramebuffer, IsFramebuffer, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isProgram, IsProgram, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isRenderbuffer, IsRenderbuffer, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isShader, IsShader, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1RB(isTexture, IsTexture, WebGLId, WGC3Dboolean)
-
-DELEGATE_TO_GL_1(lineWidth, LineWidth, WGC3Dfloat)
-
-DELEGATE_TO_GL_1(linkProgram, LinkProgram, WebGLId)
-
-DELEGATE_TO_GL_2(pixelStorei, PixelStorei, WGC3Denum, WGC3Dint)
-
-DELEGATE_TO_GL_2(polygonOffset, PolygonOffset, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_7(readPixels, ReadPixels,
- WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, WGC3Denum,
- WGC3Denum, void*)
-
-void WebGraphicsContext3DCommandBufferImpl::releaseShaderCompiler() {
-}
-
-DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage,
- WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei)
-
-DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean)
-
-DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
-
-void WebGraphicsContext3DCommandBufferImpl::shaderSource(
- WebGLId shader, const WGC3Dchar* string) {
- GLint length = strlen(string);
- gl_->ShaderSource(shader, 1, &string, &length);
-}
-
-DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint)
-
-DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate,
- WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint)
-
-DELEGATE_TO_GL_1(stencilMask, StencilMask, WGC3Duint)
-
-DELEGATE_TO_GL_2(stencilMaskSeparate, StencilMaskSeparate,
- WGC3Denum, WGC3Duint)
-
-DELEGATE_TO_GL_3(stencilOp, StencilOp,
- WGC3Denum, WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_4(stencilOpSeparate, StencilOpSeparate,
- WGC3Denum, WGC3Denum, WGC3Denum, WGC3Denum)
-
-DELEGATE_TO_GL_9(texImage2D, TexImage2D,
- WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei,
- WGC3Dint, WGC3Denum, WGC3Denum, const void*)
-
-DELEGATE_TO_GL_3(texParameterf, TexParameterf,
- WGC3Denum, WGC3Denum, WGC3Dfloat);
-
-static const unsigned int kTextureWrapR = 0x8072;
-
-void WebGraphicsContext3DCommandBufferImpl::texParameteri(
- WGC3Denum target, WGC3Denum pname, WGC3Dint param) {
- // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in
- // GraphicsContext3D.cpp is strictly necessary to avoid seams at the
- // edge of cube maps, and, if it is, push it into the GLES2 service
- // side code.
- if (pname == kTextureWrapR) {
- return;
- }
- gl_->TexParameteri(target, pname, param);
-}
-
-DELEGATE_TO_GL_9(texSubImage2D, TexSubImage2D,
- WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei,
- WGC3Dsizei, WGC3Denum, WGC3Denum, const void*)
-
-DELEGATE_TO_GL_2(uniform1f, Uniform1f, WGC3Dint, WGC3Dfloat)
-
-DELEGATE_TO_GL_3(uniform1fv, Uniform1fv, WGC3Dint, WGC3Dsizei,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_2(uniform1i, Uniform1i, WGC3Dint, WGC3Dint)
-
-DELEGATE_TO_GL_3(uniform1iv, Uniform1iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
-
-DELEGATE_TO_GL_3(uniform2f, Uniform2f, WGC3Dint, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_3(uniform2fv, Uniform2fv, WGC3Dint, WGC3Dsizei,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_3(uniform2i, Uniform2i, WGC3Dint, WGC3Dint, WGC3Dint)
-
-DELEGATE_TO_GL_3(uniform2iv, Uniform2iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
-
-DELEGATE_TO_GL_4(uniform3f, Uniform3f, WGC3Dint,
- WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_3(uniform3fv, Uniform3fv, WGC3Dint, WGC3Dsizei,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_4(uniform3i, Uniform3i, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint)
-
-DELEGATE_TO_GL_3(uniform3iv, Uniform3iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
-
-DELEGATE_TO_GL_5(uniform4f, Uniform4f, WGC3Dint,
- WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_3(uniform4fv, Uniform4fv, WGC3Dint, WGC3Dsizei,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_5(uniform4i, Uniform4i, WGC3Dint,
- WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint)
-
-DELEGATE_TO_GL_3(uniform4iv, Uniform4iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
-
-DELEGATE_TO_GL_4(uniformMatrix2fv, UniformMatrix2fv,
- WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
-
-DELEGATE_TO_GL_4(uniformMatrix3fv, UniformMatrix3fv,
- WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
-
-DELEGATE_TO_GL_4(uniformMatrix4fv, UniformMatrix4fv,
- WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
-
-DELEGATE_TO_GL_1(useProgram, UseProgram, WebGLId)
-
-DELEGATE_TO_GL_1(validateProgram, ValidateProgram, WebGLId)
-
-DELEGATE_TO_GL_2(vertexAttrib1f, VertexAttrib1f, WGC3Duint, WGC3Dfloat)
-
-DELEGATE_TO_GL_2(vertexAttrib1fv, VertexAttrib1fv, WGC3Duint,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_3(vertexAttrib2f, VertexAttrib2f, WGC3Duint,
- WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_2(vertexAttrib2fv, VertexAttrib2fv, WGC3Duint,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_4(vertexAttrib3f, VertexAttrib3f, WGC3Duint,
- WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_2(vertexAttrib3fv, VertexAttrib3fv, WGC3Duint,
- const WGC3Dfloat*)
-
-DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint,
- WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
-
-DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint,
- const WGC3Dfloat*)
-
-void WebGraphicsContext3DCommandBufferImpl::vertexAttribPointer(
- WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized,
- WGC3Dsizei stride, WGC3Dintptr offset) {
- gl_->VertexAttribPointer(
- index, size, type, normalized, stride,
- reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
-}
-
-DELEGATE_TO_GL_4(viewport, Viewport,
- WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
-
-DELEGATE_TO_GL_2(genBuffers, GenBuffers, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(genFramebuffers, GenFramebuffers, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(genRenderbuffers, GenRenderbuffers, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(genTextures, GenTextures, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(deleteBuffers, DeleteBuffers, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(deleteFramebuffers, DeleteFramebuffers, WGC3Dsizei, WebGLId*);
-
-DELEGATE_TO_GL_2(deleteRenderbuffers, DeleteRenderbuffers, WGC3Dsizei,
- WebGLId*);
-
-DELEGATE_TO_GL_2(deleteTextures, DeleteTextures, WGC3Dsizei, WebGLId*);
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createBuffer() {
- GLuint o;
- gl_->GenBuffers(1, &o);
- return o;
-}
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createFramebuffer() {
- GLuint o = 0;
- gl_->GenFramebuffers(1, &o);
- return o;
-}
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createRenderbuffer() {
- GLuint o;
- gl_->GenRenderbuffers(1, &o);
- return o;
-}
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createTexture() {
- GLuint o;
- gl_->GenTextures(1, &o);
- return o;
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteBuffer(WebGLId buffer) {
- gl_->DeleteBuffers(1, &buffer);
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteFramebuffer(
- WebGLId framebuffer) {
- gl_->DeleteFramebuffers(1, &framebuffer);
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteRenderbuffer(
- WebGLId renderbuffer) {
- gl_->DeleteRenderbuffers(1, &renderbuffer);
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) {
- gl_->DeleteTextures(1, &texture);
-}
-
-DELEGATE_TO_GL_R(createProgram, CreateProgram, WebGLId)
-
-DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId)
-
-DELEGATE_TO_GL_1(deleteProgram, DeleteProgram, WebGLId)
-
-DELEGATE_TO_GL_1(deleteShader, DeleteShader, WebGLId)
-
-void WebGraphicsContext3DCommandBufferImpl::setErrorMessageCallback(
- WebGraphicsContext3D::WebGraphicsErrorMessageCallback* cb) {
- error_message_callback_ = cb;
-}
-
-void WebGraphicsContext3DCommandBufferImpl::setContextLostCallback(
- WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) {
- context_lost_callback_ = cb;
-}
-
WGC3Denum WebGraphicsContext3DCommandBufferImpl::getGraphicsResetStatusARB() {
if (IsCommandBufferContextLost() &&
context_lost_reason_ == GL_NO_ERROR) {
@@ -1217,169 +427,6 @@ WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext(
share_context);
}
-DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM,
- WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint)
-
-DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT,
- WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint)
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createQueryEXT() {
- GLuint o;
- gl_->GenQueriesEXT(1, &o);
- return o;
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteQueryEXT(
- WebGLId query) {
- gl_->DeleteQueriesEXT(1, &query);
-}
-
-DELEGATE_TO_GL_1R(isQueryEXT, IsQueryEXT, WebGLId, WGC3Dboolean)
-DELEGATE_TO_GL_2(beginQueryEXT, BeginQueryEXT, WGC3Denum, WebGLId)
-DELEGATE_TO_GL_1(endQueryEXT, EndQueryEXT, WGC3Denum)
-DELEGATE_TO_GL_3(getQueryivEXT, GetQueryivEXT, WGC3Denum, WGC3Denum, WGC3Dint*)
-DELEGATE_TO_GL_3(getQueryObjectuivEXT, GetQueryObjectuivEXT,
- WebGLId, WGC3Denum, WGC3Duint*)
-
-DELEGATE_TO_GL_6(copyTextureCHROMIUM, CopyTextureCHROMIUM, WGC3Denum,
- WebGLId, WebGLId, WGC3Dint, WGC3Denum, WGC3Denum);
-
-DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM,
- WebGLId, WGC3Dint, const WGC3Dchar*)
-
-void WebGraphicsContext3DCommandBufferImpl::shallowFlushCHROMIUM() {
- flush_id_ = GenFlushID();
- gl_->ShallowFlushCHROMIUM();
-}
-
-void WebGraphicsContext3DCommandBufferImpl::shallowFinishCHROMIUM() {
- flush_id_ = GenFlushID();
- gl_->ShallowFinishCHROMIUM();
-}
-
-DELEGATE_TO_GL_1(waitSyncPoint, WaitSyncPointCHROMIUM, GLuint)
-
-void WebGraphicsContext3DCommandBufferImpl::loseContextCHROMIUM(
- WGC3Denum current, WGC3Denum other) {
- gl_->LoseContextCHROMIUM(current, other);
- gl_->Flush();
-}
-
-DELEGATE_TO_GL_1(genMailboxCHROMIUM, GenMailboxCHROMIUM, WGC3Dbyte*)
-DELEGATE_TO_GL_2(produceTextureCHROMIUM, ProduceTextureCHROMIUM,
- WGC3Denum, const WGC3Dbyte*)
-DELEGATE_TO_GL_2(consumeTextureCHROMIUM, ConsumeTextureCHROMIUM,
- WGC3Denum, const WGC3Dbyte*)
-
-void WebGraphicsContext3DCommandBufferImpl::insertEventMarkerEXT(
- const WGC3Dchar* marker) {
- gl_->InsertEventMarkerEXT(0, marker);
-}
-
-void WebGraphicsContext3DCommandBufferImpl::pushGroupMarkerEXT(
- const WGC3Dchar* marker) {
- gl_->PushGroupMarkerEXT(0, marker);
-}
-
-DELEGATE_TO_GL(popGroupMarkerEXT, PopGroupMarkerEXT);
-
-WebGLId WebGraphicsContext3DCommandBufferImpl::createVertexArrayOES() {
- GLuint array;
- gl_->GenVertexArraysOES(1, &array);
- return array;
-}
-
-void WebGraphicsContext3DCommandBufferImpl::deleteVertexArrayOES(
- WebGLId array) {
- gl_->DeleteVertexArraysOES(1, &array);
-}
-
-DELEGATE_TO_GL_1R(isVertexArrayOES, IsVertexArrayOES, WebGLId, WGC3Dboolean)
-DELEGATE_TO_GL_1(bindVertexArrayOES, BindVertexArrayOES, WebGLId)
-
-DELEGATE_TO_GL_2(bindTexImage2DCHROMIUM, BindTexImage2DCHROMIUM,
- WGC3Denum, WGC3Dint)
-DELEGATE_TO_GL_2(releaseTexImage2DCHROMIUM, ReleaseTexImage2DCHROMIUM,
- WGC3Denum, WGC3Dint)
-
-DELEGATE_TO_GL_2R(mapBufferCHROMIUM, MapBufferCHROMIUM, WGC3Denum, WGC3Denum,
- void*)
-DELEGATE_TO_GL_1R(unmapBufferCHROMIUM, UnmapBufferCHROMIUM, WGC3Denum,
- WGC3Dboolean)
-
-DELEGATE_TO_GL_9(asyncTexImage2DCHROMIUM, AsyncTexImage2DCHROMIUM, WGC3Denum,
- WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei, WGC3Dint,
- WGC3Denum, WGC3Denum, const void*)
-DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM,
- WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei,
- WGC3Dsizei, WGC3Denum, WGC3Denum, const void*)
-
-DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM,
- WGC3Denum)
-
-DELEGATE_TO_GL_2(drawBuffersEXT, DrawBuffersEXT, WGC3Dsizei, const WGC3Denum*)
-
-DELEGATE_TO_GL_4(drawArraysInstancedANGLE, DrawArraysInstancedANGLE, WGC3Denum,
- WGC3Dint, WGC3Dsizei, WGC3Dsizei)
-
-void WebGraphicsContext3DCommandBufferImpl::drawElementsInstancedANGLE(
- WGC3Denum mode,
- WGC3Dsizei count,
- WGC3Denum type,
- WGC3Dintptr offset,
- WGC3Dsizei primcount) {
- gl_->DrawElementsInstancedANGLE(
- mode, count, type,
- reinterpret_cast<void*>(static_cast<intptr_t>(offset)), primcount);
-}
-
-DELEGATE_TO_GL_2(vertexAttribDivisorANGLE, VertexAttribDivisorANGLE, WGC3Duint,
- WGC3Duint)
-
-DELEGATE_TO_GL_4R(createImageCHROMIUM,
- CreateImageCHROMIUM,
- WGC3Dsizei,
- WGC3Dsizei,
- WGC3Denum,
- WGC3Denum,
- WGC3Duint);
-
-WGC3Duint WebGraphicsContext3DCommandBufferImpl::createImageCHROMIUM(
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum internalformat) {
- return gl_->CreateImageCHROMIUM(
- width, height, internalformat, GL_IMAGE_MAP_CHROMIUM);
-}
-
-DELEGATE_TO_GL_1(destroyImageCHROMIUM, DestroyImageCHROMIUM, WGC3Duint);
-
-DELEGATE_TO_GL_3(getImageParameterivCHROMIUM, GetImageParameterivCHROMIUM,
- WGC3Duint, WGC3Denum, GLint*);
-
-DELEGATE_TO_GL_1R(mapImageCHROMIUM, MapImageCHROMIUM, WGC3Duint, void*);
-
-void* WebGraphicsContext3DCommandBufferImpl::mapImageCHROMIUM(
- WGC3Duint image_id,
- WGC3Denum access) {
- return gl_->MapImageCHROMIUM(image_id);
-}
-
-DELEGATE_TO_GL_1(unmapImageCHROMIUM, UnmapImageCHROMIUM, WGC3Duint);
-
-DELEGATE_TO_GL_6(framebufferTexture2DMultisampleEXT,
- FramebufferTexture2DMultisampleEXT,
- WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint, WGC3Dsizei)
-
-DELEGATE_TO_GL_5(renderbufferStorageMultisampleEXT,
- RenderbufferStorageMultisampleEXT, WGC3Denum, WGC3Dsizei,
- WGC3Denum, WGC3Dsizei, WGC3Dsizei)
-
-GrGLInterface* WebGraphicsContext3DCommandBufferImpl::createGrGLInterface() {
- makeContextCurrent();
- return skia_bindings::CreateCommandBufferSkiaGLBinding();
-}
-
namespace {
WGC3Denum convertReason(gpu::error::ContextLostReason reason) {
@@ -1414,12 +461,4 @@ void WebGraphicsContext3DCommandBufferImpl::OnGpuChannelLost() {
}
}
-void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage(
- const std::string& message, int id) {
- if (error_message_callback_) {
- blink::WebString str = blink::WebString::fromUTF8(message.c_str());
- error_message_callback_->onErrorMessage(str, id);
- }
-}
-
} // namespace content
diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h
index 6a41e47d03..a378d0f67d 100644
--- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h
+++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h
@@ -19,6 +19,7 @@
#include "ui/gfx/native_widget_types.h"
#include "ui/gl/gpu_preference.h"
#include "url/gurl.h"
+#include "webkit/common/gpu/webgraphicscontext3d_impl.h"
namespace gpu {
@@ -32,21 +33,6 @@ class GLES2Interface;
}
}
-using blink::WebGLId;
-
-using blink::WGC3Dbyte;
-using blink::WGC3Dchar;
-using blink::WGC3Denum;
-using blink::WGC3Dboolean;
-using blink::WGC3Dbitfield;
-using blink::WGC3Dint;
-using blink::WGC3Dsizei;
-using blink::WGC3Duint;
-using blink::WGC3Dfloat;
-using blink::WGC3Dclampf;
-using blink::WGC3Dintptr;
-using blink::WGC3Dsizeiptr;
-
namespace content {
class GpuChannelHost;
@@ -55,10 +41,8 @@ const size_t kDefaultStartTransferBufferSize = 1 * 1024 * 1024;
const size_t kDefaultMinTransferBufferSize = 1 * 256 * 1024;
const size_t kDefaultMaxTransferBufferSize = 16 * 1024 * 1024;
-class WebGraphicsContext3DErrorMessageCallback;
-
class WebGraphicsContext3DCommandBufferImpl
- : public blink::WebGraphicsContext3D {
+ : public WebGraphicsContext3DImpl {
public:
enum MappedMemoryReclaimLimit {
kNoLimit = 0,
@@ -166,520 +150,10 @@ class WebGraphicsContext3DCommandBufferImpl
// graphics context fails to create. Do not call from more than one thread.
virtual bool makeContextCurrent();
- virtual uint32_t lastFlushID();
-
- virtual unsigned int insertSyncPoint();
- virtual void waitSyncPoint(unsigned int sync_point);
-
- virtual void loseContextCHROMIUM(WGC3Denum current, WGC3Denum other);
-
- virtual void reshapeWithScaleFactor(
- int width, int height, float scale_factor);
-
- virtual void prepareTexture();
- virtual void postSubBufferCHROMIUM(int x, int y, int width, int height);
-
- virtual void activeTexture(WGC3Denum texture);
- virtual void attachShader(WebGLId program, WebGLId shader);
- virtual void bindAttribLocation(WebGLId program, WGC3Duint index,
- const WGC3Dchar* name);
- virtual void bindBuffer(WGC3Denum target, WebGLId buffer);
- virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer);
- virtual void bindRenderbuffer(WGC3Denum target, WebGLId renderbuffer);
- virtual void bindTexture(WGC3Denum target, WebGLId texture);
- virtual void blendColor(WGC3Dclampf red, WGC3Dclampf green,
- WGC3Dclampf blue, WGC3Dclampf alpha);
- virtual void blendEquation(WGC3Denum mode);
- virtual void blendEquationSeparate(WGC3Denum modeRGB,
- WGC3Denum modeAlpha);
- virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor);
- virtual void blendFuncSeparate(WGC3Denum srcRGB,
- WGC3Denum dstRGB,
- WGC3Denum srcAlpha,
- WGC3Denum dstAlpha);
-
- virtual void bufferData(WGC3Denum target, WGC3Dsizeiptr size,
- const void* data, WGC3Denum usage);
- virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset,
- WGC3Dsizeiptr size, const void* data);
-
- virtual WGC3Denum checkFramebufferStatus(WGC3Denum target);
- virtual void clear(WGC3Dbitfield mask);
- virtual void clearColor(WGC3Dclampf red, WGC3Dclampf green,
- WGC3Dclampf blue, WGC3Dclampf alpha);
- virtual void clearDepth(WGC3Dclampf depth);
- virtual void clearStencil(WGC3Dint s);
- virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green,
- WGC3Dboolean blue, WGC3Dboolean alpha);
- virtual void compileShader(WebGLId shader);
-
- virtual void compressedTexImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Denum internalformat,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Dint border,
- WGC3Dsizei imageSize,
- const void* data);
- virtual void compressedTexSubImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Dsizei imageSize,
- const void* data);
- virtual void copyTexImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Denum internalformat,
- WGC3Dint x,
- WGC3Dint y,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Dint border);
- virtual void copyTexSubImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dint x,
- WGC3Dint y,
- WGC3Dsizei width,
- WGC3Dsizei height);
- virtual void cullFace(WGC3Denum mode);
- virtual void depthFunc(WGC3Denum func);
- virtual void depthMask(WGC3Dboolean flag);
- virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar);
- virtual void detachShader(WebGLId program, WebGLId shader);
- virtual void disable(WGC3Denum cap);
- virtual void disableVertexAttribArray(WGC3Duint index);
- virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count);
- virtual void drawElements(WGC3Denum mode,
- WGC3Dsizei count,
- WGC3Denum type,
- WGC3Dintptr offset);
-
- virtual void enable(WGC3Denum cap);
- virtual void enableVertexAttribArray(WGC3Duint index);
- virtual void finish();
- virtual void flush();
- virtual void framebufferRenderbuffer(WGC3Denum target,
- WGC3Denum attachment,
- WGC3Denum renderbuffertarget,
- WebGLId renderbuffer);
- virtual void framebufferTexture2D(WGC3Denum target,
- WGC3Denum attachment,
- WGC3Denum textarget,
- WebGLId texture,
- WGC3Dint level);
- virtual void frontFace(WGC3Denum mode);
- virtual void generateMipmap(WGC3Denum target);
-
- virtual bool getActiveAttrib(WebGLId program,
- WGC3Duint index,
- ActiveInfo&);
- virtual bool getActiveUniform(WebGLId program,
- WGC3Duint index,
- ActiveInfo&);
-
- virtual void getAttachedShaders(WebGLId program,
- WGC3Dsizei maxCount,
- WGC3Dsizei* count,
- WebGLId* shaders);
-
- virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name);
-
- virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value);
-
- virtual void getBufferParameteriv(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dint* value);
-
- virtual Attributes getContextAttributes();
-
- virtual WGC3Denum getError();
-
virtual bool isContextLost();
- virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value);
-
- virtual void getFramebufferAttachmentParameteriv(WGC3Denum target,
- WGC3Denum attachment,
- WGC3Denum pname,
- WGC3Dint* value);
-
- virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value);
-
- virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value);
-
- virtual blink::WebString getProgramInfoLog(WebGLId program);
-
- virtual void getRenderbufferParameteriv(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dint* value);
-
- virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value);
-
- virtual blink::WebString getShaderInfoLog(WebGLId shader);
-
- virtual void getShaderPrecisionFormat(WGC3Denum shadertype,
- WGC3Denum precisiontype,
- WGC3Dint* range,
- WGC3Dint* precision);
-
- virtual blink::WebString getShaderSource(WebGLId shader);
- virtual blink::WebString getString(WGC3Denum name);
-
- virtual void getTexParameterfv(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dfloat* value);
- virtual void getTexParameteriv(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dint* value);
-
- virtual void getUniformfv(WebGLId program,
- WGC3Dint location,
- WGC3Dfloat* value);
- virtual void getUniformiv(WebGLId program,
- WGC3Dint location,
- WGC3Dint* value);
-
- virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name);
-
- virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname,
- WGC3Dfloat* value);
- virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname,
- WGC3Dint* value);
-
- virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname);
-
- virtual void hint(WGC3Denum target, WGC3Denum mode);
- virtual WGC3Dboolean isBuffer(WebGLId buffer);
- virtual WGC3Dboolean isEnabled(WGC3Denum cap);
- virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer);
- virtual WGC3Dboolean isProgram(WebGLId program);
- virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer);
- virtual WGC3Dboolean isShader(WebGLId shader);
- virtual WGC3Dboolean isTexture(WebGLId texture);
- virtual void lineWidth(WGC3Dfloat);
- virtual void linkProgram(WebGLId program);
- virtual void pixelStorei(WGC3Denum pname, WGC3Dint param);
- virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units);
-
- virtual void readPixels(WGC3Dint x,
- WGC3Dint y,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Denum type,
- void* pixels);
-
- virtual void releaseShaderCompiler();
- virtual void renderbufferStorage(WGC3Denum target,
- WGC3Denum internalformat,
- WGC3Dsizei width,
- WGC3Dsizei height);
- virtual void sampleCoverage(WGC3Dfloat value, WGC3Dboolean invert);
- virtual void scissor(WGC3Dint x, WGC3Dint y,
- WGC3Dsizei width, WGC3Dsizei height);
- virtual void shaderSource(WebGLId shader, const WGC3Dchar* string);
- virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
- virtual void stencilFuncSeparate(WGC3Denum face,
- WGC3Denum func,
- WGC3Dint ref,
- WGC3Duint mask);
- virtual void stencilMask(WGC3Duint mask);
- virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask);
- virtual void stencilOp(WGC3Denum fail,
- WGC3Denum zfail,
- WGC3Denum zpass);
- virtual void stencilOpSeparate(WGC3Denum face,
- WGC3Denum fail,
- WGC3Denum zfail,
- WGC3Denum zpass);
-
- virtual void texImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Denum internalformat,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Dint border,
- WGC3Denum format,
- WGC3Denum type,
- const void* pixels);
-
- virtual void texParameterf(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dfloat param);
- virtual void texParameteri(WGC3Denum target,
- WGC3Denum pname,
- WGC3Dint param);
-
- virtual void texSubImage2D(WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Denum type,
- const void* pixels);
-
- virtual void uniform1f(WGC3Dint location, WGC3Dfloat x);
- virtual void uniform1fv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dfloat* v);
- virtual void uniform1i(WGC3Dint location, WGC3Dint x);
- virtual void uniform1iv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dint* v);
- virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y);
- virtual void uniform2fv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dfloat* v);
- virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y);
- virtual void uniform2iv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dint* v);
- virtual void uniform3f(WGC3Dint location,
- WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
- virtual void uniform3fv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dfloat* v);
- virtual void uniform3i(WGC3Dint location,
- WGC3Dint x, WGC3Dint y, WGC3Dint z);
- virtual void uniform3iv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dint* v);
- virtual void uniform4f(WGC3Dint location,
- WGC3Dfloat x, WGC3Dfloat y,
- WGC3Dfloat z, WGC3Dfloat w);
- virtual void uniform4fv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dfloat* v);
- virtual void uniform4i(WGC3Dint location,
- WGC3Dint x, WGC3Dint y, WGC3Dint z, WGC3Dint w);
- virtual void uniform4iv(WGC3Dint location,
- WGC3Dsizei count, const WGC3Dint* v);
- virtual void uniformMatrix2fv(WGC3Dint location,
- WGC3Dsizei count,
- WGC3Dboolean transpose,
- const WGC3Dfloat* value);
- virtual void uniformMatrix3fv(WGC3Dint location,
- WGC3Dsizei count,
- WGC3Dboolean transpose,
- const WGC3Dfloat* value);
- virtual void uniformMatrix4fv(WGC3Dint location,
- WGC3Dsizei count,
- WGC3Dboolean transpose,
- const WGC3Dfloat* value);
-
- virtual void useProgram(WebGLId program);
- virtual void validateProgram(WebGLId program);
-
- virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x);
- virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values);
- virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y);
- virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values);
- virtual void vertexAttrib3f(WGC3Duint index,
- WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
- virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values);
- virtual void vertexAttrib4f(WGC3Duint index,
- WGC3Dfloat x, WGC3Dfloat y,
- WGC3Dfloat z, WGC3Dfloat w);
- virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values);
- virtual void vertexAttribPointer(WGC3Duint index,
- WGC3Dint size,
- WGC3Denum type,
- WGC3Dboolean normalized,
- WGC3Dsizei stride,
- WGC3Dintptr offset);
-
- virtual void viewport(WGC3Dint x, WGC3Dint y,
- WGC3Dsizei width, WGC3Dsizei height);
-
- // Support for buffer creation and deletion
- virtual void genBuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void genFramebuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void genRenderbuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void genTextures(WGC3Dsizei count, WebGLId* ids);
-
- virtual void deleteBuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void deleteFramebuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void deleteRenderbuffers(WGC3Dsizei count, WebGLId* ids);
- virtual void deleteTextures(WGC3Dsizei count, WebGLId* ids);
-
- virtual WebGLId createBuffer();
- virtual WebGLId createFramebuffer();
- virtual WebGLId createRenderbuffer();
- virtual WebGLId createTexture();
-
- virtual void deleteBuffer(WebGLId);
- virtual void deleteFramebuffer(WebGLId);
- virtual void deleteRenderbuffer(WebGLId);
- virtual void deleteTexture(WebGLId);
-
- virtual WebGLId createProgram();
- virtual WebGLId createShader(WGC3Denum);
-
- virtual void deleteProgram(WebGLId);
- virtual void deleteShader(WebGLId);
-
- virtual void synthesizeGLError(WGC3Denum);
-
- virtual void* mapBufferSubDataCHROMIUM(
- WGC3Denum target, WGC3Dintptr offset,
- WGC3Dsizeiptr size, WGC3Denum access);
- virtual void unmapBufferSubDataCHROMIUM(const void*);
- virtual void* mapTexSubImage2DCHROMIUM(
- WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Denum type,
- WGC3Denum access);
- virtual void unmapTexSubImage2DCHROMIUM(const void*);
-
- virtual void setVisibilityCHROMIUM(bool visible);
-
- virtual void discardFramebufferEXT(WGC3Denum target,
- WGC3Dsizei numAttachments,
- const WGC3Denum* attachments);
- virtual void copyTextureToParentTextureCHROMIUM(
- WebGLId texture, WebGLId parentTexture);
-
- virtual blink::WebString getRequestableExtensionsCHROMIUM();
- virtual void requestExtensionCHROMIUM(const char*);
-
- virtual void blitFramebufferCHROMIUM(
- WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
- WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
- WGC3Dbitfield mask, WGC3Denum filter);
- virtual void renderbufferStorageMultisampleCHROMIUM(
- WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
- WGC3Dsizei width, WGC3Dsizei height);
-
- virtual blink::WebString getTranslatedShaderSourceANGLE(WebGLId shader);
-
- virtual void setContextLostCallback(
- WebGraphicsContext3D::WebGraphicsContextLostCallback* callback);
-
virtual WGC3Denum getGraphicsResetStatusARB();
- virtual void setErrorMessageCallback(
- WebGraphicsContext3D::WebGraphicsErrorMessageCallback* callback);
-
- virtual void texImageIOSurface2DCHROMIUM(
- WGC3Denum target, WGC3Dint width, WGC3Dint height,
- WGC3Duint ioSurfaceId, WGC3Duint plane);
-
- virtual void texStorage2DEXT(
- WGC3Denum target, WGC3Dint levels, WGC3Duint internalformat,
- WGC3Dint width, WGC3Dint height);
-
- virtual WebGLId createQueryEXT();
- virtual void deleteQueryEXT(WebGLId query);
- virtual WGC3Dboolean isQueryEXT(WGC3Duint query);
- virtual void beginQueryEXT(WGC3Denum target, WebGLId query);
- virtual void endQueryEXT(WGC3Denum target);
- virtual void getQueryivEXT(
- WGC3Denum target, WGC3Denum pname, WGC3Dint* params);
- virtual void getQueryObjectuivEXT(
- WebGLId query, WGC3Denum pname, WGC3Duint* params);
-
- virtual void copyTextureCHROMIUM(WGC3Denum target, WebGLId source_id,
- WebGLId dest_id, WGC3Dint level,
- WGC3Denum internal_format,
- WGC3Denum dest_type);
-
- virtual void bindUniformLocationCHROMIUM(WebGLId program, WGC3Dint location,
- const WGC3Dchar* uniform);
-
- virtual void shallowFlushCHROMIUM();
- virtual void shallowFinishCHROMIUM();
-
- virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox);
- virtual void produceTextureCHROMIUM(WGC3Denum target,
- const WGC3Dbyte* mailbox);
- virtual void consumeTextureCHROMIUM(WGC3Denum target,
- const WGC3Dbyte* mailbox);
-
- virtual void insertEventMarkerEXT(const WGC3Dchar* marker);
- virtual void pushGroupMarkerEXT(const WGC3Dchar* marker);
- virtual void popGroupMarkerEXT();
-
- // GL_OES_vertex_array_object
- virtual WebGLId createVertexArrayOES();
- virtual void deleteVertexArrayOES(WebGLId array);
- virtual WGC3Dboolean isVertexArrayOES(WebGLId array);
- virtual void bindVertexArrayOES(WebGLId array);
-
- virtual void bindTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint image_id);
- virtual void releaseTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint image_id);
-
- virtual void* mapBufferCHROMIUM(WGC3Denum target, WGC3Denum access);
- virtual WGC3Dboolean unmapBufferCHROMIUM(WGC3Denum target);
-
- // Async pixel transfer functions.
- virtual void asyncTexImage2DCHROMIUM(
- WGC3Denum target,
- WGC3Dint level,
- WGC3Denum internalformat,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Dint border,
- WGC3Denum format,
- WGC3Denum type,
- const void* pixels);
- virtual void asyncTexSubImage2DCHROMIUM(
- WGC3Denum target,
- WGC3Dint level,
- WGC3Dint xoffset,
- WGC3Dint yoffset,
- WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum format,
- WGC3Denum type,
- const void* pixels);
- virtual void waitAsyncTexImage2DCHROMIUM(WGC3Denum target);
-
- // GL_EXT_draw_buffers
- virtual void drawBuffersEXT(
- WGC3Dsizei n,
- const WGC3Denum* bufs);
-
- // GL_ANGLE_instanced_arrays
- virtual void drawArraysInstancedANGLE(WGC3Denum mode, WGC3Dint first,
- WGC3Dsizei count, WGC3Dsizei primcount);
- virtual void drawElementsInstancedANGLE(WGC3Denum mode, WGC3Dsizei count,
- WGC3Denum type, WGC3Dintptr offset, WGC3Dsizei primcount);
- virtual void vertexAttribDivisorANGLE(WGC3Duint index, WGC3Duint divisor);
-
- // GL_CHROMIUM_map_image
- // TODO(alexst): remove this old function after blink cleanup.
- virtual WGC3Duint createImageCHROMIUM(
- WGC3Dsizei width, WGC3Dsizei height, WGC3Denum internalformat);
- virtual WGC3Duint createImageCHROMIUM(WGC3Dsizei width,
- WGC3Dsizei height,
- WGC3Denum internalformat,
- WGC3Denum usage);
- virtual void destroyImageCHROMIUM(WGC3Duint image_id);
- virtual void getImageParameterivCHROMIUM(
- WGC3Duint image_id, WGC3Denum pname, WGC3Dint* params);
- // TODO(alexst): remove this old function after blink cleanup.
- virtual void* mapImageCHROMIUM(WGC3Duint image_id, WGC3Denum access);
- virtual void* mapImageCHROMIUM(WGC3Duint image_id);
- virtual void unmapImageCHROMIUM(WGC3Duint image_id);
-
- // GL_EXT_multisampled_render_to_texture
- virtual void framebufferTexture2DMultisampleEXT(WGC3Denum target,
- WGC3Denum attachment,
- WGC3Denum textarget,
- WebGLId texture,
- WGC3Dint level,
- WGC3Dsizei samples);
- virtual void renderbufferStorageMultisampleEXT(
- WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
- WGC3Dsizei width, WGC3Dsizei height);
-
- virtual GrGLInterface* createGrGLInterface();
-
private:
// These are the same error codes as used by EGL.
enum Error {
@@ -711,7 +185,6 @@ class WebGraphicsContext3DCommandBufferImpl
FAIL_IF_MAJOR_PERF_CAVEAT = 0x10002,
LOSE_CONTEXT_WHEN_OUT_OF_MEMORY = 0x10003,
};
- friend class WebGraphicsContext3DErrorMessageCallback;
// Initialize the underlying GL context. May be called multiple times; second
// and subsequent calls are ignored. Must be called from the thread that is
@@ -740,9 +213,6 @@ class WebGraphicsContext3DCommandBufferImpl
bool CreateContext(bool onscreen);
virtual void OnGpuChannelLost();
- virtual void OnErrorMessage(const std::string& message, int id);
-
- bool initialize_failed_;
bool visible_;
@@ -751,34 +221,17 @@ class WebGraphicsContext3DCommandBufferImpl
int32 surface_id_;
GURL active_url_;
- WebGraphicsContext3D::WebGraphicsContextLostCallback* context_lost_callback_;
- WGC3Denum context_lost_reason_;
-
- WebGraphicsContext3D::WebGraphicsErrorMessageCallback*
- error_message_callback_;
- scoped_ptr<WebGraphicsContext3DErrorMessageCallback>
- client_error_message_callback_;
-
- blink::WebGraphicsContext3D::Attributes attributes_;
gfx::GpuPreference gpu_preference_;
- // Errors raised by synthesizeGLError().
- std::vector<WGC3Denum> synthetic_errors_;
-
base::WeakPtrFactory<WebGraphicsContext3DCommandBufferImpl> weak_ptr_factory_;
- bool initialized_;
scoped_ptr<CommandBufferProxyImpl> command_buffer_;
scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_helper_;
scoped_ptr<gpu::TransferBuffer> transfer_buffer_;
- gpu::gles2::GLES2Interface* gl_;
scoped_ptr<gpu::gles2::GLES2Implementation> real_gl_;
scoped_ptr<gpu::gles2::GLES2Interface> trace_gl_;
Error last_error_;
- bool lose_context_when_out_of_memory_;
SharedMemoryLimits mem_limits_;
-
- uint32_t flush_id_;
scoped_refptr<ShareGroup> share_group_;
};
diff --git a/content/common/gpu/gpu_channel.cc b/content/common/gpu/gpu_channel.cc
index 75a18e92c9..1c8e4f95f3 100644
--- a/content/common/gpu/gpu_channel.cc
+++ b/content/common/gpu/gpu_channel.cc
@@ -15,6 +15,7 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "base/stl_util.h"
#include "base/strings/string_util.h"
#include "base/timer/timer.h"
#include "content/common/gpu/devtools_gpu_agent.h"
@@ -71,8 +72,7 @@ const int64 kStopPreemptThresholdMs = kVsyncIntervalMs;
// - it generates mailbox names for clients of the GPU process on the IO thread.
class GpuChannelMessageFilter : public IPC::MessageFilter {
public:
- // Takes ownership of gpu_channel (see below).
- GpuChannelMessageFilter(base::WeakPtr<GpuChannel>* gpu_channel,
+ GpuChannelMessageFilter(base::WeakPtr<GpuChannel> gpu_channel,
scoped_refptr<SyncPointManager> sync_point_manager,
scoped_refptr<base::MessageLoopProxy> message_loop)
: preemption_state_(IDLE),
@@ -81,8 +81,7 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
sync_point_manager_(sync_point_manager),
message_loop_(message_loop),
messages_forwarded_to_channel_(0),
- a_stub_is_descheduled_(false) {
- }
+ a_stub_is_descheduled_(false) {}
virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE {
DCHECK(!channel_);
@@ -153,10 +152,7 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
}
protected:
- virtual ~GpuChannelMessageFilter() {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &GpuChannelMessageFilter::DeleteWeakPtrOnMainThread, gpu_channel_));
- }
+ virtual ~GpuChannelMessageFilter() {}
private:
enum PreemptionState {
@@ -337,7 +333,7 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
}
static void InsertSyncPointOnMainThread(
- base::WeakPtr<GpuChannel>* gpu_channel,
+ base::WeakPtr<GpuChannel> gpu_channel,
scoped_refptr<SyncPointManager> manager,
int32 routing_id,
uint32 sync_point) {
@@ -346,30 +342,23 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
// with it, but if that fails for any reason (channel or stub already
// deleted, invalid routing id), we need to retire the sync point
// immediately.
- if (gpu_channel->get()) {
- GpuCommandBufferStub* stub = gpu_channel->get()->LookupCommandBuffer(
- routing_id);
+ if (gpu_channel) {
+ GpuCommandBufferStub* stub = gpu_channel->LookupCommandBuffer(routing_id);
if (stub) {
stub->AddSyncPoint(sync_point);
GpuCommandBufferMsg_RetireSyncPoint message(routing_id, sync_point);
- gpu_channel->get()->OnMessageReceived(message);
+ gpu_channel->OnMessageReceived(message);
return;
} else {
- gpu_channel->get()->MessageProcessed();
+ gpu_channel->MessageProcessed();
}
}
manager->RetireSyncPoint(sync_point);
}
- static void DeleteWeakPtrOnMainThread(
- base::WeakPtr<GpuChannel>* gpu_channel) {
- delete gpu_channel;
- }
-
- // NOTE: this is a pointer to a weak pointer. It is never dereferenced on the
- // IO thread, it's only passed through - therefore the WeakPtr assumptions are
- // respected.
- base::WeakPtr<GpuChannel>* gpu_channel_;
+ // NOTE: this weak pointer is never dereferenced on the IO thread, it's only
+ // passed through - therefore the WeakPtr assumptions are respected.
+ base::WeakPtr<GpuChannel> gpu_channel_;
IPC::Channel* channel_;
scoped_refptr<SyncPointManager> sync_point_manager_;
scoped_refptr<base::MessageLoopProxy> message_loop_;
@@ -411,6 +400,11 @@ GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager,
log_messages_ = command_line->HasSwitch(switches::kLogPluginMessages);
}
+GpuChannel::~GpuChannel() {
+ STLDeleteElements(&deferred_messages_);
+ if (preempting_flag_.get())
+ preempting_flag_->Reset();
+}
void GpuChannel::Init(base::MessageLoopProxy* io_message_loop,
base::WaitableEvent* shutdown_event) {
@@ -425,13 +419,10 @@ void GpuChannel::Init(base::MessageLoopProxy* io_message_loop,
false,
shutdown_event));
- base::WeakPtr<GpuChannel>* weak_ptr(new base::WeakPtr<GpuChannel>(
- weak_factory_.GetWeakPtr()));
-
- filter_ = new GpuChannelMessageFilter(
- weak_ptr,
- gpu_channel_manager_->sync_point_manager(),
- base::MessageLoopProxy::current());
+ filter_ =
+ new GpuChannelMessageFilter(weak_factory_.GetWeakPtr(),
+ gpu_channel_manager_->sync_point_manager(),
+ base::MessageLoopProxy::current());
io_message_loop_ = io_message_loop;
channel_->AddFilter(filter_.get());
@@ -632,11 +623,6 @@ void GpuChannel::MarkAllContextsLost() {
}
}
-void GpuChannel::DestroySoon() {
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&GpuChannel::OnDestroy, this));
-}
-
bool GpuChannel::AddRoute(int32 route_id, IPC::Listener* listener) {
return router_.AddRoute(route_id, listener);
}
@@ -666,11 +652,6 @@ void GpuChannel::SetPreemptByFlag(
}
}
-GpuChannel::~GpuChannel() {
- if (preempting_flag_.get())
- preempting_flag_->Reset();
-}
-
void GpuChannel::OnDestroy() {
TRACE_EVENT0("gpu", "GpuChannel::OnDestroy");
gpu_channel_manager_->RemoveChannel(client_id_);
diff --git a/content/common/gpu/gpu_channel.h b/content/common/gpu/gpu_channel.h
index 390313519b..7f354715d6 100644
--- a/content/common/gpu/gpu_channel.h
+++ b/content/common/gpu/gpu_channel.h
@@ -50,9 +50,7 @@ class GpuWatchdog;
// Encapsulates an IPC channel between the GPU process and one renderer
// process. On the renderer side there's a corresponding GpuChannelHost.
-class GpuChannel : public IPC::Listener,
- public IPC::Sender,
- public base::RefCountedThreadSafe<GpuChannel> {
+class GpuChannel : public IPC::Listener, public IPC::Sender {
public:
// Takes ownership of the renderer process handle.
GpuChannel(GpuChannelManager* gpu_channel_manager,
@@ -61,6 +59,7 @@ class GpuChannel : public IPC::Listener,
gpu::gles2::MailboxManager* mailbox_manager,
int client_id,
bool software);
+ virtual ~GpuChannel();
void Init(base::MessageLoopProxy* io_message_loop,
base::WaitableEvent* shutdown_event);
@@ -127,9 +126,6 @@ class GpuChannel : public IPC::Listener,
void LoseAllContexts();
void MarkAllContextsLost();
- // Destroy channel and all contained contexts.
- void DestroySoon();
-
// Called to add a listener for a particular message routing ID.
// Returns true if succeeded.
bool AddRoute(int32 route_id, IPC::Listener* listener);
@@ -154,11 +150,7 @@ class GpuChannel : public IPC::Listener,
uint64 GetMemoryUsage();
- protected:
- virtual ~GpuChannel();
-
private:
- friend class base::RefCountedThreadSafe<GpuChannel>;
friend class GpuChannelMessageFilter;
void OnDestroy();
diff --git a/content/common/gpu/gpu_channel_manager.cc b/content/common/gpu/gpu_channel_manager.cc
index 0aaf500547..3e056e5e7c 100644
--- a/content/common/gpu/gpu_channel_manager.cc
+++ b/content/common/gpu/gpu_channel_manager.cc
@@ -98,13 +98,12 @@ GpuChannel* GpuChannelManager::LookupChannel(int32 client_id) {
if (iter == gpu_channels_.end())
return NULL;
else
- return iter->second.get();
+ return iter->second;
}
bool GpuChannelManager::OnMessageReceived(const IPC::Message& msg) {
- bool msg_is_ok = true;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(GpuChannelManager, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(GpuChannelManager, msg)
IPC_MESSAGE_HANDLER(GpuMsg_EstablishChannel, OnEstablishChannel)
IPC_MESSAGE_HANDLER(GpuMsg_CloseChannel, OnCloseChannel)
IPC_MESSAGE_HANDLER(GpuMsg_CreateViewCommandBuffer,
@@ -113,7 +112,7 @@ bool GpuChannelManager::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(GpuMsg_DeleteImage, OnDeleteImage)
IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -134,14 +133,9 @@ void GpuChannelManager::OnEstablishChannel(int client_id, bool share_context) {
mailbox_manager = mailbox_manager_.get();
}
- scoped_refptr<GpuChannel> channel = new GpuChannel(this,
- watchdog_,
- share_group,
- mailbox_manager,
- client_id,
- false);
+ scoped_ptr<GpuChannel> channel(new GpuChannel(
+ this, watchdog_, share_group, mailbox_manager, client_id, false));
channel->Init(io_message_loop_.get(), shutdown_event_);
- gpu_channels_[client_id] = channel;
channel_handle.name = channel->GetChannelName();
#if defined(OS_POSIX)
@@ -152,6 +146,8 @@ void GpuChannelManager::OnEstablishChannel(int client_id, bool share_context) {
channel_handle.socket = base::FileDescriptor(renderer_fd, true);
#endif
+ gpu_channels_.set(client_id, channel.Pass());
+
Send(new GpuHostMsg_ChannelEstablished(channel_handle));
}
@@ -301,7 +297,7 @@ void GpuChannelManager::OnLoseAllContexts() {
gfx::GLSurface* GpuChannelManager::GetDefaultOffscreenSurface() {
if (!default_offscreen_surface_.get()) {
default_offscreen_surface_ =
- gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1));
+ gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size());
}
return default_offscreen_surface_.get();
}
diff --git a/content/common/gpu/gpu_channel_manager.h b/content/common/gpu/gpu_channel_manager.h
index 2064046e1f..b6667be992 100644
--- a/content/common/gpu/gpu_channel_manager.h
+++ b/content/common/gpu/gpu_channel_manager.h
@@ -9,7 +9,7 @@
#include <string>
#include <vector>
-#include "base/containers/hash_tables.h"
+#include "base/containers/scoped_ptr_hash_map.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
@@ -105,7 +105,7 @@ class GpuChannelManager : public IPC::Listener,
int32 sync_point;
base::Closure callback;
};
- typedef base::hash_map<int, scoped_refptr<GpuChannel> > GpuChannelMap;
+ typedef base::ScopedPtrHashMap<int, GpuChannel> GpuChannelMap;
typedef std::deque<ImageOperation*> ImageOperationQueue;
// Message handlers.
diff --git a/content/common/gpu/image_transport_surface.cc b/content/common/gpu/image_transport_surface.cc
index 096d3c8b3c..19b672b978 100644
--- a/content/common/gpu/image_transport_surface.cc
+++ b/content/common/gpu/image_transport_surface.cc
@@ -19,6 +19,10 @@
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_switches.h"
+#if defined(OS_WIN)
+#include "ui/base/win/shell.h"
+#endif
+
namespace content {
ImageTransportSurface::ImageTransportSurface() {}
@@ -157,6 +161,14 @@ bool ImageTransportHelper::MakeCurrent() {
}
void ImageTransportHelper::SetSwapInterval(gfx::GLContext* context) {
+#if defined(OS_WIN)
+ // If Aero Glass is enabled, then the renderer will handle ratelimiting and
+ // there's no tearing, so waiting for vsync is unnecessary.
+ if (ui::win::IsAeroGlassEnabled()) {
+ context->SetSwapInterval(0);
+ return;
+ }
+#endif
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync))
context->SetSwapInterval(0);
else
diff --git a/content/common/gpu/image_transport_surface_mac.cc b/content/common/gpu/image_transport_surface_mac.cc
index dbd2182ee1..4aebcf2bbf 100644
--- a/content/common/gpu/image_transport_surface_mac.cc
+++ b/content/common/gpu/image_transport_surface_mac.cc
@@ -515,7 +515,8 @@ scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(
GpuChannelManager* manager,
GpuCommandBufferStub* stub,
const gfx::GLSurfaceHandle& surface_handle) {
- DCHECK(surface_handle.transport_type == gfx::NATIVE_TRANSPORT);
+ DCHECK(surface_handle.transport_type == gfx::NATIVE_DIRECT ||
+ surface_handle.transport_type == gfx::NATIVE_TRANSPORT);
IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
switch (gfx::GetGLImplementation()) {
diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc
index 4eac06b068..be15bb8bde 100644
--- a/content/common/gpu/media/dxva_video_decode_accelerator.cc
+++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc
@@ -1070,7 +1070,7 @@ void DXVAVideoDecodeAccelerator::FlushInternal() {
void DXVAVideoDecodeAccelerator::DecodeInternal(
const base::win::ScopedComPtr<IMFSample>& sample) {
DCHECK(CalledOnValidThread());
-
+
if (state_ == kUninitialized)
return;
diff --git a/content/common/gpu/media/exynos_v4l2_video_device.cc b/content/common/gpu/media/exynos_v4l2_video_device.cc
index 2410da0532..214a4311ab 100644
--- a/content/common/gpu/media/exynos_v4l2_video_device.cc
+++ b/content/common/gpu/media/exynos_v4l2_video_device.cc
@@ -159,7 +159,7 @@ EGLImageKHR ExynosV4L2Device::CreateEGLImage(EGLDisplay egl_display,
}
dmabuf_fds[i].reset(expbuf.fd);
}
- DCHECK_EQ(planes_count, 2);
+ DCHECK_EQ(planes_count, 2u);
EGLint attrs[] = {
EGL_WIDTH, 0, EGL_HEIGHT, 0,
EGL_LINUX_DRM_FOURCC_EXT, 0, EGL_DMA_BUF_PLANE0_FD_EXT, 0,
diff --git a/content/common/gpu/media/gpu_video_decode_accelerator.cc b/content/common/gpu/media/gpu_video_decode_accelerator.cc
index 1e1b15c948..0d94eaa2d8 100644
--- a/content/common/gpu/media/gpu_video_decode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_decode_accelerator.cc
@@ -459,9 +459,6 @@ void GpuVideoDecodeAccelerator::OnWillDestroyStub() {
stub_->channel()->RemoveRoute(host_route_id_);
stub_->RemoveDestructionObserver(this);
- if (video_decode_accelerator_)
- video_decode_accelerator_.release()->Destroy();
-
delete this;
}
diff --git a/content/common/gpu/media/gpu_video_encode_accelerator.cc b/content/common/gpu/media/gpu_video_encode_accelerator.cc
index 3a6deec2ec..c29a015792 100644
--- a/content/common/gpu/media/gpu_video_encode_accelerator.cc
+++ b/content/common/gpu/media/gpu_video_encode_accelerator.cc
@@ -150,9 +150,6 @@ void GpuVideoEncodeAccelerator::OnWillDestroyStub() {
stub_->channel()->RemoveRoute(host_route_id_);
stub_->RemoveDestructionObserver(this);
- if (encoder_)
- encoder_.release()->Destroy();
-
delete this;
}
diff --git a/content/common/gpu/media/v4l2_image_processor.cc b/content/common/gpu/media/v4l2_image_processor.cc
index 67303daabc..1a9dd29218 100644
--- a/content/common/gpu/media/v4l2_image_processor.cc
+++ b/content/common/gpu/media/v4l2_image_processor.cc
@@ -119,9 +119,9 @@ bool V4L2ImageProcessor::Initialize(media::VideoFrame::Format input_format,
output_allocated_size_ = output_allocated_size;
input_planes_count_ = media::VideoFrame::NumPlanes(input_format);
- DCHECK_LE(input_planes_count_, VIDEO_MAX_PLANES);
+ DCHECK_LE(input_planes_count_, static_cast<size_t>(VIDEO_MAX_PLANES));
output_planes_count_ = media::VideoFrame::NumPlanes(output_format);
- DCHECK_LE(output_planes_count_, VIDEO_MAX_PLANES);
+ DCHECK_LE(output_planes_count_, static_cast<size_t>(VIDEO_MAX_PLANES));
// Capabilities check.
struct v4l2_capability caps;
diff --git a/content/common/gpu/media/v4l2_video_decode_accelerator.cc b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
index 185d7cebe8..1b47516c0e 100644
--- a/content/common/gpu/media/v4l2_video_decode_accelerator.cc
+++ b/content/common/gpu/media/v4l2_video_decode_accelerator.cc
@@ -12,12 +12,14 @@
#include <sys/mman.h>
#include "base/bind.h"
+#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/memory/shared_memory.h"
#include "base/message_loop/message_loop.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/numerics/safe_conversions.h"
#include "content/common/gpu/media/v4l2_video_decode_accelerator.h"
+#include "media/base/media_switches.h"
#include "media/filters/h264_parser.h"
#include "ui/gl/scoped_binders.h"
@@ -649,10 +651,17 @@ bool V4L2VideoDecodeAccelerator::AdvanceFrameFragment(
break;
}
break;
+ case media::H264NALU::kSEIMessage:
case media::H264NALU::kSPS:
case media::H264NALU::kPPS:
+ case media::H264NALU::kAUD:
case media::H264NALU::kEOSeq:
case media::H264NALU::kEOStream:
+ case media::H264NALU::kReserved14:
+ case media::H264NALU::kReserved15:
+ case media::H264NALU::kReserved16:
+ case media::H264NALU::kReserved17:
+ case media::H264NALU::kReserved18:
// These unconditionally signal a frame boundary.
end_of_frame = true;
break;
@@ -1662,7 +1671,11 @@ bool V4L2VideoDecodeAccelerator::CreateInputBuffers() {
memset(&format, 0, sizeof(format));
format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
format.fmt.pix_mp.pixelformat = pixelformat;
- format.fmt.pix_mp.plane_fmt[0].sizeimage = kInputBufferMaxSize;
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kIgnoreResolutionLimitsForAcceleratedVideoDecode))
+ format.fmt.pix_mp.plane_fmt[0].sizeimage = kInputBufferMaxSizeFor4k;
+ else
+ format.fmt.pix_mp.plane_fmt[0].sizeimage = kInputBufferMaxSizeFor1080p;
format.fmt.pix_mp.num_planes = 1;
IOCTL_OR_ERROR_RETURN_FALSE(VIDIOC_S_FMT, &format);
diff --git a/content/common/gpu/media/v4l2_video_decode_accelerator.h b/content/common/gpu/media/v4l2_video_decode_accelerator.h
index 9aec936ab5..b372c3a66c 100644
--- a/content/common/gpu/media/v4l2_video_decode_accelerator.h
+++ b/content/common/gpu/media/v4l2_video_decode_accelerator.h
@@ -105,7 +105,10 @@ class CONTENT_EXPORT V4L2VideoDecodeAccelerator
kInputBufferCount = 8,
// TODO(posciak): determine input buffer size based on level limits.
// See http://crbug.com/255116.
- kInputBufferMaxSize = 1024 * 1024,
+ // Input bitstream buffer size for up to 1080p streams.
+ kInputBufferMaxSizeFor1080p = 1024 * 1024,
+ // Input bitstream buffer size for up to 4k streams.
+ kInputBufferMaxSizeFor4k = 4 * kInputBufferMaxSizeFor1080p,
// Number of output buffers to use for each VDA stage above what's required
// by the decoder (e.g. DPB size, in H264). We need
// media::limits::kMaxVideoFrames to fill up the GpuVideoDecode pipeline,
diff --git a/content/common/gpu/media/v4l2_video_encode_accelerator.cc b/content/common/gpu/media/v4l2_video_encode_accelerator.cc
index 0dd33a06ad..95d5079c32 100644
--- a/content/common/gpu/media/v4l2_video_encode_accelerator.cc
+++ b/content/common/gpu/media/v4l2_video_encode_accelerator.cc
@@ -873,7 +873,7 @@ bool V4L2VideoEncodeAccelerator::NegotiateInputFormat(
}
size_t input_planes_count = media::VideoFrame::NumPlanes(input_format);
- DCHECK_LE(input_planes_count, VIDEO_MAX_PLANES);
+ DCHECK_LE(input_planes_count, static_cast<size_t>(VIDEO_MAX_PLANES));
// First see if we the device can use the provided input_format directly.
struct v4l2_format format;
@@ -892,7 +892,7 @@ bool V4L2VideoEncodeAccelerator::NegotiateInputFormat(
return false;
input_planes_count = media::VideoFrame::NumPlanes(input_format);
- DCHECK_LE(input_planes_count, VIDEO_MAX_PLANES);
+ DCHECK_LE(input_planes_count, static_cast<size_t>(VIDEO_MAX_PLANES));
// Device might have adjusted parameters, reset them along with the format.
memset(&format, 0, sizeof(format));
diff --git a/content/common/gpu/media/video_decode_accelerator_impl.cc b/content/common/gpu/media/video_decode_accelerator_impl.cc
index 34f40ef930..a3ae3936ee 100644
--- a/content/common/gpu/media/video_decode_accelerator_impl.cc
+++ b/content/common/gpu/media/video_decode_accelerator_impl.cc
@@ -8,8 +8,8 @@ namespace content {
VideoDecodeAcceleratorImpl::VideoDecodeAcceleratorImpl() {}
-VideoDecodeAcceleratorImpl::~VideoDecodeAcceleratorImpl() {}
-
bool VideoDecodeAcceleratorImpl::CanDecodeOnIOThread() { return false; }
+VideoDecodeAcceleratorImpl::~VideoDecodeAcceleratorImpl() {}
+
} // namespace content
diff --git a/content/common/gpu/media/video_decode_accelerator_impl.h b/content/common/gpu/media/video_decode_accelerator_impl.h
index 30abfa658e..c0762a09e7 100644
--- a/content/common/gpu/media/video_decode_accelerator_impl.h
+++ b/content/common/gpu/media/video_decode_accelerator_impl.h
@@ -14,7 +14,6 @@ class CONTENT_EXPORT VideoDecodeAcceleratorImpl
: public media::VideoDecodeAccelerator {
public:
VideoDecodeAcceleratorImpl();
- virtual ~VideoDecodeAcceleratorImpl();
// Returns true if VDA::Decode and VDA::Client callbacks can run on the IO
// thread. Otherwise they will run on the GPU child thread. The purpose of
@@ -23,8 +22,29 @@ class CONTENT_EXPORT VideoDecodeAcceleratorImpl
// PictureReady should be run on the child thread if a picture is delivered
// the first time so it can be cleared.
virtual bool CanDecodeOnIOThread();
+
+ protected:
+ virtual ~VideoDecodeAcceleratorImpl();
};
} // namespace content
+namespace base {
+
+template <class T>
+struct DefaultDeleter;
+
+// Specialize DefaultDeleter so that scoped_ptr<VideoDecodeAcceleratorImpl>
+// always uses "Destroy()" instead of trying to use the destructor.
+template <>
+struct DefaultDeleter<content::VideoDecodeAcceleratorImpl> {
+ public:
+ inline void operator()(void* video_decode_accelerator) const {
+ static_cast<content::VideoDecodeAcceleratorImpl*>(video_decode_accelerator)
+ ->Destroy();
+ }
+};
+
+} // namespace base
+
#endif // CONTENT_COMMON_GPU_MEDIA_VIDEO_DECODE_ACCELERATOR_IMPL_H_
diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc
index f758373d81..b733a466d5 100644
--- a/content/common/gpu/media/video_decode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc
@@ -773,7 +773,7 @@ void GLRenderingVDAClient::DeleteDecoder() {
if (decoder_deleted())
return;
weak_decoder_factory_.reset();
- decoder_.release()->Destroy();
+ decoder_.reset();
STLClearObject(&encoded_data_);
for (std::set<int>::iterator it = outstanding_texture_ids_.begin();
it != outstanding_texture_ids_.end(); ++it) {
diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc
index 56d40a240c..b50e902bc5 100644
--- a/content/common/gpu/media/video_encode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc
@@ -52,6 +52,12 @@ const double kDefaultSubsequentFramerateRatio = 0.1;
const double kBitrateTolerance = 0.1;
// Minimum required FPS throughput for the basic performance test.
const uint32 kMinPerfFPS = 30;
+// Minimum (arbitrary) number of frames required to enforce bitrate requirements
+// over. Streams shorter than this may be too short to realistically require
+// an encoder to be able to converge to the requested bitrate over.
+// The input stream will be looped as many times as needed in bitrate tests
+// to reach at least this number of frames before calculating final bitrate.
+const unsigned int kMinFramesForBitrateTests = 300;
// The syntax of multiple test streams is:
// test-stream1;test-stream2;test-stream3
@@ -73,7 +79,7 @@ const uint32 kMinPerfFPS = 30;
// - |requested_subsequent_framerate| framerate to switch to in the middle
// of the stream.
// Bitrate is only forced for tests that test bitrate.
-const char* g_default_in_filename = "sync_192p20_frames.yuv";
+const char* g_default_in_filename = "bear_320x192_40frames.yuv";
const char* g_default_in_parameters = ":320:192:1:out.h264:200000";
base::FilePath::StringType* g_test_stream_data;
@@ -198,7 +204,6 @@ enum ClientState {
CS_ENCODER_SET,
CS_INITIALIZED,
CS_ENCODING,
- CS_FINISHING,
CS_FINISHED,
CS_ERROR,
};
@@ -378,11 +383,6 @@ class VEAClient : public VideoEncodeAccelerator::Client {
// Provide the encoder with a new output buffer.
void FeedEncoderWithOutput(base::SharedMemory* shm);
- // Feed the encoder with num_required_input_buffers_ of black frames to force
- // it to encode and return all inputs that came before this, effectively
- // flushing it.
- void FlushEncoder();
-
// Called on finding a complete frame (with |keyframe| set to true for
// keyframes) in the stream, to perform codec-independent, per-frame checks
// and accounting. Returns false once we have collected all frames we needed.
@@ -422,7 +422,7 @@ class VEAClient : public VideoEncodeAccelerator::Client {
// Current offset into input stream.
off_t pos_in_input_stream_;
- // Calculated from input_coded_size_, in bytes.
+ // Byte size of an input frame.
size_t input_buffer_size_;
gfx::Size input_coded_size_;
// Requested by encoder.
@@ -432,6 +432,10 @@ class VEAClient : public VideoEncodeAccelerator::Client {
// Precalculated number of frames in the stream.
unsigned int num_frames_in_stream_;
+ // Number of frames to encode. This may differ from num_frames_in_stream_ if
+ // we need more frames for bitrate tests.
+ unsigned int num_frames_to_encode_;
+
// Number of encoded frames we've got from the encoder thus far.
unsigned int num_encoded_frames_;
@@ -468,8 +472,8 @@ class VEAClient : public VideoEncodeAccelerator::Client {
scoped_ptr<StreamValidator> validator_;
- // The time when the encoder has initialized.
- base::TimeTicks encoder_initialized_time_;
+ // The time when the encoding started.
+ base::TimeTicks encode_start_time_;
// The time when the last encoded frame is ready.
base::TimeTicks last_frame_ready_time_;
@@ -494,6 +498,7 @@ VEAClient::VEAClient(const TestStream& test_stream,
num_required_input_buffers_(0),
output_buffer_size_(0),
num_frames_in_stream_(0),
+ num_frames_to_encode_(0),
num_encoded_frames_(0),
num_frames_since_last_check_(0),
seen_keyframe_in_this_buffer_(false),
@@ -522,6 +527,29 @@ VEAClient::VEAClient(const TestStream& test_stream,
EXPECT_EQ(0, base::WriteFile(out_filename, NULL, 0));
}
+ input_buffer_size_ =
+ media::VideoFrame::AllocationSize(kInputFormat, test_stream.size);
+ CHECK_GT(input_buffer_size_, 0UL);
+
+ // Calculate the number of frames in the input stream by dividing its length
+ // in bytes by frame size in bytes.
+ CHECK_EQ(test_stream_.input_file.length() % input_buffer_size_, 0)
+ << "Stream byte size is not a product of calculated frame byte size";
+ num_frames_in_stream_ = test_stream_.input_file.length() / input_buffer_size_;
+ CHECK_GT(num_frames_in_stream_, 0UL);
+ CHECK_LE(num_frames_in_stream_, kMaxFrameNum);
+
+ // We may need to loop over the stream more than once if more frames than
+ // provided is required for bitrate tests.
+ if (force_bitrate_ && num_frames_in_stream_ < kMinFramesForBitrateTests) {
+ DVLOG(1) << "Stream too short for bitrate test (" << num_frames_in_stream_
+ << " frames), will loop it to reach " << kMinFramesForBitrateTests
+ << " frames";
+ num_frames_to_encode_ = kMinFramesForBitrateTests;
+ } else {
+ num_frames_to_encode_ = num_frames_in_stream_;
+ }
+
thread_checker_.DetachFromThread();
}
@@ -550,18 +578,17 @@ void VEAClient::CreateEncoder() {
SetStreamParameters(test_stream_.requested_bitrate,
test_stream_.requested_framerate);
SetState(CS_INITIALIZED);
- encoder_initialized_time_ = base::TimeTicks::Now();
}
void VEAClient::DestroyEncoder() {
DCHECK(thread_checker_.CalledOnValidThread());
if (!has_encoder())
return;
- encoder_.release()->Destroy();
+ encoder_.reset();
}
double VEAClient::frames_per_second() {
- base::TimeDelta duration = last_frame_ready_time_ - encoder_initialized_time_;
+ base::TimeDelta duration = last_frame_ready_time_ - encode_start_time_;
return num_encoded_frames_ / duration.InSecondsF();
}
@@ -573,14 +600,15 @@ void VEAClient::RequireBitstreamBuffers(unsigned int input_count,
SetState(CS_ENCODING);
// TODO(posciak): For now we only support input streams that meet encoder
- // size requirements exactly (i.e. coded size == visible size).
+ // size requirements exactly (i.e. coded size == visible size), so that we
+ // can simply mmap the stream file and feed the encoder directly with chunks
+ // of that, instead of memcpying from mmapped file into a separate set of
+ // input buffers that would meet the coded size and alignment requirements.
+ // If/when this is changed, the ARM-specific alignment check below should be
+ // redone as well.
input_coded_size_ = input_coded_size;
ASSERT_EQ(input_coded_size_, test_stream_.size);
-
- input_buffer_size_ = media::VideoFrame::AllocationSize(kInputFormat,
- input_coded_size_);
- CHECK_GT(input_buffer_size_, 0UL);
-
+#if defined(ARCH_CPU_ARMEL)
// ARM performs CPU cache management with CPU cache line granularity. We thus
// need to ensure our buffers are CPU cache line-aligned (64 byte-aligned).
// Otherwise newer kernels will refuse to accept them, and on older kernels
@@ -594,20 +622,15 @@ void VEAClient::RequireBitstreamBuffers(unsigned int input_count,
// performance testing. So just assert that the frame size is a multiple of
// 64 bytes. This ensures all frames start at 64-byte boundary, because
// MemoryMappedFile should be mmapp()ed at virtual page start as well.
- ASSERT_EQ(input_buffer_size_ & 63, 0)
+ ASSERT_EQ(input_buffer_size_ & 63, 0u)
<< "Frame size has to be a multiple of 64 bytes";
ASSERT_EQ(reinterpret_cast<off_t>(test_stream_.input_file.data()) & 63, 0)
<< "Mapped file should be mapped at a 64 byte boundary";
+#endif
num_required_input_buffers_ = input_count;
ASSERT_GT(num_required_input_buffers_, 0UL);
- num_frames_in_stream_ = test_stream_.input_file.length() / input_buffer_size_;
- CHECK_GT(num_frames_in_stream_, 0UL);
- CHECK_LE(num_frames_in_stream_, kMaxFrameNum);
- CHECK_EQ(num_frames_in_stream_ * input_buffer_size_,
- test_stream_.input_file.length());
-
output_buffer_size_ = output_size;
ASSERT_GT(output_buffer_size_, 0UL);
@@ -618,6 +641,7 @@ void VEAClient::RequireBitstreamBuffers(unsigned int input_count,
FeedEncoderWithOutput(shm);
}
+ encode_start_time_ = base::TimeTicks::Now();
FeedEncoderWithInputs();
}
@@ -692,7 +716,7 @@ scoped_refptr<media::VideoFrame> VEAClient::PrepareInputFrame(off_t position) {
uint8* frame_data =
const_cast<uint8*>(test_stream_.input_file.data() + position);
- CHECK_GT(current_framerate_, 0);
+ CHECK_GT(current_framerate_, 0U);
scoped_refptr<media::VideoFrame> frame =
media::VideoFrame::WrapExternalYuvData(
kInputFormat,
@@ -731,8 +755,12 @@ void VEAClient::FeedEncoderWithInputs() {
size_t bytes_left = test_stream_.input_file.length() - pos_in_input_stream_;
if (bytes_left < input_buffer_size_) {
DCHECK_EQ(bytes_left, 0UL);
- FlushEncoder();
- return;
+ // Rewind if at the end of stream and we are still encoding.
+ // This is to flush the encoder with additional frames from the beginning
+ // of the stream, or if the stream is shorter that the number of frames
+ // we require for bitrate tests.
+ pos_in_input_stream_ = 0;
+ continue;
}
bool force_keyframe = false;
@@ -753,7 +781,7 @@ void VEAClient::FeedEncoderWithOutput(base::SharedMemory* shm) {
if (!has_encoder())
return;
- if (state_ != CS_ENCODING && state_ != CS_FINISHING)
+ if (state_ != CS_ENCODING)
return;
base::SharedMemoryHandle dup_handle;
@@ -766,23 +794,10 @@ void VEAClient::FeedEncoderWithOutput(base::SharedMemory* shm) {
encoder_->UseOutputBitstreamBuffer(bitstream_buffer);
}
-void VEAClient::FlushEncoder() {
- ASSERT_EQ(state_, CS_ENCODING);
- SetState(CS_FINISHING);
-
- // Feed the encoder with an additional set of num_required_input_buffers_
- // to flush it, using the first frame in the input stream. The resulting
- // encoded frames will be ignored.
- for (unsigned int i = 0; i < num_required_input_buffers_; ++i) {
- scoped_refptr<media::VideoFrame> frame = PrepareInputFrame(0);
- encoder_->Encode(frame, false);
- }
-}
-
bool VEAClient::HandleEncodedFrame(bool keyframe) {
// This would be a bug in the test, which should not ignore false
// return value from this method.
- CHECK_LE(num_encoded_frames_, num_frames_in_stream_);
+ CHECK_LE(num_encoded_frames_, num_frames_to_encode_);
++num_encoded_frames_;
++num_frames_since_last_check_;
@@ -807,7 +822,7 @@ bool VEAClient::HandleEncodedFrame(bool keyframe) {
// it, comes back encoded.
EXPECT_LE(num_encoded_frames_, keyframe_requested_at_ + kMaxKeyframeDelay);
- if (num_encoded_frames_ == num_frames_in_stream_ / 2) {
+ if (num_encoded_frames_ == num_frames_to_encode_ / 2) {
VerifyStreamProperties();
if (test_stream_.requested_subsequent_bitrate !=
current_requested_bitrate_ ||
@@ -815,7 +830,7 @@ bool VEAClient::HandleEncodedFrame(bool keyframe) {
SetStreamParameters(test_stream_.requested_subsequent_bitrate,
test_stream_.requested_subsequent_framerate);
}
- } else if (num_encoded_frames_ == num_frames_in_stream_) {
+ } else if (num_encoded_frames_ == num_frames_to_encode_) {
VerifyPerf();
VerifyStreamProperties();
SetState(CS_FINISHED);
@@ -918,7 +933,6 @@ TEST_P(VideoEncodeAcceleratorTest, TestSimpleEncode) {
ASSERT_EQ(notes[i]->Wait(), CS_ENCODER_SET);
ASSERT_EQ(notes[i]->Wait(), CS_INITIALIZED);
ASSERT_EQ(notes[i]->Wait(), CS_ENCODING);
- ASSERT_EQ(notes[i]->Wait(), CS_FINISHING);
ASSERT_EQ(notes[i]->Wait(), CS_FINISHED);
encoder_threads[i]->message_loop()->PostTask(
FROM_HERE,
diff --git a/content/common/gpu/sync_point_manager.cc b/content/common/gpu/sync_point_manager.cc
index 0e84e1cb99..5aa4b7e8e8 100644
--- a/content/common/gpu/sync_point_manager.cc
+++ b/content/common/gpu/sync_point_manager.cc
@@ -4,12 +4,20 @@
#include "content/common/gpu/sync_point_manager.h"
+#include <climits>
+
#include "base/logging.h"
+#include "base/rand_util.h"
namespace content {
+static const int kMaxSyncBase = INT_MAX;
+
SyncPointManager::SyncPointManager()
- : next_sync_point_(1) {
+ : next_sync_point_(base::RandInt(1, kMaxSyncBase)) {
+ // To reduce the risk that a sync point created in a previous GPU process
+ // will be in flight in the next GPU process, randomize the starting sync
+ // point number. http://crbug.com/373452
}
SyncPointManager::~SyncPointManager() {
@@ -18,6 +26,9 @@ SyncPointManager::~SyncPointManager() {
uint32 SyncPointManager::GenerateSyncPoint() {
base::AutoLock lock(lock_);
uint32 sync_point = next_sync_point_++;
+ // When an integer overflow occurs, don't return 0.
+ if (!sync_point)
+ sync_point = next_sync_point_++;
// Note: wrapping would take days for a buggy/compromized renderer that would
// insert sync points in a loop, but if that were to happen, better explicitly
diff --git a/content/common/gpu/sync_point_manager.h b/content/common/gpu/sync_point_manager.h
index d46ad60907..77a4e6d0b7 100644
--- a/content/common/gpu/sync_point_manager.h
+++ b/content/common/gpu/sync_point_manager.h
@@ -22,7 +22,7 @@ class SyncPointManager : public base::RefCountedThreadSafe<SyncPointManager> {
SyncPointManager();
// Generates a sync point, returning its ID. This can me called on any thread.
- // IDs start at 1.
+ // IDs start at a random number. Never return 0.
uint32 GenerateSyncPoint();
// Retires a sync point. This will call all the registered callbacks for this
diff --git a/content/common/host_shared_bitmap_manager.cc b/content/common/host_shared_bitmap_manager.cc
index 88d9f65acb..1f412e42ee 100644
--- a/content/common/host_shared_bitmap_manager.cc
+++ b/content/common/host_shared_bitmap_manager.cc
@@ -22,6 +22,7 @@ class BitmapData : public base::RefCountedThreadSafe<BitmapData> {
base::ProcessHandle process_handle;
base::SharedMemoryHandle memory_handle;
scoped_ptr<base::SharedMemory> memory;
+ scoped_ptr<uint8[]> pixels;
size_t buffer_size;
private:
@@ -46,9 +47,23 @@ HostSharedBitmapManager* HostSharedBitmapManager::current() {
scoped_ptr<cc::SharedBitmap> HostSharedBitmapManager::AllocateSharedBitmap(
const gfx::Size& size) {
+ base::AutoLock lock(lock_);
+ size_t bitmap_size;
+ if (!cc::SharedBitmap::SizeInBytes(size, &bitmap_size))
+ return scoped_ptr<cc::SharedBitmap>();
+
+ scoped_refptr<BitmapData> data(
+ new BitmapData(base::GetCurrentProcessHandle(),
+ base::SharedMemory::NULLHandle(),
+ bitmap_size));
// Bitmaps allocated in host don't need to be shared to other processes, so
// allocate them with new instead.
- return scoped_ptr<cc::SharedBitmap>();
+ data->pixels = scoped_ptr<uint8[]>(new uint8[bitmap_size]);
+
+ cc::SharedBitmapId id = cc::SharedBitmap::GenerateId();
+ handle_map_[id] = data;
+ return make_scoped_ptr(new cc::SharedBitmap(
+ data->pixels.get(), id, base::Bind(&FreeSharedMemory, data)));
}
scoped_ptr<cc::SharedBitmap> HostSharedBitmapManager::GetSharedBitmapFromId(
@@ -66,6 +81,10 @@ scoped_ptr<cc::SharedBitmap> HostSharedBitmapManager::GetSharedBitmapFromId(
bitmap_size > data->buffer_size)
return scoped_ptr<cc::SharedBitmap>();
+ if (data->pixels) {
+ return make_scoped_ptr(new cc::SharedBitmap(
+ data->pixels.get(), id, base::Bind(&FreeSharedMemory, it->second)));
+ }
if (!data->memory->memory()) {
TRACE_EVENT0("renderer_host",
"HostSharedBitmapManager::GetSharedBitmapFromId");
diff --git a/content/common/input/input_param_traits_unittest.cc b/content/common/input/input_param_traits_unittest.cc
index 8be679e160..db07d29dc5 100644
--- a/content/common/input/input_param_traits_unittest.cc
+++ b/content/common/input/input_param_traits_unittest.cc
@@ -51,8 +51,7 @@ class InputParamTraitsTest : public testing::Test {
static void Compare(const SyntheticPinchGestureParams* a,
const SyntheticPinchGestureParams* b) {
EXPECT_EQ(a->gesture_source_type, b->gesture_source_type);
- EXPECT_EQ(a->zoom_in, b->zoom_in);
- EXPECT_EQ(a->total_num_pixels_covered, b->total_num_pixels_covered);
+ EXPECT_EQ(a->scale_factor, b->scale_factor);
EXPECT_EQ(a->anchor, b->anchor);
EXPECT_EQ(a->relative_pointer_speed_in_pixels_s,
b->relative_pointer_speed_in_pixels_s);
@@ -209,8 +208,7 @@ TEST_F(InputParamTraitsTest, SyntheticPinchGestureParams) {
scoped_ptr<SyntheticPinchGestureParams> gesture_params(
new SyntheticPinchGestureParams);
gesture_params->gesture_source_type = SyntheticGestureParams::TOUCH_INPUT;
- gesture_params->zoom_in = true;
- gesture_params->total_num_pixels_covered = 123;
+ gesture_params->scale_factor = 2.3f;
gesture_params->anchor.SetPoint(234, 345);
gesture_params->relative_pointer_speed_in_pixels_s = 456;
ASSERT_EQ(SyntheticGestureParams::PINCH_GESTURE,
diff --git a/content/common/input/synthetic_pinch_gesture_params.cc b/content/common/input/synthetic_pinch_gesture_params.cc
index 5b4ca44860..b4efcb02b1 100644
--- a/content/common/input/synthetic_pinch_gesture_params.cc
+++ b/content/common/input/synthetic_pinch_gesture_params.cc
@@ -9,15 +9,13 @@
namespace content {
SyntheticPinchGestureParams::SyntheticPinchGestureParams()
- : zoom_in(true),
- total_num_pixels_covered(100),
+ : scale_factor(1.0f),
relative_pointer_speed_in_pixels_s(500) {}
SyntheticPinchGestureParams::SyntheticPinchGestureParams(
const SyntheticPinchGestureParams& other)
: SyntheticGestureParams(other),
- zoom_in(other.zoom_in),
- total_num_pixels_covered(other.total_num_pixels_covered),
+ scale_factor(other.scale_factor),
anchor(other.anchor),
relative_pointer_speed_in_pixels_s(
other.relative_pointer_speed_in_pixels_s) {}
diff --git a/content/common/input/synthetic_pinch_gesture_params.h b/content/common/input/synthetic_pinch_gesture_params.h
index 215558d45b..393b0cc1c6 100644
--- a/content/common/input/synthetic_pinch_gesture_params.h
+++ b/content/common/input/synthetic_pinch_gesture_params.h
@@ -21,8 +21,7 @@ struct CONTENT_EXPORT SyntheticPinchGestureParams
virtual GestureType GetGestureType() const OVERRIDE;
- bool zoom_in;
- int total_num_pixels_covered;
+ float scale_factor;
gfx::Point anchor;
int relative_pointer_speed_in_pixels_s;
diff --git a/content/common/input_messages.h b/content/common/input_messages.h
index df67c713d5..6b36bec4d1 100644
--- a/content/common/input_messages.h
+++ b/content/common/input_messages.h
@@ -10,6 +10,7 @@
#include "content/common/content_export.h"
#include "content/common/content_param_traits.h"
#include "content/common/edit_command.h"
+#include "content/common/input/did_overscroll_params.h"
#include "content/common/input/input_event.h"
#include "content/common/input/input_event_ack_state.h"
#include "content/common/input/input_param_traits.h"
@@ -22,9 +23,10 @@
#include "content/common/input/touch_action.h"
#include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
-#include "ui/events/latency_info.h"
+#include "ui/events/ipc/latency_info_param_traits.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
+#include "ui/gfx/vector2d_f.h"
#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
@@ -51,6 +53,12 @@ IPC_ENUM_TRAITS_VALIDATE(content::TouchAction, (
(!(value & content::TOUCH_ACTION_PINCH_ZOOM) ||
(value == content::TOUCH_ACTION_MANIPULATION))))
+IPC_STRUCT_TRAITS_BEGIN(content::DidOverscrollParams)
+ IPC_STRUCT_TRAITS_MEMBER(accumulated_overscroll)
+ IPC_STRUCT_TRAITS_MEMBER(latest_overscroll_delta)
+ IPC_STRUCT_TRAITS_MEMBER(current_fling_velocity)
+IPC_STRUCT_TRAITS_END()
+
IPC_STRUCT_TRAITS_BEGIN(content::EditCommand)
IPC_STRUCT_TRAITS_MEMBER(name)
IPC_STRUCT_TRAITS_MEMBER(value)
@@ -76,8 +84,7 @@ IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(content::SyntheticPinchGestureParams)
IPC_STRUCT_TRAITS_PARENT(content::SyntheticGestureParams)
- IPC_STRUCT_TRAITS_MEMBER(zoom_in)
- IPC_STRUCT_TRAITS_MEMBER(total_num_pixels_covered)
+ IPC_STRUCT_TRAITS_MEMBER(scale_factor)
IPC_STRUCT_TRAITS_MEMBER(anchor)
IPC_STRUCT_TRAITS_MEMBER(relative_pointer_speed_in_pixels_s)
IPC_STRUCT_TRAITS_END()
@@ -88,6 +95,14 @@ IPC_STRUCT_TRAITS_BEGIN(content::SyntheticTapGestureParams)
IPC_STRUCT_TRAITS_MEMBER(duration_ms)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_BEGIN(InputHostMsg_HandleInputEvent_ACK_Params)
+ IPC_STRUCT_MEMBER(blink::WebInputEvent::Type, type)
+ IPC_STRUCT_MEMBER(content::InputEventAckState, state)
+ IPC_STRUCT_MEMBER(ui::LatencyInfo, latency)
+ // TODO(jdduke): Use Optional<T> type to avoid heap alloc, crbug.com/375002.
+ IPC_STRUCT_MEMBER(scoped_ptr<content::DidOverscrollParams>, overscroll)
+IPC_STRUCT_END()
+
// Sends an input event to the render widget.
IPC_MESSAGE_ROUTED3(InputMsg_HandleInputEvent,
IPC::WebInputEventPointer /* event */,
@@ -177,10 +192,8 @@ IPC_MESSAGE_ROUTED0(InputMsg_SyntheticGestureCompleted);
// Messages sent from the renderer to the browser.
// Acknowledges receipt of a InputMsg_HandleInputEvent message.
-IPC_MESSAGE_ROUTED3(InputHostMsg_HandleInputEvent_ACK,
- blink::WebInputEvent::Type,
- content::InputEventAckState /* ack_result */,
- ui::LatencyInfo /* latency_info */)
+IPC_MESSAGE_ROUTED1(InputHostMsg_HandleInputEvent_ACK,
+ InputHostMsg_HandleInputEvent_ACK_Params)
IPC_MESSAGE_ROUTED1(InputHostMsg_QueueSyntheticGesture,
content::SyntheticGesturePacket)
@@ -189,6 +202,11 @@ IPC_MESSAGE_ROUTED1(InputHostMsg_QueueSyntheticGesture,
IPC_MESSAGE_ROUTED1(InputHostMsg_SetTouchAction,
content::TouchAction /* touch_action */)
+// Sent by the compositor when input scroll events are dropped due to bounds
+// restrictions on the root scroll offset.
+IPC_MESSAGE_ROUTED1(InputHostMsg_DidOverscroll,
+ content::DidOverscrollParams /* params */)
+
// Adding a new message? Stick to the sort order above: first platform
// independent InputMsg, then ifdefs for platform specific InputMsg, then
// platform independent InputHostMsg, then ifdefs for platform specific
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h
index 40dd56e2c6..b1b4af4ac1 100644
--- a/content/common/media/media_player_messages_android.h
+++ b/content/common/media/media_player_messages_android.h
@@ -42,6 +42,7 @@ IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(media::DemuxerData)
IPC_STRUCT_TRAITS_MEMBER(type)
IPC_STRUCT_TRAITS_MEMBER(access_units)
+ IPC_STRUCT_TRAITS_MEMBER(demuxer_configs)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(media::AccessUnit)
@@ -175,10 +176,6 @@ IPC_MESSAGE_CONTROL2(MediaPlayerMsg_ReadFromDemuxer,
int /* demuxer_client_id */,
media::DemuxerStream::Type /* type */)
-// The player needs new config data
-IPC_MESSAGE_CONTROL1(MediaPlayerMsg_MediaConfigRequest,
- int /* demuxer_client_id */)
-
// Clank has connected to the remote device.
IPC_MESSAGE_ROUTED2(MediaPlayerMsg_ConnectedToRemoteDevice,
int /* player_id */,
@@ -192,6 +189,9 @@ IPC_MESSAGE_ROUTED1(MediaPlayerMsg_DisconnectedFromRemoteDevice,
IPC_MESSAGE_ROUTED1(MediaPlayerMsg_RequestFullscreen,
int /*player_id */)
+// Pauses all video playback.
+IPC_MESSAGE_ROUTED0(MediaPlayerMsg_PauseVideo)
+
// Messages for controlling the media playback in browser process ----------
// Destroy the media player object.
diff --git a/content/common/p2p_messages.h b/content/common/p2p_messages.h
index c227b0ae7e..9f8c201b80 100644
--- a/content/common/p2p_messages.h
+++ b/content/common/p2p_messages.h
@@ -23,10 +23,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(content::P2PSocketOption,
IPC_ENUM_TRAITS_MIN_MAX_VALUE(talk_base::DiffServCodePoint,
talk_base::DSCP_NO_CHANGE,
talk_base::DSCP_CS7)
-IPC_ENUM_TRAITS_MIN_MAX_VALUE(net::NetworkChangeNotifier::ConnectionType,
- net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
- net::NetworkChangeNotifier::CONNECTION_NONE)
-
IPC_STRUCT_TRAITS_BEGIN(net::NetworkInterface)
IPC_STRUCT_TRAITS_MEMBER(name)
diff --git a/content/common/page_state_serialization.cc b/content/common/page_state_serialization.cc
index edef549105..9239d030cc 100644
--- a/content/common/page_state_serialization.cc
+++ b/content/common/page_state_serialization.cc
@@ -191,12 +191,14 @@ struct SerializeObject {
// 18: Add referrer policy.
// 19: Remove target frame id, which was a bad idea, and original url string,
// which is no longer used.
+// 20: Add pinch viewport scroll offset, the offset of the pinched zoomed
+// viewport within the unzoomed main frame.
//
// NOTE: If the version is -1, then the pickle contains only a URL string.
// See ReadPageState.
//
const int kMinVersion = 11;
-const int kCurrentVersion = 19;
+const int kCurrentVersion = 20;
// A bunch of convenience functions to read/write to SerializeObjects. The
// de-serializers assume the input data will be in the correct format and fall
@@ -510,6 +512,8 @@ void WriteFrameState(
WriteInteger64(state.item_sequence_number, obj);
WriteInteger64(state.document_sequence_number, obj);
WriteInteger(state.referrer_policy, obj);
+ WriteReal(state.pinch_viewport_scroll_offset.x(), obj);
+ WriteReal(state.pinch_viewport_scroll_offset.y(), obj);
bool has_state_object = !state.state_object.is_null();
WriteBoolean(has_state_object, obj);
@@ -572,6 +576,14 @@ void ReadFrameState(SerializeObject* obj, bool is_top,
static_cast<blink::WebReferrerPolicy>(ReadInteger(obj));
}
+ if (obj->version >= 20) {
+ double x = ReadReal(obj);
+ double y = ReadReal(obj);
+ state->pinch_viewport_scroll_offset = gfx::PointF(x, y);
+ } else {
+ state->pinch_viewport_scroll_offset = gfx::PointF(-1, -1);
+ }
+
bool has_state_object = ReadBoolean(obj);
if (has_state_object)
state->state_object = ReadString(obj);
diff --git a/content/common/page_state_serialization.h b/content/common/page_state_serialization.h
index 43efb53da4..d3d3b02973 100644
--- a/content/common/page_state_serialization.h
+++ b/content/common/page_state_serialization.h
@@ -12,6 +12,7 @@
#include "third_party/WebKit/public/platform/WebHTTPBody.h"
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
#include "ui/gfx/point.h"
+#include "ui/gfx/point_f.h"
#include "url/gurl.h"
namespace content {
@@ -47,6 +48,7 @@ struct CONTENT_EXPORT ExplodedFrameState {
base::NullableString16 target;
base::NullableString16 state_object;
std::vector<base::NullableString16> document_state;
+ gfx::PointF pinch_viewport_scroll_offset;
gfx::Point scroll_offset;
int64 item_sequence_number;
int64 document_sequence_number;
diff --git a/content/common/page_state_serialization_unittest.cc b/content/common/page_state_serialization_unittest.cc
index c401878a16..39ff3f2c8b 100644
--- a/content/common/page_state_serialization_unittest.cc
+++ b/content/common/page_state_serialization_unittest.cc
@@ -72,6 +72,7 @@ void ExpectEquality(const ExplodedFrameState& a, const ExplodedFrameState& b) {
EXPECT_EQ(a.target, b.target);
EXPECT_EQ(a.state_object, b.state_object);
ExpectEquality(a.document_state, b.document_state);
+ EXPECT_EQ(a.pinch_viewport_scroll_offset, b.pinch_viewport_scroll_offset);
EXPECT_EQ(a.scroll_offset, b.scroll_offset);
EXPECT_EQ(a.item_sequence_number, b.item_sequence_number);
EXPECT_EQ(a.document_sequence_number, b.document_sequence_number);
@@ -100,6 +101,7 @@ class PageStateSerializationTest : public testing::Test {
frame_state->document_state.push_back(NS16("q"));
frame_state->document_state.push_back(NS16("text"));
frame_state->document_state.push_back(NS16("dev.chromium.org"));
+ frame_state->pinch_viewport_scroll_offset = gfx::PointF(10, 15);
frame_state->scroll_offset = gfx::Point(0, 100);
frame_state->item_sequence_number = 1;
frame_state->document_sequence_number = 2;
@@ -137,6 +139,7 @@ class PageStateSerializationTest : public testing::Test {
frame_state->referrer_policy = blink::WebReferrerPolicyDefault;
if (!is_child)
frame_state->target = NS16("target");
+ frame_state->pinch_viewport_scroll_offset = gfx::PointF(-1, -1);
frame_state->scroll_offset = gfx::Point(42, -42);
frame_state->item_sequence_number = 123;
frame_state->document_sequence_number = 456;
diff --git a/content/common/resource_messages.h b/content/common/resource_messages.h
index a77864f54b..ecda9064e2 100644
--- a/content/common/resource_messages.h
+++ b/content/common/resource_messages.h
@@ -84,7 +84,7 @@ IPC_ENUM_TRAITS_MAX_VALUE( \
net::HttpResponseInfo::NUM_OF_CONNECTION_INFOS - 1)
IPC_STRUCT_TRAITS_BEGIN(content::ResourceResponseHead)
- IPC_STRUCT_TRAITS_PARENT(webkit_glue::ResourceResponseInfo)
+IPC_STRUCT_TRAITS_PARENT(content::ResourceResponseInfo)
IPC_STRUCT_TRAITS_MEMBER(error_code)
IPC_STRUCT_TRAITS_MEMBER(request_start)
IPC_STRUCT_TRAITS_MEMBER(response_start)
@@ -96,7 +96,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::SyncLoadResult)
IPC_STRUCT_TRAITS_MEMBER(data)
IPC_STRUCT_TRAITS_END()
-IPC_STRUCT_TRAITS_BEGIN(webkit_glue::ResourceResponseInfo)
+IPC_STRUCT_TRAITS_BEGIN(content::ResourceResponseInfo)
IPC_STRUCT_TRAITS_MEMBER(request_time)
IPC_STRUCT_TRAITS_MEMBER(response_time)
IPC_STRUCT_TRAITS_MEMBER(headers)
@@ -255,9 +255,10 @@ IPC_MESSAGE_CONTROL3(ResourceMsg_UploadProgress,
// Sent when the request has been redirected. The receiver is expected to
// respond with either a FollowRedirect message (if the redirect is to be
// followed) or a CancelRequest message (if it should not be followed).
-IPC_MESSAGE_CONTROL3(ResourceMsg_ReceivedRedirect,
+IPC_MESSAGE_CONTROL4(ResourceMsg_ReceivedRedirect,
int /* request_id */,
GURL /* new_url */,
+ GURL /* new_first_party_for_cookies */,
content::ResourceResponseHead)
// Sent to set the shared memory buffer to be used to transmit response data to
@@ -302,7 +303,8 @@ IPC_MESSAGE_CONTROL2(ResourceMsg_RequestComplete,
// Resource messages sent from the renderer to the browser.
// Makes a resource request via the browser.
-IPC_MESSAGE_ROUTED2(ResourceHostMsg_RequestResource,
+IPC_MESSAGE_CONTROL3(ResourceHostMsg_RequestResource,
+ int /* routing_id */,
int /* request_id */,
ResourceHostMsg_Request)
@@ -312,10 +314,8 @@ IPC_MESSAGE_CONTROL1(ResourceHostMsg_CancelRequest,
// Follows a redirect that occured for the resource request with the ID given
// as the parameter.
-IPC_MESSAGE_CONTROL3(ResourceHostMsg_FollowRedirect,
- int /* request_id */,
- bool /* has_new_first_party_for_cookies */,
- GURL /* new_first_party_for_cookies */)
+IPC_MESSAGE_CONTROL1(ResourceHostMsg_FollowRedirect,
+ int /* request_id */)
// Makes a synchronous resource request via the browser.
IPC_SYNC_MESSAGE_ROUTED2_1(ResourceHostMsg_SyncLoad,
diff --git a/content/common/sandbox_linux/bpf_gpu_policy_linux.cc b/content/common/sandbox_linux/bpf_gpu_policy_linux.cc
index 8ea2600a7e..e54cb21090 100644
--- a/content/common/sandbox_linux/bpf_gpu_policy_linux.cc
+++ b/content/common/sandbox_linux/bpf_gpu_policy_linux.cc
@@ -87,6 +87,10 @@ intptr_t GpuSIGSYS_Handler(const struct arch_seccomp_data& args,
return broker_process->Access(reinterpret_cast<const char*>(args.args[0]),
static_cast<int>(args.args[1]));
case __NR_open:
+#if defined(MEMORY_SANITIZER)
+ // http://crbug.com/372840
+ __msan_unpoison_string(reinterpret_cast<const char*>(args.args[0]));
+#endif
return broker_process->Open(reinterpret_cast<const char*>(args.args[0]),
static_cast<int>(args.args[1]));
case __NR_openat:
diff --git a/content/common/sandbox_linux/sandbox_linux.cc b/content/common/sandbox_linux/sandbox_linux.cc
index 237cc89deb..a11d17b71a 100644
--- a/content/common/sandbox_linux/sandbox_linux.cc
+++ b/content/common/sandbox_linux/sandbox_linux.cc
@@ -34,6 +34,11 @@
#include "sandbox/linux/services/yama.h"
#include "sandbox/linux/suid/client/setuid_sandbox_client.h"
+#if (defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
+ defined(LEAK_SANITIZER))
+#include <sanitizer/common_interface_defs.h>
+#endif
+
using sandbox::Yama;
namespace {
@@ -124,12 +129,6 @@ LinuxSandbox* LinuxSandbox::GetInstance() {
return instance;
}
-#if (defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
- defined(LEAK_SANITIZER)) && defined(OS_LINUX)
-// Sanitizer API call to notify the tool the sandbox is going to be turned on.
-extern "C" void __sanitizer_sandbox_on_notify(void *reserved);
-#endif
-
void LinuxSandbox::PreinitializeSandbox() {
CHECK(!pre_initialized_);
seccomp_bpf_supported_ = false;
@@ -137,7 +136,7 @@ void LinuxSandbox::PreinitializeSandbox() {
defined(LEAK_SANITIZER)) && defined(OS_LINUX)
// Sanitizers need to open some resources before the sandbox is enabled.
// This should not fork, not launch threads, not open a directory.
- __sanitizer_sandbox_on_notify(/*reserved*/ NULL);
+ __sanitizer_sandbox_on_notify(/*args*/ NULL);
#endif
#if !defined(NDEBUG)
diff --git a/content/common/sandbox_linux/sandbox_linux.h b/content/common/sandbox_linux/sandbox_linux.h
index 235ba96ce6..8ff42dfc88 100644
--- a/content/common/sandbox_linux/sandbox_linux.h
+++ b/content/common/sandbox_linux/sandbox_linux.h
@@ -30,7 +30,7 @@ class LinuxSandbox {
enum LinuxSandboxIPCMethods {
METHOD_GET_FONT_FAMILY_FOR_CHAR = 32,
METHOD_LOCALTIME = 33,
- METHOD_GET_CHILD_WITH_INODE = 34,
+ DEPRECATED_METHOD_GET_CHILD_WITH_INODE = 34,
METHOD_GET_STYLE_FOR_STRIKE = 35,
METHOD_MAKE_SHARED_MEMORY_SEGMENT = 36,
METHOD_MATCH_WITH_FALLBACK = 37,
@@ -85,6 +85,9 @@ class LinuxSandbox {
private:
friend struct DefaultSingletonTraits<LinuxSandbox>;
+ LinuxSandbox();
+ ~LinuxSandbox();
+
// Some methods are static and get an instance of the Singleton. These
// are the non-static implementations.
bool InitializeSandboxImpl();
@@ -118,8 +121,7 @@ class LinuxSandbox {
bool yama_is_enforcing_; // Accurate if pre_initialized_.
scoped_ptr<sandbox::SetuidSandboxClient> setuid_sandbox_client_;
- ~LinuxSandbox();
- DISALLOW_IMPLICIT_CONSTRUCTORS(LinuxSandbox);
+ DISALLOW_COPY_AND_ASSIGN(LinuxSandbox);
};
} // namespace content
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc
index 7c3048aadb..401d68fa56 100644
--- a/content/common/sandbox_win.cc
+++ b/content/common/sandbox_win.cc
@@ -343,6 +343,10 @@ bool AddPolicyForSandboxedProcess(sandbox::TargetPolicy* policy) {
if (result != sandbox::SBOX_ALL_OK)
return false;
+ // Win8+ adds a device DeviceApi that we don't need.
+ if (base::win::GetVersion() > base::win::VERSION_WIN7)
+ policy->AddKernelObjectToClose(L"File", L"\\Device\\DeviceApi");
+
sandbox::TokenLevel initial_token = sandbox::USER_UNPROTECTED;
if (base::win::GetVersion() > base::win::VERSION_XP) {
// On 2003/Vista the initial token has to be restricted if the main
@@ -602,6 +606,13 @@ base::ProcessHandle StartSandboxedProcess(
sandbox::MITIGATION_DEP_NO_ATL_THUNK |
sandbox::MITIGATION_SEHOP;
+ if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
+ type_str == switches::kRendererProcess &&
+ browser_command_line.HasSwitch(
+ switches::kEnableWin32kRendererLockDown)) {
+ mitigations |= sandbox::MITIGATION_WIN32K_DISABLE;
+ }
+
if (policy->SetProcessMitigations(mitigations) != sandbox::SBOX_ALL_OK)
return 0;
diff --git a/content/common/savable_url_schemes.cc b/content/common/savable_url_schemes.cc
index 290d78f7b0..c149aaeef3 100644
--- a/content/common/savable_url_schemes.cc
+++ b/content/common/savable_url_schemes.cc
@@ -15,12 +15,12 @@ namespace {
const char* const kDefaultSavableSchemes[] = {
url::kHttpScheme,
url::kHttpsScheme,
- kFileScheme,
- kFileSystemScheme,
- kFtpScheme,
+ url::kFileScheme,
+ url::kFileSystemScheme,
+ url::kFtpScheme,
kChromeDevToolsScheme,
kChromeUIScheme,
- kDataScheme,
+ url::kDataScheme,
NULL
};
diff --git a/content/common/service_worker/OWNERS b/content/common/service_worker/OWNERS
index 9060807c32..d2af716a52 100644
--- a/content/common/service_worker/OWNERS
+++ b/content/common/service_worker/OWNERS
@@ -1,6 +1,8 @@
-alecflett@chromium.org
-kinuko@chromium.org
michaeln@chromium.org
+falken@chromium.org
+
+# may not be available
+kinuko@chromium.org
# Changes to IPC messages require a security review to avoid introducing
# new sandbox escapes.
diff --git a/content/common/service_worker/embedded_worker_messages.h b/content/common/service_worker/embedded_worker_messages.h
index b31e63b086..df5cf6914a 100644
--- a/content/common/service_worker/embedded_worker_messages.h
+++ b/content/common/service_worker/embedded_worker_messages.h
@@ -23,6 +23,7 @@ IPC_STRUCT_BEGIN(EmbeddedWorkerMsg_StartWorker_Params)
IPC_STRUCT_MEMBER(GURL, scope)
IPC_STRUCT_MEMBER(GURL, script_url)
IPC_STRUCT_MEMBER(int, worker_devtools_agent_route_id)
+ IPC_STRUCT_MEMBER(bool, pause_on_start)
IPC_STRUCT_END()
// Parameters structure for EmbeddedWorkerHostMsg_ReportConsoleMessage.
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h
index e3f2e38fed..5e6dc8703a 100644
--- a/content/common/service_worker/service_worker_messages.h
+++ b/content/common/service_worker/service_worker_messages.h
@@ -39,8 +39,8 @@ IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerFetchEventResult,
IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse)
IPC_STRUCT_TRAITS_MEMBER(status_code)
IPC_STRUCT_TRAITS_MEMBER(status_text)
- IPC_STRUCT_TRAITS_MEMBER(method)
IPC_STRUCT_TRAITS_MEMBER(headers)
+ IPC_STRUCT_TRAITS_MEMBER(blob_uuid)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerObjectInfo)
diff --git a/content/common/service_worker/service_worker_types.cc b/content/common/service_worker/service_worker_types.cc
index 343c5244e1..ce5cd7aee0 100644
--- a/content/common/service_worker/service_worker_types.cc
+++ b/content/common/service_worker/service_worker_types.cc
@@ -24,12 +24,13 @@ ServiceWorkerResponse::ServiceWorkerResponse() : status_code(0) {}
ServiceWorkerResponse::ServiceWorkerResponse(
int status_code,
const std::string& status_text,
- const std::string& method,
- const std::map<std::string, std::string>& headers)
+ const std::map<std::string, std::string>& headers,
+ const std::string& blob_uuid)
: status_code(status_code),
status_text(status_text),
- method(method),
- headers(headers) {}
+ headers(headers),
+ blob_uuid(blob_uuid) {
+}
ServiceWorkerResponse::~ServiceWorkerResponse() {}
diff --git a/content/common/service_worker/service_worker_types.h b/content/common/service_worker/service_worker_types.h
index 319e272280..8f49f9a563 100644
--- a/content/common/service_worker/service_worker_types.h
+++ b/content/common/service_worker/service_worker_types.h
@@ -61,14 +61,14 @@ struct CONTENT_EXPORT ServiceWorkerResponse {
ServiceWorkerResponse();
ServiceWorkerResponse(int status_code,
const std::string& status_text,
- const std::string& method,
- const std::map<std::string, std::string>& headers);
+ const std::map<std::string, std::string>& headers,
+ const std::string& blob_uuid);
~ServiceWorkerResponse();
int status_code;
std::string status_text;
- std::string method;
std::map<std::string, std::string> headers;
+ std::string blob_uuid;
};
// Represents initialization info for a WebServiceWorker object.
diff --git a/content/common/swapped_out_messages.cc b/content/common/swapped_out_messages.cc
index be0fe8a8f9..72bf66b505 100644
--- a/content/common/swapped_out_messages.cc
+++ b/content/common/swapped_out_messages.cc
@@ -27,8 +27,6 @@ bool SwappedOutMessages::CanSendWhileSwappedOut(const IPC::Message* msg) {
case ViewHostMsg_RenderProcessGone::ID:
case ViewHostMsg_ClosePage_ACK::ID:
case ViewHostMsg_SwapCompositorFrame::ID:
- case ViewHostMsg_UpdateIsDelayed::ID:
- case ViewHostMsg_DidActivateAcceleratedCompositing::ID:
// Handled by WorkerMessageFilter (or by SharedWorkerMessageFilter when
// embedded-shared-worker is enabled).
case ViewHostMsg_DocumentDetached::ID:
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 8a2d3ddd22..4688fd6494 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -14,8 +14,6 @@
#include "content/common/content_export.h"
#include "content/common/content_param_traits.h"
#include "content/common/cookie_data.h"
-#include "content/common/input/did_overscroll_params.h"
-#include "content/common/input/input_event_ack_state.h"
#include "content/common/navigation_gesture.h"
#include "content/common/pepper_renderer_instance_data.h"
#include "content/common/view_message_enums.h"
@@ -38,6 +36,7 @@
#include "media/audio/audio_parameters.h"
#include "media/base/channel_layout.h"
#include "media/base/media_log_event.h"
+#include "net/base/network_change_notifier.h"
#include "third_party/WebKit/public/platform/WebFloatPoint.h"
#include "third_party/WebKit/public/platform/WebFloatRect.h"
#include "third_party/WebKit/public/platform/WebScreenInfo.h"
@@ -154,12 +153,6 @@ IPC_STRUCT_TRAITS_BEGIN(content::DateTimeSuggestion)
IPC_STRUCT_TRAITS_MEMBER(label)
IPC_STRUCT_TRAITS_END()
-IPC_STRUCT_TRAITS_BEGIN(content::DidOverscrollParams)
- IPC_STRUCT_TRAITS_MEMBER(accumulated_overscroll)
- IPC_STRUCT_TRAITS_MEMBER(latest_overscroll_delta)
- IPC_STRUCT_TRAITS_MEMBER(current_fling_velocity)
-IPC_STRUCT_TRAITS_END()
-
IPC_STRUCT_TRAITS_BEGIN(content::FaviconURL)
IPC_STRUCT_TRAITS_MEMBER(icon_url)
IPC_STRUCT_TRAITS_MEMBER(icon_type)
@@ -462,6 +455,10 @@ IPC_STRUCT_BEGIN(ViewMsg_New_Params)
// Whether the RenderView should initially be swapped out.
IPC_STRUCT_MEMBER(bool, swapped_out)
+ // The ID of the proxy object for the main frame in this view. It is only
+ // used if |swapped_out| is true.
+ IPC_STRUCT_MEMBER(int32, proxy_routing_id)
+
// Whether the RenderView should initially be hidden.
IPC_STRUCT_MEMBER(bool, hidden)
@@ -533,10 +530,6 @@ IPC_MESSAGE_ROUTED2(ViewMsg_UpdateVSyncParameters,
base::TimeTicks /* timebase */,
base::TimeDelta /* interval */)
-// Set the top-level frame to the provided name.
-IPC_MESSAGE_ROUTED1(ViewMsg_SetName,
- std::string /* frame_name */)
-
// Sent to the RenderView when a new tab is swapped into an existing
// tab and the histories need to be merged. The existing tab has a history of
// |merged_history_length| which precedes the history of the new tab. All
@@ -677,12 +670,6 @@ IPC_MESSAGE_ROUTED0(ViewMsg_DisownOpener)
IPC_MESSAGE_ROUTED1(ViewMsg_Zoom,
content::PageZoom /* function */)
-// Set the zoom level for the current main frame. If the level actually
-// changes, a ViewHostMsg_DidZoomURL message will be sent back to the browser
-// telling it what url got zoomed and what its current zoom level is.
-IPC_MESSAGE_ROUTED1(ViewMsg_SetZoomLevel,
- double /* zoom_level */)
-
// Set the zoom level for a particular url that the renderer is in the
// process of loading. This will be stored, to be used if the load commits
// and ignored otherwise.
@@ -821,10 +808,8 @@ IPC_MESSAGE_ROUTED1(ViewMsg_SetTextDirection,
// Tells the renderer to clear the focused element (if any).
IPC_MESSAGE_ROUTED0(ViewMsg_ClearFocusedElement)
-// Make the RenderView transparent and render it onto a custom background. The
-// background will be tiled in both directions if it is not large enough.
-IPC_MESSAGE_ROUTED1(ViewMsg_SetBackground,
- SkBitmap /* background */)
+// Make the RenderView background transparent or opaque.
+IPC_MESSAGE_ROUTED1(ViewMsg_SetBackgroundOpaque, bool /* opaque */)
// Used to tell the renderer not to add scrollbars with height and
// width below a threshold.
@@ -851,10 +836,11 @@ IPC_MESSAGE_ROUTED0(ViewMsg_WorkerScriptLoadFailed)
// This message is sent only if the worker successfully loaded the script.
IPC_MESSAGE_ROUTED0(ViewMsg_WorkerConnected)
-// Tells the renderer that the network state has changed and that
-// window.navigator.onLine should be updated for all WebViews.
-IPC_MESSAGE_CONTROL1(ViewMsg_NetworkStateChanged,
- bool /* online */)
+// Tells the renderer that the network state has changed so that
+// navigator.onLine and navigator.connection can be updated.
+IPC_MESSAGE_CONTROL2(ViewMsg_NetworkStateChanged,
+ bool /* is_online */,
+ net::NetworkChangeNotifier::ConnectionType /* type */)
// Reply to ViewHostMsg_OpenChannelToPpapiBroker
// Tells the renderer that the channel to the broker has been created.
@@ -952,9 +938,6 @@ IPC_MESSAGE_ROUTED1(ViewMsg_BeginFrame,
// processed on the browser side.
IPC_MESSAGE_ROUTED0(ViewMsg_ImeEventAck)
-// Sent by the browser when we should pause video playback.
-IPC_MESSAGE_ROUTED0(ViewMsg_PauseVideo);
-
// Extracts the data at the given rect, returning it through the
// ViewHostMsg_SmartClipDataExtracted IPC.
IPC_MESSAGE_ROUTED1(ViewMsg_ExtractSmartClipData,
@@ -996,6 +979,8 @@ IPC_MESSAGE_ROUTED2(ViewMsg_ReclaimCompositorResources,
uint32 /* output_surface_id */,
cc::CompositorFrameAck /* ack */)
+IPC_MESSAGE_ROUTED0(ViewMsg_SelectWordAroundCaret)
+
// -----------------------------------------------------------------------------
// Messages sent from the renderer to the browser.
@@ -1126,32 +1111,17 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_UpdateState,
int32 /* page_id */,
content::PageState /* state */)
-// Changes the title for the page in the UI when the page is navigated or the
-// title changes.
-IPC_MESSAGE_ROUTED3(ViewHostMsg_UpdateTitle,
- int32 /* page_id */,
- base::string16 /* title */,
- blink::WebTextDirection /* title direction */)
-
-// Change the encoding name of the page in UI when the page has detected
-// proper encoding name.
-IPC_MESSAGE_ROUTED1(ViewHostMsg_UpdateEncoding,
- std::string /* new encoding name */)
-
// Notifies the browser that we want to show a destination url for a potential
// action (e.g. when the user is hovering over a link).
IPC_MESSAGE_ROUTED2(ViewHostMsg_UpdateTargetURL,
int32,
GURL)
-// Sent when the renderer main frame has made progress loading.
-IPC_MESSAGE_ROUTED1(ViewHostMsg_DidChangeLoadProgress,
- double /* load_progress */)
-
// Sent when the document element is available for the top-level frame. This
// happens after the page starts loading, but before all resources are
// finished.
-IPC_MESSAGE_ROUTED0(ViewHostMsg_DocumentAvailableInMainFrame)
+IPC_MESSAGE_ROUTED1(ViewHostMsg_DocumentAvailableInMainFrame,
+ bool /* uses_temporary_zoom_level */)
// Sent when the renderer loads a resource from its memory cache.
// The security info is non empty if the resource was originally loaded over
@@ -1177,15 +1147,6 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_DidRunInsecureContent,
IPC_MESSAGE_ROUTED1(ViewHostMsg_UpdateRect,
ViewHostMsg_UpdateRect_Params)
-// Sent to unblock the browser's UI thread if it is waiting on an UpdateRect,
-// which may get delayed until the browser's UI unblocks.
-IPC_MESSAGE_ROUTED0(ViewHostMsg_UpdateIsDelayed)
-
-// Sent by the renderer when accelerated compositing is enabled or disabled to
-// notify the browser whether or not is should do painting.
-IPC_MESSAGE_ROUTED1(ViewHostMsg_DidActivateAcceleratedCompositing,
- bool /* true if the accelerated compositor is actve */)
-
IPC_MESSAGE_ROUTED0(ViewHostMsg_Focus)
IPC_MESSAGE_ROUTED0(ViewHostMsg_Blur)
@@ -1234,7 +1195,8 @@ IPC_SYNC_MESSAGE_CONTROL2_0(ViewHostMsg_DeleteCookie,
// Used to check if cookies are enabled for the given URL. This may block
// waiting for a previous SetCookie message to be processed.
-IPC_SYNC_MESSAGE_CONTROL2_1(ViewHostMsg_CookiesEnabled,
+IPC_SYNC_MESSAGE_CONTROL3_1(ViewHostMsg_CookiesEnabled,
+ int /* render_frame_id */,
GURL /* url */,
GURL /* first_party_for_cookies */,
bool /* cookies_enabled */)
@@ -1289,11 +1251,12 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_AppCacheAccessed,
bool /* blocked by policy */)
// Initiates a download based on user actions like 'ALT+click'.
-IPC_MESSAGE_ROUTED4(ViewHostMsg_DownloadUrl,
- GURL /* url */,
- content::Referrer /* referrer */,
- base::string16 /* suggested_name */,
- bool /* use prompt for save location */)
+IPC_MESSAGE_CONTROL5(ViewHostMsg_DownloadUrl,
+ int /* render_view_id */,
+ GURL /* url */,
+ content::Referrer /* referrer */,
+ base::string16 /* suggested_name */,
+ bool /* use prompt for save location */)
// Used to go to the session history entry at the given offset (ie, -1 will
// return the "back" item).
@@ -1433,12 +1396,6 @@ IPC_MESSAGE_ROUTED3(ViewHostMsg_SelectionChanged,
IPC_MESSAGE_ROUTED1(ViewHostMsg_SelectionBoundsChanged,
ViewHostMsg_SelectionBounds_Params)
-#if defined(OS_ANDROID)
-// Notification that the selection root bounds have changed.
-IPC_MESSAGE_ROUTED1(ViewHostMsg_SelectionRootBoundsChanged,
- gfx::Rect /* bounds of the selection root */)
-#endif
-
// Asks the browser to display the file chooser. The result is returned in a
// ViewMsg_RunFileChooserResponse message.
IPC_MESSAGE_ROUTED1(ViewHostMsg_RunFileChooser,
@@ -1474,35 +1431,26 @@ IPC_MESSAGE_ROUTED1(ViewHostMsg_TextInputStateChanged,
IPC_MESSAGE_ROUTED0(ViewHostMsg_ImeCancelComposition)
// Sent when the renderer changes the zoom level for a particular url, so the
-// browser can update its records. If remember is true, then url is used to
-// update the zoom level for all pages in that site. Otherwise, the render
-// view's id is used so that only the menu is updated.
-IPC_MESSAGE_ROUTED3(ViewHostMsg_DidZoomURL,
+// browser can update its records. If the view is a plugin doc, then url is
+// used to update the zoom level for all pages in that site. Otherwise, the
+// render view's id is used so that only the menu is updated.
+IPC_MESSAGE_ROUTED2(ViewHostMsg_DidZoomURL,
double /* zoom_level */,
- bool /* remember */,
GURL /* url */)
// Updates the minimum/maximum allowed zoom percent for this tab from the
// default values. If |remember| is true, then the zoom setting is applied to
// other pages in the site and is saved, otherwise it only applies to this
// tab.
-IPC_MESSAGE_ROUTED3(ViewHostMsg_UpdateZoomLimits,
+IPC_MESSAGE_ROUTED2(ViewHostMsg_UpdateZoomLimits,
int /* minimum_percent */,
- int /* maximum_percent */,
- bool /* remember */)
+ int /* maximum_percent */)
// Notify the browser that this render process can or can't be suddenly
// terminated.
IPC_MESSAGE_CONTROL1(ViewHostMsg_SuddenTerminationChanged,
bool /* enabled */)
-// Informs the browser of updated frame names.
-IPC_MESSAGE_ROUTED3(ViewHostMsg_UpdateFrameName,
- int /* frame_id */,
- bool /* is_top_level */,
- std::string /* name */)
-
-
IPC_STRUCT_BEGIN(ViewHostMsg_CompositorSurfaceBuffersSwapped_Params)
IPC_STRUCT_MEMBER(int32, surface_id)
IPC_STRUCT_MEMBER(uint64, surface_handle)
@@ -1524,11 +1472,6 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_SwapCompositorFrame,
uint32 /* output_surface_id */,
cc::CompositorFrame /* frame */)
-// Sent by the compositor when input scroll events are dropped due to bounds
-// restricions on the root scroll offset.
-IPC_MESSAGE_ROUTED1(ViewHostMsg_DidOverscroll,
- content::DidOverscrollParams /* params */)
-
// Sent by the compositor when a flinging animation is stopped.
IPC_MESSAGE_ROUTED0(ViewHostMsg_DidStopFlinging)
diff --git a/content/common/worker_messages.h b/content/common/worker_messages.h
index 743d22f993..94b3997a4c 100644
--- a/content/common/worker_messages.h
+++ b/content/common/worker_messages.h
@@ -67,7 +67,7 @@ IPC_SYNC_MESSAGE_CONTROL5_1(WorkerProcessHostMsg_AllowDatabase,
bool /* result */)
// Sent by the worker process to check whether access to file system is allowed.
-IPC_SYNC_MESSAGE_CONTROL2_1(WorkerProcessHostMsg_AllowFileSystem,
+IPC_SYNC_MESSAGE_CONTROL2_1(WorkerProcessHostMsg_RequestFileSystemAccessSync,
int /* worker_route_id */,
GURL /* origin url */,
bool /* result */)
diff --git a/content/common_aidl.target.darwin-arm.mk b/content/common_aidl.target.darwin-arm.mk
index d72141d60e..3ec2bfddc4 100644
--- a/content/common_aidl.target.darwin-arm.mk
+++ b/content/common_aidl.target.darwin-arm.mk
@@ -63,7 +63,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -96,12 +103,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -148,7 +160,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -181,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.darwin-arm64.mk b/content/common_aidl.target.darwin-arm64.mk
index e2d47248e1..70bfa99a57 100644
--- a/content/common_aidl.target.darwin-arm64.mk
+++ b/content/common_aidl.target.darwin-arm64.mk
@@ -93,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -174,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.darwin-mips.mk b/content/common_aidl.target.darwin-mips.mk
index 02eac21a5d..ba90f4e497 100644
--- a/content/common_aidl.target.darwin-mips.mk
+++ b/content/common_aidl.target.darwin-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -96,12 +97,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -148,6 +154,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -181,12 +188,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.darwin-x86.mk b/content/common_aidl.target.darwin-x86.mk
index f2f3f922b5..263df627f5 100644
--- a/content/common_aidl.target.darwin-x86.mk
+++ b/content/common_aidl.target.darwin-x86.mk
@@ -62,6 +62,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -97,12 +98,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -147,6 +153,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -182,12 +189,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.darwin-x86_64.mk b/content/common_aidl.target.darwin-x86_64.mk
index 52650789c4..dd60be7fef 100644
--- a/content/common_aidl.target.darwin-x86_64.mk
+++ b/content/common_aidl.target.darwin-x86_64.mk
@@ -97,12 +97,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -182,12 +187,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.linux-arm.mk b/content/common_aidl.target.linux-arm.mk
index d08eab69d8..ab21ad22c2 100644
--- a/content/common_aidl.target.linux-arm.mk
+++ b/content/common_aidl.target.linux-arm.mk
@@ -63,7 +63,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -96,12 +103,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -148,7 +160,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -181,12 +200,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.linux-arm64.mk b/content/common_aidl.target.linux-arm64.mk
index aece78be0c..a7cda20944 100644
--- a/content/common_aidl.target.linux-arm64.mk
+++ b/content/common_aidl.target.linux-arm64.mk
@@ -93,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -174,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.linux-mips.mk b/content/common_aidl.target.linux-mips.mk
index cc336996de..7a865d58ff 100644
--- a/content/common_aidl.target.linux-mips.mk
+++ b/content/common_aidl.target.linux-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -96,12 +97,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -148,6 +154,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -181,12 +188,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.linux-x86.mk b/content/common_aidl.target.linux-x86.mk
index 580b7fa87a..f2196162f5 100644
--- a/content/common_aidl.target.linux-x86.mk
+++ b/content/common_aidl.target.linux-x86.mk
@@ -62,6 +62,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -97,12 +98,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -147,6 +153,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -182,12 +189,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/common_aidl.target.linux-x86_64.mk b/content/common_aidl.target.linux-x86_64.mk
index 5f6343993b..70b48379e2 100644
--- a/content/common_aidl.target.linux-x86_64.mk
+++ b/content/common_aidl.target.linux-x86_64.mk
@@ -97,12 +97,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -182,12 +187,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content.gyp b/content/content.gyp
index 5cc87475f7..d7b3324370 100644
--- a/content/content.gyp
+++ b/content/content.gyp
@@ -27,44 +27,6 @@
'content_common_mojo_bindings.gypi',
'../build/win_precompile.gypi',
],
- 'targets': [
- {
- 'target_name': 'webkit_version',
- 'type': 'none',
- 'actions': [
- {
- 'action_name': 'generate_webkit_version',
- 'inputs': [
- '<(script)',
- '<(lastchange)',
- '<(template)',
- ],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/webkit_version.h',
- ],
- 'action': ['python',
- '<(script)',
- '-f', '<(lastchange)',
- '<(template)',
- '<@(_outputs)',
- ],
- 'variables': {
- 'script': '<(DEPTH)/build/util/version.py',
- 'lastchange': '<(DEPTH)/build/util/LASTCHANGE.blink',
- 'template': 'webkit_version.h.in',
- },
- },
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(SHARED_INTERMEDIATE_DIR)',
- ],
- },
- # Dependents may rely on files generated by this target or one of
- # its own hard dependencies.
- 'hard_dependency': 1,
- },
- ],
}],
# In component mode, we build all of content as a single DLL.
# However, in the static mode, we need to build content as multiple
@@ -421,6 +383,7 @@
'../ui/android/ui_android.gyp:ui_java',
'common_aidl',
'content_common',
+ 'content_strings_grd',
'gesture_event_type_java',
'page_transition_types_java',
'popup_item_type_java',
@@ -434,7 +397,6 @@
'has_java_resources': 1,
'R_package': 'org.chromium.content',
'R_package_relpath': 'org/chromium/content',
- 'java_strings_grd': 'android_content_strings.grd',
},
'conditions': [
['android_webview_build == 0', {
@@ -447,6 +409,16 @@
'includes': [ '../build/java.gypi' ],
},
{
+ 'target_name': 'content_strings_grd',
+ 'type': 'none',
+ 'variables': {
+ 'grd_file': '../content/public/android/java/strings/android_content_strings.grd',
+ },
+ 'includes': [
+ '../build/java_strings_grd.gypi',
+ ],
+ },
+ {
'target_name': 'gesture_event_type_java',
'type': 'none',
'sources': [
@@ -544,7 +516,6 @@
'type': 'none',
'variables': {
'jni_gen_package': 'content',
- 'jni_generator_ptr_type': 'long',
'input_java_class': 'android/view/MotionEvent.class',
},
'includes': [ '../build/jar_file_jni_generator.gypi' ],
diff --git a/content/content_app.gypi b/content/content_app.gypi
index 0a873a4cfa..fcb98e989d 100644
--- a/content/content_app.gypi
+++ b/content/content_app.gypi
@@ -68,7 +68,7 @@
'dependencies': [
'../mojo/mojo.gyp:mojo_environment_chromium',
'../mojo/mojo.gyp:mojo_service_manager',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../mojo/mojo.gyp:mojo_system_impl',
],
}],
diff --git a/content/content_app_both.target.darwin-arm.mk b/content/content_app_both.target.darwin-arm.mk
index a02da511b4..ba5d09bfb4 100644
--- a/content/content_app_both.target.darwin-arm.mk
+++ b/content/content_app_both.target.darwin-arm.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -51,7 +51,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -84,12 +91,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -101,10 +113,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -178,7 +192,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -211,12 +232,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +254,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -342,7 +370,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.darwin-arm64.mk b/content/content_app_both.target.darwin-arm64.mk
index 0e154a07ff..618e59fbab 100644
--- a/content/content_app_both.target.darwin-arm64.mk
+++ b/content/content_app_both.target.darwin-arm64.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -81,12 +81,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -98,10 +103,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -204,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -221,10 +233,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -326,7 +340,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.darwin-mips.mk b/content/content_app_both.target.darwin-mips.mk
index 5aba1cf9d0..991d97cc5f 100644
--- a/content/content_app_both.target.darwin-mips.mk
+++ b/content/content_app_both.target.darwin-mips.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -51,6 +51,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -84,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -101,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -178,6 +186,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -211,12 +220,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +242,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -338,7 +354,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.darwin-x86.mk b/content/content_app_both.target.darwin-x86.mk
index d03d738685..1c3bdd21b9 100644
--- a/content/content_app_both.target.darwin-x86.mk
+++ b/content/content_app_both.target.darwin-x86.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -50,6 +50,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -85,12 +86,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DU_USING_ICU_NAMESPACE=0' \
@@ -101,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -176,6 +184,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -211,12 +220,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DU_USING_ICU_NAMESPACE=0' \
@@ -227,10 +241,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -336,7 +352,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.darwin-x86_64.mk b/content/content_app_both.target.darwin-x86_64.mk
index 45f6f711c9..4cafadb64b 100644
--- a/content/content_app_both.target.darwin-x86_64.mk
+++ b/content/content_app_both.target.darwin-x86_64.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -85,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -102,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -212,12 +219,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -229,10 +241,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -338,7 +352,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.linux-arm.mk b/content/content_app_both.target.linux-arm.mk
index a02da511b4..ba5d09bfb4 100644
--- a/content/content_app_both.target.linux-arm.mk
+++ b/content/content_app_both.target.linux-arm.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -51,7 +51,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -84,12 +91,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -101,10 +113,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -178,7 +192,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -211,12 +232,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +254,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -342,7 +370,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.linux-arm64.mk b/content/content_app_both.target.linux-arm64.mk
index 0e154a07ff..618e59fbab 100644
--- a/content/content_app_both.target.linux-arm64.mk
+++ b/content/content_app_both.target.linux-arm64.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -81,12 +81,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -98,10 +103,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -204,12 +211,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -221,10 +233,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -326,7 +340,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.linux-mips.mk b/content/content_app_both.target.linux-mips.mk
index 5aba1cf9d0..991d97cc5f 100644
--- a/content/content_app_both.target.linux-mips.mk
+++ b/content/content_app_both.target.linux-mips.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -51,6 +51,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -84,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -101,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -178,6 +186,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -211,12 +220,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +242,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -338,7 +354,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.linux-x86.mk b/content/content_app_both.target.linux-x86.mk
index d03d738685..1c3bdd21b9 100644
--- a/content/content_app_both.target.linux-x86.mk
+++ b/content/content_app_both.target.linux-x86.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -50,6 +50,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -85,12 +86,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DU_USING_ICU_NAMESPACE=0' \
@@ -101,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -176,6 +184,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -211,12 +220,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DU_USING_ICU_NAMESPACE=0' \
@@ -227,10 +241,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -336,7 +352,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_app_both.target.linux-x86_64.mk b/content/content_app_both.target.linux-x86_64.mk
index 45f6f711c9..4cafadb64b 100644
--- a/content/content_app_both.target.linux-x86_64.mk
+++ b/content/content_app_both.target.linux-x86_64.mk
@@ -16,7 +16,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -85,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -102,10 +107,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -212,12 +219,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -229,10 +241,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -338,7 +352,7 @@ LOCAL_STATIC_LIBRARIES := \
cpufeatures \
ui_base_ui_base_gyp \
skia_skia_library_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 41c2c0a5da..736513ea2a 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -37,1348 +37,1372 @@
'..',
'<(INTERMEDIATE_DIR)',
],
+ 'variables': {
+ 'public_browser_sources': [
+ 'public/browser/access_token_store.h',
+ 'public/browser/android/compositor.h',
+ 'public/browser/android/compositor_client.h',
+ 'public/browser/android/content_view_core.h',
+ 'public/browser/android/content_view_layer_renderer.h',
+ 'public/browser/android/devtools_auth.h',
+ 'public/browser/android/download_controller_android.h',
+ 'public/browser/android/external_video_surface_container.h',
+ 'public/browser/android/layer_tree_build_helper.h',
+ 'public/browser/android/synchronous_compositor_client.h',
+ 'public/browser/android/synchronous_compositor.cc',
+ 'public/browser/android/synchronous_compositor.h',
+ 'public/browser/ax_event_notification_details.cc',
+ 'public/browser/ax_event_notification_details.h',
+ 'public/browser/blob_handle.h',
+ 'public/browser/browser_accessibility_state.h',
+ 'public/browser/browser_child_process_host.h',
+ 'public/browser/browser_child_process_host_delegate.cc',
+ 'public/browser/browser_child_process_host_delegate.h',
+ 'public/browser/browser_child_process_host_iterator.cc',
+ 'public/browser/browser_child_process_host_iterator.h',
+ 'public/browser/browser_child_process_observer.cc',
+ 'public/browser/browser_child_process_observer.h',
+ 'public/browser/browser_context.h',
+ 'public/browser/browser_ipc_logging.h',
+ 'public/browser/browser_main_parts.cc',
+ 'public/browser/browser_main_parts.h',
+ 'public/browser/browser_main_runner.h',
+ 'public/browser/browser_message_filter.cc',
+ 'public/browser/browser_message_filter.h',
+ 'public/browser/browser_plugin_guest_delegate.cc',
+ 'public/browser/browser_plugin_guest_delegate.h',
+ 'public/browser/browser_plugin_guest_manager.cc',
+ 'public/browser/browser_plugin_guest_manager.h',
+ 'public/browser/browser_ppapi_host.h',
+ 'public/browser/browser_shutdown.h',
+ 'public/browser/browser_url_handler.h',
+ 'public/browser/browser_thread.h',
+ 'public/browser/browser_thread_delegate.h',
+ 'public/browser/cert_store.h',
+ 'public/browser/child_process_data.h',
+ 'public/browser/child_process_security_policy.h',
+ 'public/browser/color_chooser.h',
+ 'public/browser/certificate_request_result_type.h',
+ 'public/browser/content_browser_client.cc',
+ 'public/browser/content_browser_client.h',
+ 'public/browser/context_factory.h',
+ 'public/browser/cookie_store_factory.h',
+ 'public/browser/desktop_media_id.cc',
+ 'public/browser/desktop_media_id.h',
+ 'public/browser/desktop_notification_delegate.h',
+ 'public/browser/devtools_agent_host.h',
+ 'public/browser/devtools_client_host.h',
+ 'public/browser/devtools_external_agent_proxy.h',
+ 'public/browser/devtools_external_agent_proxy_delegate.h',
+ 'public/browser/download_danger_type.h',
+ 'public/browser/devtools_frontend_host_delegate.h',
+ 'public/browser/devtools_http_handler.h',
+ 'public/browser/devtools_http_handler_delegate.h',
+ 'public/browser/devtools_manager.h',
+ 'public/browser/devtools_manager_delegate.h',
+ 'public/browser/devtools_target.h',
+ 'public/browser/dom_operation_notification_details.h',
+ 'public/browser/dom_storage_context.h',
+ 'public/browser/download_destination_observer.h',
+ 'public/browser/download_interrupt_reason_values.h',
+ 'public/browser/download_interrupt_reasons.h',
+ 'public/browser/download_item.h',
+ 'public/browser/download_manager.h',
+ 'public/browser/download_manager_delegate.cc',
+ 'public/browser/download_manager_delegate.h',
+ 'public/browser/download_save_info.cc',
+ 'public/browser/download_save_info.h',
+ 'public/browser/download_url_parameters.cc',
+ 'public/browser/download_url_parameters.h',
+ 'public/browser/favicon_status.cc',
+ 'public/browser/favicon_status.h',
+ 'public/browser/file_descriptor_info.h',
+ 'public/browser/font_list_async.h',
+ 'public/browser/geolocation_permission_context.h',
+ 'public/browser/geolocation_provider.h',
+ 'public/browser/global_request_id.h',
+ 'public/browser/gpu_data_manager.h',
+ 'public/browser/gpu_data_manager_observer.h',
+ 'public/browser/histogram_fetcher.h',
+ 'public/browser/host_zoom_map.h',
+ 'public/browser/indexed_db_context.h',
+ 'public/browser/indexed_db_info.cc',
+ 'public/browser/indexed_db_info.h',
+ 'public/browser/interstitial_page.h',
+ 'public/browser/invalidate_type.h',
+ 'public/browser/javascript_dialog_manager.cc',
+ 'public/browser/javascript_dialog_manager.h',
+ 'public/browser/load_from_memory_cache_details.cc',
+ 'public/browser/load_from_memory_cache_details.h',
+ 'public/browser/load_notification_details.h',
+ 'public/browser/local_storage_usage_info.cc',
+ 'public/browser/local_storage_usage_info.h',
+ 'public/browser/location_provider.h',
+ 'public/browser/media_capture_devices.h',
+ 'public/browser/media_device_id.cc',
+ 'public/browser/media_device_id.h',
+ 'public/browser/native_web_keyboard_event.h',
+ 'public/browser/navigation_controller.cc',
+ 'public/browser/navigation_controller.h',
+ 'public/browser/navigation_details.cc',
+ 'public/browser/navigation_details.h',
+ 'public/browser/navigation_entry.h',
+ 'public/browser/navigation_type.h',
+ 'public/browser/notification_details.h',
+ 'public/browser/notification_observer.h',
+ 'public/browser/notification_registrar.cc',
+ 'public/browser/notification_registrar.h',
+ 'public/browser/notification_service.h',
+ 'public/browser/notification_source.h',
+ 'public/browser/notification_types.h',
+ 'public/browser/overscroll_configuration.h',
+ 'public/browser/page_navigator.cc',
+ 'public/browser/page_navigator.h',
+ 'public/browser/pepper_flash_settings_helper.h',
+ 'public/browser/plugin_data_remover.h',
+ 'public/browser/plugin_service.h',
+ 'public/browser/plugin_service_filter.h',
+ 'public/browser/power_save_blocker.h',
+ 'public/browser/profiler_controller.h',
+ 'public/browser/profiler_subscriber.h',
+ 'public/browser/quota_permission_context.h',
+ 'public/browser/render_frame_host.h',
+ 'public/browser/render_process_host.h',
+ 'public/browser/render_process_host_factory.h',
+ 'public/browser/render_process_host_observer.h',
+ 'public/browser/render_view_host.h',
+ 'public/browser/render_widget_host.h',
+ 'public/browser/render_widget_host_view.h',
+ 'public/browser/render_widget_host_view_frame_subscriber.h',
+ 'public/browser/render_widget_host_view_mac_delegate.h',
+ 'public/browser/resource_context.h',
+ 'public/browser/resource_controller.h',
+ 'public/browser/resource_dispatcher_host.h',
+ 'public/browser/resource_dispatcher_host_delegate.cc',
+ 'public/browser/resource_dispatcher_host_delegate.h',
+ 'public/browser/resource_dispatcher_host_login_delegate.h',
+ 'public/browser/resource_request_details.cc',
+ 'public/browser/resource_request_details.h',
+ 'public/browser/resource_request_info.h',
+ 'public/browser/resource_throttle.h',
+ 'public/browser/save_page_type.h',
+ 'public/browser/service_worker_context.h',
+ 'public/browser/session_storage_namespace.h',
+ 'public/browser/session_storage_usage_info.h',
+ 'public/browser/signed_certificate_timestamp_store.h',
+ 'public/browser/site_instance.h',
+ 'public/browser/speech_recognition_event_listener.h',
+ 'public/browser/speech_recognition_manager.h',
+ 'public/browser/speech_recognition_manager_delegate.h',
+ 'public/browser/speech_recognition_session_config.cc',
+ 'public/browser/speech_recognition_session_config.h',
+ 'public/browser/speech_recognition_session_context.cc',
+ 'public/browser/speech_recognition_session_context.h',
+ 'public/browser/storage_partition.h',
+ 'public/browser/stream_handle.h',
+ 'public/browser/tracing_controller.h',
+ 'public/browser/user_metrics.h',
+ 'public/browser/utility_process_host.h',
+ 'public/browser/vibration_provider.h',
+ 'public/browser/web_contents.cc',
+ 'public/browser/web_contents.h',
+ 'public/browser/web_contents_delegate.cc',
+ 'public/browser/web_contents_delegate.h',
+ 'public/browser/web_contents_observer.cc',
+ 'public/browser/web_contents_observer.h',
+ 'public/browser/web_contents_user_data.h',
+ 'public/browser/web_contents_view_delegate.h',
+ 'public/browser/web_drag_dest_delegate.h',
+ 'public/browser/web_ui.h',
+ 'public/browser/web_ui_controller.cc',
+ 'public/browser/web_ui_controller.h',
+ 'public/browser/web_ui_controller_factory.h',
+ 'public/browser/web_ui_data_source.h',
+ 'public/browser/url_data_source.cc',
+ 'public/browser/url_data_source.h',
+ 'public/browser/web_ui_message_handler.h',
+ 'public/browser/worker_service.h',
+ 'public/browser/worker_service_observer.h',
+ 'public/browser/zygote_host_linux.h',
+ ],
+ 'private_browser_sources': [
+ 'browser/accessibility/accessibility_mode_helper.cc',
+ 'browser/accessibility/accessibility_mode_helper.h',
+ 'browser/accessibility/accessibility_tree_formatter.cc',
+ 'browser/accessibility/accessibility_tree_formatter.h',
+ 'browser/accessibility/accessibility_tree_formatter_android.cc',
+ 'browser/accessibility/accessibility_tree_formatter_mac.mm',
+ 'browser/accessibility/accessibility_tree_formatter_utils_win.cc',
+ 'browser/accessibility/accessibility_tree_formatter_utils_win.h',
+ 'browser/accessibility/accessibility_tree_formatter_win.cc',
+ 'browser/accessibility/accessibility_ui.cc',
+ 'browser/accessibility/accessibility_ui.h',
+ 'browser/accessibility/browser_accessibility.cc',
+ 'browser/accessibility/browser_accessibility.h',
+ 'browser/accessibility/browser_accessibility_android.cc',
+ 'browser/accessibility/browser_accessibility_android.h',
+ 'browser/accessibility/browser_accessibility_cocoa.h',
+ 'browser/accessibility/browser_accessibility_cocoa.mm',
+ 'browser/accessibility/browser_accessibility_mac.h',
+ 'browser/accessibility/browser_accessibility_mac.mm',
+ 'browser/accessibility/browser_accessibility_manager.cc',
+ 'browser/accessibility/browser_accessibility_manager.h',
+ 'browser/accessibility/browser_accessibility_manager_android.cc',
+ 'browser/accessibility/browser_accessibility_manager_android.h',
+ 'browser/accessibility/browser_accessibility_manager_mac.h',
+ 'browser/accessibility/browser_accessibility_manager_mac.mm',
+ 'browser/accessibility/browser_accessibility_manager_win.cc',
+ 'browser/accessibility/browser_accessibility_manager_win.h',
+ 'browser/accessibility/browser_accessibility_state_impl.cc',
+ 'browser/accessibility/browser_accessibility_state_impl_win.cc',
+ 'browser/accessibility/browser_accessibility_state_impl.h',
+ 'browser/accessibility/browser_accessibility_win.cc',
+ 'browser/accessibility/browser_accessibility_win.h',
+ 'browser/android/browser_jni_registrar.cc',
+ 'browser/android/browser_jni_registrar.h',
+ 'browser/android/browser_startup_controller.cc',
+ 'browser/android/browser_startup_controller.h',
+ 'browser/android/child_process_launcher_android.cc',
+ 'browser/android/child_process_launcher_android.h',
+ 'browser/android/content_readback_handler.cc',
+ 'browser/android/content_readback_handler.h',
+ 'browser/android/content_settings.cc',
+ 'browser/android/content_settings.h',
+ 'browser/android/content_startup_flags.cc',
+ 'browser/android/content_startup_flags.h',
+ 'browser/android/content_video_view.cc',
+ 'browser/android/content_video_view.h',
+ 'browser/android/content_view_core_impl.cc',
+ 'browser/android/content_view_core_impl.h',
+ 'browser/android/content_view_render_view.cc',
+ 'browser/android/content_view_render_view.h',
+ 'browser/android/content_view_statics.cc',
+ 'browser/android/content_view_statics.h',
+ 'browser/android/date_time_chooser_android.cc',
+ 'browser/android/date_time_chooser_android.h',
+ 'browser/android/download_controller_android_impl.cc',
+ 'browser/android/download_controller_android_impl.h',
+ 'browser/android/devtools_auth.cc',
+ 'browser/android/edge_effect.h',
+ 'browser/android/edge_effect.cc',
+ 'browser/android/gesture_event_type_list.h',
+ 'browser/android/in_process/synchronous_compositor_factory_impl.cc',
+ 'browser/android/in_process/synchronous_compositor_factory_impl.h',
+ 'browser/android/in_process/synchronous_compositor_impl.cc',
+ 'browser/android/in_process/synchronous_compositor_impl.h',
+ 'browser/android/in_process/synchronous_compositor_output_surface.cc',
+ 'browser/android/in_process/synchronous_compositor_output_surface.h',
+ 'browser/android/in_process/synchronous_input_event_filter.cc',
+ 'browser/android/in_process/synchronous_input_event_filter.h',
+ 'browser/android/interstitial_page_delegate_android.cc',
+ 'browser/android/interstitial_page_delegate_android.h',
+ 'browser/android/load_url_params.cc',
+ 'browser/android/load_url_params.h',
+ 'browser/android/overscroll_glow.h',
+ 'browser/android/overscroll_glow.cc',
+ 'browser/android/popup_item_type_list.h',
+ 'browser/android/surface_texture_peer_browser_impl.cc',
+ 'browser/android/surface_texture_peer_browser_impl.h',
+ 'browser/android/tracing_controller_android.cc',
+ 'browser/android/tracing_controller_android.h',
+ 'browser/android/web_contents_observer_android.cc',
+ 'browser/android/web_contents_observer_android.h',
+ 'browser/appcache/appcache_dispatcher_host.cc',
+ 'browser/appcache/appcache_dispatcher_host.h',
+ 'browser/appcache/appcache_frontend_proxy.cc',
+ 'browser/appcache/appcache_frontend_proxy.h',
+ 'browser/appcache/appcache_interceptor.cc',
+ 'browser/appcache/appcache_interceptor.h',
+ 'browser/appcache/chrome_appcache_service.cc',
+ 'browser/appcache/chrome_appcache_service.h',
+ 'browser/appcache/view_appcache_internals_job.h',
+ 'browser/appcache/view_appcache_internals_job.cc',
+ 'browser/battery_status/battery_status_manager_android.cc',
+ 'browser/battery_status/battery_status_manager_default.cc',
+ 'browser/battery_status/battery_status_manager.h',
+ 'browser/battery_status/battery_status_message_filter.cc',
+ 'browser/battery_status/battery_status_message_filter.h',
+ 'browser/battery_status/battery_status_service.cc',
+ 'browser/battery_status/battery_status_service.h',
+ 'browser/browser_child_process_host_impl.cc',
+ 'browser/browser_child_process_host_impl.h',
+ 'browser/browser_context.cc',
+ 'browser/browser_ipc_logging.cc',
+ 'browser/browser_main.cc',
+ 'browser/browser_main.h',
+ 'browser/browser_main_loop.cc',
+ 'browser/browser_main_loop.h',
+ 'browser/browser_main_runner.cc',
+ 'browser/browser_plugin/browser_plugin_embedder.cc',
+ 'browser/browser_plugin/browser_plugin_embedder.h',
+ 'browser/browser_plugin/browser_plugin_guest.cc',
+ 'browser/browser_plugin/browser_plugin_guest.h',
+ 'browser/browser_plugin/browser_plugin_host_factory.h',
+ 'browser/browser_plugin/browser_plugin_message_filter.cc',
+ 'browser/browser_plugin/browser_plugin_message_filter.h',
+ 'browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h',
+ 'browser/browser_plugin/browser_plugin_popup_menu_helper_mac.mm',
+ 'browser/browser_process_sub_thread.cc',
+ 'browser/browser_process_sub_thread.h',
+ 'browser/browser_shutdown_profile_dumper.cc',
+ 'browser/browser_shutdown_profile_dumper.h',
+ 'browser/browser_thread_impl.cc',
+ 'browser/browser_thread_impl.h',
+ 'browser/browser_url_handler_impl.cc',
+ 'browser/browser_url_handler_impl.h',
+ 'browser/browsing_instance.cc',
+ 'browser/browsing_instance.h',
+ 'browser/byte_stream.cc',
+ 'browser/byte_stream.h',
+ 'browser/cert_store_impl.cc',
+ 'browser/cert_store_impl.h',
+ 'browser/child_process_launcher.cc',
+ 'browser/child_process_launcher.h',
+ 'browser/child_process_security_policy_impl.cc',
+ 'browser/child_process_security_policy_impl.h',
+ 'browser/compositor/browser_compositor_output_surface.cc',
+ 'browser/compositor/browser_compositor_output_surface.h',
+ 'browser/compositor/browser_compositor_output_surface_proxy.cc',
+ 'browser/compositor/browser_compositor_output_surface_proxy.h',
+ 'browser/compositor/browser_compositor_view_mac.mm',
+ 'browser/compositor/browser_compositor_view_mac.h',
+ 'browser/compositor/delegated_frame_host.cc',
+ 'browser/compositor/delegated_frame_host.h',
+ 'browser/compositor/gpu_process_transport_factory.cc',
+ 'browser/compositor/gpu_process_transport_factory.h',
+ 'browser/compositor/image_transport_factory.cc',
+ 'browser/compositor/image_transport_factory.h',
+ 'browser/compositor/no_transport_image_transport_factory.cc',
+ 'browser/compositor/no_transport_image_transport_factory.h',
+ 'browser/compositor/overlay_candidate_validator_ozone.cc',
+ 'browser/compositor/overlay_candidate_validator_ozone.h',
+ 'browser/compositor/owned_mailbox.h',
+ 'browser/compositor/owned_mailbox.cc',
+ 'browser/compositor/reflector_impl.cc',
+ 'browser/compositor/reflector_impl.h',
+ 'browser/compositor/resize_lock.cc',
+ 'browser/compositor/resize_lock.h',
+ 'browser/compositor/gpu_browser_compositor_output_surface.cc',
+ 'browser/compositor/gpu_browser_compositor_output_surface.h',
+ 'browser/compositor/software_browser_compositor_output_surface.cc',
+ 'browser/compositor/software_browser_compositor_output_surface.h',
+ 'browser/compositor/software_output_device_mac.mm',
+ 'browser/compositor/software_output_device_mac.h',
+ 'browser/compositor/software_output_device_ozone.cc',
+ 'browser/compositor/software_output_device_ozone.h',
+ 'browser/compositor/software_output_device_win.cc',
+ 'browser/compositor/software_output_device_win.h',
+ 'browser/compositor/software_output_device_x11.cc',
+ 'browser/compositor/software_output_device_x11.h',
+ 'browser/context_factory.cc',
+ 'browser/cross_site_request_manager.cc',
+ 'browser/cross_site_request_manager.h',
+ 'browser/devtools/devtools_agent_host_impl.cc',
+ 'browser/devtools/devtools_agent_host_impl.h',
+ 'browser/devtools/devtools_browser_target.cc',
+ 'browser/devtools/devtools_browser_target.h',
+ 'browser/devtools/devtools_frontend_host.cc',
+ 'browser/devtools/devtools_frontend_host.h',
+ 'browser/devtools/devtools_http_handler_impl.cc',
+ 'browser/devtools/devtools_http_handler_impl.h',
+ 'browser/devtools/devtools_manager_impl.cc',
+ 'browser/devtools/devtools_manager_impl.h',
+ 'browser/devtools/devtools_netlog_observer.cc',
+ 'browser/devtools/devtools_netlog_observer.h',
+ 'browser/devtools/devtools_power_handler.cc',
+ 'browser/devtools/devtools_power_handler.h',
+ 'browser/devtools/devtools_protocol.cc',
+ 'browser/devtools/devtools_protocol.h',
+ 'browser/devtools/devtools_system_info_handler.cc',
+ 'browser/devtools/devtools_system_info_handler.h',
+ 'browser/devtools/devtools_tracing_handler.h',
+ 'browser/devtools/devtools_tracing_handler.cc',
+ 'browser/devtools/forwarding_agent_host.cc',
+ 'browser/devtools/forwarding_agent_host.h',
+ 'browser/devtools/ipc_devtools_agent_host.cc',
+ 'browser/devtools/ipc_devtools_agent_host.h',
+ 'browser/devtools/embedded_worker_devtools_manager.cc',
+ 'browser/devtools/embedded_worker_devtools_manager.h',
+ 'browser/devtools/render_view_devtools_agent_host.cc',
+ 'browser/devtools/render_view_devtools_agent_host.h',
+ 'browser/devtools/renderer_overrides_handler.cc',
+ 'browser/devtools/renderer_overrides_handler.h',
+ 'browser/devtools/tethering_handler.h',
+ 'browser/devtools/tethering_handler.cc',
+ 'browser/devtools/worker_devtools_manager.cc',
+ 'browser/devtools/worker_devtools_manager.h',
+ 'browser/devtools/worker_devtools_message_filter.cc',
+ 'browser/devtools/worker_devtools_message_filter.h',
+ 'browser/device_monitor_mac.h',
+ 'browser/device_monitor_mac.mm',
+ 'browser/device_monitor_udev.cc',
+ 'browser/device_monitor_udev.h',
+ 'browser/device_sensors/data_fetcher_shared_memory.h',
+ 'browser/device_sensors/data_fetcher_shared_memory_android.cc',
+ 'browser/device_sensors/data_fetcher_shared_memory_base.cc',
+ 'browser/device_sensors/data_fetcher_shared_memory_base.h',
+ 'browser/device_sensors/data_fetcher_shared_memory_default.cc',
+ 'browser/device_sensors/data_fetcher_shared_memory_mac.cc',
+ 'browser/device_sensors/data_fetcher_shared_memory_win.cc',
+ 'browser/device_sensors/device_inertial_sensor_service.cc',
+ 'browser/device_sensors/device_inertial_sensor_service.h',
+ 'browser/device_sensors/device_motion_message_filter.cc',
+ 'browser/device_sensors/device_motion_message_filter.h',
+ 'browser/device_sensors/device_orientation_message_filter.cc',
+ 'browser/device_sensors/device_orientation_message_filter.h',
+ 'browser/device_sensors/inertial_sensor_consts.h',
+ 'browser/device_sensors/sensor_manager_android.cc',
+ 'browser/device_sensors/sensor_manager_android.h',
+ 'browser/dom_storage/dom_storage_area.cc',
+ 'browser/dom_storage/dom_storage_area.h',
+ 'browser/dom_storage/dom_storage_context_impl.cc',
+ 'browser/dom_storage/dom_storage_context_impl.h',
+ 'browser/dom_storage/dom_storage_context_wrapper.cc',
+ 'browser/dom_storage/dom_storage_context_wrapper.h',
+ 'browser/dom_storage/dom_storage_database.cc',
+ 'browser/dom_storage/dom_storage_database.h',
+ 'browser/dom_storage/dom_storage_database_adapter.h',
+ 'browser/dom_storage/dom_storage_host.cc',
+ 'browser/dom_storage/dom_storage_host.h',
+ 'browser/dom_storage/dom_storage_message_filter.cc',
+ 'browser/dom_storage/dom_storage_message_filter.h',
+ 'browser/dom_storage/dom_storage_namespace.cc',
+ 'browser/dom_storage/dom_storage_namespace.h',
+ 'browser/dom_storage/dom_storage_session.cc',
+ 'browser/dom_storage/dom_storage_session.h',
+ 'browser/dom_storage/dom_storage_task_runner.cc',
+ 'browser/dom_storage/dom_storage_task_runner.h',
+ 'browser/dom_storage/local_storage_database_adapter.cc',
+ 'browser/dom_storage/local_storage_database_adapter.h',
+ 'browser/dom_storage/session_storage_database.cc',
+ 'browser/dom_storage/session_storage_database.h',
+ 'browser/dom_storage/session_storage_database_adapter.cc',
+ 'browser/dom_storage/session_storage_database_adapter.h',
+ 'browser/dom_storage/session_storage_namespace_impl.cc',
+ 'browser/dom_storage/session_storage_namespace_impl.h',
+ 'browser/download/base_file.cc',
+ 'browser/download/base_file.h',
+ 'browser/download/base_file_linux.cc',
+ 'browser/download/base_file_mac.cc',
+ 'browser/download/base_file_posix.cc',
+ 'browser/download/base_file_win.cc',
+ 'browser/download/download_create_info.cc',
+ 'browser/download/download_create_info.h',
+ 'browser/download/download_file.h',
+ 'browser/download/download_file_factory.cc',
+ 'browser/download/download_file_factory.h',
+ 'browser/download/download_file_impl.cc',
+ 'browser/download/download_file_impl.h',
+ 'browser/download/download_interrupt_reasons_impl.cc',
+ 'browser/download/download_interrupt_reasons_impl.h',
+ 'browser/download/download_item_factory.h',
+ 'browser/download/download_item_impl.cc',
+ 'browser/download/download_item_impl.h',
+ 'browser/download/download_item_impl_delegate.cc',
+ 'browser/download/download_item_impl_delegate.h',
+ 'browser/download/download_manager_impl.cc',
+ 'browser/download/download_manager_impl.h',
+ 'browser/download/download_net_log_parameters.cc',
+ 'browser/download/download_net_log_parameters.h',
+ 'browser/download/download_request_handle.cc',
+ 'browser/download/download_request_handle.h',
+ 'browser/download/download_resource_handler.cc',
+ 'browser/download/download_resource_handler.h',
+ 'browser/download/download_stats.cc',
+ 'browser/download/download_stats.h',
+ 'browser/download/drag_download_file.cc',
+ 'browser/download/drag_download_file.h',
+ 'browser/download/drag_download_util.cc',
+ 'browser/download/drag_download_util.h',
+ 'browser/download/file_metadata_linux.cc',
+ 'browser/download/file_metadata_linux.h',
+ 'browser/download/file_metadata_mac.h',
+ 'browser/download/file_metadata_mac.mm',
+ 'browser/download/mhtml_generation_manager.cc',
+ 'browser/download/mhtml_generation_manager.h',
+ 'browser/download/rate_estimator.cc',
+ 'browser/download/rate_estimator.h',
+ 'browser/download/save_file.cc',
+ 'browser/download/save_file.h',
+ 'browser/download/save_file_manager.cc',
+ 'browser/download/save_file_manager.h',
+ 'browser/download/save_file_resource_handler.cc',
+ 'browser/download/save_file_resource_handler.h',
+ 'browser/download/save_item.cc',
+ 'browser/download/save_item.h',
+ 'browser/download/save_package.cc',
+ 'browser/download/save_package.h',
+ 'browser/download/save_types.cc',
+ 'browser/download/save_types.h',
+ 'browser/fileapi/blob_storage_host.cc',
+ 'browser/fileapi/blob_storage_host.h',
+ 'browser/fileapi/browser_file_system_helper.cc',
+ 'browser/fileapi/browser_file_system_helper.h',
+ 'browser/fileapi/chrome_blob_storage_context.cc',
+ 'browser/fileapi/chrome_blob_storage_context.h',
+ 'browser/fileapi/fileapi_message_filter.cc',
+ 'browser/fileapi/fileapi_message_filter.h',
+ 'browser/fileapi/upload_file_system_file_element_reader.cc',
+ 'browser/fileapi/upload_file_system_file_element_reader.h',
+ 'browser/font_list_async.cc',
+ 'browser/frame_host/debug_urls.cc',
+ 'browser/frame_host/debug_urls.h',
+ 'browser/frame_host/frame_tree.cc',
+ 'browser/frame_host/frame_tree.h',
+ 'browser/frame_host/frame_tree_node.cc',
+ 'browser/frame_host/frame_tree_node.h',
+ 'browser/frame_host/interstitial_page_impl.cc',
+ 'browser/frame_host/interstitial_page_impl.h',
+ 'browser/frame_host/interstitial_page_navigator_impl.cc',
+ 'browser/frame_host/interstitial_page_navigator_impl.h',
+ 'browser/frame_host/navigation_controller_android.cc',
+ 'browser/frame_host/navigation_controller_android.h',
+ 'browser/frame_host/navigation_controller_delegate.h',
+ 'browser/frame_host/navigation_controller_impl.cc',
+ 'browser/frame_host/navigation_controller_impl.h',
+ 'browser/frame_host/navigation_entry_impl.cc',
+ 'browser/frame_host/navigation_entry_impl.h',
+ 'browser/frame_host/navigation_entry_screenshot_manager.cc',
+ 'browser/frame_host/navigation_entry_screenshot_manager.h',
+ 'browser/frame_host/navigator.cc',
+ 'browser/frame_host/navigator.h',
+ 'browser/frame_host/navigator_impl.cc',
+ 'browser/frame_host/navigator_impl.h',
+ 'browser/frame_host/navigator_delegate.cc',
+ 'browser/frame_host/navigator_delegate.h',
+ 'browser/frame_host/cross_process_frame_connector.cc',
+ 'browser/frame_host/cross_process_frame_connector.h',
+ 'browser/frame_host/cross_site_transferring_request.cc',
+ 'browser/frame_host/cross_site_transferring_request.h',
+ 'browser/frame_host/render_frame_host_delegate.cc',
+ 'browser/frame_host/render_frame_host_delegate.h',
+ 'browser/frame_host/render_frame_host_factory.cc',
+ 'browser/frame_host/render_frame_host_factory.h',
+ 'browser/frame_host/render_frame_host_impl.cc',
+ 'browser/frame_host/render_frame_host_impl.h',
+ 'browser/frame_host/render_frame_host_manager.cc',
+ 'browser/frame_host/render_frame_host_manager.h',
+ 'browser/frame_host/render_frame_message_filter.cc',
+ 'browser/frame_host/render_frame_message_filter.h',
+ 'browser/frame_host/render_frame_proxy_host.cc',
+ 'browser/frame_host/render_frame_proxy_host.h',
+ 'browser/frame_host/render_widget_host_view_child_frame.cc',
+ 'browser/frame_host/render_widget_host_view_child_frame.h',
+ 'browser/frame_host/render_widget_host_view_guest.cc',
+ 'browser/frame_host/render_widget_host_view_guest.h',
+ 'browser/gamepad/gamepad_consumer.h',
+ 'browser/gamepad/gamepad_data_fetcher.h',
+ 'browser/gamepad/gamepad_platform_data_fetcher.h',
+ 'browser/gamepad/gamepad_platform_data_fetcher_linux.cc',
+ 'browser/gamepad/gamepad_platform_data_fetcher_linux.h',
+ 'browser/gamepad/gamepad_platform_data_fetcher_mac.h',
+ 'browser/gamepad/gamepad_platform_data_fetcher_mac.mm',
+ 'browser/gamepad/gamepad_platform_data_fetcher_win.cc',
+ 'browser/gamepad/gamepad_platform_data_fetcher_win.h',
+ 'browser/gamepad/gamepad_provider.cc',
+ 'browser/gamepad/gamepad_provider.h',
+ 'browser/gamepad/gamepad_service.cc',
+ 'browser/gamepad/gamepad_service.h',
+ 'browser/gamepad/gamepad_standard_mappings.cc',
+ 'browser/gamepad/gamepad_standard_mappings.h',
+ 'browser/gamepad/gamepad_standard_mappings_linux.cc',
+ 'browser/gamepad/gamepad_standard_mappings_mac.mm',
+ 'browser/gamepad/gamepad_standard_mappings_win.cc',
+ 'browser/gamepad/raw_input_data_fetcher_win.cc',
+ 'browser/gamepad/raw_input_data_fetcher_win.h',
+ 'browser/gamepad/xbox_data_fetcher_mac.cc',
+ 'browser/gamepad/xbox_data_fetcher_mac.h',
+ 'browser/geolocation/empty_wifi_data_provider.cc',
+ 'browser/geolocation/empty_wifi_data_provider.h',
+ 'browser/geolocation/geolocation_dispatcher_host.cc',
+ 'browser/geolocation/geolocation_dispatcher_host.h',
+ 'browser/geolocation/geolocation_provider_impl.cc',
+ 'browser/geolocation/geolocation_provider_impl.h',
+ 'browser/geolocation/location_api_adapter_android.cc',
+ 'browser/geolocation/location_api_adapter_android.h',
+ 'browser/geolocation/location_arbitrator.h',
+ 'browser/geolocation/location_arbitrator_impl.cc',
+ 'browser/geolocation/location_arbitrator_impl.h',
+ 'browser/geolocation/location_provider_android.cc',
+ 'browser/geolocation/location_provider_android.h',
+ 'browser/geolocation/location_provider_base.cc',
+ 'browser/geolocation/location_provider_base.h',
+ 'browser/geolocation/network_location_provider.cc',
+ 'browser/geolocation/network_location_provider.h',
+ 'browser/geolocation/network_location_request.cc',
+ 'browser/geolocation/network_location_request.h',
+ 'browser/geolocation/osx_wifi.h',
+ 'browser/geolocation/wifi_data.cc',
+ 'browser/geolocation/wifi_data.h',
+ 'browser/geolocation/wifi_data_provider.cc',
+ 'browser/geolocation/wifi_data_provider.h',
+ 'browser/geolocation/wifi_data_provider_chromeos.cc',
+ 'browser/geolocation/wifi_data_provider_chromeos.h',
+ 'browser/geolocation/wifi_data_provider_common.cc',
+ 'browser/geolocation/wifi_data_provider_common.h',
+ 'browser/geolocation/wifi_data_provider_common_win.cc',
+ 'browser/geolocation/wifi_data_provider_common_win.h',
+ 'browser/geolocation/wifi_data_provider_corewlan_mac.mm',
+ 'browser/geolocation/wifi_data_provider_linux.cc',
+ 'browser/geolocation/wifi_data_provider_linux.h',
+ 'browser/geolocation/wifi_data_provider_mac.cc',
+ 'browser/geolocation/wifi_data_provider_mac.h',
+ 'browser/geolocation/wifi_data_provider_win.cc',
+ 'browser/geolocation/wifi_data_provider_win.h',
+ 'browser/geolocation/wifi_polling_policy.h',
+ 'browser/gpu/browser_gpu_channel_host_factory.cc',
+ 'browser/gpu/browser_gpu_channel_host_factory.h',
+ 'browser/gpu/compositor_util.cc',
+ 'browser/gpu/compositor_util.h',
+ 'browser/gpu/gpu_data_manager_impl.cc',
+ 'browser/gpu/gpu_data_manager_impl.h',
+ 'browser/gpu/gpu_data_manager_impl_private.cc',
+ 'browser/gpu/gpu_data_manager_impl_private.h',
+ 'browser/gpu/gpu_internals_ui.cc',
+ 'browser/gpu/gpu_internals_ui.h',
+ 'browser/gpu/gpu_process_host.cc',
+ 'browser/gpu/gpu_process_host.h',
+ 'browser/gpu/gpu_process_host_ui_shim.cc',
+ 'browser/gpu/gpu_process_host_ui_shim.h',
+ 'browser/gpu/gpu_surface_tracker.cc',
+ 'browser/gpu/gpu_surface_tracker.h',
+ 'browser/gpu/shader_disk_cache.cc',
+ 'browser/gpu/shader_disk_cache.h',
+ 'browser/histogram_controller.cc',
+ 'browser/histogram_controller.h',
+ 'browser/histogram_internals_request_job.cc',
+ 'browser/histogram_internals_request_job.h',
+ 'browser/histogram_message_filter.cc',
+ 'browser/histogram_message_filter.h',
+ 'browser/histogram_subscriber.h',
+ 'browser/histogram_synchronizer.cc',
+ 'browser/histogram_synchronizer.h',
+ 'browser/host_zoom_map_impl.cc',
+ 'browser/host_zoom_map_impl.h',
+ 'browser/indexed_db/indexed_db.h',
+ 'browser/indexed_db/indexed_db_active_blob_registry.cc',
+ 'browser/indexed_db/indexed_db_active_blob_registry.h',
+ 'browser/indexed_db/indexed_db_backing_store.cc',
+ 'browser/indexed_db/indexed_db_backing_store.h',
+ 'browser/indexed_db/indexed_db_blob_info.cc',
+ 'browser/indexed_db/indexed_db_blob_info.h',
+ 'browser/indexed_db/indexed_db_callbacks.cc',
+ 'browser/indexed_db/indexed_db_callbacks.h',
+ 'browser/indexed_db/indexed_db_connection.cc',
+ 'browser/indexed_db/indexed_db_connection.h',
+ 'browser/indexed_db/indexed_db_context_impl.cc',
+ 'browser/indexed_db/indexed_db_context_impl.h',
+ 'browser/indexed_db/indexed_db_cursor.cc',
+ 'browser/indexed_db/indexed_db_cursor.h',
+ 'browser/indexed_db/indexed_db_database.cc',
+ 'browser/indexed_db/indexed_db_database.h',
+ 'browser/indexed_db/indexed_db_database_callbacks.cc',
+ 'browser/indexed_db/indexed_db_database_callbacks.h',
+ 'browser/indexed_db/indexed_db_database_error.h',
+ 'browser/indexed_db/indexed_db_dispatcher_host.cc',
+ 'browser/indexed_db/indexed_db_dispatcher_host.h',
+ 'browser/indexed_db/indexed_db_factory.cc',
+ 'browser/indexed_db/indexed_db_factory.h',
+ 'browser/indexed_db/indexed_db_index_writer.cc',
+ 'browser/indexed_db/indexed_db_index_writer.h',
+ 'browser/indexed_db/indexed_db_internals_ui.cc',
+ 'browser/indexed_db/indexed_db_internals_ui.h',
+ 'browser/indexed_db/indexed_db_leveldb_coding.cc',
+ 'browser/indexed_db/indexed_db_leveldb_coding.h',
+ 'browser/indexed_db/indexed_db_metadata.cc',
+ 'browser/indexed_db/indexed_db_metadata.h',
+ 'browser/indexed_db/indexed_db_pending_connection.cc',
+ 'browser/indexed_db/indexed_db_pending_connection.h',
+ 'browser/indexed_db/indexed_db_quota_client.cc',
+ 'browser/indexed_db/indexed_db_quota_client.h',
+ 'browser/indexed_db/indexed_db_transaction.cc',
+ 'browser/indexed_db/indexed_db_transaction.h',
+ 'browser/indexed_db/indexed_db_transaction_coordinator.cc',
+ 'browser/indexed_db/indexed_db_transaction_coordinator.h',
+ 'browser/indexed_db/indexed_db_value.h',
+ 'browser/indexed_db/indexed_db_value.cc',
+ 'browser/indexed_db/leveldb/leveldb_comparator.h',
+ 'browser/indexed_db/leveldb/leveldb_database.cc',
+ 'browser/indexed_db/leveldb/leveldb_database.h',
+ 'browser/indexed_db/leveldb/leveldb_iterator.h',
+ 'browser/indexed_db/leveldb/leveldb_transaction.cc',
+ 'browser/indexed_db/leveldb/leveldb_transaction.h',
+ 'browser/indexed_db/leveldb/leveldb_write_batch.cc',
+ 'browser/indexed_db/leveldb/leveldb_write_batch.h',
+ 'browser/loader/async_resource_handler.cc',
+ 'browser/loader/async_resource_handler.h',
+ 'browser/loader/buffered_resource_handler.cc',
+ 'browser/loader/buffered_resource_handler.h',
+ 'browser/loader/certificate_resource_handler.cc',
+ 'browser/loader/certificate_resource_handler.h',
+ 'browser/loader/cross_site_resource_handler.cc',
+ 'browser/loader/cross_site_resource_handler.h',
+ 'browser/loader/detachable_resource_handler.cc',
+ 'browser/loader/detachable_resource_handler.h',
+ 'browser/loader/global_routing_id.h',
+ 'browser/loader/layered_resource_handler.cc',
+ 'browser/loader/layered_resource_handler.h',
+ 'browser/loader/power_save_block_resource_throttle.cc',
+ 'browser/loader/power_save_block_resource_throttle.h',
+ 'browser/loader/redirect_to_file_resource_handler.cc',
+ 'browser/loader/redirect_to_file_resource_handler.h',
+ 'browser/loader/resource_buffer.cc',
+ 'browser/loader/resource_buffer.h',
+ 'browser/loader/resource_dispatcher_host_impl.cc',
+ 'browser/loader/resource_dispatcher_host_impl.h',
+ 'browser/loader/resource_handler.cc',
+ 'browser/loader/resource_handler.h',
+ 'browser/loader/resource_loader.cc',
+ 'browser/loader/resource_loader.h',
+ 'browser/loader/resource_loader_delegate.h',
+ 'browser/loader/resource_message_delegate.cc',
+ 'browser/loader/resource_message_delegate.h',
+ 'browser/loader/resource_message_filter.cc',
+ 'browser/loader/resource_message_filter.h',
+ 'browser/loader/resource_request_info_impl.cc',
+ 'browser/loader/resource_request_info_impl.h',
+ 'browser/loader/resource_scheduler.cc',
+ 'browser/loader/resource_scheduler.h',
+ 'browser/loader/resource_scheduler_filter.cc',
+ 'browser/loader/resource_scheduler_filter.h',
+ 'browser/loader/stream_resource_handler.cc',
+ 'browser/loader/stream_resource_handler.h',
+ 'browser/loader/sync_resource_handler.cc',
+ 'browser/loader/sync_resource_handler.h',
+ 'browser/loader/temporary_file_stream.cc',
+ 'browser/loader/temporary_file_stream.h',
+ 'browser/loader/throttling_resource_handler.cc',
+ 'browser/loader/throttling_resource_handler.h',
+ 'browser/loader/upload_data_stream_builder.cc',
+ 'browser/loader/upload_data_stream_builder.h',
+ 'browser/mach_broker_mac.h',
+ 'browser/mach_broker_mac.mm',
+ 'browser/media/android/browser_demuxer_android.cc',
+ 'browser/media/android/browser_demuxer_android.h',
+ 'browser/media/android/browser_media_player_manager.cc',
+ 'browser/media/android/browser_media_player_manager.h',
+ 'browser/media/android/media_drm_credential_manager.cc',
+ 'browser/media/android/media_drm_credential_manager.h',
+ 'browser/media/android/media_resource_getter_impl.cc',
+ 'browser/media/android/media_resource_getter_impl.h',
+ 'browser/media/android/media_web_contents_observer.cc',
+ 'browser/media/android/media_web_contents_observer.h',
+ 'browser/media/capture/audio_mirroring_manager.cc',
+ 'browser/media/capture/audio_mirroring_manager.h',
+ 'browser/media/capture/content_video_capture_device_core.cc',
+ 'browser/media/capture/content_video_capture_device_core.h',
+ 'browser/media/capture/video_capture_oracle.cc',
+ 'browser/media/capture/video_capture_oracle.h',
+ 'browser/media/capture/web_contents_audio_input_stream.cc',
+ 'browser/media/capture/web_contents_audio_input_stream.h',
+ 'browser/media/capture/web_contents_capture_util.cc',
+ 'browser/media/capture/web_contents_capture_util.h',
+ 'browser/media/capture/web_contents_tracker.cc',
+ 'browser/media/capture/web_contents_tracker.h',
+ 'browser/media/capture/web_contents_video_capture_device.cc',
+ 'browser/media/capture/web_contents_video_capture_device.h',
+ 'browser/media/media_internals.cc',
+ 'browser/media/media_internals.h',
+ 'browser/media/media_internals_handler.cc',
+ 'browser/media/media_internals_handler.h',
+ 'browser/media/media_internals_proxy.cc',
+ 'browser/media/media_internals_proxy.h',
+ 'browser/media/media_internals_ui.cc',
+ 'browser/media/media_internals_ui.h',
+ 'browser/media/webrtc_identity_store.cc',
+ 'browser/media/webrtc_identity_store.h',
+ 'browser/media/webrtc_identity_store_backend.cc',
+ 'browser/media/webrtc_identity_store_backend.h',
+ 'browser/media/webrtc_internals.cc',
+ 'browser/media/webrtc_internals.h',
+ 'browser/media/webrtc_internals_message_handler.cc',
+ 'browser/media/webrtc_internals_message_handler.h',
+ 'browser/media/webrtc_internals_ui.cc',
+ 'browser/media/webrtc_internals_ui.h',
+ 'browser/media/webrtc_internals_ui_observer.h',
+ 'browser/message_port_message_filter.cc',
+ 'browser/message_port_message_filter.h',
+ 'browser/message_port_service.cc',
+ 'browser/message_port_service.h',
+ 'browser/mime_registry_message_filter.cc',
+ 'browser/mime_registry_message_filter.h',
+ 'browser/mojo/mojo_application_host.cc',
+ 'browser/mojo/mojo_application_host.h',
+ 'browser/net/browser_online_state_observer.cc',
+ 'browser/net/browser_online_state_observer.h',
+ 'browser/net/sqlite_persistent_cookie_store.cc',
+ 'browser/net/sqlite_persistent_cookie_store.h',
+ 'browser/net/view_blob_internals_job_factory.cc',
+ 'browser/net/view_blob_internals_job_factory.h',
+ 'browser/net/view_http_cache_job_factory.cc',
+ 'browser/net/view_http_cache_job_factory.h',
+ 'browser/notification_service_impl.cc',
+ 'browser/notification_service_impl.h',
+ 'browser/pepper_flash_settings_helper_impl.cc',
+ 'browser/pepper_flash_settings_helper_impl.h',
+ 'browser/plugin_data_remover_impl.cc',
+ 'browser/plugin_data_remover_impl.h',
+ 'browser/plugin_loader_posix.cc',
+ 'browser/plugin_loader_posix.h',
+ 'browser/plugin_process_host.cc',
+ 'browser/plugin_process_host.h',
+ 'browser/plugin_process_host_mac.cc',
+ 'browser/plugin_service_impl.cc',
+ 'browser/plugin_service_impl.h',
+ 'browser/power_monitor_message_broadcaster.cc',
+ 'browser/power_monitor_message_broadcaster.h',
+ 'browser/power_profiler/power_data_provider.h',
+ 'browser/power_profiler/power_event.cc',
+ 'browser/power_profiler/power_event.h',
+ 'browser/power_profiler/power_profiler_observer.h',
+ 'browser/power_profiler/power_profiler_service.cc',
+ 'browser/power_profiler/power_profiler_service.h',
+ 'browser/power_save_blocker_android.cc',
+ 'browser/power_save_blocker_android.h',
+ 'browser/power_save_blocker_chromeos.cc',
+ 'browser/power_save_blocker_impl.cc',
+ 'browser/power_save_blocker_impl.h',
+ 'browser/power_save_blocker_mac.cc',
+ 'browser/power_save_blocker_ozone.cc',
+ 'browser/power_save_blocker_win.cc',
+ 'browser/power_save_blocker_x11.cc',
+ 'browser/ppapi_plugin_process_host.cc',
+ 'browser/ppapi_plugin_process_host.h',
+ 'browser/profiler_controller_impl.cc',
+ 'browser/profiler_controller_impl.h',
+ 'browser/profiler_message_filter.cc',
+ 'browser/profiler_message_filter.h',
+ 'browser/push_messaging_message_filter.cc',
+ 'browser/push_messaging_message_filter.h',
+ 'browser/quota_dispatcher_host.cc',
+ 'browser/quota_dispatcher_host.h',
+ 'browser/renderer_data_memoizing_store.h',
+ 'browser/renderer_host/clipboard_message_filter.cc',
+ 'browser/renderer_host/clipboard_message_filter.h',
+ 'browser/renderer_host/clipboard_message_filter_mac.mm',
+ 'browser/renderer_host/compositing_iosurface_context_mac.h',
+ 'browser/renderer_host/compositing_iosurface_context_mac.mm',
+ 'browser/renderer_host/compositing_iosurface_layer_mac.h',
+ 'browser/renderer_host/compositing_iosurface_layer_mac.mm',
+ 'browser/renderer_host/compositing_iosurface_mac.h',
+ 'browser/renderer_host/compositing_iosurface_mac.mm',
+ 'browser/renderer_host/compositing_iosurface_shader_programs_mac.cc',
+ 'browser/renderer_host/compositing_iosurface_shader_programs_mac.h',
+ 'browser/renderer_host/compositing_iosurface_transformer_mac.cc',
+ 'browser/renderer_host/compositing_iosurface_transformer_mac.h',
+ 'browser/renderer_host/compositor_impl_android.cc',
+ 'browser/renderer_host/compositor_impl_android.h',
+ 'browser/renderer_host/compositor_resize_lock_aura.cc',
+ 'browser/renderer_host/compositor_resize_lock_aura.h',
+ 'browser/renderer_host/database_message_filter.cc',
+ 'browser/renderer_host/database_message_filter.h',
+ 'browser/renderer_host/delegated_frame_evictor.cc',
+ 'browser/renderer_host/delegated_frame_evictor.h',
+ 'browser/renderer_host/dip_util.cc',
+ 'browser/renderer_host/dip_util.h',
+ 'browser/renderer_host/display_link_mac.h',
+ 'browser/renderer_host/display_link_mac.cc',
+ 'browser/renderer_host/event_with_latency_info.h',
+ 'browser/renderer_host/file_utilities_message_filter.cc',
+ 'browser/renderer_host/file_utilities_message_filter.h',
+ 'browser/renderer_host/gamepad_browser_message_filter.cc',
+ 'browser/renderer_host/gamepad_browser_message_filter.h',
+ 'browser/renderer_host/gpu_message_filter.cc',
+ 'browser/renderer_host/gpu_message_filter.h',
+ 'browser/renderer_host/image_transport_factory_android.cc',
+ 'browser/renderer_host/image_transport_factory_android.h',
+ 'browser/renderer_host/ime_adapter_android.cc',
+ 'browser/renderer_host/ime_adapter_android.h',
+ 'browser/renderer_host/input/gesture_event_queue.cc',
+ 'browser/renderer_host/input/gesture_event_queue.h',
+ 'browser/renderer_host/input/input_ack_handler.h',
+ 'browser/renderer_host/input/input_router.h',
+ 'browser/renderer_host/input/input_router_client.h',
+ 'browser/renderer_host/input/input_router_impl.cc',
+ 'browser/renderer_host/input/input_router_impl.h',
+ 'browser/renderer_host/input/input_router_config_helper.cc',
+ 'browser/renderer_host/input/input_router_config_helper.h',
+ 'browser/renderer_host/input/motion_event_android.cc',
+ 'browser/renderer_host/input/motion_event_android.h',
+ 'browser/renderer_host/input/motion_event_web.cc',
+ 'browser/renderer_host/input/motion_event_web.h',
+ 'browser/renderer_host/input/synthetic_gesture.cc',
+ 'browser/renderer_host/input/synthetic_gesture.h',
+ 'browser/renderer_host/input/synthetic_gesture_controller.cc',
+ 'browser/renderer_host/input/synthetic_gesture_controller.h',
+ 'browser/renderer_host/input/synthetic_gesture_target.h',
+ 'browser/renderer_host/input/synthetic_gesture_target_android.cc',
+ 'browser/renderer_host/input/synthetic_gesture_target_android.h',
+ 'browser/renderer_host/input/synthetic_gesture_target_aura.cc',
+ 'browser/renderer_host/input/synthetic_gesture_target_aura.h',
+ 'browser/renderer_host/input/synthetic_gesture_target_base.cc',
+ 'browser/renderer_host/input/synthetic_gesture_target_base.h',
+ 'browser/renderer_host/input/synthetic_pinch_gesture.cc',
+ 'browser/renderer_host/input/synthetic_pinch_gesture.h',
+ 'browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc',
+ 'browser/renderer_host/input/synthetic_smooth_scroll_gesture.h',
+ 'browser/renderer_host/input/synthetic_tap_gesture.cc',
+ 'browser/renderer_host/input/synthetic_tap_gesture.h',
+ 'browser/renderer_host/input/tap_suppression_controller.cc',
+ 'browser/renderer_host/input/tap_suppression_controller.h',
+ 'browser/renderer_host/input/tap_suppression_controller_client.h',
+ 'browser/renderer_host/input/timeout_monitor.cc',
+ 'browser/renderer_host/input/timeout_monitor.h',
+ 'browser/renderer_host/input/touch_emulator.cc',
+ 'browser/renderer_host/input/touch_emulator.h',
+ 'browser/renderer_host/input/touch_emulator_client.h',
+ 'browser/renderer_host/input/touch_event_queue.cc',
+ 'browser/renderer_host/input/touch_event_queue.h',
+ 'browser/renderer_host/input/touch_action_filter.cc',
+ 'browser/renderer_host/input/touch_action_filter.h',
+ 'browser/renderer_host/input/touchpad_tap_suppression_controller.cc',
+ 'browser/renderer_host/input/touchpad_tap_suppression_controller.h',
+ 'browser/renderer_host/input/touchscreen_tap_suppression_controller.cc',
+ 'browser/renderer_host/input/touchscreen_tap_suppression_controller.h',
+ 'browser/renderer_host/input/web_input_event_builders_android.cc',
+ 'browser/renderer_host/input/web_input_event_builders_android.h',
+ 'browser/renderer_host/input/web_input_event_builders_win.cc',
+ 'browser/renderer_host/input/web_input_event_builders_win.h',
+ 'browser/renderer_host/input/web_input_event_util.cc',
+ 'browser/renderer_host/input/web_input_event_util.h',
+ 'browser/renderer_host/input/web_input_event_util_posix.cc',
+ 'browser/renderer_host/input/web_input_event_util_posix.h',
+ 'browser/renderer_host/java/java_bound_object.cc',
+ 'browser/renderer_host/java/java_bound_object.h',
+ 'browser/renderer_host/java/java_bridge_channel_host.cc',
+ 'browser/renderer_host/java/java_bridge_channel_host.h',
+ 'browser/renderer_host/java/java_bridge_dispatcher_host.cc',
+ 'browser/renderer_host/java/java_bridge_dispatcher_host.h',
+ 'browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc',
+ 'browser/renderer_host/java/java_bridge_dispatcher_host_manager.h',
+ 'browser/renderer_host/java/java_method.cc',
+ 'browser/renderer_host/java/java_method.h',
+ 'browser/renderer_host/java/java_type.cc',
+ 'browser/renderer_host/java/java_type.h',
+ 'browser/renderer_host/java/jni_helper.cc',
+ 'browser/renderer_host/java/jni_helper.h',
+ 'browser/renderer_host/legacy_render_widget_host_win.cc',
+ 'browser/renderer_host/legacy_render_widget_host_win.h',
+ 'browser/renderer_host/media/audio_input_device_manager.cc',
+ 'browser/renderer_host/media/audio_input_device_manager.h',
+ 'browser/renderer_host/media/audio_input_renderer_host.cc',
+ 'browser/renderer_host/media/audio_input_renderer_host.h',
+ 'browser/renderer_host/media/audio_input_sync_writer.cc',
+ 'browser/renderer_host/media/audio_input_sync_writer.h',
+ 'browser/renderer_host/media/audio_renderer_host.cc',
+ 'browser/renderer_host/media/audio_renderer_host.h',
+ 'browser/renderer_host/media/audio_sync_reader.cc',
+ 'browser/renderer_host/media/audio_sync_reader.h',
+ 'browser/renderer_host/media/device_request_message_filter.cc',
+ 'browser/renderer_host/media/device_request_message_filter.h',
+ 'browser/renderer_host/media/media_capture_devices_impl.cc',
+ 'browser/renderer_host/media/media_capture_devices_impl.h',
+ 'browser/renderer_host/media/media_stream_dispatcher_host.cc',
+ 'browser/renderer_host/media/media_stream_dispatcher_host.h',
+ 'browser/renderer_host/media/media_stream_manager.cc',
+ 'browser/renderer_host/media/media_stream_manager.h',
+ 'browser/renderer_host/media/media_stream_provider.h',
+ 'browser/renderer_host/media/media_stream_requester.h',
+ 'browser/renderer_host/media/media_stream_track_metrics_host.cc',
+ 'browser/renderer_host/media/media_stream_track_metrics_host.h',
+ 'browser/renderer_host/media/media_stream_ui_proxy.cc',
+ 'browser/renderer_host/media/media_stream_ui_proxy.h',
+ 'browser/renderer_host/media/midi_dispatcher_host.cc',
+ 'browser/renderer_host/media/midi_dispatcher_host.h',
+ 'browser/renderer_host/media/midi_host.cc',
+ 'browser/renderer_host/media/midi_host.h',
+ 'browser/renderer_host/media/video_capture_buffer_pool.cc',
+ 'browser/renderer_host/media/video_capture_buffer_pool.h',
+ 'browser/renderer_host/media/video_capture_controller.cc',
+ 'browser/renderer_host/media/video_capture_controller.h',
+ 'browser/renderer_host/media/video_capture_controller_event_handler.cc',
+ 'browser/renderer_host/media/video_capture_controller_event_handler.h',
+ 'browser/renderer_host/media/video_capture_host.cc',
+ 'browser/renderer_host/media/video_capture_host.h',
+ 'browser/renderer_host/media/video_capture_manager.cc',
+ 'browser/renderer_host/media/video_capture_manager.h',
+ 'browser/renderer_host/memory_benchmark_message_filter.cc',
+ 'browser/renderer_host/memory_benchmark_message_filter.h',
+ 'browser/renderer_host/native_web_keyboard_event.cc',
+ 'browser/renderer_host/native_web_keyboard_event_android.cc',
+ 'browser/renderer_host/native_web_keyboard_event_aura.cc',
+ 'browser/renderer_host/native_web_keyboard_event_mac.mm',
+ 'browser/renderer_host/overscroll_configuration.cc',
+ 'browser/renderer_host/overscroll_controller.cc',
+ 'browser/renderer_host/overscroll_controller.h',
+ 'browser/renderer_host/overscroll_controller_delegate.h',
+ 'browser/renderer_host/pepper/browser_ppapi_host_impl.cc',
+ 'browser/renderer_host/pepper/browser_ppapi_host_impl.h',
+ 'browser/renderer_host/pepper/content_browser_pepper_host_factory.cc',
+ 'browser/renderer_host/pepper/content_browser_pepper_host_factory.h',
+ 'browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc',
+ 'browser/renderer_host/pepper/pepper_browser_font_singleton_host.h',
+ 'browser/renderer_host/pepper/pepper_external_file_ref_backend.cc',
+ 'browser/renderer_host/pepper/pepper_external_file_ref_backend.h',
+ 'browser/renderer_host/pepper/pepper_file_io_host.cc',
+ 'browser/renderer_host/pepper/pepper_file_io_host.h',
+ 'browser/renderer_host/pepper/pepper_file_ref_host.cc',
+ 'browser/renderer_host/pepper/pepper_file_ref_host.h',
+ 'browser/renderer_host/pepper/pepper_file_system_browser_host.cc',
+ 'browser/renderer_host/pepper/pepper_file_system_browser_host.h',
+ 'browser/renderer_host/pepper/pepper_flash_file_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_flash_file_message_filter.h',
+ 'browser/renderer_host/pepper/pepper_gamepad_host.cc',
+ 'browser/renderer_host/pepper/pepper_gamepad_host.h',
+ 'browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_host_resolver_message_filter.h',
+ 'browser/renderer_host/pepper/pepper_internal_file_ref_backend.cc',
+ 'browser/renderer_host/pepper/pepper_internal_file_ref_backend.h',
+ 'browser/renderer_host/pepper/pepper_lookup_request.h',
+ 'browser/renderer_host/pepper/pepper_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_message_filter.h',
+ 'browser/renderer_host/pepper/pepper_network_monitor_host.cc',
+ 'browser/renderer_host/pepper/pepper_network_monitor_host.h',
+ 'browser/renderer_host/pepper/pepper_network_proxy_host.cc',
+ 'browser/renderer_host/pepper/pepper_network_proxy_host.h',
+ 'browser/renderer_host/pepper/pepper_print_settings_manager.cc',
+ 'browser/renderer_host/pepper/pepper_print_settings_manager.h',
+ 'browser/renderer_host/pepper/pepper_printing_host.cc',
+ 'browser/renderer_host/pepper/pepper_printing_host.h',
+ 'browser/renderer_host/pepper/pepper_renderer_connection.cc',
+ 'browser/renderer_host/pepper/pepper_renderer_connection.h',
+ 'browser/renderer_host/pepper/pepper_security_helper.cc',
+ 'browser/renderer_host/pepper/pepper_security_helper.h',
+ 'browser/renderer_host/pepper/pepper_socket_utils.cc',
+ 'browser/renderer_host/pepper/pepper_socket_utils.h',
+ 'browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h',
+ 'browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list.h',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_android.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_host.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_host.h',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_ozone.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_pango.cc',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm',
+ 'browser/renderer_host/pepper/pepper_truetype_font_list_win.cc',
+ 'browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc',
+ 'browser/renderer_host/pepper/pepper_udp_socket_message_filter.h',
+ 'browser/renderer_host/pepper/quota_reservation.cc',
+ 'browser/renderer_host/pepper/quota_reservation.h',
+ 'browser/renderer_host/pepper/ssl_context_helper.cc',
+ 'browser/renderer_host/pepper/ssl_context_helper.h',
+ 'browser/renderer_host/popup_menu_helper_mac.h',
+ 'browser/renderer_host/popup_menu_helper_mac.mm',
+ 'browser/renderer_host/render_message_filter.cc',
+ 'browser/renderer_host/render_message_filter.h',
+ 'browser/renderer_host/render_process_host_impl.cc',
+ 'browser/renderer_host/render_process_host_impl.h',
+ 'browser/renderer_host/render_sandbox_host_linux.cc',
+ 'browser/renderer_host/render_sandbox_host_linux.h',
+ 'browser/renderer_host/render_process_host_impl.h',
+ 'browser/renderer_host/render_view_host_delegate.cc',
+ 'browser/renderer_host/render_view_host_delegate.h',
+ 'browser/renderer_host/render_view_host_delegate_view.h',
+ 'browser/renderer_host/render_view_host_factory.cc',
+ 'browser/renderer_host/render_view_host_factory.h',
+ 'browser/renderer_host/render_view_host_impl.cc',
+ 'browser/renderer_host/render_view_host_impl.h',
+ 'browser/renderer_host/render_widget_helper.cc',
+ 'browser/renderer_host/render_widget_helper.h',
+ 'browser/renderer_host/render_widget_helper_mac.mm',
+ 'browser/renderer_host/render_widget_host_delegate.cc',
+ 'browser/renderer_host/render_widget_host_delegate.h',
+ 'browser/renderer_host/render_widget_host_impl.cc',
+ 'browser/renderer_host/render_widget_host_impl.h',
+ 'browser/renderer_host/render_widget_host_view_android.cc',
+ 'browser/renderer_host/render_widget_host_view_android.h',
+ 'browser/renderer_host/render_widget_host_view_aura.cc',
+ 'browser/renderer_host/render_widget_host_view_aura.h',
+ 'browser/renderer_host/render_widget_host_view_base.cc',
+ 'browser/renderer_host/render_widget_host_view_base.h',
+ 'browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h',
+ 'browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm',
+ 'browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h',
+ 'browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm',
+ 'browser/renderer_host/render_widget_host_view_mac.h',
+ 'browser/renderer_host/render_widget_host_view_mac.mm',
+ 'browser/renderer_host/renderer_frame_manager.cc',
+ 'browser/renderer_host/renderer_frame_manager.h',
+ 'browser/renderer_host/sandbox_ipc_linux.cc',
+ 'browser/renderer_host/sandbox_ipc_linux.h',
+ 'browser/renderer_host/software_frame_manager.cc',
+ 'browser/renderer_host/software_frame_manager.h',
+ 'browser/renderer_host/software_layer_mac.mm',
+ 'browser/renderer_host/software_layer_mac.h',
+ 'browser/renderer_host/socket_stream_dispatcher_host.cc',
+ 'browser/renderer_host/socket_stream_dispatcher_host.h',
+ 'browser/renderer_host/socket_stream_host.cc',
+ 'browser/renderer_host/socket_stream_host.h',
+ 'browser/renderer_host/text_input_client_mac.h',
+ 'browser/renderer_host/text_input_client_mac.mm',
+ 'browser/renderer_host/text_input_client_message_filter.h',
+ 'browser/renderer_host/text_input_client_message_filter.mm',
+ 'browser/renderer_host/ui_events_helper.cc',
+ 'browser/renderer_host/ui_events_helper.h',
+ 'browser/renderer_host/web_input_event_aura.cc',
+ 'browser/renderer_host/web_input_event_aura.h',
+ 'browser/renderer_host/web_input_event_aurawin.cc',
+ 'browser/renderer_host/web_input_event_aurax11.cc',
+ 'browser/renderer_host/webmenurunner_mac.h',
+ 'browser/renderer_host/webmenurunner_mac.mm',
+ 'browser/renderer_host/websocket_dispatcher_host.cc',
+ 'browser/renderer_host/websocket_dispatcher_host.h',
+ 'browser/renderer_host/websocket_host.cc',
+ 'browser/renderer_host/websocket_host.h',
+ 'browser/resolve_proxy_msg_helper.cc',
+ 'browser/resolve_proxy_msg_helper.h',
+ 'browser/resource_context_impl.cc',
+ 'browser/resource_context_impl.h',
+ 'browser/safe_util_win.cc',
+ 'browser/safe_util_win.h',
+ 'browser/screen_orientation/screen_orientation_dispatcher_host.cc',
+ 'browser/screen_orientation/screen_orientation_dispatcher_host.h',
+ 'browser/screen_orientation/screen_orientation_provider.h',
+ 'browser/screen_orientation/screen_orientation_provider_android.h',
+ 'browser/screen_orientation/screen_orientation_provider_android.cc',
+ 'browser/service_worker/embedded_worker_instance.cc',
+ 'browser/service_worker/embedded_worker_instance.h',
+ 'browser/service_worker/embedded_worker_registry.cc',
+ 'browser/service_worker/embedded_worker_registry.h',
+ 'browser/service_worker/service_worker_context_core.cc',
+ 'browser/service_worker/service_worker_context_core.h',
+ 'browser/service_worker/service_worker_context_observer.h',
+ 'browser/service_worker/service_worker_context_request_handler.cc',
+ 'browser/service_worker/service_worker_context_request_handler.h',
+ 'browser/service_worker/service_worker_context_wrapper.cc',
+ 'browser/service_worker/service_worker_context_wrapper.h',
+ 'browser/service_worker/service_worker_controllee_request_handler.cc',
+ 'browser/service_worker/service_worker_controllee_request_handler.h',
+ 'browser/service_worker/service_worker_database.cc',
+ 'browser/service_worker/service_worker_database.h',
+ 'browser/service_worker/service_worker_disk_cache.cc',
+ 'browser/service_worker/service_worker_disk_cache.h',
+ 'browser/service_worker/service_worker_dispatcher_host.cc',
+ 'browser/service_worker/service_worker_dispatcher_host.h',
+ 'browser/service_worker/service_worker_fetch_dispatcher.cc',
+ 'browser/service_worker/service_worker_fetch_dispatcher.h',
+ 'browser/service_worker/service_worker_handle.cc',
+ 'browser/service_worker/service_worker_handle.h',
+ 'browser/service_worker/service_worker_info.cc',
+ 'browser/service_worker/service_worker_info.h',
+ 'browser/service_worker/service_worker_internals_ui.cc',
+ 'browser/service_worker/service_worker_internals_ui.h',
+ 'browser/service_worker/service_worker_job_coordinator.cc',
+ 'browser/service_worker/service_worker_job_coordinator.h',
+ 'browser/service_worker/service_worker_process_manager.cc',
+ 'browser/service_worker/service_worker_process_manager.h',
+ 'browser/service_worker/service_worker_provider_host.cc',
+ 'browser/service_worker/service_worker_provider_host.h',
+ 'browser/service_worker/service_worker_read_from_cache_job.cc',
+ 'browser/service_worker/service_worker_read_from_cache_job.h',
+ 'browser/service_worker/service_worker_register_job_base.h',
+ 'browser/service_worker/service_worker_register_job.cc',
+ 'browser/service_worker/service_worker_register_job.h',
+ 'browser/service_worker/service_worker_registration.cc',
+ 'browser/service_worker/service_worker_registration.h',
+ 'browser/service_worker/service_worker_registration_status.cc',
+ 'browser/service_worker/service_worker_registration_status.h',
+ 'browser/service_worker/service_worker_request_handler.cc',
+ 'browser/service_worker/service_worker_request_handler.h',
+ 'browser/service_worker/service_worker_script_cache_map.cc',
+ 'browser/service_worker/service_worker_script_cache_map.h',
+ 'browser/service_worker/service_worker_storage.cc',
+ 'browser/service_worker/service_worker_storage.h',
+ 'browser/service_worker/service_worker_unregister_job.cc',
+ 'browser/service_worker/service_worker_unregister_job.h',
+ 'browser/service_worker/service_worker_url_request_job.cc',
+ 'browser/service_worker/service_worker_url_request_job.h',
+ 'browser/service_worker/service_worker_utils.cc',
+ 'browser/service_worker/service_worker_utils.h',
+ 'browser/service_worker/service_worker_version.cc',
+ 'browser/service_worker/service_worker_version.h',
+ 'browser/service_worker/service_worker_write_to_cache_job.cc',
+ 'browser/service_worker/service_worker_write_to_cache_job.h',
+ 'browser/shared_worker/shared_worker_host.cc',
+ 'browser/shared_worker/shared_worker_host.h',
+ 'browser/shared_worker/shared_worker_instance.cc',
+ 'browser/shared_worker/shared_worker_instance.h',
+ 'browser/shared_worker/shared_worker_message_filter.cc',
+ 'browser/shared_worker/shared_worker_message_filter.h',
+ 'browser/shared_worker/shared_worker_service_impl.cc',
+ 'browser/shared_worker/shared_worker_service_impl.h',
+ 'browser/signed_certificate_timestamp_store_impl.cc',
+ 'browser/signed_certificate_timestamp_store_impl.h',
+ 'browser/site_instance_impl.cc',
+ 'browser/site_instance_impl.h',
+ 'browser/speech/audio_buffer.cc',
+ 'browser/speech/audio_buffer.h',
+ 'browser/speech/audio_encoder.cc',
+ 'browser/speech/audio_encoder.h',
+ 'browser/speech/chunked_byte_buffer.cc',
+ 'browser/speech/chunked_byte_buffer.h',
+ 'browser/speech/endpointer/endpointer.cc',
+ 'browser/speech/endpointer/endpointer.h',
+ 'browser/speech/endpointer/energy_endpointer.cc',
+ 'browser/speech/endpointer/energy_endpointer.h',
+ 'browser/speech/endpointer/energy_endpointer_params.cc',
+ 'browser/speech/endpointer/energy_endpointer_params.h',
+ 'browser/speech/google_one_shot_remote_engine.cc',
+ 'browser/speech/google_one_shot_remote_engine.h',
+ 'browser/speech/google_streaming_remote_engine.cc',
+ 'browser/speech/google_streaming_remote_engine.h',
+ 'browser/speech/speech_recognition_dispatcher_host.cc',
+ 'browser/speech/speech_recognition_dispatcher_host.h',
+ 'browser/speech/speech_recognition_engine.cc',
+ 'browser/speech/speech_recognition_engine.h',
+ 'browser/speech/speech_recognition_manager_impl.cc',
+ 'browser/speech/speech_recognition_manager_impl.h',
+ 'browser/speech/speech_recognizer.h',
+ 'browser/speech/speech_recognizer_impl.cc',
+ 'browser/speech/speech_recognizer_impl.h',
+ 'browser/speech/speech_recognizer_impl_android.cc',
+ 'browser/speech/speech_recognizer_impl_android.h',
+ 'browser/ssl/ssl_cert_error_handler.cc',
+ 'browser/ssl/ssl_cert_error_handler.h',
+ 'browser/ssl/ssl_client_auth_handler.cc',
+ 'browser/ssl/ssl_client_auth_handler.h',
+ 'browser/ssl/ssl_error_handler.cc',
+ 'browser/ssl/ssl_error_handler.h',
+ 'browser/ssl/ssl_host_state.cc',
+ 'browser/ssl/ssl_host_state.h',
+ 'browser/ssl/ssl_manager.cc',
+ 'browser/ssl/ssl_manager.h',
+ 'browser/ssl/ssl_policy_backend.cc',
+ 'browser/ssl/ssl_policy_backend.h',
+ 'browser/ssl/ssl_policy.cc',
+ 'browser/ssl/ssl_policy.h',
+ 'browser/ssl/ssl_request_info.cc',
+ 'browser/ssl/ssl_request_info.h',
+ 'browser/startup_task_runner.cc',
+ 'browser/startup_task_runner.h',
+ 'browser/streams/stream.cc',
+ 'browser/streams/stream.h',
+ 'browser/streams/stream_context.cc',
+ 'browser/streams/stream_handle_impl.cc',
+ 'browser/streams/stream_handle_impl.h',
+ 'browser/streams/stream_context.h',
+ 'browser/streams/stream_read_observer.h',
+ 'browser/streams/stream_registry.cc',
+ 'browser/streams/stream_registry.h',
+ 'browser/streams/stream_url_request_job.cc',
+ 'browser/streams/stream_url_request_job.h',
+ 'browser/streams/stream_write_observer.h',
+ 'browser/storage_partition_impl.cc',
+ 'browser/storage_partition_impl.h',
+ 'browser/storage_partition_impl_map.cc',
+ 'browser/storage_partition_impl_map.h',
+ 'browser/system_message_window_win.cc',
+ 'browser/system_message_window_win.h',
+ 'browser/tcmalloc_internals_request_job.cc',
+ 'browser/tcmalloc_internals_request_job.h',
+ 'browser/time_zone_monitor.cc',
+ 'browser/time_zone_monitor.h',
+ 'browser/time_zone_monitor_android.cc',
+ 'browser/time_zone_monitor_android.h',
+ 'browser/time_zone_monitor_chromeos.cc',
+ 'browser/time_zone_monitor_linux.cc',
+ 'browser/time_zone_monitor_mac.mm',
+ 'browser/time_zone_monitor_win.cc',
+ 'browser/theme_helper_mac.mm',
+ 'browser/theme_helper_mac.h',
+ 'browser/tracing/trace_message_filter.cc',
+ 'browser/tracing/trace_message_filter.h',
+ 'browser/tracing/etw_system_event_consumer_win.cc',
+ 'browser/tracing/etw_system_event_consumer_win.h',
+ 'browser/tracing/tracing_controller_impl.cc',
+ 'browser/tracing/tracing_controller_impl.h',
+ 'browser/tracing/tracing_ui.cc',
+ 'browser/tracing/tracing_ui.h',
+ 'browser/udev_linux.cc',
+ 'browser/udev_linux.h',
+ 'browser/user_metrics.cc',
+ 'browser/utility_process_host_impl.cc',
+ 'browser/utility_process_host_impl.h',
+ 'browser/vibration/vibration_message_filter.cc',
+ 'browser/vibration/vibration_message_filter.h',
+ 'browser/vibration/vibration_provider_android.cc',
+ 'browser/vibration/vibration_provider_android.h',
+ 'browser/web_contents/aura/gesture_nav_simple.cc',
+ 'browser/web_contents/aura/gesture_nav_simple.h',
+ 'browser/web_contents/aura/image_window_delegate.cc',
+ 'browser/web_contents/aura/image_window_delegate.h',
+ 'browser/web_contents/aura/overscroll_navigation_overlay.cc',
+ 'browser/web_contents/aura/overscroll_navigation_overlay.h',
+ 'browser/web_contents/aura/shadow_layer_delegate.cc',
+ 'browser/web_contents/aura/shadow_layer_delegate.h',
+ 'browser/web_contents/aura/window_slider.cc',
+ 'browser/web_contents/aura/window_slider.h',
+ 'browser/web_contents/touch_editable_impl_aura.cc',
+ 'browser/web_contents/touch_editable_impl_aura.h',
+ 'browser/web_contents/web_contents_android.cc',
+ 'browser/web_contents/web_contents_android.h',
+ 'browser/web_contents/web_contents_impl.cc',
+ 'browser/web_contents/web_contents_impl.h',
+ 'browser/web_contents/web_contents_view.h',
+ 'browser/web_contents/web_contents_view_android.cc',
+ 'browser/web_contents/web_contents_view_android.h',
+ 'browser/web_contents/web_contents_view_aura.cc',
+ 'browser/web_contents/web_contents_view_aura.h',
+ 'browser/web_contents/web_contents_view_guest.cc',
+ 'browser/web_contents/web_contents_view_guest.h',
+ 'browser/web_contents/web_contents_view_mac.h',
+ 'browser/web_contents/web_contents_view_mac.mm',
+ 'browser/web_contents/web_drag_dest_mac.h',
+ 'browser/web_contents/web_drag_dest_mac.mm',
+ 'browser/web_contents/web_drag_source_mac.h',
+ 'browser/web_contents/web_drag_source_mac.mm',
+ 'browser/web_contents/web_drag_utils_win.cc',
+ 'browser/web_contents/web_drag_utils_win.h',
+ 'browser/webui/content_web_ui_controller_factory.cc',
+ 'browser/webui/content_web_ui_controller_factory.h',
+ 'browser/webui/generic_handler.cc',
+ 'browser/webui/generic_handler.h',
+ 'browser/webui/shared_resources_data_source.cc',
+ 'browser/webui/shared_resources_data_source.h',
+ 'browser/webui/url_data_manager.cc',
+ 'browser/webui/url_data_manager.h',
+ 'browser/webui/url_data_manager_backend.cc',
+ 'browser/webui/url_data_manager_backend.h',
+ 'browser/webui/url_data_source_impl.cc',
+ 'browser/webui/url_data_source_impl.h',
+ 'browser/webui/web_ui_data_source_impl.cc',
+ 'browser/webui/web_ui_data_source_impl.h',
+ 'browser/webui/web_ui_controller_factory_registry.cc',
+ 'browser/webui/web_ui_controller_factory_registry.h',
+ 'browser/webui/web_ui_impl.cc',
+ 'browser/webui/web_ui_impl.h',
+ 'browser/webui/web_ui_message_handler.cc',
+ 'browser/worker_host/worker_document_set.cc',
+ 'browser/worker_host/worker_document_set.h',
+ 'browser/worker_host/worker_message_filter.cc',
+ 'browser/worker_host/worker_message_filter.h',
+ 'browser/worker_host/worker_process_host.cc',
+ 'browser/worker_host/worker_process_host.h',
+ 'browser/worker_host/worker_service_impl.cc',
+ 'browser/worker_host/worker_service_impl.h',
+ 'browser/worker_host/worker_storage_partition.cc',
+ 'browser/worker_host/worker_storage_partition.h',
+ 'browser/zygote_host/zygote_host_impl_linux.cc',
+ 'browser/zygote_host/zygote_host_impl_linux.h',
+ 'zygote/zygote_linux.cc',
+ 'zygote/zygote_linux.h',
+ 'zygote/zygote_main_linux.cc',
+ # These files are generated by GRIT.
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources.h',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources_map.cc',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources_map.h',
+ '<(SHARED_INTERMEDIATE_DIR)/content/browser/tracing/grit/tracing_resources.h',
+ '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/grit/webui_resources_map.cc',
+ # These files are generated by devtools_protocol_constants_generator.py.
+ '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.cc',
+ '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.h',
+ ],
+ },
'sources': [
- 'public/browser/access_token_store.h',
- 'public/browser/android/compositor.h',
- 'public/browser/android/compositor_client.h',
- 'public/browser/android/content_view_core.h',
- 'public/browser/android/content_view_layer_renderer.h',
- 'public/browser/android/devtools_auth.h',
- 'public/browser/android/download_controller_android.h',
- 'public/browser/android/external_video_surface_container.h',
- 'public/browser/android/layer_tree_build_helper.h',
- 'public/browser/android/synchronous_compositor_client.h',
- 'public/browser/android/synchronous_compositor.cc',
- 'public/browser/android/synchronous_compositor.h',
- 'public/browser/ax_event_notification_details.cc',
- 'public/browser/ax_event_notification_details.h',
- 'public/browser/browser_accessibility_state.h',
- 'public/browser/browser_child_process_host.h',
- 'public/browser/browser_child_process_host_delegate.cc',
- 'public/browser/browser_child_process_host_delegate.h',
- 'public/browser/browser_child_process_host_iterator.cc',
- 'public/browser/browser_child_process_host_iterator.h',
- 'public/browser/browser_child_process_observer.cc',
- 'public/browser/browser_child_process_observer.h',
- 'public/browser/browser_context.h',
- 'public/browser/browser_ipc_logging.h',
- 'public/browser/browser_main_parts.cc',
- 'public/browser/browser_main_parts.h',
- 'public/browser/browser_main_runner.h',
- 'public/browser/browser_message_filter.cc',
- 'public/browser/browser_message_filter.h',
- 'public/browser/browser_plugin_guest_delegate.cc',
- 'public/browser/browser_plugin_guest_delegate.h',
- 'public/browser/browser_plugin_guest_manager_delegate.cc',
- 'public/browser/browser_plugin_guest_manager_delegate.h',
- 'public/browser/browser_ppapi_host.h',
- 'public/browser/browser_shutdown.h',
- 'public/browser/browser_url_handler.h',
- 'public/browser/browser_thread.h',
- 'public/browser/browser_thread_delegate.h',
- 'public/browser/cert_store.h',
- 'public/browser/child_process_data.h',
- 'public/browser/child_process_security_policy.h',
- 'public/browser/color_chooser.h',
- 'public/browser/certificate_request_result_type.h',
- 'public/browser/content_browser_client.cc',
- 'public/browser/content_browser_client.h',
- 'public/browser/context_factory.h',
- 'public/browser/cookie_store_factory.h',
- 'public/browser/desktop_media_id.cc',
- 'public/browser/desktop_media_id.h',
- 'public/browser/desktop_notification_delegate.h',
- 'public/browser/devtools_agent_host.h',
- 'public/browser/devtools_client_host.h',
- 'public/browser/devtools_external_agent_proxy.h',
- 'public/browser/devtools_external_agent_proxy_delegate.h',
- 'public/browser/download_danger_type.h',
- 'public/browser/devtools_frontend_host_delegate.h',
- 'public/browser/devtools_http_handler.h',
- 'public/browser/devtools_http_handler_delegate.h',
- 'public/browser/devtools_manager.h',
- 'public/browser/devtools_target.h',
- 'public/browser/dom_operation_notification_details.h',
- 'public/browser/dom_storage_context.h',
- 'public/browser/download_destination_observer.h',
- 'public/browser/download_interrupt_reason_values.h',
- 'public/browser/download_interrupt_reasons.h',
- 'public/browser/download_item.h',
- 'public/browser/download_manager.h',
- 'public/browser/download_manager_delegate.cc',
- 'public/browser/download_manager_delegate.h',
- 'public/browser/download_save_info.cc',
- 'public/browser/download_save_info.h',
- 'public/browser/download_url_parameters.cc',
- 'public/browser/download_url_parameters.h',
- 'public/browser/favicon_status.cc',
- 'public/browser/favicon_status.h',
- 'public/browser/file_descriptor_info.h',
- 'public/browser/font_list_async.h',
- 'public/browser/geolocation_permission_context.h',
- 'public/browser/geolocation_provider.h',
- 'public/browser/global_request_id.h',
- 'public/browser/gpu_data_manager.h',
- 'public/browser/gpu_data_manager_observer.h',
- 'public/browser/histogram_fetcher.h',
- 'public/browser/host_zoom_map.h',
- 'public/browser/indexed_db_context.h',
- 'public/browser/indexed_db_info.cc',
- 'public/browser/indexed_db_info.h',
- 'public/browser/interstitial_page.h',
- 'public/browser/invalidate_type.h',
- 'public/browser/javascript_dialog_manager.cc',
- 'public/browser/javascript_dialog_manager.h',
- 'public/browser/load_from_memory_cache_details.cc',
- 'public/browser/load_from_memory_cache_details.h',
- 'public/browser/load_notification_details.h',
- 'public/browser/local_storage_usage_info.cc',
- 'public/browser/local_storage_usage_info.h',
- 'public/browser/location_provider.h',
- 'public/browser/media_capture_devices.h',
- 'public/browser/media_device_id.cc',
- 'public/browser/media_device_id.h',
- 'public/browser/native_web_keyboard_event.h',
- 'public/browser/navigation_controller.cc',
- 'public/browser/navigation_controller.h',
- 'public/browser/navigation_details.cc',
- 'public/browser/navigation_details.h',
- 'public/browser/navigation_entry.h',
- 'public/browser/navigation_type.h',
- 'public/browser/notification_details.h',
- 'public/browser/notification_observer.h',
- 'public/browser/notification_registrar.cc',
- 'public/browser/notification_registrar.h',
- 'public/browser/notification_service.h',
- 'public/browser/notification_source.h',
- 'public/browser/notification_types.h',
- 'public/browser/overscroll_configuration.h',
- 'public/browser/page_navigator.cc',
- 'public/browser/page_navigator.h',
- 'public/browser/pepper_flash_settings_helper.h',
- 'public/browser/plugin_data_remover.h',
- 'public/browser/plugin_service.h',
- 'public/browser/plugin_service_filter.h',
- 'public/browser/power_save_blocker.h',
- 'public/browser/profiler_controller.h',
- 'public/browser/profiler_subscriber.h',
- 'public/browser/quota_permission_context.h',
- 'public/browser/render_frame_host.h',
- 'public/browser/render_process_host.h',
- 'public/browser/render_process_host_factory.h',
- 'public/browser/render_process_host_observer.h',
- 'public/browser/render_view_host.h',
- 'public/browser/render_widget_host.h',
- 'public/browser/render_widget_host_view.h',
- 'public/browser/render_widget_host_view_frame_subscriber.h',
- 'public/browser/render_widget_host_view_mac_delegate.h',
- 'public/browser/resource_context.h',
- 'public/browser/resource_controller.h',
- 'public/browser/resource_dispatcher_host.h',
- 'public/browser/resource_dispatcher_host_delegate.cc',
- 'public/browser/resource_dispatcher_host_delegate.h',
- 'public/browser/resource_dispatcher_host_login_delegate.h',
- 'public/browser/resource_request_details.cc',
- 'public/browser/resource_request_details.h',
- 'public/browser/resource_request_info.h',
- 'public/browser/resource_throttle.h',
- 'public/browser/save_page_type.h',
- 'public/browser/service_worker_context.h',
- 'public/browser/session_storage_namespace.h',
- 'public/browser/session_storage_usage_info.h',
- 'public/browser/signed_certificate_timestamp_store.h',
- 'public/browser/site_instance.h',
- 'public/browser/speech_recognition_event_listener.h',
- 'public/browser/speech_recognition_manager.h',
- 'public/browser/speech_recognition_manager_delegate.h',
- 'public/browser/speech_recognition_session_config.cc',
- 'public/browser/speech_recognition_session_config.h',
- 'public/browser/speech_recognition_session_context.cc',
- 'public/browser/speech_recognition_session_context.h',
- 'public/browser/storage_partition.h',
- 'public/browser/stream_handle.h',
- 'public/browser/tracing_controller.h',
- 'public/browser/user_metrics.h',
- 'public/browser/utility_process_host.h',
- 'public/browser/vibration_provider.h',
- 'public/browser/web_contents.cc',
- 'public/browser/web_contents.h',
- 'public/browser/web_contents_delegate.cc',
- 'public/browser/web_contents_delegate.h',
- 'public/browser/web_contents_observer.cc',
- 'public/browser/web_contents_observer.h',
- 'public/browser/web_contents_user_data.h',
- 'public/browser/web_contents_view_delegate.h',
- 'public/browser/web_drag_dest_delegate.h',
- 'public/browser/web_ui.h',
- 'public/browser/web_ui_controller.cc',
- 'public/browser/web_ui_controller.h',
- 'public/browser/web_ui_controller_factory.h',
- 'public/browser/web_ui_data_source.h',
- 'public/browser/url_data_source.cc',
- 'public/browser/url_data_source.h',
- 'public/browser/web_ui_message_handler.h',
- 'public/browser/worker_service.h',
- 'public/browser/worker_service_observer.h',
- 'public/browser/zygote_host_linux.h',
- 'browser/accessibility/accessibility_mode_helper.cc',
- 'browser/accessibility/accessibility_mode_helper.h',
- 'browser/accessibility/accessibility_tree_formatter.cc',
- 'browser/accessibility/accessibility_tree_formatter.h',
- 'browser/accessibility/accessibility_tree_formatter_android.cc',
- 'browser/accessibility/accessibility_tree_formatter_mac.mm',
- 'browser/accessibility/accessibility_tree_formatter_utils_win.cc',
- 'browser/accessibility/accessibility_tree_formatter_utils_win.h',
- 'browser/accessibility/accessibility_tree_formatter_win.cc',
- 'browser/accessibility/accessibility_ui.cc',
- 'browser/accessibility/accessibility_ui.h',
- 'browser/accessibility/browser_accessibility.cc',
- 'browser/accessibility/browser_accessibility.h',
- 'browser/accessibility/browser_accessibility_android.cc',
- 'browser/accessibility/browser_accessibility_android.h',
- 'browser/accessibility/browser_accessibility_cocoa.h',
- 'browser/accessibility/browser_accessibility_cocoa.mm',
- 'browser/accessibility/browser_accessibility_mac.h',
- 'browser/accessibility/browser_accessibility_mac.mm',
- 'browser/accessibility/browser_accessibility_manager.cc',
- 'browser/accessibility/browser_accessibility_manager.h',
- 'browser/accessibility/browser_accessibility_manager_android.cc',
- 'browser/accessibility/browser_accessibility_manager_android.h',
- 'browser/accessibility/browser_accessibility_manager_mac.h',
- 'browser/accessibility/browser_accessibility_manager_mac.mm',
- 'browser/accessibility/browser_accessibility_manager_win.cc',
- 'browser/accessibility/browser_accessibility_manager_win.h',
- 'browser/accessibility/browser_accessibility_state_impl.cc',
- 'browser/accessibility/browser_accessibility_state_impl_win.cc',
- 'browser/accessibility/browser_accessibility_state_impl.h',
- 'browser/accessibility/browser_accessibility_win.cc',
- 'browser/accessibility/browser_accessibility_win.h',
- 'browser/android/browser_jni_registrar.cc',
- 'browser/android/browser_jni_registrar.h',
- 'browser/android/browser_startup_controller.cc',
- 'browser/android/browser_startup_controller.h',
- 'browser/android/child_process_launcher_android.cc',
- 'browser/android/child_process_launcher_android.h',
- 'browser/android/content_readback_handler.cc',
- 'browser/android/content_readback_handler.h',
- 'browser/android/content_settings.cc',
- 'browser/android/content_settings.h',
- 'browser/android/content_startup_flags.cc',
- 'browser/android/content_startup_flags.h',
- 'browser/android/content_video_view.cc',
- 'browser/android/content_video_view.h',
- 'browser/android/content_view_core_impl.cc',
- 'browser/android/content_view_core_impl.h',
- 'browser/android/content_view_render_view.cc',
- 'browser/android/content_view_render_view.h',
- 'browser/android/content_view_statics.cc',
- 'browser/android/content_view_statics.h',
- 'browser/android/date_time_chooser_android.cc',
- 'browser/android/date_time_chooser_android.h',
- 'browser/android/download_controller_android_impl.cc',
- 'browser/android/download_controller_android_impl.h',
- 'browser/android/devtools_auth.cc',
- 'browser/android/edge_effect.h',
- 'browser/android/edge_effect.cc',
- 'browser/android/gesture_event_type_list.h',
- 'browser/android/in_process/synchronous_compositor_factory_impl.cc',
- 'browser/android/in_process/synchronous_compositor_factory_impl.h',
- 'browser/android/in_process/synchronous_compositor_impl.cc',
- 'browser/android/in_process/synchronous_compositor_impl.h',
- 'browser/android/in_process/synchronous_compositor_output_surface.cc',
- 'browser/android/in_process/synchronous_compositor_output_surface.h',
- 'browser/android/in_process/synchronous_input_event_filter.cc',
- 'browser/android/in_process/synchronous_input_event_filter.h',
- 'browser/android/interstitial_page_delegate_android.cc',
- 'browser/android/interstitial_page_delegate_android.h',
- 'browser/android/load_url_params.cc',
- 'browser/android/load_url_params.h',
- 'browser/android/overscroll_glow.h',
- 'browser/android/overscroll_glow.cc',
- 'browser/android/popup_item_type_list.h',
- 'browser/android/surface_texture_peer_browser_impl.cc',
- 'browser/android/surface_texture_peer_browser_impl.h',
- 'browser/android/tracing_controller_android.cc',
- 'browser/android/tracing_controller_android.h',
- 'browser/android/web_contents_observer_android.cc',
- 'browser/android/web_contents_observer_android.h',
- 'browser/appcache/appcache_dispatcher_host.cc',
- 'browser/appcache/appcache_dispatcher_host.h',
- 'browser/appcache/appcache_frontend_proxy.cc',
- 'browser/appcache/appcache_frontend_proxy.h',
- 'browser/appcache/appcache_interceptor.cc',
- 'browser/appcache/appcache_interceptor.h',
- 'browser/appcache/chrome_appcache_service.cc',
- 'browser/appcache/chrome_appcache_service.h',
- 'browser/appcache/view_appcache_internals_job.h',
- 'browser/appcache/view_appcache_internals_job.cc',
- 'browser/battery_status/battery_status_manager_android.cc',
- 'browser/battery_status/battery_status_manager_android.h',
- 'browser/browser_child_process_host_impl.cc',
- 'browser/browser_child_process_host_impl.h',
- 'browser/browser_context.cc',
- 'browser/browser_ipc_logging.cc',
- 'browser/browser_main.cc',
- 'browser/browser_main.h',
- 'browser/browser_main_loop.cc',
- 'browser/browser_main_loop.h',
- 'browser/browser_main_runner.cc',
- 'browser/browser_plugin/browser_plugin_embedder.cc',
- 'browser/browser_plugin/browser_plugin_embedder.h',
- 'browser/browser_plugin/browser_plugin_guest.cc',
- 'browser/browser_plugin/browser_plugin_guest.h',
- 'browser/browser_plugin/browser_plugin_guest_manager.cc',
- 'browser/browser_plugin/browser_plugin_guest_manager.h',
- 'browser/browser_plugin/browser_plugin_host_factory.h',
- 'browser/browser_plugin/browser_plugin_message_filter.cc',
- 'browser/browser_plugin/browser_plugin_message_filter.h',
- 'browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h',
- 'browser/browser_plugin/browser_plugin_popup_menu_helper_mac.mm',
- 'browser/browser_process_sub_thread.cc',
- 'browser/browser_process_sub_thread.h',
- 'browser/browser_shutdown_profile_dumper.cc',
- 'browser/browser_shutdown_profile_dumper.h',
- 'browser/browser_thread_impl.cc',
- 'browser/browser_thread_impl.h',
- 'browser/browser_url_handler_impl.cc',
- 'browser/browser_url_handler_impl.h',
- 'browser/browsing_instance.cc',
- 'browser/browsing_instance.h',
- 'browser/byte_stream.cc',
- 'browser/byte_stream.h',
- 'browser/cert_store_impl.cc',
- 'browser/cert_store_impl.h',
- 'browser/child_process_launcher.cc',
- 'browser/child_process_launcher.h',
- 'browser/child_process_security_policy_impl.cc',
- 'browser/child_process_security_policy_impl.h',
- 'browser/compositor/browser_compositor_output_surface.cc',
- 'browser/compositor/browser_compositor_output_surface.h',
- 'browser/compositor/browser_compositor_output_surface_proxy.cc',
- 'browser/compositor/browser_compositor_output_surface_proxy.h',
- 'browser/compositor/delegated_frame_host.cc',
- 'browser/compositor/delegated_frame_host.h',
- 'browser/compositor/gpu_process_transport_factory.cc',
- 'browser/compositor/gpu_process_transport_factory.h',
- 'browser/compositor/image_transport_factory.cc',
- 'browser/compositor/image_transport_factory.h',
- 'browser/compositor/no_transport_image_transport_factory.cc',
- 'browser/compositor/no_transport_image_transport_factory.h',
- 'browser/compositor/overlay_candidate_validator_ozone.cc',
- 'browser/compositor/overlay_candidate_validator_ozone.h',
- 'browser/compositor/owned_mailbox.h',
- 'browser/compositor/owned_mailbox.cc',
- 'browser/compositor/reflector_impl.cc',
- 'browser/compositor/reflector_impl.h',
- 'browser/compositor/resize_lock.cc',
- 'browser/compositor/resize_lock.h',
- 'browser/compositor/gpu_browser_compositor_output_surface.cc',
- 'browser/compositor/gpu_browser_compositor_output_surface.h',
- 'browser/compositor/software_browser_compositor_output_surface.cc',
- 'browser/compositor/software_browser_compositor_output_surface.h',
- 'browser/compositor/software_output_device_ozone.cc',
- 'browser/compositor/software_output_device_ozone.h',
- 'browser/compositor/software_output_device_win.cc',
- 'browser/compositor/software_output_device_win.h',
- 'browser/compositor/software_output_device_x11.cc',
- 'browser/compositor/software_output_device_x11.h',
- 'browser/context_factory.cc',
- 'browser/cross_site_request_manager.cc',
- 'browser/cross_site_request_manager.h',
- 'browser/devtools/devtools_agent_host_impl.cc',
- 'browser/devtools/devtools_agent_host_impl.h',
- 'browser/devtools/devtools_browser_target.cc',
- 'browser/devtools/devtools_browser_target.h',
- 'browser/devtools/devtools_external_agent_proxy_impl.cc',
- 'browser/devtools/devtools_external_agent_proxy_impl.h',
- 'browser/devtools/devtools_frontend_host.cc',
- 'browser/devtools/devtools_frontend_host.h',
- 'browser/devtools/devtools_http_handler_impl.cc',
- 'browser/devtools/devtools_http_handler_impl.h',
- 'browser/devtools/devtools_manager_impl.cc',
- 'browser/devtools/devtools_manager_impl.h',
- 'browser/devtools/devtools_netlog_observer.cc',
- 'browser/devtools/devtools_netlog_observer.h',
- 'browser/devtools/devtools_power_handler.cc',
- 'browser/devtools/devtools_power_handler.h',
- 'browser/devtools/devtools_protocol.cc',
- 'browser/devtools/devtools_protocol.h',
- 'browser/devtools/devtools_system_info_handler.cc',
- 'browser/devtools/devtools_system_info_handler.h',
- 'browser/devtools/devtools_tracing_handler.h',
- 'browser/devtools/devtools_tracing_handler.cc',
- 'browser/devtools/ipc_devtools_agent_host.cc',
- 'browser/devtools/ipc_devtools_agent_host.h',
- 'browser/devtools/embedded_worker_devtools_manager.cc',
- 'browser/devtools/embedded_worker_devtools_manager.h',
- 'browser/devtools/render_view_devtools_agent_host.cc',
- 'browser/devtools/render_view_devtools_agent_host.h',
- 'browser/devtools/renderer_overrides_handler.cc',
- 'browser/devtools/renderer_overrides_handler.h',
- 'browser/devtools/tethering_handler.h',
- 'browser/devtools/tethering_handler.cc',
- 'browser/devtools/worker_devtools_manager.cc',
- 'browser/devtools/worker_devtools_manager.h',
- 'browser/devtools/worker_devtools_message_filter.cc',
- 'browser/devtools/worker_devtools_message_filter.h',
- 'browser/device_monitor_mac.h',
- 'browser/device_monitor_mac.mm',
- 'browser/device_monitor_udev.cc',
- 'browser/device_monitor_udev.h',
- 'browser/device_sensors/data_fetcher_shared_memory.h',
- 'browser/device_sensors/data_fetcher_shared_memory_android.cc',
- 'browser/device_sensors/data_fetcher_shared_memory_base.cc',
- 'browser/device_sensors/data_fetcher_shared_memory_base.h',
- 'browser/device_sensors/data_fetcher_shared_memory_default.cc',
- 'browser/device_sensors/data_fetcher_shared_memory_mac.cc',
- 'browser/device_sensors/data_fetcher_shared_memory_win.cc',
- 'browser/device_sensors/device_inertial_sensor_service.cc',
- 'browser/device_sensors/device_inertial_sensor_service.h',
- 'browser/device_sensors/device_motion_message_filter.cc',
- 'browser/device_sensors/device_motion_message_filter.h',
- 'browser/device_sensors/device_orientation_message_filter.cc',
- 'browser/device_sensors/device_orientation_message_filter.h',
- 'browser/device_sensors/inertial_sensor_consts.h',
- 'browser/device_sensors/sensor_manager_android.cc',
- 'browser/device_sensors/sensor_manager_android.h',
- 'browser/dom_storage/dom_storage_area.cc',
- 'browser/dom_storage/dom_storage_area.h',
- 'browser/dom_storage/dom_storage_context_impl.cc',
- 'browser/dom_storage/dom_storage_context_impl.h',
- 'browser/dom_storage/dom_storage_context_wrapper.cc',
- 'browser/dom_storage/dom_storage_context_wrapper.h',
- 'browser/dom_storage/dom_storage_database.cc',
- 'browser/dom_storage/dom_storage_database.h',
- 'browser/dom_storage/dom_storage_database_adapter.h',
- 'browser/dom_storage/dom_storage_host.cc',
- 'browser/dom_storage/dom_storage_host.h',
- 'browser/dom_storage/dom_storage_message_filter.cc',
- 'browser/dom_storage/dom_storage_message_filter.h',
- 'browser/dom_storage/dom_storage_namespace.cc',
- 'browser/dom_storage/dom_storage_namespace.h',
- 'browser/dom_storage/dom_storage_session.cc',
- 'browser/dom_storage/dom_storage_session.h',
- 'browser/dom_storage/dom_storage_task_runner.cc',
- 'browser/dom_storage/dom_storage_task_runner.h',
- 'browser/dom_storage/local_storage_database_adapter.cc',
- 'browser/dom_storage/local_storage_database_adapter.h',
- 'browser/dom_storage/session_storage_database.cc',
- 'browser/dom_storage/session_storage_database.h',
- 'browser/dom_storage/session_storage_database_adapter.cc',
- 'browser/dom_storage/session_storage_database_adapter.h',
- 'browser/dom_storage/session_storage_namespace_impl.cc',
- 'browser/dom_storage/session_storage_namespace_impl.h',
- 'browser/download/base_file.cc',
- 'browser/download/base_file.h',
- 'browser/download/base_file_linux.cc',
- 'browser/download/base_file_mac.cc',
- 'browser/download/base_file_posix.cc',
- 'browser/download/base_file_win.cc',
- 'browser/download/download_create_info.cc',
- 'browser/download/download_create_info.h',
- 'browser/download/download_file.h',
- 'browser/download/download_file_factory.cc',
- 'browser/download/download_file_factory.h',
- 'browser/download/download_file_impl.cc',
- 'browser/download/download_file_impl.h',
- 'browser/download/download_interrupt_reasons_impl.cc',
- 'browser/download/download_interrupt_reasons_impl.h',
- 'browser/download/download_item_factory.h',
- 'browser/download/download_item_impl.cc',
- 'browser/download/download_item_impl.h',
- 'browser/download/download_item_impl_delegate.cc',
- 'browser/download/download_item_impl_delegate.h',
- 'browser/download/download_manager_impl.cc',
- 'browser/download/download_manager_impl.h',
- 'browser/download/download_net_log_parameters.cc',
- 'browser/download/download_net_log_parameters.h',
- 'browser/download/download_request_handle.cc',
- 'browser/download/download_request_handle.h',
- 'browser/download/download_resource_handler.cc',
- 'browser/download/download_resource_handler.h',
- 'browser/download/download_stats.cc',
- 'browser/download/download_stats.h',
- 'browser/download/drag_download_file.cc',
- 'browser/download/drag_download_file.h',
- 'browser/download/drag_download_util.cc',
- 'browser/download/drag_download_util.h',
- 'browser/download/file_metadata_linux.cc',
- 'browser/download/file_metadata_linux.h',
- 'browser/download/file_metadata_mac.h',
- 'browser/download/file_metadata_mac.mm',
- 'browser/download/mhtml_generation_manager.cc',
- 'browser/download/mhtml_generation_manager.h',
- 'browser/download/rate_estimator.cc',
- 'browser/download/rate_estimator.h',
- 'browser/download/save_file.cc',
- 'browser/download/save_file.h',
- 'browser/download/save_file_manager.cc',
- 'browser/download/save_file_manager.h',
- 'browser/download/save_file_resource_handler.cc',
- 'browser/download/save_file_resource_handler.h',
- 'browser/download/save_item.cc',
- 'browser/download/save_item.h',
- 'browser/download/save_package.cc',
- 'browser/download/save_package.h',
- 'browser/download/save_types.cc',
- 'browser/download/save_types.h',
- 'browser/fileapi/blob_storage_host.cc',
- 'browser/fileapi/blob_storage_host.h',
- 'browser/fileapi/browser_file_system_helper.cc',
- 'browser/fileapi/browser_file_system_helper.h',
- 'browser/fileapi/chrome_blob_storage_context.cc',
- 'browser/fileapi/chrome_blob_storage_context.h',
- 'browser/fileapi/fileapi_message_filter.cc',
- 'browser/fileapi/fileapi_message_filter.h',
- 'browser/fileapi/upload_file_system_file_element_reader.cc',
- 'browser/fileapi/upload_file_system_file_element_reader.h',
- 'browser/font_list_async.cc',
- 'browser/frame_host/debug_urls.cc',
- 'browser/frame_host/debug_urls.h',
- 'browser/frame_host/frame_tree.cc',
- 'browser/frame_host/frame_tree.h',
- 'browser/frame_host/frame_tree_node.cc',
- 'browser/frame_host/frame_tree_node.h',
- 'browser/frame_host/interstitial_page_impl.cc',
- 'browser/frame_host/interstitial_page_impl.h',
- 'browser/frame_host/interstitial_page_navigator_impl.cc',
- 'browser/frame_host/interstitial_page_navigator_impl.h',
- 'browser/frame_host/navigation_controller_android.cc',
- 'browser/frame_host/navigation_controller_android.h',
- 'browser/frame_host/navigation_controller_delegate.h',
- 'browser/frame_host/navigation_controller_impl.cc',
- 'browser/frame_host/navigation_controller_impl.h',
- 'browser/frame_host/navigation_entry_impl.cc',
- 'browser/frame_host/navigation_entry_impl.h',
- 'browser/frame_host/navigation_entry_screenshot_manager.cc',
- 'browser/frame_host/navigation_entry_screenshot_manager.h',
- 'browser/frame_host/navigator.cc',
- 'browser/frame_host/navigator.h',
- 'browser/frame_host/navigator_impl.cc',
- 'browser/frame_host/navigator_impl.h',
- 'browser/frame_host/navigator_delegate.cc',
- 'browser/frame_host/navigator_delegate.h',
- 'browser/frame_host/cross_process_frame_connector.cc',
- 'browser/frame_host/cross_process_frame_connector.h',
- 'browser/frame_host/cross_site_transferring_request.cc',
- 'browser/frame_host/cross_site_transferring_request.h',
- 'browser/frame_host/render_frame_host_delegate.cc',
- 'browser/frame_host/render_frame_host_delegate.h',
- 'browser/frame_host/render_frame_host_factory.cc',
- 'browser/frame_host/render_frame_host_factory.h',
- 'browser/frame_host/render_frame_host_impl.cc',
- 'browser/frame_host/render_frame_host_impl.h',
- 'browser/frame_host/render_frame_host_manager.cc',
- 'browser/frame_host/render_frame_host_manager.h',
- 'browser/frame_host/render_frame_message_filter.cc',
- 'browser/frame_host/render_frame_message_filter.h',
- 'browser/frame_host/render_frame_proxy_host.cc',
- 'browser/frame_host/render_frame_proxy_host.h',
- 'browser/frame_host/render_widget_host_view_child_frame.cc',
- 'browser/frame_host/render_widget_host_view_child_frame.h',
- 'browser/frame_host/render_widget_host_view_guest.cc',
- 'browser/frame_host/render_widget_host_view_guest.h',
- 'browser/gamepad/gamepad_consumer.h',
- 'browser/gamepad/gamepad_data_fetcher.h',
- 'browser/gamepad/gamepad_platform_data_fetcher.h',
- 'browser/gamepad/gamepad_platform_data_fetcher_linux.cc',
- 'browser/gamepad/gamepad_platform_data_fetcher_linux.h',
- 'browser/gamepad/gamepad_platform_data_fetcher_mac.h',
- 'browser/gamepad/gamepad_platform_data_fetcher_mac.mm',
- 'browser/gamepad/gamepad_platform_data_fetcher_win.cc',
- 'browser/gamepad/gamepad_platform_data_fetcher_win.h',
- 'browser/gamepad/gamepad_provider.cc',
- 'browser/gamepad/gamepad_provider.h',
- 'browser/gamepad/gamepad_service.cc',
- 'browser/gamepad/gamepad_service.h',
- 'browser/gamepad/gamepad_standard_mappings.cc',
- 'browser/gamepad/gamepad_standard_mappings.h',
- 'browser/gamepad/gamepad_standard_mappings_linux.cc',
- 'browser/gamepad/gamepad_standard_mappings_mac.mm',
- 'browser/gamepad/gamepad_standard_mappings_win.cc',
- 'browser/gamepad/raw_input_data_fetcher_win.cc',
- 'browser/gamepad/raw_input_data_fetcher_win.h',
- 'browser/gamepad/xbox_data_fetcher_mac.cc',
- 'browser/gamepad/xbox_data_fetcher_mac.h',
- 'browser/geolocation/empty_wifi_data_provider.cc',
- 'browser/geolocation/empty_wifi_data_provider.h',
- 'browser/geolocation/geolocation_dispatcher_host.cc',
- 'browser/geolocation/geolocation_dispatcher_host.h',
- 'browser/geolocation/geolocation_provider_impl.cc',
- 'browser/geolocation/geolocation_provider_impl.h',
- 'browser/geolocation/location_api_adapter_android.cc',
- 'browser/geolocation/location_api_adapter_android.h',
- 'browser/geolocation/location_arbitrator.h',
- 'browser/geolocation/location_arbitrator_impl.cc',
- 'browser/geolocation/location_arbitrator_impl.h',
- 'browser/geolocation/location_provider_android.cc',
- 'browser/geolocation/location_provider_android.h',
- 'browser/geolocation/location_provider_base.cc',
- 'browser/geolocation/location_provider_base.h',
- 'browser/geolocation/network_location_provider.cc',
- 'browser/geolocation/network_location_provider.h',
- 'browser/geolocation/network_location_request.cc',
- 'browser/geolocation/network_location_request.h',
- 'browser/geolocation/osx_wifi.h',
- 'browser/geolocation/wifi_data.cc',
- 'browser/geolocation/wifi_data.h',
- 'browser/geolocation/wifi_data_provider.cc',
- 'browser/geolocation/wifi_data_provider.h',
- 'browser/geolocation/wifi_data_provider_chromeos.cc',
- 'browser/geolocation/wifi_data_provider_chromeos.h',
- 'browser/geolocation/wifi_data_provider_common.cc',
- 'browser/geolocation/wifi_data_provider_common.h',
- 'browser/geolocation/wifi_data_provider_common_win.cc',
- 'browser/geolocation/wifi_data_provider_common_win.h',
- 'browser/geolocation/wifi_data_provider_corewlan_mac.mm',
- 'browser/geolocation/wifi_data_provider_linux.cc',
- 'browser/geolocation/wifi_data_provider_linux.h',
- 'browser/geolocation/wifi_data_provider_mac.cc',
- 'browser/geolocation/wifi_data_provider_mac.h',
- 'browser/geolocation/wifi_data_provider_win.cc',
- 'browser/geolocation/wifi_data_provider_win.h',
- 'browser/geolocation/wifi_polling_policy.h',
- 'browser/gpu/browser_gpu_channel_host_factory.cc',
- 'browser/gpu/browser_gpu_channel_host_factory.h',
- 'browser/gpu/compositor_util.cc',
- 'browser/gpu/compositor_util.h',
- 'browser/gpu/gpu_data_manager_impl.cc',
- 'browser/gpu/gpu_data_manager_impl.h',
- 'browser/gpu/gpu_data_manager_impl_private.cc',
- 'browser/gpu/gpu_data_manager_impl_private.h',
- 'browser/gpu/gpu_internals_ui.cc',
- 'browser/gpu/gpu_internals_ui.h',
- 'browser/gpu/gpu_process_host.cc',
- 'browser/gpu/gpu_process_host.h',
- 'browser/gpu/gpu_process_host_ui_shim.cc',
- 'browser/gpu/gpu_process_host_ui_shim.h',
- 'browser/gpu/gpu_surface_tracker.cc',
- 'browser/gpu/gpu_surface_tracker.h',
- 'browser/gpu/shader_disk_cache.cc',
- 'browser/gpu/shader_disk_cache.h',
- 'browser/histogram_controller.cc',
- 'browser/histogram_controller.h',
- 'browser/histogram_internals_request_job.cc',
- 'browser/histogram_internals_request_job.h',
- 'browser/histogram_message_filter.cc',
- 'browser/histogram_message_filter.h',
- 'browser/histogram_subscriber.h',
- 'browser/histogram_synchronizer.cc',
- 'browser/histogram_synchronizer.h',
- 'browser/host_zoom_map_impl.cc',
- 'browser/host_zoom_map_impl.h',
- 'browser/indexed_db/indexed_db.h',
- 'browser/indexed_db/indexed_db_active_blob_registry.cc',
- 'browser/indexed_db/indexed_db_active_blob_registry.h',
- 'browser/indexed_db/indexed_db_backing_store.cc',
- 'browser/indexed_db/indexed_db_backing_store.h',
- 'browser/indexed_db/indexed_db_blob_info.cc',
- 'browser/indexed_db/indexed_db_blob_info.h',
- 'browser/indexed_db/indexed_db_callbacks.cc',
- 'browser/indexed_db/indexed_db_callbacks.h',
- 'browser/indexed_db/indexed_db_connection.cc',
- 'browser/indexed_db/indexed_db_connection.h',
- 'browser/indexed_db/indexed_db_context_impl.cc',
- 'browser/indexed_db/indexed_db_context_impl.h',
- 'browser/indexed_db/indexed_db_cursor.cc',
- 'browser/indexed_db/indexed_db_cursor.h',
- 'browser/indexed_db/indexed_db_database.cc',
- 'browser/indexed_db/indexed_db_database.h',
- 'browser/indexed_db/indexed_db_database_callbacks.cc',
- 'browser/indexed_db/indexed_db_database_callbacks.h',
- 'browser/indexed_db/indexed_db_database_error.h',
- 'browser/indexed_db/indexed_db_dispatcher_host.cc',
- 'browser/indexed_db/indexed_db_dispatcher_host.h',
- 'browser/indexed_db/indexed_db_factory.cc',
- 'browser/indexed_db/indexed_db_factory.h',
- 'browser/indexed_db/indexed_db_index_writer.cc',
- 'browser/indexed_db/indexed_db_index_writer.h',
- 'browser/indexed_db/indexed_db_internals_ui.cc',
- 'browser/indexed_db/indexed_db_internals_ui.h',
- 'browser/indexed_db/indexed_db_leveldb_coding.cc',
- 'browser/indexed_db/indexed_db_leveldb_coding.h',
- 'browser/indexed_db/indexed_db_metadata.cc',
- 'browser/indexed_db/indexed_db_metadata.h',
- 'browser/indexed_db/indexed_db_pending_connection.cc',
- 'browser/indexed_db/indexed_db_pending_connection.h',
- 'browser/indexed_db/indexed_db_quota_client.cc',
- 'browser/indexed_db/indexed_db_quota_client.h',
- 'browser/indexed_db/indexed_db_transaction.cc',
- 'browser/indexed_db/indexed_db_transaction.h',
- 'browser/indexed_db/indexed_db_transaction_coordinator.cc',
- 'browser/indexed_db/indexed_db_transaction_coordinator.h',
- 'browser/indexed_db/indexed_db_value.h',
- 'browser/indexed_db/indexed_db_value.cc',
- 'browser/indexed_db/leveldb/leveldb_comparator.h',
- 'browser/indexed_db/leveldb/leveldb_database.cc',
- 'browser/indexed_db/leveldb/leveldb_database.h',
- 'browser/indexed_db/leveldb/leveldb_iterator.h',
- 'browser/indexed_db/leveldb/leveldb_transaction.cc',
- 'browser/indexed_db/leveldb/leveldb_transaction.h',
- 'browser/indexed_db/leveldb/leveldb_write_batch.cc',
- 'browser/indexed_db/leveldb/leveldb_write_batch.h',
- 'browser/loader/async_resource_handler.cc',
- 'browser/loader/async_resource_handler.h',
- 'browser/loader/buffered_resource_handler.cc',
- 'browser/loader/buffered_resource_handler.h',
- 'browser/loader/certificate_resource_handler.cc',
- 'browser/loader/certificate_resource_handler.h',
- 'browser/loader/cross_site_resource_handler.cc',
- 'browser/loader/cross_site_resource_handler.h',
- 'browser/loader/detachable_resource_handler.cc',
- 'browser/loader/detachable_resource_handler.h',
- 'browser/loader/global_routing_id.h',
- 'browser/loader/layered_resource_handler.cc',
- 'browser/loader/layered_resource_handler.h',
- 'browser/loader/offline_policy.cc',
- 'browser/loader/offline_policy.h',
- 'browser/loader/power_save_block_resource_throttle.cc',
- 'browser/loader/power_save_block_resource_throttle.h',
- 'browser/loader/redirect_to_file_resource_handler.cc',
- 'browser/loader/redirect_to_file_resource_handler.h',
- 'browser/loader/resource_buffer.cc',
- 'browser/loader/resource_buffer.h',
- 'browser/loader/resource_dispatcher_host_impl.cc',
- 'browser/loader/resource_dispatcher_host_impl.h',
- 'browser/loader/resource_handler.cc',
- 'browser/loader/resource_handler.h',
- 'browser/loader/resource_loader.cc',
- 'browser/loader/resource_loader.h',
- 'browser/loader/resource_loader_delegate.h',
- 'browser/loader/resource_message_delegate.cc',
- 'browser/loader/resource_message_delegate.h',
- 'browser/loader/resource_message_filter.cc',
- 'browser/loader/resource_message_filter.h',
- 'browser/loader/resource_request_info_impl.cc',
- 'browser/loader/resource_request_info_impl.h',
- 'browser/loader/resource_scheduler.cc',
- 'browser/loader/resource_scheduler.h',
- 'browser/loader/resource_scheduler_filter.cc',
- 'browser/loader/resource_scheduler_filter.h',
- 'browser/loader/stream_resource_handler.cc',
- 'browser/loader/stream_resource_handler.h',
- 'browser/loader/sync_resource_handler.cc',
- 'browser/loader/sync_resource_handler.h',
- 'browser/loader/temporary_file_stream.cc',
- 'browser/loader/temporary_file_stream.h',
- 'browser/loader/throttling_resource_handler.cc',
- 'browser/loader/throttling_resource_handler.h',
- 'browser/loader/upload_data_stream_builder.cc',
- 'browser/loader/upload_data_stream_builder.h',
- 'browser/mach_broker_mac.h',
- 'browser/mach_broker_mac.mm',
- 'browser/media/android/browser_demuxer_android.cc',
- 'browser/media/android/browser_demuxer_android.h',
- 'browser/media/android/browser_media_player_manager.cc',
- 'browser/media/android/browser_media_player_manager.h',
- 'browser/media/android/media_drm_credential_manager.cc',
- 'browser/media/android/media_drm_credential_manager.h',
- 'browser/media/android/media_resource_getter_impl.cc',
- 'browser/media/android/media_resource_getter_impl.h',
- 'browser/media/capture/audio_mirroring_manager.cc',
- 'browser/media/capture/audio_mirroring_manager.h',
- 'browser/media/capture/content_video_capture_device_core.cc',
- 'browser/media/capture/content_video_capture_device_core.h',
- 'browser/media/capture/video_capture_oracle.cc',
- 'browser/media/capture/video_capture_oracle.h',
- 'browser/media/capture/web_contents_audio_input_stream.cc',
- 'browser/media/capture/web_contents_audio_input_stream.h',
- 'browser/media/capture/web_contents_capture_util.cc',
- 'browser/media/capture/web_contents_capture_util.h',
- 'browser/media/capture/web_contents_tracker.cc',
- 'browser/media/capture/web_contents_tracker.h',
- 'browser/media/capture/web_contents_video_capture_device.cc',
- 'browser/media/capture/web_contents_video_capture_device.h',
- 'browser/media/media_internals.cc',
- 'browser/media/media_internals.h',
- 'browser/media/media_internals_handler.cc',
- 'browser/media/media_internals_handler.h',
- 'browser/media/media_internals_proxy.cc',
- 'browser/media/media_internals_proxy.h',
- 'browser/media/media_internals_ui.cc',
- 'browser/media/media_internals_ui.h',
- 'browser/media/webrtc_identity_store.cc',
- 'browser/media/webrtc_identity_store.h',
- 'browser/media/webrtc_identity_store_backend.cc',
- 'browser/media/webrtc_identity_store_backend.h',
- 'browser/media/webrtc_internals.cc',
- 'browser/media/webrtc_internals.h',
- 'browser/media/webrtc_internals_message_handler.cc',
- 'browser/media/webrtc_internals_message_handler.h',
- 'browser/media/webrtc_internals_ui.cc',
- 'browser/media/webrtc_internals_ui.h',
- 'browser/media/webrtc_internals_ui_observer.h',
- 'browser/message_port_message_filter.cc',
- 'browser/message_port_message_filter.h',
- 'browser/message_port_service.cc',
- 'browser/message_port_service.h',
- 'browser/mime_registry_message_filter.cc',
- 'browser/mime_registry_message_filter.h',
- 'browser/mojo/mojo_application_host.cc',
- 'browser/mojo/mojo_application_host.h',
- 'browser/net/browser_online_state_observer.cc',
- 'browser/net/browser_online_state_observer.h',
- 'browser/net/sqlite_persistent_cookie_store.cc',
- 'browser/net/sqlite_persistent_cookie_store.h',
- 'browser/net/view_blob_internals_job_factory.cc',
- 'browser/net/view_blob_internals_job_factory.h',
- 'browser/net/view_http_cache_job_factory.cc',
- 'browser/net/view_http_cache_job_factory.h',
- 'browser/notification_service_impl.cc',
- 'browser/notification_service_impl.h',
- 'browser/pepper_flash_settings_helper_impl.cc',
- 'browser/pepper_flash_settings_helper_impl.h',
- 'browser/plugin_data_remover_impl.cc',
- 'browser/plugin_data_remover_impl.h',
- 'browser/plugin_loader_posix.cc',
- 'browser/plugin_loader_posix.h',
- 'browser/plugin_process_host.cc',
- 'browser/plugin_process_host.h',
- 'browser/plugin_process_host_mac.cc',
- 'browser/plugin_service_impl.cc',
- 'browser/plugin_service_impl.h',
- 'browser/power_monitor_message_broadcaster.cc',
- 'browser/power_monitor_message_broadcaster.h',
- 'browser/power_profiler/power_data_provider.h',
- 'browser/power_profiler/power_event.cc',
- 'browser/power_profiler/power_event.h',
- 'browser/power_profiler/power_profiler_observer.h',
- 'browser/power_profiler/power_profiler_service.cc',
- 'browser/power_profiler/power_profiler_service.h',
- 'browser/power_save_blocker_android.cc',
- 'browser/power_save_blocker_android.h',
- 'browser/power_save_blocker_chromeos.cc',
- 'browser/power_save_blocker_impl.cc',
- 'browser/power_save_blocker_impl.h',
- 'browser/power_save_blocker_mac.cc',
- 'browser/power_save_blocker_ozone.cc',
- 'browser/power_save_blocker_win.cc',
- 'browser/power_save_blocker_x11.cc',
- 'browser/ppapi_plugin_process_host.cc',
- 'browser/ppapi_plugin_process_host.h',
- 'browser/profiler_controller_impl.cc',
- 'browser/profiler_controller_impl.h',
- 'browser/profiler_message_filter.cc',
- 'browser/profiler_message_filter.h',
- 'browser/push_messaging_message_filter.cc',
- 'browser/push_messaging_message_filter.h',
- 'browser/quota_dispatcher_host.cc',
- 'browser/quota_dispatcher_host.h',
- 'browser/renderer_data_memoizing_store.h',
- 'browser/renderer_host/clipboard_message_filter.cc',
- 'browser/renderer_host/clipboard_message_filter.h',
- 'browser/renderer_host/clipboard_message_filter_mac.mm',
- 'browser/renderer_host/compositing_iosurface_context_mac.h',
- 'browser/renderer_host/compositing_iosurface_context_mac.mm',
- 'browser/renderer_host/compositing_iosurface_layer_mac.h',
- 'browser/renderer_host/compositing_iosurface_layer_mac.mm',
- 'browser/renderer_host/compositing_iosurface_mac.h',
- 'browser/renderer_host/compositing_iosurface_mac.mm',
- 'browser/renderer_host/compositing_iosurface_shader_programs_mac.cc',
- 'browser/renderer_host/compositing_iosurface_shader_programs_mac.h',
- 'browser/renderer_host/compositing_iosurface_transformer_mac.cc',
- 'browser/renderer_host/compositing_iosurface_transformer_mac.h',
- 'browser/renderer_host/compositor_impl_android.cc',
- 'browser/renderer_host/compositor_impl_android.h',
- 'browser/renderer_host/compositor_resize_lock_aura.cc',
- 'browser/renderer_host/compositor_resize_lock_aura.h',
- 'browser/renderer_host/database_message_filter.cc',
- 'browser/renderer_host/database_message_filter.h',
- 'browser/renderer_host/delegated_frame_evictor.cc',
- 'browser/renderer_host/delegated_frame_evictor.h',
- 'browser/renderer_host/dip_util.cc',
- 'browser/renderer_host/dip_util.h',
- 'browser/renderer_host/display_link_mac.h',
- 'browser/renderer_host/display_link_mac.cc',
- 'browser/renderer_host/event_with_latency_info.h',
- 'browser/renderer_host/file_utilities_message_filter.cc',
- 'browser/renderer_host/file_utilities_message_filter.h',
- 'browser/renderer_host/gamepad_browser_message_filter.cc',
- 'browser/renderer_host/gamepad_browser_message_filter.h',
- 'browser/renderer_host/gpu_message_filter.cc',
- 'browser/renderer_host/gpu_message_filter.h',
- 'browser/renderer_host/image_transport_factory_android.cc',
- 'browser/renderer_host/image_transport_factory_android.h',
- 'browser/renderer_host/ime_adapter_android.cc',
- 'browser/renderer_host/ime_adapter_android.h',
- 'browser/renderer_host/input/gesture_event_queue.cc',
- 'browser/renderer_host/input/gesture_event_queue.h',
- 'browser/renderer_host/input/input_ack_handler.h',
- 'browser/renderer_host/input/input_router.h',
- 'browser/renderer_host/input/input_router_client.h',
- 'browser/renderer_host/input/input_router_impl.cc',
- 'browser/renderer_host/input/input_router_impl.h',
- 'browser/renderer_host/input/input_router_config_helper.cc',
- 'browser/renderer_host/input/input_router_config_helper.h',
- 'browser/renderer_host/input/motion_event_android.cc',
- 'browser/renderer_host/input/motion_event_android.h',
- 'browser/renderer_host/input/motion_event_web.cc',
- 'browser/renderer_host/input/motion_event_web.h',
- 'browser/renderer_host/input/synthetic_gesture.cc',
- 'browser/renderer_host/input/synthetic_gesture.h',
- 'browser/renderer_host/input/synthetic_gesture_controller.cc',
- 'browser/renderer_host/input/synthetic_gesture_controller.h',
- 'browser/renderer_host/input/synthetic_gesture_target.h',
- 'browser/renderer_host/input/synthetic_gesture_target_android.cc',
- 'browser/renderer_host/input/synthetic_gesture_target_android.h',
- 'browser/renderer_host/input/synthetic_gesture_target_aura.cc',
- 'browser/renderer_host/input/synthetic_gesture_target_aura.h',
- 'browser/renderer_host/input/synthetic_gesture_target_base.cc',
- 'browser/renderer_host/input/synthetic_gesture_target_base.h',
- 'browser/renderer_host/input/synthetic_pinch_gesture.cc',
- 'browser/renderer_host/input/synthetic_pinch_gesture.h',
- 'browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc',
- 'browser/renderer_host/input/synthetic_smooth_scroll_gesture.h',
- 'browser/renderer_host/input/synthetic_tap_gesture.cc',
- 'browser/renderer_host/input/synthetic_tap_gesture.h',
- 'browser/renderer_host/input/tap_suppression_controller.cc',
- 'browser/renderer_host/input/tap_suppression_controller.h',
- 'browser/renderer_host/input/tap_suppression_controller_client.h',
- 'browser/renderer_host/input/timeout_monitor.cc',
- 'browser/renderer_host/input/timeout_monitor.h',
- 'browser/renderer_host/input/touch_emulator.cc',
- 'browser/renderer_host/input/touch_emulator.h',
- 'browser/renderer_host/input/touch_emulator_client.h',
- 'browser/renderer_host/input/touch_event_queue.cc',
- 'browser/renderer_host/input/touch_event_queue.h',
- 'browser/renderer_host/input/touch_action_filter.cc',
- 'browser/renderer_host/input/touch_action_filter.h',
- 'browser/renderer_host/input/touchpad_tap_suppression_controller.cc',
- 'browser/renderer_host/input/touchpad_tap_suppression_controller.h',
- 'browser/renderer_host/input/touchscreen_tap_suppression_controller.cc',
- 'browser/renderer_host/input/touchscreen_tap_suppression_controller.h',
- 'browser/renderer_host/input/web_input_event_builders_android.cc',
- 'browser/renderer_host/input/web_input_event_builders_android.h',
- 'browser/renderer_host/input/web_input_event_builders_win.cc',
- 'browser/renderer_host/input/web_input_event_builders_win.h',
- 'browser/renderer_host/input/web_input_event_util.cc',
- 'browser/renderer_host/input/web_input_event_util.h',
- 'browser/renderer_host/input/web_input_event_util_posix.cc',
- 'browser/renderer_host/input/web_input_event_util_posix.h',
- 'browser/renderer_host/java/java_bound_object.cc',
- 'browser/renderer_host/java/java_bound_object.h',
- 'browser/renderer_host/java/java_bridge_channel_host.cc',
- 'browser/renderer_host/java/java_bridge_channel_host.h',
- 'browser/renderer_host/java/java_bridge_dispatcher_host.cc',
- 'browser/renderer_host/java/java_bridge_dispatcher_host.h',
- 'browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc',
- 'browser/renderer_host/java/java_bridge_dispatcher_host_manager.h',
- 'browser/renderer_host/java/java_method.cc',
- 'browser/renderer_host/java/java_method.h',
- 'browser/renderer_host/java/java_type.cc',
- 'browser/renderer_host/java/java_type.h',
- 'browser/renderer_host/java/jni_helper.cc',
- 'browser/renderer_host/java/jni_helper.h',
- 'browser/renderer_host/legacy_render_widget_host_win.cc',
- 'browser/renderer_host/legacy_render_widget_host_win.h',
- 'browser/renderer_host/media/audio_input_device_manager.cc',
- 'browser/renderer_host/media/audio_input_device_manager.h',
- 'browser/renderer_host/media/audio_input_renderer_host.cc',
- 'browser/renderer_host/media/audio_input_renderer_host.h',
- 'browser/renderer_host/media/audio_input_sync_writer.cc',
- 'browser/renderer_host/media/audio_input_sync_writer.h',
- 'browser/renderer_host/media/audio_renderer_host.cc',
- 'browser/renderer_host/media/audio_renderer_host.h',
- 'browser/renderer_host/media/audio_sync_reader.cc',
- 'browser/renderer_host/media/audio_sync_reader.h',
- 'browser/renderer_host/media/device_request_message_filter.cc',
- 'browser/renderer_host/media/device_request_message_filter.h',
- 'browser/renderer_host/media/media_capture_devices_impl.cc',
- 'browser/renderer_host/media/media_capture_devices_impl.h',
- 'browser/renderer_host/media/media_stream_dispatcher_host.cc',
- 'browser/renderer_host/media/media_stream_dispatcher_host.h',
- 'browser/renderer_host/media/media_stream_manager.cc',
- 'browser/renderer_host/media/media_stream_manager.h',
- 'browser/renderer_host/media/media_stream_provider.h',
- 'browser/renderer_host/media/media_stream_requester.h',
- 'browser/renderer_host/media/media_stream_track_metrics_host.cc',
- 'browser/renderer_host/media/media_stream_track_metrics_host.h',
- 'browser/renderer_host/media/media_stream_ui_proxy.cc',
- 'browser/renderer_host/media/media_stream_ui_proxy.h',
- 'browser/renderer_host/media/midi_dispatcher_host.cc',
- 'browser/renderer_host/media/midi_dispatcher_host.h',
- 'browser/renderer_host/media/midi_host.cc',
- 'browser/renderer_host/media/midi_host.h',
- 'browser/renderer_host/media/video_capture_buffer_pool.cc',
- 'browser/renderer_host/media/video_capture_buffer_pool.h',
- 'browser/renderer_host/media/video_capture_controller.cc',
- 'browser/renderer_host/media/video_capture_controller.h',
- 'browser/renderer_host/media/video_capture_controller_event_handler.cc',
- 'browser/renderer_host/media/video_capture_controller_event_handler.h',
- 'browser/renderer_host/media/video_capture_host.cc',
- 'browser/renderer_host/media/video_capture_host.h',
- 'browser/renderer_host/media/video_capture_manager.cc',
- 'browser/renderer_host/media/video_capture_manager.h',
- 'browser/renderer_host/memory_benchmark_message_filter.cc',
- 'browser/renderer_host/memory_benchmark_message_filter.h',
- 'browser/renderer_host/native_web_keyboard_event.cc',
- 'browser/renderer_host/native_web_keyboard_event_android.cc',
- 'browser/renderer_host/native_web_keyboard_event_aura.cc',
- 'browser/renderer_host/native_web_keyboard_event_mac.mm',
- 'browser/renderer_host/overscroll_configuration.cc',
- 'browser/renderer_host/overscroll_controller.cc',
- 'browser/renderer_host/overscroll_controller.h',
- 'browser/renderer_host/overscroll_controller_delegate.h',
- 'browser/renderer_host/pepper/browser_ppapi_host_impl.cc',
- 'browser/renderer_host/pepper/browser_ppapi_host_impl.h',
- 'browser/renderer_host/pepper/content_browser_pepper_host_factory.cc',
- 'browser/renderer_host/pepper/content_browser_pepper_host_factory.h',
- 'browser/renderer_host/pepper/pepper_browser_font_singleton_host.cc',
- 'browser/renderer_host/pepper/pepper_browser_font_singleton_host.h',
- 'browser/renderer_host/pepper/pepper_external_file_ref_backend.cc',
- 'browser/renderer_host/pepper/pepper_external_file_ref_backend.h',
- 'browser/renderer_host/pepper/pepper_file_io_host.cc',
- 'browser/renderer_host/pepper/pepper_file_io_host.h',
- 'browser/renderer_host/pepper/pepper_file_ref_host.cc',
- 'browser/renderer_host/pepper/pepper_file_ref_host.h',
- 'browser/renderer_host/pepper/pepper_file_system_browser_host.cc',
- 'browser/renderer_host/pepper/pepper_file_system_browser_host.h',
- 'browser/renderer_host/pepper/pepper_flash_file_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_flash_file_message_filter.h',
- 'browser/renderer_host/pepper/pepper_gamepad_host.cc',
- 'browser/renderer_host/pepper/pepper_gamepad_host.h',
- 'browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_host_resolver_message_filter.h',
- 'browser/renderer_host/pepper/pepper_internal_file_ref_backend.cc',
- 'browser/renderer_host/pepper/pepper_internal_file_ref_backend.h',
- 'browser/renderer_host/pepper/pepper_lookup_request.h',
- 'browser/renderer_host/pepper/pepper_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_message_filter.h',
- 'browser/renderer_host/pepper/pepper_network_monitor_host.cc',
- 'browser/renderer_host/pepper/pepper_network_monitor_host.h',
- 'browser/renderer_host/pepper/pepper_network_proxy_host.cc',
- 'browser/renderer_host/pepper/pepper_network_proxy_host.h',
- 'browser/renderer_host/pepper/pepper_print_settings_manager.cc',
- 'browser/renderer_host/pepper/pepper_print_settings_manager.h',
- 'browser/renderer_host/pepper/pepper_printing_host.cc',
- 'browser/renderer_host/pepper/pepper_printing_host.h',
- 'browser/renderer_host/pepper/pepper_renderer_connection.cc',
- 'browser/renderer_host/pepper/pepper_renderer_connection.h',
- 'browser/renderer_host/pepper/pepper_security_helper.cc',
- 'browser/renderer_host/pepper/pepper_security_helper.h',
- 'browser/renderer_host/pepper/pepper_socket_utils.cc',
- 'browser/renderer_host/pepper/pepper_socket_utils.h',
- 'browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h',
- 'browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h',
- 'browser/renderer_host/pepper/pepper_truetype_font_list.h',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_android.cc',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_host.cc',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_host.h',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_ozone.cc',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_pango.cc',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm',
- 'browser/renderer_host/pepper/pepper_truetype_font_list_win.cc',
- 'browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc',
- 'browser/renderer_host/pepper/pepper_udp_socket_message_filter.h',
- 'browser/renderer_host/pepper/quota_reservation.cc',
- 'browser/renderer_host/pepper/quota_reservation.h',
- 'browser/renderer_host/pepper/ssl_context_helper.cc',
- 'browser/renderer_host/pepper/ssl_context_helper.h',
- 'browser/renderer_host/popup_menu_helper_mac.h',
- 'browser/renderer_host/popup_menu_helper_mac.mm',
- 'browser/renderer_host/render_message_filter.cc',
- 'browser/renderer_host/render_message_filter.h',
- 'browser/renderer_host/render_process_host_impl.cc',
- 'browser/renderer_host/render_process_host_impl.h',
- 'browser/renderer_host/render_sandbox_host_linux.cc',
- 'browser/renderer_host/render_sandbox_host_linux.h',
- 'browser/renderer_host/render_process_host_impl.h',
- 'browser/renderer_host/render_view_host_delegate.cc',
- 'browser/renderer_host/render_view_host_delegate.h',
- 'browser/renderer_host/render_view_host_delegate_view.h',
- 'browser/renderer_host/render_view_host_factory.cc',
- 'browser/renderer_host/render_view_host_factory.h',
- 'browser/renderer_host/render_view_host_impl.cc',
- 'browser/renderer_host/render_view_host_impl.h',
- 'browser/renderer_host/render_widget_helper.cc',
- 'browser/renderer_host/render_widget_helper.h',
- 'browser/renderer_host/render_widget_host_delegate.cc',
- 'browser/renderer_host/render_widget_host_delegate.h',
- 'browser/renderer_host/render_widget_host_impl.cc',
- 'browser/renderer_host/render_widget_host_impl.h',
- 'browser/renderer_host/render_widget_host_view_android.cc',
- 'browser/renderer_host/render_widget_host_view_android.h',
- 'browser/renderer_host/render_widget_host_view_aura.cc',
- 'browser/renderer_host/render_widget_host_view_aura.h',
- 'browser/renderer_host/render_widget_host_view_base.cc',
- 'browser/renderer_host/render_widget_host_view_base.h',
- 'browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h',
- 'browser/renderer_host/render_widget_host_view_mac_dictionary_helper.mm',
- 'browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h',
- 'browser/renderer_host/render_widget_host_view_mac_editcommand_helper.mm',
- 'browser/renderer_host/render_widget_host_view_mac.h',
- 'browser/renderer_host/render_widget_host_view_mac.mm',
- 'browser/renderer_host/renderer_frame_manager.cc',
- 'browser/renderer_host/renderer_frame_manager.h',
- 'browser/renderer_host/sandbox_ipc_linux.cc',
- 'browser/renderer_host/sandbox_ipc_linux.h',
- 'browser/renderer_host/software_frame_manager.cc',
- 'browser/renderer_host/software_frame_manager.h',
- 'browser/renderer_host/socket_stream_dispatcher_host.cc',
- 'browser/renderer_host/socket_stream_dispatcher_host.h',
- 'browser/renderer_host/socket_stream_host.cc',
- 'browser/renderer_host/socket_stream_host.h',
- 'browser/renderer_host/text_input_client_mac.h',
- 'browser/renderer_host/text_input_client_mac.mm',
- 'browser/renderer_host/text_input_client_message_filter.h',
- 'browser/renderer_host/text_input_client_message_filter.mm',
- 'browser/renderer_host/ui_events_helper.cc',
- 'browser/renderer_host/ui_events_helper.h',
- 'browser/renderer_host/web_input_event_aura.cc',
- 'browser/renderer_host/web_input_event_aura.h',
- 'browser/renderer_host/web_input_event_aurawin.cc',
- 'browser/renderer_host/web_input_event_aurax11.cc',
- 'browser/renderer_host/webmenurunner_mac.h',
- 'browser/renderer_host/webmenurunner_mac.mm',
- 'browser/renderer_host/websocket_dispatcher_host.cc',
- 'browser/renderer_host/websocket_dispatcher_host.h',
- 'browser/renderer_host/websocket_host.cc',
- 'browser/renderer_host/websocket_host.h',
- 'browser/resolve_proxy_msg_helper.cc',
- 'browser/resolve_proxy_msg_helper.h',
- 'browser/resource_context_impl.cc',
- 'browser/resource_context_impl.h',
- 'browser/safe_util_win.cc',
- 'browser/safe_util_win.h',
- 'browser/screen_orientation/screen_orientation_dispatcher_host.cc',
- 'browser/screen_orientation/screen_orientation_dispatcher_host.h',
- 'browser/screen_orientation/screen_orientation_provider.h',
- 'browser/screen_orientation/screen_orientation_provider_android.h',
- 'browser/screen_orientation/screen_orientation_provider_android.cc',
- 'browser/service_worker/embedded_worker_instance.cc',
- 'browser/service_worker/embedded_worker_instance.h',
- 'browser/service_worker/embedded_worker_registry.cc',
- 'browser/service_worker/embedded_worker_registry.h',
- 'browser/service_worker/service_worker_context_core.cc',
- 'browser/service_worker/service_worker_context_core.h',
- 'browser/service_worker/service_worker_context_observer.h',
- 'browser/service_worker/service_worker_context_request_handler.cc',
- 'browser/service_worker/service_worker_context_request_handler.h',
- 'browser/service_worker/service_worker_context_wrapper.cc',
- 'browser/service_worker/service_worker_context_wrapper.h',
- 'browser/service_worker/service_worker_controllee_request_handler.cc',
- 'browser/service_worker/service_worker_controllee_request_handler.h',
- 'browser/service_worker/service_worker_database.cc',
- 'browser/service_worker/service_worker_database.h',
- 'browser/service_worker/service_worker_disk_cache.cc',
- 'browser/service_worker/service_worker_disk_cache.h',
- 'browser/service_worker/service_worker_dispatcher_host.cc',
- 'browser/service_worker/service_worker_dispatcher_host.h',
- 'browser/service_worker/service_worker_fetch_dispatcher.cc',
- 'browser/service_worker/service_worker_fetch_dispatcher.h',
- 'browser/service_worker/service_worker_handle.cc',
- 'browser/service_worker/service_worker_handle.h',
- 'browser/service_worker/service_worker_info.cc',
- 'browser/service_worker/service_worker_info.h',
- 'browser/service_worker/service_worker_internals_ui.cc',
- 'browser/service_worker/service_worker_internals_ui.h',
- 'browser/service_worker/service_worker_job_coordinator.cc',
- 'browser/service_worker/service_worker_job_coordinator.h',
- 'browser/service_worker/service_worker_process_manager.cc',
- 'browser/service_worker/service_worker_process_manager.h',
- 'browser/service_worker/service_worker_provider_host.cc',
- 'browser/service_worker/service_worker_provider_host.h',
- 'browser/service_worker/service_worker_read_from_cache_job.cc',
- 'browser/service_worker/service_worker_read_from_cache_job.h',
- 'browser/service_worker/service_worker_register_job_base.h',
- 'browser/service_worker/service_worker_register_job.cc',
- 'browser/service_worker/service_worker_register_job.h',
- 'browser/service_worker/service_worker_registration.cc',
- 'browser/service_worker/service_worker_registration.h',
- 'browser/service_worker/service_worker_registration_status.cc',
- 'browser/service_worker/service_worker_registration_status.h',
- 'browser/service_worker/service_worker_request_handler.cc',
- 'browser/service_worker/service_worker_request_handler.h',
- 'browser/service_worker/service_worker_storage.cc',
- 'browser/service_worker/service_worker_storage.h',
- 'browser/service_worker/service_worker_unregister_job.cc',
- 'browser/service_worker/service_worker_unregister_job.h',
- 'browser/service_worker/service_worker_url_request_job.cc',
- 'browser/service_worker/service_worker_url_request_job.h',
- 'browser/service_worker/service_worker_utils.cc',
- 'browser/service_worker/service_worker_utils.h',
- 'browser/service_worker/service_worker_version.cc',
- 'browser/service_worker/service_worker_version.h',
- 'browser/shared_worker/shared_worker_host.cc',
- 'browser/shared_worker/shared_worker_host.h',
- 'browser/shared_worker/shared_worker_instance.cc',
- 'browser/shared_worker/shared_worker_instance.h',
- 'browser/shared_worker/shared_worker_message_filter.cc',
- 'browser/shared_worker/shared_worker_message_filter.h',
- 'browser/shared_worker/shared_worker_service_impl.cc',
- 'browser/shared_worker/shared_worker_service_impl.h',
- 'browser/signed_certificate_timestamp_store_impl.cc',
- 'browser/signed_certificate_timestamp_store_impl.h',
- 'browser/site_instance_impl.cc',
- 'browser/site_instance_impl.h',
- 'browser/speech/audio_buffer.cc',
- 'browser/speech/audio_buffer.h',
- 'browser/speech/audio_encoder.cc',
- 'browser/speech/audio_encoder.h',
- 'browser/speech/chunked_byte_buffer.cc',
- 'browser/speech/chunked_byte_buffer.h',
- 'browser/speech/endpointer/endpointer.cc',
- 'browser/speech/endpointer/endpointer.h',
- 'browser/speech/endpointer/energy_endpointer.cc',
- 'browser/speech/endpointer/energy_endpointer.h',
- 'browser/speech/endpointer/energy_endpointer_params.cc',
- 'browser/speech/endpointer/energy_endpointer_params.h',
- 'browser/speech/google_one_shot_remote_engine.cc',
- 'browser/speech/google_one_shot_remote_engine.h',
- 'browser/speech/google_streaming_remote_engine.cc',
- 'browser/speech/google_streaming_remote_engine.h',
- 'browser/speech/speech_recognition_dispatcher_host.cc',
- 'browser/speech/speech_recognition_dispatcher_host.h',
- 'browser/speech/speech_recognition_engine.cc',
- 'browser/speech/speech_recognition_engine.h',
- 'browser/speech/speech_recognition_manager_impl.cc',
- 'browser/speech/speech_recognition_manager_impl.h',
- 'browser/speech/speech_recognizer.h',
- 'browser/speech/speech_recognizer_impl.cc',
- 'browser/speech/speech_recognizer_impl.h',
- 'browser/speech/speech_recognizer_impl_android.cc',
- 'browser/speech/speech_recognizer_impl_android.h',
- 'browser/ssl/ssl_cert_error_handler.cc',
- 'browser/ssl/ssl_cert_error_handler.h',
- 'browser/ssl/ssl_client_auth_handler.cc',
- 'browser/ssl/ssl_client_auth_handler.h',
- 'browser/ssl/ssl_error_handler.cc',
- 'browser/ssl/ssl_error_handler.h',
- 'browser/ssl/ssl_host_state.cc',
- 'browser/ssl/ssl_host_state.h',
- 'browser/ssl/ssl_manager.cc',
- 'browser/ssl/ssl_manager.h',
- 'browser/ssl/ssl_policy_backend.cc',
- 'browser/ssl/ssl_policy_backend.h',
- 'browser/ssl/ssl_policy.cc',
- 'browser/ssl/ssl_policy.h',
- 'browser/ssl/ssl_request_info.cc',
- 'browser/ssl/ssl_request_info.h',
- 'browser/startup_task_runner.cc',
- 'browser/startup_task_runner.h',
- 'browser/streams/stream.cc',
- 'browser/streams/stream.h',
- 'browser/streams/stream_context.cc',
- 'browser/streams/stream_handle_impl.cc',
- 'browser/streams/stream_handle_impl.h',
- 'browser/streams/stream_context.h',
- 'browser/streams/stream_read_observer.h',
- 'browser/streams/stream_registry.cc',
- 'browser/streams/stream_registry.h',
- 'browser/streams/stream_url_request_job.cc',
- 'browser/streams/stream_url_request_job.h',
- 'browser/streams/stream_write_observer.h',
- 'browser/storage_partition_impl.cc',
- 'browser/storage_partition_impl.h',
- 'browser/storage_partition_impl_map.cc',
- 'browser/storage_partition_impl_map.h',
- 'browser/system_message_window_win.cc',
- 'browser/system_message_window_win.h',
- 'browser/tcmalloc_internals_request_job.cc',
- 'browser/tcmalloc_internals_request_job.h',
- 'browser/time_zone_monitor.cc',
- 'browser/time_zone_monitor.h',
- 'browser/time_zone_monitor_android.cc',
- 'browser/time_zone_monitor_android.h',
- 'browser/time_zone_monitor_chromeos.cc',
- 'browser/time_zone_monitor_linux.cc',
- 'browser/time_zone_monitor_mac.mm',
- 'browser/time_zone_monitor_win.cc',
- 'browser/theme_helper_mac.mm',
- 'browser/theme_helper_mac.h',
- 'browser/tracing/trace_message_filter.cc',
- 'browser/tracing/trace_message_filter.h',
- 'browser/tracing/etw_system_event_consumer_win.cc',
- 'browser/tracing/etw_system_event_consumer_win.h',
- 'browser/tracing/tracing_controller_impl.cc',
- 'browser/tracing/tracing_controller_impl.h',
- 'browser/tracing/tracing_ui.cc',
- 'browser/tracing/tracing_ui.h',
- 'browser/udev_linux.cc',
- 'browser/udev_linux.h',
- 'browser/user_metrics.cc',
- 'browser/utility_process_host_impl.cc',
- 'browser/utility_process_host_impl.h',
- 'browser/vibration/vibration_message_filter.cc',
- 'browser/vibration/vibration_message_filter.h',
- 'browser/vibration/vibration_provider_android.cc',
- 'browser/vibration/vibration_provider_android.h',
- 'browser/web_contents/aura/gesture_nav_simple.cc',
- 'browser/web_contents/aura/gesture_nav_simple.h',
- 'browser/web_contents/aura/image_window_delegate.cc',
- 'browser/web_contents/aura/image_window_delegate.h',
- 'browser/web_contents/aura/overscroll_navigation_overlay.cc',
- 'browser/web_contents/aura/overscroll_navigation_overlay.h',
- 'browser/web_contents/aura/shadow_layer_delegate.cc',
- 'browser/web_contents/aura/shadow_layer_delegate.h',
- 'browser/web_contents/aura/window_slider.cc',
- 'browser/web_contents/aura/window_slider.h',
- 'browser/web_contents/touch_editable_impl_aura.cc',
- 'browser/web_contents/touch_editable_impl_aura.h',
- 'browser/web_contents/web_contents_android.cc',
- 'browser/web_contents/web_contents_android.h',
- 'browser/web_contents/web_contents_impl.cc',
- 'browser/web_contents/web_contents_impl.h',
- 'browser/web_contents/web_contents_view.h',
- 'browser/web_contents/web_contents_view_android.cc',
- 'browser/web_contents/web_contents_view_android.h',
- 'browser/web_contents/web_contents_view_aura.cc',
- 'browser/web_contents/web_contents_view_aura.h',
- 'browser/web_contents/web_contents_view_guest.cc',
- 'browser/web_contents/web_contents_view_guest.h',
- 'browser/web_contents/web_contents_view_mac.h',
- 'browser/web_contents/web_contents_view_mac.mm',
- 'browser/web_contents/web_drag_dest_mac.h',
- 'browser/web_contents/web_drag_dest_mac.mm',
- 'browser/web_contents/web_drag_source_mac.h',
- 'browser/web_contents/web_drag_source_mac.mm',
- 'browser/web_contents/web_drag_utils_win.cc',
- 'browser/web_contents/web_drag_utils_win.h',
- 'browser/webui/content_web_ui_controller_factory.cc',
- 'browser/webui/content_web_ui_controller_factory.h',
- 'browser/webui/generic_handler.cc',
- 'browser/webui/generic_handler.h',
- 'browser/webui/shared_resources_data_source.cc',
- 'browser/webui/shared_resources_data_source.h',
- 'browser/webui/url_data_manager.cc',
- 'browser/webui/url_data_manager.h',
- 'browser/webui/url_data_manager_backend.cc',
- 'browser/webui/url_data_manager_backend.h',
- 'browser/webui/url_data_source_impl.cc',
- 'browser/webui/url_data_source_impl.h',
- 'browser/webui/web_ui_data_source_impl.cc',
- 'browser/webui/web_ui_data_source_impl.h',
- 'browser/webui/web_ui_controller_factory_registry.cc',
- 'browser/webui/web_ui_controller_factory_registry.h',
- 'browser/webui/web_ui_impl.cc',
- 'browser/webui/web_ui_impl.h',
- 'browser/webui/web_ui_message_handler.cc',
- 'browser/worker_host/worker_document_set.cc',
- 'browser/worker_host/worker_document_set.h',
- 'browser/worker_host/worker_message_filter.cc',
- 'browser/worker_host/worker_message_filter.h',
- 'browser/worker_host/worker_process_host.cc',
- 'browser/worker_host/worker_process_host.h',
- 'browser/worker_host/worker_service_impl.cc',
- 'browser/worker_host/worker_service_impl.h',
- 'browser/worker_host/worker_storage_partition.cc',
- 'browser/worker_host/worker_storage_partition.h',
- 'browser/zygote_host/zygote_host_impl_linux.cc',
- 'browser/zygote_host/zygote_host_impl_linux.h',
- 'zygote/zygote_linux.cc',
- 'zygote/zygote_linux.h',
- 'zygote/zygote_main_linux.cc',
- # These files are generated by GRIT.
- '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources.h',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources_map.cc',
- '<(SHARED_INTERMEDIATE_DIR)/webkit/grit/devtools_resources_map.h',
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/tracing/grit/tracing_resources.h',
- '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/grit/webui_resources_map.cc',
- # These files are generated by devtools_protocol_constants_generator.py.
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.cc',
- '<(SHARED_INTERMEDIATE_DIR)/content/browser/devtools/devtools_protocol_constants.h',
+ '<@(public_browser_sources)',
+ '<@(private_browser_sources)',
],
'conditions': [
['toolkit_views==1', {
@@ -1437,7 +1461,7 @@
'../cc/cc.gyp:cc',
'../mojo/mojo.gyp:mojo_cpp_bindings',
'../mojo/mojo.gyp:mojo_js_bindings',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../net/net.gyp:http_server',
'../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
'../ui/surface/surface.gyp:surface',
@@ -1599,6 +1623,7 @@
],
},
'sources/': [
+ ['exclude', '^browser/battery_status/battery_status_manager_default.cc$'],
['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
['exclude', '^browser/geolocation/network_location_provider\\.(cc|h)$'],
['exclude', '^browser/geolocation/network_location_request\\.(cc|h)$'],
@@ -1659,7 +1684,7 @@
['use_aura==1', {
'dependencies': [
'../ui/aura/aura.gyp:aura',
- '../ui/base/strings/ui_strings.gyp:ui_strings',
+ '../ui/strings/ui_strings.gyp:ui_strings',
],
}, {
'sources/': [
diff --git a/content/content_browser.target.darwin-arm.mk b/content/content_browser.target.darwin-arm.mk
index d293c03972..7442aa52ee 100644
--- a/content/content_browser.target.darwin-arm.mk
+++ b/content/content_browser.target.darwin-arm.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -528,7 +531,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -561,12 +571,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -577,10 +592,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +684,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -700,7 +718,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -733,12 +758,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -749,10 +779,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -840,6 +872,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -913,7 +946,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.darwin-arm64.mk b/content/content_browser.target.darwin-arm64.mk
index e489f78206..6bdc72ac82 100644
--- a/content/content_browser.target.darwin-arm64.mk
+++ b/content/content_browser.target.darwin-arm64.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -558,12 +561,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -574,10 +582,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -664,6 +674,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -726,12 +737,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -742,10 +758,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -833,6 +851,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -897,7 +916,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.darwin-mips.mk b/content/content_browser.target.darwin-mips.mk
index 5d440ac103..95a9383ada 100644
--- a/content/content_browser.target.darwin-mips.mk
+++ b/content/content_browser.target.darwin-mips.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -528,6 +531,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -561,12 +565,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -577,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -700,6 +712,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -733,12 +746,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -749,10 +767,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -840,6 +860,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -909,7 +930,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.darwin-x86.mk b/content/content_browser.target.darwin-x86.mk
index d46f759004..a38b08a841 100644
--- a/content/content_browser.target.darwin-x86.mk
+++ b/content/content_browser.target.darwin-x86.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -527,6 +530,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -562,12 +566,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -577,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -698,6 +710,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -733,12 +746,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -748,10 +766,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -839,6 +859,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -907,7 +928,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.darwin-x86_64.mk b/content/content_browser.target.darwin-x86_64.mk
index 7d54bfca7c..8cabc176ba 100644
--- a/content/content_browser.target.darwin-x86_64.mk
+++ b/content/content_browser.target.darwin-x86_64.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -562,12 +565,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -578,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -668,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -734,12 +745,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -750,10 +766,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -841,6 +859,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -909,7 +928,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.linux-arm.mk b/content/content_browser.target.linux-arm.mk
index d293c03972..7442aa52ee 100644
--- a/content/content_browser.target.linux-arm.mk
+++ b/content/content_browser.target.linux-arm.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -528,7 +531,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -561,12 +571,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -577,10 +592,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +684,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -700,7 +718,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -733,12 +758,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -749,10 +779,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -840,6 +872,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -913,7 +946,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.linux-arm64.mk b/content/content_browser.target.linux-arm64.mk
index e489f78206..6bdc72ac82 100644
--- a/content/content_browser.target.linux-arm64.mk
+++ b/content/content_browser.target.linux-arm64.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -558,12 +561,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -574,10 +582,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -664,6 +674,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -726,12 +737,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -742,10 +758,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -833,6 +851,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -897,7 +916,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.linux-mips.mk b/content/content_browser.target.linux-mips.mk
index 5d440ac103..95a9383ada 100644
--- a/content/content_browser.target.linux-mips.mk
+++ b/content/content_browser.target.linux-mips.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -528,6 +531,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -561,12 +565,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -577,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -700,6 +712,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -733,12 +746,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -749,10 +767,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -840,6 +860,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -909,7 +930,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.linux-x86.mk b/content/content_browser.target.linux-x86.mk
index d46f759004..a38b08a841 100644
--- a/content/content_browser.target.linux-x86.mk
+++ b/content/content_browser.target.linux-x86.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -527,6 +530,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -562,12 +566,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -577,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -667,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -698,6 +710,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -733,12 +746,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -748,10 +766,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -839,6 +859,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -907,7 +928,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_browser.target.linux-x86_64.mk b/content/content_browser.target.linux-x86_64.mk
index 7d54bfca7c..8cabc176ba 100644
--- a/content/content_browser.target.linux-x86_64.mk
+++ b/content/content_browser.target.linux-x86_64.mk
@@ -24,7 +24,7 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_browser_speech_proto_speech_proto_gyp,,,$(GYP_VAR_PREFIX))/content_browser_speech_proto_speech_proto_gyp.a \
$(call intermediates-dir-for,GYP,content_browser_devtools_devtools_resources_gyp,,,$(GYP_VAR_PREFIX))/devtools_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,webkit_webkit_resources_gyp,,,$(GYP_VAR_PREFIX))/webkit_resources.stamp \
$(call intermediates-dir-for,GYP,webkit_webkit_strings_gyp,,,$(GYP_VAR_PREFIX))/webkit_strings.stamp \
$(call intermediates-dir-for,GYP,third_party_angle_src_commit_id_gyp,,,$(GYP_VAR_PREFIX))/commit_id.stamp \
@@ -63,7 +63,7 @@ LOCAL_SRC_FILES := \
content/public/browser/browser_main_parts.cc \
content/public/browser/browser_message_filter.cc \
content/public/browser/browser_plugin_guest_delegate.cc \
- content/public/browser/browser_plugin_guest_manager_delegate.cc \
+ content/public/browser/browser_plugin_guest_manager.cc \
content/public/browser/content_browser_client.cc \
content/public/browser/desktop_media_id.cc \
content/public/browser/download_manager_delegate.cc \
@@ -127,6 +127,8 @@ LOCAL_SRC_FILES := \
content/browser/appcache/chrome_appcache_service.cc \
content/browser/appcache/view_appcache_internals_job.cc \
content/browser/battery_status/battery_status_manager_android.cc \
+ content/browser/battery_status/battery_status_message_filter.cc \
+ content/browser/battery_status/battery_status_service.cc \
content/browser/browser_child_process_host_impl.cc \
content/browser/browser_context.cc \
content/browser/browser_main.cc \
@@ -134,7 +136,6 @@ LOCAL_SRC_FILES := \
content/browser/browser_main_runner.cc \
content/browser/browser_plugin/browser_plugin_embedder.cc \
content/browser/browser_plugin/browser_plugin_guest.cc \
- content/browser/browser_plugin/browser_plugin_guest_manager.cc \
content/browser/browser_plugin/browser_plugin_message_filter.cc \
content/browser/browser_process_sub_thread.cc \
content/browser/browser_shutdown_profile_dumper.cc \
@@ -148,7 +149,6 @@ LOCAL_SRC_FILES := \
content/browser/cross_site_request_manager.cc \
content/browser/devtools/devtools_agent_host_impl.cc \
content/browser/devtools/devtools_browser_target.cc \
- content/browser/devtools/devtools_external_agent_proxy_impl.cc \
content/browser/devtools/devtools_frontend_host.cc \
content/browser/devtools/devtools_http_handler_impl.cc \
content/browser/devtools/devtools_manager_impl.cc \
@@ -157,6 +157,7 @@ LOCAL_SRC_FILES := \
content/browser/devtools/devtools_protocol.cc \
content/browser/devtools/devtools_system_info_handler.cc \
content/browser/devtools/devtools_tracing_handler.cc \
+ content/browser/devtools/forwarding_agent_host.cc \
content/browser/devtools/ipc_devtools_agent_host.cc \
content/browser/devtools/embedded_worker_devtools_manager.cc \
content/browser/devtools/render_view_devtools_agent_host.cc \
@@ -288,7 +289,6 @@ LOCAL_SRC_FILES := \
content/browser/loader/cross_site_resource_handler.cc \
content/browser/loader/detachable_resource_handler.cc \
content/browser/loader/layered_resource_handler.cc \
- content/browser/loader/offline_policy.cc \
content/browser/loader/power_save_block_resource_throttle.cc \
content/browser/loader/redirect_to_file_resource_handler.cc \
content/browser/loader/resource_buffer.cc \
@@ -309,6 +309,7 @@ LOCAL_SRC_FILES := \
content/browser/media/android/browser_media_player_manager.cc \
content/browser/media/android/media_drm_credential_manager.cc \
content/browser/media/android/media_resource_getter_impl.cc \
+ content/browser/media/android/media_web_contents_observer.cc \
content/browser/media/capture/audio_mirroring_manager.cc \
content/browser/media/capture/content_video_capture_device_core.cc \
content/browser/media/capture/video_capture_oracle.cc \
@@ -445,11 +446,13 @@ LOCAL_SRC_FILES := \
content/browser/service_worker/service_worker_registration.cc \
content/browser/service_worker/service_worker_registration_status.cc \
content/browser/service_worker/service_worker_request_handler.cc \
+ content/browser/service_worker/service_worker_script_cache_map.cc \
content/browser/service_worker/service_worker_storage.cc \
content/browser/service_worker/service_worker_unregister_job.cc \
content/browser/service_worker/service_worker_url_request_job.cc \
content/browser/service_worker/service_worker_utils.cc \
content/browser/service_worker/service_worker_version.cc \
+ content/browser/service_worker/service_worker_write_to_cache_job.cc \
content/browser/shared_worker/shared_worker_host.cc \
content/browser/shared_worker/shared_worker_instance.cc \
content/browser/shared_worker/shared_worker_message_filter.cc \
@@ -562,12 +565,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -578,10 +586,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -668,6 +678,7 @@ LOCAL_C_INCLUDES_Debug := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -734,12 +745,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -750,10 +766,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -841,6 +859,7 @@ LOCAL_C_INCLUDES_Release := \
$(LOCAL_PATH)/third_party/libyuv \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -909,7 +928,7 @@ LOCAL_STATIC_LIBRARIES := \
content_browser_service_worker_database_proto_gyp \
content_browser_speech_proto_speech_proto_gyp \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_child.gypi b/content/content_child.gypi
index e695981e36..a187223f21 100644
--- a/content/content_child.gypi
+++ b/content/content_child.gypi
@@ -7,7 +7,7 @@
'../base/base.gyp:base',
'../components/tracing.gyp:tracing',
'../mojo/mojo.gyp:mojo_environment_chromium',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../skia/skia.gyp:skia',
'../ui/base/ui_base.gyp:ui_base',
'../ui/gfx/gfx.gyp:gfx',
@@ -20,212 +20,220 @@
'export_dependent_settings': [
'../base/base.gyp:base',
],
+ 'variables': {
+ 'public_child_sources': [
+ 'public/child/image_decoder_utils.h',
+ 'public/child/request_peer.h',
+ 'public/child/resource_dispatcher_delegate.h',
+ ],
+ 'private_child_sources': [
+ 'child/appcache/appcache_backend_proxy.cc',
+ 'child/appcache/appcache_backend_proxy.h',
+ 'child/appcache/appcache_dispatcher.cc',
+ 'child/appcache/appcache_dispatcher.h',
+ 'child/appcache/appcache_frontend_impl.cc',
+ 'child/appcache/appcache_frontend_impl.h',
+ 'child/appcache/web_application_cache_host_impl.cc',
+ 'child/appcache/web_application_cache_host_impl.h',
+ 'child/blink_glue.cc',
+ 'child/blink_glue.h',
+ 'child/blink_platform_impl.cc',
+ 'child/blink_platform_impl.h',
+ 'child/browser_font_resource_trusted.cc',
+ 'child/browser_font_resource_trusted.h',
+ 'child/child_histogram_message_filter.cc',
+ 'child/child_histogram_message_filter.h',
+ 'child/child_message_filter.cc',
+ 'child/child_message_filter.h',
+ 'child/child_process.cc',
+ 'child/child_process.h',
+ 'child/child_resource_message_filter.cc',
+ 'child/child_resource_message_filter.h',
+ 'child/child_shared_bitmap_manager.cc',
+ 'child/child_shared_bitmap_manager.h',
+ 'child/child_thread.cc',
+ 'child/child_thread.h',
+ 'child/content_child_helpers.cc',
+ 'child/content_child_helpers.h',
+ 'child/database_util.cc',
+ 'child/database_util.h',
+ 'child/db_message_filter.cc',
+ 'child/db_message_filter.h',
+ 'child/fileapi/file_system_dispatcher.cc',
+ 'child/fileapi/file_system_dispatcher.h',
+ 'child/fileapi/webfilesystem_impl.cc',
+ 'child/fileapi/webfilesystem_impl.h',
+ 'child/fileapi/webfilewriter_base.cc',
+ 'child/fileapi/webfilewriter_base.h',
+ 'child/fileapi/webfilewriter_impl.cc',
+ 'child/fileapi/webfilewriter_impl.h',
+ 'child/fling_animator_impl_android.cc',
+ 'child/fling_animator_impl_android.h',
+ 'child/fling_curve_configuration.cc',
+ 'child/fling_curve_configuration.h',
+ 'child/ftp_directory_listing_response_delegate.cc',
+ 'child/ftp_directory_listing_response_delegate.h',
+ 'child/image_decoder.cc',
+ 'child/image_decoder.h',
+ 'child/indexed_db/indexed_db_dispatcher.cc',
+ 'child/indexed_db/indexed_db_dispatcher.h',
+ 'child/indexed_db/indexed_db_key_builders.cc',
+ 'child/indexed_db/indexed_db_key_builders.h',
+ 'child/indexed_db/indexed_db_message_filter.cc',
+ 'child/indexed_db/indexed_db_message_filter.h',
+ 'child/indexed_db/webidbcursor_impl.cc',
+ 'child/indexed_db/webidbcursor_impl.h',
+ 'child/indexed_db/webidbdatabase_impl.cc',
+ 'child/indexed_db/webidbdatabase_impl.h',
+ 'child/indexed_db/webidbfactory_impl.cc',
+ 'child/indexed_db/webidbfactory_impl.h',
+ 'child/mojo/mojo_application.cc',
+ 'child/mojo/mojo_application.h',
+ 'child/npapi/np_channel_base.cc',
+ 'child/npapi/np_channel_base.h',
+ 'child/npapi/npobject_base.h',
+ 'child/npapi/npobject_proxy.cc',
+ 'child/npapi/npobject_proxy.h',
+ 'child/npapi/npobject_stub.cc',
+ 'child/npapi/npobject_stub.h',
+ 'child/npapi/npobject_util.cc',
+ 'child/npapi/npobject_util.h',
+ 'child/npapi/npruntime_util.cc',
+ 'child/npapi/npruntime_util.h',
+ 'child/npapi/plugin_host.cc',
+ 'child/npapi/plugin_host.h',
+ 'child/npapi/plugin_instance.cc',
+ 'child/npapi/plugin_instance.h',
+ 'child/npapi/plugin_instance_mac.mm',
+ 'child/npapi/plugin_lib.cc',
+ 'child/npapi/plugin_lib.h',
+ 'child/npapi/plugin_stream.cc',
+ 'child/npapi/plugin_stream.h',
+ 'child/npapi/plugin_stream_posix.cc',
+ 'child/npapi/plugin_stream_url.cc',
+ 'child/npapi/plugin_stream_url.h',
+ 'child/npapi/plugin_stream_win.cc',
+ 'child/npapi/plugin_string_stream.cc',
+ 'child/npapi/plugin_string_stream.h',
+ 'child/npapi/plugin_url_fetcher.cc',
+ 'child/npapi/plugin_url_fetcher.h',
+ 'child/npapi/plugin_web_event_converter_mac.h',
+ 'child/npapi/plugin_web_event_converter_mac.mm',
+ 'child/npapi/webplugin.h',
+ 'child/npapi/webplugin_accelerated_surface_mac.h',
+ 'child/npapi/webplugin_delegate.h',
+ 'child/npapi/webplugin_delegate_impl.cc',
+ 'child/npapi/webplugin_delegate_impl.h',
+ 'child/npapi/webplugin_delegate_impl_android.cc',
+ 'child/npapi/webplugin_delegate_impl_aura.cc',
+ 'child/npapi/webplugin_delegate_impl_mac.mm',
+ 'child/npapi/webplugin_delegate_impl_win.cc',
+ 'child/npapi/webplugin_ime_win.cc',
+ 'child/npapi/webplugin_ime_win.h',
+ 'child/npapi/webplugin_resource_client.h',
+ 'child/plugin_message_generator.cc',
+ 'child/plugin_message_generator.h',
+ 'child/plugin_messages.h',
+ 'child/plugin_param_traits.cc',
+ 'child/plugin_param_traits.h',
+ 'child/power_monitor_broadcast_source.cc',
+ 'child/power_monitor_broadcast_source.h',
+ 'child/quota_dispatcher.cc',
+ 'child/quota_dispatcher.h',
+ 'child/quota_message_filter.cc',
+ 'child/quota_message_filter.h',
+ 'child/request_extra_data.cc',
+ 'child/request_extra_data.h',
+ 'child/request_info.cc',
+ 'child/request_info.h',
+ 'child/resource_dispatcher.cc',
+ 'child/resource_dispatcher.h',
+ 'child/runtime_features.cc',
+ 'child/runtime_features.h',
+ 'child/scoped_child_process_reference.cc',
+ 'child/scoped_child_process_reference.h',
+ 'child/service_worker/service_worker_handle_reference.cc',
+ 'child/service_worker/service_worker_handle_reference.h',
+ 'child/service_worker/service_worker_dispatcher.cc',
+ 'child/service_worker/service_worker_dispatcher.h',
+ 'child/service_worker/service_worker_message_filter.cc',
+ 'child/service_worker/service_worker_message_filter.h',
+ 'child/service_worker/service_worker_network_provider.cc',
+ 'child/service_worker/service_worker_network_provider.h',
+ 'child/service_worker/service_worker_provider_context.cc',
+ 'child/service_worker/service_worker_provider_context.h',
+ 'child/service_worker/web_service_worker_impl.cc',
+ 'child/service_worker/web_service_worker_impl.h',
+ 'child/service_worker/web_service_worker_provider_impl.cc',
+ 'child/service_worker/web_service_worker_provider_impl.h',
+ 'child/shared_worker_devtools_agent.cc',
+ 'child/shared_worker_devtools_agent.h',
+ 'child/simple_webmimeregistry_impl.cc',
+ 'child/simple_webmimeregistry_impl.h',
+ 'child/site_isolation_policy.cc',
+ 'child/site_isolation_policy.h',
+ 'child/socket_stream_dispatcher.cc',
+ 'child/socket_stream_dispatcher.h',
+ 'child/sync_load_response.cc',
+ 'child/sync_load_response.h',
+ 'child/thread_safe_sender.cc',
+ 'child/thread_safe_sender.h',
+ 'child/touch_fling_gesture_curve.cc',
+ 'child/touch_fling_gesture_curve.h',
+ 'child/web_database_observer_impl.cc',
+ 'child/web_database_observer_impl.h',
+ 'child/web_discardable_memory_impl.cc',
+ 'child/web_discardable_memory_impl.h',
+ 'child/web_socket_stream_handle_bridge.h',
+ 'child/web_socket_stream_handle_delegate.h',
+ 'child/web_socket_stream_handle_impl.cc',
+ 'child/web_socket_stream_handle_impl.h',
+ 'child/web_url_loader_impl.cc',
+ 'child/web_url_loader_impl.h',
+ 'child/webblobregistry_impl.cc',
+ 'child/webblobregistry_impl.h',
+ 'child/webcrypto/crypto_data.cc',
+ 'child/webcrypto/crypto_data.h',
+ 'child/webcrypto/jwk.cc',
+ 'child/webcrypto/jwk.h',
+ 'child/webcrypto/platform_crypto.h',
+ 'child/webcrypto/platform_crypto_nss.cc',
+ 'child/webcrypto/platform_crypto_openssl.cc',
+ 'child/webcrypto/shared_crypto.cc',
+ 'child/webcrypto/shared_crypto.h',
+ 'child/webcrypto/status.cc',
+ 'child/webcrypto/status.h',
+ 'child/webcrypto/webcrypto_impl.cc',
+ 'child/webcrypto/webcrypto_impl.h',
+ 'child/webcrypto/webcrypto_util.cc',
+ 'child/webcrypto/webcrypto_util.h',
+ 'child/webfallbackthemeengine_impl.cc',
+ 'child/webfallbackthemeengine_impl.h',
+ 'child/webfileutilities_impl.cc',
+ 'child/webfileutilities_impl.h',
+ 'child/webmessageportchannel_impl.cc',
+ 'child/webmessageportchannel_impl.h',
+ 'child/websocket_bridge.cc',
+ 'child/websocket_bridge.h',
+ 'child/websocket_dispatcher.cc',
+ 'child/websocket_dispatcher.h',
+ 'child/webthemeengine_impl_android.cc',
+ 'child/webthemeengine_impl_android.h',
+ 'child/webthemeengine_impl_default.cc',
+ 'child/webthemeengine_impl_default.h',
+ 'child/webthemeengine_impl_mac.cc',
+ 'child/webthemeengine_impl_mac.h',
+ 'child/webthread_impl.cc',
+ 'child/webthread_impl.h',
+ 'child/worker_task_runner.cc',
+ 'child/worker_task_runner.h',
+ 'child/worker_thread_task_runner.cc',
+ 'child/worker_thread_task_runner.h',
+ ],
+ },
'sources': [
- 'child/appcache/appcache_backend_proxy.cc',
- 'child/appcache/appcache_backend_proxy.h',
- 'child/appcache/appcache_dispatcher.cc',
- 'child/appcache/appcache_dispatcher.h',
- 'child/appcache/appcache_frontend_impl.cc',
- 'child/appcache/appcache_frontend_impl.h',
- 'child/appcache/web_application_cache_host_impl.cc',
- 'child/appcache/web_application_cache_host_impl.h',
- 'child/blink_glue.cc',
- 'child/blink_glue.h',
- 'child/blink_platform_impl.cc',
- 'child/blink_platform_impl.h',
- 'child/browser_font_resource_trusted.cc',
- 'child/browser_font_resource_trusted.h',
- 'child/child_histogram_message_filter.cc',
- 'child/child_histogram_message_filter.h',
- 'child/child_message_filter.cc',
- 'child/child_message_filter.h',
- 'child/child_process.cc',
- 'child/child_process.h',
- 'child/child_resource_message_filter.cc',
- 'child/child_resource_message_filter.h',
- 'child/child_shared_bitmap_manager.cc',
- 'child/child_shared_bitmap_manager.h',
- 'child/child_thread.cc',
- 'child/child_thread.h',
- 'child/content_child_helpers.cc',
- 'child/content_child_helpers.h',
- 'child/database_util.cc',
- 'child/database_util.h',
- 'child/db_message_filter.cc',
- 'child/db_message_filter.h',
- 'child/fileapi/file_system_dispatcher.cc',
- 'child/fileapi/file_system_dispatcher.h',
- 'child/fileapi/webfilesystem_impl.cc',
- 'child/fileapi/webfilesystem_impl.h',
- 'child/fileapi/webfilewriter_base.cc',
- 'child/fileapi/webfilewriter_base.h',
- 'child/fileapi/webfilewriter_impl.cc',
- 'child/fileapi/webfilewriter_impl.h',
- 'child/fling_animator_impl_android.cc',
- 'child/fling_animator_impl_android.h',
- 'child/fling_curve_configuration.cc',
- 'child/fling_curve_configuration.h',
- 'child/ftp_directory_listing_response_delegate.cc',
- 'child/ftp_directory_listing_response_delegate.h',
- 'child/image_decoder.cc',
- 'child/image_decoder.h',
- 'child/indexed_db/indexed_db_dispatcher.cc',
- 'child/indexed_db/indexed_db_dispatcher.h',
- 'child/indexed_db/indexed_db_key_builders.cc',
- 'child/indexed_db/indexed_db_key_builders.h',
- 'child/indexed_db/indexed_db_message_filter.cc',
- 'child/indexed_db/indexed_db_message_filter.h',
- 'child/indexed_db/webidbcursor_impl.cc',
- 'child/indexed_db/webidbcursor_impl.h',
- 'child/indexed_db/webidbdatabase_impl.cc',
- 'child/indexed_db/webidbdatabase_impl.h',
- 'child/indexed_db/webidbfactory_impl.cc',
- 'child/indexed_db/webidbfactory_impl.h',
- 'child/mojo/mojo_application.cc',
- 'child/mojo/mojo_application.h',
- 'child/npapi/np_channel_base.cc',
- 'child/npapi/np_channel_base.h',
- 'child/npapi/npobject_base.h',
- 'child/npapi/npobject_proxy.cc',
- 'child/npapi/npobject_proxy.h',
- 'child/npapi/npobject_stub.cc',
- 'child/npapi/npobject_stub.h',
- 'child/npapi/npobject_util.cc',
- 'child/npapi/npobject_util.h',
- 'child/npapi/npruntime_util.cc',
- 'child/npapi/npruntime_util.h',
- 'child/npapi/plugin_host.cc',
- 'child/npapi/plugin_host.h',
- 'child/npapi/plugin_instance.cc',
- 'child/npapi/plugin_instance.h',
- 'child/npapi/plugin_instance_mac.mm',
- 'child/npapi/plugin_lib.cc',
- 'child/npapi/plugin_lib.h',
- 'child/npapi/plugin_stream.cc',
- 'child/npapi/plugin_stream.h',
- 'child/npapi/plugin_stream_posix.cc',
- 'child/npapi/plugin_stream_url.cc',
- 'child/npapi/plugin_stream_url.h',
- 'child/npapi/plugin_stream_win.cc',
- 'child/npapi/plugin_string_stream.cc',
- 'child/npapi/plugin_string_stream.h',
- 'child/npapi/plugin_url_fetcher.cc',
- 'child/npapi/plugin_url_fetcher.h',
- 'child/npapi/plugin_web_event_converter_mac.h',
- 'child/npapi/plugin_web_event_converter_mac.mm',
- 'child/npapi/webplugin.h',
- 'child/npapi/webplugin_accelerated_surface_mac.h',
- 'child/npapi/webplugin_delegate.h',
- 'child/npapi/webplugin_delegate_impl.cc',
- 'child/npapi/webplugin_delegate_impl.h',
- 'child/npapi/webplugin_delegate_impl_android.cc',
- 'child/npapi/webplugin_delegate_impl_aura.cc',
- 'child/npapi/webplugin_delegate_impl_mac.mm',
- 'child/npapi/webplugin_delegate_impl_win.cc',
- 'child/npapi/webplugin_ime_win.cc',
- 'child/npapi/webplugin_ime_win.h',
- 'child/npapi/webplugin_resource_client.h',
- 'child/plugin_message_generator.cc',
- 'child/plugin_message_generator.h',
- 'child/plugin_messages.h',
- 'child/plugin_param_traits.cc',
- 'child/plugin_param_traits.h',
- 'child/power_monitor_broadcast_source.cc',
- 'child/power_monitor_broadcast_source.h',
- 'child/quota_dispatcher.cc',
- 'child/quota_dispatcher.h',
- 'child/quota_message_filter.cc',
- 'child/quota_message_filter.h',
- 'child/request_extra_data.cc',
- 'child/request_extra_data.h',
- 'child/request_info.cc',
- 'child/request_info.h',
- 'child/resource_dispatcher.cc',
- 'child/resource_dispatcher.h',
- 'child/runtime_features.cc',
- 'child/runtime_features.h',
- 'child/scoped_child_process_reference.cc',
- 'child/scoped_child_process_reference.h',
- 'child/service_worker/service_worker_handle_reference.cc',
- 'child/service_worker/service_worker_handle_reference.h',
- 'child/service_worker/service_worker_dispatcher.cc',
- 'child/service_worker/service_worker_dispatcher.h',
- 'child/service_worker/service_worker_message_filter.cc',
- 'child/service_worker/service_worker_message_filter.h',
- 'child/service_worker/service_worker_network_provider.cc',
- 'child/service_worker/service_worker_network_provider.h',
- 'child/service_worker/service_worker_provider_context.cc',
- 'child/service_worker/service_worker_provider_context.h',
- 'child/service_worker/web_service_worker_impl.cc',
- 'child/service_worker/web_service_worker_impl.h',
- 'child/service_worker/web_service_worker_provider_impl.cc',
- 'child/service_worker/web_service_worker_provider_impl.h',
- 'child/shared_worker_devtools_agent.cc',
- 'child/shared_worker_devtools_agent.h',
- 'child/simple_webmimeregistry_impl.cc',
- 'child/simple_webmimeregistry_impl.h',
- 'child/site_isolation_policy.cc',
- 'child/site_isolation_policy.h',
- 'child/socket_stream_dispatcher.cc',
- 'child/socket_stream_dispatcher.h',
- 'child/sync_load_response.cc',
- 'child/sync_load_response.h',
- 'child/thread_safe_sender.cc',
- 'child/thread_safe_sender.h',
- 'child/touch_fling_gesture_curve.cc',
- 'child/touch_fling_gesture_curve.h',
- 'child/web_database_observer_impl.cc',
- 'child/web_database_observer_impl.h',
- 'child/web_discardable_memory_impl.cc',
- 'child/web_discardable_memory_impl.h',
- 'child/web_socket_stream_handle_bridge.h',
- 'child/web_socket_stream_handle_delegate.h',
- 'child/web_socket_stream_handle_impl.cc',
- 'child/web_socket_stream_handle_impl.h',
- 'child/web_url_loader_impl.cc',
- 'child/web_url_loader_impl.h',
- 'child/webblobregistry_impl.cc',
- 'child/webblobregistry_impl.h',
- 'child/webcrypto/crypto_data.cc',
- 'child/webcrypto/crypto_data.h',
- 'child/webcrypto/jwk.cc',
- 'child/webcrypto/jwk.h',
- 'child/webcrypto/platform_crypto.h',
- 'child/webcrypto/platform_crypto_nss.cc',
- 'child/webcrypto/platform_crypto_openssl.cc',
- 'child/webcrypto/shared_crypto.cc',
- 'child/webcrypto/shared_crypto.h',
- 'child/webcrypto/status.cc',
- 'child/webcrypto/status.h',
- 'child/webcrypto/webcrypto_impl.cc',
- 'child/webcrypto/webcrypto_impl.h',
- 'child/webcrypto/webcrypto_util.cc',
- 'child/webcrypto/webcrypto_util.h',
- 'child/webfallbackthemeengine_impl.cc',
- 'child/webfallbackthemeengine_impl.h',
- 'child/webfileutilities_impl.cc',
- 'child/webfileutilities_impl.h',
- 'child/webmessageportchannel_impl.cc',
- 'child/webmessageportchannel_impl.h',
- 'child/websocket_bridge.cc',
- 'child/websocket_bridge.h',
- 'child/websocket_dispatcher.cc',
- 'child/websocket_dispatcher.h',
- 'child/webthemeengine_impl_android.cc',
- 'child/webthemeengine_impl_android.h',
- 'child/webthemeengine_impl_default.cc',
- 'child/webthemeengine_impl_default.h',
- 'child/webthemeengine_impl_mac.cc',
- 'child/webthemeengine_impl_mac.h',
- 'child/webthread_impl.cc',
- 'child/webthread_impl.h',
- 'child/worker_task_runner.cc',
- 'child/worker_task_runner.h',
- 'child/worker_thread_task_runner.cc',
- 'child/worker_thread_task_runner.h',
- 'public/child/image_decoder_utils.h',
- 'public/child/request_peer.h',
- 'public/child/resource_dispatcher_delegate.h',
+ '<@(public_child_sources)',
+ '<@(private_child_sources)',
],
'conditions': [
['use_default_render_theme==0',
diff --git a/content/content_child.target.darwin-arm.mk b/content/content_child.target.darwin-arm.mk
index f9c3df69b6..48b8ab0395 100644
--- a/content/content_child.target.darwin-arm.mk
+++ b/content/content_child.target.darwin-arm.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -128,7 +128,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -161,12 +168,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -176,10 +188,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -272,7 +286,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -305,12 +326,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +346,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -451,7 +479,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.darwin-arm64.mk b/content/content_child.target.darwin-arm64.mk
index fbbcdd1431..16f6ab2c1d 100644
--- a/content/content_child.target.darwin-arm64.mk
+++ b/content/content_child.target.darwin-arm64.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -158,12 +158,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -173,10 +178,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -298,12 +305,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -313,10 +325,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -435,7 +449,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.darwin-mips.mk b/content/content_child.target.darwin-mips.mk
index ebb197d413..ffaa2d19f7 100644
--- a/content/content_child.target.darwin-mips.mk
+++ b/content/content_child.target.darwin-mips.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -161,12 +162,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -176,10 +182,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -272,6 +280,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -305,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -447,7 +463,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.darwin-x86.mk b/content/content_child.target.darwin-x86.mk
index 0e96590e7e..6fd1bcabb2 100644
--- a/content/content_child.target.darwin-x86.mk
+++ b/content/content_child.target.darwin-x86.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -127,6 +127,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -162,12 +163,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -177,10 +183,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -270,6 +278,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -305,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -445,7 +461,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.darwin-x86_64.mk b/content/content_child.target.darwin-x86_64.mk
index 562471c310..1496d6e776 100644
--- a/content/content_child.target.darwin-x86_64.mk
+++ b/content/content_child.target.darwin-x86_64.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -162,12 +162,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -177,10 +182,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -307,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -322,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -449,7 +463,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.linux-arm.mk b/content/content_child.target.linux-arm.mk
index f9c3df69b6..48b8ab0395 100644
--- a/content/content_child.target.linux-arm.mk
+++ b/content/content_child.target.linux-arm.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -128,7 +128,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -161,12 +168,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -176,10 +188,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -272,7 +286,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -305,12 +326,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +346,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -451,7 +479,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.linux-arm64.mk b/content/content_child.target.linux-arm64.mk
index fbbcdd1431..16f6ab2c1d 100644
--- a/content/content_child.target.linux-arm64.mk
+++ b/content/content_child.target.linux-arm64.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -158,12 +158,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -173,10 +178,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -298,12 +305,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -313,10 +325,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -435,7 +449,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.linux-mips.mk b/content/content_child.target.linux-mips.mk
index ebb197d413..ffaa2d19f7 100644
--- a/content/content_child.target.linux-mips.mk
+++ b/content/content_child.target.linux-mips.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -161,12 +162,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -176,10 +182,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -272,6 +280,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -305,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -447,7 +463,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.linux-x86.mk b/content/content_child.target.linux-x86.mk
index 0e96590e7e..6fd1bcabb2 100644
--- a/content/content_child.target.linux-x86.mk
+++ b/content/content_child.target.linux-x86.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -127,6 +127,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -162,12 +163,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -177,10 +183,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -270,6 +278,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -305,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -320,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -445,7 +461,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_child.target.linux-x86_64.mk b/content/content_child.target.linux-x86_64.mk
index 562471c310..1496d6e776 100644
--- a/content/content_child.target.linux-x86_64.mk
+++ b/content/content_child.target.linux-x86_64.mk
@@ -13,7 +13,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
@@ -162,12 +162,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -177,10 +182,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -307,12 +314,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -322,10 +334,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -449,7 +463,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_base_ui_base_gyp \
webkit_child_webkit_child_gyp
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 61cc59b100..7a8a06dd32 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -14,6 +14,7 @@
'../third_party/libjingle/libjingle.gyp:libjingle',
'../ui/accessibility/accessibility.gyp:accessibility',
'../ui/base/ui_base.gyp:ui_base',
+ '../ui/events/ipc/events_ipc.gyp:events_ipc',
'../ui/gfx/gfx.gyp:gfx',
'../ui/gfx/gfx.gyp:gfx_geometry',
'../ui/shell_dialogs/shell_dialogs.gyp:shell_dialogs',
@@ -29,432 +30,441 @@
# headers resolve correctly.
'../third_party/WebKit/public/blink_headers.gyp:blink_headers',
],
+ 'variables': {
+ 'public_common_sources': [
+ 'public/common/assert_matching_enums.cc',
+ 'public/common/bindings_policy.h',
+ 'public/common/child_process_host.h',
+ 'public/common/child_process_host_delegate.cc',
+ 'public/common/child_process_host_delegate.h',
+ 'public/common/child_process_sandbox_support_linux.h',
+ 'public/common/color_suggestion.cc',
+ 'public/common/color_suggestion.h',
+ 'public/common/common_param_traits.cc',
+ 'public/common/common_param_traits.h',
+ 'public/common/common_param_traits_macros.h',
+ 'public/common/console_message_level.h',
+ 'public/common/content_client.cc',
+ 'public/common/content_client.h',
+ 'public/common/content_constants.cc',
+ 'public/common/content_constants.h',
+ 'public/common/content_descriptors.h',
+ 'public/common/content_ipc_logging.h',
+ 'public/common/content_paths.h',
+ 'public/common/content_switches.cc',
+ 'public/common/content_switches.h',
+ 'public/common/context_menu_params.cc',
+ 'public/common/context_menu_params.h',
+ 'public/common/drop_data.cc',
+ 'public/common/drop_data.h',
+ 'public/common/eme_codec.h',
+ 'public/common/favicon_url.cc',
+ 'public/common/favicon_url.h',
+ 'public/common/file_chooser_params.cc',
+ 'public/common/file_chooser_params.h',
+ 'public/common/frame_navigate_params.cc',
+ 'public/common/frame_navigate_params.h',
+ 'public/common/geoposition.cc',
+ 'public/common/geoposition.h',
+ 'public/common/gpu_memory_stats.cc',
+ 'public/common/gpu_memory_stats.h',
+ 'public/common/injection_test_mac.h',
+ 'public/common/injection_test_win.h',
+ 'public/common/javascript_message_type.h',
+ 'public/common/main_function_params.h',
+ 'public/common/media_stream_request.cc',
+ 'public/common/media_stream_request.h',
+ 'public/common/menu_item.cc',
+ 'public/common/menu_item.h',
+ 'public/common/page_state.cc',
+ 'public/common/page_state.h',
+ 'public/common/page_transition_types.cc',
+ 'public/common/page_transition_types.h',
+ 'public/common/page_transition_types_list.h',
+ 'public/common/page_type.h',
+ 'public/common/page_zoom.h',
+ 'public/common/pepper_plugin_info.cc',
+ 'public/common/pepper_plugin_info.h',
+ 'public/common/process_type.h',
+ 'public/common/referrer.h',
+ 'public/common/renderer_preferences.cc',
+ 'public/common/renderer_preferences.h',
+ 'public/common/resource_response.h',
+ 'public/common/resource_response_info.cc',
+ 'public/common/resource_response_info.h',
+ 'public/common/result_codes.h',
+ 'public/common/result_codes_list.h',
+ 'public/common/sandbox_init.h',
+ 'public/common/sandbox_linux.h',
+ 'public/common/sandbox_type_mac.h',
+ 'public/common/sandboxed_process_launcher_delegate.cc',
+ 'public/common/sandboxed_process_launcher_delegate.h',
+ 'public/common/security_style.h',
+ 'public/common/show_desktop_notification_params.cc',
+ 'public/common/show_desktop_notification_params.h',
+ 'public/common/signed_certificate_timestamp_id_and_status.cc',
+ 'public/common/signed_certificate_timestamp_id_and_status.h',
+ 'public/common/speech_recognition_error.h',
+ 'public/common/speech_recognition_grammar.h',
+ 'public/common/speech_recognition_result.cc',
+ 'public/common/speech_recognition_result.h',
+ 'public/common/ssl_status.cc',
+ 'public/common/ssl_status.h',
+ 'public/common/stop_find_action.h',
+ 'public/common/storage_quota_params.h',
+ 'public/common/three_d_api_types.h',
+ 'public/common/top_controls_state.h',
+ 'public/common/top_controls_state_list.h',
+ 'public/common/url_constants.cc',
+ 'public/common/url_constants.h',
+ 'public/common/url_fetcher.h',
+ 'public/common/url_utils.cc',
+ 'public/common/url_utils.h',
+ 'public/common/user_agent.h',
+ 'public/common/webplugininfo.cc',
+ 'public/common/webplugininfo.h',
+ 'public/common/window_container_type.cc',
+ 'public/common/window_container_type.h',
+ 'public/common/zygote_fork_delegate_linux.h',
+ ],
+ 'private_common_sources': [
+ 'common/accessibility_messages.h',
+ 'common/all_messages.h',
+ 'common/android/address_parser.cc',
+ 'common/android/address_parser.h',
+ 'common/android/address_parser_internal.cc',
+ 'common/android/address_parser_internal.h',
+ 'common/android/common_jni_registrar.cc',
+ 'common/android/common_jni_registrar.h',
+ 'common/android/gin_java_bridge_value.cc',
+ 'common/android/gin_java_bridge_value.h',
+ 'common/android/hash_set.cc',
+ 'common/android/hash_set.h',
+ 'common/android/surface_texture_lookup.cc',
+ 'common/android/surface_texture_lookup.h',
+ 'common/android/surface_texture_peer.cc',
+ 'common/android/surface_texture_peer.h',
+ 'common/appcache_messages.h',
+ 'common/battery_status_messages.h',
+ 'common/browser_plugin/browser_plugin_constants.cc',
+ 'common/browser_plugin/browser_plugin_constants.h',
+ 'common/browser_plugin/browser_plugin_messages.h',
+ 'common/cc_messages.cc',
+ 'common/cc_messages.h',
+ 'common/child_process_host_impl.cc',
+ 'common/child_process_host_impl.h',
+ 'common/child_process_messages.h',
+ 'common/child_process_sandbox_support_impl_linux.cc',
+ 'common/child_process_sandbox_support_impl_linux.h',
+ 'common/child_process_sandbox_support_impl_shm_linux.cc',
+ 'common/clipboard_format.h',
+ 'common/clipboard_messages.h',
+ 'common/content_constants_internal.cc',
+ 'common/content_constants_internal.h',
+ 'common/content_export.h',
+ 'common/content_ipc_logging.cc',
+ 'common/content_message_generator.cc',
+ 'common/content_message_generator.h',
+ 'common/content_param_traits.cc',
+ 'common/content_param_traits.h',
+ 'common/content_param_traits_macros.h',
+ 'common/content_paths.cc',
+ 'common/content_switches_internal.cc',
+ 'common/content_switches_internal.h',
+ 'common/cookie_data.cc',
+ 'common/cookie_data.h',
+ 'common/cursors/webcursor.cc',
+ 'common/cursors/webcursor.h',
+ 'common/cursors/webcursor_android.cc',
+ 'common/cursors/webcursor_aura.cc',
+ 'common/cursors/webcursor_aurawin.cc',
+ 'common/cursors/webcursor_aurax11.cc',
+ 'common/cursors/webcursor_mac.mm',
+ 'common/cursors/webcursor_ozone.cc',
+ 'common/database_messages.h',
+ 'common/date_time_suggestion.h',
+ 'common/desktop_notification_messages.h',
+ 'common/device_sensors/device_motion_hardware_buffer.h',
+ 'common/device_sensors/device_motion_messages.h',
+ 'common/device_sensors/device_orientation_hardware_buffer.h',
+ 'common/device_sensors/device_orientation_messages.h',
+ 'common/devtools_messages.h',
+ 'common/dom_storage/dom_storage_map.cc',
+ 'common/dom_storage/dom_storage_map.h',
+ 'common/dom_storage/dom_storage_messages.h',
+ 'common/drag_event_source_info.h',
+ 'common/drag_messages.h',
+ 'common/drag_traits.h',
+ 'common/edit_command.h',
+ 'common/file_utilities_messages.h',
+ 'common/fileapi/file_system_messages.h',
+ 'common/fileapi/webblob_messages.h',
+ 'common/font_cache_dispatcher_win.cc',
+ 'common/font_cache_dispatcher_win.h',
+ 'common/font_config_ipc_linux.cc',
+ 'common/font_config_ipc_linux.h',
+ 'common/font_list.cc',
+ 'common/font_list.h',
+ 'common/font_list_android.cc',
+ 'common/font_list_mac.mm',
+ 'common/font_list_ozone.cc',
+ 'common/font_list_pango.cc',
+ 'common/font_list_win.cc',
+ 'common/frame_message_enums.h',
+ 'common/frame_messages.h',
+ 'common/frame_param.cc',
+ 'common/frame_param.h',
+ 'common/frame_param_macros.h',
+ 'common/gamepad_hardware_buffer.h',
+ 'common/gamepad_messages.h',
+ 'common/gamepad_param_traits.cc',
+ 'common/gamepad_param_traits.h',
+ 'common/gamepad_user_gesture.cc',
+ 'common/gamepad_user_gesture.h',
+ 'common/geolocation_messages.h',
+ 'common/gin_java_bridge_messages.h',
+ 'common/gpu/client/command_buffer_proxy_impl.cc',
+ 'common/gpu/client/command_buffer_proxy_impl.h',
+ 'common/gpu/client/context_provider_command_buffer.cc',
+ 'common/gpu/client/context_provider_command_buffer.h',
+ 'common/gpu/client/gl_helper.cc',
+ 'common/gpu/client/gl_helper.h',
+ 'common/gpu/client/gl_helper_readback_support.cc',
+ 'common/gpu/client/gl_helper_readback_support.h',
+ 'common/gpu/client/gl_helper_scaling.cc',
+ 'common/gpu/client/gl_helper_scaling.h',
+ 'common/gpu/client/gpu_channel_host.cc',
+ 'common/gpu/client/gpu_channel_host.h',
+ 'common/gpu/client/gpu_memory_buffer_impl.cc',
+ 'common/gpu/client/gpu_memory_buffer_impl.h',
+ 'common/gpu/client/gpu_memory_buffer_impl_android.cc',
+ 'common/gpu/client/gpu_memory_buffer_impl_linux.cc',
+ 'common/gpu/client/gpu_memory_buffer_impl_mac.cc',
+ 'common/gpu/client/gpu_memory_buffer_impl_shm.cc',
+ 'common/gpu/client/gpu_memory_buffer_impl_shm.h',
+ 'common/gpu/client/gpu_memory_buffer_impl_win.cc',
+ 'common/gpu/client/gpu_video_decode_accelerator_host.cc',
+ 'common/gpu/client/gpu_video_decode_accelerator_host.h',
+ 'common/gpu/client/gpu_video_encode_accelerator_host.cc',
+ 'common/gpu/client/gpu_video_encode_accelerator_host.h',
+ 'common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc',
+ 'common/gpu/client/webgraphicscontext3d_command_buffer_impl.h',
+ 'common/gpu/devtools_gpu_agent.cc',
+ 'common/gpu/devtools_gpu_agent.h',
+ 'common/gpu/devtools_gpu_instrumentation.cc',
+ 'common/gpu/devtools_gpu_instrumentation.h',
+ 'common/gpu/gpu_channel.cc',
+ 'common/gpu/gpu_channel.h',
+ 'common/gpu/gpu_channel_manager.cc',
+ 'common/gpu/gpu_channel_manager.h',
+ 'common/gpu/gpu_command_buffer_stub.cc',
+ 'common/gpu/gpu_command_buffer_stub.h',
+ 'common/gpu/gpu_config.h',
+ 'common/gpu/gpu_memory_manager.cc',
+ 'common/gpu/gpu_memory_manager.h',
+ 'common/gpu/gpu_memory_manager_client.cc',
+ 'common/gpu/gpu_memory_manager_client.h',
+ 'common/gpu/gpu_memory_tracking.cc',
+ 'common/gpu/gpu_memory_tracking.h',
+ 'common/gpu/gpu_memory_uma_stats.h',
+ 'common/gpu/gpu_messages.h',
+ 'common/gpu/gpu_process_launch_causes.h',
+ 'common/gpu/gpu_surface_lookup.cc',
+ 'common/gpu/gpu_surface_lookup.h',
+ 'common/gpu/gpu_watchdog.h',
+ 'common/gpu/image_transport_surface.cc',
+ 'common/gpu/image_transport_surface.h',
+ 'common/gpu/image_transport_surface_android.cc',
+ 'common/gpu/image_transport_surface_linux.cc',
+ 'common/gpu/image_transport_surface_mac.cc',
+ 'common/gpu/image_transport_surface_win.cc',
+ 'common/gpu/media/gpu_video_decode_accelerator.cc',
+ 'common/gpu/media/gpu_video_decode_accelerator.h',
+ 'common/gpu/media/gpu_video_encode_accelerator.cc',
+ 'common/gpu/media/gpu_video_encode_accelerator.h',
+ 'common/gpu/media/video_decode_accelerator_impl.cc',
+ 'common/gpu/media/video_decode_accelerator_impl.h',
+ 'common/gpu/stream_texture_android.cc',
+ 'common/gpu/stream_texture_android.h',
+ 'common/gpu/sync_point_manager.cc',
+ 'common/gpu/sync_point_manager.h',
+ 'common/gpu/texture_image_transport_surface.cc',
+ 'common/gpu/texture_image_transport_surface.h',
+ 'common/handle_enumerator_win.cc',
+ 'common/handle_enumerator_win.h',
+ 'common/host_shared_bitmap_manager.cc',
+ 'common/host_shared_bitmap_manager.h',
+ 'common/image_messages.h',
+ 'common/indexed_db/indexed_db_constants.h',
+ 'common/indexed_db/indexed_db_key.cc',
+ 'common/indexed_db/indexed_db_key.h',
+ 'common/indexed_db/indexed_db_key_path.cc',
+ 'common/indexed_db/indexed_db_key_path.h',
+ 'common/indexed_db/indexed_db_key_range.cc',
+ 'common/indexed_db/indexed_db_key_range.h',
+ 'common/indexed_db/indexed_db_messages.h',
+ 'common/indexed_db/indexed_db_param_traits.cc',
+ 'common/indexed_db/indexed_db_param_traits.h',
+ 'common/input/did_overscroll_params.h',
+ 'common/input/gesture_event_stream_validator.cc',
+ 'common/input/gesture_event_stream_validator.h',
+ 'common/input/input_event.cc',
+ 'common/input/input_event.h',
+ 'common/input/input_event_stream_validator.cc',
+ 'common/input/input_event_stream_validator.h',
+ 'common/input/input_param_traits.cc',
+ 'common/input/input_param_traits.h',
+ 'common/input/scoped_web_input_event.cc',
+ 'common/input/scoped_web_input_event.h',
+ 'common/input/synthetic_gesture_packet.cc',
+ 'common/input/synthetic_gesture_packet.h',
+ 'common/input/synthetic_gesture_params.cc',
+ 'common/input/synthetic_gesture_params.h',
+ 'common/input/synthetic_pinch_gesture_params.cc',
+ 'common/input/synthetic_pinch_gesture_params.h',
+ 'common/input/synthetic_smooth_scroll_gesture_params.cc',
+ 'common/input/synthetic_smooth_scroll_gesture_params.h',
+ 'common/input/synthetic_tap_gesture_params.cc',
+ 'common/input/synthetic_tap_gesture_params.h',
+ 'common/input/synthetic_web_input_event_builders.cc',
+ 'common/input/synthetic_web_input_event_builders.h',
+ 'common/input/web_input_event_traits.cc',
+ 'common/input/web_input_event_traits.h',
+ 'common/input/web_touch_event_traits.cc',
+ 'common/input/web_touch_event_traits.h',
+ 'common/input_messages.h',
+ 'common/inter_process_time_ticks_converter.cc',
+ 'common/inter_process_time_ticks_converter.h',
+ 'common/java_bridge_messages.h',
+ 'common/mac/attributed_string_coder.h',
+ 'common/mac/attributed_string_coder.mm',
+ 'common/mac/font_descriptor.h',
+ 'common/mac/font_descriptor.mm',
+ 'common/mac/font_loader.h',
+ 'common/mac/font_loader.mm',
+ 'common/media/audio_messages.h',
+ 'common/media/cdm_messages.h',
+ 'common/media/cdm_messages_enums.h',
+ 'common/media/media_param_traits.cc',
+ 'common/media/media_param_traits.h',
+ 'common/media/media_player_messages_android.h',
+ 'common/media/media_player_messages_enums_android.h',
+ 'common/media/media_stream_messages.h',
+ 'common/media/media_stream_options.cc',
+ 'common/media/media_stream_options.h',
+ 'common/media/media_stream_track_metrics_host_messages.h',
+ 'common/media/midi_messages.h',
+ 'common/media/video_capture.h',
+ 'common/media/video_capture_messages.h',
+ 'common/media/webrtc_identity_messages.h',
+ 'common/memory_benchmark_messages.h',
+ 'common/message_port_messages.h',
+ 'common/message_router.cc',
+ 'common/message_router.h',
+ 'common/mime_registry_messages.h',
+ 'common/mojo/mojo_messages.h',
+ 'common/mojo/mojo_service_names.cc',
+ 'common/mojo/mojo_service_names.h',
+ 'common/navigation_gesture.h',
+ 'common/net/url_fetcher.cc',
+ 'common/net/url_request_user_data.cc',
+ 'common/net/url_request_user_data.h',
+ 'common/one_writer_seqlock.cc',
+ 'common/one_writer_seqlock.h',
+ 'common/p2p_messages.h',
+ 'common/page_state_serialization.cc',
+ 'common/page_state_serialization.h',
+ 'common/page_zoom.cc',
+ 'common/pepper_messages.h',
+ 'common/pepper_plugin_list.cc',
+ 'common/pepper_plugin_list.h',
+ 'common/pepper_renderer_instance_data.cc',
+ 'common/pepper_renderer_instance_data.h',
+ 'common/plugin_carbon_interpose_constants_mac.cc',
+ 'common/plugin_carbon_interpose_constants_mac.h',
+ 'common/plugin_constants_win.cc',
+ 'common/plugin_constants_win.h',
+ 'common/plugin_list.cc',
+ 'common/plugin_list.h',
+ 'common/plugin_list_mac.mm',
+ 'common/plugin_list_posix.cc',
+ 'common/plugin_list_win.cc',
+ 'common/plugin_process_messages.h',
+ 'common/power_monitor_messages.h',
+ 'common/process_type.cc',
+ 'common/push_messaging_messages.h',
+ 'common/quota_messages.h',
+ 'common/resource_messages.cc',
+ 'common/resource_messages.h',
+ 'common/resource_request_body.cc',
+ 'common/resource_request_body.h',
+ 'common/sandbox_init_mac.cc',
+ 'common/sandbox_init_mac.h',
+ 'common/sandbox_init_win.cc',
+ 'common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc',
+ 'common/sandbox_linux/android/sandbox_bpf_base_policy_android.h',
+ 'common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc',
+ 'common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.h',
+ 'common/sandbox_linux/bpf_gpu_policy_linux.cc',
+ 'common/sandbox_linux/bpf_gpu_policy_linux.h',
+ 'common/sandbox_linux/bpf_ppapi_policy_linux.cc',
+ 'common/sandbox_linux/bpf_ppapi_policy_linux.h',
+ 'common/sandbox_linux/bpf_renderer_policy_linux.cc',
+ 'common/sandbox_linux/bpf_renderer_policy_linux.h',
+ 'common/sandbox_linux/sandbox_bpf_base_policy_linux.cc',
+ 'common/sandbox_linux/sandbox_bpf_base_policy_linux.h',
+ 'common/sandbox_linux/sandbox_init_linux.cc',
+ 'common/sandbox_linux/sandbox_linux.cc',
+ 'common/sandbox_linux/sandbox_linux.h',
+ 'common/sandbox_linux/sandbox_seccomp_bpf_linux.cc',
+ 'common/sandbox_linux/sandbox_seccomp_bpf_linux.h',
+ 'common/sandbox_mac.h',
+ 'common/sandbox_mac.mm',
+ 'common/sandbox_util.cc',
+ 'common/sandbox_util.h',
+ 'common/sandbox_win.cc',
+ 'common/sandbox_win.h',
+ 'common/savable_url_schemes.cc',
+ 'common/savable_url_schemes.h',
+ 'common/screen_orientation_messages.h',
+ 'common/service_worker/embedded_worker_messages.h',
+ 'common/service_worker/service_worker_messages.h',
+ 'common/service_worker/service_worker_status_code.cc',
+ 'common/service_worker/service_worker_status_code.h',
+ 'common/service_worker/service_worker_types.cc',
+ 'common/service_worker/service_worker_types.h',
+ 'common/set_process_title.cc',
+ 'common/set_process_title.h',
+ 'common/set_process_title_linux.cc',
+ 'common/set_process_title_linux.h',
+ 'common/socket_stream.h',
+ 'common/socket_stream_handle_data.h',
+ 'common/socket_stream_messages.h',
+ 'common/speech_recognition_messages.h',
+ 'common/ssl_status_serialization.cc',
+ 'common/ssl_status_serialization.h',
+ 'common/swapped_out_messages.cc',
+ 'common/swapped_out_messages.h',
+ 'common/text_input_client_messages.h',
+ 'common/url_schemes.cc',
+ 'common/url_schemes.h',
+ 'common/user_agent.cc',
+ 'common/user_agent_ios.mm',
+ 'common/utility_messages.h',
+ 'common/view_message_enums.h',
+ 'common/view_messages.h',
+ 'common/webplugin_geometry.cc',
+ 'common/webplugin_geometry.h',
+ 'common/websocket.cc',
+ 'common/websocket.h',
+ 'common/websocket_messages.h',
+ 'common/worker_messages.h',
+ 'common/zygote_commands_linux.h',
+ ],
+ },
'sources': [
- 'public/common/assert_matching_enums.cc',
- 'public/common/bindings_policy.h',
- 'public/common/browser_plugin_permission_type.h',
- 'public/common/child_process_host.h',
- 'public/common/child_process_host_delegate.cc',
- 'public/common/child_process_host_delegate.h',
- 'public/common/child_process_sandbox_support_linux.h',
- 'public/common/color_suggestion.cc',
- 'public/common/color_suggestion.h',
- 'public/common/common_param_traits.cc',
- 'public/common/common_param_traits.h',
- 'public/common/common_param_traits_macros.h',
- 'public/common/console_message_level.h',
- 'public/common/content_client.cc',
- 'public/common/content_client.h',
- 'public/common/content_constants.cc',
- 'public/common/content_constants.h',
- 'public/common/content_descriptors.h',
- 'public/common/content_ipc_logging.h',
- 'public/common/content_paths.h',
- 'public/common/content_switches.cc',
- 'public/common/content_switches.h',
- 'public/common/context_menu_params.cc',
- 'public/common/context_menu_params.h',
- 'public/common/drop_data.cc',
- 'public/common/drop_data.h',
- 'public/common/eme_codec.h',
- 'public/common/favicon_url.cc',
- 'public/common/favicon_url.h',
- 'public/common/file_chooser_params.cc',
- 'public/common/file_chooser_params.h',
- 'public/common/frame_navigate_params.cc',
- 'public/common/frame_navigate_params.h',
- 'public/common/geoposition.cc',
- 'public/common/geoposition.h',
- 'public/common/gpu_memory_stats.cc',
- 'public/common/gpu_memory_stats.h',
- 'public/common/injection_test_mac.h',
- 'public/common/injection_test_win.h',
- 'public/common/javascript_message_type.h',
- 'public/common/main_function_params.h',
- 'public/common/media_stream_request.cc',
- 'public/common/media_stream_request.h',
- 'public/common/menu_item.cc',
- 'public/common/menu_item.h',
- 'public/common/page_state.cc',
- 'public/common/page_state.h',
- 'public/common/page_transition_types.cc',
- 'public/common/page_transition_types.h',
- 'public/common/page_transition_types_list.h',
- 'public/common/page_type.h',
- 'public/common/page_zoom.h',
- 'public/common/pepper_plugin_info.cc',
- 'public/common/pepper_plugin_info.h',
- 'public/common/process_type.h',
- 'public/common/referrer.h',
- 'public/common/renderer_preferences.cc',
- 'public/common/renderer_preferences.h',
- 'public/common/resource_response.h',
- 'public/common/result_codes.h',
- 'public/common/result_codes_list.h',
- 'public/common/sandbox_init.h',
- 'public/common/sandbox_linux.h',
- 'public/common/sandbox_type_mac.h',
- 'public/common/sandboxed_process_launcher_delegate.cc',
- 'public/common/sandboxed_process_launcher_delegate.h',
- 'public/common/security_style.h',
- 'public/common/show_desktop_notification_params.cc',
- 'public/common/show_desktop_notification_params.h',
- 'public/common/signed_certificate_timestamp_id_and_status.cc',
- 'public/common/signed_certificate_timestamp_id_and_status.h',
- 'public/common/speech_recognition_error.h',
- 'public/common/speech_recognition_grammar.h',
- 'public/common/speech_recognition_result.cc',
- 'public/common/speech_recognition_result.h',
- 'public/common/ssl_status.cc',
- 'public/common/ssl_status.h',
- 'public/common/stop_find_action.h',
- 'public/common/storage_quota_params.h',
- 'public/common/three_d_api_types.h',
- 'public/common/top_controls_state.h',
- 'public/common/top_controls_state_list.h',
- 'public/common/url_constants.cc',
- 'public/common/url_constants.h',
- 'public/common/url_fetcher.h',
- 'public/common/url_utils.cc',
- 'public/common/url_utils.h',
- 'public/common/user_agent.h',
- 'public/common/webplugininfo.cc',
- 'public/common/webplugininfo.h',
- 'public/common/window_container_type.cc',
- 'public/common/window_container_type.h',
- 'public/common/zygote_fork_delegate_linux.h',
- 'common/accessibility_messages.h',
- 'common/all_messages.h',
- 'common/android/address_parser.cc',
- 'common/android/address_parser.h',
- 'common/android/address_parser_internal.cc',
- 'common/android/address_parser_internal.h',
- 'common/android/common_jni_registrar.cc',
- 'common/android/common_jni_registrar.h',
- 'common/android/gin_java_bridge_value.cc',
- 'common/android/gin_java_bridge_value.h',
- 'common/android/hash_set.cc',
- 'common/android/hash_set.h',
- 'common/android/surface_texture_lookup.cc',
- 'common/android/surface_texture_lookup.h',
- 'common/android/surface_texture_peer.cc',
- 'common/android/surface_texture_peer.h',
- 'common/appcache_messages.h',
- 'common/browser_plugin/browser_plugin_constants.cc',
- 'common/browser_plugin/browser_plugin_constants.h',
- 'common/browser_plugin/browser_plugin_messages.h',
- 'common/cc_messages.cc',
- 'common/cc_messages.h',
- 'common/child_process_host_impl.cc',
- 'common/child_process_host_impl.h',
- 'common/child_process_messages.h',
- 'common/child_process_sandbox_support_impl_linux.cc',
- 'common/child_process_sandbox_support_impl_linux.h',
- 'common/child_process_sandbox_support_impl_shm_linux.cc',
- 'common/clipboard_format.h',
- 'common/clipboard_messages.h',
- 'common/content_constants_internal.cc',
- 'common/content_constants_internal.h',
- 'common/content_export.h',
- 'common/content_ipc_logging.cc',
- 'common/content_message_generator.cc',
- 'common/content_message_generator.h',
- 'common/content_param_traits.cc',
- 'common/content_param_traits.h',
- 'common/content_param_traits_macros.h',
- 'common/content_paths.cc',
- 'common/content_switches_internal.cc',
- 'common/content_switches_internal.h',
- 'common/cookie_data.cc',
- 'common/cookie_data.h',
- 'common/cursors/webcursor.cc',
- 'common/cursors/webcursor.h',
- 'common/cursors/webcursor_android.cc',
- 'common/cursors/webcursor_aura.cc',
- 'common/cursors/webcursor_aurawin.cc',
- 'common/cursors/webcursor_aurax11.cc',
- 'common/cursors/webcursor_mac.mm',
- 'common/cursors/webcursor_ozone.cc',
- 'common/database_messages.h',
- 'common/date_time_suggestion.h',
- 'common/desktop_notification_messages.h',
- 'common/device_sensors/device_motion_hardware_buffer.h',
- 'common/device_sensors/device_motion_messages.h',
- 'common/device_sensors/device_orientation_hardware_buffer.h',
- 'common/device_sensors/device_orientation_messages.h',
- 'common/devtools_messages.h',
- 'common/dom_storage/dom_storage_map.cc',
- 'common/dom_storage/dom_storage_map.h',
- 'common/dom_storage/dom_storage_messages.h',
- 'common/drag_event_source_info.h',
- 'common/drag_messages.h',
- 'common/drag_traits.h',
- 'common/edit_command.h',
- 'common/file_utilities_messages.h',
- 'common/fileapi/file_system_messages.h',
- 'common/fileapi/webblob_messages.h',
- 'common/font_cache_dispatcher_win.cc',
- 'common/font_cache_dispatcher_win.h',
- 'common/font_config_ipc_linux.cc',
- 'common/font_config_ipc_linux.h',
- 'common/font_list.cc',
- 'common/font_list.h',
- 'common/font_list_android.cc',
- 'common/font_list_mac.mm',
- 'common/font_list_ozone.cc',
- 'common/font_list_pango.cc',
- 'common/font_list_win.cc',
- 'common/frame_message_enums.h',
- 'common/frame_messages.h',
- 'common/frame_param.cc',
- 'common/frame_param.h',
- 'common/frame_param_macros.h',
- 'common/gamepad_hardware_buffer.h',
- 'common/gamepad_messages.h',
- 'common/gamepad_param_traits.cc',
- 'common/gamepad_param_traits.h',
- 'common/gamepad_user_gesture.cc',
- 'common/gamepad_user_gesture.h',
- 'common/geolocation_messages.h',
- 'common/gin_java_bridge_messages.h',
- 'common/gpu/client/command_buffer_proxy_impl.cc',
- 'common/gpu/client/command_buffer_proxy_impl.h',
- 'common/gpu/client/context_provider_command_buffer.cc',
- 'common/gpu/client/context_provider_command_buffer.h',
- 'common/gpu/client/gl_helper.cc',
- 'common/gpu/client/gl_helper.h',
- 'common/gpu/client/gl_helper_readback_support.cc',
- 'common/gpu/client/gl_helper_readback_support.h',
- 'common/gpu/client/gl_helper_scaling.cc',
- 'common/gpu/client/gl_helper_scaling.h',
- 'common/gpu/client/gpu_channel_host.cc',
- 'common/gpu/client/gpu_channel_host.h',
- 'common/gpu/client/gpu_memory_buffer_impl.cc',
- 'common/gpu/client/gpu_memory_buffer_impl.h',
- 'common/gpu/client/gpu_memory_buffer_impl_android.cc',
- 'common/gpu/client/gpu_memory_buffer_impl_linux.cc',
- 'common/gpu/client/gpu_memory_buffer_impl_mac.cc',
- 'common/gpu/client/gpu_memory_buffer_impl_shm.cc',
- 'common/gpu/client/gpu_memory_buffer_impl_shm.h',
- 'common/gpu/client/gpu_memory_buffer_impl_win.cc',
- 'common/gpu/client/gpu_video_decode_accelerator_host.cc',
- 'common/gpu/client/gpu_video_decode_accelerator_host.h',
- 'common/gpu/client/gpu_video_encode_accelerator_host.cc',
- 'common/gpu/client/gpu_video_encode_accelerator_host.h',
- 'common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc',
- 'common/gpu/client/webgraphicscontext3d_command_buffer_impl.h',
- 'common/gpu/devtools_gpu_agent.cc',
- 'common/gpu/devtools_gpu_agent.h',
- 'common/gpu/devtools_gpu_instrumentation.cc',
- 'common/gpu/devtools_gpu_instrumentation.h',
- 'common/gpu/gpu_channel.cc',
- 'common/gpu/gpu_channel.h',
- 'common/gpu/gpu_channel_manager.cc',
- 'common/gpu/gpu_channel_manager.h',
- 'common/gpu/gpu_command_buffer_stub.cc',
- 'common/gpu/gpu_command_buffer_stub.h',
- 'common/gpu/gpu_config.h',
- 'common/gpu/gpu_memory_manager.cc',
- 'common/gpu/gpu_memory_manager.h',
- 'common/gpu/gpu_memory_manager_client.cc',
- 'common/gpu/gpu_memory_manager_client.h',
- 'common/gpu/gpu_memory_tracking.cc',
- 'common/gpu/gpu_memory_tracking.h',
- 'common/gpu/gpu_memory_uma_stats.h',
- 'common/gpu/gpu_messages.h',
- 'common/gpu/gpu_process_launch_causes.h',
- 'common/gpu/gpu_surface_lookup.cc',
- 'common/gpu/gpu_surface_lookup.h',
- 'common/gpu/gpu_watchdog.h',
- 'common/gpu/image_transport_surface.cc',
- 'common/gpu/image_transport_surface.h',
- 'common/gpu/image_transport_surface_android.cc',
- 'common/gpu/image_transport_surface_linux.cc',
- 'common/gpu/image_transport_surface_mac.cc',
- 'common/gpu/image_transport_surface_win.cc',
- 'common/gpu/media/gpu_video_decode_accelerator.cc',
- 'common/gpu/media/gpu_video_decode_accelerator.h',
- 'common/gpu/media/gpu_video_encode_accelerator.cc',
- 'common/gpu/media/gpu_video_encode_accelerator.h',
- 'common/gpu/media/video_decode_accelerator_impl.cc',
- 'common/gpu/media/video_decode_accelerator_impl.h',
- 'common/gpu/stream_texture_android.cc',
- 'common/gpu/stream_texture_android.h',
- 'common/gpu/sync_point_manager.cc',
- 'common/gpu/sync_point_manager.h',
- 'common/gpu/texture_image_transport_surface.cc',
- 'common/gpu/texture_image_transport_surface.h',
- 'common/handle_enumerator_win.cc',
- 'common/handle_enumerator_win.h',
- 'common/host_shared_bitmap_manager.cc',
- 'common/host_shared_bitmap_manager.h',
- 'common/image_messages.h',
- 'common/indexed_db/indexed_db_constants.h',
- 'common/indexed_db/indexed_db_key.cc',
- 'common/indexed_db/indexed_db_key.h',
- 'common/indexed_db/indexed_db_key_path.cc',
- 'common/indexed_db/indexed_db_key_path.h',
- 'common/indexed_db/indexed_db_key_range.cc',
- 'common/indexed_db/indexed_db_key_range.h',
- 'common/indexed_db/indexed_db_messages.h',
- 'common/indexed_db/indexed_db_param_traits.cc',
- 'common/indexed_db/indexed_db_param_traits.h',
- 'common/input/did_overscroll_params.h',
- 'common/input/gesture_event_stream_validator.cc',
- 'common/input/gesture_event_stream_validator.h',
- 'common/input/input_event.cc',
- 'common/input/input_event.h',
- 'common/input/input_event_ack_state.h',
- 'common/input/input_event_stream_validator.cc',
- 'common/input/input_event_stream_validator.h',
- 'common/input/input_param_traits.cc',
- 'common/input/input_param_traits.h',
- 'common/input/scoped_web_input_event.cc',
- 'common/input/scoped_web_input_event.h',
- 'common/input/synthetic_gesture_packet.cc',
- 'common/input/synthetic_gesture_packet.h',
- 'common/input/synthetic_gesture_params.cc',
- 'common/input/synthetic_gesture_params.h',
- 'common/input/synthetic_pinch_gesture_params.cc',
- 'common/input/synthetic_pinch_gesture_params.h',
- 'common/input/synthetic_smooth_scroll_gesture_params.cc',
- 'common/input/synthetic_smooth_scroll_gesture_params.h',
- 'common/input/synthetic_tap_gesture_params.cc',
- 'common/input/synthetic_tap_gesture_params.h',
- 'common/input/synthetic_web_input_event_builders.cc',
- 'common/input/synthetic_web_input_event_builders.h',
- 'common/input/web_input_event_traits.cc',
- 'common/input/web_input_event_traits.h',
- 'common/input/web_touch_event_traits.cc',
- 'common/input/web_touch_event_traits.h',
- 'common/input_messages.h',
- 'common/inter_process_time_ticks_converter.cc',
- 'common/inter_process_time_ticks_converter.h',
- 'common/java_bridge_messages.h',
- 'common/mac/attributed_string_coder.h',
- 'common/mac/attributed_string_coder.mm',
- 'common/mac/font_descriptor.h',
- 'common/mac/font_descriptor.mm',
- 'common/mac/font_loader.h',
- 'common/mac/font_loader.mm',
- 'common/media/audio_messages.h',
- 'common/media/cdm_messages.h',
- 'common/media/cdm_messages_enums.h',
- 'common/media/media_param_traits.cc',
- 'common/media/media_param_traits.h',
- 'common/media/media_player_messages_android.h',
- 'common/media/media_player_messages_enums_android.h',
- 'common/media/media_stream_messages.h',
- 'common/media/media_stream_options.cc',
- 'common/media/media_stream_options.h',
- 'common/media/media_stream_track_metrics_host_messages.h',
- 'common/media/midi_messages.h',
- 'common/media/video_capture.h',
- 'common/media/video_capture_messages.h',
- 'common/media/webrtc_identity_messages.h',
- 'common/memory_benchmark_messages.h',
- 'common/message_port_messages.h',
- 'common/message_router.cc',
- 'common/message_router.h',
- 'common/mime_registry_messages.h',
- 'common/mojo/mojo_messages.h',
- 'common/mojo/mojo_service_names.cc',
- 'common/mojo/mojo_service_names.h',
- 'common/navigation_gesture.h',
- 'common/net/url_fetcher.cc',
- 'common/net/url_request_user_data.cc',
- 'common/net/url_request_user_data.h',
- 'common/one_writer_seqlock.cc',
- 'common/one_writer_seqlock.h',
- 'common/p2p_messages.h',
- 'common/page_state_serialization.cc',
- 'common/page_state_serialization.h',
- 'common/page_zoom.cc',
- 'common/pepper_messages.h',
- 'common/pepper_plugin_list.cc',
- 'common/pepper_plugin_list.h',
- 'common/pepper_renderer_instance_data.cc',
- 'common/pepper_renderer_instance_data.h',
- 'common/plugin_carbon_interpose_constants_mac.cc',
- 'common/plugin_carbon_interpose_constants_mac.h',
- 'common/plugin_constants_win.cc',
- 'common/plugin_constants_win.h',
- 'common/plugin_list.cc',
- 'common/plugin_list.h',
- 'common/plugin_list_mac.mm',
- 'common/plugin_list_posix.cc',
- 'common/plugin_list_win.cc',
- 'common/plugin_process_messages.h',
- 'common/power_monitor_messages.h',
- 'common/process_type.cc',
- 'common/push_messaging_messages.h',
- 'common/quota_messages.h',
- 'common/resource_messages.cc',
- 'common/resource_messages.h',
- 'common/resource_request_body.cc',
- 'common/resource_request_body.h',
- 'common/sandbox_init_mac.cc',
- 'common/sandbox_init_mac.h',
- 'common/sandbox_init_win.cc',
- 'common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc',
- 'common/sandbox_linux/android/sandbox_bpf_base_policy_android.h',
- 'common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc',
- 'common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.h',
- 'common/sandbox_linux/bpf_gpu_policy_linux.cc',
- 'common/sandbox_linux/bpf_gpu_policy_linux.h',
- 'common/sandbox_linux/bpf_ppapi_policy_linux.cc',
- 'common/sandbox_linux/bpf_ppapi_policy_linux.h',
- 'common/sandbox_linux/bpf_renderer_policy_linux.cc',
- 'common/sandbox_linux/bpf_renderer_policy_linux.h',
- 'common/sandbox_linux/sandbox_bpf_base_policy_linux.cc',
- 'common/sandbox_linux/sandbox_bpf_base_policy_linux.h',
- 'common/sandbox_linux/sandbox_init_linux.cc',
- 'common/sandbox_linux/sandbox_linux.cc',
- 'common/sandbox_linux/sandbox_linux.h',
- 'common/sandbox_linux/sandbox_seccomp_bpf_linux.cc',
- 'common/sandbox_linux/sandbox_seccomp_bpf_linux.h',
- 'common/sandbox_mac.h',
- 'common/sandbox_mac.mm',
- 'common/sandbox_util.cc',
- 'common/sandbox_util.h',
- 'common/sandbox_win.cc',
- 'common/sandbox_win.h',
- 'common/savable_url_schemes.cc',
- 'common/savable_url_schemes.h',
- 'common/screen_orientation_messages.h',
- 'common/service_worker/embedded_worker_messages.h',
- 'common/service_worker/service_worker_messages.h',
- 'common/service_worker/service_worker_status_code.cc',
- 'common/service_worker/service_worker_status_code.h',
- 'common/service_worker/service_worker_types.cc',
- 'common/service_worker/service_worker_types.h',
- 'common/set_process_title.cc',
- 'common/set_process_title.h',
- 'common/set_process_title_linux.cc',
- 'common/set_process_title_linux.h',
- 'common/socket_stream.h',
- 'common/socket_stream_handle_data.h',
- 'common/socket_stream_messages.h',
- 'common/speech_recognition_messages.h',
- 'common/ssl_status_serialization.cc',
- 'common/ssl_status_serialization.h',
- 'common/swapped_out_messages.cc',
- 'common/swapped_out_messages.h',
- 'common/text_input_client_messages.h',
- 'common/url_schemes.cc',
- 'common/url_schemes.h',
- 'common/user_agent.cc',
- 'common/user_agent_ios.mm',
- 'common/utility_messages.h',
- 'common/view_message_enums.h',
- 'common/view_messages.h',
- 'common/webplugin_geometry.cc',
- 'common/webplugin_geometry.h',
- 'common/websocket.cc',
- 'common/websocket.h',
- 'common/websocket_messages.h',
- 'common/worker_messages.h',
- 'common/zygote_commands_linux.h',
+ '<@(public_common_sources)',
+ '<@(private_common_sources)',
],
'target_conditions': [
['OS=="android" and <(use_seccomp_bpf)==1', {
@@ -465,11 +475,6 @@
}],
],
'conditions': [
- ['use_aura==1', {
- 'sources!': [
- 'common/cursors/webcursor_mac.mm',
- ],
- }],
['OS=="ios"', {
# iOS has different user-agent construction utilities, since the
# version strings is not derived from webkit_version, and follows
@@ -524,7 +529,30 @@
'../webkit/common/webkit_common.gyp:webkit_common',
'../webkit/storage_browser.gyp:webkit_storage_browser',
'../webkit/storage_common.gyp:webkit_storage_common',
- 'content.gyp:webkit_version',
+ ],
+ 'actions': [
+ {
+ 'action_name': 'generate_webkit_version',
+ 'inputs': [
+ '<(script)',
+ '<(lastchange)',
+ '<(template)',
+ ],
+ 'outputs': [
+ '<(SHARED_INTERMEDIATE_DIR)/webkit_version.h',
+ ],
+ 'action': ['python',
+ '<(script)',
+ '-f', '<(lastchange)',
+ '<(template)',
+ '<@(_outputs)',
+ ],
+ 'variables': {
+ 'script': '<(DEPTH)/build/util/version.py',
+ 'lastchange': '<(DEPTH)/build/util/LASTCHANGE.blink',
+ 'template': 'webkit_version.h.in',
+ },
+ },
],
}],
['OS=="mac"', {
diff --git a/content/content_common.target.darwin-arm.mk b/content/content_common.target.darwin-arm.mk
index 7460725623..c74e460051 100644
--- a/content/content_common.target.darwin-arm.mk
+++ b/content/content_common.target.darwin-arm.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -184,7 +197,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -217,12 +237,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -234,10 +259,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -297,6 +324,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -347,7 +375,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -380,12 +415,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -397,10 +437,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -461,6 +503,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.darwin-arm64.mk b/content/content_common.target.darwin-arm64.mk
index e4a18e87c7..bf5df4aede 100644
--- a/content/content_common.target.darwin-arm64.mk
+++ b/content/content_common.target.darwin-arm64.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -212,12 +225,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +246,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -291,6 +311,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -370,12 +391,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -386,10 +412,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -450,6 +478,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.darwin-mips.mk b/content/content_common.target.darwin-mips.mk
index 2dd308e172..8c9a6126d2 100644
--- a/content/content_common.target.darwin-mips.mk
+++ b/content/content_common.target.darwin-mips.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -182,6 +195,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -215,12 +229,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -231,10 +250,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -294,6 +315,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -344,6 +366,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -377,12 +400,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -393,10 +421,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -457,6 +487,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.darwin-x86.mk b/content/content_common.target.darwin-x86.mk
index 9c9d2c9770..d4f762e6b4 100644
--- a/content/content_common.target.darwin-x86.mk
+++ b/content/content_common.target.darwin-x86.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -183,6 +196,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -218,12 +232,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -234,10 +253,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -297,6 +318,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -345,6 +367,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -380,12 +403,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -396,10 +424,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -460,6 +490,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.darwin-x86_64.mk b/content/content_common.target.darwin-x86_64.mk
index 4a1c672f88..71d430905b 100644
--- a/content/content_common.target.darwin-x86_64.mk
+++ b/content/content_common.target.darwin-x86_64.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -218,12 +231,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -235,10 +253,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -298,6 +318,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -381,12 +402,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -398,10 +424,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -462,6 +490,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.linux-arm.mk b/content/content_common.target.linux-arm.mk
index 7460725623..c74e460051 100644
--- a/content/content_common.target.linux-arm.mk
+++ b/content/content_common.target.linux-arm.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -184,7 +197,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -217,12 +237,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -234,10 +259,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -297,6 +324,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -347,7 +375,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -380,12 +415,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -397,10 +437,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -461,6 +503,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.linux-arm64.mk b/content/content_common.target.linux-arm64.mk
index e4a18e87c7..bf5df4aede 100644
--- a/content/content_common.target.linux-arm64.mk
+++ b/content/content_common.target.linux-arm64.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -212,12 +225,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,10 +246,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -291,6 +311,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -370,12 +391,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -386,10 +412,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -450,6 +478,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.linux-mips.mk b/content/content_common.target.linux-mips.mk
index 2dd308e172..8c9a6126d2 100644
--- a/content/content_common.target.linux-mips.mk
+++ b/content/content_common.target.linux-mips.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -182,6 +195,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -215,12 +229,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -231,10 +250,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -294,6 +315,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -344,6 +366,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -377,12 +400,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DPOSIX_AVOID_MMAP' \
@@ -393,10 +421,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -457,6 +487,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.linux-x86.mk b/content/content_common.target.linux-x86.mk
index 9c9d2c9770..d4f762e6b4 100644
--- a/content/content_common.target.linux-x86.mk
+++ b/content/content_common.target.linux-x86.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -183,6 +196,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -218,12 +232,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -234,10 +253,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -297,6 +318,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -345,6 +367,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -380,12 +403,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -396,10 +424,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -460,6 +490,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common.target.linux-x86_64.mk b/content/content_common.target.linux-x86_64.mk
index 4a1c672f88..71d430905b 100644
--- a/content/content_common.target.linux-x86_64.mk
+++ b/content/content_common.target.linux-x86_64.mk
@@ -22,11 +22,23 @@ GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
- $(call intermediates-dir-for,GYP,content_webkit_version_gyp,,,$(GYP_VAR_PREFIX))/webkit_version.stamp \
$(call intermediates-dir-for,GYP,content_content_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/content_jni_headers.stamp \
$(call intermediates-dir-for,GYP,content_common_aidl_gyp,,,$(GYP_VAR_PREFIX))/common_aidl.stamp
-GYP_GENERATED_OUTPUTS :=
+### Rules for action "generate_webkit_version":
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: content_content_gyp_content_common_target_generate_webkit_version ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/webkit_version.h
# Make sure our deps and generated files are built first.
LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
@@ -57,6 +69,7 @@ LOCAL_SRC_FILES := \
content/public/common/page_transition_types.cc \
content/public/common/pepper_plugin_info.cc \
content/public/common/renderer_preferences.cc \
+ content/public/common/resource_response_info.cc \
content/public/common/sandboxed_process_launcher_delegate.cc \
content/public/common/show_desktop_notification_params.cc \
content/public/common/signed_certificate_timestamp_id_and_status.cc \
@@ -218,12 +231,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -235,10 +253,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -298,6 +318,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -381,12 +402,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_SECCOMP_BPF' \
'-DMOJO_USE_SYSTEM_IMPL' \
@@ -398,10 +424,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -462,6 +490,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
diff --git a/content/content_common_mojo_bindings.gypi b/content/content_common_mojo_bindings.gypi
index cf799722e8..7f35e67fdf 100644
--- a/content/content_common_mojo_bindings.gypi
+++ b/content/content_common_mojo_bindings.gypi
@@ -14,11 +14,6 @@
'sources': [
'common/web_ui_setup.mojom',
],
- # TODO(sky): this shouldn't be necessary. It's working around a bug in
- # gyp.
- 'variables': {
- 'mojom_base_output_dir': 'content',
- },
'includes': [ '../mojo/public/tools/bindings/mojom_bindings_generator.gypi' ],
'export_dependent_settings': [
'../mojo/mojo.gyp:mojo_cpp_bindings',
diff --git a/content/content_common_mojo_bindings.target.darwin-arm.mk b/content/content_common_mojo_bindings.target.darwin-arm.mk
index c8dc3be4e3..01d716e8ce 100644
--- a/content/content_common_mojo_bindings.target.darwin-arm.mk
+++ b/content/content_common_mojo_bindings.target.darwin-arm.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -66,7 +66,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -155,7 +167,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -188,12 +207,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.darwin-arm64.mk b/content/content_common_mojo_bindings.target.darwin-arm64.mk
index 34e3f0406c..57deced37e 100644
--- a/content/content_common_mojo_bindings.target.darwin-arm64.mk
+++ b/content/content_common_mojo_bindings.target.darwin-arm64.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -181,12 +186,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.darwin-mips.mk b/content/content_common_mojo_bindings.target.darwin-mips.mk
index fc51acbd36..f0b409a9f1 100644
--- a/content/content_common_mojo_bindings.target.darwin-mips.mk
+++ b/content/content_common_mojo_bindings.target.darwin-mips.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -99,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -155,6 +161,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -188,12 +195,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.darwin-x86.mk b/content/content_common_mojo_bindings.target.darwin-x86.mk
index 8ea9b0bf3a..2dac4e21f3 100644
--- a/content/content_common_mojo_bindings.target.darwin-x86.mk
+++ b/content/content_common_mojo_bindings.target.darwin-x86.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -65,6 +65,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -189,12 +196,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.darwin-x86_64.mk b/content/content_common_mojo_bindings.target.darwin-x86_64.mk
index 293f58deb8..ac08b30967 100644
--- a/content/content_common_mojo_bindings.target.darwin-x86_64.mk
+++ b/content/content_common_mojo_bindings.target.darwin-x86_64.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -189,12 +194,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.linux-arm.mk b/content/content_common_mojo_bindings.target.linux-arm.mk
index c8dc3be4e3..01d716e8ce 100644
--- a/content/content_common_mojo_bindings.target.linux-arm.mk
+++ b/content/content_common_mojo_bindings.target.linux-arm.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -66,7 +66,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -99,12 +106,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -155,7 +167,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -188,12 +207,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.linux-arm64.mk b/content/content_common_mojo_bindings.target.linux-arm64.mk
index 34e3f0406c..57deced37e 100644
--- a/content/content_common_mojo_bindings.target.linux-arm64.mk
+++ b/content/content_common_mojo_bindings.target.linux-arm64.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -96,12 +96,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -181,12 +186,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.linux-mips.mk b/content/content_common_mojo_bindings.target.linux-mips.mk
index fc51acbd36..f0b409a9f1 100644
--- a/content/content_common_mojo_bindings.target.linux-mips.mk
+++ b/content/content_common_mojo_bindings.target.linux-mips.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -99,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -155,6 +161,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -188,12 +195,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.linux-x86.mk b/content/content_common_mojo_bindings.target.linux-x86.mk
index 8ea9b0bf3a..2dac4e21f3 100644
--- a/content/content_common_mojo_bindings.target.linux-x86.mk
+++ b/content/content_common_mojo_bindings.target.linux-x86.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -65,6 +65,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -100,12 +101,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -154,6 +160,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -189,12 +196,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_common_mojo_bindings.target.linux-x86_64.mk b/content/content_common_mojo_bindings.target.linux-x86_64.mk
index 293f58deb8..ac08b30967 100644
--- a/content/content_common_mojo_bindings.target.linux-x86_64.mk
+++ b/content/content_common_mojo_bindings.target.linux-x86_64.mk
@@ -15,13 +15,13 @@ GYP_TARGET_DEPENDENCIES :=
### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/error.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py', 'mojom_base_output_dir': 'content'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/web_ui_setup.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', './%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '--use_chromium_bundled_pylibs', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_local_path := $(LOCAL_PATH)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_var_prefix := $(GYP_VAR_PREFIX)
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc: $(LOCAL_PATH)/content/common/web_ui_setup.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_request_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_response_validator_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/error.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
mkdir -p $(gyp_shared_intermediate_dir)/content/common; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/web_ui_setup.mojom --use_chromium_bundled_pylibs -d .. -o "$(gyp_shared_intermediate_dir)/content/common"
$(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.h: $(gyp_shared_intermediate_dir)/content/common/web_ui_setup.mojom.cc ;
@@ -100,12 +100,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -189,12 +194,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
diff --git a/content/content_gpu.gypi b/content/content_gpu.gypi
index 14ae89691f..4827493610 100644
--- a/content/content_gpu.gypi
+++ b/content/content_gpu.gypi
@@ -5,7 +5,7 @@
{
'dependencies': [
'../base/base.gyp:base',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../skia/skia.gyp:skia',
'../ui/gl/gl.gyp:gl',
],
diff --git a/content/content_gpu.target.darwin-arm.mk b/content/content_gpu.target.darwin-arm.mk
index 1ee058f9ef..802c2d7084 100644
--- a/content/content_gpu.target.darwin-arm.mk
+++ b/content/content_gpu.target.darwin-arm.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -48,7 +48,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -81,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -96,10 +108,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -173,7 +187,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -206,12 +227,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,10 +247,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -332,7 +360,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.darwin-arm64.mk b/content/content_gpu.target.darwin-arm64.mk
index 1bfaac1366..7a1a9c401e 100644
--- a/content/content_gpu.target.darwin-arm64.mk
+++ b/content/content_gpu.target.darwin-arm64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -78,12 +78,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -93,10 +98,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -199,12 +206,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -214,10 +226,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -316,7 +330,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.darwin-mips.mk b/content/content_gpu.target.darwin-mips.mk
index 8e4bdbe655..ab5ef13ad3 100644
--- a/content/content_gpu.target.darwin-mips.mk
+++ b/content/content_gpu.target.darwin-mips.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -48,6 +48,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -81,12 +82,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -96,10 +102,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -173,6 +181,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -206,12 +215,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,10 +235,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +344,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.darwin-x86.mk b/content/content_gpu.target.darwin-x86.mk
index 8dc1ab0467..1235e36740 100644
--- a/content/content_gpu.target.darwin-x86.mk
+++ b/content/content_gpu.target.darwin-x86.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -47,6 +47,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -82,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -97,10 +103,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -172,6 +180,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -207,12 +216,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -222,10 +236,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +344,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.darwin-x86_64.mk b/content/content_gpu.target.darwin-x86_64.mk
index 434e025716..e085081824 100644
--- a/content/content_gpu.target.darwin-x86_64.mk
+++ b/content/content_gpu.target.darwin-x86_64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -82,12 +82,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -97,10 +102,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -207,12 +214,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -222,10 +234,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +342,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.linux-arm.mk b/content/content_gpu.target.linux-arm.mk
index 1ee058f9ef..802c2d7084 100644
--- a/content/content_gpu.target.linux-arm.mk
+++ b/content/content_gpu.target.linux-arm.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -48,7 +48,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -81,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -96,10 +108,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -173,7 +187,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -206,12 +227,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,10 +247,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -332,7 +360,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.linux-arm64.mk b/content/content_gpu.target.linux-arm64.mk
index 1bfaac1366..7a1a9c401e 100644
--- a/content/content_gpu.target.linux-arm64.mk
+++ b/content/content_gpu.target.linux-arm64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -78,12 +78,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -93,10 +98,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -199,12 +206,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -214,10 +226,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -316,7 +330,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.linux-mips.mk b/content/content_gpu.target.linux-mips.mk
index 8e4bdbe655..ab5ef13ad3 100644
--- a/content/content_gpu.target.linux-mips.mk
+++ b/content/content_gpu.target.linux-mips.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -48,6 +48,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -81,12 +82,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -96,10 +102,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -173,6 +181,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -206,12 +215,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,10 +235,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +344,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.linux-x86.mk b/content/content_gpu.target.linux-x86.mk
index 8dc1ab0467..1235e36740 100644
--- a/content/content_gpu.target.linux-x86.mk
+++ b/content/content_gpu.target.linux-x86.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -47,6 +47,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -82,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -97,10 +103,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -172,6 +180,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -207,12 +216,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -222,10 +236,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +344,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_gpu.target.linux-x86_64.mk b/content/content_gpu.target.linux-x86_64.mk
index 434e025716..e085081824 100644
--- a/content/content_gpu.target.linux-x86_64.mk
+++ b/content/content_gpu.target.linux-x86_64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
@@ -82,12 +82,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -97,10 +102,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -207,12 +214,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -222,10 +234,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -328,7 +342,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_gl_gl_gyp
diff --git a/content/content_jni.gypi b/content/content_jni.gypi
index 4418e773c4..fb1f7760fd 100644
--- a/content/content_jni.gypi
+++ b/content/content_jni.gypi
@@ -42,7 +42,6 @@
],
'variables': {
'jni_gen_package': 'content',
- 'jni_generator_ptr_type': 'long',
},
'includes': [ '../build/jni_generator.gypi' ],
}
diff --git a/content/content_jni_headers.target.darwin-arm.mk b/content/content_jni_headers.target.darwin-arm.mk
index ea7435e756..6055e4b4d7 100644
--- a/content/content_jni_headers.target.darwin-arm.mk
+++ b/content/content_jni_headers.target.darwin-arm.mk
@@ -386,7 +386,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -419,12 +426,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -471,7 +483,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -504,12 +523,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.darwin-arm64.mk b/content/content_jni_headers.target.darwin-arm64.mk
index bed7dbafad..e74609d450 100644
--- a/content/content_jni_headers.target.darwin-arm64.mk
+++ b/content/content_jni_headers.target.darwin-arm64.mk
@@ -416,12 +416,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -497,12 +502,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.darwin-mips.mk b/content/content_jni_headers.target.darwin-mips.mk
index c3735cfdcf..f2d1682101 100644
--- a/content/content_jni_headers.target.darwin-mips.mk
+++ b/content/content_jni_headers.target.darwin-mips.mk
@@ -386,6 +386,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -419,12 +420,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -471,6 +477,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -504,12 +511,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.darwin-x86.mk b/content/content_jni_headers.target.darwin-x86.mk
index 3492a82890..074bad8778 100644
--- a/content/content_jni_headers.target.darwin-x86.mk
+++ b/content/content_jni_headers.target.darwin-x86.mk
@@ -385,6 +385,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -420,12 +421,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -470,6 +476,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -505,12 +512,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.darwin-x86_64.mk b/content/content_jni_headers.target.darwin-x86_64.mk
index fcea0c6cda..99fccbaa28 100644
--- a/content/content_jni_headers.target.darwin-x86_64.mk
+++ b/content/content_jni_headers.target.darwin-x86_64.mk
@@ -420,12 +420,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -505,12 +510,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.linux-arm.mk b/content/content_jni_headers.target.linux-arm.mk
index ea7435e756..6055e4b4d7 100644
--- a/content/content_jni_headers.target.linux-arm.mk
+++ b/content/content_jni_headers.target.linux-arm.mk
@@ -386,7 +386,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -419,12 +426,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -471,7 +483,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -504,12 +523,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.linux-arm64.mk b/content/content_jni_headers.target.linux-arm64.mk
index bed7dbafad..e74609d450 100644
--- a/content/content_jni_headers.target.linux-arm64.mk
+++ b/content/content_jni_headers.target.linux-arm64.mk
@@ -416,12 +416,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -497,12 +502,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.linux-mips.mk b/content/content_jni_headers.target.linux-mips.mk
index c3735cfdcf..f2d1682101 100644
--- a/content/content_jni_headers.target.linux-mips.mk
+++ b/content/content_jni_headers.target.linux-mips.mk
@@ -386,6 +386,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -419,12 +420,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -471,6 +477,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -504,12 +511,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.linux-x86.mk b/content/content_jni_headers.target.linux-x86.mk
index 3492a82890..074bad8778 100644
--- a/content/content_jni_headers.target.linux-x86.mk
+++ b/content/content_jni_headers.target.linux-x86.mk
@@ -385,6 +385,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -420,12 +421,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -470,6 +476,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -505,12 +512,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_jni_headers.target.linux-x86_64.mk b/content/content_jni_headers.target.linux-x86_64.mk
index fcea0c6cda..99fccbaa28 100644
--- a/content/content_jni_headers.target.linux-x86_64.mk
+++ b/content/content_jni_headers.target.linux-x86_64.mk
@@ -420,12 +420,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -505,12 +510,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/content_plugin.gypi b/content/content_plugin.gypi
index a8fa444fd7..c6baab9a99 100644
--- a/content/content_plugin.gypi
+++ b/content/content_plugin.gypi
@@ -6,7 +6,7 @@
'conditions': [
['enable_plugins==1 and OS!="linux"', {
'dependencies': [
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../skia/skia.gyp:skia',
'../third_party/WebKit/public/blink.gyp:blink',
'../third_party/npapi/npapi.gyp:npapi',
diff --git a/content/content_ppapi_plugin.gypi b/content/content_ppapi_plugin.gypi
index 0757a7d275..f79e1bfa34 100644
--- a/content/content_ppapi_plugin.gypi
+++ b/content/content_ppapi_plugin.gypi
@@ -7,7 +7,7 @@
['enable_plugins==1', {
'dependencies': [
'../base/base.gyp:base',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../ppapi/ppapi_internal.gyp:ppapi_ipc',
'../ui/base/ui_base.gyp:ui_base',
'../ui/gfx/gfx.gyp:gfx',
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index 80fd4ec77c..5b39957983 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -10,7 +10,7 @@
'../media/media.gyp:media',
'../mojo/mojo.gyp:mojo_environment_chromium',
'../mojo/mojo.gyp:mojo_js_bindings_lib',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../net/net.gyp:net',
'../skia/skia.gyp:skia',
'../third_party/WebKit/public/blink.gyp:blink',
@@ -35,517 +35,679 @@
'..',
'<(SHARED_INTERMEDIATE_DIR)', # Needed by key_systems.cc.
],
+ 'variables': {
+ 'public_renderer_sources': [
+ 'public/renderer/android_content_detection_prefixes.cc',
+ 'public/renderer/android_content_detection_prefixes.h',
+ 'public/renderer/content_renderer_client.cc',
+ 'public/renderer/content_renderer_client.h',
+ 'public/renderer/context_menu_client.h',
+ 'public/renderer/document_state.cc',
+ 'public/renderer/document_state.h',
+ 'public/renderer/key_system_info.cc',
+ 'public/renderer/key_system_info.h',
+ 'public/renderer/navigation_state.cc',
+ 'public/renderer/navigation_state.h',
+ 'public/renderer/pepper_plugin_instance.h',
+ 'public/renderer/renderer_ppapi_host.h',
+ 'public/renderer/render_frame.h',
+ 'public/renderer/render_frame_observer.cc',
+ 'public/renderer/render_frame_observer.h',
+ 'public/renderer/render_frame_observer_tracker.h',
+ 'public/renderer/render_font_warmup_win.cc',
+ 'public/renderer/render_font_warmup_win.h',
+ 'public/renderer/render_process_observer.cc',
+ 'public/renderer/render_process_observer.h',
+ 'public/renderer/render_thread.cc',
+ 'public/renderer/render_thread.h',
+ 'public/renderer/render_view.h',
+ 'public/renderer/render_view_observer.cc',
+ 'public/renderer/render_view_observer.h',
+ 'public/renderer/render_view_observer_tracker.h',
+ 'public/renderer/render_view_visitor.h',
+ 'public/renderer/resource_fetcher.h',
+ 'public/renderer/v8_value_converter.h',
+ 'public/renderer/video_encode_accelerator.cc',
+ 'public/renderer/video_encode_accelerator.h',
+ 'public/renderer/web_preferences.h',
+ ],
+ 'private_renderer_sources': [
+ 'renderer/accessibility/blink_ax_enum_conversion.cc',
+ 'renderer/accessibility/blink_ax_enum_conversion.h',
+ 'renderer/accessibility/blink_ax_tree_source.cc',
+ 'renderer/accessibility/blink_ax_tree_source.h',
+ 'renderer/accessibility/renderer_accessibility.cc',
+ 'renderer/accessibility/renderer_accessibility.h',
+ 'renderer/accessibility/renderer_accessibility_complete.cc',
+ 'renderer/accessibility/renderer_accessibility_complete.h',
+ 'renderer/accessibility/renderer_accessibility_focus_only.cc',
+ 'renderer/accessibility/renderer_accessibility_focus_only.h',
+ 'renderer/active_notification_tracker.cc',
+ 'renderer/active_notification_tracker.h',
+ 'renderer/android/address_detector.cc',
+ 'renderer/android/address_detector.h',
+ 'renderer/android/content_detector.cc',
+ 'renderer/android/content_detector.h',
+ 'renderer/android/email_detector.cc',
+ 'renderer/android/email_detector.h',
+ 'renderer/android/phone_number_detector.cc',
+ 'renderer/android/phone_number_detector.h',
+ 'renderer/android/synchronous_compositor_factory.cc',
+ 'renderer/android/synchronous_compositor_factory.h',
+ 'renderer/battery_status/battery_status_dispatcher.cc',
+ 'renderer/battery_status/battery_status_dispatcher.h',
+ 'renderer/browser_plugin/browser_plugin.cc',
+ 'renderer/browser_plugin/browser_plugin.h',
+ 'renderer/browser_plugin/browser_plugin_bindings.cc',
+ 'renderer/browser_plugin/browser_plugin_bindings.h',
+ 'renderer/browser_plugin/browser_plugin_manager_factory.h',
+ 'renderer/browser_plugin/browser_plugin_manager_impl.cc',
+ 'renderer/browser_plugin/browser_plugin_manager_impl.h',
+ 'renderer/browser_plugin/browser_plugin_manager.cc',
+ 'renderer/browser_plugin/browser_plugin_manager.h',
+ 'renderer/clipboard_utils.cc',
+ 'renderer/clipboard_utils.h',
+ 'renderer/child_frame_compositing_helper.cc',
+ 'renderer/child_frame_compositing_helper.h',
+ 'renderer/context_menu_params_builder.cc',
+ 'renderer/context_menu_params_builder.h',
+ 'renderer/cursor_utils.cc',
+ 'renderer/cursor_utils.h',
+ 'renderer/date_time_suggestion_builder.cc',
+ 'renderer/date_time_suggestion_builder.h',
+ 'renderer/device_sensors/device_motion_event_pump.cc',
+ 'renderer/device_sensors/device_motion_event_pump.h',
+ 'renderer/device_sensors/device_orientation_event_pump.cc',
+ 'renderer/device_sensors/device_orientation_event_pump.h',
+ 'renderer/device_sensors/device_sensor_event_pump.cc',
+ 'renderer/device_sensors/device_sensor_event_pump.h',
+ 'renderer/devtools/devtools_agent.cc',
+ 'renderer/devtools/devtools_agent.h',
+ 'renderer/devtools/devtools_agent_filter.cc',
+ 'renderer/devtools/devtools_agent_filter.h',
+ 'renderer/devtools/devtools_client.cc',
+ 'renderer/devtools/devtools_client.h',
+ 'renderer/disambiguation_popup_helper.cc',
+ 'renderer/disambiguation_popup_helper.h',
+ 'renderer/dom_automation_controller.cc',
+ 'renderer/dom_automation_controller.h',
+ 'renderer/dom_storage/dom_storage_cached_area.cc',
+ 'renderer/dom_storage/dom_storage_cached_area.h',
+ 'renderer/dom_storage/dom_storage_dispatcher.cc',
+ 'renderer/dom_storage/dom_storage_dispatcher.h',
+ 'renderer/dom_storage/dom_storage_proxy.h',
+ 'renderer/dom_storage/webstoragearea_impl.cc',
+ 'renderer/dom_storage/webstoragearea_impl.h',
+ 'renderer/dom_storage/webstoragenamespace_impl.cc',
+ 'renderer/dom_storage/webstoragenamespace_impl.h',
+ 'renderer/drop_data_builder.cc',
+ 'renderer/drop_data_builder.h',
+ 'renderer/fetchers/image_resource_fetcher.cc',
+ 'renderer/fetchers/image_resource_fetcher.h',
+ 'renderer/fetchers/multi_resolution_image_resource_fetcher.cc',
+ 'renderer/fetchers/multi_resolution_image_resource_fetcher.h',
+ 'renderer/fetchers/resource_fetcher_impl.cc',
+ 'renderer/fetchers/resource_fetcher_impl.h',
+ 'renderer/gamepad_shared_memory_reader.cc',
+ 'renderer/gamepad_shared_memory_reader.h',
+ 'renderer/geolocation_dispatcher.cc',
+ 'renderer/geolocation_dispatcher.h',
+ 'renderer/gpu/compositor_output_surface.cc',
+ 'renderer/gpu/compositor_output_surface.h',
+ 'renderer/gpu/compositor_software_output_device.cc',
+ 'renderer/gpu/compositor_software_output_device.h',
+ 'renderer/gpu/delegated_compositor_output_surface.cc',
+ 'renderer/gpu/delegated_compositor_output_surface.h',
+ 'renderer/gpu/gpu_benchmarking_extension.cc',
+ 'renderer/gpu/gpu_benchmarking_extension.h',
+ 'renderer/gpu/mailbox_output_surface.cc',
+ 'renderer/gpu/mailbox_output_surface.h',
+ 'renderer/gpu/render_widget_compositor.cc',
+ 'renderer/gpu/render_widget_compositor.h',
+ 'renderer/gpu/stream_texture_host_android.cc',
+ 'renderer/gpu/stream_texture_host_android.h',
+ 'renderer/history_controller.cc',
+ 'renderer/history_controller.h',
+ 'renderer/history_entry.cc',
+ 'renderer/history_entry.h',
+ 'renderer/history_serialization.cc',
+ 'renderer/history_serialization.h',
+ 'renderer/idle_user_detector.cc',
+ 'renderer/idle_user_detector.h',
+ 'renderer/image_loading_helper.cc',
+ 'renderer/image_loading_helper.h',
+ 'renderer/ime_event_guard.cc',
+ 'renderer/ime_event_guard.h',
+ 'renderer/in_process_renderer_thread.cc',
+ 'renderer/in_process_renderer_thread.h',
+ 'renderer/input/input_event_filter.cc',
+ 'renderer/input/input_event_filter.h',
+ 'renderer/input/input_handler_manager.cc',
+ 'renderer/input/input_handler_manager.h',
+ 'renderer/input/input_handler_manager_client.h',
+ 'renderer/input/input_handler_proxy.cc',
+ 'renderer/input/input_handler_proxy.h',
+ 'renderer/input/input_handler_wrapper.cc',
+ 'renderer/input/input_handler_wrapper.h',
+ 'renderer/internal_document_state_data.cc',
+ 'renderer/internal_document_state_data.h',
+ 'renderer/java/gin_java_bridge_dispatcher.cc',
+ 'renderer/java/gin_java_bridge_dispatcher.h',
+ 'renderer/java/gin_java_bridge_object.cc',
+ 'renderer/java/gin_java_bridge_object.h',
+ 'renderer/java/gin_java_bridge_value_converter.cc',
+ 'renderer/java/gin_java_bridge_value_converter.h',
+ 'renderer/java/java_bridge_channel.cc',
+ 'renderer/java/java_bridge_channel.h',
+ 'renderer/java/java_bridge_dispatcher.cc',
+ 'renderer/java/java_bridge_dispatcher.h',
+ 'renderer/media/active_loader.cc',
+ 'renderer/media/active_loader.h',
+ 'renderer/media/android/audio_decoder_android.cc',
+ 'renderer/media/android/audio_decoder_android.h',
+ 'renderer/media/android/media_info_loader.cc',
+ 'renderer/media/android/media_info_loader.h',
+ 'renderer/media/android/media_source_delegate.cc',
+ 'renderer/media/android/media_source_delegate.h',
+ 'renderer/media/android/renderer_demuxer_android.cc',
+ 'renderer/media/android/renderer_demuxer_android.h',
+ 'renderer/media/android/renderer_media_player_manager.cc',
+ 'renderer/media/android/renderer_media_player_manager.h',
+ 'renderer/media/android/stream_texture_factory.h',
+ 'renderer/media/android/stream_texture_factory_impl.cc',
+ 'renderer/media/android/stream_texture_factory_impl.h',
+ 'renderer/media/android/stream_texture_factory_synchronous_impl.cc',
+ 'renderer/media/android/stream_texture_factory_synchronous_impl.h',
+ 'renderer/media/android/webmediaplayer_android.cc',
+ 'renderer/media/android/webmediaplayer_android.h',
+ 'renderer/media/audio_decoder.cc',
+ 'renderer/media/audio_decoder.h',
+ 'renderer/media/audio_device_factory.cc',
+ 'renderer/media/audio_device_factory.h',
+ 'renderer/media/audio_input_message_filter.cc',
+ 'renderer/media/audio_input_message_filter.h',
+ 'renderer/media/audio_message_filter.cc',
+ 'renderer/media/audio_message_filter.h',
+ 'renderer/media/audio_renderer_mixer_manager.cc',
+ 'renderer/media/audio_renderer_mixer_manager.h',
+ 'renderer/media/buffered_data_source.cc',
+ 'renderer/media/buffered_data_source.h',
+ 'renderer/media/buffered_data_source_host_impl.h',
+ 'renderer/media/buffered_data_source_host_impl.cc',
+ 'renderer/media/buffered_resource_loader.cc',
+ 'renderer/media/buffered_resource_loader.h',
+ 'renderer/media/cache_util.cc',
+ 'renderer/media/cache_util.h',
+ 'renderer/media/cdm_session_adapter.cc',
+ 'renderer/media/cdm_session_adapter.h',
+ 'renderer/media/crypto/content_decryption_module_factory.cc',
+ 'renderer/media/crypto/content_decryption_module_factory.h',
+ 'renderer/media/crypto/key_systems.cc',
+ 'renderer/media/crypto/key_systems.h',
+ 'renderer/media/crypto/key_systems_support_uma.cc',
+ 'renderer/media/crypto/key_systems_support_uma.h',
+ 'renderer/media/crypto/pepper_cdm_wrapper.h',
+ 'renderer/media/crypto/pepper_cdm_wrapper_impl.cc',
+ 'renderer/media/crypto/pepper_cdm_wrapper_impl.h',
+ 'renderer/media/crypto/ppapi_decryptor.cc',
+ 'renderer/media/crypto/ppapi_decryptor.h',
+ 'renderer/media/crypto/proxy_decryptor.cc',
+ 'renderer/media/crypto/proxy_decryptor.h',
+ 'renderer/media/crypto/proxy_media_keys.cc',
+ 'renderer/media/crypto/proxy_media_keys.h',
+ 'renderer/media/crypto/renderer_cdm_manager.cc',
+ 'renderer/media/crypto/renderer_cdm_manager.h',
+ 'renderer/media/media_stream_audio_level_calculator.cc',
+ 'renderer/media/media_stream_audio_level_calculator.h',
+ 'renderer/media/media_stream_audio_renderer.cc',
+ 'renderer/media/media_stream_audio_renderer.h',
+ 'renderer/media/media_stream_center.h',
+ 'renderer/media/media_stream_constraints_util.cc',
+ 'renderer/media/media_stream_constraints_util.h',
+ 'renderer/media/media_stream_dispatcher.h',
+ 'renderer/media/media_stream_dispatcher_eventhandler.h',
+ 'renderer/media/media_stream_impl.h',
+ 'renderer/media/media_stream_track.cc',
+ 'renderer/media/media_stream_track.h',
+ 'renderer/media/midi_dispatcher.cc',
+ 'renderer/media/midi_dispatcher.h',
+ 'renderer/media/midi_message_filter.cc',
+ 'renderer/media/midi_message_filter.h',
+ 'renderer/media/preload.h',
+ 'renderer/media/render_media_log.cc',
+ 'renderer/media/render_media_log.h',
+ 'renderer/media/renderer_gpu_video_accelerator_factories.cc',
+ 'renderer/media/renderer_gpu_video_accelerator_factories.h',
+ 'renderer/media/renderer_webaudiodevice_impl.cc',
+ 'renderer/media/renderer_webaudiodevice_impl.h',
+ 'renderer/media/renderer_webmidiaccessor_impl.cc',
+ 'renderer/media/renderer_webmidiaccessor_impl.h',
+ 'renderer/media/texttrack_impl.cc',
+ 'renderer/media/texttrack_impl.h',
+ 'renderer/media/video_capture_impl.cc',
+ 'renderer/media/video_capture_impl.h',
+ 'renderer/media/video_capture_impl_manager.cc',
+ 'renderer/media/video_capture_impl_manager.h',
+ 'renderer/media/video_capture_message_filter.cc',
+ 'renderer/media/video_capture_message_filter.h',
+ 'renderer/media/video_frame_compositor.cc',
+ 'renderer/media/video_frame_compositor.h',
+ 'renderer/media/video_frame_provider.cc',
+ 'renderer/media/video_frame_provider.h',
+ 'renderer/media/webaudiosourceprovider_impl.cc',
+ 'renderer/media/webaudiosourceprovider_impl.h',
+ 'renderer/media/webcontentdecryptionmodule_impl.cc',
+ 'renderer/media/webcontentdecryptionmodule_impl.h',
+ 'renderer/media/webcontentdecryptionmodulesession_impl.cc',
+ 'renderer/media/webcontentdecryptionmodulesession_impl.h',
+ 'renderer/media/webinbandtexttrack_impl.cc',
+ 'renderer/media/webinbandtexttrack_impl.h',
+ 'renderer/media/webmediaplayer_delegate.h',
+ 'renderer/media/webmediaplayer_impl.cc',
+ 'renderer/media/webmediaplayer_impl.h',
+ 'renderer/media/webmediaplayer_ms.cc',
+ 'renderer/media/webmediaplayer_ms.h',
+ 'renderer/media/webmediaplayer_params.cc',
+ 'renderer/media/webmediaplayer_params.h',
+ 'renderer/media/webmediaplayer_util.cc',
+ 'renderer/media/webmediaplayer_util.h',
+ 'renderer/media/webmediasource_impl.cc',
+ 'renderer/media/webmediasource_impl.h',
+ 'renderer/media/websourcebuffer_impl.cc',
+ 'renderer/media/websourcebuffer_impl.h',
+ 'renderer/memory_benchmarking_extension.cc',
+ 'renderer/memory_benchmarking_extension.h',
+ 'renderer/menu_item_builder.cc',
+ 'renderer/menu_item_builder.h',
+ 'renderer/mhtml_generator.cc',
+ 'renderer/mhtml_generator.h',
+ 'renderer/mouse_lock_dispatcher.cc',
+ 'renderer/mouse_lock_dispatcher.h',
+ 'renderer/net_info_helper.cc',
+ 'renderer/net_info_helper.h',
+ 'renderer/notification_provider.cc',
+ 'renderer/notification_provider.h',
+ 'renderer/push_messaging_dispatcher.cc',
+ 'renderer/push_messaging_dispatcher.h',
+ 'renderer/render_frame_impl.cc',
+ 'renderer/render_frame_impl.h',
+ 'renderer/render_frame_proxy.cc',
+ 'renderer/render_frame_proxy.h',
+ 'renderer/render_process.h',
+ 'renderer/render_process_impl.cc',
+ 'renderer/render_process_impl.h',
+ 'renderer/render_thread_impl.cc',
+ 'renderer/render_thread_impl.h',
+ 'renderer/render_view_impl.cc',
+ 'renderer/render_view_impl.h',
+ 'renderer/render_view_impl_android.cc',
+ 'renderer/render_view_impl_params.cc',
+ 'renderer/render_view_impl_params.h',
+ 'renderer/render_view_linux.cc',
+ 'renderer/render_view_mouse_lock_dispatcher.cc',
+ 'renderer/render_view_mouse_lock_dispatcher.h',
+ 'renderer/render_widget.cc',
+ 'renderer/render_widget.h',
+ 'renderer/render_widget_fullscreen.cc',
+ 'renderer/render_widget_fullscreen.h',
+ 'renderer/renderer_clipboard_client.cc',
+ 'renderer/renderer_clipboard_client.h',
+ 'renderer/renderer_date_time_picker.cc',
+ 'renderer/renderer_date_time_picker.h',
+ 'renderer/renderer_main.cc',
+ 'renderer/renderer_main_platform_delegate.h',
+ 'renderer/renderer_main_platform_delegate_android.cc',
+ 'renderer/renderer_main_platform_delegate_linux.cc',
+ 'renderer/renderer_main_platform_delegate_mac.mm',
+ 'renderer/renderer_main_platform_delegate_win.cc',
+ 'renderer/renderer_webapplicationcachehost_impl.cc',
+ 'renderer/renderer_webapplicationcachehost_impl.h',
+ 'renderer/renderer_webcolorchooser_impl.cc',
+ 'renderer/renderer_webcolorchooser_impl.h',
+ 'renderer/renderer_webcookiejar_impl.cc',
+ 'renderer/renderer_webcookiejar_impl.h',
+ 'renderer/renderer_webkitplatformsupport_impl.cc',
+ 'renderer/renderer_webkitplatformsupport_impl.h',
+ 'renderer/resizing_mode_selector.cc',
+ 'renderer/resizing_mode_selector.h',
+ 'renderer/sad_plugin.cc',
+ 'renderer/sad_plugin.h',
+ 'renderer/savable_resources.cc',
+ 'renderer/savable_resources.h',
+ 'renderer/screen_orientation/mock_screen_orientation_controller.cc',
+ 'renderer/screen_orientation/mock_screen_orientation_controller.h',
+ 'renderer/screen_orientation/screen_orientation_dispatcher.cc',
+ 'renderer/screen_orientation/screen_orientation_dispatcher.h',
+ 'renderer/scoped_clipboard_writer_glue.cc',
+ 'renderer/scoped_clipboard_writer_glue.h',
+ 'renderer/service_worker/embedded_worker_context_client.cc',
+ 'renderer/service_worker/embedded_worker_context_client.h',
+ 'renderer/service_worker/embedded_worker_context_message_filter.cc',
+ 'renderer/service_worker/embedded_worker_context_message_filter.h',
+ 'renderer/service_worker/embedded_worker_devtools_agent.cc',
+ 'renderer/service_worker/embedded_worker_devtools_agent.h',
+ 'renderer/service_worker/embedded_worker_dispatcher.cc',
+ 'renderer/service_worker/embedded_worker_dispatcher.h',
+ 'renderer/service_worker/service_worker_script_context.cc',
+ 'renderer/service_worker/service_worker_script_context.h',
+ 'renderer/shared_memory_seqlock_reader.cc',
+ 'renderer/shared_memory_seqlock_reader.h',
+ 'renderer/shared_worker_repository.cc',
+ 'renderer/shared_worker_repository.h',
+ 'renderer/shared_worker/embedded_shared_worker_stub.cc',
+ 'renderer/shared_worker/embedded_shared_worker_stub.h',
+ 'renderer/skia_benchmarking_extension.cc',
+ 'renderer/skia_benchmarking_extension.h',
+ 'renderer/speech_recognition_dispatcher.cc',
+ 'renderer/speech_recognition_dispatcher.h',
+ 'renderer/stats_collection_controller.cc',
+ 'renderer/stats_collection_controller.h',
+ 'renderer/stats_collection_observer.cc',
+ 'renderer/stats_collection_observer.h',
+ 'renderer/text_input_client_observer.cc',
+ 'renderer/text_input_client_observer.h',
+ 'renderer/v8_value_converter_impl.cc',
+ 'renderer/v8_value_converter_impl.h',
+ 'renderer/web_preferences.cc',
+ 'renderer/web_ui_extension.cc',
+ 'renderer/web_ui_extension.h',
+ 'renderer/web_ui_extension_data.cc',
+ 'renderer/web_ui_extension_data.h',
+ 'renderer/web_ui_mojo.cc',
+ 'renderer/web_ui_mojo.h',
+ 'renderer/web_ui_mojo_context_state.cc',
+ 'renderer/web_ui_mojo_context_state.h',
+ 'renderer/web_ui_runner.cc',
+ 'renderer/web_ui_runner.h',
+ 'renderer/web_ui_setup_impl.cc',
+ 'renderer/web_ui_setup_impl.h',
+ 'renderer/webclipboard_impl.cc',
+ 'renderer/webclipboard_impl.h',
+ 'renderer/webgraphicscontext3d_provider_impl.cc',
+ 'renderer/webgraphicscontext3d_provider_impl.h',
+ 'renderer/webpublicsuffixlist_impl.cc',
+ 'renderer/webpublicsuffixlist_impl.h',
+ 'renderer/webscrollbarbehavior_impl_gtkoraura.cc',
+ 'renderer/webscrollbarbehavior_impl_gtkoraura.h',
+ 'renderer/webscrollbarbehavior_impl_mac.mm',
+ 'renderer/webscrollbarbehavior_impl_mac.h',
+ 'renderer/websharedworker_proxy.cc',
+ 'renderer/websharedworker_proxy.h',
+ ],
+ # Put WebRTC-related sources in the plugin+WebRTC section below.
+ 'private_renderer_plugin_sources': [
+ 'renderer/npapi/plugin_channel_host.cc',
+ 'renderer/npapi/plugin_channel_host.h',
+ 'renderer/npapi/webplugin_delegate_proxy.cc',
+ 'renderer/npapi/webplugin_delegate_proxy.h',
+ 'renderer/npapi/webplugin_impl.cc',
+ 'renderer/npapi/webplugin_impl.h',
+ 'renderer/pepper/audio_helper.cc',
+ 'renderer/pepper/audio_helper.h',
+ 'renderer/pepper/common.h',
+ 'renderer/pepper/content_decryptor_delegate.cc',
+ 'renderer/pepper/content_decryptor_delegate.h',
+ 'renderer/pepper/content_renderer_pepper_host_factory.cc',
+ 'renderer/pepper/content_renderer_pepper_host_factory.h',
+ 'renderer/pepper/event_conversion.cc',
+ 'renderer/pepper/event_conversion.h',
+ 'renderer/pepper/fullscreen_container.h',
+ 'renderer/pepper/gfx_conversion.h',
+ 'renderer/pepper/host_array_buffer_var.cc',
+ 'renderer/pepper/host_array_buffer_var.h',
+ 'renderer/pepper/host_dispatcher_wrapper.cc',
+ 'renderer/pepper/host_dispatcher_wrapper.h',
+ 'renderer/pepper/host_globals.cc',
+ 'renderer/pepper/host_globals.h',
+ 'renderer/pepper/host_resource_var.cc',
+ 'renderer/pepper/host_resource_var.h',
+ 'renderer/pepper/host_var_tracker.cc',
+ 'renderer/pepper/host_var_tracker.h',
+ 'renderer/pepper/message_channel.cc',
+ 'renderer/pepper/message_channel.h',
+ 'renderer/pepper/npapi_glue.cc',
+ 'renderer/pepper/npapi_glue.h',
+ 'renderer/pepper/npobject_var.cc',
+ 'renderer/pepper/npobject_var.h',
+ 'renderer/pepper/pepper_audio_input_host.cc',
+ 'renderer/pepper/pepper_audio_input_host.h',
+ 'renderer/pepper/pepper_broker.cc',
+ 'renderer/pepper/pepper_broker.h',
+ 'renderer/pepper/pepper_browser_connection.cc',
+ 'renderer/pepper/pepper_browser_connection.h',
+ 'renderer/pepper/pepper_device_enumeration_host_helper.cc',
+ 'renderer/pepper/pepper_device_enumeration_host_helper.h',
+ 'renderer/pepper/pepper_file_chooser_host.cc',
+ 'renderer/pepper/pepper_file_chooser_host.h',
+ 'renderer/pepper/pepper_file_ref_renderer_host.cc',
+ 'renderer/pepper/pepper_file_ref_renderer_host.h',
+ 'renderer/pepper/pepper_file_system_host.cc',
+ 'renderer/pepper/pepper_file_system_host.h',
+ 'renderer/pepper/pepper_graphics_2d_host.cc',
+ 'renderer/pepper/pepper_graphics_2d_host.h',
+ 'renderer/pepper/pepper_hung_plugin_filter.cc',
+ 'renderer/pepper/pepper_hung_plugin_filter.h',
+ 'renderer/pepper/pepper_in_process_resource_creation.cc',
+ 'renderer/pepper/pepper_in_process_resource_creation.h',
+ 'renderer/pepper/pepper_in_process_router.cc',
+ 'renderer/pepper/pepper_in_process_router.h',
+ 'renderer/pepper/pepper_media_device_manager.cc',
+ 'renderer/pepper/pepper_media_device_manager.h',
+ 'renderer/pepper/pepper_platform_audio_input.cc',
+ 'renderer/pepper/pepper_platform_audio_input.h',
+ 'renderer/pepper/pepper_platform_audio_output.cc',
+ 'renderer/pepper/pepper_platform_audio_output.h',
+ 'renderer/pepper/pepper_platform_video_capture.cc',
+ 'renderer/pepper/pepper_platform_video_capture.h',
+ 'renderer/pepper/pepper_plugin_instance_impl.cc',
+ 'renderer/pepper/pepper_plugin_instance_impl.h',
+ 'renderer/pepper/pepper_plugin_registry.cc',
+ 'renderer/pepper/pepper_plugin_registry.h',
+ 'renderer/pepper/pepper_proxy_channel_delegate_impl.cc',
+ 'renderer/pepper/pepper_proxy_channel_delegate_impl.h',
+ 'renderer/pepper/pepper_truetype_font.h',
+ 'renderer/pepper/pepper_truetype_font_android.cc',
+ 'renderer/pepper/pepper_truetype_font_host.cc',
+ 'renderer/pepper/pepper_truetype_font_host.h',
+ 'renderer/pepper/pepper_truetype_font_linux.cc',
+ 'renderer/pepper/pepper_truetype_font_mac.mm',
+ 'renderer/pepper/pepper_truetype_font_win.cc',
+ 'renderer/pepper/pepper_url_loader_host.cc',
+ 'renderer/pepper/pepper_url_loader_host.h',
+ 'renderer/pepper/pepper_video_capture_host.cc',
+ 'renderer/pepper/pepper_video_capture_host.h',
+ 'renderer/pepper/pepper_webplugin_impl.cc',
+ 'renderer/pepper/pepper_webplugin_impl.h',
+ 'renderer/pepper/pepper_websocket_host.cc',
+ 'renderer/pepper/pepper_websocket_host.h',
+ 'renderer/pepper/plugin_module.cc',
+ 'renderer/pepper/plugin_module.h',
+ 'renderer/pepper/plugin_object.cc',
+ 'renderer/pepper/plugin_object.h',
+ 'renderer/pepper/ppb_audio_impl.cc',
+ 'renderer/pepper/ppb_audio_impl.h',
+ 'renderer/pepper/ppb_broker_impl.cc',
+ 'renderer/pepper/ppb_broker_impl.h',
+ 'renderer/pepper/ppb_buffer_impl.cc',
+ 'renderer/pepper/ppb_buffer_impl.h',
+ 'renderer/pepper/ppb_flash_message_loop_impl.cc',
+ 'renderer/pepper/ppb_flash_message_loop_impl.h',
+ 'renderer/pepper/ppb_graphics_3d_impl.cc',
+ 'renderer/pepper/ppb_graphics_3d_impl.h',
+ 'renderer/pepper/ppb_image_data_impl.cc',
+ 'renderer/pepper/ppb_image_data_impl.h',
+ 'renderer/pepper/ppb_proxy_impl.cc',
+ 'renderer/pepper/ppb_proxy_impl.h',
+ 'renderer/pepper/ppb_scrollbar_impl.cc',
+ 'renderer/pepper/ppb_scrollbar_impl.h',
+ 'renderer/pepper/ppb_var_deprecated_impl.cc',
+ 'renderer/pepper/ppb_var_deprecated_impl.h',
+ 'renderer/pepper/ppb_video_decoder_impl.cc',
+ 'renderer/pepper/ppb_video_decoder_impl.h',
+ 'renderer/pepper/ppb_widget_impl.cc',
+ 'renderer/pepper/ppb_widget_impl.h',
+ 'renderer/pepper/renderer_ppapi_host_impl.cc',
+ 'renderer/pepper/renderer_ppapi_host_impl.h',
+ 'renderer/pepper/renderer_restrict_dispatch_group.h',
+ 'renderer/pepper/resource_converter.cc',
+ 'renderer/pepper/resource_converter.h',
+ 'renderer/pepper/resource_creation_impl.cc',
+ 'renderer/pepper/resource_creation_impl.h',
+ 'renderer/pepper/url_request_info_util.cc',
+ 'renderer/pepper/url_request_info_util.h',
+ 'renderer/pepper/url_response_info_util.cc',
+ 'renderer/pepper/url_response_info_util.h',
+ 'renderer/pepper/usb_key_code_conversion.h',
+ 'renderer/pepper/usb_key_code_conversion.cc',
+ 'renderer/pepper/usb_key_code_conversion_linux.cc',
+ 'renderer/pepper/usb_key_code_conversion_mac.cc',
+ 'renderer/pepper/usb_key_code_conversion_win.cc',
+ 'renderer/pepper/v8_var_converter.cc',
+ 'renderer/pepper/v8_var_converter.h',
+ 'renderer/render_widget_fullscreen_pepper.cc',
+ 'renderer/render_widget_fullscreen_pepper.h',
+ ],
+ 'public_renderer_webrtc_sources': [
+ 'public/renderer/media_stream_audio_sink.h',
+ 'public/renderer/media_stream_audio_sink.cc',
+ 'public/renderer/media_stream_sink.h',
+ 'public/renderer/media_stream_video_sink.cc',
+ 'public/renderer/media_stream_video_sink.h',
+ 'public/renderer/webrtc_log_message_delegate.h',
+ ],
+ # WebRTC-specific sources. Put WebRTC plugin-related stuff in the
+ # Plugin+WebRTC section below.
+ 'private_renderer_webrtc_sources': [
+ 'renderer/media/media_stream.h',
+ 'renderer/media/media_stream.cc',
+ 'renderer/media/media_stream_audio_processor.cc',
+ 'renderer/media/media_stream_audio_processor.h',
+ 'renderer/media/media_stream_audio_processor_options.cc',
+ 'renderer/media/media_stream_audio_processor_options.h',
+ 'renderer/media/media_stream_audio_sink_owner.cc',
+ 'renderer/media/media_stream_audio_sink_owner.h',
+ 'renderer/media/media_stream_audio_track_sink.h',
+ 'renderer/media/media_stream_center.cc',
+ 'renderer/media/media_stream_dispatcher.cc',
+ 'renderer/media/media_stream_impl.cc',
+ 'renderer/media/media_stream_registry_interface.h',
+ 'renderer/media/media_stream_audio_source.cc',
+ 'renderer/media/media_stream_audio_source.h',
+ 'renderer/media/media_stream_renderer_factory.cc',
+ 'renderer/media/media_stream_renderer_factory.h',
+ 'renderer/media/media_stream_source.cc',
+ 'renderer/media/media_stream_source.h',
+ 'renderer/media/media_stream_video_capturer_source.cc',
+ 'renderer/media/media_stream_video_capturer_source.h',
+ 'renderer/media/media_stream_video_source.cc',
+ 'renderer/media/media_stream_video_source.h',
+ 'renderer/media/media_stream_video_track.cc',
+ 'renderer/media/media_stream_video_track.h',
+ 'renderer/media/native_handle_impl.cc',
+ 'renderer/media/native_handle_impl.h',
+ 'renderer/media/peer_connection_audio_sink_owner.cc',
+ 'renderer/media/peer_connection_audio_sink_owner.h',
+ 'renderer/media/peer_connection_identity_service.cc',
+ 'renderer/media/peer_connection_identity_service.h',
+ 'renderer/media/peer_connection_tracker.cc',
+ 'renderer/media/peer_connection_tracker.h',
+ 'renderer/media/remote_media_stream_impl.cc',
+ 'renderer/media/remote_media_stream_impl.h',
+ 'renderer/media/rtc_data_channel_handler.cc',
+ 'renderer/media/rtc_data_channel_handler.h',
+ 'renderer/media/rtc_dtmf_sender_handler.cc',
+ 'renderer/media/rtc_dtmf_sender_handler.h',
+ 'renderer/media/rtc_media_constraints.cc',
+ 'renderer/media/rtc_media_constraints.h',
+ 'renderer/media/rtc_peer_connection_handler.cc',
+ 'renderer/media/rtc_peer_connection_handler.h',
+ 'renderer/media/rtc_video_decoder.cc',
+ 'renderer/media/rtc_video_decoder.h',
+ 'renderer/media/rtc_video_decoder_factory.cc',
+ 'renderer/media/rtc_video_decoder_factory.h',
+ 'renderer/media/rtc_video_encoder.cc',
+ 'renderer/media/rtc_video_encoder.h',
+ 'renderer/media/rtc_video_encoder_factory.cc',
+ 'renderer/media/rtc_video_encoder_factory.h',
+ 'renderer/media/rtc_video_renderer.cc',
+ 'renderer/media/rtc_video_renderer.h',
+ 'renderer/media/video_frame_deliverer.cc',
+ 'renderer/media/video_frame_deliverer.h',
+ 'renderer/media/video_source_handler.cc',
+ 'renderer/media/video_source_handler.h',
+ 'renderer/media/video_track_adapter.cc',
+ 'renderer/media/video_track_adapter.h',
+ 'renderer/media/webaudio_capturer_source.cc',
+ 'renderer/media/webaudio_capturer_source.h',
+ 'renderer/media/webrtc/webrtc_video_track_adapter.cc',
+ 'renderer/media/webrtc/webrtc_video_track_adapter.h',
+ 'renderer/media/webrtc/media_stream_remote_video_source.cc',
+ 'renderer/media/webrtc/media_stream_remote_video_source.h',
+ 'renderer/media/webrtc/media_stream_track_metrics.cc',
+ 'renderer/media/webrtc/media_stream_track_metrics.h',
+ 'renderer/media/webrtc/peer_connection_dependency_factory.cc',
+ 'renderer/media/webrtc/peer_connection_dependency_factory.h',
+ 'renderer/media/webrtc/video_destination_handler.cc',
+ 'renderer/media/webrtc/video_destination_handler.h',
+ 'renderer/media/webrtc/webrtc_audio_sink_adapter.cc',
+ 'renderer/media/webrtc/webrtc_audio_sink_adapter.h',
+ 'renderer/media/webrtc/webrtc_local_audio_track_adapter.cc',
+ 'renderer/media/webrtc/webrtc_local_audio_track_adapter.h',
+ 'renderer/media/webrtc/webrtc_media_stream_adapter.cc',
+ 'renderer/media/webrtc/webrtc_media_stream_adapter.h',
+ 'renderer/media/webrtc/webrtc_video_capturer_adapter.cc',
+ 'renderer/media/webrtc/webrtc_video_capturer_adapter.h',
+ 'renderer/media/webrtc_audio_capturer.cc',
+ 'renderer/media/webrtc_audio_capturer.h',
+ 'renderer/media/webrtc_audio_device_impl.cc',
+ 'renderer/media/webrtc_audio_device_impl.h',
+ 'renderer/media/webrtc_audio_device_not_impl.cc',
+ 'renderer/media/webrtc_audio_device_not_impl.h',
+ 'renderer/media/webrtc_audio_renderer.cc',
+ 'renderer/media/webrtc_audio_renderer.h',
+ 'renderer/media/webrtc_identity_service.cc',
+ 'renderer/media/webrtc_identity_service.h',
+ 'renderer/media/webrtc_local_audio_renderer.cc',
+ 'renderer/media/webrtc_local_audio_renderer.h',
+ 'renderer/media/webrtc_local_audio_source_provider.cc',
+ 'renderer/media/webrtc_local_audio_source_provider.h',
+ 'renderer/media/webrtc_local_audio_track.cc',
+ 'renderer/media/webrtc_local_audio_track.h',
+ 'renderer/media/webrtc_logging.cc',
+ 'renderer/media/webrtc_logging.h',
+ 'renderer/media/webrtc_uma_histograms.cc',
+ 'renderer/media/webrtc_uma_histograms.h',
+ 'renderer/p2p/host_address_request.cc',
+ 'renderer/p2p/host_address_request.h',
+ 'renderer/p2p/ipc_network_manager.cc',
+ 'renderer/p2p/ipc_network_manager.h',
+ 'renderer/p2p/ipc_socket_factory.cc',
+ 'renderer/p2p/ipc_socket_factory.h',
+ 'renderer/p2p/network_list_observer.h',
+ 'renderer/p2p/port_allocator.cc',
+ 'renderer/p2p/port_allocator.h',
+ 'renderer/p2p/socket_client_impl.cc',
+ 'renderer/p2p/socket_client_impl.h',
+ 'renderer/p2p/socket_dispatcher.cc',
+ 'renderer/p2p/socket_dispatcher.h',
+ ],
+ # Stuff only used when both WebRTC and plugins are enabled.
+ 'private_renderer_plugin_webrtc_sources': [
+ 'renderer/pepper/pepper_media_stream_audio_track_host.cc',
+ 'renderer/pepper/pepper_media_stream_audio_track_host.h',
+ 'renderer/pepper/pepper_media_stream_track_host_base.cc',
+ 'renderer/pepper/pepper_media_stream_track_host_base.h',
+ 'renderer/pepper/pepper_media_stream_video_track_host.cc',
+ 'renderer/pepper/pepper_media_stream_video_track_host.h',
+ 'renderer/pepper/pepper_video_destination_host.cc',
+ 'renderer/pepper/pepper_video_destination_host.h',
+ 'renderer/pepper/pepper_video_source_host.cc',
+ 'renderer/pepper/pepper_video_source_host.h',
+ ]
+ },
'sources': [
- 'public/renderer/android_content_detection_prefixes.cc',
- 'public/renderer/android_content_detection_prefixes.h',
- 'public/renderer/content_renderer_client.cc',
- 'public/renderer/content_renderer_client.h',
- 'public/renderer/context_menu_client.h',
- 'public/renderer/document_state.cc',
- 'public/renderer/document_state.h',
- 'public/renderer/key_system_info.cc',
- 'public/renderer/key_system_info.h',
- 'public/renderer/navigation_state.cc',
- 'public/renderer/navigation_state.h',
- 'public/renderer/pepper_plugin_instance.h',
- 'public/renderer/renderer_ppapi_host.h',
- 'public/renderer/render_frame.h',
- 'public/renderer/render_frame_observer.cc',
- 'public/renderer/render_frame_observer.h',
- 'public/renderer/render_frame_observer_tracker.h',
- 'public/renderer/render_font_warmup_win.cc',
- 'public/renderer/render_font_warmup_win.h',
- 'public/renderer/render_process_observer.cc',
- 'public/renderer/render_process_observer.h',
- 'public/renderer/render_thread.cc',
- 'public/renderer/render_thread.h',
- 'public/renderer/render_view.h',
- 'public/renderer/render_view_observer.cc',
- 'public/renderer/render_view_observer.h',
- 'public/renderer/render_view_observer_tracker.h',
- 'public/renderer/render_view_visitor.h',
- 'public/renderer/resource_fetcher.h',
- 'public/renderer/v8_value_converter.h',
- 'public/renderer/video_encode_accelerator.cc',
- 'public/renderer/video_encode_accelerator.h',
- 'public/renderer/web_preferences.h',
- 'renderer/accessibility/blink_ax_enum_conversion.cc',
- 'renderer/accessibility/blink_ax_enum_conversion.h',
- 'renderer/accessibility/blink_ax_tree_source.cc',
- 'renderer/accessibility/blink_ax_tree_source.h',
- 'renderer/accessibility/renderer_accessibility.cc',
- 'renderer/accessibility/renderer_accessibility.h',
- 'renderer/accessibility/renderer_accessibility_complete.cc',
- 'renderer/accessibility/renderer_accessibility_complete.h',
- 'renderer/accessibility/renderer_accessibility_focus_only.cc',
- 'renderer/accessibility/renderer_accessibility_focus_only.h',
- 'renderer/active_notification_tracker.cc',
- 'renderer/active_notification_tracker.h',
- 'renderer/android/address_detector.cc',
- 'renderer/android/address_detector.h',
- 'renderer/android/content_detector.cc',
- 'renderer/android/content_detector.h',
- 'renderer/android/email_detector.cc',
- 'renderer/android/email_detector.h',
- 'renderer/android/phone_number_detector.cc',
- 'renderer/android/phone_number_detector.h',
- 'renderer/android/synchronous_compositor_factory.cc',
- 'renderer/android/synchronous_compositor_factory.h',
- 'renderer/browser_plugin/browser_plugin.cc',
- 'renderer/browser_plugin/browser_plugin.h',
- 'renderer/browser_plugin/browser_plugin_bindings.cc',
- 'renderer/browser_plugin/browser_plugin_bindings.h',
- 'renderer/browser_plugin/browser_plugin_manager_factory.h',
- 'renderer/browser_plugin/browser_plugin_manager_impl.cc',
- 'renderer/browser_plugin/browser_plugin_manager_impl.h',
- 'renderer/browser_plugin/browser_plugin_manager.cc',
- 'renderer/browser_plugin/browser_plugin_manager.h',
- 'renderer/clipboard_utils.cc',
- 'renderer/clipboard_utils.h',
- 'renderer/child_frame_compositing_helper.cc',
- 'renderer/child_frame_compositing_helper.h',
- 'renderer/context_menu_params_builder.cc',
- 'renderer/context_menu_params_builder.h',
- 'renderer/cursor_utils.cc',
- 'renderer/cursor_utils.h',
- 'renderer/date_time_suggestion_builder.cc',
- 'renderer/date_time_suggestion_builder.h',
- 'renderer/device_sensors/device_motion_event_pump.cc',
- 'renderer/device_sensors/device_motion_event_pump.h',
- 'renderer/device_sensors/device_orientation_event_pump.cc',
- 'renderer/device_sensors/device_orientation_event_pump.h',
- 'renderer/device_sensors/device_sensor_event_pump.cc',
- 'renderer/device_sensors/device_sensor_event_pump.h',
- 'renderer/devtools/devtools_agent.cc',
- 'renderer/devtools/devtools_agent.h',
- 'renderer/devtools/devtools_agent_filter.cc',
- 'renderer/devtools/devtools_agent_filter.h',
- 'renderer/devtools/devtools_client.cc',
- 'renderer/devtools/devtools_client.h',
- 'renderer/disambiguation_popup_helper.cc',
- 'renderer/disambiguation_popup_helper.h',
- 'renderer/dom_automation_controller.cc',
- 'renderer/dom_automation_controller.h',
- 'renderer/dom_storage/dom_storage_cached_area.cc',
- 'renderer/dom_storage/dom_storage_cached_area.h',
- 'renderer/dom_storage/dom_storage_dispatcher.cc',
- 'renderer/dom_storage/dom_storage_dispatcher.h',
- 'renderer/dom_storage/dom_storage_proxy.h',
- 'renderer/dom_storage/webstoragearea_impl.cc',
- 'renderer/dom_storage/webstoragearea_impl.h',
- 'renderer/dom_storage/webstoragenamespace_impl.cc',
- 'renderer/dom_storage/webstoragenamespace_impl.h',
- 'renderer/drop_data_builder.cc',
- 'renderer/drop_data_builder.h',
- 'renderer/fetchers/image_resource_fetcher.cc',
- 'renderer/fetchers/image_resource_fetcher.h',
- 'renderer/fetchers/multi_resolution_image_resource_fetcher.cc',
- 'renderer/fetchers/multi_resolution_image_resource_fetcher.h',
- 'renderer/fetchers/resource_fetcher_impl.cc',
- 'renderer/fetchers/resource_fetcher_impl.h',
- 'renderer/gamepad_shared_memory_reader.cc',
- 'renderer/gamepad_shared_memory_reader.h',
- 'renderer/geolocation_dispatcher.cc',
- 'renderer/geolocation_dispatcher.h',
- 'renderer/gpu/compositor_output_surface.cc',
- 'renderer/gpu/compositor_output_surface.h',
- 'renderer/gpu/compositor_software_output_device.cc',
- 'renderer/gpu/compositor_software_output_device.h',
- 'renderer/gpu/delegated_compositor_output_surface.cc',
- 'renderer/gpu/delegated_compositor_output_surface.h',
- 'renderer/gpu/gpu_benchmarking_extension.cc',
- 'renderer/gpu/gpu_benchmarking_extension.h',
- 'renderer/gpu/mailbox_output_surface.cc',
- 'renderer/gpu/mailbox_output_surface.h',
- 'renderer/gpu/render_widget_compositor.cc',
- 'renderer/gpu/render_widget_compositor.h',
- 'renderer/gpu/stream_texture_host_android.cc',
- 'renderer/gpu/stream_texture_host_android.h',
- 'renderer/history_controller.cc',
- 'renderer/history_controller.h',
- 'renderer/history_entry.cc',
- 'renderer/history_entry.h',
- 'renderer/history_serialization.cc',
- 'renderer/history_serialization.h',
- 'renderer/idle_user_detector.cc',
- 'renderer/idle_user_detector.h',
- 'renderer/image_loading_helper.cc',
- 'renderer/image_loading_helper.h',
- 'renderer/ime_event_guard.cc',
- 'renderer/ime_event_guard.h',
- 'renderer/in_process_renderer_thread.cc',
- 'renderer/in_process_renderer_thread.h',
- 'renderer/input/input_event_filter.cc',
- 'renderer/input/input_event_filter.h',
- 'renderer/input/input_handler_manager.cc',
- 'renderer/input/input_handler_manager.h',
- 'renderer/input/input_handler_manager_client.h',
- 'renderer/input/input_handler_proxy.cc',
- 'renderer/input/input_handler_proxy.h',
- 'renderer/input/input_handler_wrapper.cc',
- 'renderer/input/input_handler_wrapper.h',
- 'renderer/internal_document_state_data.cc',
- 'renderer/internal_document_state_data.h',
- 'renderer/java/java_bridge_channel.cc',
- 'renderer/java/java_bridge_channel.h',
- 'renderer/java/java_bridge_dispatcher.cc',
- 'renderer/java/java_bridge_dispatcher.h',
- 'renderer/load_progress_tracker.cc',
- 'renderer/load_progress_tracker.h',
- 'renderer/media/active_loader.cc',
- 'renderer/media/active_loader.h',
- 'renderer/media/android/audio_decoder_android.cc',
- 'renderer/media/android/audio_decoder_android.h',
- 'renderer/media/android/media_info_loader.cc',
- 'renderer/media/android/media_info_loader.h',
- 'renderer/media/android/media_source_delegate.cc',
- 'renderer/media/android/media_source_delegate.h',
- 'renderer/media/android/proxy_media_keys.cc',
- 'renderer/media/android/proxy_media_keys.h',
- 'renderer/media/android/renderer_demuxer_android.cc',
- 'renderer/media/android/renderer_demuxer_android.h',
- 'renderer/media/android/renderer_media_player_manager.cc',
- 'renderer/media/android/renderer_media_player_manager.h',
- 'renderer/media/android/stream_texture_factory.h',
- 'renderer/media/android/stream_texture_factory_impl.cc',
- 'renderer/media/android/stream_texture_factory_impl.h',
- 'renderer/media/android/stream_texture_factory_synchronous_impl.cc',
- 'renderer/media/android/stream_texture_factory_synchronous_impl.h',
- 'renderer/media/android/webmediaplayer_android.cc',
- 'renderer/media/android/webmediaplayer_android.h',
- 'renderer/media/audio_decoder.cc',
- 'renderer/media/audio_decoder.h',
- 'renderer/media/audio_device_factory.cc',
- 'renderer/media/audio_device_factory.h',
- 'renderer/media/audio_input_message_filter.cc',
- 'renderer/media/audio_input_message_filter.h',
- 'renderer/media/audio_message_filter.cc',
- 'renderer/media/audio_message_filter.h',
- 'renderer/media/audio_renderer_mixer_manager.cc',
- 'renderer/media/audio_renderer_mixer_manager.h',
- 'renderer/media/buffered_data_source.cc',
- 'renderer/media/buffered_data_source.h',
- 'renderer/media/buffered_data_source_host_impl.h',
- 'renderer/media/buffered_data_source_host_impl.cc',
- 'renderer/media/buffered_resource_loader.cc',
- 'renderer/media/buffered_resource_loader.h',
- 'renderer/media/cache_util.cc',
- 'renderer/media/cache_util.h',
- 'renderer/media/cdm_session_adapter.cc',
- 'renderer/media/cdm_session_adapter.h',
- 'renderer/media/crypto/content_decryption_module_factory.cc',
- 'renderer/media/crypto/content_decryption_module_factory.h',
- 'renderer/media/crypto/key_systems.cc',
- 'renderer/media/crypto/key_systems.h',
- 'renderer/media/crypto/key_systems_support_uma.cc',
- 'renderer/media/crypto/key_systems_support_uma.h',
- 'renderer/media/crypto/pepper_cdm_wrapper.h',
- 'renderer/media/crypto/pepper_cdm_wrapper_impl.cc',
- 'renderer/media/crypto/pepper_cdm_wrapper_impl.h',
- 'renderer/media/crypto/ppapi_decryptor.cc',
- 'renderer/media/crypto/ppapi_decryptor.h',
- 'renderer/media/crypto/proxy_decryptor.cc',
- 'renderer/media/crypto/proxy_decryptor.h',
- 'renderer/media/media_stream_audio_level_calculator.cc',
- 'renderer/media/media_stream_audio_level_calculator.h',
- 'renderer/media/media_stream_audio_renderer.cc',
- 'renderer/media/media_stream_audio_renderer.h',
- 'renderer/media/media_stream_center.h',
- 'renderer/media/media_stream_client.h',
- 'renderer/media/media_stream_dependency_factory.h',
- 'renderer/media/media_stream_dispatcher.h',
- 'renderer/media/media_stream_dispatcher_eventhandler.h',
- 'renderer/media/media_stream_impl.h',
- 'renderer/media/media_stream_track.cc',
- 'renderer/media/media_stream_track.h',
- 'renderer/media/midi_dispatcher.cc',
- 'renderer/media/midi_dispatcher.h',
- 'renderer/media/midi_message_filter.cc',
- 'renderer/media/midi_message_filter.h',
- 'renderer/media/preload.h',
- 'renderer/media/render_media_log.cc',
- 'renderer/media/render_media_log.h',
- 'renderer/media/renderer_gpu_video_accelerator_factories.cc',
- 'renderer/media/renderer_gpu_video_accelerator_factories.h',
- 'renderer/media/renderer_webaudiodevice_impl.cc',
- 'renderer/media/renderer_webaudiodevice_impl.h',
- 'renderer/media/renderer_webmidiaccessor_impl.cc',
- 'renderer/media/renderer_webmidiaccessor_impl.h',
- 'renderer/media/texttrack_impl.cc',
- 'renderer/media/texttrack_impl.h',
- 'renderer/media/video_capture_impl.cc',
- 'renderer/media/video_capture_impl.h',
- 'renderer/media/video_capture_impl_manager.cc',
- 'renderer/media/video_capture_impl_manager.h',
- 'renderer/media/video_capture_message_filter.cc',
- 'renderer/media/video_capture_message_filter.h',
- 'renderer/media/video_frame_compositor.cc',
- 'renderer/media/video_frame_compositor.h',
- 'renderer/media/video_frame_provider.cc',
- 'renderer/media/video_frame_provider.h',
- 'renderer/media/webaudiosourceprovider_impl.cc',
- 'renderer/media/webaudiosourceprovider_impl.h',
- 'renderer/media/webcontentdecryptionmodule_impl.cc',
- 'renderer/media/webcontentdecryptionmodule_impl.h',
- 'renderer/media/webcontentdecryptionmodulesession_impl.cc',
- 'renderer/media/webcontentdecryptionmodulesession_impl.h',
- 'renderer/media/webinbandtexttrack_impl.cc',
- 'renderer/media/webinbandtexttrack_impl.h',
- 'renderer/media/webmediaplayer_delegate.h',
- 'renderer/media/webmediaplayer_impl.cc',
- 'renderer/media/webmediaplayer_impl.h',
- 'renderer/media/webmediaplayer_ms.cc',
- 'renderer/media/webmediaplayer_ms.h',
- 'renderer/media/webmediaplayer_params.cc',
- 'renderer/media/webmediaplayer_params.h',
- 'renderer/media/webmediaplayer_util.cc',
- 'renderer/media/webmediaplayer_util.h',
- 'renderer/media/webmediasource_impl.cc',
- 'renderer/media/webmediasource_impl.h',
- 'renderer/media/websourcebuffer_impl.cc',
- 'renderer/media/websourcebuffer_impl.h',
- 'renderer/memory_benchmarking_extension.cc',
- 'renderer/memory_benchmarking_extension.h',
- 'renderer/menu_item_builder.cc',
- 'renderer/menu_item_builder.h',
- 'renderer/mhtml_generator.cc',
- 'renderer/mhtml_generator.h',
- 'renderer/mouse_lock_dispatcher.cc',
- 'renderer/mouse_lock_dispatcher.h',
- 'renderer/notification_provider.cc',
- 'renderer/notification_provider.h',
- 'renderer/npapi/plugin_channel_host.cc',
- 'renderer/npapi/plugin_channel_host.h',
- 'renderer/npapi/webplugin_delegate_proxy.cc',
- 'renderer/npapi/webplugin_delegate_proxy.h',
- 'renderer/npapi/webplugin_impl.cc',
- 'renderer/npapi/webplugin_impl.h',
- 'renderer/pepper/audio_helper.cc',
- 'renderer/pepper/audio_helper.h',
- 'renderer/pepper/common.h',
- 'renderer/pepper/content_decryptor_delegate.cc',
- 'renderer/pepper/content_decryptor_delegate.h',
- 'renderer/pepper/content_renderer_pepper_host_factory.cc',
- 'renderer/pepper/content_renderer_pepper_host_factory.h',
- 'renderer/pepper/event_conversion.cc',
- 'renderer/pepper/event_conversion.h',
- 'renderer/pepper/fullscreen_container.h',
- 'renderer/pepper/gfx_conversion.h',
- 'renderer/pepper/host_array_buffer_var.cc',
- 'renderer/pepper/host_array_buffer_var.h',
- 'renderer/pepper/host_dispatcher_wrapper.cc',
- 'renderer/pepper/host_dispatcher_wrapper.h',
- 'renderer/pepper/host_globals.cc',
- 'renderer/pepper/host_globals.h',
- 'renderer/pepper/host_resource_var.cc',
- 'renderer/pepper/host_resource_var.h',
- 'renderer/pepper/host_var_tracker.cc',
- 'renderer/pepper/host_var_tracker.h',
- 'renderer/pepper/message_channel.cc',
- 'renderer/pepper/message_channel.h',
- 'renderer/pepper/npapi_glue.cc',
- 'renderer/pepper/npapi_glue.h',
- 'renderer/pepper/npobject_var.cc',
- 'renderer/pepper/npobject_var.h',
- 'renderer/pepper/pepper_audio_input_host.cc',
- 'renderer/pepper/pepper_audio_input_host.h',
- 'renderer/pepper/pepper_broker.cc',
- 'renderer/pepper/pepper_broker.h',
- 'renderer/pepper/pepper_browser_connection.cc',
- 'renderer/pepper/pepper_browser_connection.h',
- 'renderer/pepper/pepper_device_enumeration_host_helper.cc',
- 'renderer/pepper/pepper_device_enumeration_host_helper.h',
- 'renderer/pepper/pepper_file_chooser_host.cc',
- 'renderer/pepper/pepper_file_chooser_host.h',
- 'renderer/pepper/pepper_file_ref_renderer_host.cc',
- 'renderer/pepper/pepper_file_ref_renderer_host.h',
- 'renderer/pepper/pepper_file_system_host.cc',
- 'renderer/pepper/pepper_file_system_host.h',
- 'renderer/pepper/pepper_graphics_2d_host.cc',
- 'renderer/pepper/pepper_graphics_2d_host.h',
- 'renderer/pepper/pepper_hung_plugin_filter.cc',
- 'renderer/pepper/pepper_hung_plugin_filter.h',
- 'renderer/pepper/pepper_in_process_resource_creation.cc',
- 'renderer/pepper/pepper_in_process_resource_creation.h',
- 'renderer/pepper/pepper_in_process_router.cc',
- 'renderer/pepper/pepper_in_process_router.h',
- 'renderer/pepper/pepper_media_device_manager.cc',
- 'renderer/pepper/pepper_media_device_manager.h',
- 'renderer/pepper/pepper_platform_audio_input.cc',
- 'renderer/pepper/pepper_platform_audio_input.h',
- 'renderer/pepper/pepper_platform_audio_output.cc',
- 'renderer/pepper/pepper_platform_audio_output.h',
- 'renderer/pepper/pepper_platform_video_capture.cc',
- 'renderer/pepper/pepper_platform_video_capture.h',
- 'renderer/pepper/pepper_plugin_instance_impl.cc',
- 'renderer/pepper/pepper_plugin_instance_impl.h',
- 'renderer/pepper/pepper_plugin_registry.cc',
- 'renderer/pepper/pepper_plugin_registry.h',
- 'renderer/pepper/pepper_proxy_channel_delegate_impl.cc',
- 'renderer/pepper/pepper_proxy_channel_delegate_impl.h',
- 'renderer/pepper/pepper_truetype_font.h',
- 'renderer/pepper/pepper_truetype_font_android.cc',
- 'renderer/pepper/pepper_truetype_font_host.cc',
- 'renderer/pepper/pepper_truetype_font_host.h',
- 'renderer/pepper/pepper_truetype_font_linux.cc',
- 'renderer/pepper/pepper_truetype_font_mac.mm',
- 'renderer/pepper/pepper_truetype_font_win.cc',
- 'renderer/pepper/pepper_url_loader_host.cc',
- 'renderer/pepper/pepper_url_loader_host.h',
- 'renderer/pepper/pepper_video_capture_host.cc',
- 'renderer/pepper/pepper_video_capture_host.h',
- 'renderer/pepper/pepper_webplugin_impl.cc',
- 'renderer/pepper/pepper_webplugin_impl.h',
- 'renderer/pepper/pepper_websocket_host.cc',
- 'renderer/pepper/pepper_websocket_host.h',
- 'renderer/pepper/plugin_module.cc',
- 'renderer/pepper/plugin_module.h',
- 'renderer/pepper/plugin_object.cc',
- 'renderer/pepper/plugin_object.h',
- 'renderer/pepper/ppb_audio_impl.cc',
- 'renderer/pepper/ppb_audio_impl.h',
- 'renderer/pepper/ppb_broker_impl.cc',
- 'renderer/pepper/ppb_broker_impl.h',
- 'renderer/pepper/ppb_buffer_impl.cc',
- 'renderer/pepper/ppb_buffer_impl.h',
- 'renderer/pepper/ppb_flash_message_loop_impl.cc',
- 'renderer/pepper/ppb_flash_message_loop_impl.h',
- 'renderer/pepper/ppb_graphics_3d_impl.cc',
- 'renderer/pepper/ppb_graphics_3d_impl.h',
- 'renderer/pepper/ppb_image_data_impl.cc',
- 'renderer/pepper/ppb_image_data_impl.h',
- 'renderer/pepper/ppb_proxy_impl.cc',
- 'renderer/pepper/ppb_proxy_impl.h',
- 'renderer/pepper/ppb_scrollbar_impl.cc',
- 'renderer/pepper/ppb_scrollbar_impl.h',
- 'renderer/pepper/ppb_var_deprecated_impl.cc',
- 'renderer/pepper/ppb_var_deprecated_impl.h',
- 'renderer/pepper/ppb_video_decoder_impl.cc',
- 'renderer/pepper/ppb_video_decoder_impl.h',
- 'renderer/pepper/ppb_widget_impl.cc',
- 'renderer/pepper/ppb_widget_impl.h',
- 'renderer/pepper/renderer_ppapi_host_impl.cc',
- 'renderer/pepper/renderer_ppapi_host_impl.h',
- 'renderer/pepper/renderer_restrict_dispatch_group.h',
- 'renderer/pepper/resource_converter.cc',
- 'renderer/pepper/resource_converter.h',
- 'renderer/pepper/resource_creation_impl.cc',
- 'renderer/pepper/resource_creation_impl.h',
- 'renderer/pepper/url_request_info_util.cc',
- 'renderer/pepper/url_request_info_util.h',
- 'renderer/pepper/url_response_info_util.cc',
- 'renderer/pepper/url_response_info_util.h',
- 'renderer/pepper/usb_key_code_conversion.h',
- 'renderer/pepper/usb_key_code_conversion.cc',
- 'renderer/pepper/usb_key_code_conversion_linux.cc',
- 'renderer/pepper/usb_key_code_conversion_mac.cc',
- 'renderer/pepper/usb_key_code_conversion_win.cc',
- 'renderer/pepper/v8_var_converter.cc',
- 'renderer/pepper/v8_var_converter.h',
- 'renderer/push_messaging_dispatcher.cc',
- 'renderer/push_messaging_dispatcher.h',
- 'renderer/render_frame_impl.cc',
- 'renderer/render_frame_impl.h',
- 'renderer/render_process.h',
- 'renderer/render_process_impl.cc',
- 'renderer/render_process_impl.h',
- 'renderer/render_thread_impl.cc',
- 'renderer/render_thread_impl.h',
- 'renderer/render_view_impl.cc',
- 'renderer/render_view_impl.h',
- 'renderer/render_view_impl_android.cc',
- 'renderer/render_view_impl_params.cc',
- 'renderer/render_view_impl_params.h',
- 'renderer/render_view_linux.cc',
- 'renderer/render_view_mouse_lock_dispatcher.cc',
- 'renderer/render_view_mouse_lock_dispatcher.h',
- 'renderer/render_widget.cc',
- 'renderer/render_widget.h',
- 'renderer/render_widget_fullscreen.cc',
- 'renderer/render_widget_fullscreen.h',
- 'renderer/render_widget_fullscreen_pepper.cc',
- 'renderer/render_widget_fullscreen_pepper.h',
- 'renderer/renderer_clipboard_client.cc',
- 'renderer/renderer_clipboard_client.h',
- 'renderer/renderer_date_time_picker.cc',
- 'renderer/renderer_date_time_picker.h',
- 'renderer/renderer_main.cc',
- 'renderer/renderer_main_platform_delegate.h',
- 'renderer/renderer_main_platform_delegate_android.cc',
- 'renderer/renderer_main_platform_delegate_linux.cc',
- 'renderer/renderer_main_platform_delegate_mac.mm',
- 'renderer/renderer_main_platform_delegate_win.cc',
- 'renderer/renderer_webapplicationcachehost_impl.cc',
- 'renderer/renderer_webapplicationcachehost_impl.h',
- 'renderer/renderer_webcolorchooser_impl.cc',
- 'renderer/renderer_webcolorchooser_impl.h',
- 'renderer/renderer_webcookiejar_impl.cc',
- 'renderer/renderer_webcookiejar_impl.h',
- 'renderer/renderer_webkitplatformsupport_impl.cc',
- 'renderer/renderer_webkitplatformsupport_impl.h',
- 'renderer/resizing_mode_selector.cc',
- 'renderer/resizing_mode_selector.h',
- 'renderer/sad_plugin.cc',
- 'renderer/sad_plugin.h',
- 'renderer/savable_resources.cc',
- 'renderer/savable_resources.h',
- 'renderer/screen_orientation/screen_orientation_dispatcher.cc',
- 'renderer/screen_orientation/screen_orientation_dispatcher.h',
- 'renderer/scoped_clipboard_writer_glue.cc',
- 'renderer/scoped_clipboard_writer_glue.h',
- 'renderer/service_worker/embedded_worker_context_client.cc',
- 'renderer/service_worker/embedded_worker_context_client.h',
- 'renderer/service_worker/embedded_worker_context_message_filter.cc',
- 'renderer/service_worker/embedded_worker_context_message_filter.h',
- 'renderer/service_worker/embedded_worker_devtools_agent.cc',
- 'renderer/service_worker/embedded_worker_devtools_agent.h',
- 'renderer/service_worker/embedded_worker_dispatcher.cc',
- 'renderer/service_worker/embedded_worker_dispatcher.h',
- 'renderer/service_worker/service_worker_script_context.cc',
- 'renderer/service_worker/service_worker_script_context.h',
- 'renderer/shared_memory_seqlock_reader.cc',
- 'renderer/shared_memory_seqlock_reader.h',
- 'renderer/shared_worker_repository.cc',
- 'renderer/shared_worker_repository.h',
- 'renderer/shared_worker/embedded_shared_worker_stub.cc',
- 'renderer/shared_worker/embedded_shared_worker_stub.h',
- 'renderer/skia_benchmarking_extension.cc',
- 'renderer/skia_benchmarking_extension.h',
- 'renderer/speech_recognition_dispatcher.cc',
- 'renderer/speech_recognition_dispatcher.h',
- 'renderer/stats_collection_controller.cc',
- 'renderer/stats_collection_controller.h',
- 'renderer/stats_collection_observer.cc',
- 'renderer/stats_collection_observer.h',
- 'renderer/text_input_client_observer.cc',
- 'renderer/text_input_client_observer.h',
- 'renderer/v8_value_converter_impl.cc',
- 'renderer/v8_value_converter_impl.h',
- 'renderer/web_preferences.cc',
- 'renderer/web_ui_extension.cc',
- 'renderer/web_ui_extension.h',
- 'renderer/web_ui_extension_data.cc',
- 'renderer/web_ui_extension_data.h',
- 'renderer/web_ui_mojo.cc',
- 'renderer/web_ui_mojo.h',
- 'renderer/web_ui_mojo_context_state.cc',
- 'renderer/web_ui_mojo_context_state.h',
- 'renderer/web_ui_runner.cc',
- 'renderer/web_ui_runner.h',
- 'renderer/web_ui_setup_impl.cc',
- 'renderer/web_ui_setup_impl.h',
- 'renderer/webclipboard_impl.cc',
- 'renderer/webclipboard_impl.h',
- 'renderer/webgraphicscontext3d_provider_impl.cc',
- 'renderer/webgraphicscontext3d_provider_impl.h',
- 'renderer/webpublicsuffixlist_impl.cc',
- 'renderer/webpublicsuffixlist_impl.h',
- 'renderer/webscrollbarbehavior_impl_gtkoraura.cc',
- 'renderer/webscrollbarbehavior_impl_gtkoraura.h',
- 'renderer/webscrollbarbehavior_impl_mac.mm',
- 'renderer/webscrollbarbehavior_impl_mac.h',
- 'renderer/websharedworker_proxy.cc',
- 'renderer/websharedworker_proxy.h',
+ '<@(public_renderer_sources)',
+ '<@(private_renderer_sources)',
],
'conditions': [
['notifications==0', {
@@ -594,6 +756,12 @@
],
}, {
'sources!': [
+ 'renderer/java/gin_java_bridge_dispatcher.cc',
+ 'renderer/java/gin_java_bridge_dispatcher.h',
+ 'renderer/java/gin_java_bridge_object.cc',
+ 'renderer/java/gin_java_bridge_object.h',
+ 'renderer/java/gin_java_bridge_value_converter.cc',
+ 'renderer/java/gin_java_bridge_value_converter.h',
'renderer/java/java_bridge_channel.cc',
'renderer/java/java_bridge_channel.h',
'renderer/java/java_bridge_dispatcher.cc',
@@ -618,129 +786,8 @@
'<(DEPTH)/crypto/crypto.gyp:crypto',
],
'sources': [
- 'public/renderer/media_stream_audio_sink.h',
- 'public/renderer/media_stream_audio_sink.cc',
- 'public/renderer/media_stream_sink.h',
- 'public/renderer/media_stream_video_sink.cc',
- 'public/renderer/media_stream_video_sink.h',
- 'public/renderer/webrtc_log_message_delegate.h',
- 'renderer/media/media_stream.h',
- 'renderer/media/media_stream.cc',
- 'renderer/media/media_stream_audio_processor.cc',
- 'renderer/media/media_stream_audio_processor.h',
- 'renderer/media/media_stream_audio_processor_options.cc',
- 'renderer/media/media_stream_audio_processor_options.h',
- 'renderer/media/media_stream_audio_sink_owner.cc',
- 'renderer/media/media_stream_audio_sink_owner.h',
- 'renderer/media/media_stream_audio_track_sink.h',
- 'renderer/media/media_stream_center.cc',
- 'renderer/media/media_stream_dependency_factory.cc',
- 'renderer/media/media_stream_dispatcher.cc',
- 'renderer/media/media_stream_impl.cc',
- 'renderer/media/media_stream_registry_interface.h',
- 'renderer/media/media_stream_audio_source.cc',
- 'renderer/media/media_stream_audio_source.h',
- 'renderer/media/media_stream_source.cc',
- 'renderer/media/media_stream_source.h',
- 'renderer/media/media_stream_video_capturer_source.cc',
- 'renderer/media/media_stream_video_capturer_source.h',
- 'renderer/media/media_stream_video_source.cc',
- 'renderer/media/media_stream_video_source.h',
- 'renderer/media/media_stream_video_track.cc',
- 'renderer/media/media_stream_video_track.h',
- 'renderer/media/native_handle_impl.cc',
- 'renderer/media/native_handle_impl.h',
- 'renderer/media/peer_connection_audio_sink_owner.cc',
- 'renderer/media/peer_connection_audio_sink_owner.h',
- 'renderer/media/peer_connection_identity_service.cc',
- 'renderer/media/peer_connection_identity_service.h',
- 'renderer/media/peer_connection_tracker.cc',
- 'renderer/media/peer_connection_tracker.h',
- 'renderer/media/remote_media_stream_impl.cc',
- 'renderer/media/remote_media_stream_impl.h',
- 'renderer/media/rtc_data_channel_handler.cc',
- 'renderer/media/rtc_data_channel_handler.h',
- 'renderer/media/rtc_dtmf_sender_handler.cc',
- 'renderer/media/rtc_dtmf_sender_handler.h',
- 'renderer/media/rtc_media_constraints.cc',
- 'renderer/media/rtc_media_constraints.h',
- 'renderer/media/rtc_peer_connection_handler.cc',
- 'renderer/media/rtc_peer_connection_handler.h',
- 'renderer/media/rtc_video_decoder.cc',
- 'renderer/media/rtc_video_decoder.h',
- 'renderer/media/rtc_video_decoder_factory.cc',
- 'renderer/media/rtc_video_decoder_factory.h',
- 'renderer/media/rtc_video_encoder.cc',
- 'renderer/media/rtc_video_encoder.h',
- 'renderer/media/rtc_video_encoder_factory.cc',
- 'renderer/media/rtc_video_encoder_factory.h',
- 'renderer/media/rtc_video_renderer.cc',
- 'renderer/media/rtc_video_renderer.h',
- 'renderer/media/video_frame_deliverer.cc',
- 'renderer/media/video_frame_deliverer.h',
- 'renderer/media/video_source_handler.cc',
- 'renderer/media/video_source_handler.h',
- 'renderer/media/webaudio_capturer_source.cc',
- 'renderer/media/webaudio_capturer_source.h',
- 'renderer/media/webrtc/webrtc_video_track_adapter.cc',
- 'renderer/media/webrtc/webrtc_video_track_adapter.h',
- 'renderer/media/webrtc/media_stream_remote_video_source.cc',
- 'renderer/media/webrtc/media_stream_remote_video_source.h',
- 'renderer/media/webrtc/media_stream_track_metrics.cc',
- 'renderer/media/webrtc/media_stream_track_metrics.h',
- 'renderer/media/webrtc/video_destination_handler.cc',
- 'renderer/media/webrtc/video_destination_handler.h',
- 'renderer/media/webrtc/webrtc_audio_sink_adapter.cc',
- 'renderer/media/webrtc/webrtc_audio_sink_adapter.h',
- 'renderer/media/webrtc/webrtc_local_audio_track_adapter.cc',
- 'renderer/media/webrtc/webrtc_local_audio_track_adapter.h',
- 'renderer/media/webrtc/webrtc_media_stream_adapter.cc',
- 'renderer/media/webrtc/webrtc_media_stream_adapter.h',
- 'renderer/media/webrtc/webrtc_video_capturer_adapter.cc',
- 'renderer/media/webrtc/webrtc_video_capturer_adapter.h',
- 'renderer/media/webrtc_audio_capturer.cc',
- 'renderer/media/webrtc_audio_capturer.h',
- 'renderer/media/webrtc_audio_device_impl.cc',
- 'renderer/media/webrtc_audio_device_impl.h',
- 'renderer/media/webrtc_audio_device_not_impl.cc',
- 'renderer/media/webrtc_audio_device_not_impl.h',
- 'renderer/media/webrtc_audio_renderer.cc',
- 'renderer/media/webrtc_audio_renderer.h',
- 'renderer/media/webrtc_identity_service.cc',
- 'renderer/media/webrtc_identity_service.h',
- 'renderer/media/webrtc_local_audio_renderer.cc',
- 'renderer/media/webrtc_local_audio_renderer.h',
- 'renderer/media/webrtc_local_audio_source_provider.cc',
- 'renderer/media/webrtc_local_audio_source_provider.h',
- 'renderer/media/webrtc_local_audio_track.cc',
- 'renderer/media/webrtc_local_audio_track.h',
- 'renderer/media/webrtc_logging.cc',
- 'renderer/media/webrtc_logging.h',
- 'renderer/media/webrtc_uma_histograms.cc',
- 'renderer/media/webrtc_uma_histograms.h',
- 'renderer/p2p/host_address_request.cc',
- 'renderer/p2p/host_address_request.h',
- 'renderer/p2p/ipc_network_manager.cc',
- 'renderer/p2p/ipc_network_manager.h',
- 'renderer/p2p/ipc_socket_factory.cc',
- 'renderer/p2p/ipc_socket_factory.h',
- 'renderer/p2p/network_list_observer.h',
- 'renderer/p2p/port_allocator.cc',
- 'renderer/p2p/port_allocator.h',
- 'renderer/p2p/socket_client_impl.cc',
- 'renderer/p2p/socket_client_impl.h',
- 'renderer/p2p/socket_dispatcher.cc',
- 'renderer/p2p/socket_dispatcher.h',
- 'renderer/pepper/pepper_media_stream_audio_track_host.cc',
- 'renderer/pepper/pepper_media_stream_audio_track_host.h',
- 'renderer/pepper/pepper_media_stream_track_host_base.cc',
- 'renderer/pepper/pepper_media_stream_track_host_base.h',
- 'renderer/pepper/pepper_media_stream_video_track_host.cc',
- 'renderer/pepper/pepper_media_stream_video_track_host.h',
- 'renderer/pepper/pepper_video_destination_host.cc',
- 'renderer/pepper/pepper_video_destination_host.h',
- 'renderer/pepper/pepper_video_source_host.cc',
- 'renderer/pepper/pepper_video_source_host.h',
+ '<@(public_renderer_webrtc_sources)',
+ '<@(private_renderer_webrtc_sources)',
],
},{ # enable_webrtc==0
'sources': [
@@ -749,22 +796,24 @@
],
}],
['enable_plugins==1', {
+ 'sources': [
+ '<@(private_renderer_plugin_sources)',
+ ],
'dependencies': [
'../ppapi/ppapi_internal.gyp:ppapi_host',
'../ppapi/ppapi_internal.gyp:ppapi_proxy',
'../ppapi/ppapi_internal.gyp:ppapi_shared',
],
}, { # enable_plugins==0
- 'sources/': [
- ['exclude', '^renderer/npapi/'],
- ['exclude', '^renderer/pepper/'],
- ],
'sources!': [
- 'renderer/media/pepper_platform_video_decoder.cc',
+ # These are not in the plugins sources list since it also requires webrtc.
'renderer/media/webrtc/video_destination_handler.cc',
'renderer/media/webrtc/video_destination_handler.h',
- 'renderer/render_widget_fullscreen_pepper.cc',
- 'renderer/render_widget_fullscreen_pepper.h',
+ ],
+ }],
+ ['enable_plugins==1 and enable_webrtc==1', {
+ 'sources': [
+ '<@(private_renderer_plugin_webrtc_sources)',
],
}],
['enable_pepper_cdms != 1', {
diff --git a/content/content_renderer.target.darwin-arm.mk b/content/content_renderer.target.darwin-arm.mk
index 9cb7f38cf1..0e489d4729 100644
--- a/content/content_renderer.target.darwin-arm.mk
+++ b/content/content_renderer.target.darwin-arm.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -280,7 +290,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -313,12 +330,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +353,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +384,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +434,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -454,7 +480,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -487,12 +520,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -505,10 +543,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -534,6 +574,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -584,6 +625,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -664,7 +706,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.darwin-arm64.mk b/content/content_renderer.target.darwin-arm64.mk
index ddc28ca3c6..f44c9008d1 100644
--- a/content/content_renderer.target.darwin-arm64.mk
+++ b/content/content_renderer.target.darwin-arm64.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -310,12 +320,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -328,10 +343,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -357,6 +374,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -406,6 +424,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -480,12 +499,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -498,10 +522,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -527,6 +553,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -577,6 +604,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -648,7 +676,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.darwin-mips.mk b/content/content_renderer.target.darwin-mips.mk
index fa1b204d5f..47606c46b8 100644
--- a/content/content_renderer.target.darwin-mips.mk
+++ b/content/content_renderer.target.darwin-mips.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -280,6 +290,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -313,12 +324,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -454,6 +474,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -487,12 +508,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -505,10 +531,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -534,6 +562,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -584,6 +613,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -660,7 +690,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.darwin-x86.mk b/content/content_renderer.target.darwin-x86.mk
index 3069126582..8b10333390 100644
--- a/content/content_renderer.target.darwin-x86.mk
+++ b/content/content_renderer.target.darwin-x86.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -279,6 +289,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -314,12 +325,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -452,6 +472,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -487,12 +508,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -504,10 +530,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -533,6 +561,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -583,6 +612,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -658,7 +688,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.darwin-x86_64.mk b/content/content_renderer.target.darwin-x86_64.mk
index 147b146925..6f6ba5ed99 100644
--- a/content/content_renderer.target.darwin-x86_64.mk
+++ b/content/content_renderer.target.darwin-x86_64.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -314,12 +324,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -332,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -361,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -410,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -488,12 +507,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -506,10 +530,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -535,6 +561,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -585,6 +612,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -660,7 +688,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.linux-arm.mk b/content/content_renderer.target.linux-arm.mk
index 9cb7f38cf1..0e489d4729 100644
--- a/content/content_renderer.target.linux-arm.mk
+++ b/content/content_renderer.target.linux-arm.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -280,7 +290,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -313,12 +330,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +353,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +384,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +434,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -454,7 +480,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -487,12 +520,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -505,10 +543,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -534,6 +574,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -584,6 +625,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -664,7 +706,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.linux-arm64.mk b/content/content_renderer.target.linux-arm64.mk
index ddc28ca3c6..f44c9008d1 100644
--- a/content/content_renderer.target.linux-arm64.mk
+++ b/content/content_renderer.target.linux-arm64.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -310,12 +320,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -328,10 +343,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -357,6 +374,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -406,6 +424,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -480,12 +499,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -498,10 +522,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -527,6 +553,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -577,6 +604,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -648,7 +676,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.linux-mips.mk b/content/content_renderer.target.linux-mips.mk
index fa1b204d5f..47606c46b8 100644
--- a/content/content_renderer.target.linux-mips.mk
+++ b/content/content_renderer.target.linux-mips.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -280,6 +290,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -313,12 +324,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -454,6 +474,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -487,12 +508,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -505,10 +531,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -534,6 +562,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -584,6 +613,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -660,7 +690,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.linux-x86.mk b/content/content_renderer.target.linux-x86.mk
index 3069126582..8b10333390 100644
--- a/content/content_renderer.target.linux-x86.mk
+++ b/content/content_renderer.target.linux-x86.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -279,6 +289,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -314,12 +325,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -331,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -360,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -409,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -452,6 +472,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -487,12 +508,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -504,10 +530,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -533,6 +561,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -583,6 +612,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -658,7 +688,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_renderer.target.linux-x86_64.mk b/content/content_renderer.target.linux-x86_64.mk
index 147b146925..6f6ba5ed99 100644
--- a/content/content_renderer.target.linux-x86_64.mk
+++ b/content/content_renderer.target.linux-x86_64.mk
@@ -14,7 +14,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
GYP_TARGET_DEPENDENCIES := \
$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,content_content_common_mojo_bindings_gyp,,,$(GYP_VAR_PREFIX))/content_content_common_mojo_bindings_gyp.a \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a \
$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a \
$(call intermediates-dir-for,GYP,third_party_WebKit_public_blink_gyp,,,$(GYP_VAR_PREFIX))/blink.stamp \
@@ -58,6 +58,7 @@ LOCAL_SRC_FILES := \
content/renderer/android/email_detector.cc \
content/renderer/android/phone_number_detector.cc \
content/renderer/android/synchronous_compositor_factory.cc \
+ content/renderer/battery_status/battery_status_dispatcher.cc \
content/renderer/browser_plugin/browser_plugin.cc \
content/renderer/browser_plugin/browser_plugin_bindings.cc \
content/renderer/browser_plugin/browser_plugin_manager_impl.cc \
@@ -104,14 +105,15 @@ LOCAL_SRC_FILES := \
content/renderer/input/input_handler_proxy.cc \
content/renderer/input/input_handler_wrapper.cc \
content/renderer/internal_document_state_data.cc \
+ content/renderer/java/gin_java_bridge_dispatcher.cc \
+ content/renderer/java/gin_java_bridge_object.cc \
+ content/renderer/java/gin_java_bridge_value_converter.cc \
content/renderer/java/java_bridge_channel.cc \
content/renderer/java/java_bridge_dispatcher.cc \
- content/renderer/load_progress_tracker.cc \
content/renderer/media/active_loader.cc \
content/renderer/media/android/audio_decoder_android.cc \
content/renderer/media/android/media_info_loader.cc \
content/renderer/media/android/media_source_delegate.cc \
- content/renderer/media/android/proxy_media_keys.cc \
content/renderer/media/android/renderer_demuxer_android.cc \
content/renderer/media/android/renderer_media_player_manager.cc \
content/renderer/media/android/stream_texture_factory_impl.cc \
@@ -131,8 +133,11 @@ LOCAL_SRC_FILES := \
content/renderer/media/crypto/key_systems_support_uma.cc \
content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc \
content/renderer/media/crypto/proxy_decryptor.cc \
+ content/renderer/media/crypto/proxy_media_keys.cc \
+ content/renderer/media/crypto/renderer_cdm_manager.cc \
content/renderer/media/media_stream_audio_level_calculator.cc \
content/renderer/media/media_stream_audio_renderer.cc \
+ content/renderer/media/media_stream_constraints_util.cc \
content/renderer/media/media_stream_track.cc \
content/renderer/media/midi_dispatcher.cc \
content/renderer/media/midi_message_filter.cc \
@@ -159,8 +164,10 @@ LOCAL_SRC_FILES := \
content/renderer/menu_item_builder.cc \
content/renderer/mhtml_generator.cc \
content/renderer/mouse_lock_dispatcher.cc \
+ content/renderer/net_info_helper.cc \
content/renderer/push_messaging_dispatcher.cc \
content/renderer/render_frame_impl.cc \
+ content/renderer/render_frame_proxy.cc \
content/renderer/render_process_impl.cc \
content/renderer/render_thread_impl.cc \
content/renderer/render_view_impl.cc \
@@ -181,6 +188,7 @@ LOCAL_SRC_FILES := \
content/renderer/resizing_mode_selector.cc \
content/renderer/sad_plugin.cc \
content/renderer/savable_resources.cc \
+ content/renderer/screen_orientation/mock_screen_orientation_controller.cc \
content/renderer/screen_orientation/screen_orientation_dispatcher.cc \
content/renderer/scoped_clipboard_writer_glue.cc \
content/renderer/service_worker/embedded_worker_context_client.cc \
@@ -217,10 +225,10 @@ LOCAL_SRC_FILES := \
content/renderer/media/media_stream_audio_processor_options.cc \
content/renderer/media/media_stream_audio_sink_owner.cc \
content/renderer/media/media_stream_center.cc \
- content/renderer/media/media_stream_dependency_factory.cc \
content/renderer/media/media_stream_dispatcher.cc \
content/renderer/media/media_stream_impl.cc \
content/renderer/media/media_stream_audio_source.cc \
+ content/renderer/media/media_stream_renderer_factory.cc \
content/renderer/media/media_stream_source.cc \
content/renderer/media/media_stream_video_capturer_source.cc \
content/renderer/media/media_stream_video_source.cc \
@@ -241,10 +249,12 @@ LOCAL_SRC_FILES := \
content/renderer/media/rtc_video_renderer.cc \
content/renderer/media/video_frame_deliverer.cc \
content/renderer/media/video_source_handler.cc \
+ content/renderer/media/video_track_adapter.cc \
content/renderer/media/webaudio_capturer_source.cc \
content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
content/renderer/media/webrtc/media_stream_remote_video_source.cc \
content/renderer/media/webrtc/media_stream_track_metrics.cc \
+ content/renderer/media/webrtc/peer_connection_dependency_factory.cc \
content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
@@ -314,12 +324,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -332,10 +347,12 @@ MY_DEFS_Debug := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -361,6 +378,7 @@ MY_DEFS_Debug := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -410,6 +428,7 @@ LOCAL_C_INCLUDES_Debug := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -488,12 +507,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DLIBPEERCONNECTION_LIB=1' \
@@ -506,10 +530,12 @@ MY_DEFS_Release := \
'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
'-DGR_GL_IGNORE_ES3_MSAA=0' \
'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
- '-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
+ '-DSK_SUPPORT_LEGACY_ASIMAGEINFO' \
'-DSK_SUPPORT_LEGACY_N32_NAME' \
- '-DSK_SUPPORT_LEGACY_BLURMASKFILTER_STYLE' \
+ '-DSK_IGNORE_CORRECT_HIGH_QUALITY_IMAGE_SCALE' \
+ '-DSK_SUPPORT_LEGACY_INSTALLPIXELSPARAMS' \
+ '-DSK_SUPPORT_LEGACY_IMAGEGENERATORAPI' \
'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
'-DSK_BUILD_FOR_ANDROID' \
'-DSK_USE_POSIX_THREADS' \
@@ -535,6 +561,7 @@ MY_DEFS_Release := \
'-DWEBRTC_LINUX' \
'-DWEBRTC_ANDROID' \
'-DWEBRTC_ANDROID_OPENSLES' \
+ '-DWEBRTC_POSIX' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
'-D__STDC_CONSTANT_MACROS' \
@@ -585,6 +612,7 @@ LOCAL_C_INCLUDES_Release := \
$(PWD)/external/icu4c/i18n \
$(LOCAL_PATH)/third_party/libjingle/overrides \
$(LOCAL_PATH)/third_party/libjingle/source \
+ $(LOCAL_PATH)/third_party/webrtc/overrides \
$(LOCAL_PATH)/testing/gtest/include \
$(LOCAL_PATH)/third_party \
$(LOCAL_PATH)/third_party/webrtc \
@@ -660,7 +688,7 @@ LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
cpufeatures \
content_content_common_mojo_bindings_gyp \
- mojo_mojo_shell_bindings_gyp \
+ mojo_mojo_service_provider_bindings_gyp \
skia_skia_library_gyp \
ui_accessibility_accessibility_gyp \
ui_accessibility_ax_gen_gyp \
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 3b14649f14..537bf05bde 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -175,10 +175,6 @@
'shell/renderer/shell_render_view_observer.h',
'shell/renderer/test_runner/MockColorChooser.cpp',
'shell/renderer/test_runner/MockColorChooser.h',
- 'shell/renderer/test_runner/MockConstraints.cpp',
- 'shell/renderer/test_runner/MockConstraints.h',
- 'shell/renderer/test_runner/MockGrammarCheck.cpp',
- 'shell/renderer/test_runner/MockGrammarCheck.h',
'shell/renderer/test_runner/MockSpellCheck.cpp',
'shell/renderer/test_runner/MockSpellCheck.h',
'shell/renderer/test_runner/MockWebAudioDevice.cpp',
@@ -203,7 +199,6 @@
'shell/renderer/test_runner/TestInterfaces.h',
'shell/renderer/test_runner/TestPlugin.cpp',
'shell/renderer/test_runner/TestPlugin.h',
- 'shell/renderer/test_runner/WebFrameTestProxy.h',
'shell/renderer/test_runner/WebPermissions.cpp',
'shell/renderer/test_runner/WebPermissions.h',
'shell/renderer/test_runner/WebTask.cpp',
@@ -211,9 +206,6 @@
'shell/renderer/test_runner/WebTestDelegate.h',
'shell/renderer/test_runner/WebTestInterfaces.cpp',
'shell/renderer/test_runner/WebTestInterfaces.h',
- 'shell/renderer/test_runner/WebTestProxy.cpp',
- 'shell/renderer/test_runner/WebTestProxy.h',
- 'shell/renderer/test_runner/WebTestRunner.h',
'shell/renderer/test_runner/WebTestThemeEngineMac.h',
'shell/renderer/test_runner/WebTestThemeEngineMac.mm',
'shell/renderer/test_runner/WebTestThemeEngineMock.cpp',
@@ -226,6 +218,10 @@
'shell/renderer/test_runner/event_sender.h',
'shell/renderer/test_runner/gamepad_controller.cc',
'shell/renderer/test_runner/gamepad_controller.h',
+ 'shell/renderer/test_runner/mock_constraints.cc',
+ 'shell/renderer/test_runner/mock_constraints.h',
+ 'shell/renderer/test_runner/mock_grammar_check.cc',
+ 'shell/renderer/test_runner/mock_grammar_check.h',
'shell/renderer/test_runner/notification_presenter.cc',
'shell/renderer/test_runner/notification_presenter.h',
'shell/renderer/test_runner/test_runner.cc',
@@ -234,6 +230,10 @@
'shell/renderer/test_runner/text_input_controller.h',
'shell/renderer/test_runner/web_ax_object_proxy.cc',
'shell/renderer/test_runner/web_ax_object_proxy.h',
+ 'shell/renderer/test_runner/web_frame_test_proxy.h',
+ 'shell/renderer/test_runner/web_test_proxy.cc',
+ 'shell/renderer/test_runner/web_test_proxy.h',
+ 'shell/renderer/test_runner/web_test_runner.h',
'shell/renderer/webkit_test_runner.cc',
'shell/renderer/webkit_test_runner.h',
],
@@ -309,8 +309,8 @@
'dependencies': [
'../ui/aura/aura.gyp:aura',
'../ui/aura/aura.gyp:aura_test_support',
- '../ui/base/strings/ui_strings.gyp:ui_strings',
'../ui/events/events.gyp:events',
+ '../ui/strings/ui_strings.gyp:ui_strings',
'../ui/wm/wm.gyp:wm',
],
'conditions': [
@@ -364,12 +364,18 @@
{
'target_name': 'content_shell_resources',
'type': 'none',
- 'dependencies': [
- 'generate_content_shell_resources',
- ],
'variables': {
'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/content',
},
+ 'actions': [
+ {
+ 'action_name': 'generate_content_shell_resources',
+ 'variables': {
+ 'grit_grd_file': 'shell/shell_resources.grd',
+ },
+ 'includes': [ '../build/grit_action.gypi' ],
+ },
+ ],
'includes': [ '../build/grit_target.gypi' ],
'copies': [
{
@@ -418,22 +424,6 @@
],
},
{
- 'target_name': 'generate_content_shell_resources',
- 'type': 'none',
- 'variables': {
- 'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/content',
- },
- 'actions': [
- {
- 'action_name': 'content_shell_resources',
- 'variables': {
- 'grit_grd_file': 'shell/shell_resources.grd',
- },
- 'includes': [ '../build/grit_action.gypi' ],
- },
- ],
- },
- {
# We build a minimal set of resources so WebKit in content_shell has
# access to necessary resources.
'target_name': 'content_shell_pak',
@@ -442,8 +432,8 @@
'content_resources.gyp:content_resources',
'content_shell_resources',
'<(DEPTH)/net/net.gyp:net_resources',
- '<(DEPTH)/ui/base/strings/ui_strings.gyp:ui_strings',
'<(DEPTH)/ui/resources/ui_resources.gyp:ui_resources',
+ '<(DEPTH)/ui/strings/ui_strings.gyp:ui_strings',
'<(DEPTH)/webkit/webkit_resources.gyp:webkit_resources',
'<(DEPTH)/webkit/webkit_resources.gyp:webkit_strings',
],
@@ -551,7 +541,6 @@
},
},
},
- 'msvs_large_pdb': 1,
}], # OS=="win"
['OS == "win"', {
'dependencies': [
@@ -953,7 +942,6 @@
],
'variables': {
'jni_gen_package': 'content/shell',
- 'jni_generator_ptr_type': 'long',
},
'includes': [ '../build/jni_generator.gypi' ],
},
diff --git a/content/content_strings_grd.target.darwin-arm.mk b/content/content_strings_grd.target.darwin-arm.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.darwin-arm.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.darwin-arm64.mk b/content/content_strings_grd.target.darwin-arm64.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.darwin-arm64.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.darwin-mips.mk b/content/content_strings_grd.target.darwin-mips.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.darwin-mips.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.darwin-x86.mk b/content/content_strings_grd.target.darwin-x86.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.darwin-x86.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.darwin-x86_64.mk b/content/content_strings_grd.target.darwin-x86_64.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.darwin-x86_64.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.linux-arm.mk b/content/content_strings_grd.target.linux-arm.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.linux-arm.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.linux-arm64.mk b/content/content_strings_grd.target.linux-arm64.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.linux-arm64.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.linux-mips.mk b/content/content_strings_grd.target.linux-mips.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.linux-mips.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.linux-x86.mk b/content/content_strings_grd.target.linux-x86.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.linux-x86.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_strings_grd.target.linux-x86_64.mk b/content/content_strings_grd.target.linux-x86_64.mk
new file mode 100644
index 0000000000..e5d5eade34
--- /dev/null
+++ b/content/content_strings_grd.target.linux-x86_64.mk
@@ -0,0 +1,141 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := content_content_strings_grd_gyp
+LOCAL_MODULE_STEM := content_strings_grd
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_localized_strings_xml":
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml: $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_am.xtb $(LOCAL_PATH)/content/public/android/java/strings/android_content_strings.grd $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ar.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_bg.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ca.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_cs.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_da.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_de.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_el.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_en-GB.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es-419.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_es.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fa.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fil.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_fr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_hu.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_id.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_it.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_iw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ja.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ko.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lt.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_lv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_nl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_no.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-BR.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_pt-PT.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ro.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_ru.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sl.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sv.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_sw.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_th.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_tr.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_uk.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_vi.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-CN.xtb $(LOCAL_PATH)/content/public/android/java/strings/translations/android_content_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating resources from ../content/public/android/java/strings/android_content_strings.grd ($@)"
+ $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl; python ../tools/grit/grit.py -i ../content/public/android/java/strings/android_content_strings.grd build -f "" -o "$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc -E "ANDROID_JAVA_TAGGED_ONLY=false"
+
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+$(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml: $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml ;
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-am/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ar/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-bg/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ca/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-cs/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-da/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-de/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-el/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-en-rGB/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-es-rUS/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fa/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-fr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-hu/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-in/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-it/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-iw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ja/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ko/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lt/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-lv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-nb/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rBR/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-pt-rPT/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ro/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-ru/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sl/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sv/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-sw/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-th/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-tr/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-uk/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-vi/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rCN/android_content_strings.xml \
+ $(gyp_shared_intermediate_dir)/content_strings_grd/res_grit/values-zh-rTW/android_content_strings.xml
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: content_content_strings_grd_gyp
+
+# Alias gyp target name.
+.PHONY: content_strings_grd
+content_strings_grd: content_content_strings_grd_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
+
+LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index b7fe252bd8..9656f2258d 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -30,10 +30,8 @@
'public/test/nested_message_pump_android.cc',
'public/test/nested_message_pump_android.h',
'test/layouttest_support.cc',
- 'test/mock_webclipboard_impl.cc',
- 'test/mock_webclipboard_impl.h',
- 'test/test_media_stream_client.cc',
- 'test/test_media_stream_client.h',
+ 'test/test_media_stream_renderer_factory.cc',
+ 'test/test_media_stream_renderer_factory.h',
'test/test_video_frame_provider.cc',
'test/test_video_frame_provider.h',
],
@@ -83,6 +81,8 @@
'public/test/download_test_observer.h',
'public/test/fake_speech_recognition_manager.cc',
'public/test/fake_speech_recognition_manager.h',
+ 'public/test/javascript_test_observer.cc',
+ 'public/test/javascript_test_observer.h',
'public/test/mock_blob_url_request_context.cc',
'public/test/mock_blob_url_request_context.h',
'public/test/mock_download_item.cc',
@@ -173,6 +173,8 @@
'test/mock_keyboard_driver_win.h',
'test/mock_render_process.cc',
'test/mock_render_process.h',
+ 'test/mock_webclipboard_impl.cc',
+ 'test/mock_webclipboard_impl.h',
'test/mock_webframeclient.h',
'test/mock_weburlloader.cc',
'test/mock_weburlloader.h',
@@ -204,8 +206,16 @@
'test/test_render_view_host_factory.h',
'test/test_web_contents.cc',
'test/test_web_contents.h',
+ 'test/test_webkit_platform_support.cc',
+ 'test/test_webkit_platform_support.h',
'test/web_gesture_curve_mock.cc',
'test/web_gesture_curve_mock.h',
+ 'test/webkit_support.cc',
+ 'test/webkit_support.h',
+ 'test/webkit_unit_test_support.cc',
+ 'test/webkit_unit_test_support.h',
+ 'test/web_layer_tree_view_impl_for_testing.cc',
+ 'test/web_layer_tree_view_impl_for_testing.h',
'test/weburl_loader_mock.cc',
'test/weburl_loader_mock.h',
'test/weburl_loader_mock_factory.cc',
@@ -286,14 +296,14 @@
}],
['enable_webrtc==1', {
'sources': [
- 'renderer/media/mock_media_stream_dependency_factory.cc',
- 'renderer/media/mock_media_stream_dependency_factory.h',
'renderer/media/mock_media_stream_dispatcher.cc',
'renderer/media/mock_media_stream_dispatcher.h',
'renderer/media/mock_peer_connection_impl.cc',
'renderer/media/mock_peer_connection_impl.h',
'renderer/media/mock_web_rtc_peer_connection_handler_client.cc',
'renderer/media/mock_web_rtc_peer_connection_handler_client.h',
+ 'renderer/media/webrtc/mock_peer_connection_dependency_factory.cc',
+ 'renderer/media/webrtc/mock_peer_connection_dependency_factory.h',
],
'dependencies': [
'../third_party/libjingle/libjingle.gyp:libjingle_webrtc',
@@ -389,13 +399,17 @@
'browser/appcache/mock_appcache_storage.cc',
'browser/appcache/mock_appcache_storage.h',
'browser/appcache/mock_appcache_storage_unittest.cc',
+ 'browser/battery_status/battery_status_service_unittest.cc',
'browser/browser_thread_unittest.cc',
'browser/browser_url_handler_impl_unittest.cc',
'browser/byte_stream_unittest.cc',
'browser/child_process_security_policy_unittest.cc',
'browser/compositor/software_browser_compositor_output_surface_unittest.cc',
'browser/compositor/software_output_device_ozone_unittest.cc',
+ 'browser/databases_table_unittest.cc',
+ 'browser/database_quota_client_unittest.cc',
'browser/database_tracker_unittest.cc',
+ 'browser/database_util_unittest.cc',
'browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc',
'browser/device_sensors/sensor_manager_android_unittest.cc',
'browser/devtools/embedded_worker_devtools_manager_unittest.cc',
@@ -431,10 +445,13 @@
'browser/fileapi/file_writer_delegate_unittest.cc',
'browser/fileapi/fileapi_message_filter_unittest.cc',
'browser/fileapi/isolated_context_unittest.cc',
+ 'browser/fileapi/local_file_stream_reader_unittest.cc',
'browser/fileapi/local_file_stream_writer_unittest.cc',
'browser/fileapi/local_file_util_unittest.cc',
'browser/fileapi/mock_file_change_observer.cc',
'browser/fileapi/mock_file_change_observer.h',
+ 'browser/fileapi/mock_url_request_delegate.cc',
+ 'browser/fileapi/mock_url_request_delegate.h',
'browser/fileapi/native_file_util_unittest.cc',
'browser/fileapi/obfuscated_file_util_unittest.cc',
'browser/fileapi/plugin_private_file_system_backend_unittest.cc',
@@ -486,7 +503,6 @@
'browser/indexed_db/mock_indexed_db_database_callbacks.h',
'browser/indexed_db/leveldb/leveldb_unittest.cc',
'browser/indexed_db/list_set_unittest.cc',
- 'browser/loader/offline_policy_unittest.cc',
'browser/loader/resource_buffer_unittest.cc',
'browser/loader/resource_dispatcher_host_unittest.cc',
'browser/loader/resource_loader_unittest.cc',
@@ -602,6 +618,7 @@
'child/fileapi/webfilewriter_base_unittest.cc',
'child/indexed_db/indexed_db_dispatcher_unittest.cc',
'child/indexed_db/webidbcursor_impl_unittest.cc',
+ 'child/multipart_response_delegate_unittest.cc',
'child/npapi/plugin_lib_unittest.cc',
'child/power_monitor_broadcast_source_unittest.cc',
'child/resource_dispatcher_unittest.cc',
@@ -639,6 +656,7 @@
'renderer/active_notification_tracker_unittest.cc',
'renderer/android/email_detector_unittest.cc',
'renderer/android/phone_number_detector_unittest.cc',
+ 'renderer/battery_status/battery_status_dispatcher_unittest.cc',
'renderer/bmp_image_decoder_unittest.cc',
'renderer/device_sensors/device_motion_event_pump_unittest.cc',
'renderer/device_sensors/device_orientation_event_pump_unittest.cc',
@@ -680,11 +698,6 @@
'test/image_decoder_test.cc',
'test/image_decoder_test.h',
'test/run_all_unittests.cc',
- '../webkit/browser/blob/local_file_stream_reader_unittest.cc',
- '../webkit/browser/database/database_quota_client_unittest.cc',
- '../webkit/browser/database/database_util_unittest.cc',
- '../webkit/browser/database/databases_table_unittest.cc',
- '../webkit/child/multipart_response_delegate_unittest.cc',
],
'conditions': [
['OS == "ios"', {
@@ -747,7 +760,7 @@
'browser/renderer_host/p2p/socket_host_udp_unittest.cc',
'browser/renderer_host/p2p/socket_host_unittest.cc',
'renderer/media/media_stream_audio_processor_unittest.cc',
- 'renderer/media/media_stream_dependency_factory_unittest.cc',
+ 'renderer/media/media_stream_constraints_util_unittest.cc',
'renderer/media/media_stream_dispatcher_unittest.cc',
'renderer/media/media_stream_impl_unittest.cc',
'renderer/media/media_stream_video_capture_source_unittest.cc',
@@ -765,6 +778,7 @@
'renderer/media/video_source_handler_unittest.cc',
'renderer/media/webrtc/media_stream_remote_video_source_unittest.cc',
'renderer/media/webrtc/media_stream_track_metrics_unittest.cc',
+ 'renderer/media/webrtc/peer_connection_dependency_factory_unittest.cc',
'renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc',
'renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc',
'renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc',
@@ -864,6 +878,7 @@
['OS == "android"', {
'sources': [
'browser/renderer_host/java/jni_helper_unittest.cc',
+ 'renderer/java/gin_java_bridge_value_converter_unittest.cc',
],
'sources!': [
'browser/geolocation/network_location_provider_unittest.cc',
@@ -877,7 +892,7 @@
'../third_party/libvpx/libvpx.gyp:libvpx',
],
}],
- ['OS == "android" and gtest_target_type == "shared_library"', {
+ ['OS == "android"', {
'dependencies': [
'../testing/android/native_test.gyp:native_test_native_code',
],
@@ -897,6 +912,11 @@
'common/plugin_list_unittest.cc',
],
}],
+ ['use_ozone==1', {
+ 'dependencies': [
+ '../ui/gfx/ozone/gfx_ozone.gyp:gfx_ozone',
+ ],
+ }],
],
},
],
@@ -946,7 +966,7 @@
'test/run_all_perftests.cc',
],
'conditions': [
- ['OS == "android" and gtest_target_type == "shared_library"', {
+ ['OS == "android"', {
'dependencies': [
'../testing/android/native_test.gyp:native_test_native_code',
],
@@ -990,11 +1010,6 @@
'sources': [
'test/data/web_ui_test_mojo_bindings.mojom',
],
- # TODO(sky): this shouldn't be necessary. It's working around a bug in
- # gyp.
- 'variables': {
- 'mojom_base_output_dir': 'content',
- },
'includes': [ '../mojo/public/tools/bindings/mojom_bindings_generator.gypi' ],
'export_dependent_settings': [
'../mojo/mojo.gyp:mojo_cpp_bindings',
@@ -1031,6 +1046,7 @@
'../ppapi/ppapi_internal.gyp:ppapi_ipc',
'../ppapi/ppapi_internal.gyp:ppapi_proxy',
'../ppapi/ppapi_internal.gyp:ppapi_shared',
+ '../ppapi/ppapi_internal.gyp:ppapi_tests',
'../ppapi/ppapi_internal.gyp:ppapi_unittest_shared',
'../testing/gmock.gyp:gmock',
'../testing/gtest.gyp:gtest',
@@ -1062,6 +1078,7 @@
'app/mojo/mojo_browsertest.cc',
'browser/accessibility/accessibility_mode_browsertest.cc',
'browser/accessibility/accessibility_win_browsertest.cc',
+ 'browser/accessibility/android_hit_testing_browsertest.cc',
'browser/accessibility/cross_platform_accessibility_browsertest.cc',
'browser/accessibility/dump_accessibility_tree_browsertest.cc',
'browser/compositor/image_transport_factory_browsertest.cc',
@@ -1071,10 +1088,8 @@
'browser/browser_plugin/test_browser_plugin_guest.h',
'browser/browser_plugin/test_browser_plugin_guest_delegate.cc',
'browser/browser_plugin/test_browser_plugin_guest_delegate.h',
- 'browser/browser_plugin/test_browser_plugin_guest_manager.cc',
- 'browser/browser_plugin/test_browser_plugin_guest_manager.h',
- 'browser/browser_plugin/test_guest_manager_delegate.cc',
- 'browser/browser_plugin/test_guest_manager_delegate.h',
+ 'browser/browser_plugin/test_guest_manager.cc',
+ 'browser/browser_plugin/test_guest_manager.h',
'browser/child_process_security_policy_browsertest.cc',
'browser/cross_site_transfer_browsertest.cc',
'browser/database_browsertest.cc',
@@ -1148,6 +1163,9 @@
'test/accessibility_browser_test_utils.cc',
'test/accessibility_browser_test_utils.h',
'test/content_browser_test_test.cc',
+ 'test/ppapi/ppapi_browsertest.cc',
+ 'test/ppapi/ppapi_test.cc',
+ 'test/ppapi/ppapi_test.h',
'test/webui_resource_browsertest.cc',
],
'conditions': [
@@ -1205,6 +1223,11 @@
'browser/accessibility/dump_accessibility_tree_browsertest.cc',
],
}],
+ ['OS!="android"', {
+ 'sources!': [
+ 'browser/accessibility/android_hit_testing_browsertest.cc',
+ ]
+ }],
['OS=="android"', {
'sources': [
'shell/android/browsertests_apk/content_browser_tests_android.cc',
@@ -1268,7 +1291,13 @@
'sources!': [
'browser/plugin_service_impl_browsertest.cc',
'browser/plugin_data_remover_impl_browsertest.cc',
+ 'test/ppapi/ppapi_browsertest.cc',
+ 'test/ppapi/ppapi_test.cc',
+ 'test/ppapi/ppapi_test.h',
],
+ 'dependencies!': [
+ '../ppapi/ppapi_internal.gyp:ppapi_tests',
+ ]
}],
['input_speech==0', {
'sources/': [
@@ -1279,7 +1308,7 @@
'sources!': [
# These tests depend on single process mode, which is disabled
# in official builds.
- 'renderer/browser_render_view_browsertest.cc',
+ 'renderer/browser_render_view_browsertest.cc',
'renderer/dom_serializer_browsertest.cc',
'renderer/resource_fetcher_browsertest.cc',
'renderer/savable_resources_browsertest.cc',
@@ -1345,28 +1374,6 @@
'common/gpu/client/gl_helper_benchmark.cc',
],
},
- {
- 'target_name': 'content_webkit_unit_test_support',
- 'type': 'static_library',
- 'dependencies': [
- 'test_support_content',
- ],
- 'include_dirs': [
- '..',
- ],
- 'sources': [
- 'test/mock_webclipboard_impl.cc',
- 'test/mock_webclipboard_impl.h',
- 'test/test_webkit_platform_support.cc',
- 'test/test_webkit_platform_support.h',
- 'test/web_layer_tree_view_impl_for_testing.cc',
- 'test/web_layer_tree_view_impl_for_testing.h',
- 'test/webkit_support.cc',
- 'test/webkit_support.h',
- 'test/webkit_unit_test_support.cc',
- 'test/webkit_unit_test_support.h',
- ],
- },
],
}],
['chromeos==1 or OS=="win" or OS=="android"', {
@@ -1433,7 +1440,7 @@
['use_x11==1', {
'dependencies': [
'../build/linux/system.gyp:x11', # Used by rendering_helper.cc
- '../ui/gfx/gfx.gyp:gfx_x11',
+ '../ui/gfx/x/gfx_x11.gyp:gfx_x11',
],
}],
],
@@ -1488,10 +1495,7 @@
},
]
}],
- # Special target to wrap a gtest_target_type==shared_library
- # content_unittests into an android apk for execution.
- # See base.gyp for TODO(jrg)s about this strategy.
- ['OS == "android" and gtest_target_type == "shared_library"', {
+ ['OS == "android"', {
'targets': [
{
'target_name': 'content_gl_tests_apk',
@@ -1615,7 +1619,6 @@
],
'variables': {
'jni_gen_package': 'content/shell',
- 'jni_generator_ptr_type': 'long',
},
'includes': [ '../build/jni_generator.gypi' ],
},
@@ -1642,7 +1645,6 @@
],
'variables': {
'jni_gen_package': 'content/public/test',
- 'jni_generator_ptr_type': 'long',
},
'includes': [ '../build/jni_generator.gypi' ],
},
diff --git a/content/content_utility.gypi b/content/content_utility.gypi
index 513c2401ac..2b46f7d665 100644
--- a/content/content_utility.gypi
+++ b/content/content_utility.gypi
@@ -6,7 +6,7 @@
'dependencies': [
'../base/base.gyp:base',
'../courgette/courgette.gyp:courgette_lib',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
],
'sources': [
'public/utility/content_utility_client.cc',
diff --git a/content/content_utility.target.darwin-arm.mk b/content/content_utility.target.darwin-arm.mk
index 42167cb896..cea5baa830 100644
--- a/content/content_utility.target.darwin-arm.mk
+++ b/content/content_utility.target.darwin-arm.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -45,7 +45,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -78,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -141,7 +153,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -174,12 +193,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -271,7 +295,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.darwin-arm64.mk b/content/content_utility.target.darwin-arm64.mk
index b4634e3b03..c0fe0f89bb 100644
--- a/content/content_utility.target.darwin-arm64.mk
+++ b/content/content_utility.target.darwin-arm64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -75,12 +75,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -167,12 +172,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -255,7 +265,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.darwin-mips.mk b/content/content_utility.target.darwin-mips.mk
index b50a09b431..a557810bc3 100644
--- a/content/content_utility.target.darwin-mips.mk
+++ b/content/content_utility.target.darwin-mips.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -45,6 +45,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -78,12 +79,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -141,6 +147,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -174,12 +181,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +279,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.darwin-x86.mk b/content/content_utility.target.darwin-x86.mk
index 3a0180256f..96ad3e5e0c 100644
--- a/content/content_utility.target.darwin-x86.mk
+++ b/content/content_utility.target.darwin-x86.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -44,6 +44,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -79,12 +80,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -140,6 +146,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -175,12 +182,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +279,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.darwin-x86_64.mk b/content/content_utility.target.darwin-x86_64.mk
index b7e36869e1..d8b5527114 100644
--- a/content/content_utility.target.darwin-x86_64.mk
+++ b/content/content_utility.target.darwin-x86_64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -79,12 +79,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -175,12 +180,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +277,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.linux-arm.mk b/content/content_utility.target.linux-arm.mk
index 42167cb896..cea5baa830 100644
--- a/content/content_utility.target.linux-arm.mk
+++ b/content/content_utility.target.linux-arm.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -45,7 +45,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -78,12 +85,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -141,7 +153,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -174,12 +193,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -271,7 +295,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.linux-arm64.mk b/content/content_utility.target.linux-arm64.mk
index b4634e3b03..c0fe0f89bb 100644
--- a/content/content_utility.target.linux-arm64.mk
+++ b/content/content_utility.target.linux-arm64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -75,12 +75,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -167,12 +172,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -255,7 +265,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.linux-mips.mk b/content/content_utility.target.linux-mips.mk
index b50a09b431..a557810bc3 100644
--- a/content/content_utility.target.linux-mips.mk
+++ b/content/content_utility.target.linux-mips.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -45,6 +45,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -78,12 +79,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -141,6 +147,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -174,12 +181,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +279,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.linux-x86.mk b/content/content_utility.target.linux-x86.mk
index 3a0180256f..96ad3e5e0c 100644
--- a/content/content_utility.target.linux-x86.mk
+++ b/content/content_utility.target.linux-x86.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -44,6 +44,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -79,12 +80,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -140,6 +146,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -175,12 +182,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +279,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_utility.target.linux-x86_64.mk b/content/content_utility.target.linux-x86_64.mk
index b7e36869e1..d8b5527114 100644
--- a/content/content_utility.target.linux-x86_64.mk
+++ b/content/content_utility.target.linux-x86_64.mk
@@ -12,7 +12,7 @@ gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_V
# Make sure our deps are built first.
GYP_TARGET_DEPENDENCIES := \
- $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_shell_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_shell_bindings_gyp.a
+ $(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_service_provider_bindings_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_service_provider_bindings_gyp.a
GYP_GENERATED_OUTPUTS :=
@@ -79,12 +79,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -175,12 +180,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DMOJO_USE_SYSTEM_IMPL' \
'-DUSE_OPENSSL=1' \
@@ -267,7 +277,7 @@ LOCAL_LDFLAGS_Release := \
LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
LOCAL_STATIC_LIBRARIES := \
- mojo_mojo_shell_bindings_gyp
+ mojo_mojo_service_provider_bindings_gyp
# Enable grouping to fix circular references
LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/content/content_worker.gypi b/content/content_worker.gypi
index 5264a2cd8f..a04b662ec3 100644
--- a/content/content_worker.gypi
+++ b/content/content_worker.gypi
@@ -5,7 +5,7 @@
{
'dependencies': [
'../base/base.gyp:base',
- '../mojo/mojo.gyp:mojo_shell_bindings',
+ '../mojo/mojo.gyp:mojo_service_provider_bindings',
'../skia/skia.gyp:skia',
'../third_party/WebKit/public/blink.gyp:blink',
],
diff --git a/content/gesture_event_type_java.target.darwin-arm.mk b/content/gesture_event_type_java.target.darwin-arm.mk
index 8b30ef5cd4..0707603539 100644
--- a/content/gesture_event_type_java.target.darwin-arm.mk
+++ b/content/gesture_event_type_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.darwin-arm64.mk b/content/gesture_event_type_java.target.darwin-arm64.mk
index 0e6f2573f3..0d148f3eb3 100644
--- a/content/gesture_event_type_java.target.darwin-arm64.mk
+++ b/content/gesture_event_type_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.darwin-mips.mk b/content/gesture_event_type_java.target.darwin-mips.mk
index ce5529348a..691a0c7954 100644
--- a/content/gesture_event_type_java.target.darwin-mips.mk
+++ b/content/gesture_event_type_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.darwin-x86.mk b/content/gesture_event_type_java.target.darwin-x86.mk
index d41bc05742..0f661b401a 100644
--- a/content/gesture_event_type_java.target.darwin-x86.mk
+++ b/content/gesture_event_type_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.darwin-x86_64.mk b/content/gesture_event_type_java.target.darwin-x86_64.mk
index 78c2a47272..33490b7a96 100644
--- a/content/gesture_event_type_java.target.darwin-x86_64.mk
+++ b/content/gesture_event_type_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.linux-arm.mk b/content/gesture_event_type_java.target.linux-arm.mk
index 8b30ef5cd4..0707603539 100644
--- a/content/gesture_event_type_java.target.linux-arm.mk
+++ b/content/gesture_event_type_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.linux-arm64.mk b/content/gesture_event_type_java.target.linux-arm64.mk
index 0e6f2573f3..0d148f3eb3 100644
--- a/content/gesture_event_type_java.target.linux-arm64.mk
+++ b/content/gesture_event_type_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.linux-mips.mk b/content/gesture_event_type_java.target.linux-mips.mk
index ce5529348a..691a0c7954 100644
--- a/content/gesture_event_type_java.target.linux-mips.mk
+++ b/content/gesture_event_type_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.linux-x86.mk b/content/gesture_event_type_java.target.linux-x86.mk
index d41bc05742..0f661b401a 100644
--- a/content/gesture_event_type_java.target.linux-x86.mk
+++ b/content/gesture_event_type_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gesture_event_type_java.target.linux-x86_64.mk b/content/gesture_event_type_java.target.linux-x86_64.mk
index 78c2a47272..33490b7a96 100644
--- a/content/gesture_event_type_java.target.linux-x86_64.mk
+++ b/content/gesture_event_type_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc
index 4607c6c126..74864cbd35 100644
--- a/content/gpu/gpu_child_thread.cc
+++ b/content/gpu/gpu_child_thread.cc
@@ -97,9 +97,8 @@ bool GpuChildThread::Send(IPC::Message* msg) {
}
bool GpuChildThread::OnControlMessageReceived(const IPC::Message& msg) {
- bool msg_is_ok = true;
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(GpuChildThread, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(GpuChildThread, msg)
IPC_MESSAGE_HANDLER(GpuMsg_Initialize, OnInitialize)
IPC_MESSAGE_HANDLER(GpuMsg_CollectGraphicsInfo, OnCollectGraphicsInfo)
IPC_MESSAGE_HANDLER(GpuMsg_GetVideoMemoryUsageStats,
@@ -109,7 +108,7 @@ bool GpuChildThread::OnControlMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(GpuMsg_Hang, OnHang)
IPC_MESSAGE_HANDLER(GpuMsg_DisableWatchdog, OnDisableWatchdog)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
if (handled)
return true;
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index 0dac81d459..dd9759bb47 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -32,6 +32,7 @@
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/config/gpu_info_collector.h"
#include "gpu/config/gpu_util.h"
+#include "ui/events/platform/platform_event_source.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_surface.h"
#include "ui/gl/gl_switches.h"
@@ -51,6 +52,10 @@
#include "content/public/common/sandbox_init.h"
#endif
+#if defined(OS_MACOSX)
+#include "base/message_loop/message_pump_mac.h"
+#endif
+
const int kGpuTimeout = 10000;
namespace content {
@@ -129,8 +134,8 @@ int GpuMain(const MainFunctionParams& parameters) {
// GpuMsg_Initialize message from the browser.
bool dead_on_arrival = false;
- base::MessageLoop::Type message_loop_type = base::MessageLoop::TYPE_IO;
#if defined(OS_WIN)
+ base::MessageLoop::Type message_loop_type = base::MessageLoop::TYPE_IO;
// Unless we're running on desktop GL, we don't need a UI message
// loop, so avoid its use to work around apparent problems with some
// third-party software.
@@ -139,11 +144,24 @@ int GpuMain(const MainFunctionParams& parameters) {
gfx::kGLImplementationDesktopName) {
message_loop_type = base::MessageLoop::TYPE_UI;
}
+ base::MessageLoop main_message_loop(message_loop_type);
+#elif defined(OS_LINUX) && defined(USE_X11)
+ // We need a UI loop so that we can grab the Expose events. See GLSurfaceGLX
+ // and https://crbug.com/326995.
+ base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI);
+ scoped_ptr<ui::PlatformEventSource> event_source =
+ ui::PlatformEventSource::CreateDefault();
#elif defined(OS_LINUX)
- message_loop_type = base::MessageLoop::TYPE_DEFAULT;
+ base::MessageLoop main_message_loop(base::MessageLoop::TYPE_DEFAULT);
+#elif defined(OS_MACOSX)
+ // This is necessary for CoreAnimation layers hosted in the GPU process to be
+ // drawn. See http://crbug.com/312462.
+ scoped_ptr<base::MessagePump> pump(new base::MessagePumpCFRunLoop());
+ base::MessageLoop main_message_loop(pump.Pass());
+#else
+ base::MessageLoop main_message_loop(base::MessageLoop::TYPE_IO);
#endif
- base::MessageLoop main_message_loop(message_loop_type);
base::PlatformThread::SetName("CrGpuMain");
// In addition to disabling the watchdog if the command line switch is
@@ -365,7 +383,7 @@ namespace {
#if defined(OS_LINUX)
void CreateDummyGlContext() {
scoped_refptr<gfx::GLSurface> surface(
- gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1)));
+ gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size()));
if (!surface.get()) {
VLOG(1) << "gfx::GLSurface::CreateOffscreenGLSurface failed";
return;
diff --git a/content/java_set_jni_headers.target.darwin-arm.mk b/content/java_set_jni_headers.target.darwin-arm.mk
index bdbd309e16..d68b8b46da 100644
--- a/content/java_set_jni_headers.target.darwin-arm.mk
+++ b/content/java_set_jni_headers.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.darwin-arm64.mk b/content/java_set_jni_headers.target.darwin-arm64.mk
index 2c4cf92cf5..5d84f78b17 100644
--- a/content/java_set_jni_headers.target.darwin-arm64.mk
+++ b/content/java_set_jni_headers.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.darwin-mips.mk b/content/java_set_jni_headers.target.darwin-mips.mk
index a77e925200..c4e4209ea4 100644
--- a/content/java_set_jni_headers.target.darwin-mips.mk
+++ b/content/java_set_jni_headers.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.darwin-x86.mk b/content/java_set_jni_headers.target.darwin-x86.mk
index b9da82eef9..cfa4ada1b6 100644
--- a/content/java_set_jni_headers.target.darwin-x86.mk
+++ b/content/java_set_jni_headers.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.darwin-x86_64.mk b/content/java_set_jni_headers.target.darwin-x86_64.mk
index 74cb8b2072..17ca5c8845 100644
--- a/content/java_set_jni_headers.target.darwin-x86_64.mk
+++ b/content/java_set_jni_headers.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.linux-arm.mk b/content/java_set_jni_headers.target.linux-arm.mk
index bdbd309e16..d68b8b46da 100644
--- a/content/java_set_jni_headers.target.linux-arm.mk
+++ b/content/java_set_jni_headers.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.linux-arm64.mk b/content/java_set_jni_headers.target.linux-arm64.mk
index 2c4cf92cf5..5d84f78b17 100644
--- a/content/java_set_jni_headers.target.linux-arm64.mk
+++ b/content/java_set_jni_headers.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.linux-mips.mk b/content/java_set_jni_headers.target.linux-mips.mk
index a77e925200..c4e4209ea4 100644
--- a/content/java_set_jni_headers.target.linux-mips.mk
+++ b/content/java_set_jni_headers.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.linux-x86.mk b/content/java_set_jni_headers.target.linux-x86.mk
index b9da82eef9..cfa4ada1b6 100644
--- a/content/java_set_jni_headers.target.linux-x86.mk
+++ b/content/java_set_jni_headers.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/java_set_jni_headers.target.linux-x86_64.mk b/content/java_set_jni_headers.target.linux-x86_64.mk
index 74cb8b2072..17ca5c8845 100644
--- a/content/java_set_jni_headers.target.linux-x86_64.mk
+++ b/content/java_set_jni_headers.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.darwin-arm.mk b/content/motionevent_jni_headers.target.darwin-arm.mk
index be48953817..f333a9c663 100644
--- a/content/motionevent_jni_headers.target.darwin-arm.mk
+++ b/content/motionevent_jni_headers.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.darwin-arm64.mk b/content/motionevent_jni_headers.target.darwin-arm64.mk
index 1c1b09feb5..2028f25dec 100644
--- a/content/motionevent_jni_headers.target.darwin-arm64.mk
+++ b/content/motionevent_jni_headers.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.darwin-mips.mk b/content/motionevent_jni_headers.target.darwin-mips.mk
index e262ceab7c..24ac910583 100644
--- a/content/motionevent_jni_headers.target.darwin-mips.mk
+++ b/content/motionevent_jni_headers.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.darwin-x86.mk b/content/motionevent_jni_headers.target.darwin-x86.mk
index 3bcc5ec101..e726272d2c 100644
--- a/content/motionevent_jni_headers.target.darwin-x86.mk
+++ b/content/motionevent_jni_headers.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.darwin-x86_64.mk b/content/motionevent_jni_headers.target.darwin-x86_64.mk
index adcd2a4b26..e780072095 100644
--- a/content/motionevent_jni_headers.target.darwin-x86_64.mk
+++ b/content/motionevent_jni_headers.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.linux-arm.mk b/content/motionevent_jni_headers.target.linux-arm.mk
index be48953817..f333a9c663 100644
--- a/content/motionevent_jni_headers.target.linux-arm.mk
+++ b/content/motionevent_jni_headers.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.linux-arm64.mk b/content/motionevent_jni_headers.target.linux-arm64.mk
index 1c1b09feb5..2028f25dec 100644
--- a/content/motionevent_jni_headers.target.linux-arm64.mk
+++ b/content/motionevent_jni_headers.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.linux-mips.mk b/content/motionevent_jni_headers.target.linux-mips.mk
index e262ceab7c..24ac910583 100644
--- a/content/motionevent_jni_headers.target.linux-mips.mk
+++ b/content/motionevent_jni_headers.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.linux-x86.mk b/content/motionevent_jni_headers.target.linux-x86.mk
index 3bcc5ec101..e726272d2c 100644
--- a/content/motionevent_jni_headers.target.linux-x86.mk
+++ b/content/motionevent_jni_headers.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/motionevent_jni_headers.target.linux-x86_64.mk b/content/motionevent_jni_headers.target.linux-x86_64.mk
index adcd2a4b26..e780072095 100644
--- a/content/motionevent_jni_headers.target.linux-x86_64.mk
+++ b/content/motionevent_jni_headers.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.darwin-arm.mk b/content/page_transition_types_java.target.darwin-arm.mk
index 979230062d..8e50d3b178 100644
--- a/content/page_transition_types_java.target.darwin-arm.mk
+++ b/content/page_transition_types_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.darwin-arm64.mk b/content/page_transition_types_java.target.darwin-arm64.mk
index a6ab84bedd..246a55bec5 100644
--- a/content/page_transition_types_java.target.darwin-arm64.mk
+++ b/content/page_transition_types_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.darwin-mips.mk b/content/page_transition_types_java.target.darwin-mips.mk
index ff33ad64a3..f43a1be6ec 100644
--- a/content/page_transition_types_java.target.darwin-mips.mk
+++ b/content/page_transition_types_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.darwin-x86.mk b/content/page_transition_types_java.target.darwin-x86.mk
index d49e350220..914e235171 100644
--- a/content/page_transition_types_java.target.darwin-x86.mk
+++ b/content/page_transition_types_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.darwin-x86_64.mk b/content/page_transition_types_java.target.darwin-x86_64.mk
index d84604569d..0a7177825a 100644
--- a/content/page_transition_types_java.target.darwin-x86_64.mk
+++ b/content/page_transition_types_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.linux-arm.mk b/content/page_transition_types_java.target.linux-arm.mk
index 979230062d..8e50d3b178 100644
--- a/content/page_transition_types_java.target.linux-arm.mk
+++ b/content/page_transition_types_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.linux-arm64.mk b/content/page_transition_types_java.target.linux-arm64.mk
index a6ab84bedd..246a55bec5 100644
--- a/content/page_transition_types_java.target.linux-arm64.mk
+++ b/content/page_transition_types_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.linux-mips.mk b/content/page_transition_types_java.target.linux-mips.mk
index ff33ad64a3..f43a1be6ec 100644
--- a/content/page_transition_types_java.target.linux-mips.mk
+++ b/content/page_transition_types_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.linux-x86.mk b/content/page_transition_types_java.target.linux-x86.mk
index d49e350220..914e235171 100644
--- a/content/page_transition_types_java.target.linux-x86.mk
+++ b/content/page_transition_types_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/page_transition_types_java.target.linux-x86_64.mk b/content/page_transition_types_java.target.linux-x86_64.mk
index d84604569d..0a7177825a 100644
--- a/content/page_transition_types_java.target.linux-x86_64.mk
+++ b/content/page_transition_types_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/plugin/webplugin_proxy.cc b/content/plugin/webplugin_proxy.cc
index 8a035d57aa..c6a627d58b 100644
--- a/content/plugin/webplugin_proxy.cc
+++ b/content/plugin/webplugin_proxy.cc
@@ -19,12 +19,12 @@
#include "content/plugin/plugin_channel.h"
#include "content/plugin/plugin_thread.h"
#include "content/public/common/content_client.h"
-#include "content/public/common/url_constants.h"
#include "skia/ext/platform_canvas.h"
#include "skia/ext/platform_device.h"
#include "third_party/WebKit/public/web/WebBindings.h"
#include "ui/gfx/blit.h"
#include "ui/gfx/canvas.h"
+#include "url/url_constants.h"
#if defined(OS_MACOSX)
#include "base/mac/mac_util.h"
@@ -290,7 +290,7 @@ void WebPluginProxy::HandleURLRequest(const char* url,
GURL request_url(url);
if (!request_url.SchemeIs(url::kHttpScheme) &&
!request_url.SchemeIs(url::kHttpsScheme) &&
- !request_url.SchemeIs(kFtpScheme)) {
+ !request_url.SchemeIs(url::kFtpScheme)) {
return;
}
}
diff --git a/content/popup_item_type_java.target.darwin-arm.mk b/content/popup_item_type_java.target.darwin-arm.mk
index 8d1cee11b5..d2a9e7bbc4 100644
--- a/content/popup_item_type_java.target.darwin-arm.mk
+++ b/content/popup_item_type_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.darwin-arm64.mk b/content/popup_item_type_java.target.darwin-arm64.mk
index eb15ab4ba3..c4a6865864 100644
--- a/content/popup_item_type_java.target.darwin-arm64.mk
+++ b/content/popup_item_type_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.darwin-mips.mk b/content/popup_item_type_java.target.darwin-mips.mk
index 335d820542..72488baf06 100644
--- a/content/popup_item_type_java.target.darwin-mips.mk
+++ b/content/popup_item_type_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.darwin-x86.mk b/content/popup_item_type_java.target.darwin-x86.mk
index ca591a546a..5dca2bf569 100644
--- a/content/popup_item_type_java.target.darwin-x86.mk
+++ b/content/popup_item_type_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.darwin-x86_64.mk b/content/popup_item_type_java.target.darwin-x86_64.mk
index 8f56918474..6df220ad1d 100644
--- a/content/popup_item_type_java.target.darwin-x86_64.mk
+++ b/content/popup_item_type_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.linux-arm.mk b/content/popup_item_type_java.target.linux-arm.mk
index 8d1cee11b5..d2a9e7bbc4 100644
--- a/content/popup_item_type_java.target.linux-arm.mk
+++ b/content/popup_item_type_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.linux-arm64.mk b/content/popup_item_type_java.target.linux-arm64.mk
index eb15ab4ba3..c4a6865864 100644
--- a/content/popup_item_type_java.target.linux-arm64.mk
+++ b/content/popup_item_type_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.linux-mips.mk b/content/popup_item_type_java.target.linux-mips.mk
index 335d820542..72488baf06 100644
--- a/content/popup_item_type_java.target.linux-mips.mk
+++ b/content/popup_item_type_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.linux-x86.mk b/content/popup_item_type_java.target.linux-x86.mk
index ca591a546a..5dca2bf569 100644
--- a/content/popup_item_type_java.target.linux-x86.mk
+++ b/content/popup_item_type_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/popup_item_type_java.target.linux-x86_64.mk b/content/popup_item_type_java.target.linux-x86_64.mk
index 8f56918474..6df220ad1d 100644
--- a/content/popup_item_type_java.target.linux-x86_64.mk
+++ b/content/popup_item_type_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/ppapi_plugin/ppapi_plugin_main.cc b/content/ppapi_plugin/ppapi_plugin_main.cc
index ab32b66534..81ca51edeb 100644
--- a/content/ppapi_plugin/ppapi_plugin_main.cc
+++ b/content/ppapi_plugin/ppapi_plugin_main.cc
@@ -2,10 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/debug/debugger.h"
+#include "base/files/file_path.h"
#include "base/i18n/rtl.h"
#include "base/message_loop/message_loop.h"
+#include "base/path_service.h"
#include "base/threading/platform_thread.h"
#include "build/build_config.h"
#include "content/child/child_process.h"
@@ -101,7 +104,9 @@ int PpapiPluginMain(const MainFunctionParams& parameters) {
#if defined(OS_CHROMEOS)
// Specifies $HOME explicitly because some plugins rely on $HOME but
// no other part of Chrome OS uses that. See crbug.com/335290.
- setenv("HOME", base::GetHomeDir().value().c_str(), 1);
+ base::FilePath homedir;
+ PathService::Get(base::DIR_HOME, &homedir);
+ setenv("HOME", homedir.value().c_str(), 1);
#endif
base::MessageLoop main_message_loop;
diff --git a/content/public/android/java/resource_map/OWNERS b/content/public/android/java/resource_map/OWNERS
index 3e31f9baef..b7a5e4649f 100644
--- a/content/public/android/java/resource_map/OWNERS
+++ b/content/public/android/java/resource_map/OWNERS
@@ -5,7 +5,7 @@
set noparent
benm@chromium.org
-boliu@chomium.org
+boliu@chromium.org
michaelbai@chromium.org
mkosiba@chromium.org
mnaganov@chromium.org
diff --git a/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java
index eae635674f..c7fb259088 100644
--- a/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java
@@ -117,8 +117,8 @@ class BatteryStatusManager {
/**
* Native JNI call
- * see content/browser/battery_status/battery_status_manager_android.cc
+ * see content/browser/battery_status/battery_status_manager.cc
*/
- private native void nativeGotBatteryStatus(long nativeBatteryStatusManagerAndroid,
+ private native void nativeGotBatteryStatus(long nativeBatteryStatusManager,
boolean charging, double chargingTime, double dischargingTime, double level);
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentReadbackHandler.java b/content/public/android/java/src/org/chromium/content/browser/ContentReadbackHandler.java
index f3d444233a..15226d5146 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentReadbackHandler.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentReadbackHandler.java
@@ -11,6 +11,7 @@ import android.util.SparseArray;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.base.ThreadUtils;
+import org.chromium.ui.base.WindowAndroid;
/**
* A class for reading back content.
@@ -20,17 +21,17 @@ public abstract class ContentReadbackHandler {
/**
* A callback interface for content readback into a bitmap.
*/
- public static interface GetContentBitmapCallback {
+ public static interface GetBitmapCallback {
/**
* Called when the content readback finishes.
* @param success Indicates whether the readback succeeded or not.
* @param bitmap The {@link Bitmap} of the content.
*/
- public void onFinishGetContentBitmap(boolean success, Bitmap bitmap);
+ public void onFinishGetBitmap(boolean success, Bitmap bitmap);
}
private int mNextReadbackId = 1;
- private SparseArray<GetContentBitmapCallback> mGetContentBitmapRequests;
+ private SparseArray<GetBitmapCallback> mGetBitmapRequests;
private long mNativeContentReadbackHandler;
@@ -38,7 +39,7 @@ public abstract class ContentReadbackHandler {
* Creates a {@link ContentReadbackHandler}.
*/
public ContentReadbackHandler() {
- mGetContentBitmapRequests = new SparseArray<GetContentBitmapCallback>();
+ mGetBitmapRequests = new SparseArray<GetBitmapCallback>();
}
/**
@@ -52,17 +53,17 @@ public abstract class ContentReadbackHandler {
* Should be called when the ContentReadackHandler is not needed anymore.
*/
public void destroy() {
- nativeDestroy(mNativeContentReadbackHandler);
+ if (mNativeContentReadbackHandler != 0) nativeDestroy(mNativeContentReadbackHandler);
mNativeContentReadbackHandler = 0;
}
@CalledByNative
- private void notifyGetContentBitmapFinished(int readbackId, boolean success, Bitmap bitmap) {
- GetContentBitmapCallback callback = mGetContentBitmapRequests.get(readbackId);
+ private void notifyGetBitmapFinished(int readbackId, boolean success, Bitmap bitmap) {
+ GetBitmapCallback callback = mGetBitmapRequests.get(readbackId);
if (callback != null) {
- mGetContentBitmapRequests.delete(readbackId);
- callback.onFinishGetContentBitmap(success, bitmap);
+ mGetBitmapRequests.delete(readbackId);
+ callback.onFinishGetBitmap(success, bitmap);
} else {
// readback Id is unregistered.
assert false : "Readback finished for unregistered Id: " + readbackId;
@@ -80,21 +81,40 @@ public abstract class ContentReadbackHandler {
* @param callback The callback to be executed after readback completes.
*/
public void getContentBitmapAsync(float scale, Rect srcRect, ContentViewCore view,
- GetContentBitmapCallback callback) {
+ GetBitmapCallback callback) {
if (!readyForReadback()) {
- callback.onFinishGetContentBitmap(false, null);
+ callback.onFinishGetBitmap(false, null);
return;
}
ThreadUtils.assertOnUiThread();
int readbackId = mNextReadbackId++;
- mGetContentBitmapRequests.put(readbackId, callback);
+ mGetBitmapRequests.put(readbackId, callback);
nativeGetContentBitmap(mNativeContentReadbackHandler, readbackId, scale,
Bitmap.Config.ARGB_8888, srcRect.top, srcRect.left, srcRect.width(),
srcRect.height(), view);
}
/**
+ * Asynchronously, grab a bitmap of the current browser compositor root layer.
+ *
+ * @param windowAndroid The window that hosts the compositor.
+ * @param callback The callback to be executed after readback completes.
+ */
+ public void getCompositorBitmapAsync(WindowAndroid windowAndroid, GetBitmapCallback callback) {
+ if (!readyForReadback()) {
+ callback.onFinishGetBitmap(false, null);
+ return;
+ }
+ ThreadUtils.assertOnUiThread();
+
+ int readbackId = mNextReadbackId++;
+ mGetBitmapRequests.put(readbackId, callback);
+ nativeGetCompositorBitmap(mNativeContentReadbackHandler, readbackId,
+ windowAndroid.getNativePointer());
+ }
+
+ /**
* Implemented by the owner of this class to signal whether readback is possible or not.
* @return Whether readback is possible or not.
*/
@@ -105,4 +125,6 @@ public abstract class ContentReadbackHandler {
private native void nativeGetContentBitmap(long nativeContentReadbackHandler, int readback_id,
float scale, Bitmap.Config config, float x, float y, float width, float height,
Object contentViewCore);
+ private native void nativeGetCompositorBitmap(long nativeContentReadbackHandler,
+ int readback_id, long nativeWindowAndroid);
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentView.java b/content/public/android/java/src/org/chromium/content/browser/ContentView.java
index f405f7e915..d479be66eb 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentView.java
@@ -19,19 +19,15 @@ import android.view.inputmethod.InputConnection;
import android.widget.FrameLayout;
import org.chromium.base.TraceEvent;
-import org.chromium.ui.base.WindowAndroid;
/**
* The containing view for {@link ContentViewCore} that exists in the Android UI hierarchy and
* exposes the various {@link View} functionality to it.
- *
- * TODO(joth): Remove any methods overrides from this class that were added for WebView
- * compatibility.
*/
public class ContentView extends FrameLayout
implements ContentViewCore.InternalAccessDelegate {
- private final ContentViewCore mContentViewCore;
+ protected final ContentViewCore mContentViewCore;
private final int[] mLocationInWindow = new int[2];
@@ -39,20 +35,18 @@ public class ContentView extends FrameLayout
* Creates an instance of a ContentView.
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
- * @param nativeWebContents A pointer to the native web contents.
- * @param windowAndroid An instance of the WindowAndroid.
+ * @param cvc A pointer to the content view core managing this content view.
* @return A ContentView instance.
*/
- public static ContentView newInstance(
- Context context, long nativeWebContents, WindowAndroid windowAndroid) {
+ public static ContentView newInstance(Context context, ContentViewCore cvc) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
- return new ContentView(context, nativeWebContents, windowAndroid);
+ return new ContentView(context, cvc);
} else {
- return new JellyBeanContentView(context, nativeWebContents, windowAndroid);
+ return new JellyBeanContentView(context, cvc);
}
}
- protected ContentView(Context context, long nativeWebContents, WindowAndroid windowAndroid) {
+ protected ContentView(Context context, ContentViewCore cvc) {
super(context, null, android.R.attr.webViewStyle);
if (getScrollBarStyle() == View.SCROLLBARS_INSIDE_OVERLAY) {
@@ -63,20 +57,9 @@ public class ContentView extends FrameLayout
setFocusable(true);
setFocusableInTouchMode(true);
- mContentViewCore = new ContentViewCore(context);
- mContentViewCore.initialize(this, this, nativeWebContents, windowAndroid);
+ mContentViewCore = cvc;
}
- /**
- * @return The core component of the ContentView that handles JNI communication. Should only be
- * used for passing to native.
- */
- public ContentViewCore getContentViewCore() {
- return mContentViewCore;
- }
-
- // FrameLayout overrides.
-
// Needed by ContentViewCore.InternalAccessDelegate
@Override
public boolean drawChild(Canvas canvas, View child, long drawingTime) {
@@ -275,24 +258,6 @@ public class ContentView extends FrameLayout
mContentViewCore.onVisibilityChanged(changedView, visibility);
}
- /**
- * Return content scroll y.
- *
- * @return The vertical scroll position in pixels.
- */
- public int getContentScrollY() {
- return mContentViewCore.computeVerticalScrollOffset();
- }
-
- /**
- * Return content height.
- *
- * @return The height of the content in pixels.
- */
- public int getContentHeight() {
- return mContentViewCore.computeVerticalScrollRange();
- }
-
///////////////////////////////////////////////////////////////////////////////////////////////
// Start Implementation of ContentViewCore.InternalAccessDelegate //
///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index e8ad655ef7..cd68715aec 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -265,11 +265,6 @@ public class ContentViewCore
private final RenderCoordinates.NormalizedPoint mEndHandlePoint;
private final RenderCoordinates.NormalizedPoint mInsertionHandlePoint;
- // Cached copy of the visible rectangle defined by two points. Needed to determine
- // visibility of insertion/selection handles.
- private final RenderCoordinates.NormalizedPoint mTopLeftVisibilityClippingPoint;
- private final RenderCoordinates.NormalizedPoint mBottomRightVisibilityClippingPoint;
-
// Tracks whether a selection is currently active. When applied to selected text, indicates
// whether the last selected text is still highlighted.
private boolean mHasSelection;
@@ -306,9 +301,6 @@ public class ContentViewCore
// because the OSK was just brought up.
private final Rect mFocusPreOSKViewportRect = new Rect();
- // Whether we received a new frame since consumePendingRendererFrame() was last called.
- private boolean mPendingRendererFrame = false;
-
// On single tap this will store the x, y coordinates of the touch.
private int mSingleTapX;
private int mSingleTapY;
@@ -366,8 +358,6 @@ public class ContentViewCore
mStartHandlePoint = mRenderCoordinates.createNormalizedPoint();
mEndHandlePoint = mRenderCoordinates.createNormalizedPoint();
mInsertionHandlePoint = mRenderCoordinates.createNormalizedPoint();
- mTopLeftVisibilityClippingPoint = mRenderCoordinates.createNormalizedPoint();
- mBottomRightVisibilityClippingPoint = mRenderCoordinates.createNormalizedPoint();
mAccessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
mGestureStateListeners = new ObserverList<GestureStateListener>();
@@ -609,7 +599,8 @@ public class ContentViewCore
};
mNativeContentViewCore = nativeInit(
- nativeWebContents, viewAndroidNativePointer, windowNativePointer);
+ nativeWebContents, viewAndroidNativePointer, windowNativePointer,
+ mRetainedJavaScriptObjects);
mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore);
mContentSettings = new ContentSettings(this, mNativeContentViewCore);
initializeContainerView(internalDispatcher);
@@ -835,7 +826,8 @@ public class ContentViewCore
params.mPostData,
params.mBaseUrlForDataUrl,
params.mVirtualUrlForDataUrl,
- params.mCanLoadLocalResources);
+ params.mCanLoadLocalResources,
+ params.mIsRendererInitiated);
}
/**
@@ -886,17 +878,6 @@ public class ContentViewCore
}
/**
- * Mark any new frames that have arrived since this function was last called as non-pending.
- *
- * @return Whether there was a pending frame from the renderer.
- */
- public boolean consumePendingRendererFrame() {
- boolean hadPendingFrame = mPendingRendererFrame;
- mPendingRendererFrame = false;
- return hadPendingFrame;
- }
-
- /**
* @return Viewport width in physical pixels as set from onSizeChanged.
*/
@CalledByNative
@@ -1206,10 +1187,10 @@ public class ContentViewCore
@SuppressWarnings("unused")
@CalledByNative
- private void onTapEventNotConsumed(int x, int y) {
+ private void onSingleTapEventAck(boolean consumed, int x, int y) {
for (mGestureStateListenersIterator.rewind();
mGestureStateListenersIterator.hasNext();) {
- mGestureStateListenersIterator.next().onUnhandledTapEvent(x, y);
+ mGestureStateListenersIterator.next().onSingleTap(consumed, x, y);
}
}
@@ -1571,6 +1552,15 @@ public class ContentViewCore
}
/**
+ * Selects the word around the caret, if any.
+ * The caller can check if selection actually occurred by listening to OnSelectionChanged.
+ */
+ public void selectWordAroundCaret() {
+ if (mNativeContentViewCore == 0) return;
+ nativeSelectWordAroundCaret(mNativeContentViewCore);
+ }
+
+ /**
* @see View#onWindowFocusChanged(boolean)
*/
public void onWindowFocusChanged(boolean hasWindowFocus) {
@@ -1922,7 +1912,6 @@ public class ContentViewCore
};
mSelectionHandleController.hideAndDisallowAutomaticShowing();
- updateInsertionSelectionVisibleBounds();
}
return mSelectionHandleController;
@@ -1961,7 +1950,6 @@ public class ContentViewCore
};
mInsertionHandleController.hideAndDisallowAutomaticShowing();
- updateInsertionSelectionVisibleBounds();
}
return mInsertionHandleController;
@@ -2074,6 +2062,11 @@ public class ContentViewCore
}
@Override
+ public boolean isSelectionPassword() {
+ return mImeAdapter.isSelectionPassword();
+ }
+
+ @Override
public boolean isSelectionEditable() {
return mSelectionEditable;
}
@@ -2294,7 +2287,6 @@ public class ContentViewCore
getContentViewClient().onOffsetsForFullscreenChanged(
controlsOffsetPix, contentOffsetYPix, overdrawBottomHeightPix);
- mPendingRendererFrame = true;
if (mBrowserAccessibilityManager != null) {
mBrowserAccessibilityManager.notifyFrameInfoInitialized();
}
@@ -2461,32 +2453,6 @@ public class ContentViewCore
}
}
- @CalledByNative
- private void setSelectionRootBounds(Rect bounds) {
- mTopLeftVisibilityClippingPoint.setLocalDip(bounds.left, bounds.top);
- mBottomRightVisibilityClippingPoint.setLocalDip(bounds.right, bounds.bottom);
- updateInsertionSelectionVisibleBounds();
- }
-
- private void updateInsertionSelectionVisibleBounds() {
- if (mSelectionHandleController == null && mInsertionHandleController == null) {
- return;
- }
-
- int x1 = Math.round(mTopLeftVisibilityClippingPoint.getXPix());
- int y1 = Math.round(mTopLeftVisibilityClippingPoint.getYPix());
- int x2 = Math.round(mBottomRightVisibilityClippingPoint.getXPix());
- int y2 = Math.round(mBottomRightVisibilityClippingPoint.getYPix());
-
- if (mSelectionHandleController != null) {
- mSelectionHandleController.setVisibleClippingRectangle(x1, y1, x2, y2);
- }
-
- if (mInsertionHandleController != null) {
- mInsertionHandleController.setVisibleClippingRectangle(x1, y1, x2, y2);
- }
- }
-
@SuppressWarnings("unused")
@CalledByNative
private static void onEvaluateJavaScriptResult(
@@ -2505,13 +2471,7 @@ public class ContentViewCore
@SuppressWarnings("unused")
@CalledByNative
- private void onRenderProcessSwap() {
- attachImeAdapter();
- }
-
- @SuppressWarnings("unused")
- @CalledByNative
- private void onWebContentsConnected() {
+ private void onRenderProcessChange() {
attachImeAdapter();
}
@@ -2702,8 +2662,7 @@ public class ContentViewCore
Class<? extends Annotation> requiredAnnotation) {
if (mNativeContentViewCore != 0 && object != null) {
mJavaScriptInterfaces.put(name, object);
- nativeAddJavascriptInterface(mNativeContentViewCore, object, name, requiredAnnotation,
- mRetainedJavaScriptObjects);
+ nativeAddJavascriptInterface(mNativeContentViewCore, object, name, requiredAnnotation);
}
}
@@ -3082,7 +3041,7 @@ public class ContentViewCore
}
private native long nativeInit(long webContentsPtr,
- long viewAndroidPtr, long windowAndroidPtr);
+ long viewAndroidPtr, long windowAndroidPtr, HashSet<Object> retainedObjectSet);
@CalledByNative
private ContentVideoViewClient getContentVideoViewClient() {
@@ -3125,7 +3084,8 @@ public class ContentViewCore
byte[] postData,
String baseUrlForDataUrl,
String virtualUrlForDataUrl,
- boolean canLoadLocalResources);
+ boolean canLoadLocalResources,
+ boolean isRendererInitiated);
private native String nativeGetURL(long nativeContentViewCoreImpl);
@@ -3212,6 +3172,8 @@ public class ContentViewCore
private native void nativeScrollFocusedEditableNodeIntoView(long nativeContentViewCoreImpl);
+ private native void nativeSelectWordAroundCaret(long nativeContentViewCoreImpl);
+
private native void nativeClearHistory(long nativeContentViewCoreImpl);
private native void nativeEvaluateJavaScript(long nativeContentViewCoreImpl,
@@ -3236,7 +3198,7 @@ public class ContentViewCore
long nativeContentViewCoreImpl, boolean allow);
private native void nativeAddJavascriptInterface(long nativeContentViewCoreImpl, Object object,
- String name, Class requiredAnnotation, HashSet<Object> retainedObjectSet);
+ String name, Class requiredAnnotation);
private native void nativeRemoveJavascriptInterface(long nativeContentViewCoreImpl,
String name);
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
index 11c237964e..8603127d8a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
@@ -5,11 +5,8 @@
package org.chromium.content.browser;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PixelFormat;
-import android.os.Handler;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
@@ -17,7 +14,6 @@ import android.widget.FrameLayout;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
-import org.chromium.base.TraceEvent;
import org.chromium.ui.base.WindowAndroid;
/***
@@ -27,31 +23,16 @@ import org.chromium.ui.base.WindowAndroid;
* Note that only one ContentViewCore can be shown at a time.
*/
@JNINamespace("content")
-public class ContentViewRenderView extends FrameLayout implements WindowAndroid.VSyncClient {
- private static final int MAX_SWAP_BUFFER_COUNT = 2;
-
+public class ContentViewRenderView extends FrameLayout {
// The native side of this object.
private long mNativeContentViewRenderView;
private final SurfaceHolder.Callback mSurfaceCallback;
private final SurfaceView mSurfaceView;
- private final WindowAndroid mRootWindow;
-
- private int mPendingRenders;
- private int mPendingSwapBuffers;
- private boolean mNeedToRender;
-
protected ContentViewCore mContentViewCore;
private ContentReadbackHandler mContentReadbackHandler;
- private final Runnable mRenderRunnable = new Runnable() {
- @Override
- public void run() {
- render();
- }
- };
-
/**
* Constructs a new ContentViewRenderView that should be can to a view hierarchy.
* Native code should add/remove the layers to be rendered through the ContentViewLayerRenderer.
@@ -63,8 +44,6 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
mNativeContentViewRenderView = nativeInit(rootWindow.getNativePointer());
assert mNativeContentViewRenderView != 0;
- mRootWindow = rootWindow;
- rootWindow.setVSyncClient(this);
mSurfaceView = createSurfaceView(getContext());
mSurfaceView.setZOrderMediaOverlay(true);
mSurfaceCallback = new SurfaceHolder.Callback() {
@@ -81,14 +60,9 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
@Override
public void surfaceCreated(SurfaceHolder holder) {
- setSurfaceViewBackgroundColor(Color.WHITE);
-
assert mNativeContentViewRenderView != 0;
nativeSurfaceCreated(mNativeContentViewRenderView);
- mPendingSwapBuffers = 0;
- mPendingRenders = 0;
-
onReadyToRender();
}
@@ -99,6 +73,7 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
}
};
mSurfaceView.getHolder().addCallback(mSurfaceCallback);
+ setSurfaceViewBackgroundColor(Color.WHITE);
addView(mSurfaceView,
new FrameLayout.LayoutParams(
@@ -114,19 +89,6 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
mContentReadbackHandler.initNativeContentReadbackHandler();
}
- @Override
- public void onVSync(long vsyncTimeMicros) {
- if (mNeedToRender) {
- if (mPendingSwapBuffers + mPendingRenders <= MAX_SWAP_BUFFER_COUNT) {
- mNeedToRender = false;
- mPendingRenders++;
- render();
- } else {
- TraceEvent.instant("ContentViewRenderView:bail");
- }
- }
- }
-
/**
* @return The content readback handler.
*/
@@ -153,7 +115,6 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
public void destroy() {
mContentReadbackHandler.destroy();
mContentReadbackHandler = null;
- mRootWindow.setVSyncClient(null);
mSurfaceView.getHolder().removeCallback(mSurfaceCallback);
nativeDestroy(mNativeContentViewRenderView);
mNativeContentViewRenderView = 0;
@@ -215,54 +176,17 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
}
@CalledByNative
- private void requestRender() {
- boolean rendererHasFrame =
- mContentViewCore != null && mContentViewCore.consumePendingRendererFrame();
-
- if (rendererHasFrame && mPendingSwapBuffers + mPendingRenders < MAX_SWAP_BUFFER_COUNT) {
- TraceEvent.instant("requestRender:now");
- mNeedToRender = false;
- mPendingRenders++;
-
- // The handler can be null if we are detached from the window. Calling
- // {@link View#post(Runnable)} properly handles this case, but we lose the front of
- // queue behavior. That is okay for this edge case.
- Handler handler = getHandler();
- if (handler != null) {
- handler.postAtFrontOfQueue(mRenderRunnable);
- } else {
- post(mRenderRunnable);
- }
- } else if (mPendingRenders <= 0) {
- assert mPendingRenders == 0;
- TraceEvent.instant("requestRender:later");
- mNeedToRender = true;
- mRootWindow.requestVSyncUpdate();
- }
+ protected void onCompositorLayout() {
}
@CalledByNative
private void onSwapBuffersCompleted() {
- TraceEvent.instant("onSwapBuffersCompleted");
-
- if (mPendingSwapBuffers == MAX_SWAP_BUFFER_COUNT && mNeedToRender) requestRender();
- if (mPendingSwapBuffers > 0) mPendingSwapBuffers--;
- }
-
- protected void render() {
- if (mPendingRenders > 0) mPendingRenders--;
-
- boolean didDraw = nativeComposite(mNativeContentViewRenderView);
- if (didDraw) {
- mPendingSwapBuffers++;
- if (mSurfaceView.getBackground() != null) {
- post(new Runnable() {
- @Override
- public void run() {
- mSurfaceView.setBackgroundResource(0);
- }
- });
- }
+ if (mSurfaceView.getBackground() != null) {
+ post(new Runnable() {
+ @Override public void run() {
+ mSurfaceView.setBackgroundResource(0);
+ }
+ });
}
}
@@ -276,7 +200,6 @@ public class ContentViewRenderView extends FrameLayout implements WindowAndroid.
private native void nativeSurfaceDestroyed(long nativeContentViewRenderView);
private native void nativeSurfaceChanged(long nativeContentViewRenderView,
int format, int width, int height, Surface surface);
- private native boolean nativeComposite(long nativeContentViewRenderView);
private native void nativeSetOverlayVideoMode(long nativeContentViewRenderView,
boolean enabled);
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/JellyBeanContentView.java b/content/public/android/java/src/org/chromium/content/browser/JellyBeanContentView.java
index cdea420958..88dd3bc86f 100644
--- a/content/public/android/java/src/org/chromium/content/browser/JellyBeanContentView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/JellyBeanContentView.java
@@ -8,20 +8,18 @@ import android.content.Context;
import android.os.Bundle;
import android.view.accessibility.AccessibilityNodeProvider;
-import org.chromium.ui.base.WindowAndroid;
-
/**
* A version of {@link ContentView} that supports JellyBean features.
*/
class JellyBeanContentView extends ContentView {
- JellyBeanContentView(Context context, long nativeWebContents, WindowAndroid windowAndroid) {
- super(context, nativeWebContents, windowAndroid);
+ JellyBeanContentView(Context context, ContentViewCore cvc) {
+ super(context, cvc);
}
@Override
public boolean performAccessibilityAction(int action, Bundle arguments) {
- if (getContentViewCore().supportsAccessibilityAction(action)) {
- return getContentViewCore().performAccessibilityAction(action, arguments);
+ if (mContentViewCore.supportsAccessibilityAction(action)) {
+ return mContentViewCore.performAccessibilityAction(action, arguments);
}
return super.performAccessibilityAction(action, arguments);
@@ -29,7 +27,7 @@ class JellyBeanContentView extends ContentView {
@Override
public AccessibilityNodeProvider getAccessibilityNodeProvider() {
- AccessibilityNodeProvider provider = getContentViewCore().getAccessibilityNodeProvider();
+ AccessibilityNodeProvider provider = mContentViewCore.getAccessibilityNodeProvider();
if (provider != null) {
return provider;
} else {
diff --git a/content/public/android/java/src/org/chromium/content/browser/LoadUrlParams.java b/content/public/android/java/src/org/chromium/content/browser/LoadUrlParams.java
index 12a2260011..db484427ac 100644
--- a/content/public/android/java/src/org/chromium/content/browser/LoadUrlParams.java
+++ b/content/public/android/java/src/org/chromium/content/browser/LoadUrlParams.java
@@ -47,6 +47,7 @@ public class LoadUrlParams {
String mBaseUrlForDataUrl;
String mVirtualUrlForDataUrl;
boolean mCanLoadLocalResources;
+ boolean mIsRendererInitiated;
/**
* Creates an instance with default page transition type.
@@ -359,6 +360,20 @@ public class LoadUrlParams {
return mLoadUrlType;
}
+ /**
+ * @param rendererInitiated Whether or not this load was initiated from a renderer.
+ */
+ public void setIsRendererInitiated(boolean rendererInitiated) {
+ mIsRendererInitiated = rendererInitiated;
+ }
+
+ /**
+ * @return Whether or not this load was initiated from a renderer or not.
+ */
+ public boolean getIsRendererInitiated() {
+ return mIsRendererInitiated;
+ }
+
public boolean isBaseUrlDataScheme() {
// If there's no base url set, but this is a data load then
// treat the scheme as data:.
diff --git a/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java b/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
index 5e334820ae..5e1fa49e38 100644
--- a/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
+++ b/content/public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java
@@ -9,7 +9,6 @@ import android.content.pm.PackageManager;
import android.media.MediaMetadataRetriever;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
@@ -21,6 +20,7 @@ import org.chromium.base.PathUtils;
import java.io.File;
import java.io.IOException;
+import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -188,7 +188,13 @@ class MediaResourceGetter {
@VisibleForTesting
boolean configure(Context context, String url, String cookies, String userAgent) {
- Uri uri = Uri.parse(url);
+ URI uri;
+ try {
+ uri = URI.create(url);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "Cannot parse uri.", e);
+ return false;
+ }
String scheme = uri.getScheme();
if (scheme == null || scheme.equals("file")) {
File file = uriToFile(uri.getPath());
@@ -208,7 +214,8 @@ class MediaResourceGetter {
return false;
}
} else {
- if (!isNetworkReliable(context)) {
+ final String host = uri.getHost();
+ if (!isLoopbackAddress(host) && !isNetworkReliable(context)) {
Log.w(TAG, "non-file URI can't be read due to unsuitable network conditions");
return false;
}
@@ -260,6 +267,14 @@ class MediaResourceGetter {
}
}
+ // This method covers only typcial expressions for the loopback address
+ // to resolve the hostname without a DNS loopup.
+ private boolean isLoopbackAddress(String host) {
+ return host != null && (host.equalsIgnoreCase("localhost") // typical hostname
+ || host.equals("127.0.0.1") // typical IP v4 expression
+ || host.equals("[::1]")); // typical IP v6 expression
+ }
+
/**
* @param file the file whose path should be checked
* @return true if and only if the file is in a location that we consider
diff --git a/content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java b/content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java
index c140cb6009..caf3e46316 100644
--- a/content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java
+++ b/content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java
@@ -71,12 +71,18 @@ public class SelectActionModeCallback implements ActionMode.Callback {
* @return Whether or not web search is available.
*/
boolean isWebSearchAvailable();
+
+ /**
+ * @return true if the current selection is of password type.
+ */
+ boolean isSelectionPassword();
}
private final Context mContext;
private final ActionHandler mActionHandler;
private final boolean mIncognito;
private boolean mEditable;
+ private boolean mIsPasswordType;
protected SelectActionModeCallback(
Context context, ActionHandler actionHandler, boolean incognito) {
@@ -94,6 +100,7 @@ public class SelectActionModeCallback implements ActionMode.Callback {
mode.setTitle(null);
mode.setSubtitle(null);
mEditable = mActionHandler.isSelectionEditable();
+ mIsPasswordType = mActionHandler.isSelectionPassword();
createActionMenu(mode, menu);
return true;
}
@@ -101,8 +108,10 @@ public class SelectActionModeCallback implements ActionMode.Callback {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
boolean isEditableNow = mActionHandler.isSelectionEditable();
- if (mEditable != isEditableNow) {
+ boolean isPasswordNow = mActionHandler.isSelectionPassword();
+ if (mEditable != isEditableNow || mIsPasswordType != isPasswordNow) {
mEditable = isEditableNow;
+ mIsPasswordType = isPasswordNow;
menu.clear();
createActionMenu(mode, menu);
return true;
@@ -127,6 +136,10 @@ public class SelectActionModeCallback implements ActionMode.Callback {
if (mEditable || mIncognito || !mActionHandler.isWebSearchAvailable()) {
menu.removeItem(R.id.select_action_menu_web_search);
}
+ if (mIsPasswordType) {
+ menu.removeItem(R.id.select_action_menu_copy);
+ menu.removeItem(R.id.select_action_menu_cut);
+ }
}
@Override
diff --git a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
index 172a016e3c..b89205c7a6 100644
--- a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
+++ b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
@@ -53,6 +53,11 @@ public class TracingControllerAndroid {
private static final String DEFAULT_CHROME_CATEGORIES_PLACE_HOLDER =
"_DEFAULT_CHROME_CATEGORIES";
+ // These strings must match the ones expected by adb_profile_chrome.
+ private static final String PROFILER_STARTED_FMT = "Profiler started: %s";
+ private static final String PROFILER_FINISHED_FMT =
+ "Profiler finished. Results are in %s.";
+
private final Context mContext;
private final TracingBroadcastReceiver mBroadcastReceiver;
private final TracingIntentFilter mIntentFilter;
@@ -191,7 +196,8 @@ public class TracingControllerAndroid {
return false;
}
- logAndToastInfo(mContext.getString(R.string.profiler_started_toast) + ": " + categories);
+ logForProfiler(String.format(PROFILER_STARTED_FMT, categories));
+ showToast(mContext.getString(R.string.profiler_started_toast) + ": " + categories);
mFilename = filename;
mIsTracing = true;
return true;
@@ -217,8 +223,8 @@ public class TracingControllerAndroid {
return;
}
- logAndToastInfo(
- mContext.getString(R.string.profiler_stopped_toast, mFilename));
+ logForProfiler(String.format(PROFILER_FINISHED_FMT, mFilename));
+ showToast(mContext.getString(R.string.profiler_stopped_toast, mFilename));
mIsTracing = false;
mFilename = null;
}
@@ -242,13 +248,17 @@ public class TracingControllerAndroid {
}
}
- void logAndToastError(String str) {
+ private void logAndToastError(String str) {
Log.e(TAG, str);
if (mShowToasts) Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show();
}
- void logAndToastInfo(String str) {
+ // The |str| string needs to match the ones that adb_chrome_profiler looks for.
+ private void logForProfiler(String str) {
Log.i(TAG, str);
+ }
+
+ private void showToast(String str) {
if (mShowToasts) Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show();
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
index 63deca865b..6f4723369c 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
@@ -248,18 +248,12 @@ public class BrowserAccessibilityManager {
float y = event.getY();
// Convert to CSS coordinates.
- int cssX = (int) (mRenderCoordinates.fromPixToLocalCss(x) +
- mRenderCoordinates.getScrollX());
- int cssY = (int) (mRenderCoordinates.fromPixToLocalCss(y) +
- mRenderCoordinates.getScrollY());
- int id = nativeHitTest(mNativeObj, cssX, cssY);
- if (mLastHoverId != id) {
- // Always send the ENTER and then the EXIT event, to match a standard Android View.
- sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
- sendAccessibilityEvent(mLastHoverId, AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
- mLastHoverId = id;
- }
+ int cssX = (int) (mRenderCoordinates.fromPixToLocalCss(x));
+ int cssY = (int) (mRenderCoordinates.fromPixToLocalCss(y));
+ // This sends an IPC to the render process to do the hit testing.
+ // The response is handled by handleHover.
+ nativeHitTest(mNativeObj, cssX, cssY);
return true;
}
@@ -441,6 +435,16 @@ public class BrowserAccessibilityManager {
}
@CalledByNative
+ private void handleHover(int id) {
+ if (mLastHoverId == id) return;
+
+ // Always send the ENTER and then the EXIT event, to match a standard Android View.
+ sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
+ sendAccessibilityEvent(mLastHoverId, AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
+ mLastHoverId = id;
+ }
+
+ @CalledByNative
private void announceLiveRegionText(String text) {
mView.announceForAccessibility(text);
}
@@ -682,7 +686,7 @@ public class BrowserAccessibilityManager {
private native int nativeGetRootId(long nativeBrowserAccessibilityManagerAndroid);
private native boolean nativeIsNodeValid(long nativeBrowserAccessibilityManagerAndroid, int id);
- private native int nativeHitTest(long nativeBrowserAccessibilityManagerAndroid, int x, int y);
+ private native void nativeHitTest(long nativeBrowserAccessibilityManagerAndroid, int x, int y);
private native boolean nativePopulateAccessibilityNodeInfo(
long nativeBrowserAccessibilityManagerAndroid, AccessibilityNodeInfo info, int id);
private native boolean nativePopulateAccessibilityEvent(
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
index 65958083eb..f2ae829062 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
@@ -8,6 +8,7 @@ import android.os.SystemClock;
import android.text.Editable;
import android.text.InputType;
import android.text.Selection;
+import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
@@ -212,6 +213,7 @@ public class AdapterInputConnection extends BaseInputConnection {
@Override
public boolean setComposingText(CharSequence text, int newCursorPosition) {
if (DEBUG) Log.w(TAG, "setComposingText [" + text + "] [" + newCursorPosition + "]");
+ if (maybePerformEmptyCompositionWorkaround(text)) return true;
super.setComposingText(text, newCursorPosition);
updateSelectionIfRequired();
return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(),
@@ -224,6 +226,7 @@ public class AdapterInputConnection extends BaseInputConnection {
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
if (DEBUG) Log.w(TAG, "commitText [" + text + "] [" + newCursorPosition + "]");
+ if (maybePerformEmptyCompositionWorkaround(text)) return true;
super.commitText(text, newCursorPosition);
updateSelectionIfRequired();
return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(),
@@ -446,6 +449,33 @@ public class AdapterInputConnection extends BaseInputConnection {
return mImeAdapter.getInputMethodManagerWrapper();
}
+ /**
+ * This method works around the issue crbug.com/373934 where Blink does not cancel
+ * the composition when we send a commit with the empty text.
+ *
+ * TODO(aurimas) Remove this once crbug.com/373934 is fixed.
+ *
+ * @param text Text that software keyboard requested to commit.
+ * @return Whether the workaround was performed.
+ */
+ private boolean maybePerformEmptyCompositionWorkaround(CharSequence text) {
+ int selectionStart = Selection.getSelectionStart(mEditable);
+ int selectionEnd = Selection.getSelectionEnd(mEditable);
+ int compositionStart = getComposingSpanStart(mEditable);
+ int compositionEnd = getComposingSpanEnd(mEditable);
+ if (TextUtils.isEmpty(text) && (selectionStart == selectionEnd)
+ && compositionStart != INVALID_COMPOSITION
+ && compositionEnd != INVALID_COMPOSITION) {
+ beginBatchEdit();
+ finishComposingText();
+ int selection = Selection.getSelectionStart(mEditable);
+ deleteSurroundingText(selection - compositionStart, selection - compositionEnd);
+ endBatchEdit();
+ return true;
+ }
+ return false;
+ }
+
@VisibleForTesting
static class ImeState {
public final String text;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ChromeDatePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/ChromeDatePickerDialog.java
new file mode 100644
index 0000000000..e759e8550a
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ChromeDatePickerDialog.java
@@ -0,0 +1,43 @@
+// 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.
+
+package org.chromium.content.browser.input;
+
+import android.app.DatePickerDialog.OnDateSetListener;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.widget.DatePicker;
+
+/**
+ * The behavior of the DatePickerDialog changed after JellyBean so it now calls
+ * OndateSetListener.onDateSet() even when the dialog is dismissed (e.g. back button, tap
+ * outside). This class will call the listener instead of the DatePickerDialog only when the
+ * BUTTON_POSITIVE has been clicked.
+ */
+class ChromeDatePickerDialog extends android.app.DatePickerDialog {
+ private final OnDateSetListener mCallBack;
+
+ public ChromeDatePickerDialog(Context context,
+ OnDateSetListener callBack,
+ int year,
+ int monthOfYear,
+ int dayOfMonth) {
+ super(context, 0, null, year, monthOfYear, dayOfMonth);
+ mCallBack = callBack;
+ }
+
+ /**
+ * The superclass DatePickerDialog has null for OnDateSetListener so we need to call the
+ * listener manually.
+ */
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == BUTTON_POSITIVE && mCallBack != null) {
+ DatePicker datePicker = getDatePicker();
+ datePicker.clearFocus();
+ mCallBack.onDateSet(datePicker, datePicker.getYear(),
+ datePicker.getMonth(), datePicker.getDayOfMonth());
+ }
+ }
+}
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/CursorController.java b/content/public/android/java/src/org/chromium/content/browser/input/CursorController.java
index 5bf4bada8a..68f88bc950 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/CursorController.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/CursorController.java
@@ -4,57 +4,38 @@
package org.chromium.content.browser.input;
-import android.graphics.Rect;
import android.view.ViewTreeObserver;
/**
* A CursorController instance can be used to control a cursor in the text.
*/
-abstract class CursorController implements ViewTreeObserver.OnTouchModeChangeListener {
-
- private Rect mVisibleClippingRectangle;
+interface CursorController extends ViewTreeObserver.OnTouchModeChangeListener {
/**
* Hide the cursor controller from screen.
*/
- abstract void hide();
+ void hide();
/**
* @return true if the CursorController is currently visible
*/
- abstract boolean isShowing();
+ boolean isShowing();
/**
* Called when the handle is about to start updating its position.
* @param handle
*/
- abstract void beforeStartUpdatingPosition(HandleView handle);
+ void beforeStartUpdatingPosition(HandleView handle);
/**
* Update the controller's position.
*/
- abstract void updatePosition(HandleView handle, int x, int y);
+ void updatePosition(HandleView handle, int x, int y);
/**
* Called when the view is detached from window. Perform house keeping task, such as
* stopping Runnable thread that would otherwise keep a reference on the context, thus
* preventing the activity to be recycled.
*/
- abstract void onDetached();
-
- /**
- * Sets the visible rectangle for text input elements as supplied by Blink.
- */
- public void setVisibleClippingRectangle(int left, int top, int right, int bottom) {
- if (mVisibleClippingRectangle == null) {
- mVisibleClippingRectangle = new Rect(left, top, right, bottom);
- } else {
- mVisibleClippingRectangle.set(left,top,right,bottom);
- }
- }
-
- Rect getVisibleClippingRectangle() {
- return mVisibleClippingRectangle;
- }
-
+ void onDetached();
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/DateTimePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/DateTimePickerDialog.java
index ea699f1dff..c52090b757 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/DateTimePickerDialog.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/DateTimePickerDialog.java
@@ -8,7 +8,6 @@ import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
-import android.os.Build;
import android.text.format.Time;
import android.view.LayoutInflater;
import android.view.View;
@@ -107,18 +106,6 @@ class DateTimePickerDialog extends AlertDialog implements OnClickListener,
}
@Override
- protected void onStop() {
- if (Build.VERSION.SDK_INT >= 16) {
- // The default behavior of dialogs changed in JellyBean and onwards.
- // Dismissing a dialog (by pressing back for example)
- // applies the chosen date. This code is added here so that the custom
- // pickers behave the same as the internal DatePickerDialog.
- tryNotifyDateTimeSet();
- }
- super.onStop();
- }
-
- @Override
public void onDateChanged(DatePicker view, int year,
int month, int day) {
// Signal a time change so the max/min checks can be applied.
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/HandleView.java b/content/public/android/java/src/org/chromium/content/browser/input/HandleView.java
index b8bac44a4c..e41efcfdfd 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/HandleView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/HandleView.java
@@ -18,8 +18,6 @@ import android.view.ViewParent;
import android.view.animation.AnimationUtils;
import android.widget.PopupWindow;
-import com.google.common.annotations.VisibleForTesting;
-
import org.chromium.content.browser.PositionObserver;
/**
@@ -232,8 +230,7 @@ public class HandleView extends View {
return mContainer.isShowing();
}
- @VisibleForTesting
- boolean isPositionVisible() {
+ private boolean isPositionVisible() {
// Always show a dragging handle.
if (mIsDragging) {
return true;
@@ -253,17 +250,8 @@ public class HandleView extends View {
final int posX = getContainerPositionX() + (int) mHotspotX;
final int posY = getContainerPositionY() + (int) mHotspotY;
- boolean result = posX >= clip.left && posX <= clip.right &&
+ return posX >= clip.left && posX <= clip.right &&
posY >= clip.top && posY <= clip.bottom;
-
- final Rect clippingRect = mController.getVisibleClippingRectangle();
- if (result && clippingRect != null) {
- // We need to clip against the visible areas as supplied by Blink,
- // e.g. textaread and text input elements.
- return clippingRect.contains(getAdjustedPositionX(), getAdjustedPositionY());
- }
-
- return result;
}
// x and y are in physical pixels.
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
index 1f87b13a48..bfc8ea5b41 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
@@ -295,6 +295,13 @@ public class ImeAdapter {
return isTextInputType(mTextInputType);
}
+ /**
+ * @return true if the selected text is of password.
+ */
+ public boolean isSelectionPassword() {
+ return mTextInputType == sTextInputTypePassword;
+ }
+
public boolean dispatchKeyEvent(KeyEvent event) {
return translateAndSendNativeEvents(event);
}
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java b/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
index 0f69775448..44bf207b3b 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
@@ -5,7 +5,6 @@
package org.chromium.content.browser.input;
import android.app.AlertDialog;
-import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.Context;
import android.content.DialogInterface;
@@ -216,7 +215,7 @@ public class InputDialogContainer {
int stepTime = (int) step;
if (dialogType == sTextInputTypeDate) {
- DatePickerDialog dialog = new DatePickerDialog(mContext,
+ ChromeDatePickerDialog dialog = new ChromeDatePickerDialog(mContext,
new DateListener(dialogType),
year, month, monthDay);
DateDialogNormalizer.normalize(dialog.getDatePicker(), dialog,
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/InsertionHandleController.java b/content/public/android/java/src/org/chromium/content/browser/input/InsertionHandleController.java
index f7c6f5bb27..bd3a464f00 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/InsertionHandleController.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/InsertionHandleController.java
@@ -23,7 +23,7 @@ import org.chromium.content.browser.PositionObserver;
/**
* CursorController for inserting text at the cursor position.
*/
-public abstract class InsertionHandleController extends CursorController {
+public abstract class InsertionHandleController implements CursorController {
/** The handle view, lazily created when first shown */
private HandleView mHandle;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java
index 77904d3548..e415a6219a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java
@@ -8,7 +8,6 @@ import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
-import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.NumberPicker;
@@ -261,18 +260,6 @@ public class MultiFieldTimePickerDialog
mListener.onTimeSet(hour, minute, sec, milli);
}
- @Override
- protected void onStop() {
- if (Build.VERSION.SDK_INT >= 16) {
- // The default behavior of dialogs changed in JellyBean and onwards.
- // Dismissing a dialog (by pressing back for example)
- // applies the chosen date. This code is added here so that the custom
- // pickers behave the same as the internal DatePickerDialog.
- notifyDateSet();
- }
- super.onStop();
- }
-
private static class NumberFormatter implements NumberPicker.Formatter {
private final String mFormat;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java
index 97458f3099..475cfae2b8 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java
@@ -8,6 +8,7 @@ import android.content.Context;
import android.graphics.Rect;
import android.view.View;
import android.widget.AdapterView;
+import android.widget.PopupWindow;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content.browser.RenderCoordinates;
@@ -27,6 +28,7 @@ public class SelectPopupDropdown implements SelectPopup {
private DropdownPopupWindow mDropdownPopupWindow;
private int mInitialSelection = -1;
+ private boolean mAlreadySelectedItems = false;
public SelectPopupDropdown(ContentViewCore contentViewCore, List<SelectPopupItem> items,
Rect bounds, int[] selected) {
@@ -39,6 +41,7 @@ public class SelectPopupDropdown implements SelectPopup {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int[] selectedIndices = {position};
mContentViewCore.selectPopupMenuItems(selectedIndices);
+ mAlreadySelectedItems = true;
hide();
}
});
@@ -57,6 +60,15 @@ public class SelectPopupDropdown implements SelectPopup {
float anchorHeight = renderCoordinates.fromPixToDip(
renderCoordinates.fromLocalCssToPix(bounds.bottom)) - anchorY;
mDropdownPopupWindow.setAnchorRect(anchorX, anchorY, anchorWidth, anchorHeight);
+ mDropdownPopupWindow.setOnDismissListener(
+ new PopupWindow.OnDismissListener() {
+ @Override
+ public void onDismiss() {
+ if (!mAlreadySelectedItems) {
+ mContentViewCore.selectPopupMenuItems(null);
+ }
+ }
+ });
}
@Override
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectionHandleController.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectionHandleController.java
index db7efe7b87..0edf5519b9 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/SelectionHandleController.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectionHandleController.java
@@ -13,7 +13,7 @@ import org.chromium.content.browser.PositionObserver;
/**
* CursorController for selecting a range of text.
*/
-public abstract class SelectionHandleController extends CursorController {
+public abstract class SelectionHandleController implements CursorController {
// The following constants match the ones in
// third_party/WebKit/public/web/WebTextDirection.h
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java
index d862e6e078..1e84dee3e6 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java
@@ -8,7 +8,6 @@ import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
-import android.os.Build;
import org.chromium.content.R;
import org.chromium.content.browser.input.TwoFieldDatePicker.OnMonthOrWeekChangedListener;
@@ -98,18 +97,6 @@ public abstract class TwoFieldDatePickerDialog extends AlertDialog implements On
}
@Override
- protected void onStop() {
- if (Build.VERSION.SDK_INT >= 16) {
- // The default behavior of dialogs changed in JellyBean and onwards.
- // Dismissing a dialog (by pressing back for example)
- // applies the chosen date. This code is added here so that the custom
- // pickers behave the same as the internal DatePickerDialog.
- tryNotifyDateSet();
- }
- super.onStop();
- }
-
- @Override
public void onMonthOrWeekChanged(TwoFieldDatePicker view, int year, int positionInYear) {
mPicker.init(year, positionInYear, null);
}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java b/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java
index 15971606a1..caac14f4e4 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java
@@ -63,7 +63,8 @@ public class GestureStateListener {
public void onScrollOffsetOrExtentChanged(int scrollOffsetY, int scrollExtentY) {}
/*
- * Called when a tap event was not handled by the renderer.
+ * Called after a single-tap gesture event was dispatched to the renderer,
+ * indicating whether or not the gesture was consumed.
*/
- public void onUnhandledTapEvent(int x, int y) {}
+ public void onSingleTap(boolean consumed, int x, int y) {}
}
diff --git a/content/public/android/java/strings/translations/android_content_strings_el.xtb b/content/public/android/java/strings/translations/android_content_strings_el.xtb
index 98057be0e9..11a874f8e7 100644
--- a/content/public/android/java/strings/translations/android_content_strings_el.xtb
+++ b/content/public/android/java/strings/translations/android_content_strings_el.xtb
@@ -24,13 +24,13 @@
<translation id="7096034533295549981">Φόρτωση βίντεο</translation>
<translation id="1542044944667958430">Αναζήτηση στον Ιστό</translation>
<translation id="6849295950938417341">Αποτυχία έναρξης προγράμματος προφίλ</translation>
-<translation id="6527303717912515753">Κοινοποίηση</translation>
+<translation id="6527303717912515753">Κοινή χρήση</translation>
<translation id="1822429046913737220">Π.Μ./Μ.Μ.</translation>
<translation id="5789643057113097023">.</translation>
<translation id="1768717197362323622">Χιλιοστό του δευτερολέπτου</translation>
<translation id="2841013758207633010">Ώρα</translation>
<translation id="7138678301420049075">Άλλο</translation>
-<translation id="6643016212128521049">Εκκαθάριση</translation>
+<translation id="6643016212128521049">Διαγραφή</translation>
<translation id="2429669115401274487">μ.μ.</translation>
<translation id="7781164152564914424">Ορισμός μήνα</translation>
<translation id="6965382102122355670">OK</translation>
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
index b6d98c6b0f..3ce9a2cf1e 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
@@ -333,12 +333,13 @@ public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
@SmallTest
@Feature({"AndroidWebView", "Android-JavaBridge"})
- public void testClientPropertiesPersistAcrossPageLoads() throws Throwable {
+ public void testCustomPropertiesCleanedUpOnPageReloads() throws Throwable {
assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
executeJavaScript("testController.myProperty = 42;");
assertEquals("42", executeJavaScriptAndGetStringResult("testController.myProperty"));
synchronousPageReload();
- assertEquals("42", executeJavaScriptAndGetStringResult("testController.myProperty"));
+ assertEquals("object", executeJavaScriptAndGetStringResult("typeof testController"));
+ assertEquals("undefined", executeJavaScriptAndGetStringResult("testController.myProperty"));
}
@SmallTest
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java
index 603588626d..c344416500 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeCoercionTest.java
@@ -312,7 +312,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase {
assertNull(mTestObject.waitForObjectValue());
executeJavaScript("testObject.setStringValue(Number.NaN);");
- assertEquals("NaN", mTestObject.waitForStringValue());
+ assertTrue("nan".equalsIgnoreCase(mTestObject.waitForStringValue()));
executeJavaScript("testObject.setBooleanValue(Number.NaN);");
assertFalse(mTestObject.waitForBooleanValue());
@@ -353,7 +353,7 @@ public class JavaBridgeCoercionTest extends JavaBridgeTestBase {
assertNull(mTestObject.waitForObjectValue());
executeJavaScript("testObject.setStringValue(Infinity);");
- assertEquals("Inf", mTestObject.waitForStringValue());
+ assertTrue("inf".equalsIgnoreCase(mTestObject.waitForStringValue()));
executeJavaScript("testObject.setBooleanValue(Infinity);");
assertFalse(mTestObject.waitForBooleanValue());
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/MediaResourceGetterTest.java b/content/public/android/javatests/src/org/chromium/content/browser/MediaResourceGetterTest.java
index b1fa44195f..f8cd4a7a32 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/MediaResourceGetterTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/MediaResourceGetterTest.java
@@ -336,6 +336,24 @@ public class MediaResourceGetterTest extends InstrumentationTestCase {
}
@SmallTest
+ public void testConfigure_Net_Allowed_LocalHost_WithNoNetwork() {
+ String[] localHostUrls = {
+ "http://LocalHost",
+ "https://127.0.0.1/",
+ "http://[::1]:8888/",
+ };
+ mMockContext.allowPermission = true;
+ mFakeMRG.mNetworkType = null;
+ for (String localHostUrl : localHostUrls) {
+ assertTrue(mFakeMRG.configure(mMockContext, localHostUrl,
+ TEST_COOKIES, TEST_USER_AGENT));
+ assertEquals(localHostUrl, mFakeMRG.mUri);
+ assertEquals(sHeadersCookieAndUA, mFakeMRG.mHeaders);
+ assertNull(mFakeMRG.mPath);
+ }
+ }
+
+ @SmallTest
public void testConfigure_File_Allowed_MntSdcard() {
final String path = "/mnt/sdcard/test";
final String url = "file://" + path;
@@ -501,4 +519,4 @@ public class MediaResourceGetterTest extends InstrumentationTestCase {
assertTrue(MediaResourceGetter.androidDeviceOk(
"Happy Device", android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH));
}
-} \ No newline at end of file
+}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
index b9284cb80a..e6d07b96ba 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
@@ -208,35 +208,6 @@ public class InsertionHandleTest extends ContentShellTestBase {
assertTrue(handle.getPositionX() < dragToX - 100);
}
- /**
- * Tests insertion handle visibility relative to the clipping rectangle.
- * This is currently not implemented using dragHandleTo, because of issues with
- * http://crbug.com/169648.
- */
- @MediumTest
- @Feature({"TextSelection", "TextInput", "Main"})
- public void testInsertionHandleVisiblity() throws Throwable {
- launchWithUrl(TEXTAREA_DATA_URL);
- clickNodeToShowInsertionHandle(TEXTAREA_ID);
-
- InsertionHandleController ihc = getContentViewCore().getInsertionHandleControllerForTest();
- HandleView handle = ihc.getHandleViewForTest();
-
- assertTrue(handle.isPositionVisible());
-
- ihc.setVisibleClippingRectangle(
- handle.getAdjustedPositionX() + 1, handle.getAdjustedPositionY() + 1,
- handle.getAdjustedPositionX() + 100, handle.getAdjustedPositionY() + 100);
-
- assertFalse(handle.isPositionVisible());
-
- ihc.setVisibleClippingRectangle(
- handle.getAdjustedPositionX() - 1, handle.getAdjustedPositionY() - 1,
- handle.getAdjustedPositionX() + 1, handle.getAdjustedPositionY() + 1);
-
- assertTrue(handle.isPositionVisible());
- }
-
@Override
protected void tearDown() throws Exception {
super.tearDown();
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
index 29b56313bb..e8ff4b2c61 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
@@ -5,7 +5,6 @@
package org.chromium.content.browser.input;
import android.graphics.Point;
-import android.graphics.PointF;
import android.graphics.Rect;
import android.os.SystemClock;
import android.test.FlakyTest;
@@ -29,10 +28,6 @@ import org.chromium.content_shell_apk.ContentShellTestBase;
import java.util.concurrent.Callable;
-/**
- * Tests for the selection handles that allow to select text in both editable and non-editable
- * elements.
- */
public class SelectionHandleTest extends ContentShellTestBase {
private static final String META_DISABLE_ZOOM =
"<meta name=\"viewport\" content=\"" +
@@ -156,76 +151,6 @@ public class SelectionHandleTest extends ContentShellTestBase {
doSelectionHandleTest(TestPageType.EDITABLE);
}
- /**
- * Verifies that the visibility of handles is correct when visible clipping
- * rectangle is set.
- */
- @MediumTest
- @Feature({ "TextSelection" })
- public void testEditableSelectionHandlesStartNotVisibleEndVisible() throws Throwable {
- doSelectionHandleTestVisibility(TestPageType.EDITABLE, false, true, new PointF(.5f, .5f),
- new PointF(0,1));
- }
-
- @MediumTest
- @Feature({ "TextSelection" })
- public void testEditableSelectionHandlesStartVisibleEndNotVisible() throws Throwable {
- doSelectionHandleTestVisibility(TestPageType.EDITABLE, true, false, new PointF(1,0),
- new PointF(.5f, .5f));
- }
-
- @MediumTest
- @Feature({ "TextSelection" })
- public void testEditableSelectionHandlesStartVisibleEndVisible() throws Throwable {
- doSelectionHandleTestVisibility(TestPageType.EDITABLE, true, true, new PointF(1, 0),
- new PointF(0,1));
- }
-
- @MediumTest
- @Feature({ "TextSelection" })
- public void testEditableSelectionHandlesStartNotVisibleEndNotVisible() throws Throwable {
- doSelectionHandleTestVisibility(TestPageType.EDITABLE, false, false, new PointF(1,0),
- new PointF(1, 0));
- }
-
- private void doSelectionHandleTestVisibility(TestPageType pageType,
- boolean startHandleVisible, boolean endHandleVisible,
- PointF affineTopLeft, PointF affineBottomRight) throws Throwable {
- launchWithUrl(pageType.dataUrl);
-
- clickNodeToShowSelectionHandles(pageType.nodeId);
- assertWaitForSelectionEditableEquals(pageType.selectionShouldBeEditable);
-
- HandleView startHandle = getStartHandle();
- HandleView endHandle = getEndHandle();
-
- Rect nodeWindowBounds = getNodeBoundsPix(pageType.nodeId);
-
- int visibleBoundsLeftX = Math.round(affineTopLeft.x * nodeWindowBounds.left
- + affineTopLeft.y * nodeWindowBounds.right);
- int visibleBoundsTopY = Math.round(affineTopLeft.x * nodeWindowBounds.top
- + affineTopLeft.y * nodeWindowBounds.bottom);
-
- int visibleBoundsRightX = Math.round(affineBottomRight.x * nodeWindowBounds.left
- + affineBottomRight.y * nodeWindowBounds.right);
- int visibleBoundsBottomY = Math.round(affineBottomRight.x * nodeWindowBounds.top
- + affineBottomRight.y * nodeWindowBounds.bottom);
-
- getContentViewCore().getSelectionHandleControllerForTest().setVisibleClippingRectangle(
- visibleBoundsLeftX, visibleBoundsTopY, visibleBoundsRightX, visibleBoundsBottomY);
-
- int leftX = (nodeWindowBounds.left + nodeWindowBounds.centerX()) / 2;
- int rightX = (nodeWindowBounds.right + nodeWindowBounds.centerX()) / 2;
-
- int topY = (nodeWindowBounds.top + nodeWindowBounds.centerY()) / 2;
- int bottomY = (nodeWindowBounds.bottom + nodeWindowBounds.centerY()) / 2;
-
- dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0, startHandleVisible);
- dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1, endHandleVisible);
-
- clickToDismissHandles();
- }
-
private void doSelectionHandleTest(TestPageType pageType) throws Throwable {
launchWithUrl(pageType.dataUrl);
@@ -246,25 +171,23 @@ public class SelectionHandleTest extends ContentShellTestBase {
int bottomY = (nodeWindowBounds.bottom + nodeWindowBounds.centerY()) / 2;
// Drag start handle up and to the left. The selection start should decrease.
- dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0, true);
+ dragHandleAndCheckSelectionChange(startHandle, leftX, topY, -1, 0);
// Drag end handle down and to the right. The selection end should increase.
- dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1, true);
+ dragHandleAndCheckSelectionChange(endHandle, rightX, bottomY, 0, 1);
// Drag start handle back to the middle. The selection start should increase.
- dragHandleAndCheckSelectionChange(startHandle, centerX, centerY, 1, 0, true);
+ dragHandleAndCheckSelectionChange(startHandle, centerX, centerY, 1, 0);
// Drag end handle up and to the left past the start handle. Both selection start and end
// should decrease.
- dragHandleAndCheckSelectionChange(endHandle, leftX, topY, -1, -1, true);
+ dragHandleAndCheckSelectionChange(endHandle, leftX, topY, -1, -1);
// Drag start handle down and to the right past the end handle. Both selection start and end
// should increase.
- dragHandleAndCheckSelectionChange(startHandle, rightX, bottomY, 1, 1, true);
+ dragHandleAndCheckSelectionChange(startHandle, rightX, bottomY, 1, 1);
clickToDismissHandles();
}
- private void dragHandleAndCheckSelectionChange(final HandleView handle,
- final int dragToX, final int dragToY,
- final int expectedStartChange, final int expectedEndChange,
- final boolean expectedHandleVisible) throws Throwable {
+ private void dragHandleAndCheckSelectionChange(HandleView handle, int dragToX, int dragToY,
+ final int expectedStartChange, final int expectedEndChange) throws Throwable {
String initialText = getContentViewCore().getSelectedText();
final int initialSelectionEnd = getSelectionEnd();
final int initialSelectionStart = getSelectionStart();
@@ -288,8 +211,6 @@ public class SelectionHandleTest extends ContentShellTestBase {
if ((int) Math.signum(endChange) != expectedEndChange) return false;
}
- if (expectedHandleVisible != handle.isPositionVisible()) return false;
-
return true;
}
}));
diff --git a/content/public/app/content_main_delegate.cc b/content/public/app/content_main_delegate.cc
index 88ce4aa912..433300cfd8 100644
--- a/content/public/app/content_main_delegate.cc
+++ b/content/public/app/content_main_delegate.cc
@@ -42,8 +42,8 @@ bool ContentMainDelegate::DelaySandboxInitialization(
#elif defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
-ZygoteForkDelegate* ContentMainDelegate::ZygoteStarting() {
- return NULL;
+void ContentMainDelegate::ZygoteStarting(
+ ScopedVector<ZygoteForkDelegate>* delegates) {
}
#endif
diff --git a/content/public/app/content_main_delegate.h b/content/public/app/content_main_delegate.h
index 9b94b98d46..6191d7815e 100644
--- a/content/public/app/content_main_delegate.h
+++ b/content/public/app/content_main_delegate.h
@@ -10,6 +10,9 @@
#include "build/build_config.h"
#include "content/common/content_export.h"
+template <typename>
+class ScopedVector;
+
namespace content {
class ContentBrowserClient;
@@ -65,8 +68,9 @@ class CONTENT_EXPORT ContentMainDelegate {
#elif defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
// Tells the embedder that the zygote process is starting, and allows it to
- // specify a zygote delegate if it wishes.
- virtual ZygoteForkDelegate* ZygoteStarting();
+ // specify one or more zygote delegates if it wishes by storing them in
+ // |*delegates|.
+ virtual void ZygoteStarting(ScopedVector<ZygoteForkDelegate>* delegates);
// Called every time the zygote process forks.
virtual void ZygoteForked() {}
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
new file mode 100644
index 0000000000..a258390cc3
--- /dev/null
+++ b/content/public/browser/BUILD.gn
@@ -0,0 +1,9 @@
+# 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.
+
+source_set("browser") {
+ deps = [
+ "//content/browser",
+ ]
+}
diff --git a/content/public/browser/android/OWNERS b/content/public/browser/android/OWNERS
index 29d0acf8c4..1df84db9b5 100644
--- a/content/public/browser/android/OWNERS
+++ b/content/public/browser/android/OWNERS
@@ -1,3 +1,4 @@
bulach@chromium.org
+mkosiba@chromium.org
tedchoc@chromium.org
yfriedman@chromium.org
diff --git a/content/public/browser/android/compositor.h b/content/public/browser/android/compositor.h
index 7cb73e2583..2d8126b3db 100644
--- a/content/public/browser/android/compositor.h
+++ b/content/public/browser/android/compositor.h
@@ -64,13 +64,9 @@ class CONTENT_EXPORT Compositor {
// Tells the view tree to assume a transparent background when rendering.
virtual void SetHasTransparentBackground(bool flag) = 0;
- // Attempts to composite and read back the result into the provided buffer.
- // The buffer must be at least window width * height * 4 (RGBA) bytes large.
- // The buffer is not modified if false is returned.
- virtual bool CompositeAndReadback(void *pixels, const gfx::Rect& rect) = 0;
-
- // Composite immediately. Used in single-threaded mode.
- virtual void Composite() = 0;
+ // Request layout and draw. You only need to call this if you need to trigger
+ // Composite *without* having modified the layer tree.
+ virtual void SetNeedsComposite() = 0;
// Generates a UIResource and returns a UIResourceId. |is_transient|
// indicates whether or not to release the resource once the bitmap
diff --git a/content/public/browser/android/compositor_client.h b/content/public/browser/android/compositor_client.h
index d835de199d..09a12e5df1 100644
--- a/content/public/browser/android/compositor_client.h
+++ b/content/public/browser/android/compositor_client.h
@@ -11,14 +11,11 @@ namespace content {
class CONTENT_EXPORT CompositorClient {
public:
- // Tells the client that it should schedule a composite.
- virtual void ScheduleComposite() = 0;
+ // Gives the client a chance for layout changes before compositing.
+ virtual void Layout() {}
// The compositor has completed swapping a frame.
- virtual void OnSwapBuffersCompleted() {}
-
- // The compositor will eventually swap a frame.
- virtual void OnSwapBuffersPosted() {}
+ virtual void OnSwapBuffersCompleted(int pending_swap_buffers) {}
// Tells the client that GL resources were lost and need to be reinitialized.
virtual void DidLoseResources() {}
diff --git a/content/public/browser/android/synchronous_compositor.h b/content/public/browser/android/synchronous_compositor.h
index 1d03278d79..5cd659f662 100644
--- a/content/public/browser/android/synchronous_compositor.h
+++ b/content/public/browser/android/synchronous_compositor.h
@@ -13,16 +13,24 @@
class SkCanvas;
+namespace cc {
+class CompositorFrame;
+class CompositorFrameAck;
+}
+
namespace gfx {
class GLSurface;
class Transform;
};
-namespace content {
+namespace gpu {
+class GLInProcessContext;
+}
-class WebContents;
+namespace content {
class SynchronousCompositorClient;
+class WebContents;
struct CONTENT_EXPORT SynchronousCompositorMemoryPolicy {
// Memory limit for rendering and pre-rendering.
@@ -68,16 +76,25 @@ class CONTENT_EXPORT SynchronousCompositor {
// releases all hardware resources.
virtual void ReleaseHwDraw() = 0;
+ // Get the share context of the compositor. The returned context is owned
+ // by the compositor and is only valid between InitializeHwDraw and
+ // ReleaseHwDraw.
+ virtual gpu::GLInProcessContext* GetShareContext() = 0;
+
// "On demand" hardware draw. The content is first clipped to |damage_area|,
// then transformed through |transform|, and finally clipped to |view_size|
// and by the existing stencil buffer if any.
- virtual bool DemandDrawHw(
+ virtual scoped_ptr<cc::CompositorFrame> DemandDrawHw(
gfx::Size surface_size,
const gfx::Transform& transform,
gfx::Rect viewport,
gfx::Rect clip,
bool stencil_enabled) = 0;
+ // For delegated rendering, return resources from parent compositor to this.
+ // Note that all resources must be returned before ReleaseHwDraw.
+ virtual void ReturnResources(const cc::CompositorFrameAck& frame_ack) = 0;
+
// "On demand" SW draw, into the supplied canvas (observing the transform
// and clip set there-in).
virtual bool DemandDrawSw(SkCanvas* canvas) = 0;
diff --git a/content/public/browser/android/synchronous_compositor_client.h b/content/public/browser/android/synchronous_compositor_client.h
index 0abdebcf8a..2247f3d9b9 100644
--- a/content/public/browser/android/synchronous_compositor_client.h
+++ b/content/public/browser/android/synchronous_compositor_client.h
@@ -26,16 +26,14 @@ class SynchronousCompositorClient {
virtual void DidDestroyCompositor(SynchronousCompositor* compositor) = 0;
// See LayerScrollOffsetDelegate for details.
- virtual void SetMaxRootLayerScrollOffset(
- gfx::Vector2dF max_scroll_offset) = 0;
- virtual void SetTotalRootLayerScrollOffset(gfx::Vector2dF new_value) = 0;
virtual gfx::Vector2dF GetTotalRootLayerScrollOffset() = 0;
+ virtual void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset,
+ const gfx::Vector2dF& max_scroll_offset,
+ const gfx::SizeF& scrollable_size,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) = 0;
virtual bool IsExternalFlingActive() const = 0;
- virtual void SetRootLayerPageScaleFactorAndLimits(
- float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) = 0;
- virtual void SetRootLayerScrollableSize(gfx::SizeF scrollable_size) = 0;
virtual void DidOverscroll(gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF latest_overscroll_delta,
diff --git a/content/public/browser/blob_handle.h b/content/public/browser/blob_handle.h
new file mode 100644
index 0000000000..e4d7a2de9f
--- /dev/null
+++ b/content/public/browser/blob_handle.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_BROWSER_BLOB_HANDLE_H_
+#define CONTENT_PUBLIC_BROWSER_BLOB_HANDLE_H_
+
+#include <string>
+
+namespace content {
+
+// A handle to Blobs that can be stored outside of content/. This class holds
+// a reference to the Blob and should be used to keep alive a Blob.
+class BlobHandle {
+ public:
+ virtual ~BlobHandle() {}
+ virtual std::string GetUUID() = 0;
+
+ protected:
+ BlobHandle() {}
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_BLOB_HANDLE_H_
diff --git a/content/public/browser/browser_child_process_host.h b/content/public/browser/browser_child_process_host.h
index a44b8d3d73..078eb860cf 100644
--- a/content/public/browser/browser_child_process_host.h
+++ b/content/public/browser/browser_child_process_host.h
@@ -71,9 +71,6 @@ class CONTENT_EXPORT BrowserChildProcessHost : public IPC::Sender {
// this object.
virtual void SetHandle(base::ProcessHandle handle) = 0;
- // Set the nacl debug stub port of the process.
- virtual void SetNaClDebugStubPort(int port) = 0;
-
#if defined(OS_MACOSX) && !defined(OS_IOS)
// Returns a PortProvider used to get process metrics for child processes.
static base::ProcessMetrics::PortProvider* GetPortProvider();
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index d4e80b218a..27a5569dba 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -31,7 +31,8 @@ class SpecialStoragePolicy;
namespace content {
-class BrowserPluginGuestManagerDelegate;
+class BlobHandle;
+class BrowserPluginGuestManager;
class DownloadManager;
class DownloadManagerDelegate;
class GeolocationPermissionContext;
@@ -77,6 +78,13 @@ class CONTENT_EXPORT BrowserContext : public base::SupportsUserData {
static content::StoragePartition* GetDefaultStoragePartition(
BrowserContext* browser_context);
+ typedef base::Callback<void(scoped_ptr<BlobHandle>)> BlobCallback;
+
+ // |callback| returns a NULL scoped_ptr on failure.
+ static void CreateMemoryBackedBlob(BrowserContext* browser_context,
+ const char* data, size_t length,
+ const BlobCallback& callback);
+
// Ensures that the corresponding ResourceContext is initialized. Normally the
// BrowserContext initializs the corresponding getters when its objects are
// created, but if the embedder wants to pass the ResourceContext to another
@@ -149,14 +157,14 @@ class CONTENT_EXPORT BrowserContext : public base::SupportsUserData {
virtual void RequestProtectedMediaIdentifierPermission(
int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback& callback) = 0;
// Cancels pending protected media identifier permission requests.
virtual void CancelProtectedMediaIdentifierPermissionRequests(
- int group_id) = 0;
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) = 0;
// Returns the resource context.
virtual ResourceContext* GetResourceContext() = 0;
@@ -170,9 +178,8 @@ class CONTENT_EXPORT BrowserContext : public base::SupportsUserData {
// return NULL, in which case geolocation requests will always be allowed.
virtual GeolocationPermissionContext* GetGeolocationPermissionContext() = 0;
- // Returns the guest manager delegate for this context.
- virtual content::BrowserPluginGuestManagerDelegate*
- GetGuestManagerDelegate() = 0;
+ // Returns the guest manager for this context.
+ virtual BrowserPluginGuestManager* GetGuestManager() = 0;
// Returns a special storage policy implementation, or NULL.
virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() = 0;
diff --git a/content/public/browser/browser_message_filter.cc b/content/public/browser/browser_message_filter.cc
index 452a49576d..377cfb79d3 100644
--- a/content/public/browser/browser_message_filter.cc
+++ b/content/public/browser/browser_message_filter.cc
@@ -11,6 +11,7 @@
#include "base/process/kill.h"
#include "base/process/process_handle.h"
#include "base/task_runner.h"
+#include "content/browser/browser_child_process_host_impl.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/result_codes.h"
@@ -87,16 +88,9 @@ class BrowserMessageFilter::Internal : public IPC::MessageFilter {
// Dispatches a message to the derived class.
bool DispatchMessage(const IPC::Message& message) {
- bool message_was_ok = true;
- bool rv = filter_->OnMessageReceived(message, &message_was_ok);
+ bool rv = filter_->OnMessageReceived(message);
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO) || rv) <<
"Must handle messages that were dispatched to another thread!";
- if (!message_was_ok) {
- content::RecordAction(
- base::UserMetricsAction("BadMessageTerminate_BMF"));
- filter_->BadMessageReceived();
- }
-
return rv;
}
@@ -206,11 +200,13 @@ bool BrowserMessageFilter::CheckCanDispatchOnUI(const IPC::Message& message,
void BrowserMessageFilter::BadMessageReceived() {
CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kDisableKillAfterBadIPC))
+ return;
- if (!command_line->HasSwitch(switches::kDisableKillAfterBadIPC)) {
- base::KillProcess(PeerHandle(), content::RESULT_CODE_KILLED_BAD_MESSAGE,
- false);
- }
+ BrowserChildProcessHostImpl::HistogramBadMessageTerminated(
+ PROCESS_TYPE_RENDERER);
+ base::KillProcess(PeerHandle(), content::RESULT_CODE_KILLED_BAD_MESSAGE,
+ false);
}
BrowserMessageFilter::~BrowserMessageFilter() {
diff --git a/content/public/browser/browser_message_filter.h b/content/public/browser/browser_message_filter.h
index 3330dfe6ff..f1334b941c 100644
--- a/content/public/browser/browser_message_filter.h
+++ b/content/public/browser/browser_message_filter.h
@@ -75,8 +75,7 @@ class CONTENT_EXPORT BrowserMessageFilter
// Your function will normally be called on the IO thread. However, if your
// OverrideXForMessage modifies the thread used to dispatch the message,
// your function will be called on the requested thread.
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) = 0;
+ virtual bool OnMessageReceived(const IPC::Message& message) = 0;
// Can be called on any thread, after OnChannelConnected is called.
base::ProcessHandle PeerHandle();
diff --git a/content/public/browser/browser_plugin_guest_delegate.cc b/content/public/browser/browser_plugin_guest_delegate.cc
index b3d0fb4a7f..866b3560eb 100644
--- a/content/public/browser/browser_plugin_guest_delegate.cc
+++ b/content/public/browser/browser_plugin_guest_delegate.cc
@@ -4,54 +4,10 @@
#include "content/public/browser/browser_plugin_guest_delegate.h"
-#include "base/callback.h"
-
namespace content {
-WebContents* BrowserPluginGuestDelegate::GetOpener() const {
- return NULL;
-}
-
-bool BrowserPluginGuestDelegate::HandleKeyboardEvent(
- const NativeWebKeyboardEvent& event) {
- return false;
-}
-
bool BrowserPluginGuestDelegate::IsDragAndDropEnabled() {
return false;
}
-bool BrowserPluginGuestDelegate::IsOverridingUserAgent() const {
- return false;
-}
-
-GURL BrowserPluginGuestDelegate::ResolveURL(const std::string& src) {
- return GURL(src);
-}
-
-void BrowserPluginGuestDelegate::RequestMediaAccessPermission(
- const MediaStreamRequest& request,
- const MediaResponseCallback& callback) {
- callback.Run(MediaStreamDevices(),
- MEDIA_DEVICE_INVALID_STATE,
- scoped_ptr<MediaStreamUI>());
-}
-
-void BrowserPluginGuestDelegate::CanDownload(
- const std::string& request_method,
- const GURL& url,
- const base::Callback<void(bool)>& callback) {
- callback.Run(true);
-}
-
-JavaScriptDialogManager*
-BrowserPluginGuestDelegate::GetJavaScriptDialogManager() {
- return NULL;
-}
-
-bool BrowserPluginGuestDelegate::HandleContextMenu(
- const ContextMenuParams& params) {
- return false;
-}
-
} // namespace content
diff --git a/content/public/browser/browser_plugin_guest_delegate.h b/content/public/browser/browser_plugin_guest_delegate.h
index 6df0ef19a5..66129cfb07 100644
--- a/content/public/browser/browser_plugin_guest_delegate.h
+++ b/content/public/browser/browser_plugin_guest_delegate.h
@@ -7,20 +7,14 @@
#include "base/callback_forward.h"
#include "base/process/kill.h"
-#include "base/strings/string16.h"
-#include "base/values.h"
#include "content/common/content_export.h"
-#include "content/public/common/browser_plugin_permission_type.h"
-#include "content/public/common/media_stream_request.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/size.h"
-#include "url/gurl.h"
+
+namespace gfx {
+class Size;
+} // namespace gfx
namespace content {
-class JavaScriptDialogManager;
-struct ContextMenuParams;
-struct NativeWebKeyboardEvent;
class WebContents;
// Objects implement this interface to get notified about changes in the guest
@@ -29,107 +23,18 @@ class CONTENT_EXPORT BrowserPluginGuestDelegate {
public:
virtual ~BrowserPluginGuestDelegate() {}
- // Add a message to the console.
- virtual void AddMessageToConsole(int32 level,
- const base::string16& message,
- int32 line_no,
- const base::string16& source_id) {}
-
- // Request the delegate to close this guest, and do whatever cleanup it needs
- // to do.
- virtual void Close() {}
-
// Notification that the embedder has completed attachment.
virtual void DidAttach() {}
- // Returns the opener for this guest.
- // TODO(fsamuel): Remove this once the New Window API is migrated outside of
- // the content layer.
- virtual WebContents* GetOpener() const;
-
- // Informs the delegate that the guest render process is gone. |status|
- // indicates whether the guest was killed, crashed, or was terminated
- // gracefully.
- virtual void GuestProcessGone(base::TerminationStatus status) {}
-
- // Informs the delegate that the embedder has been destroyed.
- virtual void EmbedderDestroyed() {}
-
- // Informs the delegate of a reply to the find request specified by
- // |request_id|.
- virtual void FindReply(int request_id,
- int number_of_matches,
- const gfx::Rect& selection_rect,
- int active_match_ordinal,
- bool final_update) {}
-
- virtual bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
-
// Requests setting the zoom level to the provided |zoom_level|.
virtual void SetZoom(double zoom_factor) {}
virtual bool IsDragAndDropEnabled();
- // Returns whether the user agent for the guest is being overridden.
- virtual bool IsOverridingUserAgent() const;
-
- // Notification that a load in the guest resulted in abort. Note that |url|
- // may be invalid.
- virtual void LoadAbort(bool is_top_level,
- const GURL& url,
- const std::string& error_type) {}
-
- // Notification that the page has made some progress loading. |progress| is a
- // value between 0.0 (nothing loaded) and 1.0 (page loaded completely).
- virtual void LoadProgressed(double progress) {}
-
- // Notification that the guest is no longer hung.
- virtual void RendererResponsive() {}
-
- // Notification that the guest is hung.
- virtual void RendererUnresponsive() {}
-
- typedef base::Callback<void(bool /* allow */,
- const std::string& /* user_input */)>
- PermissionResponseCallback;
-
- // Request permission from the delegate to perform an action of the provided
- // |permission_type|. Details of the permission request are found in
- // |request_info|. A |callback| is provided to make the decision.
- virtual void RequestPermission(
- BrowserPluginPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default) {}
-
- // Requests resolution of a potentially relative URL.
- virtual GURL ResolveURL(const std::string& src);
-
- // Informs the delegate of the WebContents that created delegate's associated
- // WebContents.
- // TODO(fsamuel): Remove this once the New Window API is migrated outside of
- // the content layer.
- virtual void SetOpener(WebContents* opener) {}
-
// Notifies that the content size of the guest has changed in autosize mode.
virtual void SizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) {}
- // Asks permission to use the camera and/or microphone. If permission is
- // granted, a call should be made to |callback| with the devices. If the
- // request is denied, a call should be made to |callback| with an empty list
- // of devices. |request| has the details of the request (e.g. which of audio
- // and/or video devices are requested, and lists of available devices).
- virtual void RequestMediaAccessPermission(
- const MediaStreamRequest& request,
- const MediaResponseCallback& callback);
-
- // Asks the delegate if the given guest can download.
- // Invoking the |callback| synchronously is OK.
- virtual void CanDownload(const std::string& request_method,
- const GURL& url,
- const base::Callback<void(bool)>& callback);
-
// Asks the delegate if the given guest can lock the pointer.
// Invoking the |callback| synchronously is OK.
virtual void RequestPointerLockPermission(
@@ -137,12 +42,18 @@ class CONTENT_EXPORT BrowserPluginGuestDelegate {
bool last_unlocked_by_target,
const base::Callback<void(bool)>& callback) {}
- // Returns a pointer to a service to manage JavaScript dialogs. May return
- // NULL in which case dialogs aren't shown.
- virtual JavaScriptDialogManager* GetJavaScriptDialogManager();
+ // Request navigating the guest to the provided |src| URL.
+ virtual void NavigateGuest(const std::string& src) {}
+
+ // Requests that the delegate destroy itself along with its associated
+ // WebContents.
+ virtual void Destroy() {}
- // Returns true if the context menu operation was handled by the delegate.
- virtual bool HandleContextMenu(const ContextMenuParams& params);
+ // Registers a |callback| with the delegate that the delegate would call when
+ // it is about to be destroyed.
+ typedef base::Callback<void()> DestructionCallback;
+ virtual void RegisterDestructionCallback(
+ const DestructionCallback& callback) {}
};
} // namespace content
diff --git a/content/public/browser/browser_plugin_guest_manager.cc b/content/public/browser/browser_plugin_guest_manager.cc
new file mode 100644
index 0000000000..3c97145656
--- /dev/null
+++ b/content/public/browser/browser_plugin_guest_manager.cc
@@ -0,0 +1,31 @@
+// 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 "content/public/browser/browser_plugin_guest_manager.h"
+
+#include "base/values.h"
+
+namespace content {
+
+content::WebContents* BrowserPluginGuestManager::CreateGuest(
+ SiteInstance* embedder_site_instance,
+ int instance_id,
+ const std::string& storage_partition_id,
+ bool persist_storage,
+ scoped_ptr<base::DictionaryValue> extra_params) {
+ return NULL;
+}
+
+int BrowserPluginGuestManager::GetNextInstanceID() {
+ return 0;
+}
+
+bool BrowserPluginGuestManager::ForEachGuest(
+ WebContents* embedder_web_contents,
+ const GuestCallback& callback) {
+ return false;
+}
+
+} // content
+
diff --git a/content/public/browser/browser_plugin_guest_manager_delegate.h b/content/public/browser/browser_plugin_guest_manager.h
index 484b09c48f..6a54d4bcb1 100644
--- a/content/public/browser/browser_plugin_guest_manager_delegate.h
+++ b/content/public/browser/browser_plugin_guest_manager.h
@@ -2,41 +2,44 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_DELEGATE_H_
-#define CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_DELEGATE_H_
+#ifndef CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
+#define CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
+
+#include <string>
#include "base/callback.h"
#include "content/common/content_export.h"
class GURL;
+namespace base {
+class DictionaryValue;
+} // namespace base
+
namespace content {
class SiteInstance;
class WebContents;
-// A BrowserPluginGuestManagerDelegate offloads guest management and routing
+// A BrowserPluginGuestManager offloads guest management and routing
// operations outside of the content layer.
-class CONTENT_EXPORT BrowserPluginGuestManagerDelegate {
+class CONTENT_EXPORT BrowserPluginGuestManager {
public:
- virtual ~BrowserPluginGuestManagerDelegate() {}
+ virtual ~BrowserPluginGuestManager() {}
+
+ // Requests the allocation of a new guest WebContents.
+ virtual content::WebContents* CreateGuest(
+ content::SiteInstance* embedder_site_instance,
+ int instance_id,
+ const std::string& storage_partition_id,
+ bool persist_storage,
+ scoped_ptr<base::DictionaryValue> extra_params);
// Return a new instance ID.
// TODO(fsamuel): Remove this. Once the instance ID concept is moved
// entirely out of content and into chrome, this API will be unnecessary.
virtual int GetNextInstanceID();
- // Adds a new WebContents |guest_web_contents| as a guest.
- // TODO(fsamuel): Remove this. Once guest WebContents allocation
- // moves outside of content, this API will be unnecessary.
- virtual void AddGuest(int guest_instance_id,
- WebContents* guest_web_contents) {}
-
- // Removes a |guest_instance_id| as a valid guest.
- // TODO(fsamuel): Remove this. Once guest WebContents allocation
- // moves outside of content, this API will be unnecessary.
- virtual void RemoveGuest(int guest_instance_id) {}
-
typedef base::Callback<void(WebContents*)> GuestByInstanceIDCallback;
// Requests a guest WebContents associated with the provided
// |guest_instance_id|. If a guest associated with the provided ID
@@ -49,12 +52,6 @@ class CONTENT_EXPORT BrowserPluginGuestManagerDelegate {
int embedder_render_process_id,
const GuestByInstanceIDCallback& callback) {}
- // Returns an existing SiteInstance if the current profile has a guest of the
- // given |guest_site|.
- // TODO(fsamuel): Remove this. Once guest WebContents allocation
- // moves outside of content, this API will be unnecessary.
- virtual content::SiteInstance* GetGuestSiteInstance(const GURL& guest_site);
-
// Iterates over all WebContents belonging to a given |embedder_web_contents|,
// calling |callback| for each. If one of the callbacks returns true, then
// the iteration exits early.
@@ -65,4 +62,4 @@ class CONTENT_EXPORT BrowserPluginGuestManagerDelegate {
} // namespace content
-#endif // CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_DELEGATE_H_
+#endif // CONTENT_PUBLIC_BROWSER_BROWSER_PLUGIN_GUEST_MANAGER_H_
diff --git a/content/public/browser/browser_plugin_guest_manager_delegate.cc b/content/public/browser/browser_plugin_guest_manager_delegate.cc
deleted file mode 100644
index 43012be63d..0000000000
--- a/content/public/browser/browser_plugin_guest_manager_delegate.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// 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 "content/public/browser/browser_plugin_guest_manager_delegate.h"
-
-namespace content {
-
-int BrowserPluginGuestManagerDelegate::GetNextInstanceID() {
- return 0;
-}
-
-content::SiteInstance* BrowserPluginGuestManagerDelegate::GetGuestSiteInstance(
- const GURL& guest_site) {
- return NULL;
-}
-
-bool BrowserPluginGuestManagerDelegate::ForEachGuest(
- WebContents* embedder_web_contents,
- const GuestCallback& callback) {
- return false;
-}
-
-} // content
-
diff --git a/content/public/browser/child_process_data.h b/content/public/browser/child_process_data.h
index 28076578ec..3683be9c33 100644
--- a/content/public/browser/child_process_data.h
+++ b/content/public/browser/child_process_data.h
@@ -28,11 +28,8 @@ struct ChildProcessData {
// The handle to the process.
base::ProcessHandle handle;
- int nacl_debug_stub_port;
-
explicit ChildProcessData(int process_type)
- : process_type(process_type), id(0), handle(base::kNullProcessHandle),
- nacl_debug_stub_port(0) {
+ : process_type(process_type), id(0), handle(base::kNullProcessHandle) {
}
};
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index fb8279bc86..60ca573855 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -33,7 +33,7 @@ bool ContentBrowserClient::ShouldUseProcessPerSite(
net::URLRequestContextGetter* ContentBrowserClient::CreateRequestContext(
BrowserContext* browser_context,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
return NULL;
}
@@ -43,7 +43,7 @@ ContentBrowserClient::CreateRequestContextForStoragePartition(
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
return NULL;
}
@@ -66,6 +66,10 @@ bool ContentBrowserClient::IsSuitableHost(RenderProcessHost* process_host,
return true;
}
+bool ContentBrowserClient::MayReuseHost(RenderProcessHost* process_host) {
+ return true;
+}
+
bool ContentBrowserClient::ShouldTryToUseExistingProcessHost(
BrowserContext* browser_context, const GURL& url) {
return false;
@@ -213,14 +217,13 @@ bool ContentBrowserClient::CanCreateWindow(
const GURL& source_origin,
WindowContainerType container_type,
const GURL& target_url,
- const content::Referrer& referrer,
+ const Referrer& referrer,
WindowOpenDisposition disposition,
const blink::WebWindowFeatures& features,
bool user_gesture,
bool opener_suppressed,
- content::ResourceContext* context,
+ ResourceContext* context,
int render_process_id,
- bool is_guest,
int opener_id,
bool* no_javascript_access) {
*no_javascript_access = false;
@@ -283,6 +286,10 @@ VibrationProvider* ContentBrowserClient::OverrideVibrationProvider() {
return NULL;
}
+DevToolsManagerDelegate* ContentBrowserClient::GetDevToolsManagerDelegate() {
+ return NULL;
+}
+
#if defined(OS_WIN)
const wchar_t* ContentBrowserClient::GetResourceDllName() {
return NULL;
@@ -290,7 +297,7 @@ const wchar_t* ContentBrowserClient::GetResourceDllName() {
#endif
bool ContentBrowserClient::IsPluginAllowedToCallRequestOSFileHandle(
- content::BrowserContext* browser_context,
+ BrowserContext* browser_context,
const GURL& url) {
return false;
}
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 5f0473ba86..d1e3bf56fa 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -21,6 +21,7 @@
#include "content/public/common/window_container_type.h"
#include "net/base/mime_util.h"
#include "net/cookies/canonical_cookie.h"
+#include "net/url_request/url_request_interceptor.h"
#include "net/url_request/url_request_job_factory.h"
#include "third_party/WebKit/public/web/WebNotificationPresenter.h"
#include "ui/base/window_open_disposition.h"
@@ -88,6 +89,7 @@ class BrowserPluginGuestDelegate;
class BrowserPpapiHost;
class BrowserURLHandler;
class DesktopNotificationDelegate;
+class DevToolsManagerDelegate;
class ExternalVideoSurfaceContainer;
class LocationProvider;
class MediaObserver;
@@ -111,9 +113,9 @@ typedef std::map<
std::string, linked_ptr<net::URLRequestJobFactory::ProtocolHandler> >
ProtocolHandlerMap;
-// A scoped vector of protocol handlers.
-typedef ScopedVector<net::URLRequestJobFactory::ProtocolHandler>
- ProtocolHandlerScopedVector;
+// A scoped vector of protocol interceptors.
+typedef ScopedVector<net::URLRequestInterceptor>
+ URLRequestInterceptorScopedVector;
// Embedder API (or SPI) for participating in browser logic, to be implemented
// by the client of the content browser. See ChromeContentBrowserClient for the
@@ -150,6 +152,7 @@ class CONTENT_EXPORT ContentBrowserClient {
// the delegate in the content embedder that will service the guest in the
// content layer. The content layer takes ownership of the |guest_delegate|.
virtual void GuestWebContentsCreated(
+ int guest_instance_id,
SiteInstance* guest_site_instance,
WebContents* guest_web_contents,
WebContents* opener_web_contents,
@@ -203,7 +206,7 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual net::URLRequestContextGetter* CreateRequestContext(
BrowserContext* browser_context,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors);
+ URLRequestInterceptorScopedVector request_interceptors);
// Creates the net::URLRequestContextGetter for a StoragePartition. Should
// only be called once per partition_path per ContentBrowserClient object.
@@ -213,7 +216,7 @@ class CONTENT_EXPORT ContentBrowserClient {
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors);
+ URLRequestInterceptorScopedVector request_interceptors);
// Returns whether a specified URL is handled by the embedder's internal
// protocol handlers.
@@ -234,6 +237,10 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual bool IsSuitableHost(RenderProcessHost* process_host,
const GURL& site_url);
+ // Returns whether a new view for a new site instance can be added to a
+ // given |process_host|.
+ virtual bool MayReuseHost(RenderProcessHost* process_host);
+
// Returns whether a new process should be created or an existing one should
// be reused based on the URL we want to load. This should return false,
// unless there is a good reason otherwise.
@@ -362,7 +369,7 @@ class CONTENT_EXPORT ContentBrowserClient {
// Allow the embedder to specify a string version of the storage partition
// config with a site.
virtual std::string GetStoragePartitionIdForSite(
- content::BrowserContext* browser_context,
+ BrowserContext* browser_context,
const GURL& site);
// Allows the embedder to provide a validation check for |partition_id|s.
@@ -387,7 +394,7 @@ class CONTENT_EXPORT ContentBrowserClient {
// |in_memory| values. When a partition is not to be persisted, the
// |in_memory| value must be set to true.
virtual void GetStoragePartitionConfigForSite(
- content::BrowserContext* browser_context,
+ BrowserContext* browser_context,
const GURL& site,
bool can_be_default,
std::string* partition_domain,
@@ -445,7 +452,7 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual void RequestDesktopNotificationPermission(
const GURL& source_origin,
RenderFrameHost* render_frame_host,
- base::Closure& callback) {}
+ const base::Closure& callback) {}
// Checks if the given page has permission to show desktop notifications.
// This is called on the IO thread.
@@ -472,14 +479,13 @@ class CONTENT_EXPORT ContentBrowserClient {
const GURL& source_origin,
WindowContainerType container_type,
const GURL& target_url,
- const content::Referrer& referrer,
+ const Referrer& referrer,
WindowOpenDisposition disposition,
const blink::WebWindowFeatures& features,
bool user_gesture,
bool opener_suppressed,
- content::ResourceContext* context,
+ ResourceContext* context,
int render_process_id,
- bool is_guest,
int opener_id,
bool* no_javascript_access);
@@ -543,7 +549,7 @@ class CONTENT_EXPORT ContentBrowserClient {
virtual void DidCreatePpapiPlugin(BrowserPpapiHost* browser_host) {}
// Gets the host for an external out-of-process plugin.
- virtual content::BrowserPpapiHost* GetExternalBrowserPpapiHost(
+ virtual BrowserPpapiHost* GetExternalBrowserPpapiHost(
int plugin_child_id);
// Returns true if the socket operation specified by |params| is allowed from
@@ -593,6 +599,10 @@ class CONTENT_EXPORT ContentBrowserClient {
// information.
virtual VibrationProvider* OverrideVibrationProvider();
+ // Creates a new DevToolsManagerDelegate. The caller owns the returned value.
+ // It's valid to return NULL.
+ virtual DevToolsManagerDelegate* GetDevToolsManagerDelegate();
+
#if defined(OS_POSIX) && !defined(OS_MACOSX)
// Populates |mappings| with all files that need to be mapped before launching
// a child process.
@@ -616,7 +626,7 @@ class CONTENT_EXPORT ContentBrowserClient {
// Returns true if plugin referred to by the url can use
// pp::FileIO::RequestOSFileHandle.
virtual bool IsPluginAllowedToCallRequestOSFileHandle(
- content::BrowserContext* browser_context,
+ BrowserContext* browser_context,
const GURL& url);
// Returns true if dev channel APIs are available for plugins.
@@ -626,7 +636,7 @@ class CONTENT_EXPORT ContentBrowserClient {
// if the default cookie store should be used
// This is called on the IO thread.
virtual net::CookieStore* OverrideCookieStoreForRenderProcess(
- int render_process_id_);
+ int render_process_id);
#if defined(VIDEO_HOLE)
// Allows an embedder to provide its own ExternalVideoSurfaceContainer
diff --git a/content/public/browser/devtools_agent_host.h b/content/public/browser/devtools_agent_host.h
index 0055d2b4d8..dd18a53886 100644
--- a/content/public/browser/devtools_agent_host.h
+++ b/content/public/browser/devtools_agent_host.h
@@ -14,6 +14,7 @@
namespace content {
+class DevToolsExternalAgentProxyDelegate;
class RenderViewHost;
class WebContents;
@@ -42,6 +43,12 @@ class CONTENT_EXPORT DevToolsAgentHost
static scoped_refptr<DevToolsAgentHost> GetForWorker(int worker_process_id,
int worker_route_id);
+ // Creates DevToolsAgentHost that communicates to the target by means of
+ // provided |delegate|. |delegate| ownership is passed to the created agent
+ // host.
+ static scoped_refptr<DevToolsAgentHost> Create(
+ DevToolsExternalAgentProxyDelegate* delegate);
+
static bool IsDebuggerAttached(WebContents* web_contents);
// Returns a list of all existing RenderViewHost's that can be debugged.
@@ -66,6 +73,9 @@ class CONTENT_EXPORT DevToolsAgentHost
// Attaches render view host to this host.
virtual void ConnectRenderViewHost(RenderViewHost* rvh) = 0;
+ // Returns true if DevToolsAgentHost is for worker.
+ virtual bool IsWorker() const = 0;
+
protected:
friend class base::RefCounted<DevToolsAgentHost>;
virtual ~DevToolsAgentHost() {}
diff --git a/content/public/browser/devtools_external_agent_proxy.h b/content/public/browser/devtools_external_agent_proxy.h
index 25d701688b..d95fd7ab32 100644
--- a/content/public/browser/devtools_external_agent_proxy.h
+++ b/content/public/browser/devtools_external_agent_proxy.h
@@ -17,15 +17,6 @@ class DevToolsExternalAgentProxyDelegate;
// Describes interface for communication with an external DevTools agent.
class DevToolsExternalAgentProxy {
public:
- // Creates DevToolsExternalAgentProxy to communicate with an agent
- // via the provided |delegate|.
- // Caller get the proxy ownership and keeps the |delegate| ownership.
- static CONTENT_EXPORT DevToolsExternalAgentProxy* Create(
- DevToolsExternalAgentProxyDelegate* delegate);
-
- // Returns the local DevToolsAgentHost for the external agent.
- virtual scoped_refptr<DevToolsAgentHost> GetAgentHost() = 0;
-
// Sends the message to the client host.
virtual void DispatchOnClientHost(const std::string& message) = 0;
diff --git a/content/public/browser/devtools_external_agent_proxy_delegate.h b/content/public/browser/devtools_external_agent_proxy_delegate.h
index d68854f23c..3d55c9a7ec 100644
--- a/content/public/browser/devtools_external_agent_proxy_delegate.h
+++ b/content/public/browser/devtools_external_agent_proxy_delegate.h
@@ -11,20 +11,21 @@
namespace content {
+class DevToolsExternalAgentProxy;
+
// Describes the interface for sending messages to an external DevTools agent.
class DevToolsExternalAgentProxyDelegate {
public:
+ virtual ~DevToolsExternalAgentProxyDelegate() {}
+
// Informs the agent that a client host has attached.
- virtual void Attach() = 0;
+ virtual void Attach(DevToolsExternalAgentProxy* proxy) = 0;
// Informs the agent that a client host has detached.
virtual void Detach() = 0;
// Sends a message to the agent.
virtual void SendMessageToBackend(const std::string& message) = 0;
-
- protected:
- virtual ~DevToolsExternalAgentProxyDelegate() {}
};
} // namespace content
diff --git a/content/public/browser/devtools_manager_delegate.h b/content/public/browser/devtools_manager_delegate.h
new file mode 100644
index 0000000000..57579b1398
--- /dev/null
+++ b/content/public/browser/devtools_manager_delegate.h
@@ -0,0 +1,33 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_MANAGER_DELEGATE_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_MANAGER_DELEGATE_H_
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace content {
+
+class BrowserContext;
+class DevToolsAgentHost;
+
+class DevToolsManagerDelegate {
+ public:
+ virtual ~DevToolsManagerDelegate() {}
+
+ // Opens the inspector for |agent_host|.
+ virtual void Inspect(BrowserContext* browser_context,
+ DevToolsAgentHost* agent_host) = 0;
+
+ // Result ownership is passed to the caller.
+ virtual base::DictionaryValue* HandleCommand(
+ DevToolsAgentHost* agent_host,
+ base::DictionaryValue* command) = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_MANAGER_DELEGATE_H_
diff --git a/content/browser/devtools/devtools_protocol_constants_generator.py b/content/public/browser/devtools_protocol_constants_generator.py
index 7339208d7e..3447fb1dfb 100755
--- a/content/browser/devtools/devtools_protocol_constants_generator.py
+++ b/content/public/browser/devtools_protocol_constants_generator.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# Copyright 2013 The Chromium Authors. All rights reserved.
+# 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.
@@ -7,23 +7,29 @@ import sys
import string
import json
+package = sys.argv[1]
+output_cc_path = sys.argv[2]
+output_h_path = sys.argv[3]
+blink_protocol_path = sys.argv[4]
+browser_protocol_path = sys.argv[5] if len(sys.argv) > 5 else None
+
template_h = string.Template("""\
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
-#define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
+#ifndef ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
+#define ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
// Generated by
-// content/browser/devtools/devtools_protocol_constants_generator.py from
+// content/public/browser/devtools_protocol_constants_generator.py from
// third_party/WebKit/Source/devtools/protocol.json and
-// content/browser/devtools/browser_protocol.json).
+// content/browser/devtools/browser_protocol.json
#include <string>
-namespace content {
+namespace $package {
namespace devtools {
extern const char kProtocolVersion[];
@@ -34,9 +40,9 @@ extern const char kResult[];
$contents
} // devtools
-} // content
+} // $package
-#endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
+#endif // ${PACKAGE}_BROWSER_DEVTOOLS_DEVTOOLS_PROTOCOL_CONSTANTS_H_
""")
template_cc = string.Template("""\
@@ -46,15 +52,15 @@ template_cc = string.Template("""\
// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
// Generated by
-// content/browser/devtools/devtools_protocol_constants_generator.py from
+// content/public/browser/devtools_protocol_constants_generator.py from
// third_party/WebKit/Source/devtools/protocol.json and
-// content/browser/devtools/browser_protocol.json).
+// content/browser/devtools/browser_protocol.json
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
-#include "content/browser/devtools/devtools_protocol_constants.h"
+#include "$package/browser/devtools/devtools_protocol_constants.h"
-namespace content {
+namespace $package {
namespace devtools {
const char kProtocolVersion[] = "$major.$minor";
@@ -72,7 +78,7 @@ const char kResult[] = "result";
$contents
} // devtools
-} // content
+} // $package
""")
def Capitalize(s):
@@ -130,25 +136,31 @@ def FormatNamespace(title, tree, indent, format_string):
def CreateHeader(tree, output_file):
contents = FormatContents(tree, "", "extern const char {0}[];\n")
- output_file.write(template_h.substitute({"contents": contents}))
+ output_file.write(template_h.substitute({
+ "contents": contents,
+ "package": package,
+ "PACKAGE": package.upper()
+ }))
def CreateBody(tree, version, output_file):
contents = FormatContents(tree, "", "const char {0}[] = \"{1}\";\n")
output_file.write(template_cc.substitute({
"major": version["major"],
"minor": version["minor"],
- "contents": contents
+ "contents": contents,
+ "package": package
}))
-blink_protocol_data = open(sys.argv[1]).read()
-browser_protocol_data = open(sys.argv[2]).read()
-
+blink_protocol_data = open(blink_protocol_path).read()
blink_protocol = json.loads(blink_protocol_data)
-browser_protocol = json.loads(browser_protocol_data)
-
blink_version = blink_protocol["version"]
-domains = blink_protocol["domains"] + browser_protocol["domains"]
+domains = blink_protocol["domains"]
+
+if browser_protocol_path:
+ browser_protocol_data = open(browser_protocol_path).read()
+ browser_protocol = json.loads(browser_protocol_data)
+ domains = domains + browser_protocol["domains"]
namespace_tree = {}
@@ -192,8 +204,8 @@ while (references):
for (namespace_name, namespace) in namespace_tree.items():
namespace["kName"] = namespace_name
-with open(sys.argv[3], "w") as f:
+with open(output_cc_path, "w") as f:
CreateBody(namespace_tree, blink_version, f)
-with open(sys.argv[4], "w") as f:
+with open(output_h_path, "w") as f:
CreateHeader(namespace_tree, f)
diff --git a/content/public/browser/geolocation_permission_context.h b/content/public/browser/geolocation_permission_context.h
index ab85862c3e..a97c83f92d 100644
--- a/content/public/browser/geolocation_permission_context.h
+++ b/content/public/browser/geolocation_permission_context.h
@@ -12,6 +12,7 @@
class GURL;
namespace content {
+class WebContents;
// GeolocationPermissionContext must be implemented by the embedder, to provide
// the policy and logic for the Geolocation permissions flow.
@@ -23,8 +24,7 @@ class CONTENT_EXPORT GeolocationPermissionContext
// When the answer to a permission request has been determined, |callback|
// should be called with the result.
virtual void RequestGeolocationPermission(
- int render_process_id,
- int render_view_id,
+ WebContents* web_contents,
int bridge_id,
const GURL& requesting_frame,
bool user_gesture,
@@ -32,8 +32,7 @@ class CONTENT_EXPORT GeolocationPermissionContext
// The renderer is cancelling a pending permission request.
virtual void CancelGeolocationPermissionRequest(
- int render_process_id,
- int render_view_id,
+ WebContents* web_contents,
int bridge_id,
const GURL& requesting_frame) = 0;
diff --git a/content/public/browser/geolocation_provider.h b/content/public/browser/geolocation_provider.h
index 5e27db4888..dea3c7ee3f 100644
--- a/content/public/browser/geolocation_provider.h
+++ b/content/public/browser/geolocation_provider.h
@@ -5,33 +5,36 @@
#ifndef CONTENT_PUBLIC_BROWSER_GEOLOCATION_PROVIDER_H_
#define CONTENT_PUBLIC_BROWSER_GEOLOCATION_PROVIDER_H_
-#include "base/callback_forward.h"
+#include "base/callback_list.h"
#include "content/common/content_export.h"
namespace content {
struct Geoposition;
-class CONTENT_EXPORT GeolocationProvider {
+// This is the main API to the geolocation subsystem. The application will hold
+// a single instance of this class and can register multiple clients to be
+// notified of location changes:
+// * Callbacks are registered by AddLocationUpdateCallback() and will keep
+// receiving updates until the returned subscription object is destructed.
+// The application must instantiate the GeolocationProvider on the UI thread and
+// must communicate with it on the same thread.
+// The underlying location arbitrator will only be enabled whilst there is at
+// least one registered observer or pending callback (and only after
+// UserDidOptIntoLocationServices). The arbitrator and the location providers it
+// uses run on a separate Geolocation thread.
+class GeolocationProvider {
public:
- // This method, and all below, can only be called on the IO thread unless
- // otherwise specified.
- static GeolocationProvider* GetInstance();
+ CONTENT_EXPORT static GeolocationProvider* GetInstance();
typedef base::Callback<void(const Geoposition&)> LocationUpdateCallback;
+ typedef base::CallbackList<void(const Geoposition&)>::Subscription
+ Subscription;
// |use_high_accuracy| is used as a 'hint' for the provider preferences for
// this particular observer, however the observer could receive updates for
// best available locations from any active provider whilst it is registered.
- // If an existing observer is added a second time, its options are updated
- // but only a single call to RemoveLocationUpdateCallback() is required to
- // remove it.
- virtual void AddLocationUpdateCallback(const LocationUpdateCallback& callback,
- bool use_high_accuracy) = 0;
-
- // Remove a previously registered observer. No-op if not previously registered
- // via AddLocationUpdateCallback(). Returns true if the observer was removed.
- virtual bool RemoveLocationUpdateCallback(
- const LocationUpdateCallback& callback) = 0;
+ virtual scoped_ptr<Subscription> AddLocationUpdateCallback(
+ const LocationUpdateCallback& callback, bool use_high_accuracy) = 0;
// Calling this method indicates the user has opted into using location
// services, including sending network requests to [Google servers to] resolve
@@ -39,21 +42,17 @@ class CONTENT_EXPORT GeolocationProvider {
// go/chrome-privacy-doc.
virtual void UserDidOptIntoLocationServices() = 0;
- // Overrides the current location for testing. This function may be called on
- // any thread. The completion callback will be invoked asynchronously on the
- // calling thread when the override operation is completed.
+ // Overrides the current location for testing.
//
- // This function allows the current location to be faked without having to
- // manually instantiate a GeolocationProvider backed by a MockLocationProvider
- // that serves a fake location.
+ // Overrides the location for automation/testing. Suppresses any further
+ // updates from the actual providers and sends an update with the overridden
+ // position to all registered clients.
//
// Do not use this function in unit tests. The function instantiates the
// singleton geolocation stack in the background and manipulates it to report
// a fake location. Neither step can be undone, breaking unit test isolation
// (crbug.com/125931).
- static void OverrideLocationForTesting(
- const Geoposition& position,
- const base::Closure& completion_callback);
+ virtual void OverrideLocationForTesting(const Geoposition& position) = 0;
protected:
virtual~GeolocationProvider() {}
diff --git a/content/public/browser/host_zoom_map.h b/content/public/browser/host_zoom_map.h
index 9307697211..e98e74e424 100644
--- a/content/public/browser/host_zoom_map.h
+++ b/content/public/browser/host_zoom_map.h
@@ -18,6 +18,7 @@ namespace content {
class BrowserContext;
class ResourceContext;
+class WebContents;
// Maps hostnames to custom zoom levels. Written on the UI thread and read on
// any thread. One instance per browser context. Must be created on the UI
@@ -54,6 +55,15 @@ class HostZoomMap {
CONTENT_EXPORT static HostZoomMap* GetForBrowserContext(
BrowserContext* browser_context);
+ // Returns the current zoom level for the specified WebContents. May be
+ // temporary or host-specific.
+ CONTENT_EXPORT static double GetZoomLevel(const WebContents* web_contents);
+
+ // Sets the current zoom level for the specified WebContents. The level may
+ // be temporary or host-specific depending on the particular WebContents.
+ CONTENT_EXPORT static void SetZoomLevel(const WebContents* web_contents,
+ double level);
+
// Copy the zoom levels from the given map. Can only be called on the UI
// thread.
virtual void CopyFrom(HostZoomMap* copy) = 0;
diff --git a/content/public/browser/navigation_controller.h b/content/public/browser/navigation_controller.h
index 8c0596e7e2..c883e1e6fc 100644
--- a/content/public/browser/navigation_controller.h
+++ b/content/public/browser/navigation_controller.h
@@ -220,22 +220,22 @@ class NavigationController {
// Active entry --------------------------------------------------------------
// THIS IS DEPRECATED. DO NOT USE. Use GetVisibleEntry instead.
+ // See http://crbug.com/273710.
//
// Returns the active entry, which is the transient entry if any, the pending
// entry if a navigation is in progress or the last committed entry otherwise.
// NOTE: This can be NULL!!
- //
- // If you are trying to get the current state of the NavigationController,
- // this is the method you will typically want to call. If you want to display
- // the active entry to the user (e.g., in the location bar), use
- // GetVisibleEntry instead.
virtual NavigationEntry* GetActiveEntry() const = 0;
- // Returns the same entry as GetActiveEntry, except that it ignores pending
- // history navigation entries. This should be used when displaying info to
- // the user, so that the location bar and other indicators do not update for
- // a back/forward navigation until the pending entry commits. This approach
- // guards against URL spoofs on slow history navigations.
+ // Returns the entry that should be displayed to the user in the address bar.
+ // This is the transient entry if any, the pending entry if a navigation is
+ // in progress *and* is safe to display to the user (see below), or the last
+ // committed entry otherwise.
+ // NOTE: This can be NULL if no entry has committed!
+ //
+ // A pending entry is safe to display if it started in the browser process or
+ // if it's a renderer-initiated navigation in a new tab which hasn't been
+ // accessed by another tab. (If it has been accessed, it risks a URL spoof.)
virtual NavigationEntry* GetVisibleEntry() const = 0;
// Returns the index from which we would go back/forward or reload. This is
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 66a96eca5c..4afb7a2661 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -95,9 +95,11 @@ class CONTENT_EXPORT RenderProcessHost : public IPC::Sender,
virtual void WidgetHidden() = 0;
virtual int VisibleWidgetCount() const = 0;
- // Indicates whether the current RenderProcessHost associated with a guest
- // renderer process.
- virtual bool IsGuest() const = 0;
+ // Indicates whether the current RenderProcessHost is associated with an
+ // isolated guest renderer process. Not all guest renderers are created equal.
+ // A guest, as indicated by BrowserPluginGuest::IsGuest, may coexist with
+ // other non-guest renderers in the same process if IsIsolatedGuest is false.
+ virtual bool IsIsolatedGuest() const = 0;
// Returns the storage partition associated with this process.
//
diff --git a/content/public/browser/render_view_host.h b/content/public/browser/render_view_host.h
index 629cdbd4a8..559c0ef4c6 100644
--- a/content/public/browser/render_view_host.h
+++ b/content/public/browser/render_view_host.h
@@ -213,6 +213,9 @@ class CONTENT_EXPORT RenderViewHost : virtual public RenderWidgetHost {
// Sets the mojo handle for WebUI pages.
virtual void SetWebUIHandle(mojo::ScopedMessagePipeHandle handle) = 0;
+ // Notify the render view host to select the word around the caret.
+ virtual void SelectWordAroundCaret() = 0;
+
#if defined(OS_ANDROID)
// Selects and zooms to the find result nearest to the point (x,y)
// defined in find-in-page coordinates.
diff --git a/content/public/browser/render_widget_host_view.h b/content/public/browser/render_widget_host_view.h
index 1620e24fa5..fff83a76f7 100644
--- a/content/public/browser/render_widget_host_view.h
+++ b/content/public/browser/render_widget_host_view.h
@@ -102,9 +102,9 @@ class CONTENT_EXPORT RenderWidgetHostView {
virtual base::string16 GetSelectedText() const = 0;
// Subclasses should override this method to do what is appropriate to set
- // the custom background for their platform.
- virtual void SetBackground(const SkBitmap& background) = 0;
- virtual const SkBitmap& GetBackground() = 0;
+ // the background to be transparent or opaque.
+ virtual void SetBackgroundOpaque(bool opaque) = 0;
+ virtual bool GetBackgroundOpaque() = 0;
// Return value indicates whether the mouse is locked successfully or not.
virtual bool LockMouse() = 0;
diff --git a/content/public/browser/service_worker_context.h b/content/public/browser/service_worker_context.h
index a701d6c7a5..2d0805e9b9 100644
--- a/content/public/browser/service_worker_context.h
+++ b/content/public/browser/service_worker_context.h
@@ -49,6 +49,11 @@ class ServiceWorkerContext {
// TODO(jyasskin): Provide a way to SendMessage to a Scope.
+ // Synchronously releases all of the RenderProcessHosts that have Service
+ // Workers running inside them, and prevents any new Service Worker instances
+ // from starting up.
+ virtual void Terminate() = 0;
+
protected:
ServiceWorkerContext() {}
virtual ~ServiceWorkerContext() {}
diff --git a/content/public/browser/site_instance.h b/content/public/browser/site_instance.h
index 2cede0abf4..9c9e663386 100644
--- a/content/public/browser/site_instance.h
+++ b/content/public/browser/site_instance.h
@@ -12,7 +12,6 @@
namespace content {
class BrowserContext;
-class BrowsingInstance;
class RenderProcessHost;
///////////////////////////////////////////////////////////////////////////////
@@ -107,6 +106,10 @@ class CONTENT_EXPORT SiteInstance : public base::RefCounted<SiteInstance> {
// origins (e.g., postMessage) should be supported.
virtual bool IsRelatedSiteInstance(const SiteInstance* instance) = 0;
+ // Returns the total active WebContents count for this SiteInstance and all
+ // related SiteInstances in the same BrowsingInstance.
+ virtual size_t GetRelatedActiveContentsCount() = 0;
+
// Factory method to create a new SiteInstance. This will create a new
// new BrowsingInstance, so it should only be used when creating a new tab
// from scratch (or similar circumstances). Callers should ensure that
diff --git a/content/public/browser/stream_handle.h b/content/public/browser/stream_handle.h
index b87402e543..94591d7d41 100644
--- a/content/public/browser/stream_handle.h
+++ b/content/public/browser/stream_handle.h
@@ -31,6 +31,9 @@ class CONTENT_EXPORT StreamHandle {
// Get the HTTP response headers associated with this Stream.
virtual scoped_refptr<net::HttpResponseHeaders> GetResponseHeaders() = 0;
+
+ // Add a callback which will be called when the Stream is closed.
+ virtual void AddCloseListener(const base::Closure& callback) = 0;
};
} // namespace content
diff --git a/content/public/browser/web_contents.cc b/content/public/browser/web_contents.cc
index d8547679ba..549e881c74 100644
--- a/content/public/browser/web_contents.cc
+++ b/content/public/browser/web_contents.cc
@@ -12,9 +12,11 @@ WebContents::CreateParams::CreateParams(BrowserContext* context)
: browser_context(context),
site_instance(NULL),
opener(NULL),
+ opener_suppressed(false),
routing_id(MSG_ROUTING_NONE),
main_frame_routing_id(MSG_ROUTING_NONE),
initially_hidden(false),
+ guest_instance_id(0),
context(NULL) {}
WebContents::CreateParams::CreateParams(
@@ -22,9 +24,14 @@ WebContents::CreateParams::CreateParams(
: browser_context(context),
site_instance(site),
opener(NULL),
+ opener_suppressed(false),
routing_id(MSG_ROUTING_NONE),
main_frame_routing_id(MSG_ROUTING_NONE),
initially_hidden(false),
+ guest_instance_id(0),
context(NULL) {}
+WebContents::CreateParams::~CreateParams() {
+}
+
} // namespace content
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index fd31c1af4e..a99beefc7c 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -30,6 +30,7 @@
#endif
namespace base {
+class DictionaryValue;
class TimeTicks;
}
@@ -82,6 +83,7 @@ class WebContents : public PageNavigator,
public:
struct CONTENT_EXPORT CreateParams {
explicit CreateParams(BrowserContext* context);
+ ~CreateParams();
CreateParams(BrowserContext* context, SiteInstance* site);
BrowserContext* browser_context;
@@ -91,7 +93,13 @@ class WebContents : public PageNavigator,
// privileged process.
SiteInstance* site_instance;
+ // The opener WebContents is the WebContents that initiated this request,
+ // if any.
WebContents* opener;
+
+ // If the opener is suppressed, then the new WebContents doesn't hold a
+ // reference to its opener.
+ bool opener_suppressed;
int routing_id;
int main_frame_routing_id;
@@ -101,6 +109,14 @@ class WebContents : public PageNavigator,
// True if the contents should be initially hidden.
bool initially_hidden;
+ // If this instance ID is non-zero then it indicates that this WebContents
+ // should behave as a guest.
+ int guest_instance_id;
+
+ // TODO(fsamuel): This is temporary. Remove this once all guests are created
+ // from the content embedder.
+ scoped_ptr<base::DictionaryValue> guest_extra_params;
+
// Used to specify the location context which display the new view should
// belong. This can be NULL if not needed.
gfx::NativeView context;
@@ -184,15 +200,6 @@ class WebContents : public PageNavigator,
// Gets the current RenderViewHost for this tab.
virtual RenderViewHost* GetRenderViewHost() const = 0;
- // Returns the WebContents embedding this WebContents, if any.
- // If this is a top-level WebContents then it returns NULL.
- virtual WebContents* GetEmbedderWebContents() const = 0;
-
- // Gets the instance ID of the current WebContents if it is embedded
- // within a BrowserPlugin. The instance ID of a WebContents uniquely
- // identifies it within its embedder WebContents.
- virtual int GetEmbeddedInstanceID() const = 0;
-
// Gets the current RenderViewHost's routing id. Returns
// MSG_ROUTING_NONE when there is no RenderViewHost.
virtual int GetRoutingID() const = 0;
@@ -248,25 +255,30 @@ class WebContents : public PageNavigator,
// returns the current SiteInstance.
virtual SiteInstance* GetPendingSiteInstance() const = 0;
- // Return whether this WebContents is loading a resource.
+ // Returns whether this WebContents is loading a resource.
virtual bool IsLoading() const = 0;
+ // Returns whether this WebContents is loading and and the load is to a
+ // different top-level document (rather than being a navigation within the
+ // same document). This being true implies that IsLoading() is also true.
+ virtual bool IsLoadingToDifferentDocument() const = 0;
+
// Returns whether this WebContents is waiting for a first-response for the
// main resource of the page.
virtual bool IsWaitingForResponse() const = 0;
- // Return the current load state and the URL associated with it.
+ // Returns the current load state and the URL associated with it.
virtual const net::LoadStateWithParam& GetLoadState() const = 0;
virtual const base::string16& GetLoadStateHost() const = 0;
- // Return the upload progress.
+ // Returns the upload progress.
virtual uint64 GetUploadSize() const = 0;
virtual uint64 GetUploadPosition() const = 0;
// Returns a set of the site URLs currently committed in this tab.
virtual std::set<GURL> GetSitesInTab() const = 0;
- // Return the character encoding of the page.
+ // Returns the character encoding of the page.
virtual const std::string& GetEncoding() const = 0;
// True if this is a secure page which displayed insecure content.
@@ -483,9 +495,6 @@ class WebContents : public PageNavigator,
virtual void SetClosedByUserGesture(bool value) = 0;
virtual bool GetClosedByUserGesture() const = 0;
- // Gets the zoom level for this tab.
- virtual double GetZoomLevel() const = 0;
-
// Gets the zoom percent for this tab.
virtual int GetZoomPercent(bool* enable_increment,
bool* enable_decrement) const = 0;
@@ -553,10 +562,6 @@ class WebContents : public PageNavigator,
// removed since we can then embed iframes in different processes.
virtual bool IsSubframe() const = 0;
- // Sets the zoom level for the current page and all BrowserPluginGuests
- // within the page.
- virtual void SetZoomLevel(double level) = 0;
-
// Finds text on a page.
virtual void Find(int request_id,
const base::string16& search_text,
diff --git a/content/public/browser/web_contents_delegate.cc b/content/public/browser/web_contents_delegate.cc
index 9a26e0f9a7..0028339ab6 100644
--- a/content/public/browser/web_contents_delegate.cc
+++ b/content/public/browser/web_contents_delegate.cc
@@ -73,7 +73,7 @@ int WebContentsDelegate::GetExtraRenderViewHeight() const {
void WebContentsDelegate::CanDownload(
RenderViewHost* render_view_host,
- int request_id,
+ const GURL& url,
const std::string& request_method,
const base::Callback<void(bool)>& callback) {
callback.Run(true);
diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h
index 0edb3bdcd9..34a1c07e2f 100644
--- a/content/public/browser/web_contents_delegate.h
+++ b/content/public/browser/web_contents_delegate.h
@@ -226,7 +226,7 @@ class CONTENT_EXPORT WebContentsDelegate {
// Asks the delegate if the given tab can download.
// Invoking the |callback| synchronously is OK.
virtual void CanDownload(RenderViewHost* render_view_host,
- int request_id,
+ const GURL& url,
const std::string& request_method,
const base::Callback<void(bool)>& callback);
@@ -377,7 +377,6 @@ class CONTENT_EXPORT WebContentsDelegate {
virtual void RegisterProtocolHandler(WebContents* web_contents,
const std::string& protocol,
const GURL& url,
- const base::string16& title,
bool user_gesture) {}
// Result of string search in the page. This includes the number of matches
diff --git a/content/public/browser/web_contents_observer.cc b/content/public/browser/web_contents_observer.cc
index a5700a71b6..3178b188bd 100644
--- a/content/public/browser/web_contents_observer.cc
+++ b/content/public/browser/web_contents_observer.cc
@@ -41,6 +41,12 @@ void WebContentsObserver::Observe(WebContents* web_contents) {
}
}
+bool WebContentsObserver::OnMessageReceived(
+ const IPC::Message& message,
+ RenderFrameHost* render_frame_host) {
+ return false;
+}
+
bool WebContentsObserver::OnMessageReceived(const IPC::Message& message) {
return false;
}
diff --git a/content/public/browser/web_contents_observer.h b/content/public/browser/web_contents_observer.h
index 23fe1b9227..da9e8239d6 100644
--- a/content/public/browser/web_contents_observer.h
+++ b/content/public/browser/web_contents_observer.h
@@ -331,6 +331,10 @@ class CONTENT_EXPORT WebContentsObserver : public IPC::Listener,
virtual void AccessibilityEventReceived(
const std::vector<AXEventNotificationDetails>& details) {}
+ // Invoked if an IPC message is coming from a specific RenderFrameHost.
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host);
+
// IPC::Listener implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
diff --git a/content/public/browser/web_ui.h b/content/public/browser/web_ui.h
index 9d13240f22..52ce114dcf 100644
--- a/content/public/browser/web_ui.h
+++ b/content/public/browser/web_ui.h
@@ -12,7 +12,6 @@
#include "base/strings/string16.h"
#include "content/common/content_export.h"
#include "content/public/common/page_transition_types.h"
-#include "ui/base/layout.h"
class GURL;
@@ -55,7 +54,7 @@ class CONTENT_EXPORT WebUI {
// Returns the device scale factor of the monitor that the renderer is on.
// Whenever possible, WebUI should push resources with this scale factor to
// Javascript.
- virtual ui::ScaleFactor GetDeviceScaleFactor() const = 0;
+ virtual float GetDeviceScaleFactor() const = 0;
// Gets a custom tab title provided by the Web UI. If there is no title
// override, the string will be empty which should trigger the default title
diff --git a/content/public/browser/zygote_host_linux.h b/content/public/browser/zygote_host_linux.h
index 77cc00b2fb..ebe5ee7387 100644
--- a/content/public/browser/zygote_host_linux.h
+++ b/content/public/browser/zygote_host_linux.h
@@ -26,9 +26,6 @@ class ZygoteHost {
// Returns the pid of the Zygote process.
virtual pid_t GetPid() const = 0;
- // Returns the pid of the Sandbox Helper process.
- virtual pid_t GetSandboxHelperPid() const = 0;
-
// Returns an int which is a bitmask of kSandboxLinux* values. Only valid
// after the first render has been forked.
virtual int GetSandboxStatus() const = 0;
diff --git a/content/public/child/request_peer.h b/content/public/child/request_peer.h
index ec354d8c1a..93143c5b4a 100644
--- a/content/public/child/request_peer.h
+++ b/content/public/child/request_peer.h
@@ -16,12 +16,10 @@ namespace base {
class TimeTicks;
}
-namespace webkit_glue {
-struct ResourceResponseInfo;
-}
-
namespace content {
+struct ResourceResponseInfo;
+
// This is implemented by our custom resource loader within content. The Peer
// and it's bridge should have identical lifetimes as they represent each end of
// a communication channel.
@@ -37,20 +35,16 @@ class CONTENT_EXPORT RequestPeer {
// Called when a redirect occurs. The implementation may return false to
// suppress the redirect. The given ResponseInfo provides complete
- // information about the redirect, and new_url is the URL that will be
- // loaded if this method returns true. If this method returns true, the
- // output parameter *has_new_first_party_for_cookies indicates whether the
- // output parameter *new_first_party_for_cookies contains the new URL that
- // should be consulted for the third-party cookie blocking policy.
+ // information about the redirect, and new_url is the URL that will be loaded
+ // if this method returns true. new_first_party_for_cookies is the new
+ // first-party URL for cookies should that have changed.
virtual bool OnReceivedRedirect(const GURL& new_url,
- const webkit_glue::ResourceResponseInfo& info,
- bool* has_new_first_party_for_cookies,
- GURL* new_first_party_for_cookies) = 0;
+ const GURL& new_first_party_for_cookies,
+ const ResourceResponseInfo& info) = 0;
// Called when response headers are available (after all redirects have
// been followed).
- virtual void OnReceivedResponse(
- const webkit_glue::ResourceResponseInfo& info) = 0;
+ virtual void OnReceivedResponse(const ResourceResponseInfo& info) = 0;
// Called when a chunk of response data is downloaded. This method may be
// called multiple times or not at all if an error occurs. This method is
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
new file mode 100644
index 0000000000..32fd84e09d
--- /dev/null
+++ b/content/public/common/BUILD.gn
@@ -0,0 +1,20 @@
+# 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.
+
+import("//content/common/common.gni")
+
+source_set("common") {
+ sources = rebase_path(content_common_gypi_values.public_common_sources,
+ ".", "//content")
+
+ configs += [
+ "//content:content_implementation",
+ ]
+
+ deps = [
+ "//content/common",
+ "//skia",
+ "//third_party/WebKit/public:blink_headers",
+ ]
+}
diff --git a/content/public/common/browser_plugin_permission_type.h b/content/public/common/browser_plugin_permission_type.h
deleted file mode 100644
index d046d162cf..0000000000
--- a/content/public/common/browser_plugin_permission_type.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_COMMON_BROWSER_PLUGIN_PERMISSION_TYPE_H_
-#define CONTENT_COMMON_BROWSER_PLUGIN_PERMISSION_TYPE_H_
-
-enum BrowserPluginPermissionType {
- // Unknown type of permission request.
- BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN,
-
- // New window requests.
- // Note: Even though new windows don't use the permission API, the new window
- // API is sufficiently similar that it's convenient to consider it a
- // permission type for code reuse.
- BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW,
-
- BROWSER_PLUGIN_PERMISSION_TYPE_CONTENT_END,
-};
-
-#endif // CONTENT_COMMON_BROWSER_PLUGIN_PERMISSION_TYPE_H_
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index a091c62da4..34c76a8d58 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -15,6 +15,7 @@
#include "content/public/common/ssl_status.h"
#include "content/public/common/webplugininfo.h"
#include "ipc/ipc_message_macros.h"
+#include "net/base/network_change_notifier.h"
#include "net/base/request_priority.h"
#include "third_party/WebKit/public/platform/WebPoint.h"
#include "third_party/WebKit/public/platform/WebRect.h"
@@ -28,7 +29,8 @@
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
IPC_ENUM_TRAITS(content::PageTransition) // Bitmask.
-
+IPC_ENUM_TRAITS_MAX_VALUE(net::NetworkChangeNotifier::ConnectionType,
+ net::NetworkChangeNotifier::CONNECTION_LAST)
IPC_ENUM_TRAITS_MAX_VALUE(content::ConsoleMessageLevel,
content::CONSOLE_MESSAGE_LEVEL_LAST)
IPC_ENUM_TRAITS_MAX_VALUE(content::SecurityStyle,
@@ -122,6 +124,7 @@ IPC_STRUCT_TRAITS_BEGIN(WebPreferences)
IPC_STRUCT_TRAITS_MEMBER(tabs_to_links)
IPC_STRUCT_TRAITS_MEMBER(hyperlink_auditing_enabled)
IPC_STRUCT_TRAITS_MEMBER(is_online)
+ IPC_STRUCT_TRAITS_MEMBER(connection_type)
IPC_STRUCT_TRAITS_MEMBER(allow_universal_access_from_file_urls)
IPC_STRUCT_TRAITS_MEMBER(allow_file_access_from_file_urls)
IPC_STRUCT_TRAITS_MEMBER(webaudio_enabled)
@@ -138,7 +141,6 @@ IPC_STRUCT_TRAITS_BEGIN(WebPreferences)
IPC_STRUCT_TRAITS_MEMBER(webgl_errors_to_console_enabled)
IPC_STRUCT_TRAITS_MEMBER(mock_scrollbars_enabled)
IPC_STRUCT_TRAITS_MEMBER(layer_squashing_enabled)
- IPC_STRUCT_TRAITS_MEMBER(threaded_html_parser)
IPC_STRUCT_TRAITS_MEMBER(asynchronous_spell_checking_enabled)
IPC_STRUCT_TRAITS_MEMBER(unified_textchecker_enabled)
IPC_STRUCT_TRAITS_MEMBER(force_compositing_mode)
@@ -163,7 +165,6 @@ IPC_STRUCT_TRAITS_BEGIN(WebPreferences)
IPC_STRUCT_TRAITS_MEMBER(device_supports_mouse)
IPC_STRUCT_TRAITS_MEMBER(touch_adjustment_enabled)
IPC_STRUCT_TRAITS_MEMBER(pointer_events_max_touch_points)
- IPC_STRUCT_TRAITS_MEMBER(fixed_position_creates_stacking_context)
IPC_STRUCT_TRAITS_MEMBER(sync_xhr_in_documents_enabled)
IPC_STRUCT_TRAITS_MEMBER(deferred_image_decoding_enabled)
IPC_STRUCT_TRAITS_MEMBER(should_respect_image_orientation)
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index 589f6943ef..6ff65e8562 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -149,12 +149,6 @@ const char kDisableFastTextAutosizing[] = "disable-fast-text-autosizing";
// Disable FileSystem API.
const char kDisableFileSystem[] = "disable-file-system";
-// Disables sending filters (SkImageFilter objects) between processes over IPC
-const char kDisableFiltersOverIPC[] = "disable-filters-over-ipc";
-
-const char kDisableFixedPositionCreatesStackingContext[]
- = "disable-fixed-position-creates-stacking-context";
-
// Disable 3D inside of flapper.
const char kDisableFlash3d[] = "disable-flash-3d";
@@ -346,9 +340,6 @@ const char kEnableLayerSquashing[] =
// Enable experimental container node culling.
const char kEnableContainerCulling[] = "enable-container-culling";
-// Turns on extremely verbose logging of accessibility events.
-const char kEnableAccessibilityLogging[] = "enable-accessibility-logging";
-
// Use a BeginFrame signal from browser to renderer to schedule rendering.
const char kEnableBeginFrameScheduling[] = "enable-begin-frame-scheduling";
@@ -402,9 +393,6 @@ const char kEnableFileCookies[] = "enable-file-cookies";
// Enable the fast text autosizing implementation.
const char kEnableFastTextAutosizing[] = "enable-fast-text-autosizing";
-const char kEnableFixedPositionCreatesStackingContext[]
- = "enable-fixed-position-creates-stacking-context";
-
// Enable Gesture Tap Highlight
const char kEnableGestureTapHighlight[] = "enable-gesture-tap-highlight";
@@ -433,6 +421,12 @@ const char kEnableDirectWrite[] = "enable-direct-write";
// Use high resolution timers for TimeTicks.
const char kEnableHighResolutionTime[] = "enable-high-resolution-time";
+
+// Enable the Win32K process mitigation policy for renderer processes which
+// prevents them from invoking user32 and gdi32 system calls which enter
+// the kernel. This is only supported on Windows 8 and beyond.
+const char kEnableWin32kRendererLockDown[]
+ = "enable_win32k_renderer_lockdown";
#endif
// Paint content on the compositor thread instead of the main thread.
@@ -448,9 +442,6 @@ const char kEnableLogging[] = "enable-logging";
// Enables the memory benchmarking extension
const char kEnableMemoryBenchmarking[] = "enable-memory-benchmarking";
-// Enables use of cache if offline, even if it's stale
-const char kEnableOfflineCacheAccess[] = "enable-offline-cache-access";
-
// Enable rasterizer that writes directly to GPU memory.
const char kEnableOneCopy[] = "enable-one-copy";
@@ -476,11 +467,6 @@ const char kEnablePreciseMemoryInfo[] = "enable-precise-memory-info";
// Enable caching of pre-parsed JS script data. See http://crbug.com/32407.
const char kEnablePreparsedJsCaching[] = "enable-preparsed-js-caching";
-// Enable privileged WebGL extensions; without this switch such extensions are
-// available only to Chrome extensions.
-const char kEnablePrivilegedWebGLExtensions[] =
- "enable-privileged-webgl-extensions";
-
// Enables the CSS multicol implementation that uses the regions implementation.
const char kEnableRegionBasedColumns[] =
"enable-region-based-columns";
@@ -574,6 +560,9 @@ const char kEnableWebAnimationsSVG[] = "enable-web-animations-svg";
// Enables WebGL extensions not yet approved by the community.
const char kEnableWebGLDraftExtensions[] = "enable-webgl-draft-extensions";
+// Enables WebGL rendering into a scanout buffer for overlay support.
+const char kEnableWebGLImageChromium[] = "enable-webgl-image-chromium";
+
// Enables Web MIDI API.
const char kEnableWebMIDI[] = "enable-web-midi";
@@ -885,9 +874,6 @@ extern const char kUIPrioritizeInGpuProcess[] =
// Overrides the preferred discardable memory implementation.
const char kUseDiscardableMemory[] = "use-discardable-memory";
-// Use fake device for MediaStream to replace actual camera and microphone.
-const char kUseFakeDeviceForMediaStream[] = "use-fake-device-for-media-stream";
-
// Bypass the media stream infobar by selecting the default device for media
// streams (e.g. WebRTC). Works with --use-fake-device-for-media-stream.
const char kUseFakeUIForMediaStream[] = "use-fake-ui-for-media-stream";
@@ -920,9 +906,6 @@ const char kValidateInputEventStream[] = "validate-input-event-stream";
// kWaitForDebugger flag passed on or not.
const char kWaitForDebuggerChildren[] = "wait-for-debugger-children";
-// Overrides the amount of shared memory the webgl command buffer allocates
-const char kWebGLCommandBufferSizeKb[] = "webgl-command-buffer-size-kb";
-
// Causes the process to run as a worker subprocess.
const char kWorkerProcess[] = "worker";
@@ -933,9 +916,9 @@ const char kZygoteCmdPrefix[] = "zygote-cmd-prefix";
const char kZygoteProcess[] = "zygote";
#if defined(ENABLE_WEBRTC)
-// Enables audio processing in a MediaStreamTrack. When this flag is on, AEC,
-// NS and AGC will be done per MediaStreamTrack instead of in PeerConnection.
-const char kEnableAudioTrackProcessing[] = "enable-audio-track-processing";
+// Disables audio processing in a MediaStreamTrack. When this flag is on, AEC,
+// NS and AGC will be done in PeerConnection instead of MediaStreamTrack.
+const char kDisableAudioTrackProcessing[] = "disable-audio-track-processing";
// Disables WebRTC device enumeration.
const char kDisableDeviceEnumeration[] = "disable-device-enumeration";
@@ -950,25 +933,15 @@ const char kDisableWebRtcEncryption[] = "disable-webrtc-encryption";
// Disables HW encode acceleration for WebRTC.
const char kDisableWebRtcHWEncoding[] = "disable-webrtc-hw-encoding";
-// Enables WebRTC to open TCP server sockets.
-const char kEnableWebRtcTcpServerSocket[] = "enable-webrtc-tcp-server-socket";
-
// Enables VP8 HW encode acceleration for WebRTC.
const char kEnableWebRtcHWVp8Encoding[] = "enable-webrtc-hw-vp8-encoding";
#endif
#if defined(OS_ANDROID)
-// Disable user gesture requirement for the media element to enter fullscreen.
-const char kDisableGestureRequirementForMediaFullscreen[] =
- "disable-gesture-requirement-for-media-fullscreen";
-
// Disable user gesture requirement for media playback.
const char kDisableGestureRequirementForMediaPlayback[] =
"disable-gesture-requirement-for-media-playback";
-// Disable history logging for media elements.
-const char kDisableMediaHistoryLogging[] = "disable-media-history";
-
// Disable the click delay by sending click events during double tap.
const char kDisableClickDelay[] = "disable-click-delay";
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index c8c97bca86..c52326f800 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -52,8 +52,6 @@ CONTENT_EXPORT extern const char kDisableEmbeddedSharedWorker[];
CONTENT_EXPORT extern const char kDisableExperimentalWebGL[];
CONTENT_EXPORT extern const char kDisableFastTextAutosizing[];
CONTENT_EXPORT extern const char kDisableFileSystem[];
-CONTENT_EXPORT extern const char kDisableFiltersOverIPC[];
-CONTENT_EXPORT extern const char kDisableFixedPositionCreatesStackingContext[];
CONTENT_EXPORT extern const char kDisableFlash3d[];
CONTENT_EXPORT extern const char kDisableFlashStage3d[];
CONTENT_EXPORT extern const char kDisableGestureTapHighlight[];
@@ -105,7 +103,6 @@ CONTENT_EXPORT extern const char kEnableAcceleratedFixedRootBackground[];
CONTENT_EXPORT extern const char kEnableAcceleratedOverflowScroll[];
CONTENT_EXPORT extern const char kEnableLayerSquashing[];
CONTENT_EXPORT extern const char kEnableContainerCulling[];
-extern const char kEnableAccessibilityLogging[];
CONTENT_EXPORT extern const char kEnableBeginFrameScheduling[];
CONTENT_EXPORT extern const char kEnableCompositingForFixedPosition[];
CONTENT_EXPORT extern const char kEnableCompositingForTransition[];
@@ -118,7 +115,6 @@ CONTENT_EXPORT extern const char kEnableExperimentalCanvasFeatures[];
CONTENT_EXPORT extern const char kEnableExperimentalWebPlatformFeatures[];
CONTENT_EXPORT extern const char kEnableFastTextAutosizing[];
CONTENT_EXPORT extern const char kEnableFileCookies[];
-CONTENT_EXPORT extern const char kEnableFixedPositionCreatesStackingContext[];
CONTENT_EXPORT extern const char kEnableGestureTapHighlight[];
extern const char kEnableGpuClientTracing[];
CONTENT_EXPORT extern const char kEnableGpuRasterization[];
@@ -127,6 +123,9 @@ CONTENT_EXPORT extern const char kEnableHighDpiCompositingForFixedPosition[];
#if defined(OS_WIN)
CONTENT_EXPORT extern const char kDisableLegacyIntermediateWindow[];
CONTENT_EXPORT extern const char kEnableDirectWrite[];
+// This switch will be removed when we enable the win32K lockdown process
+// mitigation.
+CONTENT_EXPORT extern const char kEnableWin32kRendererLockDown[];
CONTENT_EXPORT extern const char kEnableHighResolutionTime[];
#endif
CONTENT_EXPORT extern const char kEnableImplSidePainting[];
@@ -134,7 +133,6 @@ CONTENT_EXPORT extern const char kEnableInbandTextTracks[];
CONTENT_EXPORT extern const char kEnableLCDText[];
CONTENT_EXPORT extern const char kEnableLogging[];
extern const char kEnableMemoryBenchmarking[];
-CONTENT_EXPORT extern const char kEnableOfflineCacheAccess[];
CONTENT_EXPORT extern const char kEnableOneCopy[];
CONTENT_EXPORT extern const char kEnableOverlayFullscreenVideo[];
CONTENT_EXPORT extern const char kDisableOverlayFullscreenVideoSubtitle[];
@@ -142,7 +140,6 @@ CONTENT_EXPORT extern const char kEnableOverscrollNotifications[];
CONTENT_EXPORT extern const char kEnablePinch[];
CONTENT_EXPORT extern const char kEnablePreciseMemoryInfo[];
extern const char kEnablePreparsedJsCaching[];
-CONTENT_EXPORT extern const char kEnablePrivilegedWebGLExtensions[];
CONTENT_EXPORT extern const char kEnableRegionBasedColumns[];
CONTENT_EXPORT extern const char kEnableRepaintAfterLayout[];
CONTENT_EXPORT extern const char kEnableSandboxLogging[];
@@ -166,6 +163,7 @@ CONTENT_EXPORT extern const char kMainFrameResizesAreOrientationChanges[];
CONTENT_EXPORT extern const char kEnableVtune[];
extern const char kEnableWebAnimationsSVG[];
CONTENT_EXPORT extern const char kEnableWebGLDraftExtensions[];
+CONTENT_EXPORT extern const char kEnableWebGLImageChromium[];
CONTENT_EXPORT extern const char kEnableWebMIDI[];
CONTENT_EXPORT extern const char kEnableZeroCopy[];
CONTENT_EXPORT extern const char kExtraPluginDir[];
@@ -247,7 +245,6 @@ extern const char kTraceStartupDuration[];
extern const char kTraceStartupFile[];
CONTENT_EXPORT extern const char kUIPrioritizeInGpuProcess[];
CONTENT_EXPORT extern const char kUseDiscardableMemory[];
-CONTENT_EXPORT extern const char kUseFakeDeviceForMediaStream[];
CONTENT_EXPORT extern const char kUseFakeUIForMediaStream[];
CONTENT_EXPORT extern const char kUseMobileUserAgent[];
extern const char kUtilityCmdPrefix[];
@@ -257,25 +254,21 @@ CONTENT_EXPORT extern const char kUtilityProcessEnableMDns[];
CONTENT_EXPORT extern const char kUtilityProcessRunningElevated[];
CONTENT_EXPORT extern const char kValidateInputEventStream[];
CONTENT_EXPORT extern const char kWaitForDebuggerChildren[];
-CONTENT_EXPORT extern const char kWebGLCommandBufferSizeKb[];
CONTENT_EXPORT extern const char kWorkerProcess[];
CONTENT_EXPORT extern const char kZygoteCmdPrefix[];
CONTENT_EXPORT extern const char kZygoteProcess[];
#if defined(ENABLE_WEBRTC)
-CONTENT_EXPORT extern const char kEnableAudioTrackProcessing[];
+CONTENT_EXPORT extern const char kDisableAudioTrackProcessing[];
CONTENT_EXPORT extern const char kDisableDeviceEnumeration[];
CONTENT_EXPORT extern const char kDisableWebRtcHWDecoding[];
CONTENT_EXPORT extern const char kDisableWebRtcEncryption[];
CONTENT_EXPORT extern const char kDisableWebRtcHWEncoding[];
-extern const char kEnableWebRtcTcpServerSocket[];
CONTENT_EXPORT extern const char kEnableWebRtcHWVp8Encoding[];
#endif
#if defined(OS_ANDROID)
-CONTENT_EXPORT extern const char kDisableGestureRequirementForMediaFullscreen[];
CONTENT_EXPORT extern const char kDisableGestureRequirementForMediaPlayback[];
-extern const char kDisableMediaHistoryLogging[];
CONTENT_EXPORT extern const char kDisableClickDelay[];
CONTENT_EXPORT extern const char kDisableOverscrollEdgeEffect[];
CONTENT_EXPORT extern const char kDisableWebRTC[];
diff --git a/content/public/common/page_state.cc b/content/public/common/page_state.cc
index 3cf1659bb8..9d100d31b6 100644
--- a/content/public/common/page_state.cc
+++ b/content/public/common/page_state.cc
@@ -42,6 +42,7 @@ void RecursivelyRemovePasswordData(ExplodedFrameState* state) {
void RecursivelyRemoveScrollOffset(ExplodedFrameState* state) {
state->scroll_offset = gfx::Point();
+ state->pinch_viewport_scroll_offset = gfx::PointF();
}
void RecursivelyRemoveReferrer(ExplodedFrameState* state) {
diff --git a/content/public/common/resource_response.h b/content/public/common/resource_response.h
index 829a1eae19..a9a6addaac 100644
--- a/content/public/common/resource_response.h
+++ b/content/public/common/resource_response.h
@@ -12,14 +12,14 @@
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
+#include "content/public/common/resource_response_info.h"
#include "net/url_request/url_request_status.h"
#include "url/gurl.h"
-#include "webkit/common/resource_response_info.h"
namespace content {
// Parameters for a resource response header.
-struct ResourceResponseHead : webkit_glue::ResourceResponseInfo {
+struct ResourceResponseHead : ResourceResponseInfo {
// The response error_code.
int error_code;
// TimeTicks::Now() when the browser received the request from the renderer.
diff --git a/content/public/common/resource_response_info.cc b/content/public/common/resource_response_info.cc
new file mode 100644
index 0000000000..48288413b0
--- /dev/null
+++ b/content/public/common/resource_response_info.cc
@@ -0,0 +1,26 @@
+// 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 "content/public/common/resource_response_info.h"
+
+#include "net/http/http_response_headers.h"
+#include "webkit/common/appcache/appcache_interfaces.h"
+
+namespace content {
+
+ResourceResponseInfo::ResourceResponseInfo()
+ : content_length(-1),
+ encoded_data_length(-1),
+ appcache_id(appcache::kNoCacheId),
+ was_fetched_via_spdy(false),
+ was_npn_negotiated(false),
+ was_alternate_protocol_available(false),
+ connection_info(net::HttpResponseInfo::CONNECTION_INFO_UNKNOWN),
+ was_fetched_via_proxy(false) {
+}
+
+ResourceResponseInfo::~ResourceResponseInfo() {
+}
+
+} // namespace content
diff --git a/content/public/common/resource_response_info.h b/content/public/common/resource_response_info.h
new file mode 100644
index 0000000000..a4231e8b60
--- /dev/null
+++ b/content/public/common/resource_response_info.h
@@ -0,0 +1,104 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
+#define CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/files/file_path.h"
+#include "base/memory/ref_counted.h"
+#include "base/time/time.h"
+#include "content/common/content_export.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/load_timing_info.h"
+#include "net/http/http_response_info.h"
+#include "url/gurl.h"
+#include "webkit/common/resource_devtools_info.h"
+
+namespace content {
+
+struct ResourceResponseInfo {
+ CONTENT_EXPORT ResourceResponseInfo();
+ CONTENT_EXPORT ~ResourceResponseInfo();
+
+ // The time at which the request was made that resulted in this response.
+ // For cached responses, this time could be "far" in the past.
+ base::Time request_time;
+
+ // The time at which the response headers were received. For cached
+ // responses, this time could be "far" in the past.
+ base::Time response_time;
+
+ // The response headers or NULL if the URL type does not support headers.
+ scoped_refptr<net::HttpResponseHeaders> headers;
+
+ // The mime type of the response. This may be a derived value.
+ std::string mime_type;
+
+ // The character encoding of the response or none if not applicable to the
+ // response's mime type. This may be a derived value.
+ std::string charset;
+
+ // An opaque string carrying security information pertaining to this
+ // response. This may include information about the SSL connection used.
+ std::string security_info;
+
+ // Content length if available. -1 if not available
+ int64 content_length;
+
+ // Length of the encoded data transferred over the network. In case there is
+ // no data, contains -1.
+ int64 encoded_data_length;
+
+ // The appcache this response was loaded from, or kNoCacheId.
+ int64 appcache_id;
+
+ // The manifest url of the appcache this response was loaded from.
+ // Note: this value is only populated for main resource requests.
+ GURL appcache_manifest_url;
+
+ // Detailed timing information used by the WebTiming, HAR and Developer
+ // Tools. Includes socket ID and socket reuse information.
+ net::LoadTimingInfo load_timing;
+
+ // Actual request and response headers, as obtained from the network stack.
+ // Only present if request had LOAD_REPORT_RAW_HEADERS in load_flags, and
+ // requesting renderer had CanReadRowCookies permission.
+ scoped_refptr<webkit_glue::ResourceDevToolsInfo> devtools_info;
+
+ // The path to a file that will contain the response body. It may only
+ // contain a portion of the response body at the time that the ResponseInfo
+ // becomes available.
+ base::FilePath download_file_path;
+
+ // True if the response was delivered using SPDY.
+ bool was_fetched_via_spdy;
+
+ // True if the response was delivered after NPN is negotiated.
+ bool was_npn_negotiated;
+
+ // True if response could use alternate protocol. However, browser will
+ // ignore the alternate protocol when spdy is not enabled on browser side.
+ bool was_alternate_protocol_available;
+
+ // Information about the type of connection used to fetch this response.
+ net::HttpResponseInfo::ConnectionInfo connection_info;
+
+ // True if the response was fetched via an explicit proxy (as opposed to a
+ // transparent proxy). The proxy could be any type of proxy, HTTP or SOCKS.
+ // Note: we cannot tell if a transparent proxy may have been involved.
+ bool was_fetched_via_proxy;
+
+ // NPN protocol negotiated with the server.
+ std::string npn_negotiated_protocol;
+
+ // Remote address of the socket which fetched this resource.
+ net::HostPortPair socket_address;
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_COMMON_RESOURCE_RESPONSE_INFO_H_
diff --git a/content/public/common/url_constants.cc b/content/public/common/url_constants.cc
index 278cb7be7f..f364da8e5e 100644
--- a/content/public/common/url_constants.cc
+++ b/content/public/common/url_constants.cc
@@ -7,19 +7,12 @@
namespace content {
const char kAboutScheme[] = "about";
-const char kBlobScheme[] = "blob";
// Before adding new chrome schemes please check with security@chromium.org.
// There are security implications associated with introducing new schemes.
const char kChromeDevToolsScheme[] = "chrome-devtools";
const char kChromeUIScheme[] = "chrome";
-const char kDataScheme[] = "data";
-const char kFileScheme[] = "file";
-const char kFileSystemScheme[] = "filesystem";
-const char kFtpScheme[] = "ftp";
const char kGuestScheme[] = "chrome-guest";
-const char kJavaScriptScheme[] = "javascript";
-const char kMailToScheme[] = "mailto";
const char kMetadataScheme[] = "metadata";
const char kSwappedOutScheme[] = "swappedout";
const char kViewSourceScheme[] = "view-source";
@@ -50,6 +43,8 @@ const char kChromeUIHangURL[] = "chrome://hang";
const char kChromeUIKillURL[] = "chrome://kill";
const char kChromeUIPpapiFlashCrashURL[] = "chrome://ppapiflashcrash";
const char kChromeUIPpapiFlashHangURL[] = "chrome://ppapiflashhang";
+const char kChromeUIServiceWorkerInternalsURL[] =
+ "chrome://serviceworker-internals";
const char kStandardSchemeSeparator[] = "://";
diff --git a/content/public/common/url_constants.h b/content/public/common/url_constants.h
index f2f7078629..a9e01a6005 100644
--- a/content/public/common/url_constants.h
+++ b/content/public/common/url_constants.h
@@ -16,16 +16,9 @@ namespace content {
// TODO(jam): some of these don't below in the content layer, but are accessed
// from there.
CONTENT_EXPORT extern const char kAboutScheme[];
-CONTENT_EXPORT extern const char kBlobScheme[];
CONTENT_EXPORT extern const char kChromeDevToolsScheme[];
CONTENT_EXPORT extern const char kChromeUIScheme[]; // Used for WebUIs.
-CONTENT_EXPORT extern const char kDataScheme[];
-CONTENT_EXPORT extern const char kFileScheme[];
-CONTENT_EXPORT extern const char kFileSystemScheme[];
-CONTENT_EXPORT extern const char kFtpScheme[];
CONTENT_EXPORT extern const char kGuestScheme[];
-CONTENT_EXPORT extern const char kJavaScriptScheme[];
-CONTENT_EXPORT extern const char kMailToScheme[];
CONTENT_EXPORT extern const char kMetadataScheme[];
CONTENT_EXPORT extern const char kSwappedOutScheme[];
CONTENT_EXPORT extern const char kViewSourceScheme[];
@@ -58,6 +51,7 @@ CONTENT_EXPORT extern const char kChromeUIHangURL[];
CONTENT_EXPORT extern const char kChromeUIKillURL[];
CONTENT_EXPORT extern const char kChromeUIPpapiFlashCrashURL[];
CONTENT_EXPORT extern const char kChromeUIPpapiFlashHangURL[];
+CONTENT_EXPORT extern const char kChromeUIServiceWorkerInternalsURL[];
// Used to separate a standard scheme and the hostname: "://".
CONTENT_EXPORT extern const char kStandardSchemeSeparator[];
diff --git a/content/public/common/zygote_fork_delegate_linux.h b/content/public/common/zygote_fork_delegate_linux.h
index 66f99cd13c..2f2f0b2a55 100644
--- a/content/public/common/zygote_fork_delegate_linux.h
+++ b/content/public/common/zygote_fork_delegate_linux.h
@@ -33,8 +33,10 @@ class ZygoteForkDelegate {
// layer-1 sandbox such as the setuid sandbox.
virtual void Init(int sandboxdesc, bool enable_layer1_sandbox) = 0;
- // After Init, supply a UMA_HISTOGRAM_ENUMERATION the delegate
- // would like to supply on the first fork.
+ // After Init, supply a UMA_HISTOGRAM_ENUMERATION the delegate would like
+ // reported to the browser process. (Note: Because these reports are
+ // piggy-backed onto fork responses that don't otherwise contain UMA reports,
+ // this method may not be called until much later.)
virtual void InitialUMA(std::string* uma_name,
int* uma_sample,
int* uma_boundary_value) = 0;
diff --git a/content/public/renderer/BUILD.gn b/content/public/renderer/BUILD.gn
new file mode 100644
index 0000000000..c5441796fd
--- /dev/null
+++ b/content/public/renderer/BUILD.gn
@@ -0,0 +1,30 @@
+# 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.
+
+import("//build/config/features.gni")
+import("//content/renderer/renderer.gni")
+
+source_set("renderer") {
+ sources = rebase_path(content_renderer_gypi_values.public_renderer_sources,
+ ".", "//content")
+
+ configs += [
+ "//content:content_implementation",
+ "//content:libjingle_stub_config",
+ "//content:v8_stub_config",
+ "//content:widevine_stub_config",
+ ]
+
+ deps = [
+ "//content/renderer",
+ "//skia",
+ "//third_party/WebKit/public:blink_headers",
+ ]
+
+ if (enable_webrtc) {
+ sources += rebase_path(
+ content_renderer_gypi_values.public_renderer_webrtc_sources,
+ ".", "//content")
+ }
+}
diff --git a/content/public/renderer/media_stream_video_sink.cc b/content/public/renderer/media_stream_video_sink.cc
index c658036220..af874e2907 100644
--- a/content/public/renderer/media_stream_video_sink.cc
+++ b/content/public/renderer/media_stream_video_sink.cc
@@ -12,11 +12,12 @@ namespace content {
void MediaStreamVideoSink::AddToVideoTrack(
MediaStreamVideoSink* sink,
+ const VideoSinkDeliverFrameCB& callback,
const blink::WebMediaStreamTrack& track) {
DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, track.source().type());
MediaStreamVideoTrack* video_track =
static_cast<MediaStreamVideoTrack*>(track.extraData());
- video_track->AddSink(sink);
+ video_track->AddSink(sink, callback);
}
void MediaStreamVideoSink::RemoveFromVideoTrack(
diff --git a/content/public/renderer/media_stream_video_sink.h b/content/public/renderer/media_stream_video_sink.h
index 48a37199b5..663f3a86f0 100644
--- a/content/public/renderer/media_stream_video_sink.h
+++ b/content/public/renderer/media_stream_video_sink.h
@@ -5,12 +5,14 @@
#ifndef CONTENT_PUBLIC_RENDERER_MEDIA_STREAM_VIDEO_SINK_H_
#define CONTENT_PUBLIC_RENDERER_MEDIA_STREAM_VIDEO_SINK_H_
+#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
#include "content/public/renderer/media_stream_sink.h"
namespace media {
+class VideoCaptureFormat;
class VideoFrame;
}
@@ -20,6 +22,11 @@ class WebMediaStreamTrack;
namespace content {
+typedef base::Callback<
+ void(const scoped_refptr<media::VideoFrame>&,
+ const media::VideoCaptureFormat&)>
+ VideoSinkDeliverFrameCB;
+
// MediaStreamVideoSink is an interface used for receiving video frames from a
// Video Stream Track or a Video Source.
// http://dev.w3.org/2011/webrtc/editor/getusermedia.html
@@ -29,14 +36,19 @@ class CONTENT_EXPORT MediaStreamVideoSink : public MediaStreamSink {
// An implementation of MediaStreamVideoSink should call AddToVideoTrack when
// it is ready to receive data from a video track. Before the implementation
// is destroyed, RemoveFromVideoTrack must be called.
+ //
// Calls to these methods must be done on the main render thread.
+ // Note that |callback| for frame delivery happens on the IO thread.
+ //
+ // Calling RemoveFromVideoTrack also not stop frame delivery through the
+ // callback immediately because it may happen on another thread.
+ // The added callback will be reset on the render thread.
static void AddToVideoTrack(MediaStreamVideoSink* sink,
+ const VideoSinkDeliverFrameCB& callback,
const blink::WebMediaStreamTrack& track);
static void RemoveFromVideoTrack(MediaStreamVideoSink* sink,
const blink::WebMediaStreamTrack& track);
- virtual void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame) = 0;
-
protected:
virtual ~MediaStreamVideoSink() {}
};
diff --git a/content/public/renderer/pepper_plugin_instance.h b/content/public/renderer/pepper_plugin_instance.h
index 88d9026d6d..d397fbc2ad 100644
--- a/content/public/renderer/pepper_plugin_instance.h
+++ b/content/public/renderer/pepper_plugin_instance.h
@@ -114,6 +114,9 @@ class PepperPluginInstance {
// Sets the text input type for this plugin.
virtual void SetTextInputType(ui::TextInputType type) = 0;
+
+ // Posts a message to the JavaScript object for this instance.
+ virtual void PostMessageToJavaScript(PP_Var message) = 0;
};
} // namespace content
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h
index 5b6b3d12e3..ac836bb809 100644
--- a/content/public/renderer/render_frame_observer.h
+++ b/content/public/renderer/render_frame_observer.h
@@ -39,6 +39,10 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
// Called when a load is explicitly stopped by the user or browser.
virtual void OnStop() {}
+ // Called when the RenderFrame visiblity is changed.
+ virtual void WasHidden() {}
+ virtual void WasShown() {}
+
// These match the Blink API notifications
virtual void DidCommitProvisionalLoad(bool is_new_navigation) {}
virtual void DidStartProvisionalLoad() {}
@@ -47,7 +51,8 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
virtual void DidFinishDocumentLoad() {}
virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context,
int world_id) {}
- virtual void DidClearWindowObject(int world_id) {}
+ virtual void DidClearWindowObject() {}
+ virtual void DidChangeName(const base::string16& name) {}
// Called when we receive a console message from Blink for which we requested
// extra details (like the stack trace). |message| is the error message,
@@ -61,6 +66,9 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
int32 line_number,
int32 severity_level) {}
+ // Called when a compositor frame has committed.
+ virtual void DidCommitCompositorFrame() {}
+
// IPC::Listener implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
diff --git a/content/public/renderer/render_view_observer.h b/content/public/renderer/render_view_observer.h
index 69ae18c61b..3ef3057d42 100644
--- a/content/public/renderer/render_view_observer.h
+++ b/content/public/renderer/render_view_observer.h
@@ -61,8 +61,7 @@ class CONTENT_EXPORT RenderViewObserver : public IPC::Listener,
const blink::WebURLError& error) {}
virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
bool is_new_navigation) {}
- virtual void DidClearWindowObject(blink::WebLocalFrame* frame, int world_id) {
- }
+ virtual void DidClearWindowObject(blink::WebLocalFrame* frame) {}
virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) {}
virtual void FrameCreated(blink::WebLocalFrame* parent,
blink::WebFrame* frame) {}
diff --git a/content/public/renderer/renderer_ppapi_host.h b/content/public/renderer/renderer_ppapi_host.h
index 4e253e2e2c..6c843dc30f 100644
--- a/content/public/renderer/renderer_ppapi_host.h
+++ b/content/public/renderer/renderer_ppapi_host.h
@@ -123,6 +123,23 @@ class RendererPpapiHost {
// Returns true if the plugin is running in process.
virtual bool IsRunningInProcess() const = 0;
+ virtual std::string GetPluginName() const = 0;
+
+ // Used by the embedder to inform this RendererPpapiHost that the associated
+ // plugin module is a host for "external plugins."
+ //
+ // An embedder may, at the time a plugin module is created, configure it to
+ // be a host for external plugins. Instances of such plugins go through two
+ // two stages of initialization; the first stage initializes a host plugin
+ // instance, which then loads and initializes a child plugin which takes
+ // over control. These are treated as one Pepper Instance, because despite the
+ // two-stage initialization process, the host and child appear to blink as
+ // one plugin instance.
+ //
+ // The host plugin appears as an in-process plugin, while we interact with the
+ // child plugin via the Pepper proxy.
+ virtual void SetToExternalPluginHost() = 0;
+
// There are times when the renderer needs to create a ResourceHost in the
// browser. This function does so asynchronously. |nested_msgs| is a list of
// resource host creation messages and |instance| is the PP_Instance which
diff --git a/content/public/renderer/v8_value_converter.h b/content/public/renderer/v8_value_converter.h
index 725980e2c7..f3fd126931 100644
--- a/content/public/renderer/v8_value_converter.h
+++ b/content/public/renderer/v8_value_converter.h
@@ -55,7 +55,8 @@ class CONTENT_EXPORT V8ValueConverter {
// behavior. v8::Object is passed as ArrayBuffer and ArrayBufferView
// classes are siblings.
virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
- base::Value** out) const;
+ base::Value** out,
+ v8::Isolate* isolate) const;
// If false is returned, V8ValueConverter proceeds with the default
// behavior. This allows to intercept "non-finite" values and do something
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index 60b2b0eb50..fa2c79996d 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -14,7 +14,9 @@
#include "base/synchronization/waitable_event.h"
#include "base/test/test_timeouts.h"
#include "base/values.h"
+#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/web_contents/web_contents_view.h"
+#include "content/common/input/synthetic_web_input_event_builders.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/dom_operation_notification_details.h"
#include "content/public/browser/notification_service.h"
@@ -33,6 +35,7 @@
#include "net/url_request/url_request_context_getter.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/events/gestures/gesture_configuration.h"
#include "ui/events/keycodes/dom4/keycode_converter.h"
namespace content {
@@ -256,6 +259,23 @@ void SimulateMouseEvent(WebContents* web_contents,
web_contents->GetRenderViewHost()->ForwardMouseEvent(mouse_event);
}
+void SimulateTapAt(WebContents* web_contents, const gfx::Point& point) {
+ const double kTapDurationSeconds =
+ 0.5 * (ui::GestureConfiguration::
+ min_touch_down_duration_in_seconds_for_click() +
+ ui::GestureConfiguration::
+ max_touch_down_duration_in_seconds_for_click());
+ SyntheticWebTouchEvent touch;
+ touch.timeStampSeconds = 0;
+ touch.PressPoint(point.x(), point.y());
+ RenderWidgetHostImpl* widget_host =
+ RenderWidgetHostImpl::From(web_contents->GetRenderViewHost());
+ widget_host->ForwardTouchEvent(touch);
+ touch.timeStampSeconds = kTapDurationSeconds;
+ touch.ReleasePoint(0);
+ widget_host->ForwardTouchEvent(touch);
+}
+
void SimulateKeyPress(WebContents* web_contents,
ui::KeyboardCode key_code,
bool control,
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 85a81e3121..b074fb4ef2 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -78,6 +78,9 @@ void SimulateMouseEvent(WebContents* web_contents,
blink::WebInputEvent::Type type,
const gfx::Point& point);
+// Taps the screen at |point|.
+void SimulateTapAt(WebContents* web_contents, const gfx::Point& point);
+
// Sends a key press asynchronously.
// The native code of the key event will be set to InvalidNativeKeycode().
// |key_code| alone is good enough for scenarios that only need the char
diff --git a/content/public/test/content_browser_test.cc b/content/public/test/content_browser_test.cc
index 8d26969a52..29c881577c 100644
--- a/content/public/test/content_browser_test.cc
+++ b/content/public/test/content_browser_test.cc
@@ -29,7 +29,7 @@
#include "base/mac/scoped_nsautorelease_pool.h"
#endif
-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(USE_X11)
+#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
#include "ui/base/ime/input_method_initializer.h"
#endif
@@ -91,7 +91,7 @@ void ContentBrowserTest::SetUp() {
#endif
// LinuxInputMethodContextFactory has to be initialized.
-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(USE_X11)
+#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
ui::InitializeInputMethodForTesting();
#endif
diff --git a/content/public/test/content_browser_test_utils.cc b/content/public/test/content_browser_test_utils.cc
index d9448f0fc4..633e013947 100644
--- a/content/public/test/content_browser_test_utils.cc
+++ b/content/public/test/content_browser_test_utils.cc
@@ -8,6 +8,7 @@
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/run_loop.h"
+#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/notification_source.h"
#include "content/public/browser/web_contents.h"
@@ -91,4 +92,57 @@ void ShellAddedObserver::ShellCreated(Shell* shell) {
runner_->QuitClosure().Run();
}
+class RenderViewCreatedObserver : public WebContentsObserver {
+ public:
+ RenderViewCreatedObserver(WebContents* web_contents)
+ : WebContentsObserver(web_contents),
+ render_view_created_called_(false) {
+ }
+
+ // WebContentsObserver:
+ virtual void RenderViewCreated(RenderViewHost* rvh) OVERRIDE {
+ render_view_created_called_ = true;
+ }
+
+ bool render_view_created_called_;
+};
+
+WebContentsAddedObserver::WebContentsAddedObserver()
+ : web_contents_created_callback_(
+ base::Bind(
+ &WebContentsAddedObserver::WebContentsCreated,
+ base::Unretained(this))),
+ web_contents_(NULL) {
+ WebContentsImpl::AddCreatedCallback(web_contents_created_callback_);
+}
+
+WebContentsAddedObserver::~WebContentsAddedObserver() {
+ WebContentsImpl::RemoveCreatedCallback(web_contents_created_callback_);
+}
+
+void WebContentsAddedObserver::WebContentsCreated(WebContents* web_contents) {
+ DCHECK(!web_contents_);
+ web_contents_ = web_contents;
+ child_observer_.reset(new RenderViewCreatedObserver(web_contents));
+
+ if (runner_.get())
+ runner_->QuitClosure().Run();
+}
+
+WebContents* WebContentsAddedObserver::GetWebContents() {
+ if (web_contents_)
+ return web_contents_;
+
+ runner_ = new MessageLoopRunner();
+ runner_->Run();
+ return web_contents_;
+}
+
+bool WebContentsAddedObserver::RenderViewCreatedCalled() {
+ if (child_observer_)
+ return child_observer_->render_view_created_called_;
+
+ return false;
+}
+
} // namespace content
diff --git a/content/public/test/content_browser_test_utils.h b/content/public/test/content_browser_test_utils.h
index 8c6d7bdc36..e0b0690b35 100644
--- a/content/public/test/content_browser_test_utils.h
+++ b/content/public/test/content_browser_test_utils.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_TEST_CONTENT_BROWSER_TEST_UTILS_H_
#define CONTENT_PUBLIC_TEST_CONTENT_BROWSER_TEST_UTILS_H_
+#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "ui/gfx/native_widget_types.h"
#include "url/gurl.h"
@@ -25,7 +26,9 @@ class Rect;
namespace content {
class MessageLoopRunner;
+class RenderViewCreatedObserver;
class Shell;
+class WebContents;
// Generate the file path for testing a particular test.
// The file for the tests is all located in
@@ -76,6 +79,33 @@ class ShellAddedObserver {
DISALLOW_COPY_AND_ASSIGN(ShellAddedObserver);
};
+// Used to wait for a new WebContents to be created. Instantiate this object
+// before the operation that will create the window.
+class WebContentsAddedObserver {
+ public:
+ WebContentsAddedObserver();
+ ~WebContentsAddedObserver();
+
+ // Will run a message loop to wait for the new window if it hasn't been
+ // created since the constructor
+ WebContents* GetWebContents();
+
+ // Will tell whether RenderViewCreated Callback has invoked
+ bool RenderViewCreatedCalled();
+
+ base::Callback<void(WebContents*)> web_contents_created_callback_;
+
+ private:
+ void WebContentsCreated(WebContents* web_contents);
+
+ // Callback invoked on WebContents creation.
+ WebContents* web_contents_;
+ scoped_ptr<RenderViewCreatedObserver> child_observer_;
+ scoped_refptr<MessageLoopRunner> runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebContentsAddedObserver);
+};
+
#if defined OS_MACOSX
void SetWindowBounds(gfx::NativeWindow window, const gfx::Rect& bounds);
#endif
diff --git a/content/public/test/javascript_test_observer.cc b/content/public/test/javascript_test_observer.cc
new file mode 100644
index 0000000000..4aa17af74b
--- /dev/null
+++ b/content/public/test/javascript_test_observer.cc
@@ -0,0 +1,92 @@
+// 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 "content/public/test/javascript_test_observer.h"
+
+#include "content/public/browser/dom_operation_notification_details.h"
+#include "content/public/browser/notification_types.h"
+#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_utils.h"
+
+namespace content {
+
+TestMessageHandler::TestMessageHandler() : ok_(true) {
+}
+
+TestMessageHandler::~TestMessageHandler() {
+}
+
+void TestMessageHandler::SetError(const std::string& message) {
+ ok_ = false;
+ error_message_ = message;
+}
+
+void TestMessageHandler::Reset() {
+ ok_ = true;
+ error_message_.clear();
+}
+
+JavascriptTestObserver::JavascriptTestObserver(
+ WebContents* web_contents, TestMessageHandler* handler)
+ : handler_(handler),
+ running_(false),
+ finished_(false) {
+ Reset();
+ registrar_.Add(this,
+ NOTIFICATION_DOM_OPERATION_RESPONSE,
+ Source<WebContents>(web_contents));
+}
+
+JavascriptTestObserver::~JavascriptTestObserver() {
+}
+
+bool JavascriptTestObserver::Run() {
+ // Messages may have arrived before Run was called.
+ if (!finished_) {
+ CHECK(!running_);
+ running_ = true;
+ RunMessageLoop();
+ running_ = false;
+ }
+ return handler_->ok();
+}
+
+void JavascriptTestObserver::Reset() {
+ CHECK(!running_);
+ running_ = false;
+ finished_ = false;
+ handler_->Reset();
+}
+
+void JavascriptTestObserver::Observe(
+ int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ CHECK(type == NOTIFICATION_DOM_OPERATION_RESPONSE);
+ Details<DomOperationNotificationDetails> dom_op_details(details);
+ // We might receive responses for other script execution, but we only
+ // care about the test finished message.
+ TestMessageHandler::MessageResponse response =
+ handler_->HandleMessage(dom_op_details->json);
+
+ if (response == TestMessageHandler::DONE) {
+ EndTest();
+ } else {
+ Continue();
+ }
+}
+
+void JavascriptTestObserver::Continue() {
+}
+
+void JavascriptTestObserver::EndTest() {
+ finished_ = true;
+ if (running_) {
+ running_ = false;
+ base::MessageLoopForUI::current()->Quit();
+ }
+}
+
+} // namespace content
diff --git a/content/public/test/javascript_test_observer.h b/content/public/test/javascript_test_observer.h
new file mode 100644
index 0000000000..3b7b1f3c5a
--- /dev/null
+++ b/content/public/test/javascript_test_observer.h
@@ -0,0 +1,98 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_TEST_JAVASCRIPT_TEST_OBSERVER_H_
+#define CONTENT_PUBLIC_TEST_JAVASCRIPT_TEST_OBSERVER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace content {
+class WebContents;
+
+// Base class for handling a stream of automation messages produced by a
+// JavascriptTestObserver.
+class TestMessageHandler {
+ public:
+ enum MessageResponse {
+ // Reset the timeout and keep running.
+ CONTINUE,
+ // Stop runnning.
+ DONE
+ };
+
+ TestMessageHandler();
+ virtual ~TestMessageHandler();
+
+ // Called when a message is received from the DOM automation controller.
+ virtual MessageResponse HandleMessage(const std::string& json) = 0;
+
+ void SetError(const std::string& message);
+
+ bool ok() const {
+ return ok_;
+ }
+
+ const std::string& error_message() const {
+ return error_message_;
+ }
+
+ // Prepare the handler to be used or reused.
+ virtual void Reset();
+
+ private:
+ bool ok_;
+ std::string error_message_;
+};
+
+// This class captures a stream of automation messages coming from a Javascript
+// test and dispatches them to a message handler.
+class JavascriptTestObserver : public NotificationObserver {
+ public:
+ // The observer does not own any arguments passed to it. It is assumed that
+ // the arguments will outlive all uses of the observer.
+ JavascriptTestObserver(WebContents* web_contents,
+ TestMessageHandler* handler);
+
+ virtual ~JavascriptTestObserver();
+
+ // Pump the message loop until the message handler indicates the Javascript
+ // test is done running. Return true if the test jig functioned correctly and
+ // nothing timed out.
+ bool Run();
+
+ // Prepare the observer to be used again. This method should NOT be called
+ // while Run() is pumping the message loop.
+ void Reset();
+
+ virtual void Observe(
+ int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
+ private:
+ // This message did not signal the end of a test, keep going.
+ void Continue();
+
+ // This was the last message we care about, stop listening for more messages.
+ void EndTest();
+
+ TestMessageHandler* handler_;
+ bool running_;
+ bool finished_;
+ NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(JavascriptTestObserver);
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_TEST_JAVASCRIPT_TEST_OBSERVER_H_
diff --git a/content/public/test/layouttest_support.h b/content/public/test/layouttest_support.h
index 98339889ac..cf4e695cb1 100644
--- a/content/public/test/layouttest_support.h
+++ b/content/public/test/layouttest_support.h
@@ -61,8 +61,12 @@ void SetMockDeviceOrientationData(const blink::WebDeviceOrientationData& data);
// Sets WebScreenOrientationType that should be used as a mock orientation.
void SetMockScreenOrientation(
+ RenderView* render_view,
const blink::WebScreenOrientationType& orientation);
+// Resets the mock screen orientation data.
+void ResetMockScreenOrientation();
+
// Returns the length of the local session history of a render view.
int GetLocalSessionHistoryLength(RenderView* render_view);
@@ -98,9 +102,6 @@ void EnableAutoResizeMode(RenderView* render_view,
void DisableAutoResizeMode(RenderView* render_view,
const blink::WebSize& new_size);
-// Forces the |render_frame| to use mock media streams.
-void UseMockMediaStreams(RenderFrame* render_frame);
-
// Provides a text dump of the contents of the given page state.
std::string DumpBackForwardList(std::vector<PageState>& page_state,
size_t current_index);
diff --git a/content/public/test/mock_download_item.cc b/content/public/test/mock_download_item.cc
index 4a0733e173..562972a265 100644
--- a/content/public/test/mock_download_item.cc
+++ b/content/public/test/mock_download_item.cc
@@ -7,6 +7,29 @@
namespace content {
MockDownloadItem::MockDownloadItem() {}
-MockDownloadItem::~MockDownloadItem() {}
+
+MockDownloadItem::~MockDownloadItem() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDownloadDestroyed(this));
+}
+
+void MockDownloadItem::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void MockDownloadItem::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+void MockDownloadItem::NotifyObserversDownloadOpened() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDownloadOpened(this));
+}
+
+void MockDownloadItem::NotifyObserversDownloadRemoved() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDownloadRemoved(this));
+}
+
+void MockDownloadItem::NotifyObserversDownloadUpdated() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this));
+}
}
diff --git a/content/public/test/mock_download_item.h b/content/public/test/mock_download_item.h
index 6a365f52b4..d9e390817f 100644
--- a/content/public/test/mock_download_item.h
+++ b/content/public/test/mock_download_item.h
@@ -6,6 +6,7 @@
#define CONTENT_PUBLIC_TEST_MOCK_DOWNLOAD_ITEM_H_
#include "base/callback.h"
+#include "base/observer_list.h"
#include "base/time/time.h"
#include "content/public/browser/download_interrupt_reasons.h"
#include "content/public/browser/download_item.h"
@@ -19,8 +20,20 @@ class MockDownloadItem : public DownloadItem {
public:
MockDownloadItem();
virtual ~MockDownloadItem();
- MOCK_METHOD1(AddObserver, void(DownloadItem::Observer*));
- MOCK_METHOD1(RemoveObserver, void(DownloadItem::Observer*));
+
+ // Management of observer lists is common in tests. So Add/RemoveObserver
+ // methods are not mocks. In addition, any registered observers will receive a
+ // OnDownloadDestroyed() notification when the mock is destroyed.
+ virtual void AddObserver(Observer* observer) OVERRIDE;
+ virtual void RemoveObserver(Observer* observer) OVERRIDE;
+
+ // Dispatches an OnDownloadOpened() notification to observers.
+ void NotifyObserversDownloadOpened();
+ // Dispatches an OnDownloadRemoved() notification to observers.
+ void NotifyObserversDownloadRemoved();
+ // Dispatches an OnDownloadUpdated() notification to observers.
+ void NotifyObserversDownloadUpdated();
+
MOCK_METHOD0(UpdateObservers, void());
MOCK_METHOD0(ValidateDangerousDownload, void());
MOCK_METHOD1(StealDangerousDownload, void(const AcquireFileCallback&));
@@ -87,6 +100,9 @@ class MockDownloadItem : public DownloadItem {
MOCK_METHOD1(SetOpened, void(bool));
MOCK_METHOD1(SetDisplayName, void(const base::FilePath&));
MOCK_CONST_METHOD1(DebugString, std::string(bool));
+
+ private:
+ ObserverList<Observer> observers_;
};
} // namespace content
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 50c19ee849..39eae8224e 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -26,7 +26,7 @@ MockRenderProcessHost::MockRenderProcessHost(BrowserContext* browser_context)
prev_routing_id_(0),
fast_shutdown_started_(false),
deletion_callback_called_(false),
- is_guest_(false) {
+ is_isolated_guest_(false) {
// Child process security operations can't be unit tested unless we add
// ourselves as an existing child process.
ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID());
@@ -101,8 +101,8 @@ int MockRenderProcessHost::VisibleWidgetCount() const {
return 1;
}
-bool MockRenderProcessHost::IsGuest() const {
- return is_guest_;
+bool MockRenderProcessHost::IsIsolatedGuest() const {
+ return is_isolated_guest_;
}
StoragePartition* MockRenderProcessHost::GetStoragePartition() const {
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 4b99782bd5..03ba551cd1 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -47,7 +47,7 @@ class MockRenderProcessHost : public RenderProcessHost {
virtual void WidgetRestored() OVERRIDE;
virtual void WidgetHidden() OVERRIDE;
virtual int VisibleWidgetCount() const OVERRIDE;
- virtual bool IsGuest() const OVERRIDE;
+ virtual bool IsIsolatedGuest() const OVERRIDE;
virtual StoragePartition* GetStoragePartition() const OVERRIDE;
virtual void AddWord(const base::string16& word);
virtual bool FastShutdownIfPossible() OVERRIDE;
@@ -97,8 +97,8 @@ class MockRenderProcessHost : public RenderProcessHost {
int GetActiveViewCount();
- void SetIsGuest(bool is_guest) {
- is_guest_ = is_guest;
+ void set_is_isolated_guest(bool is_isolated_guest) {
+ is_isolated_guest_ = is_isolated_guest;
}
private:
@@ -115,7 +115,7 @@ class MockRenderProcessHost : public RenderProcessHost {
IDMap<IPC::Listener> listeners_;
bool fast_shutdown_started_;
bool deletion_callback_called_;
- bool is_guest_;
+ bool is_isolated_guest_;
DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHost);
};
diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc
index f14a557653..0d1b0bcb6f 100644
--- a/content/public/test/mock_render_thread.cc
+++ b/content/public/test/mock_render_thread.cc
@@ -220,7 +220,7 @@ void MockRenderThread::OnCreateWindow(
void MockRenderThread::OnCreateChildFrame(int new_frame_routing_id,
const std::string& frame_name,
int* new_render_frame_id) {
- *new_render_frame_id = new_frame_routing_id_;
+ *new_render_frame_id = new_frame_routing_id_++;
}
bool MockRenderThread::OnControlMessageReceived(const IPC::Message& msg) {
@@ -238,13 +238,12 @@ bool MockRenderThread::OnMessageReceived(const IPC::Message& msg) {
sink_.OnMessageReceived(msg);
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(MockRenderThread, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(MockRenderThread, msg)
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget)
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow)
IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame)
IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP_EX()
+ IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 43b1e166a3..e76ee7e317 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -124,6 +124,11 @@ void RenderViewTest::LoadHTML(const char* html) {
FrameLoadWaiter(view_->GetMainRenderFrame()).Wait();
}
+PageState RenderViewTest::GetCurrentPageState() {
+ RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
+ return HistoryEntryToPageState(impl->history_controller()->GetCurrentEntry());
+}
+
void RenderViewTest::GoBack(const PageState& state) {
GoToOffset(-1, state);
}
@@ -132,12 +137,6 @@ void RenderViewTest::GoForward(const PageState& state) {
GoToOffset(1, state);
}
-void RenderViewTest::GoBackToPrevious() {
- RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
- GoBack(HistoryEntryToPageState(
- impl->history_controller()->GetPreviousEntry()));
-}
-
void RenderViewTest::SetUp() {
content_client_.reset(CreateContentClient());
content_browser_client_.reset(CreateContentBrowserClient());
@@ -195,6 +194,7 @@ void RenderViewTest::SetUp() {
base::string16(),
false, // is_renderer_created
false, // swapped_out
+ MSG_ROUTING_NONE, // proxy_routing_id
false, // hidden
false, // never_visible
1, // next_page_id
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h
index 5af0f6e43f..7f10ee864a 100644
--- a/content/public/test/render_view_test.h
+++ b/content/public/test/render_view_test.h
@@ -13,6 +13,7 @@
#include "base/strings/string16.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/common/main_function_params.h"
+#include "content/public/common/page_state.h"
#include "content/public/test/mock_render_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/Platform.h"
@@ -76,15 +77,14 @@ class RenderViewTest : public testing::Test {
// the navigation is committed.
void LoadHTML(const char* html);
+ // Returns the current PageState.
+ PageState GetCurrentPageState();
+
// Navigates the main frame back or forward in session history and commits.
// The caller must capture a PageState for the target page.
void GoBack(const PageState& state);
void GoForward(const PageState& state);
- // Navigates the main frame back to whatever is considered the previous
- // history entry internally.
- void GoBackToPrevious();
-
// Sends one native key event over IPC.
void SendNativeKeyEvent(const NativeWebKeyboardEvent& key_event);
diff --git a/content/public/test/test_browser_context.cc b/content/public/test/test_browser_context.cc
index bfbeb80917..7d184c84c2 100644
--- a/content/public/test/test_browser_context.cc
+++ b/content/public/test/test_browser_context.cc
@@ -119,16 +119,16 @@ void TestBrowserContext::CancelMidiSysExPermissionRequest(
void TestBrowserContext::RequestProtectedMediaIdentifierPermission(
int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback& callback) {
// Always reject requests for testing.
callback.Run(false);
}
void TestBrowserContext::CancelProtectedMediaIdentifierPermissionRequests(
- int group_id) {
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) {
}
ResourceContext* TestBrowserContext::GetResourceContext() {
@@ -143,8 +143,7 @@ GeolocationPermissionContext*
return NULL;
}
-BrowserPluginGuestManagerDelegate*
- TestBrowserContext::GetGuestManagerDelegate() {
+BrowserPluginGuestManager* TestBrowserContext::GetGuestManager() {
return NULL;
}
diff --git a/content/public/test/test_browser_context.h b/content/public/test/test_browser_context.h
index ea2f5f2716..0179d424a8 100644
--- a/content/public/test/test_browser_context.h
+++ b/content/public/test/test_browser_context.h
@@ -55,17 +55,16 @@ class TestBrowserContext : public BrowserContext {
virtual void RequestProtectedMediaIdentifierPermission(
int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback& callback) OVERRIDE;
virtual void CancelProtectedMediaIdentifierPermissionRequests(
- int group_id) OVERRIDE;
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) OVERRIDE;
virtual ResourceContext* GetResourceContext() OVERRIDE;
virtual GeolocationPermissionContext*
GetGeolocationPermissionContext() OVERRIDE;
- virtual content::BrowserPluginGuestManagerDelegate*
- GetGuestManagerDelegate() OVERRIDE;
+ virtual BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
private:
diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc
index abaa4cefe2..45e8306a54 100644
--- a/content/public/test/test_renderer_host.cc
+++ b/content/public/test/test_renderer_host.cc
@@ -170,11 +170,12 @@ void RenderViewHostTestHarness::SetUp() {
#if defined(USE_AURA)
// The ContextFactory must exist before any Compositors are created.
bool enable_pixel_output = false;
- ui::InitializeContextFactoryForTests(enable_pixel_output);
+ ui::ContextFactory* context_factory =
+ ui::InitializeContextFactoryForTests(enable_pixel_output);
aura_test_helper_.reset(
new aura::test::AuraTestHelper(base::MessageLoopForUI::current()));
- aura_test_helper_->SetUp();
+ aura_test_helper_->SetUp(context_factory);
new wm::DefaultActivationClient(aura_test_helper_->root_window());
#endif
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h
index 49f63ef689..1641df5952 100644
--- a/content/public/test/test_renderer_host.h
+++ b/content/public/test/test_renderer_host.h
@@ -72,6 +72,7 @@ class RenderViewHostTester {
// Gives tests access to RenderViewHostImpl::CreateRenderView.
virtual bool CreateRenderView(const base::string16& frame_name,
int opener_route_id,
+ int proxy_routing_id,
int32 max_page_id,
bool created_with_opener) = 0;
diff --git a/content/public/test/unittest_test_suite.cc b/content/public/test/unittest_test_suite.cc
index 934eb44b86..67f3bb4b72 100644
--- a/content/public/test/unittest_test_suite.cc
+++ b/content/public/test/unittest_test_suite.cc
@@ -7,43 +7,24 @@
#include "base/logging.h"
#include "base/rand_util.h"
#include "base/test/test_suite.h"
-#include "third_party/WebKit/public/platform/Platform.h"
+#if !defined(OS_IOS)
+#include "content/test/test_webkit_platform_support.h"
+#endif
#include "third_party/WebKit/public/web/WebKit.h"
namespace content {
-#if !defined(OS_IOS)
-// A stubbed out WebKit platform support impl.
-class UnitTestTestSuite::UnitTestWebKitPlatformSupport
- : public blink::Platform {
- public:
- UnitTestWebKitPlatformSupport() {}
- virtual ~UnitTestWebKitPlatformSupport() {}
- virtual void cryptographicallyRandomValues(unsigned char* buffer,
- size_t length) OVERRIDE {
- base::RandBytes(buffer, length);
- }
- virtual const unsigned char* getTraceCategoryEnabledFlag(
- const char* categoryName) {
- // Causes tracing macros to be disabled.
- static const unsigned char kEnabled = 0;
- return &kEnabled;
- }
-};
-#endif // !OS_IOS
-
UnitTestTestSuite::UnitTestTestSuite(base::TestSuite* test_suite)
: test_suite_(test_suite) {
DCHECK(test_suite);
#if !defined(OS_IOS)
- webkit_platform_support_.reset(new UnitTestWebKitPlatformSupport);
- blink::initialize(webkit_platform_support_.get());
+ platform_support_.reset(new TestWebKitPlatformSupport);
#endif
}
UnitTestTestSuite::~UnitTestTestSuite() {
#if !defined(OS_IOS)
- blink::shutdown();
+ platform_support_.reset();
#endif
}
diff --git a/content/public/test/unittest_test_suite.h b/content/public/test/unittest_test_suite.h
index 48ce47ed58..5b46ee64cf 100644
--- a/content/public/test/unittest_test_suite.h
+++ b/content/public/test/unittest_test_suite.h
@@ -13,6 +13,7 @@ class TestSuite;
}
namespace content {
+class TestWebKitPlatformSupport;
// A special test suite that also initializes WebKit once for all unittests.
// This is useful for two reasons:
@@ -31,8 +32,7 @@ class UnitTestTestSuite {
scoped_ptr<base::TestSuite> test_suite_;
#if !defined(OS_IOS)
- class UnitTestWebKitPlatformSupport;
- scoped_ptr<UnitTestWebKitPlatformSupport> webkit_platform_support_;
+ scoped_ptr<TestWebKitPlatformSupport> platform_support_;
#endif
DISALLOW_COPY_AND_ASSIGN(UnitTestTestSuite);
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
new file mode 100644
index 0000000000..38a168cd3b
--- /dev/null
+++ b/content/renderer/BUILD.gn
@@ -0,0 +1,182 @@
+# 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.
+
+import("//build/config/features.gni")
+import("//build/config/ui.gni")
+import("//content/renderer/renderer.gni")
+
+source_set("renderer") {
+ # Only targets in the content tree can depend directly on this target.
+ visibility = [ "//content/*" ]
+
+ sources = rebase_path(content_renderer_gypi_values.private_renderer_sources,
+ ".", "//content")
+
+ configs += [
+ "//content:content_implementation",
+ "//content:libjingle_stub_config",
+ "//content:v8_stub_config",
+ "//content:widevine_stub_config",
+ ]
+
+ deps = [
+ # TODO(GYP) bug 376846 remove this. This should be inherited from //net but
+ # those don't cross component boundaries.
+ "//crypto:platform",
+
+ "//base/allocator",
+ "//content:resources",
+ "//content/common:mojo_bindings",
+ "//gin",
+ "//mojo/public/js/bindings",
+ "//mojo/public/interfaces/service_provider",
+ "//net",
+ "//skia",
+ "//third_party/icu",
+ "//third_party/npapi",
+ "//third_party/WebKit/public:blink_headers",
+ "//ui/accessibility",
+ "//ui/events:dom4_keycode_converter",
+ "//ui/native_theme",
+ "//ui/surface",
+ # TODO(GYP)
+ #'../jingle/jingle.gyp:jingle_glue',
+ #'../media/media.gyp:media',
+ #'../mojo/mojo.gyp:mojo_environment_chromium',
+ #'../third_party/WebKit/public/blink.gyp:blink',
+ #'../third_party/libjingle/libjingle.gyp:libjingle',
+ #'../third_party/widevine/cdm/widevine_cdm.gyp:widevine_cdm_version_h',
+ #'../v8/tools/gyp/v8.gyp:v8',
+ #'../webkit/child/webkit_child.gyp:webkit_child',
+ #'../webkit/common/gpu/webkit_gpu.gyp:webkit_gpu',
+ #'../webkit/common/webkit_common.gyp:webkit_common',
+ #'../webkit/renderer/compositor_bindings/compositor_bindings.gyp:webkit_compositor_bindings',
+ #'../webkit/renderer/compositor_bindings/compositor_bindings.gyp:webkit_compositor_support',
+ #'../webkit/storage_common.gyp:webkit_storage_common',
+ ]
+
+ if (!enable_notifications) {
+ sources -= [
+ "notification_provider.cc",
+ "active_notification_tracker.cc",
+ ]
+ }
+
+ if (is_mac) {
+ sources -= [
+ "webscrollbarbehavior_impl_gtkoraura.cc",
+ "webscrollbarbehavior_impl_gtkoraura.h",
+ ]
+ sources += [
+ "external_popup_menu.cc",
+ "external_popup_menu.h",
+ ]
+ }
+
+ if (is_android) {
+ sources -= [
+ "accessibility/renderer_accessibility_focus_only.cc",
+ "media/audio_decoder.cc",
+ "media/filter_helpers.cc",
+ "media/webmediaplayer_impl.cc",
+ ]
+ sources += [
+ "external_popup_menu.cc",
+ "external_popup_menu.h",
+ ]
+
+ # Add back the Linux file which Android shares.
+ set_sources_assignment_filter([])
+ sources += [
+ "render_view_linux.cc",
+ ]
+
+ deps += [
+ "//third_party/android_tools:cpu_features",
+ # TODO(GYP)
+ #"//third_party/libphonenumber",
+ ]
+ } else {
+ sources -= [
+ "java/java_bridge_channel.cc",
+ "java/java_bridge_channel.h",
+ "java/java_bridge_dispatcher.cc",
+ "java/java_bridge_dispatcher.h",
+ ]
+ }
+
+ # TODO(jrg): remove the OS=="android" section?
+ # http://crbug.com/113172
+ # Understand better how media_stream_ is tied into Chromium.
+ if (!enable_webrtc && is_android) {
+ sources -= [
+ "media/media_stream_audio_level_calculator.cc",
+ "media/media_stream_audio_level_calculator.h",
+ "media/media_stream_audio_renderer.cc",
+ "media/media_stream_audio_renderer.h",
+ "media/media_stream_center.h",
+ "media/media_stream_client.h",
+ "media/media_stream_constraints_util.cc",
+ "media/media_stream_constraints_util.h",
+ "media/media_stream_dispatcher.h",
+ "media/media_stream_dispatcher_eventhandler.h",
+ "media/media_stream_impl.h",
+ "media/media_stream_track.cc",
+ "media/media_stream_track.h",
+ ]
+ }
+
+ if (enable_webrtc) {
+ sources += rebase_path(
+ content_renderer_gypi_values.private_renderer_webrtc_sources,
+ ".", "//content")
+ deps += [
+ "//crypto",
+ # TODO(GYP)
+ #"../third_party/libjingle/libjingle.gyp:libjingle_webrtc",
+ #"../third_party/libjingle/libjingle.gyp:libpeerconnection",
+ #"../third_party/webrtc/modules/modules.gyp:audio_device",
+ #"../third_party/webrtc/modules/modules.gyp:audio_processing",
+ #"//third_party/libyuv",
+ ]
+ } else {
+ sources += [
+ "media/webrtc_logging_noop.cc",
+ "media/webrtc_logging.h",
+ ]
+ }
+
+ if (enable_plugins) {
+ sources += rebase_path(
+ content_renderer_gypi_values.private_renderer_plugin_sources,
+ ".", "//content")
+ deps += [
+ # TODO(GYP)
+ #"//ppapi/ppapi_internal.gyp:ppapi_host",
+ #"//ppapi/ppapi_internal.gyp:ppapi_proxy",
+ #"//ppapi/ppapi_internal.gyp:ppapi_shared",
+ ]
+ } else {
+ # These files are in the WebRTC list, but also require plugins.
+ if (enable_webrtc) {
+ sources -= [
+ "media/webrtc/video_destination_handler.cc",
+ "media/webrtc/video_destination_handler.h",
+ ]
+ }
+ }
+
+ if (enable_plugins && enable_webrtc) {
+ sources += rebase_path(
+ content_renderer_gypi_values.private_renderer_plugin_webrtc_sources,
+ ".", "//content")
+ }
+
+ if (!enable_pepper_cdms) {
+ sources -= [
+ "renderer/media/crypto/ppapi_decryptor.cc",
+ "renderer/media/crypto/ppapi_decryptor.h",
+ ]
+ }
+}
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index 2ba5be4e99..4b675a37df 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -100,6 +100,16 @@ BlinkAXTreeSource::BlinkAXTreeSource(RenderViewImpl* render_view)
BlinkAXTreeSource::~BlinkAXTreeSource() {
}
+bool BlinkAXTreeSource::IsInTree(blink::WebAXObject node) const {
+ const blink::WebAXObject& root = GetRoot();
+ while (IsValid(node)) {
+ if (node.equals(root))
+ return true;
+ node = GetParent(node);
+ }
+ return false;
+}
+
blink::WebAXObject BlinkAXTreeSource::GetRoot() const {
return GetMainDocument().accessibilityObject();
}
diff --git a/content/renderer/accessibility/blink_ax_tree_source.h b/content/renderer/accessibility/blink_ax_tree_source.h
index 1417305237..52b908250b 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.h
+++ b/content/renderer/accessibility/blink_ax_tree_source.h
@@ -19,6 +19,9 @@ class BlinkAXTreeSource
BlinkAXTreeSource(RenderViewImpl* render_view);
virtual ~BlinkAXTreeSource();
+ // Walks up the ancestor chain to see if this is a descendant of the root.
+ bool IsInTree(blink::WebAXObject node) const;
+
// AXTreeSource implementation.
virtual blink::WebAXObject GetRoot() const OVERRIDE;
virtual blink::WebAXObject GetFromId(int32 id) const OVERRIDE;
diff --git a/content/renderer/accessibility/renderer_accessibility.cc b/content/renderer/accessibility/renderer_accessibility.cc
index 62015ea8c5..1f2d69617e 100644
--- a/content/renderer/accessibility/renderer_accessibility.cc
+++ b/content/renderer/accessibility/renderer_accessibility.cc
@@ -5,7 +5,6 @@
#include "content/renderer/accessibility/renderer_accessibility.h"
#include "base/command_line.h"
-#include "content/public/common/content_switches.h"
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/public/web/WebAXObject.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -22,11 +21,7 @@ namespace content {
RendererAccessibility::RendererAccessibility(
RenderViewImpl* render_view)
: RenderViewObserver(render_view),
- render_view_(render_view),
- logging_(false) {
- const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- if (command_line.HasSwitch(switches::kEnableAccessibilityLogging))
- logging_ = true;
+ render_view_(render_view) {
}
RendererAccessibility::~RendererAccessibility() {
@@ -42,83 +37,4 @@ WebDocument RendererAccessibility::GetMainDocument() {
return WebDocument();
}
-#ifndef NDEBUG
-const std::string RendererAccessibility::AccessibilityEventToString(
- ui::AXEvent event) {
- switch (event) {
- case ui::AX_EVENT_ACTIVEDESCENDANTCHANGED:
- return "active descendant changed";
- case ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED:
- return "aria attribute changed";
- case ui::AX_EVENT_ALERT:
- return "alert";
- case ui::AX_EVENT_AUTOCORRECTION_OCCURED:
- return "autocorrection occurred";
- case ui::AX_EVENT_BLUR:
- return "blur";
- case ui::AX_EVENT_CHECKED_STATE_CHANGED:
- return "check state changed";
- case ui::AX_EVENT_CHILDREN_CHANGED:
- return "children changed";
- case ui::AX_EVENT_FOCUS:
- return "focus changed";
- case ui::AX_EVENT_HIDE:
- return "object hide";
- case ui::AX_EVENT_INVALID_STATUS_CHANGED:
- return "invalid status changed";
- case ui::AX_EVENT_LAYOUT_COMPLETE:
- return "layout complete";
- case ui::AX_EVENT_LIVE_REGION_CHANGED:
- return "live region changed";
- case ui::AX_EVENT_LOAD_COMPLETE:
- return "load complete";
- case ui::AX_EVENT_LOCATION_CHANGED:
- return "location changed";
- case ui::AX_EVENT_MENU_END:
- return "menu end";
- case ui::AX_EVENT_MENU_LIST_ITEM_SELECTED:
- return "menu list item selected";
- case ui::AX_EVENT_MENU_LIST_VALUE_CHANGED:
- return "menu list changed";
- case ui::AX_EVENT_MENU_POPUP_END:
- return "menu popup end";
- case ui::AX_EVENT_MENU_POPUP_START:
- return "menu popup start";
- case ui::AX_EVENT_MENU_START:
- return "menu start";
- case ui::AX_EVENT_NONE:
- return "none";
- case ui::AX_EVENT_ROW_COLLAPSED:
- return "row collapsed";
- case ui::AX_EVENT_ROW_COUNT_CHANGED:
- return "row count changed";
- case ui::AX_EVENT_ROW_EXPANDED:
- return "row expanded";
- case ui::AX_EVENT_SCROLL_POSITION_CHANGED:
- return "scroll position changed";
- case ui::AX_EVENT_SCROLLED_TO_ANCHOR:
- return "scrolled to anchor";
- case ui::AX_EVENT_SELECTED_CHILDREN_CHANGED:
- return "selected children changed";
- case ui::AX_EVENT_SELECTED_TEXT_CHANGED:
- return "selected text changed";
- case ui::AX_EVENT_SELECTION_CHANGED:
- return "selection changed";
- case ui::AX_EVENT_SHOW:
- return "object show";
- case ui::AX_EVENT_TEXT_CHANGED:
- return "text changed";
- case ui::AX_EVENT_TEXT_INSERTED:
- return "text inserted";
- case ui::AX_EVENT_TEXT_REMOVED:
- return "text removed";
- case ui::AX_EVENT_VALUE_CHANGED:
- return "value changed";
- default:
- NOTREACHED();
- }
- return "";
-}
-#endif
-
} // namespace content
diff --git a/content/renderer/accessibility/renderer_accessibility.h b/content/renderer/accessibility/renderer_accessibility.h
index 1f9fd3614e..9ddb6ed440 100644
--- a/content/renderer/accessibility/renderer_accessibility.h
+++ b/content/renderer/accessibility/renderer_accessibility.h
@@ -76,16 +76,9 @@ class CONTENT_EXPORT RendererAccessibility : public RenderViewObserver {
// no view or frame.
blink::WebDocument GetMainDocument();
-#ifndef NDEBUG
- const std::string AccessibilityEventToString(ui::AXEvent event);
-#endif
-
// The RenderViewImpl that owns us.
RenderViewImpl* render_view_;
- // True if verbose logging of accessibility events is on.
- bool logging_;
-
DISALLOW_COPY_AND_ASSIGN(RendererAccessibility);
};
diff --git a/content/renderer/accessibility/renderer_accessibility_browsertest.cc b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
index f1b559b4ae..9aa4b28e68 100644
--- a/content/renderer/accessibility/renderer_accessibility_browsertest.cc
+++ b/content/renderer/accessibility/renderer_accessibility_browsertest.cc
@@ -304,6 +304,7 @@ TEST_F(RendererAccessibilityTest,
" <p>Hello, world.</p>"
"</body>";
LoadHTML(html.c_str());
+ static const int kProxyRoutingId = 13;
// Creating a RendererAccessibilityComplete should send the tree
// to the browser.
@@ -321,7 +322,7 @@ TEST_F(RendererAccessibilityTest,
accessibility->HandleAXEvent(
root_obj,
ui::AX_EVENT_VALUE_CHANGED);
- view()->main_render_frame()->OnSwapOut();
+ view()->main_render_frame()->OnSwapOut(kProxyRoutingId);
accessibility->SendPendingAccessibilityEvents();
EXPECT_FALSE(sink_->GetUniqueMessageMatching(
AccessibilityHostMsg_Events::ID));
@@ -516,4 +517,38 @@ TEST_F(RendererAccessibilityTest, DetachAccessibilityObject) {
// so we don't have a test expectation for it.
}
+TEST_F(RendererAccessibilityTest, EventOnObjectNotInTree) {
+ // Test RendererAccessibilityComplete and make sure it doesn't send anything
+ // if we get a notification from Blink for an object that isn't in the
+ // tree, like the scroll area that's the parent of the main document,
+ // which we don't expose.
+ std::string html = "<body><input></body>";
+ LoadHTML(html.c_str());
+
+ scoped_ptr<TestRendererAccessibilityComplete> accessibility(
+ new TestRendererAccessibilityComplete(view()));
+ accessibility->SendPendingAccessibilityEvents();
+ EXPECT_EQ(3, CountAccessibilityNodesSentToBrowser());
+
+ WebDocument document = view()->GetWebView()->mainFrame()->document();
+ WebAXObject root_obj = document.accessibilityObject();
+ WebAXObject scroll_area = root_obj.parentObject();
+ EXPECT_EQ(blink::WebAXRoleScrollArea, scroll_area.role());
+
+ // Try to fire a message on the scroll area, and assert that we just
+ // ignore it.
+ sink_->ClearMessages();
+ accessibility->HandleAXEvent(scroll_area,
+ ui::AX_EVENT_VALUE_CHANGED);
+
+ accessibility->SendPendingAccessibilityEvents();
+
+ const IPC::Message* message =
+ sink_->GetUniqueMessageMatching(AccessibilityHostMsg_Events::ID);
+ ASSERT_TRUE(message);
+ Tuple1<std::vector<AccessibilityHostMsg_EventParams> > param;
+ AccessibilityHostMsg_Events::Read(message, &param);
+ ASSERT_EQ(0U, param.a.size());
+}
+
} // namespace content
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.cc b/content/renderer/accessibility/renderer_accessibility_complete.cc
index 4a9de8f017..a8bea1f165 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.cc
+++ b/content/renderer/accessibility/renderer_accessibility_complete.cc
@@ -73,6 +73,7 @@ bool RendererAccessibilityComplete::OnMessageReceived(
OnScrollToPoint)
IPC_MESSAGE_HANDLER(AccessibilityMsg_SetTextSelection,
OnSetTextSelection)
+ IPC_MESSAGE_HANDLER(AccessibilityMsg_HitTest, OnHitTest)
IPC_MESSAGE_HANDLER(AccessibilityMsg_FatalError, OnFatalError)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -184,8 +185,14 @@ void RendererAccessibilityComplete::SendPendingAccessibilityEvents() {
WebAXObject obj = document.accessibilityObjectFromID(
event.id);
+ // Make sure the object still exists.
if (!obj.updateBackingStoreAndCheckValidity())
continue;
+ // Make sure it's a descendant of our root node - exceptions include the
+ // scroll area that's the parent of the main document (we ignore it), and
+ // possibly nodes attached to a different document.
+ if (!tree_source_.IsInTree(obj))
+ continue;
// When we get a "selected children changed" event, Blink
// doesn't also send us events for each child that changed
@@ -201,13 +208,9 @@ void RendererAccessibilityComplete::SendPendingAccessibilityEvents() {
serializer_.SerializeChanges(obj, &event_msg.update);
event_msgs.push_back(event_msg);
-#ifndef NDEBUG
- VLOG(0) << "Accessibility update: \n"
- << "routing id=" << routing_id()
- << " event="
- << AccessibilityEventToString(event.event_type)
+ VLOG(0) << "Accessibility event: " << ui::ToString(event.event_type)
+ << " on node id " << event_msg.id
<< "\n" << event_msg.update.ToString();
-#endif
}
Send(new AccessibilityHostMsg_Events(routing_id(), event_msgs));
@@ -341,6 +344,19 @@ void RendererAccessibilityComplete::OnSetTextSelection(
}
}
+void RendererAccessibilityComplete::OnHitTest(gfx::Point point) {
+ const WebDocument& document = GetMainDocument();
+ if (document.isNull())
+ return;
+ WebAXObject root_obj = document.accessibilityObject();
+ if (!root_obj.updateBackingStoreAndCheckValidity())
+ return;
+
+ WebAXObject obj = root_obj.hitTest(point);
+ if (!obj.isDetached())
+ HandleAXEvent(obj, ui::AX_EVENT_HOVER);
+}
+
void RendererAccessibilityComplete::OnEventsAck() {
DCHECK(ack_pending_);
ack_pending_ = false;
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.h b/content/renderer/accessibility/renderer_accessibility_complete.h
index 227c72a4d7..507b734779 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.h
+++ b/content/renderer/accessibility/renderer_accessibility_complete.h
@@ -70,18 +70,9 @@ class CONTENT_EXPORT RendererAccessibilityComplete
void OnScrollToPoint(int acc_obj_id, gfx::Point point);
void OnSetFocus(int acc_obj_id);
void OnSetTextSelection(int acc_obj_id, int start_offset, int end_offset);
+ void OnHitTest(gfx::Point point);
void OnFatalError();
- // Checks if a Blink accessibility object is an editable text node.
- bool IsEditableText(const blink::WebAXObject& node);
-
- // Recursively explore the tree of Blink accessibility objects rooted
- // at |src|, and for each editable text node encountered, add a
- // corresponding WebAccessibility node as a child of |dst|.
- void RecursiveAddEditableTextNodesToTree(
- const blink::WebAXObject& src,
- ui::AXNodeData* dst);
-
// So we can queue up tasks to be executed later.
base::WeakPtrFactory<RendererAccessibilityComplete> weak_factory_;
diff --git a/content/renderer/android/synchronous_compositor_factory.h b/content/renderer/android/synchronous_compositor_factory.h
index d79988d2e1..58785bb3af 100644
--- a/content/renderer/android/synchronous_compositor_factory.h
+++ b/content/renderer/android/synchronous_compositor_factory.h
@@ -51,7 +51,7 @@ class SynchronousCompositorFactory {
virtual scoped_refptr<webkit::gpu::ContextProviderWebContext>
GetSharedOffscreenContextProviderForMainThread() = 0;
virtual scoped_refptr<StreamTextureFactory> CreateStreamTextureFactory(
- int view_id) = 0;
+ int frame_id) = 0;
virtual blink::WebGraphicsContext3D* CreateOffscreenGraphicsContext3D(
const blink::WebGraphicsContext3D::Attributes& attributes) = 0;
diff --git a/content/renderer/battery_status/OWNERS b/content/renderer/battery_status/OWNERS
new file mode 100644
index 0000000000..1fd89e0e2e
--- /dev/null
+++ b/content/renderer/battery_status/OWNERS
@@ -0,0 +1 @@
+timvolodine@chromium.org
diff --git a/content/renderer/battery_status/battery_status_dispatcher.cc b/content/renderer/battery_status/battery_status_dispatcher.cc
new file mode 100644
index 0000000000..e6ab56e2b5
--- /dev/null
+++ b/content/renderer/battery_status/battery_status_dispatcher.cc
@@ -0,0 +1,55 @@
+// 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 "battery_status_dispatcher.h"
+
+#include "base/logging.h"
+#include "content/common/battery_status_messages.h"
+#include "content/renderer/render_thread_impl.h"
+#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
+
+namespace content {
+
+BatteryStatusDispatcher::BatteryStatusDispatcher(RenderThread* thread)
+ : listener_(0) {
+ if (thread)
+ thread->AddObserver(this);
+}
+
+BatteryStatusDispatcher::~BatteryStatusDispatcher() {
+ if (listener_)
+ Stop();
+}
+
+bool BatteryStatusDispatcher::SetListener(
+ blink::WebBatteryStatusListener* listener) {
+ listener_ = listener;
+ return listener ? Start() : Stop();
+}
+
+bool BatteryStatusDispatcher::OnControlMessageReceived(
+ const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(BatteryStatusDispatcher, message)
+ IPC_MESSAGE_HANDLER(BatteryStatusMsg_DidChange, OnDidChange)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+bool BatteryStatusDispatcher::Start() {
+ return RenderThread::Get()->Send(new BatteryStatusHostMsg_Start());
+}
+
+bool BatteryStatusDispatcher::Stop() {
+ return RenderThread::Get()->Send(new BatteryStatusHostMsg_Stop());
+}
+
+void BatteryStatusDispatcher::OnDidChange(
+ const blink::WebBatteryStatus& status) {
+ if (listener_)
+ listener_->updateBatteryStatus(status);
+}
+
+} // namespace content
diff --git a/content/renderer/battery_status/battery_status_dispatcher.h b/content/renderer/battery_status/battery_status_dispatcher.h
new file mode 100644
index 0000000000..0358fa792d
--- /dev/null
+++ b/content/renderer/battery_status/battery_status_dispatcher.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
+#define CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
+
+#include "content/public/renderer/render_process_observer.h"
+
+namespace blink {
+class WebBatteryStatus;
+class WebBatteryStatusListener;
+}
+
+namespace content {
+class RenderThread;
+
+class CONTENT_EXPORT BatteryStatusDispatcher : public RenderProcessObserver {
+ public:
+ explicit BatteryStatusDispatcher(RenderThread* thread);
+ virtual ~BatteryStatusDispatcher();
+
+ // RenderProcessObserver method.
+ virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ // Sets the listener to receive battery status updates. Returns true if the
+ // registration was successful.
+ bool SetListener(blink::WebBatteryStatusListener* listener);
+
+ protected:
+ virtual bool Start();
+ virtual bool Stop();
+
+ private:
+ void OnDidChange(const blink::WebBatteryStatus& status);
+
+ blink::WebBatteryStatusListener* listener_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusDispatcher);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_BATTERY_STATUS_BATTERY_STATUS_DISPATCHER_H_
diff --git a/content/renderer/battery_status/battery_status_dispatcher_unittest.cc b/content/renderer/battery_status/battery_status_dispatcher_unittest.cc
new file mode 100644
index 0000000000..ecbcf393f4
--- /dev/null
+++ b/content/renderer/battery_status/battery_status_dispatcher_unittest.cc
@@ -0,0 +1,123 @@
+// 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 "battery_status_dispatcher.h"
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/common/battery_status_messages.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
+
+namespace content {
+
+class MockBatteryStatusListener : public blink::WebBatteryStatusListener {
+ public:
+ MockBatteryStatusListener() : did_change_battery_status_(false) { }
+ virtual ~MockBatteryStatusListener() { }
+
+ // blink::WebBatteryStatusListener method.
+ virtual void updateBatteryStatus(
+ const blink::WebBatteryStatus& status) OVERRIDE {
+ status_ = status;
+ did_change_battery_status_ = true;
+ }
+
+ const blink::WebBatteryStatus& status() const { return status_; }
+ bool did_change_battery_status() const { return did_change_battery_status_; }
+
+ private:
+ bool did_change_battery_status_;
+ blink::WebBatteryStatus status_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockBatteryStatusListener);
+};
+
+class BatteryStatusDispatcherForTesting : public BatteryStatusDispatcher {
+ public:
+ BatteryStatusDispatcherForTesting()
+ : BatteryStatusDispatcher(0),
+ start_invoked_(false),
+ stop_invoked_(false) { }
+
+ virtual ~BatteryStatusDispatcherForTesting() { }
+
+ bool start_invoked() const { return start_invoked_; }
+ bool stop_invoked() const { return stop_invoked_; }
+
+ protected:
+ virtual bool Start() OVERRIDE {
+ start_invoked_ = true;
+ return true;
+ }
+
+ virtual bool Stop() OVERRIDE {
+ stop_invoked_ = true;
+ return true;
+ }
+
+ private:
+ bool start_invoked_;
+ bool stop_invoked_;
+
+ DISALLOW_COPY_AND_ASSIGN(BatteryStatusDispatcherForTesting);
+};
+
+TEST(BatteryStatusDispatcherTest, Start) {
+ MockBatteryStatusListener listener;
+ BatteryStatusDispatcherForTesting dispatcher;
+
+ EXPECT_FALSE(dispatcher.start_invoked());
+ EXPECT_FALSE(dispatcher.stop_invoked());
+
+ dispatcher.SetListener(&listener);
+ EXPECT_TRUE(dispatcher.start_invoked());
+
+ dispatcher.SetListener(0);
+ EXPECT_TRUE(dispatcher.stop_invoked());
+}
+
+TEST(BatteryStatusDispatcherTest, UpdateListener) {
+ MockBatteryStatusListener listener;
+ BatteryStatusDispatcherForTesting dispatcher;
+
+ blink::WebBatteryStatus status;
+ status.charging = true;
+ status.chargingTime = 100;
+ status.dischargingTime = 200;
+ status.level = 0.5;
+
+ dispatcher.SetListener(&listener);
+ EXPECT_TRUE(dispatcher.start_invoked());
+
+ BatteryStatusMsg_DidChange message(status);
+ dispatcher.OnControlMessageReceived(message);
+
+ const blink::WebBatteryStatus& received_status = listener.status();
+ EXPECT_TRUE(listener.did_change_battery_status());
+ EXPECT_EQ(status.charging, received_status.charging);
+ EXPECT_EQ(status.chargingTime, received_status.chargingTime);
+ EXPECT_EQ(status.dischargingTime, received_status.dischargingTime);
+ EXPECT_EQ(status.level, received_status.level);
+
+ dispatcher.SetListener(0);
+ EXPECT_TRUE(dispatcher.stop_invoked());
+}
+
+TEST(BatteryStatusDispatcherTest, NoUpdateWhenNullListener) {
+ MockBatteryStatusListener listener;
+ BatteryStatusDispatcherForTesting dispatcher;
+
+ dispatcher.SetListener(0);
+ EXPECT_FALSE(dispatcher.start_invoked());
+ EXPECT_TRUE(dispatcher.stop_invoked());
+
+ blink::WebBatteryStatus status;
+ BatteryStatusMsg_DidChange message(status);
+ dispatcher.OnControlMessageReceived(message);
+ EXPECT_FALSE(listener.did_change_battery_status());
+}
+
+} // namespace content
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index 3f7ef260a6..9f6f406584 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -117,7 +117,6 @@ bool BrowserPlugin::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetMouseLock, OnSetMouseLock)
IPC_MESSAGE_HANDLER(BrowserPluginMsg_ShouldAcceptTouchEvents,
OnShouldAcceptTouchEvents)
- IPC_MESSAGE_HANDLER(BrowserPluginMsg_UpdatedName, OnUpdatedName)
IPC_MESSAGE_HANDLER(BrowserPluginMsg_UpdateRect, OnUpdateRect)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -165,10 +164,6 @@ bool BrowserPlugin::HasDOMAttribute(const std::string& attribute_name) const {
blink::WebString::fromUTF8(attribute_name));
}
-std::string BrowserPlugin::GetNameAttribute() const {
- return GetDOMAttributeValue(browser_plugin::kAttributeName);
-}
-
bool BrowserPlugin::GetAllowTransparencyAttribute() const {
return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency);
}
@@ -241,15 +236,6 @@ std::string BrowserPlugin::GetPartitionAttribute() const {
return GetDOMAttributeValue(browser_plugin::kAttributePartition);
}
-void BrowserPlugin::ParseNameAttribute() {
- if (!HasGuestInstanceID())
- return;
- browser_plugin_manager()->Send(
- new BrowserPluginHostMsg_SetName(render_view_routing_id_,
- guest_instance_id_,
- GetNameAttribute()));
-}
-
void BrowserPlugin::ParseAllowTransparencyAttribute() {
if (!HasGuestInstanceID())
return;
@@ -380,7 +366,6 @@ void BrowserPlugin::Attach(int guest_instance_id,
attach_params.focused = ShouldGuestBeFocused();
attach_params.visible = visible_;
attach_params.opaque = !GetAllowTransparencyAttribute();
- attach_params.name = GetNameAttribute();
attach_params.storage_partition_id = storage_partition_id_;
attach_params.persist_storage = persist_storage_;
attach_params.src = GetSrcAttribute();
@@ -408,9 +393,6 @@ void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) {
void BrowserPlugin::OnAttachACK(
int guest_instance_id,
const BrowserPluginMsg_Attach_ACK_Params& params) {
- // Update BrowserPlugin attributes to match the state of the guest.
- if (!params.name.empty())
- OnUpdatedName(guest_instance_id, params.name);
if (!params.storage_partition_id.empty()) {
std::string partition_name =
(params.persist_storage ? browser_plugin::kPersistPrefix : "") +
@@ -516,11 +498,6 @@ void BrowserPlugin::OnShouldAcceptTouchEvents(int guest_instance_id,
}
}
-void BrowserPlugin::OnUpdatedName(int guest_instance_id,
- const std::string& name) {
- UpdateDOMAttribute(browser_plugin::kAttributeName, name);
-}
-
void BrowserPlugin::OnUpdateRect(
int guest_instance_id,
const BrowserPluginMsg_UpdateRect_Params& params) {
@@ -869,7 +846,6 @@ bool BrowserPlugin::ShouldForwardToBrowserPlugin(
case BrowserPluginMsg_SetCursor::ID:
case BrowserPluginMsg_SetMouseLock::ID:
case BrowserPluginMsg_ShouldAcceptTouchEvents::ID:
- case BrowserPluginMsg_UpdatedName::ID:
case BrowserPluginMsg_UpdateRect::ID:
return true;
default:
diff --git a/content/renderer/browser_plugin/browser_plugin.h b/content/renderer/browser_plugin/browser_plugin.h
index d17615441c..2008303876 100644
--- a/content/renderer/browser_plugin/browser_plugin.h
+++ b/content/renderer/browser_plugin/browser_plugin.h
@@ -55,10 +55,6 @@ class CONTENT_EXPORT BrowserPlugin :
// Checks if the attribute |attribute_name| exists in the DOM.
bool HasDOMAttribute(const std::string& attribute_name) const;
- // Get the name attribute value.
- std::string GetNameAttribute() const;
- // Parse the name attribute value.
- void ParseNameAttribute();
// Get the allowtransparency attribute value.
bool GetAllowTransparencyAttribute() const;
// Parse the allowtransparency attribute and adjust transparency of
@@ -275,7 +271,6 @@ class CONTENT_EXPORT BrowserPlugin :
void OnSetCursor(int instance_id, const WebCursor& cursor);
void OnSetMouseLock(int instance_id, bool enable);
void OnShouldAcceptTouchEvents(int instance_id, bool accept);
- void OnUpdatedName(int instance_id, const std::string& name);
void OnUpdateRect(int instance_id,
const BrowserPluginMsg_UpdateRect_Params& params);
@@ -285,11 +280,11 @@ class CONTENT_EXPORT BrowserPlugin :
// This indicates whether this BrowserPlugin has been attached to a
// WebContents.
bool attached_;
- base::WeakPtr<RenderViewImpl> render_view_;
+ const base::WeakPtr<RenderViewImpl> render_view_;
// We cache the |render_view_|'s routing ID because we need it on destruction.
// If the |render_view_| is destroyed before the BrowserPlugin is destroyed
// then we will attempt to access a NULL pointer.
- int render_view_routing_id_;
+ const int render_view_routing_id_;
blink::WebPluginContainer* container_;
scoped_ptr<BrowserPluginBindings> bindings_;
bool paint_ack_received_;
@@ -311,7 +306,7 @@ class CONTENT_EXPORT BrowserPlugin :
// embedder RenderView's visibility.
bool visible_;
- bool auto_navigate_;
+ const bool auto_navigate_;
std::string html_string_;
WebCursor cursor_;
@@ -323,7 +318,7 @@ class CONTENT_EXPORT BrowserPlugin :
// BrowserPlugin outlives RenderViewImpl in Chrome Apps and so we need to
// store the BrowserPlugin's BrowserPluginManager in a member variable to
// avoid accessing the RenderViewImpl.
- scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
+ const scoped_refptr<BrowserPluginManager> browser_plugin_manager_;
// Used for HW compositing.
scoped_refptr<ChildFrameCompositingHelper> compositing_helper_;
@@ -332,7 +327,7 @@ class CONTENT_EXPORT BrowserPlugin :
scoped_ptr<struct _NPP> npp_;
// URL for the embedder frame.
- GURL embedder_frame_url_;
+ const GURL embedder_frame_url_;
std::vector<EditCommand> edit_commands_;
diff --git a/content/renderer/browser_plugin/browser_plugin_bindings.cc b/content/renderer/browser_plugin/browser_plugin_bindings.cc
index 4284e2b0c0..624e19f88e 100644
--- a/content/renderer/browser_plugin/browser_plugin_bindings.cc
+++ b/content/renderer/browser_plugin/browser_plugin_bindings.cc
@@ -236,6 +236,13 @@ class BrowserPluginBindingAttach: public BrowserPluginMethodBinding {
virtual bool Invoke(BrowserPluginBindings* bindings,
const NPVariant* args,
NPVariant* result) OVERRIDE {
+ bool attached = InvokeHelper(bindings, args);
+ BOOLEAN_TO_NPVARIANT(attached, *result);
+ return true;
+ }
+
+ private:
+ bool InvokeHelper(BrowserPluginBindings* bindings, const NPVariant* args) {
if (!bindings->instance()->render_view())
return false;
@@ -259,8 +266,6 @@ class BrowserPluginBindingAttach: public BrowserPluginMethodBinding {
bindings->instance()->Attach(instance_id, extra_params.Pass());
return true;
}
-
- private:
DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindingAttach);
};
@@ -510,36 +515,6 @@ class BrowserPluginPropertyBindingMinWidth
DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingMinWidth);
};
-class BrowserPluginPropertyBindingName
- : public BrowserPluginPropertyBinding {
- public:
- BrowserPluginPropertyBindingName()
- : BrowserPluginPropertyBinding(browser_plugin::kAttributeName) {
- }
- virtual bool GetProperty(BrowserPluginBindings* bindings,
- NPVariant* result) OVERRIDE {
- std::string name = bindings->instance()->GetNameAttribute();
- return StringToNPVariant(name, result);
- }
- virtual bool SetProperty(BrowserPluginBindings* bindings,
- NPObject* np_obj,
- const NPVariant* variant) OVERRIDE {
- std::string new_value = StringFromNPVariant(*variant);
- if (bindings->instance()->GetNameAttribute() != new_value) {
- UpdateDOMAttribute(bindings, new_value);
- bindings->instance()->ParseNameAttribute();
- }
- return true;
- }
- virtual void RemoveProperty(BrowserPluginBindings* bindings,
- NPObject* np_obj) OVERRIDE {
- bindings->instance()->RemoveDOMAttribute(name());
- bindings->instance()->ParseNameAttribute();
- }
- private:
- DISALLOW_COPY_AND_ASSIGN(BrowserPluginPropertyBindingName);
-};
-
class BrowserPluginPropertyBindingPartition
: public BrowserPluginPropertyBinding {
public:
@@ -660,7 +635,6 @@ BrowserPluginBindings::BrowserPluginBindings(BrowserPlugin* instance)
property_bindings_.push_back(new BrowserPluginPropertyBindingMaxWidth);
property_bindings_.push_back(new BrowserPluginPropertyBindingMinHeight);
property_bindings_.push_back(new BrowserPluginPropertyBindingMinWidth);
- property_bindings_.push_back(new BrowserPluginPropertyBindingName);
property_bindings_.push_back(new BrowserPluginPropertyBindingPartition);
property_bindings_.push_back(new BrowserPluginPropertyBindingSrc);
}
diff --git a/content/renderer/browser_plugin/browser_plugin_browsertest.cc b/content/renderer/browser_plugin/browser_plugin_browsertest.cc
index f277994027..b7eb616436 100644
--- a/content/renderer/browser_plugin/browser_plugin_browsertest.cc
+++ b/content/renderer/browser_plugin/browser_plugin_browsertest.cc
@@ -269,9 +269,9 @@ TEST_F(BrowserPluginTest, SrcAttribute) {
BrowserPluginHostMsg_NavigateGuest::ID);
ASSERT_TRUE(msg);
- int instance_id = 0;
- std::string src;
- BrowserPluginHostMsg_NavigateGuest::Read(msg, &instance_id, &src);
+ BrowserPluginHostMsg_NavigateGuest::Param params;
+ BrowserPluginHostMsg_NavigateGuest::Read(msg, &params);
+ std::string src = params.b;
EXPECT_EQ("bar", src);
std::string src_value =
ExecuteScriptAndReturnString(
@@ -328,8 +328,10 @@ TEST_F(BrowserPluginTest, ResizeFlowControl) {
browser_plugin_manager()->sink().GetUniqueMessageMatching(
BrowserPluginHostMsg_ResizeGuest::ID);
ASSERT_TRUE(msg);
- BrowserPluginHostMsg_ResizeGuest_Params params;
- BrowserPluginHostMsg_ResizeGuest::Read(msg, &instance_id, &params);
+ BrowserPluginHostMsg_ResizeGuest::Param param;
+ BrowserPluginHostMsg_ResizeGuest::Read(msg, &param);
+ instance_id = param.a;
+ BrowserPluginHostMsg_ResizeGuest_Params params = param.b;
EXPECT_EQ(641, params.view_rect.width());
EXPECT_EQ(480, params.view_rect.height());
@@ -576,13 +578,10 @@ TEST_F(BrowserPluginTest, AutoSizeAttributes) {
BrowserPluginHostMsg_SetAutoSize::ID);
ASSERT_TRUE(auto_size_msg);
- int instance_id = 0;
- BrowserPluginHostMsg_AutoSize_Params auto_size_params;
- BrowserPluginHostMsg_ResizeGuest_Params resize_params;
- BrowserPluginHostMsg_SetAutoSize::Read(auto_size_msg,
- &instance_id,
- &auto_size_params,
- &resize_params);
+ BrowserPluginHostMsg_SetAutoSize::Param param;
+ BrowserPluginHostMsg_SetAutoSize::Read(auto_size_msg, &param);
+ BrowserPluginHostMsg_AutoSize_Params auto_size_params = param.b;
+ BrowserPluginHostMsg_ResizeGuest_Params resize_params = param.c;
EXPECT_FALSE(auto_size_params.enable);
// These value are not populated (as an optimization) if autosize is
// disabled.
diff --git a/content/renderer/browser_plugin/browser_plugin_manager_impl.cc b/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
index 4f0bed07fe..5ce7ebbd98 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
+++ b/content/renderer/browser_plugin/browser_plugin_manager_impl.cc
@@ -74,7 +74,6 @@ void BrowserPluginManagerImpl::DidCommitCompositorFrame() {
}
void BrowserPluginManagerImpl::OnAllocateInstanceIDACK(
- const IPC::Message& message,
int request_id,
int guest_instance_id) {
InstanceIDMap::iterator it =
diff --git a/content/renderer/browser_plugin/browser_plugin_manager_impl.h b/content/renderer/browser_plugin/browser_plugin_manager_impl.h
index 2ed41359dd..384313befe 100644
--- a/content/renderer/browser_plugin/browser_plugin_manager_impl.h
+++ b/content/renderer/browser_plugin/browser_plugin_manager_impl.h
@@ -38,8 +38,7 @@ class BrowserPluginManagerImpl : public BrowserPluginManager {
private:
virtual ~BrowserPluginManagerImpl();
- void OnAllocateInstanceIDACK(const IPC::Message& message,
- int request_id,
+ void OnAllocateInstanceIDACK(int request_id,
int guest_instance_id);
int request_id_counter_;
diff --git a/content/renderer/device_sensors/device_motion_event_pump_unittest.cc b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc
index baca081cad..17636d00b2 100644
--- a/content/renderer/device_sensors/device_motion_event_pump_unittest.cc
+++ b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc
@@ -16,24 +16,30 @@ namespace content {
class MockDeviceMotionListener : public blink::WebDeviceMotionListener {
public:
- MockDeviceMotionListener();
+ MockDeviceMotionListener() : did_change_device_motion_(false) {
+ memset(&data_, 0, sizeof(data_));
+ }
virtual ~MockDeviceMotionListener() { }
+
virtual void didChangeDeviceMotion(
- const blink::WebDeviceMotionData&) OVERRIDE;
+ const blink::WebDeviceMotionData& data) OVERRIDE {
+ memcpy(&data_, &data, sizeof(data));
+ did_change_device_motion_ = true;
+ }
+
+ bool did_change_device_motion() const {
+ return did_change_device_motion_;
+ }
+ const blink::WebDeviceMotionData& data() const {
+ return data_;
+ }
+
+ private:
bool did_change_device_motion_;
blink::WebDeviceMotionData data_;
-};
-MockDeviceMotionListener::MockDeviceMotionListener()
- : did_change_device_motion_(false) {
- memset(&data_, 0, sizeof(data_));
-}
-
-void MockDeviceMotionListener::didChangeDeviceMotion(
- const blink::WebDeviceMotionData& data) {
- memcpy(&data_, &data, sizeof(data));
- did_change_device_motion_ = true;
-}
+ DISALLOW_COPY_AND_ASSIGN(MockDeviceMotionListener);
+};
class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump {
public:
@@ -50,6 +56,9 @@ class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump {
Stop();
base::MessageLoop::current()->QuitWhenIdle();
}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DeviceMotionEventPumpForTesting);
};
class DeviceMotionEventPumpTest : public testing::Test {
@@ -82,11 +91,18 @@ class DeviceMotionEventPumpTest : public testing::Test {
data.allAvailableSensorsAreActive = allAvailableSensorsActive;
}
+ MockDeviceMotionListener* listener() { return listener_.get(); }
+ DeviceMotionEventPumpForTesting* motion_pump() { return motion_pump_.get(); }
+ base::SharedMemoryHandle handle() { return handle_; }
+
+ private:
scoped_ptr<MockDeviceMotionListener> listener_;
scoped_ptr<DeviceMotionEventPumpForTesting> motion_pump_;
base::SharedMemoryHandle handle_;
base::SharedMemory shared_memory_;
DeviceMotionHardwareBuffer* buffer_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeviceMotionEventPumpTest);
};
TEST_F(DeviceMotionEventPumpTest, DidStartPolling) {
@@ -94,13 +110,13 @@ TEST_F(DeviceMotionEventPumpTest, DidStartPolling) {
InitBuffer(true);
- motion_pump_->SetListener(listener_.get());
- motion_pump_->OnDidStart(handle_);
+ motion_pump()->SetListener(listener());
+ motion_pump()->OnDidStart(handle());
base::MessageLoop::current()->Run();
- blink::WebDeviceMotionData& received_data = listener_->data_;
- EXPECT_TRUE(listener_->did_change_device_motion_);
+ const blink::WebDeviceMotionData& received_data = listener()->data();
+ EXPECT_TRUE(listener()->did_change_device_motion());
EXPECT_TRUE(received_data.hasAccelerationX);
EXPECT_EQ(1, static_cast<double>(received_data.accelerationX));
EXPECT_TRUE(received_data.hasAccelerationX);
@@ -121,14 +137,14 @@ TEST_F(DeviceMotionEventPumpTest, DidStartPollingNotAllSensorsActive) {
InitBuffer(false);
- motion_pump_->SetListener(listener_.get());
- motion_pump_->OnDidStart(handle_);
+ motion_pump()->SetListener(listener());
+ motion_pump()->OnDidStart(handle());
base::MessageLoop::current()->Run();
- blink::WebDeviceMotionData& received_data = listener_->data_;
+ const blink::WebDeviceMotionData& received_data = listener()->data();
// No change in device motion because allAvailableSensorsAreActive is false.
- EXPECT_FALSE(listener_->did_change_device_motion_);
+ EXPECT_FALSE(listener()->did_change_device_motion());
EXPECT_FALSE(received_data.hasAccelerationX);
EXPECT_FALSE(received_data.hasAccelerationX);
EXPECT_FALSE(received_data.hasAccelerationY);
diff --git a/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc b/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc
index 12c1c17d99..e0c456324c 100644
--- a/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc
+++ b/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc
@@ -16,29 +16,33 @@ namespace content {
class MockDeviceOrientationListener
: public blink::WebDeviceOrientationListener {
public:
- MockDeviceOrientationListener();
+ MockDeviceOrientationListener() : did_change_device_orientation_(false) {
+ memset(&data_, 0, sizeof(data_));
+ }
virtual ~MockDeviceOrientationListener() { }
+
virtual void didChangeDeviceOrientation(
- const blink::WebDeviceOrientationData&) OVERRIDE;
- void ResetDidChangeOrientation();
- bool did_change_device_orientation_;
- blink::WebDeviceOrientationData data_;
-};
+ const blink::WebDeviceOrientationData& data) OVERRIDE {
+ memcpy(&data_, &data, sizeof(data));
+ did_change_device_orientation_ = true;
+ }
-MockDeviceOrientationListener::MockDeviceOrientationListener()
- : did_change_device_orientation_(false) {
- memset(&data_, 0, sizeof(data_));
-}
+ bool did_change_device_orientation() const {
+ return did_change_device_orientation_;
+ }
+ void set_did_change_device_orientation(bool value) {
+ did_change_device_orientation_ = value;
+ }
+ const blink::WebDeviceOrientationData& data() const {
+ return data_;
+ }
-void MockDeviceOrientationListener::didChangeDeviceOrientation(
- const blink::WebDeviceOrientationData& data) {
- memcpy(&data_, &data, sizeof(data));
- did_change_device_orientation_ = true;
-}
+ private:
+ bool did_change_device_orientation_;
+ blink::WebDeviceOrientationData data_;
-void MockDeviceOrientationListener::ResetDidChangeOrientation() {
- did_change_device_orientation_ = false;
-}
+ DISALLOW_COPY_AND_ASSIGN(MockDeviceOrientationListener);
+};
class DeviceOrientationEventPumpForTesting : public DeviceOrientationEventPump {
public:
@@ -55,6 +59,9 @@ class DeviceOrientationEventPumpForTesting : public DeviceOrientationEventPump {
Stop();
base::MessageLoop::current()->QuitWhenIdle();
}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DeviceOrientationEventPumpForTesting);
};
class DeviceOrientationEventPumpTest : public testing::Test {
@@ -90,11 +97,21 @@ class DeviceOrientationEventPumpTest : public testing::Test {
data.allAvailableSensorsAreActive = true;
}
+ MockDeviceOrientationListener* listener() { return listener_.get(); }
+ DeviceOrientationEventPumpForTesting* orientation_pump() {
+ return orientation_pump_.get();
+ }
+ base::SharedMemoryHandle handle() { return handle_; }
+ DeviceOrientationHardwareBuffer* buffer() { return buffer_; }
+
+ private:
scoped_ptr<MockDeviceOrientationListener> listener_;
scoped_ptr<DeviceOrientationEventPumpForTesting> orientation_pump_;
base::SharedMemoryHandle handle_;
base::SharedMemory shared_memory_;
DeviceOrientationHardwareBuffer* buffer_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeviceOrientationEventPumpTest);
};
// Always failing in the win try bot. See http://crbug.com/256782.
@@ -107,13 +124,13 @@ TEST_F(DeviceOrientationEventPumpTest, MAYBE_DidStartPolling) {
base::MessageLoop loop;
InitBuffer();
- orientation_pump_->SetListener(listener_.get());
- orientation_pump_->OnDidStart(handle_);
+ orientation_pump()->SetListener(listener());
+ orientation_pump()->OnDidStart(handle());
base::MessageLoop::current()->Run();
- blink::WebDeviceOrientationData& received_data = listener_->data_;
- EXPECT_TRUE(listener_->did_change_device_orientation_);
+ const blink::WebDeviceOrientationData& received_data = listener()->data();
+ EXPECT_TRUE(listener()->did_change_device_orientation());
EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
EXPECT_EQ(1, static_cast<double>(received_data.alpha));
EXPECT_TRUE(received_data.hasAlpha);
@@ -133,13 +150,13 @@ TEST_F(DeviceOrientationEventPumpTest, MAYBE_FireAllNullEvent) {
base::MessageLoop loop;
InitBufferNoData();
- orientation_pump_->SetListener(listener_.get());
- orientation_pump_->OnDidStart(handle_);
+ orientation_pump()->SetListener(listener());
+ orientation_pump()->OnDidStart(handle());
base::MessageLoop::current()->Run();
- blink::WebDeviceOrientationData& received_data = listener_->data_;
- EXPECT_TRUE(listener_->did_change_device_orientation_);
+ const blink::WebDeviceOrientationData& received_data = listener()->data();
+ EXPECT_TRUE(listener()->did_change_device_orientation());
EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
EXPECT_FALSE(received_data.hasAlpha);
EXPECT_FALSE(received_data.hasBeta);
@@ -159,13 +176,13 @@ TEST_F(DeviceOrientationEventPumpTest,
base::MessageLoop loop;
InitBuffer();
- orientation_pump_->SetListener(listener_.get());
- orientation_pump_->OnDidStart(handle_);
+ orientation_pump()->SetListener(listener());
+ orientation_pump()->OnDidStart(handle());
base::MessageLoop::current()->Run();
- blink::WebDeviceOrientationData& received_data = listener_->data_;
- EXPECT_TRUE(listener_->did_change_device_orientation_);
+ const blink::WebDeviceOrientationData& received_data = listener()->data();
+ EXPECT_TRUE(listener()->did_change_device_orientation());
EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
EXPECT_EQ(1, static_cast<double>(received_data.alpha));
EXPECT_TRUE(received_data.hasAlpha);
@@ -174,16 +191,16 @@ TEST_F(DeviceOrientationEventPumpTest,
EXPECT_EQ(3, static_cast<double>(received_data.gamma));
EXPECT_TRUE(received_data.hasGamma);
- buffer_->data.alpha =
+ buffer()->data.alpha =
1 + DeviceOrientationEventPump::kOrientationThreshold / 2.0;
- listener_->ResetDidChangeOrientation();
+ listener()->set_did_change_device_orientation(false);
base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
- base::Unretained(orientation_pump_.get())));
+ base::Unretained(orientation_pump())));
base::MessageLoop::current()->Run();
- EXPECT_FALSE(listener_->did_change_device_orientation_);
+ EXPECT_FALSE(listener()->did_change_device_orientation());
EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
EXPECT_EQ(1, static_cast<double>(received_data.alpha));
EXPECT_TRUE(received_data.hasAlpha);
@@ -192,16 +209,16 @@ TEST_F(DeviceOrientationEventPumpTest,
EXPECT_EQ(3, static_cast<double>(received_data.gamma));
EXPECT_TRUE(received_data.hasGamma);
- buffer_->data.alpha =
+ buffer()->data.alpha =
1 + DeviceOrientationEventPump::kOrientationThreshold;
- listener_->ResetDidChangeOrientation();
+ listener()->set_did_change_device_orientation(false);
base::MessageLoop::current()->PostTask(FROM_HERE,
base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
- base::Unretained(orientation_pump_.get())));
+ base::Unretained(orientation_pump())));
base::MessageLoop::current()->Run();
- EXPECT_TRUE(listener_->did_change_device_orientation_);
+ EXPECT_TRUE(listener()->did_change_device_orientation());
EXPECT_EQ(1 + DeviceOrientationEventPump::kOrientationThreshold,
static_cast<double>(received_data.alpha));
}
diff --git a/content/renderer/devtools/devtools_agent.cc b/content/renderer/devtools/devtools_agent.cc
index a2cd36c104..4341d02320 100644
--- a/content/renderer/devtools/devtools_agent.cc
+++ b/content/renderer/devtools/devtools_agent.cc
@@ -77,7 +77,8 @@ DevToolsAgent::DevToolsAgent(RenderViewImpl* render_view)
: RenderViewObserver(render_view),
is_attached_(false),
is_devtools_client_(false),
- gpu_route_id_(MSG_ROUTING_NONE) {
+ gpu_route_id_(MSG_ROUTING_NONE),
+ paused_in_mouse_move_(false) {
g_agent_for_routing_id.Get()[routing_id()] = this;
render_view->webview()->setDevToolsAgentClient(this);
@@ -134,6 +135,19 @@ blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
return new WebKitClientMessageLoopImpl();
}
+void DevToolsAgent::willEnterDebugLoop() {
+ RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view());
+ paused_in_mouse_move_ = impl->SendAckForMouseMoveFromDebugger();
+}
+
+void DevToolsAgent::didExitDebugLoop() {
+ RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view());
+ if (paused_in_mouse_move_) {
+ impl->IgnoreAckForMouseMoveFromDebugger();
+ paused_in_mouse_move_ = false;
+ }
+}
+
void DevToolsAgent::resetTraceEventCallback()
{
TraceLog::GetInstance()->SetEventCallbackDisabled();
@@ -229,7 +243,6 @@ void DevToolsAgent::OnGpuTasksChunk(const std::vector<GpuTaskInfo>& tasks) {
void DevToolsAgent::enableDeviceEmulation(
const blink::WebDeviceEmulationParams& params) {
RenderViewImpl* impl = static_cast<RenderViewImpl*>(render_view());
- impl->webview()->settings()->setForceCompositingMode(true);
impl->EnableScreenMetricsEmulation(params);
}
diff --git a/content/renderer/devtools/devtools_agent.h b/content/renderer/devtools/devtools_agent.h
index 5fd85bc4eb..4c285cdbd1 100644
--- a/content/renderer/devtools/devtools_agent.h
+++ b/content/renderer/devtools/devtools_agent.h
@@ -54,6 +54,8 @@ class DevToolsAgent : public RenderViewObserver,
virtual void saveAgentRuntimeState(const blink::WebString& state) OVERRIDE;
virtual blink::WebDevToolsAgentClient::WebKitClientMessageLoop*
createClientMessageLoop() OVERRIDE;
+ virtual void willEnterDebugLoop() OVERRIDE;
+ virtual void didExitDebugLoop() OVERRIDE;
virtual void visitAllocatedObjects(AllocatedObjectVisitor* visitor) OVERRIDE;
typedef void (*TraceEventCallback)(
@@ -101,6 +103,7 @@ class DevToolsAgent : public RenderViewObserver,
bool is_attached_;
bool is_devtools_client_;
int32 gpu_route_id_;
+ bool paused_in_mouse_move_;
static base::subtle::AtomicWord /* TraceEventCallback */ event_callback_;
diff --git a/content/renderer/gpu/compositor_output_surface.cc b/content/renderer/gpu/compositor_output_surface.cc
index c6424415e1..a2929643ac 100644
--- a/content/renderer/gpu/compositor_output_surface.cc
+++ b/content/renderer/gpu/compositor_output_surface.cc
@@ -105,7 +105,7 @@ bool CompositorOutputSurface::BindToClient(
if (!context_provider()) {
// Without a GPU context, the memory policy otherwise wouldn't be set.
client->SetMemoryPolicy(cc::ManagedMemoryPolicy(
- 64 * 1024 * 1024,
+ 128 * 1024 * 1024,
gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE,
cc::ManagedMemoryPolicy::kDefaultNumResourcesLimit));
}
diff --git a/content/renderer/gpu/compositor_software_output_device.cc b/content/renderer/gpu/compositor_software_output_device.cc
index a8c893b18d..c656d45271 100644
--- a/content/renderer/gpu/compositor_software_output_device.cc
+++ b/content/renderer/gpu/compositor_software_output_device.cc
@@ -78,7 +78,7 @@ unsigned CompositorSoftwareOutputDevice::GetNextId() {
CompositorSoftwareOutputDevice::Buffer*
CompositorSoftwareOutputDevice::CreateBuffer() {
scoped_ptr<cc::SharedBitmap> shared_bitmap =
- shared_bitmap_manager_->AllocateSharedBitmap(viewport_size_);
+ shared_bitmap_manager_->AllocateSharedBitmap(viewport_pixel_size_);
CHECK(shared_bitmap);
return new Buffer(GetNextId(), shared_bitmap.Pass());
}
@@ -94,10 +94,14 @@ size_t CompositorSoftwareOutputDevice::FindFreeBuffer(size_t hint) {
return buffers_.size() - 1;
}
-void CompositorSoftwareOutputDevice::Resize(const gfx::Size& viewport_size) {
+void CompositorSoftwareOutputDevice::Resize(
+ const gfx::Size& viewport_pixel_size,
+ float scale_factor) {
DCHECK(CalledOnValidThread());
- if (viewport_size_ == viewport_size)
+ scale_factor_ = scale_factor;
+
+ if (viewport_pixel_size_ == viewport_pixel_size)
return;
// Keep non-ACKed buffers in awaiting_ack_ until they get acknowledged.
@@ -110,7 +114,7 @@ void CompositorSoftwareOutputDevice::Resize(const gfx::Size& viewport_size) {
buffers_.clear();
current_index_ = -1;
- viewport_size_ = viewport_size;
+ viewport_pixel_size_ = viewport_pixel_size;
}
void CompositorSoftwareOutputDevice::DiscardBackbuffer() {
@@ -141,14 +145,14 @@ SkCanvas* CompositorSoftwareOutputDevice::BeginPaint(
current->SetFree(false);
// Set up a canvas for the current front buffer.
- SkImageInfo info = SkImageInfo::MakeN32Premul(viewport_size_.width(),
- viewport_size_.height());
+ SkImageInfo info = SkImageInfo::MakeN32Premul(viewport_pixel_size_.width(),
+ viewport_pixel_size_.height());
SkBitmap bitmap;
bitmap.installPixels(info, current->memory(), info.minRowBytes());
canvas_ = skia::AdoptRef(new SkCanvas(bitmap));
if (!previous) {
- DCHECK(damage_rect == gfx::Rect(viewport_size_));
+ DCHECK(damage_rect == gfx::Rect(viewport_pixel_size_));
} else {
// Find the smallest damage region that needs
// to be copied from the |previous| buffer.
@@ -157,15 +161,15 @@ SkCanvas* CompositorSoftwareOutputDevice::BeginPaint(
current->FindDamageDifferenceFrom(previous, &region) ||
previous->FindDamageDifferenceFrom(current, &region);
if (!found)
- region = SkRegion(RectToSkIRect(gfx::Rect(viewport_size_)));
+ region = SkRegion(RectToSkIRect(gfx::Rect(viewport_pixel_size_)));
region.op(RectToSkIRect(damage_rect), SkRegion::kDifference_Op);
// Copy over the damage region.
if (!region.isEmpty()) {
SkBitmap back_bitmap;
back_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- viewport_size_.width(),
- viewport_size_.height());
+ viewport_pixel_size_.width(),
+ viewport_pixel_size_.height());
back_bitmap.setPixels(previous->memory());
for (SkRegion::Iterator it(region); !it.done(); it.next()) {
@@ -181,7 +185,7 @@ SkCanvas* CompositorSoftwareOutputDevice::BeginPaint(
for (size_t i = 0; i < buffers_.size(); ++i) {
Buffer* buffer = buffers_[i];
if (buffer->parent() == current)
- buffer->SetParent(NULL, gfx::Rect(viewport_size_));
+ buffer->SetParent(NULL, gfx::Rect(viewport_pixel_size_));
}
damage_rect_ = damage_rect;
@@ -195,7 +199,7 @@ void CompositorSoftwareOutputDevice::EndPaint(
Buffer* buffer = buffers_[current_index_];
frame_data->id = buffer->id();
- frame_data->size = viewport_size_;
+ frame_data->size = viewport_pixel_size_;
frame_data->damage_rect = damage_rect_;
frame_data->bitmap_id = buffer->shared_bitmap_id();
}
diff --git a/content/renderer/gpu/compositor_software_output_device.h b/content/renderer/gpu/compositor_software_output_device.h
index 646349ad45..75bda0ce53 100644
--- a/content/renderer/gpu/compositor_software_output_device.h
+++ b/content/renderer/gpu/compositor_software_output_device.h
@@ -31,7 +31,7 @@ public:
CompositorSoftwareOutputDevice();
virtual ~CompositorSoftwareOutputDevice();
- virtual void Resize(const gfx::Size& size) OVERRIDE;
+ virtual void Resize(const gfx::Size& pixel_size, float scale_factor) OVERRIDE;
virtual SkCanvas* BeginPaint(const gfx::Rect& damage_rect) OVERRIDE;
virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE;
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc
index d57ab44e0f..f649db9187 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -214,118 +214,129 @@ class GpuBenchmarkingWrapper : public v8::Extension {
public:
GpuBenchmarkingWrapper() :
v8::Extension(kGpuBenchmarkingExtensionName,
- "if (typeof(chrome) == 'undefined') {"
- " chrome = {};"
- "};"
- "if (typeof(chrome.gpuBenchmarking) == 'undefined') {"
- " chrome.gpuBenchmarking = {};"
- "};"
- "chrome.gpuBenchmarking.setNeedsDisplayOnAllLayers = function() {"
- " native function SetNeedsDisplayOnAllLayers();"
- " return SetNeedsDisplayOnAllLayers();"
- "};"
- "chrome.gpuBenchmarking.setRasterizeOnlyVisibleContent = function() {"
- " native function SetRasterizeOnlyVisibleContent();"
- " return SetRasterizeOnlyVisibleContent();"
- "};"
- "chrome.gpuBenchmarking.printToSkPicture = function(dirname) {"
- " native function PrintToSkPicture();"
- " return PrintToSkPicture(dirname);"
- "};"
- "chrome.gpuBenchmarking.DEFAULT_INPUT = 0;"
- "chrome.gpuBenchmarking.TOUCH_INPUT = 1;"
- "chrome.gpuBenchmarking.MOUSE_INPUT = 2;"
- "chrome.gpuBenchmarking.gestureSourceTypeSupported = "
- " function(gesture_source_type) {"
- " native function GestureSourceTypeSupported();"
- " return GestureSourceTypeSupported(gesture_source_type);"
- "};"
- "chrome.gpuBenchmarking.smoothScrollBy = "
- " function(pixels_to_scroll, opt_callback, opt_start_x,"
- " opt_start_y, opt_gesture_source_type,"
- " opt_direction, opt_speed_in_pixels_s) {"
- " pixels_to_scroll = pixels_to_scroll || 0;"
- " callback = opt_callback || function() { };"
- " gesture_source_type = opt_gesture_source_type ||"
- " chrome.gpuBenchmarking.DEFAULT_INPUT;"
- " direction = opt_direction || 'down';"
- " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
- " native function BeginSmoothScroll();"
- " return BeginSmoothScroll(pixels_to_scroll, callback,"
- " gesture_source_type, direction,"
- " speed_in_pixels_s, true,"
- " opt_start_x, opt_start_y);"
- "};"
- "chrome.gpuBenchmarking.swipe = "
- " function(direction, distance, opt_callback,"
- " opt_start_x, opt_start_y,"
- " opt_speed_in_pixels_s) {"
- " direction = direction || 'up';"
- " distance = distance || 0;"
- " callback = opt_callback || function() { };"
- " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
- " native function BeginSmoothScroll();"
- " return BeginSmoothScroll(-distance, callback,"
- " chrome.gpuBenchmarking.TOUCH_INPUT,"
- " direction, speed_in_pixels_s, false,"
- " opt_start_x, opt_start_y);"
- "};"
- "chrome.gpuBenchmarking.scrollBounce = "
- " function(direction, distance, overscroll, opt_repeat_count,"
- " opt_callback, opt_start_x, opt_start_y,"
- " opt_speed_in_pixels_s) {"
- " direction = direction || 'down';"
- " distance = distance || 0;"
- " overscroll = overscroll || 0;"
- " repeat_count = opt_repeat_count || 1;"
- " callback = opt_callback || function() { };"
- " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
- " native function BeginScrollBounce();"
- " return BeginScrollBounce(direction, distance, overscroll,"
- " repeat_count, callback,"
- " speed_in_pixels_s,"
- " opt_start_x, opt_start_y);"
- "};"
- "chrome.gpuBenchmarking.pinchBy = "
- " function(zoom_in, pixels_to_cover, anchor_x, anchor_y,"
- " opt_callback, opt_relative_pointer_speed_in_pixels_s) {"
- " callback = opt_callback || function() { };"
- " relative_pointer_speed_in_pixels_s ="
- " opt_relative_pointer_speed_in_pixels_s || 800;"
- " native function BeginPinch();"
- " return BeginPinch(zoom_in, pixels_to_cover,"
- " anchor_x, anchor_y, callback,"
- " relative_pointer_speed_in_pixels_s);"
- "};"
- "chrome.gpuBenchmarking.tap = "
- " function(position_x, position_y, opt_callback, opt_duration_ms,"
- " opt_gesture_source_type) {"
- " callback = opt_callback || function() { };"
- " duration_ms = opt_duration_ms || 50;"
- " gesture_source_type = opt_gesture_source_type ||"
- " chrome.gpuBenchmarking.DEFAULT_INPUT;"
- " native function BeginTap();"
- " return BeginTap(position_x, position_y, callback, duration_ms,"
- " gesture_source_type);"
- "};"
- "chrome.gpuBenchmarking.beginWindowSnapshotPNG = function(callback) {"
- " native function BeginWindowSnapshotPNG();"
- " BeginWindowSnapshotPNG(callback);"
- "};"
- "chrome.gpuBenchmarking.clearImageCache = function() {"
- " native function ClearImageCache();"
- " ClearImageCache();"
- "};"
- "chrome.gpuBenchmarking.runMicroBenchmark ="
- " function(name, callback, opt_arguments) {"
- " arguments = opt_arguments || {};"
- " native function RunMicroBenchmark();"
- " return RunMicroBenchmark(name, callback, arguments);"
- "};"
- "chrome.gpuBenchmarking.hasGpuProcess = function() {"
- " native function HasGpuProcess();"
- " return HasGpuProcess();"
- "};") {}
+ "if (typeof(chrome) == 'undefined') {"
+ " chrome = {};"
+ "};"
+ "if (typeof(chrome.gpuBenchmarking) == 'undefined') {"
+ " chrome.gpuBenchmarking = {};"
+ "};"
+ "chrome.gpuBenchmarking.setNeedsDisplayOnAllLayers = function() {"
+ " native function SetNeedsDisplayOnAllLayers();"
+ " return SetNeedsDisplayOnAllLayers();"
+ "};"
+ "chrome.gpuBenchmarking.setRasterizeOnlyVisibleContent = "
+ "function() {"
+ " native function SetRasterizeOnlyVisibleContent();"
+ " return SetRasterizeOnlyVisibleContent();"
+ "};"
+ "chrome.gpuBenchmarking.printToSkPicture = function(dirname) {"
+ " native function PrintToSkPicture();"
+ " return PrintToSkPicture(dirname);"
+ "};"
+ "chrome.gpuBenchmarking.DEFAULT_INPUT = 0;"
+ "chrome.gpuBenchmarking.TOUCH_INPUT = 1;"
+ "chrome.gpuBenchmarking.MOUSE_INPUT = 2;"
+ "chrome.gpuBenchmarking.gestureSourceTypeSupported = "
+ " function(gesture_source_type) {"
+ " native function GestureSourceTypeSupported();"
+ " return GestureSourceTypeSupported(gesture_source_type);"
+ "};"
+ "chrome.gpuBenchmarking.smoothScrollBy = "
+ " function(pixels_to_scroll, opt_callback, opt_start_x,"
+ " opt_start_y, opt_gesture_source_type,"
+ " opt_direction, opt_speed_in_pixels_s) {"
+ " pixels_to_scroll = pixels_to_scroll || 0;"
+ " callback = opt_callback || function() { };"
+ " gesture_source_type = opt_gesture_source_type ||"
+ " chrome.gpuBenchmarking.DEFAULT_INPUT;"
+ " direction = opt_direction || 'down';"
+ " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
+ " native function BeginSmoothScroll();"
+ " return BeginSmoothScroll(pixels_to_scroll, callback,"
+ " gesture_source_type, direction,"
+ " speed_in_pixels_s, true,"
+ " opt_start_x, opt_start_y);"
+ "};"
+ "chrome.gpuBenchmarking.swipe = "
+ " function(direction, distance, opt_callback,"
+ " opt_start_x, opt_start_y,"
+ " opt_speed_in_pixels_s) {"
+ " direction = direction || 'up';"
+ " distance = distance || 0;"
+ " callback = opt_callback || function() { };"
+ " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
+ " native function BeginSmoothScroll();"
+ " return BeginSmoothScroll(-distance, callback,"
+ " chrome.gpuBenchmarking.TOUCH_INPUT,"
+ " direction, speed_in_pixels_s, false,"
+ " opt_start_x, opt_start_y);"
+ "};"
+ "chrome.gpuBenchmarking.scrollBounce = "
+ " function(direction, distance, overscroll, opt_repeat_count,"
+ " opt_callback, opt_start_x, opt_start_y,"
+ " opt_speed_in_pixels_s) {"
+ " direction = direction || 'down';"
+ " distance = distance || 0;"
+ " overscroll = overscroll || 0;"
+ " repeat_count = opt_repeat_count || 1;"
+ " callback = opt_callback || function() { };"
+ " speed_in_pixels_s = opt_speed_in_pixels_s || 800;"
+ " native function BeginScrollBounce();"
+ " return BeginScrollBounce(direction, distance, overscroll,"
+ " repeat_count, callback,"
+ " speed_in_pixels_s,"
+ " opt_start_x, opt_start_y);"
+ "};"
+ // TODO(dominikg): Remove once JS interface changes have rolled into
+ // stable.
+ "chrome.gpuBenchmarking.newPinchInterface = true;"
+ "chrome.gpuBenchmarking.pinchBy = "
+ " function(scale_factor, anchor_x, anchor_y,"
+ " opt_callback, "
+ "opt_relative_pointer_speed_in_pixels_s) {"
+ " callback = opt_callback || function() { };"
+ " relative_pointer_speed_in_pixels_s ="
+ " opt_relative_pointer_speed_in_pixels_s || 800;"
+ " native function BeginPinch();"
+ " return BeginPinch(scale_factor, anchor_x, anchor_y, callback,"
+ " relative_pointer_speed_in_pixels_s);"
+ "};"
+ "chrome.gpuBenchmarking.tap = "
+ " function(position_x, position_y, opt_callback, "
+ "opt_duration_ms,"
+ " opt_gesture_source_type) {"
+ " callback = opt_callback || function() { };"
+ " duration_ms = opt_duration_ms || 50;"
+ " gesture_source_type = opt_gesture_source_type ||"
+ " chrome.gpuBenchmarking.DEFAULT_INPUT;"
+ " native function BeginTap();"
+ " return BeginTap(position_x, position_y, callback, duration_ms,"
+ " gesture_source_type);"
+ "};"
+ "chrome.gpuBenchmarking.beginWindowSnapshotPNG = "
+ "function(callback) {"
+ " native function BeginWindowSnapshotPNG();"
+ " BeginWindowSnapshotPNG(callback);"
+ "};"
+ "chrome.gpuBenchmarking.clearImageCache = function() {"
+ " native function ClearImageCache();"
+ " ClearImageCache();"
+ "};"
+ "chrome.gpuBenchmarking.runMicroBenchmark ="
+ " function(name, callback, opt_arguments) {"
+ " arguments = opt_arguments || {};"
+ " native function RunMicroBenchmark();"
+ " return RunMicroBenchmark(name, callback, arguments);"
+ "};"
+ "chrome.gpuBenchmarking.sendMessageToMicroBenchmark ="
+ " function(id, arguments) {"
+ " native function SendMessageToMicroBenchmark();"
+ " return SendMessageToMicroBenchmark(id, arguments);"
+ "};"
+ "chrome.gpuBenchmarking.hasGpuProcess = function() {"
+ " native function HasGpuProcess();"
+ " return HasGpuProcess();"
+ "};") {}
virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate(
v8::Isolate* isolate,
@@ -356,6 +367,9 @@ class GpuBenchmarkingWrapper : public v8::Extension {
return v8::FunctionTemplate::New(isolate, ClearImageCache);
if (name->Equals(v8::String::NewFromUtf8(isolate, "RunMicroBenchmark")))
return v8::FunctionTemplate::New(isolate, RunMicroBenchmark);
+ if (name->Equals(
+ v8::String::NewFromUtf8(isolate, "SendMessageToMicroBenchmark")))
+ return v8::FunctionTemplate::New(isolate, SendMessageToMicroBenchmark);
if (name->Equals(v8::String::NewFromUtf8(isolate, "HasGpuProcess")))
return v8::FunctionTemplate::New(isolate, HasGpuProcess);
@@ -640,13 +654,12 @@ class GpuBenchmarkingWrapper : public v8::Extension {
return;
int arglen = args.Length();
- if (arglen < 6 ||
- !args[0]->IsBoolean() ||
+ if (arglen < 5 ||
+ !args[0]->IsNumber() ||
!args[1]->IsNumber() ||
!args[2]->IsNumber() ||
- !args[3]->IsNumber() ||
- !args[4]->IsFunction() ||
- !args[5]->IsNumber()) {
+ !args[3]->IsFunction() ||
+ !args[4]->IsNumber()) {
args.GetReturnValue().Set(false);
return;
}
@@ -657,17 +670,15 @@ class GpuBenchmarkingWrapper : public v8::Extension {
// Convert coordinates from CSS pixels to density independent pixels (DIPs).
float page_scale_factor = context.web_view()->pageScaleFactor();
- gesture_params->zoom_in = args[0]->BooleanValue();
- gesture_params->total_num_pixels_covered =
- args[1]->IntegerValue() * page_scale_factor;
+ gesture_params->scale_factor = args[0]->NumberValue();
gesture_params->anchor.SetPoint(
- args[2]->IntegerValue() * page_scale_factor,
- args[3]->IntegerValue() * page_scale_factor);
+ args[1]->IntegerValue() * page_scale_factor,
+ args[2]->IntegerValue() * page_scale_factor);
gesture_params->relative_pointer_speed_in_pixels_s =
- args[5]->IntegerValue();
+ args[4]->IntegerValue();
v8::Local<v8::Function> callback_local =
- v8::Local<v8::Function>::Cast(args[4]);
+ v8::Local<v8::Function>::Cast(args[3]);
scoped_refptr<CallbackAndContext> callback_and_context =
new CallbackAndContext(args.GetIsolate(),
@@ -843,7 +854,7 @@ class GpuBenchmarkingWrapper : public v8::Extension {
const v8::FunctionCallbackInfo<v8::Value>& args) {
GpuBenchmarkingContext context;
if (!context.Init(true)) {
- args.GetReturnValue().Set(false);
+ args.GetReturnValue().Set(0);
return;
}
@@ -851,7 +862,7 @@ class GpuBenchmarkingWrapper : public v8::Extension {
!args[0]->IsString() ||
!args[1]->IsFunction() ||
!args[2]->IsObject()) {
- args.GetReturnValue().Set(false);
+ args.GetReturnValue().Set(0);
return;
}
@@ -877,6 +888,32 @@ class GpuBenchmarkingWrapper : public v8::Extension {
base::Bind(&OnMicroBenchmarkCompleted, callback_and_context)));
}
+ static void SendMessageToMicroBenchmark(
+ const v8::FunctionCallbackInfo<v8::Value>& args) {
+ GpuBenchmarkingContext context;
+ if (!context.Init(true)) {
+ args.GetReturnValue().Set(0);
+ return;
+ }
+
+ if (args.Length() != 2 || !args[0]->IsNumber() || !args[1]->IsObject()) {
+ args.GetReturnValue().Set(0);
+ return;
+ }
+
+ scoped_ptr<V8ValueConverter> converter =
+ make_scoped_ptr(V8ValueConverter::create());
+ v8::Handle<v8::Context> v8_context =
+ context.web_frame()->mainWorldScriptContext();
+ scoped_ptr<base::Value> value =
+ make_scoped_ptr(converter->FromV8Value(args[1], v8_context));
+
+ int id = 0;
+ converter->FromV8Value(args[0], v8_context)->GetAsInteger(&id);
+ args.GetReturnValue().Set(
+ context.compositor()->SendMessageToMicroBenchmark(id, value.Pass()));
+ }
+
static void HasGpuProcess(const v8::FunctionCallbackInfo<v8::Value>& args) {
GpuChannelHost* gpu_channel = RenderThreadImpl::current()->GetGpuChannel();
args.GetReturnValue().Set(!!gpu_channel);
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index 9ea0cda888..eac6a28184 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -355,10 +355,6 @@ void RenderWidgetCompositor::UpdateAnimations(base::TimeTicks time) {
layer_tree_host_->UpdateClientAnimations(time);
}
-void RenderWidgetCompositor::Composite(base::TimeTicks frame_begin_time) {
- layer_tree_host_->Composite(frame_begin_time);
-}
-
void RenderWidgetCompositor::SetNeedsDisplayOnAllLayers() {
layer_tree_host_->SetNeedsDisplayOnAllLayers();
}
@@ -400,6 +396,11 @@ RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor(
latency, layer_tree_host_.get(), NULL));
}
+void RenderWidgetCompositor::QueueSwapPromise(
+ scoped_ptr<cc::SwapPromise> swap_promise) {
+ layer_tree_host_->QueueSwapPromise(swap_promise.Pass());
+}
+
int RenderWidgetCompositor::GetLayerTreeId() const {
return layer_tree_host_->id();
}
@@ -412,13 +413,19 @@ const cc::Layer* RenderWidgetCompositor::GetRootLayer() const {
return layer_tree_host_->root_layer();
}
-bool RenderWidgetCompositor::ScheduleMicroBenchmark(
+int RenderWidgetCompositor::ScheduleMicroBenchmark(
const std::string& name,
scoped_ptr<base::Value> value,
const base::Callback<void(scoped_ptr<base::Value>)>& callback) {
return layer_tree_host_->ScheduleMicroBenchmark(name, value.Pass(), callback);
}
+bool RenderWidgetCompositor::SendMessageToMicroBenchmark(
+ int id,
+ scoped_ptr<base::Value> value) {
+ return layer_tree_host_->SendMessageToMicroBenchmark(id, value.Pass());
+}
+
void RenderWidgetCompositor::Initialize(cc::LayerTreeSettings settings) {
scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy;
RenderThreadImpl* render_thread = RenderThreadImpl::current();
@@ -458,6 +465,11 @@ void RenderWidgetCompositor::setViewportSize(
layer_tree_host_->SetViewportSize(device_viewport_size);
}
+void RenderWidgetCompositor::setViewportSize(
+ const WebSize& device_viewport_size) {
+ layer_tree_host_->SetViewportSize(device_viewport_size);
+}
+
WebSize RenderWidgetCompositor::layoutViewportSize() const {
return layer_tree_host_->device_viewport_size();
}
@@ -559,12 +571,6 @@ void RenderWidgetCompositor::clearViewportLayers() {
scoped_refptr<cc::Layer>());
}
-bool RenderWidgetCompositor::compositeAndReadback(
- void *pixels, const WebRect& rect_in_device_viewport) {
- return layer_tree_host_->CompositeAndReadback(pixels,
- rect_in_device_viewport);
-}
-
void CompositeAndReadbackAsyncCallback(
blink::WebCompositeAndReadbackAsyncCallback* callback,
scoped_ptr<cc::CopyOutputResult> result) {
diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h
index 6c493eaccf..4160df2de2 100644
--- a/content/renderer/gpu/render_widget_compositor.h
+++ b/content/renderer/gpu/render_widget_compositor.h
@@ -9,6 +9,7 @@
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "base/values.h"
+#include "cc/base/swap_promise.h"
#include "cc/base/swap_promise_monitor.h"
#include "cc/input/top_controls_state.h"
#include "cc/trees/layer_tree_host_client.h"
@@ -46,7 +47,6 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView,
void SetSuppressScheduleComposite(bool suppress);
bool BeginMainFrameRequested() const;
void UpdateAnimations(base::TimeTicks time);
- void Composite(base::TimeTicks frame_begin_time);
void SetNeedsDisplayOnAllLayers();
void SetRasterizeOnlyVisibleContent();
void UpdateTopControlsState(cc::TopControlsState constraints,
@@ -64,13 +64,17 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView,
// into a LatencyInfoSwapPromise.
scoped_ptr<cc::SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
ui::LatencyInfo* latency);
+ // Calling QueueSwapPromise() to directly queue a SwapPromise into
+ // LayerTreeHost.
+ void QueueSwapPromise(scoped_ptr<cc::SwapPromise> swap_promise);
int GetLayerTreeId() const;
void NotifyInputThrottledUntilCommit();
const cc::Layer* GetRootLayer() const;
- bool ScheduleMicroBenchmark(
+ int ScheduleMicroBenchmark(
const std::string& name,
scoped_ptr<base::Value> value,
const base::Callback<void(scoped_ptr<base::Value>)>& callback);
+ bool SendMessageToMicroBenchmark(int id, scoped_ptr<base::Value> value);
// WebLayerTreeView implementation.
virtual void setSurfaceReady();
@@ -79,6 +83,7 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView,
virtual void setViewportSize(
const blink::WebSize& unused_deprecated,
const blink::WebSize& device_viewport_size);
+ virtual void setViewportSize(const blink::WebSize& device_viewport_size);
virtual blink::WebSize layoutViewportSize() const;
virtual blink::WebSize deviceViewportSize() const;
virtual blink::WebFloatPoint adjustEventPointForPinchZoom(
@@ -100,7 +105,6 @@ class RenderWidgetCompositor : public blink::WebLayerTreeView,
virtual void setNeedsAnimate();
virtual bool commitRequested() const;
virtual void didStopFlinging();
- virtual bool compositeAndReadback(void *pixels, const blink::WebRect& rect);
virtual void compositeAndReadbackAsync(
blink::WebCompositeAndReadbackAsyncCallback* callback);
virtual void finishAllRendering();
diff --git a/content/renderer/history_controller.cc b/content/renderer/history_controller.cc
index b120198871..4c171510fc 100644
--- a/content/renderer/history_controller.cc
+++ b/content/renderer/history_controller.cc
@@ -76,14 +76,6 @@ void HistoryController::GoToEntry(scoped_ptr<HistoryEntry> target_entry,
// navigation, so we can safely assume this is the different document case.
different_document_loads.push_back(
std::make_pair(main_frame, provisional_entry_->root()));
- } else if (different_document_loads.empty()) {
- // If we have only same document navigations to perform, immediately
- // declare the load "committed" by updating the current entry.
- // TODO(japhet): This is a historical quirk, because same-document
- // history navigations call UpdateForCommit() with commit type
- // HistoryInertCommit. If that is fixed, we can remove this block.
- previous_entry_.reset(current_entry_.release());
- current_entry_.reset(provisional_entry_.release());
}
for (size_t i = 0; i < same_document_loads.size(); ++i) {
@@ -160,7 +152,6 @@ void HistoryController::UpdateForCommit(RenderFrameImpl* frame,
if (commit_type == blink::WebBackForwardCommit) {
if (!provisional_entry_)
return;
- previous_entry_.reset(current_entry_.release());
current_entry_.reset(provisional_entry_.release());
} else if (commit_type == blink::WebStandardCommit) {
CreateNewBackForwardItem(frame, item, navigation_within_page);
@@ -173,10 +164,6 @@ HistoryEntry* HistoryController::GetCurrentEntry() {
return current_entry_.get();
}
-HistoryEntry* HistoryController::GetPreviousEntry() {
- return previous_entry_.get();
-}
-
WebHistoryItem HistoryController::GetItemForNewChildFrame(
RenderFrameImpl* frame) const {
if (!current_entry_)
@@ -200,8 +187,7 @@ void HistoryController::CreateNewBackForwardItem(
current_entry_.reset(
new HistoryEntry(new_item, target_frame->GetRoutingID()));
} else {
- previous_entry_.reset(current_entry_.release());
- current_entry_.reset(previous_entry_->CloneAndReplace(
+ current_entry_.reset(current_entry_->CloneAndReplace(
new_item, clone_children_of_target, target_frame, render_view_));
}
}
diff --git a/content/renderer/history_controller.h b/content/renderer/history_controller.h
index 730ae439c5..97969318af 100644
--- a/content/renderer/history_controller.h
+++ b/content/renderer/history_controller.h
@@ -118,7 +118,6 @@ class CONTENT_EXPORT HistoryController {
bool navigation_within_page);
HistoryEntry* GetCurrentEntry();
- HistoryEntry* GetPreviousEntry();
blink::WebHistoryItem GetItemForNewChildFrame(RenderFrameImpl* frame) const;
void RemoveChildrenForRedirect(RenderFrameImpl* frame);
@@ -138,7 +137,6 @@ class CONTENT_EXPORT HistoryController {
RenderViewImpl* render_view_;
scoped_ptr<HistoryEntry> current_entry_;
- scoped_ptr<HistoryEntry> previous_entry_;
scoped_ptr<HistoryEntry> provisional_entry_;
DISALLOW_COPY_AND_ASSIGN(HistoryController);
diff --git a/content/renderer/history_serialization.cc b/content/renderer/history_serialization.cc
index dd78609bc4..56325a681e 100644
--- a/content/renderer/history_serialization.cc
+++ b/content/renderer/history_serialization.cc
@@ -7,6 +7,7 @@
#include "content/common/page_state_serialization.h"
#include "content/public/common/page_state.h"
#include "content/renderer/history_entry.h"
+#include "third_party/WebKit/public/platform/WebFloatPoint.h"
#include "third_party/WebKit/public/platform/WebHTTPBody.h"
#include "third_party/WebKit/public/platform/WebPoint.h"
#include "third_party/WebKit/public/platform/WebString.h"
@@ -88,6 +89,7 @@ void GenerateFrameStateFromItem(const WebHistoryItem& item,
state->target = item.target();
if (!item.stateObject().isNull())
state->state_object = item.stateObject().toString();
+ state->pinch_viewport_scroll_offset = item.pinchViewportScrollOffset();
state->scroll_offset = item.scrollOffset();
state->item_sequence_number = item.itemSequenceNumber();
state->document_sequence_number =
@@ -131,6 +133,7 @@ void RecursivelyGenerateHistoryItem(const ExplodedFrameState& state,
WebSerializedScriptValue::fromString(state.state_object));
}
item.setDocumentState(state.document_state);
+ item.setPinchViewportScrollOffset(state.pinch_viewport_scroll_offset);
item.setScrollOffset(state.scroll_offset);
item.setPageScaleFactor(state.page_scale_factor);
diff --git a/content/renderer/ico_image_decoder_unittest.cc b/content/renderer/ico_image_decoder_unittest.cc
index 1cfb6fe2ff..b59cfe3825 100644
--- a/content/renderer/ico_image_decoder_unittest.cc
+++ b/content/renderer/ico_image_decoder_unittest.cc
@@ -18,8 +18,7 @@ class ICOImageDecoderTest : public ImageDecoderTest {
}
};
-// crbug.com/371332
-TEST_F(ICOImageDecoderTest, DISABLED_Decoding) {
+TEST_F(ICOImageDecoderTest, Decoding) {
TestDecoding();
}
diff --git a/content/renderer/image_loading_helper.cc b/content/renderer/image_loading_helper.cc
index b036f0b2ce..1eb98dc57a 100644
--- a/content/renderer/image_loading_helper.cc
+++ b/content/renderer/image_loading_helper.cc
@@ -8,7 +8,6 @@
#include "base/message_loop/message_loop.h"
#include "content/child/image_decoder.h"
#include "content/common/image_messages.h"
-#include "content/public/common/url_constants.h"
#include "content/public/renderer/render_frame.h"
#include "content/renderer/fetchers/multi_resolution_image_resource_fetcher.h"
#include "net/base/data_url.h"
@@ -20,6 +19,7 @@
#include "ui/gfx/favicon_size.h"
#include "ui/gfx/size.h"
#include "ui/gfx/skbitmap_operations.h"
+#include "url/url_constants.h"
using blink::WebFrame;
using blink::WebVector;
@@ -110,7 +110,7 @@ void ImageLoadingHelper::OnDownloadImage(int id,
uint32_t max_image_size) {
std::vector<SkBitmap> result_images;
std::vector<gfx::Size> result_original_image_sizes;
- if (image_url.SchemeIs(kDataScheme)) {
+ if (image_url.SchemeIs(url::kDataScheme)) {
SkBitmap data_image = ImageFromDataUrl(image_url);
if (!data_image.empty()) {
result_images.push_back(ResizeImage(data_image, max_image_size));
diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc
index cd5a8cd36c..06d07a9ba1 100644
--- a/content/renderer/input/input_event_filter.cc
+++ b/content/renderer/input/input_event_filter.cc
@@ -4,6 +4,7 @@
#include "content/renderer/input/input_event_filter.h"
+#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
@@ -45,7 +46,8 @@ InputEventFilter::InputEventFilter(
main_listener_(main_listener),
sender_(NULL),
target_loop_(target_loop),
- overscroll_notifications_enabled_(false) {
+ overscroll_notifications_enabled_(false),
+ current_overscroll_params_(NULL) {
DCHECK(target_loop_.get());
overscroll_notifications_enabled_ =
CommandLine::ForCurrentProcess()->HasSwitch(
@@ -73,11 +75,18 @@ void InputEventFilter::DidOverscroll(int routing_id,
if (!overscroll_notifications_enabled_)
return;
- SendMessage(ViewHostMsg_DidOverscroll(routing_id, params));
+ if (current_overscroll_params_) {
+ current_overscroll_params_->reset(new DidOverscrollParams(params));
+ return;
+ }
+
+ SendMessage(scoped_ptr<IPC::Message>(
+ new InputHostMsg_DidOverscroll(routing_id, params)));
}
void InputEventFilter::DidStopFlinging(int routing_id) {
- SendMessage(ViewHostMsg_DidStopFlinging(routing_id));
+ SendMessage(
+ scoped_ptr<IPC::Message>(new ViewHostMsg_DidStopFlinging(routing_id)));
}
void InputEventFilter::OnFilterAdded(IPC::Channel* channel) {
@@ -121,6 +130,7 @@ bool InputEventFilter::OnMessageReceived(const IPC::Message& message) {
}
InputEventFilter::~InputEventFilter() {
+ DCHECK(!current_overscroll_params_);
}
void InputEventFilter::ForwardToMainListener(const IPC::Message& message) {
@@ -146,17 +156,25 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) {
}
int routing_id = message.routing_id();
- ui::LatencyInfo latency_info;
- const WebInputEvent* event = NULL;
- bool is_keyboard_shortcut;
- if (!InputMsg_HandleInputEvent::Read(
- &message, &event, &latency_info, &is_keyboard_shortcut))
+ InputMsg_HandleInputEvent::Param params;
+ if (!InputMsg_HandleInputEvent::Read(&message, &params))
return;
+ const WebInputEvent* event = params.a;
+ ui::LatencyInfo latency_info = params.b;
+ bool is_keyboard_shortcut = params.c;
DCHECK(event);
- InputEventAckState ack = handler_.Run(routing_id, event, &latency_info);
+ // Intercept |DidOverscroll| notifications, bundling any triggered overscroll
+ // response with the input event ack.
+ scoped_ptr<DidOverscrollParams> overscroll_params;
+ base::AutoReset<scoped_ptr<DidOverscrollParams>*>
+ auto_reset_current_overscroll_params(&current_overscroll_params_,
+ &overscroll_params);
+
+ InputEventAckState ack_state = handler_.Run(routing_id, event, &latency_info);
- if (ack == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) {
+ if (ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) {
+ DCHECK(!overscroll_params);
TRACE_EVENT_INSTANT0(
"input",
"InputEventFilter::ForwardToHandler::ForwardToMainListener",
@@ -170,33 +188,34 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) {
return;
}
- if (!WebInputEventTraits::IgnoresAckDisposition(*event))
- SendACK(event->type, ack, latency_info, routing_id);
-}
+ if (WebInputEventTraits::IgnoresAckDisposition(*event))
+ return;
-void InputEventFilter::SendACK(blink::WebInputEvent::Type type,
- InputEventAckState ack_result,
- const ui::LatencyInfo& latency_info,
- int routing_id) {
- SendMessage(InputHostMsg_HandleInputEvent_ACK(
- routing_id, type, ack_result, latency_info));
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = event->type;
+ ack.state = ack_state;
+ ack.latency = latency_info;
+ ack.overscroll = overscroll_params.Pass();
+ SendMessage(scoped_ptr<IPC::Message>(
+ new InputHostMsg_HandleInputEvent_ACK(routing_id, ack)));
}
-void InputEventFilter::SendMessage(const IPC::Message& message) {
+void InputEventFilter::SendMessage(scoped_ptr<IPC::Message> message) {
DCHECK(target_loop_->BelongsToCurrentThread());
- io_loop_->PostTask(
- FROM_HERE,
- base::Bind(&InputEventFilter::SendMessageOnIOThread, this, message));
+ io_loop_->PostTask(FROM_HERE,
+ base::Bind(&InputEventFilter::SendMessageOnIOThread,
+ this,
+ base::Passed(&message)));
}
-void InputEventFilter::SendMessageOnIOThread(const IPC::Message& message) {
+void InputEventFilter::SendMessageOnIOThread(scoped_ptr<IPC::Message> message) {
DCHECK(io_loop_->BelongsToCurrentThread());
if (!sender_)
return; // Filter was removed.
- sender_->Send(new IPC::Message(message));
+ sender_->Send(message.release());
}
} // namespace content
diff --git a/content/renderer/input/input_event_filter.h b/content/renderer/input/input_event_filter.h
index 88a8518d94..1088cf98b3 100644
--- a/content/renderer/input/input_event_filter.h
+++ b/content/renderer/input/input_event_filter.h
@@ -70,12 +70,8 @@ class CONTENT_EXPORT InputEventFilter : public InputHandlerManagerClient,
void ForwardToMainListener(const IPC::Message& message);
void ForwardToHandler(const IPC::Message& message);
- void SendACK(blink::WebInputEvent::Type type,
- InputEventAckState ack_result,
- const ui::LatencyInfo& latency_info,
- int routing_id);
- void SendMessage(const IPC::Message& message);
- void SendMessageOnIOThread(const IPC::Message& message);
+ void SendMessage(scoped_ptr<IPC::Message> message);
+ void SendMessageOnIOThread(scoped_ptr<IPC::Message> message);
scoped_refptr<base::MessageLoopProxy> main_loop_;
IPC::Listener* main_listener_;
@@ -96,6 +92,12 @@ class CONTENT_EXPORT InputEventFilter : public InputHandlerManagerClient,
// Specifies whether overscroll notifications are forwarded to the host.
bool overscroll_notifications_enabled_;
+
+ // Used to intercept overscroll notifications while an event is being
+ // dispatched. If the event causes overscroll, the overscroll metadata can be
+ // bundled in the event ack, saving an IPC. Note that we must continue
+ // supporting overscroll IPC notifications due to fling animation updates.
+ scoped_ptr<DidOverscrollParams>* current_overscroll_params_;
};
} // namespace content
diff --git a/content/renderer/input/input_event_filter_unittest.cc b/content/renderer/input/input_event_filter_unittest.cc
index 5da8b79d75..a234e793fd 100644
--- a/content/renderer/input/input_event_filter_unittest.cc
+++ b/content/renderer/input/input_event_filter_unittest.cc
@@ -178,13 +178,11 @@ TEST_F(InputEventFilterTest, Basic) {
EXPECT_EQ(kTestRoutingID, message->routing_id());
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- WebInputEvent::Type event_type = WebInputEvent::Undefined;
- InputEventAckState ack_result = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
- ui::LatencyInfo latency_info;
- EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message,
- &event_type,
- &ack_result,
- &latency_info));
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, &params));
+ WebInputEvent::Type event_type = params.a.type;
+ InputEventAckState ack_result = params.a.state;
+
EXPECT_EQ(kEvents[i].type, event_type);
EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
@@ -206,11 +204,9 @@ TEST_F(InputEventFilterTest, Basic) {
const IPC::Message& message = message_recorder_.message_at(i);
ASSERT_EQ(InputMsg_HandleInputEvent::ID, message.type());
- const WebInputEvent* event = NULL;
- ui::LatencyInfo latency_info;
- bool is_kbd_shortcut;
- EXPECT_TRUE(InputMsg_HandleInputEvent::Read(
- &message, &event, &latency_info, &is_kbd_shortcut));
+ InputMsg_HandleInputEvent::Param params;
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(&message, &params));
+ const WebInputEvent* event = params.a;
EXPECT_EQ(kEvents[i].size, event->size);
EXPECT_TRUE(memcmp(&kEvents[i], event, event->size) == 0);
@@ -234,13 +230,10 @@ TEST_F(InputEventFilterTest, Basic) {
EXPECT_EQ(kTestRoutingID, message->routing_id());
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- WebInputEvent::Type event_type = WebInputEvent::Undefined;
- InputEventAckState ack_result = INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
- ui::LatencyInfo latency_info;
- EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message,
- &event_type,
- &ack_result,
- &latency_info));
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ EXPECT_TRUE(InputHostMsg_HandleInputEvent_ACK::Read(message, &params));
+ WebInputEvent::Type event_type = params.a.type;
+ InputEventAckState ack_result = params.a.state;
EXPECT_EQ(kEvents[i].type, event_type);
EXPECT_EQ(ack_result, INPUT_EVENT_ACK_STATE_CONSUMED);
}
diff --git a/content/renderer/java/gin_java_bridge_dispatcher.cc b/content/renderer/java/gin_java_bridge_dispatcher.cc
new file mode 100644
index 0000000000..bacc23cc9b
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_dispatcher.cc
@@ -0,0 +1,125 @@
+// 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 "content/renderer/java/gin_java_bridge_dispatcher.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/common/gin_java_bridge_messages.h"
+#include "content/public/renderer/render_frame.h"
+#include "content/renderer/java/gin_java_bridge_object.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebView.h"
+
+namespace content {
+
+GinJavaBridgeDispatcher::GinJavaBridgeDispatcher(RenderFrame* render_frame)
+ : RenderFrameObserver(render_frame) {
+}
+
+GinJavaBridgeDispatcher::~GinJavaBridgeDispatcher() {
+}
+
+bool GinJavaBridgeDispatcher::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(GinJavaBridgeDispatcher, msg)
+ IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_AddNamedObject, OnAddNamedObject)
+ IPC_MESSAGE_HANDLER(GinJavaBridgeMsg_RemoveNamedObject, OnRemoveNamedObject)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void GinJavaBridgeDispatcher::DidClearWindowObject() {
+ for (NamedObjectMap::const_iterator iter = named_objects_.begin();
+ iter != named_objects_.end(); ++iter) {
+ // Always create a new GinJavaBridgeObject, so we don't pull any of the V8
+ // wrapper's custom properties into the context of the page we have
+ // navigated to. The old GinJavaBridgeObject will be automatically
+ // deleted after its wrapper will be collected.
+ // On the browser side, we ignore wrapper deletion events for named objects,
+ // as they are only removed upon embedder's request (RemoveNamedObject).
+ if (objects_.Lookup(iter->second))
+ objects_.Remove(iter->second);
+ GinJavaBridgeObject* object = GinJavaBridgeObject::InjectNamed(
+ render_frame()->GetWebFrame(), AsWeakPtr(), iter->first, iter->second);
+ if (object) {
+ objects_.AddWithID(object, iter->second);
+ } else {
+ // Inform the host about wrapper creation failure.
+ render_frame()->Send(new GinJavaBridgeHostMsg_ObjectWrapperDeleted(
+ routing_id(), iter->second));
+ }
+ }
+}
+
+void GinJavaBridgeDispatcher::OnAddNamedObject(
+ const std::string& name,
+ ObjectID object_id) {
+ // Added objects only become available after page reload, so here they
+ // are only added into the internal map.
+ named_objects_.insert(std::make_pair(name, object_id));
+}
+
+void GinJavaBridgeDispatcher::OnRemoveNamedObject(const std::string& name) {
+ // Removal becomes in effect on next reload. We simply removing the entry
+ // from the map here.
+ NamedObjectMap::iterator iter = named_objects_.find(name);
+ DCHECK(iter != named_objects_.end());
+ named_objects_.erase(iter);
+}
+
+void GinJavaBridgeDispatcher::GetJavaMethods(
+ ObjectID object_id,
+ std::set<std::string>* methods) {
+ render_frame()->Send(new GinJavaBridgeHostMsg_GetMethods(
+ routing_id(), object_id, methods));
+}
+
+bool GinJavaBridgeDispatcher::HasJavaMethod(ObjectID object_id,
+ const std::string& method_name) {
+ bool result;
+ render_frame()->Send(new GinJavaBridgeHostMsg_HasMethod(
+ routing_id(), object_id, method_name, &result));
+ return result;
+}
+
+scoped_ptr<base::Value> GinJavaBridgeDispatcher::InvokeJavaMethod(
+ ObjectID object_id,
+ const std::string& method_name,
+ const base::ListValue& arguments) {
+ base::ListValue result_wrapper;
+ render_frame()->Send(
+ new GinJavaBridgeHostMsg_InvokeMethod(routing_id(),
+ object_id,
+ method_name,
+ arguments,
+ &result_wrapper));
+ base::Value* result;
+ if (result_wrapper.Get(0, &result)) {
+ return scoped_ptr<base::Value>(result->DeepCopy());
+ } else {
+ return scoped_ptr<base::Value>();
+ }
+}
+
+GinJavaBridgeObject* GinJavaBridgeDispatcher::GetObject(ObjectID object_id) {
+ GinJavaBridgeObject* result = objects_.Lookup(object_id);
+ if (!result) {
+ result = GinJavaBridgeObject::InjectAnonymous(AsWeakPtr(), object_id);
+ if (result)
+ objects_.AddWithID(result, object_id);
+ }
+ return result;
+}
+
+void GinJavaBridgeDispatcher::OnGinJavaBridgeObjectDeleted(ObjectID object_id) {
+ if (!objects_.Lookup(object_id))
+ return;
+ objects_.Remove(object_id);
+ render_frame()->Send(
+ new GinJavaBridgeHostMsg_ObjectWrapperDeleted(routing_id(), object_id));
+}
+
+} // namespace content
diff --git a/content/renderer/java/gin_java_bridge_dispatcher.h b/content/renderer/java/gin_java_bridge_dispatcher.h
new file mode 100644
index 0000000000..c5348b9720
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_dispatcher.h
@@ -0,0 +1,72 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_DISPATCHER_H_
+#define CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_DISPATCHER_H_
+
+#include <map>
+#include <set>
+
+#include "base/id_map.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/values.h"
+#include "content/public/renderer/render_frame_observer.h"
+
+namespace blink {
+class WebFrame;
+}
+
+namespace content {
+
+class GinJavaBridgeObject;
+
+// This class handles injecting Java objects into the main frame of a
+// RenderView. The 'add' and 'remove' messages received from the browser
+// process modify the entries in a map of 'pending' objects. These objects are
+// bound to the window object of the main frame when that window object is next
+// cleared. These objects remain bound until the window object is cleared
+// again.
+class GinJavaBridgeDispatcher
+ : public base::SupportsWeakPtr<GinJavaBridgeDispatcher>,
+ public RenderFrameObserver {
+ public:
+ // GinJavaBridgeObjects are managed by gin. An object gets destroyed
+ // when it is no more referenced from JS. As GinJavaBridgeObject reports
+ // deletion of self to GinJavaBridgeDispatcher, we would not have stale
+ // pointers here.
+ typedef IDMap<GinJavaBridgeObject, IDMapExternalPointer> ObjectMap;
+ typedef ObjectMap::KeyType ObjectID;
+
+ explicit GinJavaBridgeDispatcher(RenderFrame* render_frame);
+ virtual ~GinJavaBridgeDispatcher();
+
+ // RenderFrameObserver override:
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+ virtual void DidClearWindowObject() OVERRIDE;
+
+ void GetJavaMethods(ObjectID object_id, std::set<std::string>* methods);
+ bool HasJavaMethod(ObjectID object_id, const std::string& method_name);
+ scoped_ptr<base::Value> InvokeJavaMethod(ObjectID object_id,
+ const std::string& method_name,
+ const base::ListValue& arguments);
+ GinJavaBridgeObject* GetObject(ObjectID object_id);
+ void OnGinJavaBridgeObjectDeleted(ObjectID object_id);
+
+ private:
+ void OnAddNamedObject(const std::string& name,
+ ObjectID object_id);
+ void OnRemoveNamedObject(const std::string& name);
+ void OnSetAllowObjectContentsInspection(bool allow);
+
+ typedef std::map<std::string, ObjectID> NamedObjectMap;
+ NamedObjectMap named_objects_;
+ ObjectMap objects_;
+
+ DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeDispatcher);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_DISPATCHER_H_
diff --git a/content/renderer/java/gin_java_bridge_object.cc b/content/renderer/java/gin_java_bridge_object.cc
new file mode 100644
index 0000000000..a153f2ae3f
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_object.cc
@@ -0,0 +1,165 @@
+// 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 "content/renderer/java/gin_java_bridge_object.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/common/android/gin_java_bridge_value.h"
+#include "content/public/renderer/v8_value_converter.h"
+#include "content/renderer/java/gin_java_bridge_value_converter.h"
+#include "gin/function_template.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebKit.h"
+
+namespace content {
+
+namespace {
+
+const char kMethodInvocationErrorMessage[] =
+ "Java bridge method invocation error";
+
+} // namespace
+
+
+// static
+GinJavaBridgeObject* GinJavaBridgeObject::InjectNamed(
+ blink::WebFrame* frame,
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ const std::string& object_name,
+ GinJavaBridgeDispatcher::ObjectID object_id) {
+ v8::Isolate* isolate = blink::mainThreadIsolate();
+ v8::HandleScope handle_scope(isolate);
+ v8::Handle<v8::Context> context = frame->mainWorldScriptContext();
+ if (context.IsEmpty())
+ return NULL;
+
+ GinJavaBridgeObject* object =
+ new GinJavaBridgeObject(isolate, dispatcher, object_id);
+
+ v8::Context::Scope context_scope(context);
+ v8::Handle<v8::Object> global = context->Global();
+ gin::Handle<GinJavaBridgeObject> controller =
+ gin::CreateHandle(isolate, object);
+ // WrappableBase instance deletes itself in case of a wrapper
+ // creation failure, thus there is no need to delete |object|.
+ if (controller.IsEmpty())
+ return NULL;
+
+ global->Set(gin::StringToV8(isolate, object_name), controller.ToV8());
+ return object;
+}
+
+// static
+GinJavaBridgeObject* GinJavaBridgeObject::InjectAnonymous(
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ GinJavaBridgeDispatcher::ObjectID object_id) {
+ return new GinJavaBridgeObject(
+ blink::mainThreadIsolate(), dispatcher, object_id);
+}
+
+GinJavaBridgeObject::GinJavaBridgeObject(
+ v8::Isolate* isolate,
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ GinJavaBridgeDispatcher::ObjectID object_id)
+ : gin::NamedPropertyInterceptor(isolate, this),
+ dispatcher_(dispatcher),
+ object_id_(object_id),
+ converter_(new GinJavaBridgeValueConverter()) {
+}
+
+GinJavaBridgeObject::~GinJavaBridgeObject() {
+ if (dispatcher_)
+ dispatcher_->OnGinJavaBridgeObjectDeleted(object_id_);
+}
+
+gin::ObjectTemplateBuilder GinJavaBridgeObject::GetObjectTemplateBuilder(
+ v8::Isolate* isolate) {
+ return gin::Wrappable<GinJavaBridgeObject>::GetObjectTemplateBuilder(isolate)
+ .AddNamedPropertyInterceptor();
+}
+
+v8::Local<v8::Value> GinJavaBridgeObject::GetNamedProperty(
+ v8::Isolate* isolate,
+ const std::string& property) {
+ if (dispatcher_ && dispatcher_->HasJavaMethod(object_id_, property)) {
+ return gin::CreateFunctionTemplate(
+ isolate,
+ base::Bind(&GinJavaBridgeObject::InvokeMethod,
+ base::Unretained(this),
+ property))->GetFunction();
+ } else {
+ return v8::Local<v8::Value>();
+ }
+}
+
+std::vector<std::string> GinJavaBridgeObject::EnumerateNamedProperties(
+ v8::Isolate* isolate) {
+ std::set<std::string> method_names;
+ if (dispatcher_)
+ dispatcher_->GetJavaMethods(object_id_, &method_names);
+ return std::vector<std::string> (method_names.begin(), method_names.end());
+}
+
+v8::Handle<v8::Value> GinJavaBridgeObject::InvokeMethod(
+ const std::string& name,
+ gin::Arguments* args) {
+ if (!dispatcher_) {
+ args->isolate()->ThrowException(v8::Exception::Error(gin::StringToV8(
+ args->isolate(), kMethodInvocationErrorMessage)));
+ return v8::Undefined(args->isolate());
+ }
+
+ base::ListValue arguments;
+ {
+ v8::HandleScope handle_scope(args->isolate());
+ v8::Handle<v8::Context> context = args->isolate()->GetCurrentContext();
+ v8::Handle<v8::Value> val;
+ while (args->GetNext(&val)) {
+ scoped_ptr<base::Value> arg(converter_->FromV8Value(val, context));
+ if (arg.get()) {
+ arguments.Append(arg.release());
+ } else {
+ arguments.Append(base::Value::CreateNullValue());
+ }
+ }
+ }
+
+ scoped_ptr<base::Value> result =
+ dispatcher_->InvokeJavaMethod(object_id_, name, arguments);
+ if (!result.get()) {
+ args->isolate()->ThrowException(v8::Exception::Error(gin::StringToV8(
+ args->isolate(), kMethodInvocationErrorMessage)));
+ return v8::Undefined(args->isolate());
+ }
+ if (!result->IsType(base::Value::TYPE_BINARY)) {
+ return converter_->ToV8Value(result.get(),
+ args->isolate()->GetCurrentContext());
+ }
+
+ scoped_ptr<const GinJavaBridgeValue> gin_value =
+ GinJavaBridgeValue::FromValue(result.get());
+ if (gin_value->IsType(GinJavaBridgeValue::TYPE_OBJECT_ID)) {
+ GinJavaBridgeObject* result = NULL;
+ GinJavaBridgeDispatcher::ObjectID object_id;
+ if (gin_value->GetAsObjectID(&object_id)) {
+ result = dispatcher_->GetObject(object_id);
+ }
+ if (result) {
+ gin::Handle<GinJavaBridgeObject> controller =
+ gin::CreateHandle(args->isolate(), result);
+ if (controller.IsEmpty())
+ return v8::Undefined(args->isolate());
+ return controller.ToV8();
+ }
+ } else if (gin_value->IsType(GinJavaBridgeValue::TYPE_NONFINITE)) {
+ float float_value;
+ gin_value->GetAsNonFinite(&float_value);
+ return v8::Number::New(args->isolate(), float_value);
+ }
+ return v8::Undefined(args->isolate());
+}
+
+gin::WrapperInfo GinJavaBridgeObject::kWrapperInfo = {gin::kEmbedderNativeGin};
+
+} // namespace content
diff --git a/content/renderer/java/gin_java_bridge_object.h b/content/renderer/java/gin_java_bridge_object.h
new file mode 100644
index 0000000000..97b74c5e4f
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_object.h
@@ -0,0 +1,70 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
+#define CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
+
+#include <set>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/renderer/java/gin_java_bridge_dispatcher.h"
+#include "gin/handle.h"
+#include "gin/interceptor.h"
+#include "gin/object_template_builder.h"
+#include "gin/wrappable.h"
+
+namespace blink {
+class WebFrame;
+}
+
+namespace content {
+
+class GinJavaBridgeValueConverter;
+
+class GinJavaBridgeObject : public gin::Wrappable<GinJavaBridgeObject>,
+ public gin::NamedPropertyInterceptor {
+ public:
+ static gin::WrapperInfo kWrapperInfo;
+
+ GinJavaBridgeDispatcher::ObjectID object_id() const { return object_id_; }
+
+ // gin::Wrappable.
+ virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
+ v8::Isolate* isolate) OVERRIDE;
+
+ // gin::NamedPropertyInterceptor
+ virtual v8::Local<v8::Value> GetNamedProperty(
+ v8::Isolate* isolate, const std::string& property) OVERRIDE;
+ virtual std::vector<std::string> EnumerateNamedProperties(
+ v8::Isolate* isolate) OVERRIDE;
+
+ static GinJavaBridgeObject* InjectNamed(
+ blink::WebFrame* frame,
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ const std::string& object_name,
+ GinJavaBridgeDispatcher::ObjectID object_id);
+ static GinJavaBridgeObject* InjectAnonymous(
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ GinJavaBridgeDispatcher::ObjectID object_id);
+
+ private:
+ GinJavaBridgeObject(v8::Isolate* isolate,
+ const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
+ GinJavaBridgeDispatcher::ObjectID object_id);
+ virtual ~GinJavaBridgeObject();
+
+ v8::Handle<v8::Value> InvokeMethod(const std::string& name,
+ gin::Arguments* args);
+
+ base::WeakPtr<GinJavaBridgeDispatcher> dispatcher_;
+ GinJavaBridgeDispatcher::ObjectID object_id_;
+ scoped_ptr<GinJavaBridgeValueConverter> converter_;
+
+ DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeObject);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
diff --git a/content/renderer/java/gin_java_bridge_value_converter.cc b/content/renderer/java/gin_java_bridge_value_converter.cc
new file mode 100644
index 0000000000..ad8fee99bb
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_value_converter.cc
@@ -0,0 +1,163 @@
+// 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 "content/renderer/java/gin_java_bridge_value_converter.h"
+
+#include "base/float_util.h"
+#include "base/values.h"
+#include "content/common/android/gin_java_bridge_value.h"
+#include "content/renderer/java/gin_java_bridge_object.h"
+#include "gin/array_buffer.h"
+
+namespace content {
+
+GinJavaBridgeValueConverter::GinJavaBridgeValueConverter()
+ : converter_(V8ValueConverter::create()) {
+ converter_->SetDateAllowed(false);
+ converter_->SetRegExpAllowed(false);
+ converter_->SetFunctionAllowed(true);
+ converter_->SetStrategy(this);
+}
+
+GinJavaBridgeValueConverter::~GinJavaBridgeValueConverter() {
+}
+
+v8::Handle<v8::Value> GinJavaBridgeValueConverter::ToV8Value(
+ const base::Value* value,
+ v8::Handle<v8::Context> context) const {
+ return converter_->ToV8Value(value, context);
+}
+
+scoped_ptr<base::Value> GinJavaBridgeValueConverter::FromV8Value(
+ v8::Handle<v8::Value> value,
+ v8::Handle<v8::Context> context) const {
+ return make_scoped_ptr(converter_->FromV8Value(value, context));
+}
+
+bool GinJavaBridgeValueConverter::FromV8Object(
+ v8::Handle<v8::Object> value,
+ base::Value** out,
+ v8::Isolate* isolate,
+ const FromV8ValueCallback& callback) const {
+ GinJavaBridgeObject* unwrapped;
+ if (!gin::ConvertFromV8(isolate, value, &unwrapped)) {
+ return false;
+ }
+ *out =
+ GinJavaBridgeValue::CreateObjectIDValue(unwrapped->object_id()).release();
+ return true;
+}
+
+namespace {
+
+class TypedArraySerializer {
+ public:
+ virtual ~TypedArraySerializer() {}
+ static scoped_ptr<TypedArraySerializer> Create(
+ v8::Handle<v8::TypedArray> typed_array);
+ virtual void serializeTo(char* data,
+ size_t data_length,
+ base::ListValue* out) = 0;
+ protected:
+ TypedArraySerializer() {}
+};
+
+template <typename ElementType, typename ListType>
+class TypedArraySerializerImpl : public TypedArraySerializer {
+ public:
+ static scoped_ptr<TypedArraySerializer> Create(
+ v8::Handle<v8::TypedArray> typed_array) {
+ scoped_ptr<TypedArraySerializerImpl<ElementType, ListType> > result(
+ new TypedArraySerializerImpl<ElementType, ListType>(typed_array));
+ return result.template PassAs<TypedArraySerializer>();
+ }
+
+ virtual void serializeTo(char* data,
+ size_t data_length,
+ base::ListValue* out) OVERRIDE {
+ DCHECK_EQ(data_length, typed_array_->Length() * sizeof(ElementType));
+ for (ElementType *element = reinterpret_cast<ElementType*>(data),
+ *end = element + typed_array_->Length();
+ element != end;
+ ++element) {
+ const ListType list_value = *element;
+ out->Append(new base::FundamentalValue(list_value));
+ }
+ }
+
+ private:
+ explicit TypedArraySerializerImpl(v8::Handle<v8::TypedArray> typed_array)
+ : typed_array_(typed_array) {}
+
+ v8::Handle<v8::TypedArray> typed_array_;
+
+ DISALLOW_COPY_AND_ASSIGN(TypedArraySerializerImpl);
+};
+
+// static
+scoped_ptr<TypedArraySerializer> TypedArraySerializer::Create(
+ v8::Handle<v8::TypedArray> typed_array) {
+ if (typed_array->IsInt8Array() ||
+ typed_array->IsUint8Array() ||
+ typed_array->IsUint8ClampedArray()) {
+ return TypedArraySerializerImpl<char, int>::Create(typed_array).Pass();
+ } else if (typed_array->IsInt16Array() || typed_array->IsUint16Array()) {
+ return TypedArraySerializerImpl<int16_t, int>::Create(typed_array).Pass();
+ } else if (typed_array->IsInt32Array() || typed_array->IsUint32Array()) {
+ return TypedArraySerializerImpl<int32_t, int>::Create(typed_array).Pass();
+ } else if (typed_array->IsFloat32Array()) {
+ return TypedArraySerializerImpl<float, double>::Create(typed_array).Pass();
+ } else if (typed_array->IsFloat64Array()) {
+ return TypedArraySerializerImpl<double, double>::Create(typed_array).Pass();
+ }
+ NOTREACHED();
+ return scoped_ptr<TypedArraySerializer>();
+}
+
+} // namespace
+
+bool GinJavaBridgeValueConverter::FromV8ArrayBuffer(
+ v8::Handle<v8::Object> value,
+ base::Value** out,
+ v8::Isolate* isolate) const {
+ if (!value->IsTypedArray()) {
+ *out = GinJavaBridgeValue::CreateUndefinedValue().release();
+ return true;
+ }
+
+ char* data = NULL;
+ size_t data_length = 0;
+ gin::ArrayBufferView view;
+ if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) {
+ data = reinterpret_cast<char*>(view.bytes());
+ data_length = view.num_bytes();
+ }
+ if (!data) {
+ *out = GinJavaBridgeValue::CreateUndefinedValue().release();
+ return true;
+ }
+
+ base::ListValue* result = new base::ListValue();
+ *out = result;
+ scoped_ptr<TypedArraySerializer> serializer(
+ TypedArraySerializer::Create(value.As<v8::TypedArray>()));
+ serializer->serializeTo(data, data_length, result);
+ return true;
+}
+
+bool GinJavaBridgeValueConverter::FromV8Number(v8::Handle<v8::Number> value,
+ base::Value** out) const {
+ double double_value = value->Value();
+ if (base::IsFinite(double_value))
+ return false;
+ *out = GinJavaBridgeValue::CreateNonFiniteValue(double_value).release();
+ return true;
+}
+
+bool GinJavaBridgeValueConverter::FromV8Undefined(base::Value** out) const {
+ *out = GinJavaBridgeValue::CreateUndefinedValue().release();
+ return true;
+}
+
+} // namespace content
diff --git a/content/renderer/java/gin_java_bridge_value_converter.h b/content/renderer/java/gin_java_bridge_value_converter.h
new file mode 100644
index 0000000000..5b834eaa85
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_value_converter.h
@@ -0,0 +1,46 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_VALUE_CONVERTER_H_
+#define CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_VALUE_CONVERTER_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "content/common/content_export.h"
+#include "content/public/renderer/v8_value_converter.h"
+
+namespace content {
+
+class GinJavaBridgeValueConverter : public content::V8ValueConverter::Strategy {
+ public:
+ CONTENT_EXPORT GinJavaBridgeValueConverter();
+ CONTENT_EXPORT virtual ~GinJavaBridgeValueConverter();
+
+ CONTENT_EXPORT v8::Handle<v8::Value> ToV8Value(
+ const base::Value* value,
+ v8::Handle<v8::Context> context) const;
+ CONTENT_EXPORT scoped_ptr<base::Value> FromV8Value(
+ v8::Handle<v8::Value> value,
+ v8::Handle<v8::Context> context) const;
+
+ // content::V8ValueConverter::Strategy
+ virtual bool FromV8Object(v8::Handle<v8::Object> value,
+ base::Value** out,
+ v8::Isolate* isolate,
+ const FromV8ValueCallback& callback) const OVERRIDE;
+ virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
+ base::Value** out,
+ v8::Isolate* isolate) const OVERRIDE;
+ virtual bool FromV8Number(v8::Handle<v8::Number> value,
+ base::Value** out) const OVERRIDE;
+ virtual bool FromV8Undefined(base::Value** out) const OVERRIDE;
+
+ private:
+ scoped_ptr<V8ValueConverter> converter_;
+
+ DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeValueConverter);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_VALUE_CONVERTER_H_
diff --git a/content/renderer/java/gin_java_bridge_value_converter_unittest.cc b/content/renderer/java/gin_java_bridge_value_converter_unittest.cc
new file mode 100644
index 0000000000..1a0812b0d9
--- /dev/null
+++ b/content/renderer/java/gin_java_bridge_value_converter_unittest.cc
@@ -0,0 +1,138 @@
+// 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/basictypes.h"
+#include "base/float_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/stringprintf.h"
+#include "content/common/android/gin_java_bridge_value.h"
+#include "content/renderer/java/gin_java_bridge_value_converter.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "v8/include/v8.h"
+
+namespace content {
+
+class GinJavaBridgeValueConverterTest : public testing::Test {
+ public:
+ GinJavaBridgeValueConverterTest()
+ : isolate_(v8::Isolate::GetCurrent()) {
+ }
+
+ protected:
+ virtual void SetUp() {
+ v8::HandleScope handle_scope(isolate_);
+ v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate_);
+ context_.Reset(isolate_, v8::Context::New(isolate_, NULL, global));
+ }
+
+ virtual void TearDown() {
+ context_.Reset();
+ }
+
+ v8::Isolate* isolate_;
+
+ // Context for the JavaScript in the test.
+ v8::Persistent<v8::Context> context_;
+};
+
+TEST_F(GinJavaBridgeValueConverterTest, BasicValues) {
+ v8::HandleScope handle_scope(isolate_);
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(isolate_, context_);
+ v8::Context::Scope context_scope(context);
+
+ scoped_ptr<GinJavaBridgeValueConverter> converter(
+ new GinJavaBridgeValueConverter());
+
+ v8::Handle<v8::Primitive> v8_undefined(v8::Undefined(isolate_));
+ scoped_ptr<base::Value> undefined(
+ converter->FromV8Value(v8_undefined, context));
+ ASSERT_TRUE(undefined.get());
+ EXPECT_TRUE(GinJavaBridgeValue::ContainsGinJavaBridgeValue(undefined.get()));
+ scoped_ptr<const GinJavaBridgeValue> undefined_value(
+ GinJavaBridgeValue::FromValue(undefined.get()));
+ ASSERT_TRUE(undefined_value.get());
+ EXPECT_TRUE(undefined_value->IsType(GinJavaBridgeValue::TYPE_UNDEFINED));
+
+ v8::Handle<v8::Number> v8_infinity(
+ v8::Number::New(isolate_, std::numeric_limits<double>::infinity()));
+ scoped_ptr<base::Value> infinity(
+ converter->FromV8Value(v8_infinity, context));
+ ASSERT_TRUE(infinity.get());
+ EXPECT_TRUE(
+ GinJavaBridgeValue::ContainsGinJavaBridgeValue(infinity.get()));
+ scoped_ptr<const GinJavaBridgeValue> infinity_value(
+ GinJavaBridgeValue::FromValue(infinity.get()));
+ ASSERT_TRUE(infinity_value.get());
+ float native_float;
+ EXPECT_TRUE(
+ infinity_value->IsType(GinJavaBridgeValue::TYPE_NONFINITE));
+ EXPECT_TRUE(infinity_value->GetAsNonFinite(&native_float));
+ EXPECT_FALSE(base::IsFinite(native_float));
+ EXPECT_FALSE(base::IsNaN(native_float));
+}
+
+TEST_F(GinJavaBridgeValueConverterTest, ArrayBuffer) {
+ v8::HandleScope handle_scope(isolate_);
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(isolate_, context_);
+ v8::Context::Scope context_scope(context);
+
+ scoped_ptr<GinJavaBridgeValueConverter> converter(
+ new GinJavaBridgeValueConverter());
+
+ v8::Handle<v8::ArrayBuffer> v8_array_buffer(
+ v8::ArrayBuffer::New(isolate_, 0));
+ scoped_ptr<base::Value> undefined(
+ converter->FromV8Value(v8_array_buffer, context));
+ ASSERT_TRUE(undefined.get());
+ EXPECT_TRUE(GinJavaBridgeValue::ContainsGinJavaBridgeValue(undefined.get()));
+ scoped_ptr<const GinJavaBridgeValue> undefined_value(
+ GinJavaBridgeValue::FromValue(undefined.get()));
+ ASSERT_TRUE(undefined_value.get());
+ EXPECT_TRUE(undefined_value->IsType(GinJavaBridgeValue::TYPE_UNDEFINED));
+}
+
+TEST_F(GinJavaBridgeValueConverterTest, TypedArrays) {
+ v8::HandleScope handle_scope(isolate_);
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(isolate_, context_);
+ v8::Context::Scope context_scope(context);
+
+ scoped_ptr<GinJavaBridgeValueConverter> converter(
+ new GinJavaBridgeValueConverter());
+
+ const char* source_template = "(function() {"
+ "var array_buffer = new ArrayBuffer(%s);"
+ "var array_view = new %s(array_buffer);"
+ "array_view[0] = 42;"
+ "return array_view;"
+ "})();";
+ const char* array_types[] = {
+ "1", "Int8Array", "1", "Uint8Array", "1", "Uint8ClampedArray",
+ "2", "Int16Array", "2", "Uint16Array",
+ "4", "Int32Array", "4", "Uint32Array",
+ "4", "Float32Array", "8", "Float64Array"
+ };
+ for (size_t i = 0; i < arraysize(array_types); i += 2) {
+ const char* typed_array_type = array_types[i + 1];
+ v8::Handle<v8::Script> script(v8::Script::Compile(v8::String::NewFromUtf8(
+ isolate_,
+ base::StringPrintf(
+ source_template, array_types[i], typed_array_type).c_str())));
+ v8::Handle<v8::Value> v8_typed_array = script->Run();
+ scoped_ptr<base::Value> list_value(
+ converter->FromV8Value(v8_typed_array, context));
+ ASSERT_TRUE(list_value.get()) << typed_array_type;
+ EXPECT_TRUE(list_value->IsType(base::Value::TYPE_LIST)) << typed_array_type;
+ base::ListValue* list;
+ ASSERT_TRUE(list_value->GetAsList(&list)) << typed_array_type;
+ EXPECT_EQ(1u, list->GetSize()) << typed_array_type;
+ double first_element;
+ ASSERT_TRUE(list->GetDouble(0, &first_element)) << typed_array_type;
+ EXPECT_EQ(42.0, first_element) << typed_array_type;
+ }
+}
+
+} // namespace content
diff --git a/content/renderer/java/java_bridge_dispatcher.cc b/content/renderer/java/java_bridge_dispatcher.cc
index d86e5dedcc..262ea94fbd 100644
--- a/content/renderer/java/java_bridge_dispatcher.cc
+++ b/content/renderer/java/java_bridge_dispatcher.cc
@@ -51,17 +51,21 @@ bool JavaBridgeDispatcher::OnMessageReceived(const IPC::Message& msg) {
return handled;
}
-void JavaBridgeDispatcher::DidClearWindowObject(int world_id) {
+void JavaBridgeDispatcher::DidClearWindowObject() {
// Note that we have to (re)bind all objects, as they will have been unbound
// when the window object was cleared.
for (ObjectMap::const_iterator iter = objects_.begin();
iter != objects_.end();
++iter) {
+ NPObject* object = NPVARIANT_TO_OBJECT(iter->second);
+ // De-associate from the existing V8 wrapper, so we don't pull any
+ // of the wrapper's custom properties into the context of the page we
+ // have navigated to.
+ blink::WebBindings::dropV8WrapperForObject(object);
// This refs the NPObject. This reference is dropped when either the window
// object is later cleared, or the object is GC'ed. So the object may be
// deleted at any time after OnRemoveNamedObject() is called.
- render_frame()->GetWebFrame()->bindToWindowObject(
- iter->first, NPVARIANT_TO_OBJECT(iter->second));
+ render_frame()->GetWebFrame()->bindToWindowObject(iter->first, object);
}
}
diff --git a/content/renderer/java/java_bridge_dispatcher.h b/content/renderer/java/java_bridge_dispatcher.h
index 5582f68edc..4858ea7dc2 100644
--- a/content/renderer/java/java_bridge_dispatcher.h
+++ b/content/renderer/java/java_bridge_dispatcher.h
@@ -31,7 +31,7 @@ class JavaBridgeDispatcher : public RenderFrameObserver {
private:
// RenderViewObserver override:
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- virtual void DidClearWindowObject(int world_id) OVERRIDE;
+ virtual void DidClearWindowObject() OVERRIDE;
// Message handlers
void OnAddNamedObject(const base::string16& name,
diff --git a/content/renderer/load_progress_tracker.cc b/content/renderer/load_progress_tracker.cc
deleted file mode 100644
index 5e7d07eb6c..0000000000
--- a/content/renderer/load_progress_tracker.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/renderer/load_progress_tracker.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "content/common/view_messages.h"
-#include "content/renderer/render_view_impl.h"
-
-namespace content {
-namespace {
-
-const int kMinimumDelayBetweenUpdatesMS = 100;
-
-// This matches what blink's ProgrssTracker has traditionally used for a
-// minimum progress value.
-const double kMinimumProgress = 0.1;
-
-}
-
-LoadProgressTracker::LoadProgressTracker(RenderViewImpl* render_view)
- : render_view_(render_view),
- total_progress_(0.0),
- weak_factory_(this) {
-}
-
-LoadProgressTracker::~LoadProgressTracker() {
-}
-
-void LoadProgressTracker::DidStartLoading(int frame_routing_id) {
- progresses_[frame_routing_id] = kMinimumProgress;
- SendChangeLoadProgress();
-}
-
-void LoadProgressTracker::DidStopLoading(int frame_routing_id) {
- if (progresses_.find(frame_routing_id) == progresses_.end())
- return;
-
- // Load stopped while we were still tracking load. Make sure we update
- // progress based on this frame's completion.
- progresses_[frame_routing_id] = 1.0;
- SendChangeLoadProgress();
- // Then we clean-up our states.
- if (total_progress_ == 1.0)
- ResetStates();
-}
-
-void LoadProgressTracker::DidChangeLoadProgress(int frame_routing_id,
- double progress) {
- progresses_[frame_routing_id] = progress;
-
- // We send the progress change to the browser immediately for the first and
- // last updates. Also, since the message loop may be pretty busy when a page
- // is loaded, it might not execute a posted task in a timely manner so we make
- // sure to immediately send progress report if enough time has passed.
- base::TimeDelta min_delay =
- base::TimeDelta::FromMilliseconds(kMinimumDelayBetweenUpdatesMS);
- if (progress == 1.0 || last_time_progress_sent_.is_null() ||
- base::TimeTicks::Now() - last_time_progress_sent_ > min_delay) {
- // If there is a pending task to send progress, it is now obsolete.
- weak_factory_.InvalidateWeakPtrs();
- SendChangeLoadProgress();
- if (total_progress_ == 1.0)
- ResetStates();
- return;
- }
-
- if (weak_factory_.HasWeakPtrs())
- return;
-
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&LoadProgressTracker::SendChangeLoadProgress,
- weak_factory_.GetWeakPtr()),
- min_delay);
-}
-
-void LoadProgressTracker::SendChangeLoadProgress() {
- last_time_progress_sent_ = base::TimeTicks::Now();
- double progress = 0.0;
- unsigned frameCount = 0;
- ProgressMap::iterator end = progresses_.end();
- for (ProgressMap::iterator it = progresses_.begin(); it != end; ++it) {
- progress += it->second;
- frameCount++;
- }
- if (frameCount == 0)
- return;
- progress /= frameCount;
- DCHECK(progress <= 1.0);
-
- if (progress <= total_progress_)
- return;
- total_progress_ = progress;
-
- render_view_->Send(
- new ViewHostMsg_DidChangeLoadProgress(render_view_->routing_id(),
- progress));
-}
-
-void LoadProgressTracker::ResetStates() {
- progresses_.clear();
- total_progress_ = 0.0;
- weak_factory_.InvalidateWeakPtrs();
- last_time_progress_sent_ = base::TimeTicks();
-}
-
-} // namespace content
diff --git a/content/renderer/load_progress_tracker.h b/content/renderer/load_progress_tracker.h
deleted file mode 100644
index 72a711ccc5..0000000000
--- a/content/renderer/load_progress_tracker.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_RENDERER_LOAD_PROGRESS_TRACKER_H_
-#define CONTENT_RENDERER_LOAD_PROGRESS_TRACKER_H_
-
-#include "base/containers/hash_tables.h"
-#include "base/logging.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
-
-namespace content {
-class RenderViewImpl;
-
-class LoadProgressTracker {
- public:
- explicit LoadProgressTracker(RenderViewImpl* render_view);
- ~LoadProgressTracker();
-
- void DidStartLoading(int frame_routing_id);
- void DidStopLoading(int frame_routing_id);
-
- void DidChangeLoadProgress(int frame_routing_id, double progress);
-
- private:
- void ResetStates();
-
- void SendChangeLoadProgress();
-
- RenderViewImpl* render_view_;
-
- // ProgressMap maps RenderFrame routing ids to a double representing that
- // frame's completion (from 0 to 1).
- typedef base::hash_map<int, double> ProgressMap;
- ProgressMap progresses_;
- double total_progress_;
-
- base::TimeTicks last_time_progress_sent_;
-
- base::WeakPtrFactory<LoadProgressTracker> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(LoadProgressTracker);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_LOAD_PROGRESS_TRACKER_H_
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc
index eb4f5c3dcf..107684b36d 100644
--- a/content/renderer/media/android/media_source_delegate.cc
+++ b/content/renderer/media/android/media_source_delegate.cc
@@ -184,10 +184,8 @@ void MediaSourceDelegate::InitializeDemuxer() {
false);
}
-const blink::WebTimeRanges& MediaSourceDelegate::Buffered() {
- buffered_web_time_ranges_ =
- ConvertToWebTimeRanges(buffered_time_ranges_);
- return buffered_web_time_ranges_;
+blink::WebTimeRanges MediaSourceDelegate::Buffered() const {
+ return ConvertToWebTimeRanges(buffered_time_ranges_);
}
size_t MediaSourceDelegate::DecodedFrameCount() const {
@@ -398,14 +396,11 @@ void MediaSourceDelegate::OnBufferReady(
break;
case DemuxerStream::kConfigChanged:
- // In case of kConfigChanged, need to read decoder_config once
- // for the next reads.
- // TODO(kjyoun): Investigate if we need to use this new config. See
- // http://crbug.com/255783
- if (is_audio) {
- audio_stream_->audio_decoder_config();
- } else {
- gfx::Size size = video_stream_->video_decoder_config().coded_size();
+ CHECK((is_audio && audio_stream_) || (!is_audio && video_stream_));
+ data->demuxer_configs.resize(1);
+ CHECK(GetDemuxerConfigFromStream(&data->demuxer_configs[0], is_audio));
+ if (!is_audio) {
+ gfx::Size size = data->demuxer_configs[0].video_size;
DVLOG(1) << "Video config is changed: " << size.width() << "x"
<< size.height();
}
@@ -649,13 +644,6 @@ void MediaSourceDelegate::DeleteSelf() {
delete this;
}
-void MediaSourceDelegate::OnMediaConfigRequest() {
- DCHECK(media_loop_->BelongsToCurrentThread());
- DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
- if (CanNotifyDemuxerReady())
- NotifyDemuxerReady();
-}
-
bool MediaSourceDelegate::CanNotifyDemuxerReady() {
DCHECK(media_loop_->BelongsToCurrentThread());
return is_demuxer_ready_;
@@ -667,24 +655,8 @@ void MediaSourceDelegate::NotifyDemuxerReady() {
DCHECK(CanNotifyDemuxerReady());
scoped_ptr<DemuxerConfigs> configs(new DemuxerConfigs());
- if (audio_stream_) {
- media::AudioDecoderConfig config = audio_stream_->audio_decoder_config();
- configs->audio_codec = config.codec();
- configs->audio_channels =
- media::ChannelLayoutToChannelCount(config.channel_layout());
- configs->audio_sampling_rate = config.samples_per_second();
- configs->is_audio_encrypted = config.is_encrypted();
- configs->audio_extra_data = std::vector<uint8>(
- config.extra_data(), config.extra_data() + config.extra_data_size());
- }
- if (video_stream_) {
- media::VideoDecoderConfig config = video_stream_->video_decoder_config();
- configs->video_codec = config.codec();
- configs->video_size = config.natural_size();
- configs->is_video_encrypted = config.is_encrypted();
- configs->video_extra_data = std::vector<uint8>(
- config.extra_data(), config.extra_data() + config.extra_data_size());
- }
+ GetDemuxerConfigFromStream(configs.get(), true);
+ GetDemuxerConfigFromStream(configs.get(), false);
configs->duration = GetDuration();
if (demuxer_client_)
@@ -770,4 +742,32 @@ base::TimeDelta MediaSourceDelegate::FindBufferedBrowserSeekTime_Locked(
return seek_time;
}
+bool MediaSourceDelegate::GetDemuxerConfigFromStream(
+ media::DemuxerConfigs* configs, bool is_audio) {
+ DCHECK(media_loop_->BelongsToCurrentThread());
+ if (!CanNotifyDemuxerReady())
+ return false;
+ if (is_audio && audio_stream_) {
+ media::AudioDecoderConfig config = audio_stream_->audio_decoder_config();
+ configs->audio_codec = config.codec();
+ configs->audio_channels =
+ media::ChannelLayoutToChannelCount(config.channel_layout());
+ configs->audio_sampling_rate = config.samples_per_second();
+ configs->is_audio_encrypted = config.is_encrypted();
+ configs->audio_extra_data = std::vector<uint8>(
+ config.extra_data(), config.extra_data() + config.extra_data_size());
+ return true;
+ }
+ if (!is_audio && video_stream_) {
+ media::VideoDecoderConfig config = video_stream_->video_decoder_config();
+ configs->video_codec = config.codec();
+ configs->video_size = config.natural_size();
+ configs->is_video_encrypted = config.is_encrypted();
+ configs->video_extra_data = std::vector<uint8>(
+ config.extra_data(), config.extra_data() + config.extra_data_size());
+ return true;
+ }
+ return false;
+}
+
} // namespace content
diff --git a/content/renderer/media/android/media_source_delegate.h b/content/renderer/media/android/media_source_delegate.h
index 4ac8ed8ade..45854f21d0 100644
--- a/content/renderer/media/android/media_source_delegate.h
+++ b/content/renderer/media/android/media_source_delegate.h
@@ -67,7 +67,7 @@ class MediaSourceDelegate : public media::DemuxerHost {
const UpdateNetworkStateCB& update_network_state_cb,
const DurationChangeCB& duration_change_cb);
- const blink::WebTimeRanges& Buffered();
+ blink::WebTimeRanges Buffered() const;
size_t DecodedFrameCount() const;
size_t DroppedFrameCount() const;
size_t AudioDecodedByteCount() const;
@@ -97,9 +97,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
// Called when DemuxerStreamPlayer needs to read data from ChunkDemuxer.
void OnReadFromDemuxer(media::DemuxerStream::Type type);
- // Called when the player needs the new config data from ChunkDemuxer.
- void OnMediaConfigRequest();
-
// Called by the Destroyer to destroy an instance of this object.
void Destroy();
@@ -183,6 +180,11 @@ class MediaSourceDelegate : public media::DemuxerHost {
base::TimeDelta FindBufferedBrowserSeekTime_Locked(
const base::TimeDelta& seek_time) const;
+ // Get the demuxer configs for a particular stream identified by |is_audio|.
+ // Returns true on success, of false otherwise.
+ bool GetDemuxerConfigFromStream(media::DemuxerConfigs* configs,
+ bool is_audio);
+
RendererDemuxerAndroid* demuxer_client_;
int demuxer_client_id_;
@@ -203,8 +205,6 @@ class MediaSourceDelegate : public media::DemuxerHost {
media::PipelineStatistics statistics_;
media::Ranges<base::TimeDelta> buffered_time_ranges_;
- // Keep a list of buffered time ranges.
- blink::WebTimeRanges buffered_web_time_ranges_;
MediaSourceOpenedCB media_source_opened_cb_;
media::Demuxer::NeedKeyCB need_key_cb_;
diff --git a/content/renderer/media/android/renderer_demuxer_android.cc b/content/renderer/media/android/renderer_demuxer_android.cc
index b7d6a2694a..586d7fa44d 100644
--- a/content/renderer/media/android/renderer_demuxer_android.cc
+++ b/content/renderer/media/android/renderer_demuxer_android.cc
@@ -43,7 +43,6 @@ bool RendererDemuxerAndroid::OnMessageReceived(const IPC::Message& message) {
switch (message.type()) {
case MediaPlayerMsg_DemuxerSeekRequest::ID:
case MediaPlayerMsg_ReadFromDemuxer::ID:
- case MediaPlayerMsg_MediaConfigRequest::ID:
media_message_loop_->PostTask(FROM_HERE, base::Bind(
&RendererDemuxerAndroid::DispatchMessage, this, message));
return true;
@@ -82,7 +81,6 @@ void RendererDemuxerAndroid::DispatchMessage(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(RendererDemuxerAndroid, message)
IPC_MESSAGE_HANDLER(MediaPlayerMsg_DemuxerSeekRequest, OnDemuxerSeekRequest)
IPC_MESSAGE_HANDLER(MediaPlayerMsg_ReadFromDemuxer, OnReadFromDemuxer)
- IPC_MESSAGE_HANDLER(MediaPlayerMsg_MediaConfigRequest, OnMediaConfigRequest)
IPC_END_MESSAGE_MAP()
}
@@ -103,10 +101,4 @@ void RendererDemuxerAndroid::OnDemuxerSeekRequest(
delegate->Seek(time_to_seek, is_browser_seek);
}
-void RendererDemuxerAndroid::OnMediaConfigRequest(int demuxer_client_id) {
- MediaSourceDelegate* delegate = delegates_.Lookup(demuxer_client_id);
- if (delegate)
- delegate->OnMediaConfigRequest();
-}
-
} // namespace content
diff --git a/content/renderer/media/android/renderer_demuxer_android.h b/content/renderer/media/android/renderer_demuxer_android.h
index b1dac131ab..2a92918bb7 100644
--- a/content/renderer/media/android/renderer_demuxer_android.h
+++ b/content/renderer/media/android/renderer_demuxer_android.h
@@ -70,7 +70,6 @@ class RendererDemuxerAndroid : public IPC::MessageFilter {
void OnDemuxerSeekRequest(int demuxer_client_id,
const base::TimeDelta& time_to_seek,
bool is_browser_seek);
- void OnMediaConfigRequest(int demuxer_client_id);
base::AtomicSequenceNumber next_demuxer_client_id_;
diff --git a/content/renderer/media/android/renderer_media_player_manager.cc b/content/renderer/media/android/renderer_media_player_manager.cc
index 37815ebed2..1c65ab5d21 100644
--- a/content/renderer/media/android/renderer_media_player_manager.cc
+++ b/content/renderer/media/android/renderer_media_player_manager.cc
@@ -4,30 +4,23 @@
#include "content/renderer/media/android/renderer_media_player_manager.h"
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "content/common/media/cdm_messages.h"
#include "content/common/media/media_player_messages_android.h"
#include "content/public/common/renderer_preferences.h"
-#include "content/renderer/media/android/proxy_media_keys.h"
#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/android/webmediaplayer_android.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#include "content/renderer/render_view_impl.h"
#include "ui/gfx/rect_f.h"
namespace content {
-// Maximum sizes for various EME API parameters. These are checks to prevent
-// unnecessarily large messages from being passed around, and the sizes
-// are somewhat arbitrary as the EME spec doesn't specify any limits.
-const size_t kMaxWebSessionIdLength = 512;
-const size_t kMaxSessionMessageLength = 10240; // 10 KB
-
-RendererMediaPlayerManager::RendererMediaPlayerManager(RenderView* render_view)
- : RenderViewObserver(render_view),
+RendererMediaPlayerManager::RendererMediaPlayerManager(
+ RenderFrame* render_frame)
+ : RenderFrameObserver(render_frame),
next_media_player_id_(0),
fullscreen_frame_(NULL),
- pending_fullscreen_frame_(NULL) {}
+ pending_fullscreen_frame_(NULL) {
+}
RendererMediaPlayerManager::~RendererMediaPlayerManager() {
std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
@@ -67,11 +60,7 @@ bool RendererMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidExitFullscreen, OnDidExitFullscreen)
IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPlay, OnPlayerPlay)
IPC_MESSAGE_HANDLER(MediaPlayerMsg_DidMediaPlayerPause, OnPlayerPause)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionCreated, OnSessionCreated)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionReady, OnSessionReady)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed)
- IPC_MESSAGE_HANDLER(CdmMsg_SessionError, OnSessionError)
+ IPC_MESSAGE_HANDLER(MediaPlayerMsg_PauseVideo, OnPauseVideo)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -231,6 +220,10 @@ void RendererMediaPlayerManager::OnRequestFullscreen(int player_id) {
player->OnRequestFullscreen();
}
+void RendererMediaPlayerManager::OnPauseVideo() {
+ ReleaseVideoResources();
+}
+
void RendererMediaPlayerManager::EnterFullscreen(int player_id,
blink::WebFrame* frame) {
pending_fullscreen_frame_ = frame;
@@ -239,105 +232,16 @@ void RendererMediaPlayerManager::EnterFullscreen(int player_id,
void RendererMediaPlayerManager::ExitFullscreen(int player_id) {
pending_fullscreen_frame_ = NULL;
+ fullscreen_frame_ = NULL;
Send(new MediaPlayerHostMsg_ExitFullscreen(routing_id(), player_id));
}
void RendererMediaPlayerManager::SetCdm(int player_id, int cdm_id) {
- if (cdm_id == kInvalidCdmId)
- return;
- Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id));
-}
-
-void RendererMediaPlayerManager::InitializeCdm(int cdm_id,
- ProxyMediaKeys* media_keys,
- const std::string& key_system,
- const GURL& security_origin) {
- DCHECK_NE(cdm_id, kInvalidCdmId);
- RegisterMediaKeys(cdm_id, media_keys);
- Send(new CdmHostMsg_InitializeCdm(
- routing_id(), cdm_id, key_system, security_origin));
-}
-
-void RendererMediaPlayerManager::CreateSession(
- int cdm_id,
- uint32 session_id,
- CdmHostMsg_CreateSession_ContentType content_type,
- const std::vector<uint8>& init_data) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_CreateSession(
- routing_id(), cdm_id, session_id, content_type, init_data));
-}
-
-void RendererMediaPlayerManager::UpdateSession(
- int cdm_id,
- uint32 session_id,
- const std::vector<uint8>& response) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(
- new CdmHostMsg_UpdateSession(routing_id(), cdm_id, session_id, response));
-}
-
-void RendererMediaPlayerManager::ReleaseSession(int cdm_id, uint32 session_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_ReleaseSession(routing_id(), cdm_id, session_id));
-}
-
-void RendererMediaPlayerManager::DestroyCdm(int cdm_id) {
- DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
- Send(new CdmHostMsg_DestroyCdm(routing_id(), cdm_id));
- media_keys_.erase(cdm_id);
-}
-
-void RendererMediaPlayerManager::OnSessionCreated(
- int cdm_id,
- uint32 session_id,
- const std::string& web_session_id) {
- if (web_session_id.length() > kMaxWebSessionIdLength) {
- OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
- return;
- }
-
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionCreated(session_id, web_session_id);
-}
-
-void RendererMediaPlayerManager::OnSessionMessage(
- int cdm_id,
- uint32 session_id,
- const std::vector<uint8>& message,
- const GURL& destination_url) {
- if (message.size() > kMaxSessionMessageLength) {
- OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
+ if (cdm_id == RendererCdmManager::kInvalidCdmId) {
+ NOTREACHED();
return;
}
-
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionMessage(session_id, message, destination_url.spec());
-}
-
-void RendererMediaPlayerManager::OnSessionReady(int cdm_id, uint32 session_id) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionReady(session_id);
-}
-
-void RendererMediaPlayerManager::OnSessionClosed(int cdm_id,
- uint32 session_id) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionClosed(session_id);
-}
-
-void RendererMediaPlayerManager::OnSessionError(
- int cdm_id,
- uint32 session_id,
- media::MediaKeys::KeyError error_code,
- uint32 system_code) {
- ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
- if (media_keys)
- media_keys->OnSessionError(session_id, error_code, system_code);
+ Send(new MediaPlayerHostMsg_SetCdm(routing_id(), player_id, cdm_id));
}
int RendererMediaPlayerManager::RegisterMediaPlayer(
@@ -350,18 +254,10 @@ void RendererMediaPlayerManager::UnregisterMediaPlayer(int player_id) {
media_players_.erase(player_id);
}
-void RendererMediaPlayerManager::RegisterMediaKeys(int cdm_id,
- ProxyMediaKeys* media_keys) {
- // Only allowed to register once.
- DCHECK(media_keys_.find(cdm_id) == media_keys_.end());
-
- media_keys_[cdm_id] = media_keys;
-}
-
void RendererMediaPlayerManager::ReleaseVideoResources() {
std::map<int, WebMediaPlayerAndroid*>::iterator player_it;
- for (player_it = media_players_.begin();
- player_it != media_players_.end(); ++player_it) {
+ for (player_it = media_players_.begin(); player_it != media_players_.end();
+ ++player_it) {
WebMediaPlayerAndroid* player = player_it->second;
// Do not release if an audio track is still playing
@@ -379,11 +275,6 @@ WebMediaPlayerAndroid* RendererMediaPlayerManager::GetMediaPlayer(
return NULL;
}
-ProxyMediaKeys* RendererMediaPlayerManager::GetMediaKeys(int cdm_id) {
- std::map<int, ProxyMediaKeys*>::iterator iter = media_keys_.find(cdm_id);
- return (iter != media_keys_.end()) ? iter->second : NULL;
-}
-
bool RendererMediaPlayerManager::CanEnterFullscreen(blink::WebFrame* frame) {
return (!fullscreen_frame_ && !pending_fullscreen_frame_)
|| ShouldEnterFullscreen(frame);
@@ -443,8 +334,8 @@ void RendererMediaPlayerManager::RetrieveGeometryChanges(
bool
RendererMediaPlayerManager::ShouldUseVideoOverlayForEmbeddedEncryptedVideo() {
- const RendererPreferences& prefs = static_cast<RenderViewImpl*>(
- render_view())->renderer_preferences();
+ const RendererPreferences& prefs = static_cast<RenderFrameImpl*>(
+ render_frame())->render_view()->renderer_preferences();
return prefs.use_video_overlay_for_embedded_encrypted_video;
}
#endif // defined(VIDEO_HOLE)
diff --git a/content/renderer/media/android/renderer_media_player_manager.h b/content/renderer/media/android/renderer_media_player_manager.h
index 9fb5e448ff..3ce079fd5d 100644
--- a/content/renderer/media/android/renderer_media_player_manager.h
+++ b/content/renderer/media/android/renderer_media_player_manager.h
@@ -7,15 +7,12 @@
#include <map>
#include <string>
-#include <vector>
#include "base/basictypes.h"
#include "base/time/time.h"
-#include "content/common/media/cdm_messages_enums.h"
#include "content/common/media/media_player_messages_enums_android.h"
-#include "content/public/renderer/render_view_observer.h"
+#include "content/public/renderer/render_frame_observer.h"
#include "media/base/android/media_player_android.h"
-#include "media/base/media_keys.h"
#include "url/gurl.h"
namespace blink {
@@ -28,20 +25,17 @@ class RectF;
namespace content {
-class ProxyMediaKeys;
class WebMediaPlayerAndroid;
// Class for managing all the WebMediaPlayerAndroid objects in the same
-// RenderView.
-class RendererMediaPlayerManager : public RenderViewObserver {
+// RenderFrame.
+class RendererMediaPlayerManager : public RenderFrameObserver {
public:
- static const int kInvalidCdmId = 0;
-
- // Constructs a RendererMediaPlayerManager object for the |render_view|.
- RendererMediaPlayerManager(RenderView* render_view);
+ // Constructs a RendererMediaPlayerManager object for the |render_frame|.
+ explicit RendererMediaPlayerManager(RenderFrame* render_frame);
virtual ~RendererMediaPlayerManager();
- // RenderViewObserver overrides.
+ // RenderFrameObserver overrides.
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
// Initializes a MediaPlayerAndroid object in browser process.
@@ -91,7 +85,7 @@ class RendererMediaPlayerManager : public RenderViewObserver {
// Requests an external surface for out-of-band compositing.
void RequestExternalSurface(int player_id, const gfx::RectF& geometry);
- // RenderViewObserver overrides.
+ // RenderFrameObserver overrides.
virtual void DidCommitCompositorFrame() OVERRIDE;
// Returns true if a media player should use video-overlay for the embedded
@@ -99,35 +93,10 @@ class RendererMediaPlayerManager : public RenderViewObserver {
bool ShouldUseVideoOverlayForEmbeddedEncryptedVideo();
#endif // defined(VIDEO_HOLE)
- // Encrypted media related methods.
- void InitializeCdm(int cdm_id,
- ProxyMediaKeys* media_keys,
- const std::string& key_system,
- const GURL& security_origin);
- void CreateSession(int cdm_id,
- uint32 session_id,
- CdmHostMsg_CreateSession_ContentType conent_type,
- const std::vector<uint8>& init_data);
- void UpdateSession(int cdm_id,
- uint32 session_id,
- const std::vector<uint8>& response);
- void ReleaseSession(int cdm_id, uint32 session_id);
- void DestroyCdm(int cdm_id);
-
// Registers and unregisters a WebMediaPlayerAndroid object.
int RegisterMediaPlayer(WebMediaPlayerAndroid* player);
void UnregisterMediaPlayer(int player_id);
- // Registers a ProxyMediaKeys object. There must be a WebMediaPlayerAndroid
- // object already registered for this id, and it is unregistered when the
- // player is unregistered. For now |cdm_id| is the same as player_id
- // used in other methods.
- void RegisterMediaKeys(int cdm_id, ProxyMediaKeys* media_keys);
-
- // Releases the media resources managed by this object when a video
- // is playing.
- void ReleaseVideoResources();
-
// Checks whether a player can enter fullscreen.
bool CanEnterFullscreen(blink::WebFrame* frame);
@@ -144,9 +113,6 @@ class RendererMediaPlayerManager : public RenderViewObserver {
// Gets the pointer to WebMediaPlayerAndroid given the |player_id|.
WebMediaPlayerAndroid* GetMediaPlayer(int player_id);
- // Gets the pointer to ProxyMediaKeys given the |cdm_id|.
- ProxyMediaKeys* GetMediaKeys(int cdm_id);
-
#if defined(VIDEO_HOLE)
// Gets the list of media players with video geometry changes.
void RetrieveGeometryChanges(std::map<int, gfx::RectF>* changes);
@@ -175,28 +141,18 @@ class RendererMediaPlayerManager : public RenderViewObserver {
void OnPlayerPlay(int player_id);
void OnPlayerPause(int player_id);
void OnRequestFullscreen(int player_id);
- void OnSessionCreated(int cdm_id,
- uint32 session_id,
- const std::string& web_session_id);
- void OnSessionMessage(int cdm_id,
- uint32 session_id,
- const std::vector<uint8>& message,
- const GURL& destination_url);
- void OnSessionReady(int cdm_id, uint32 session_id);
- void OnSessionClosed(int cdm_id, uint32 session_id);
- void OnSessionError(int cdm_id,
- uint32 session_id,
- media::MediaKeys::KeyError error_code,
- uint32 system_code);
+ void OnPauseVideo();
+
+ // Release all video player resources.
+ // If something is in progress the resource will not be freed. It will
+ // only be freed once the tab is destroyed or if the user navigates away
+ // via WebMediaPlayerAndroid::Destroy.
+ void ReleaseVideoResources();
// Info for all available WebMediaPlayerAndroid on a page; kept so that
// we can enumerate them to send updates about tab focus and visibility.
std::map<int, WebMediaPlayerAndroid*> media_players_;
- // Info for all available ProxyMediaKeys. There must be at most one
- // ProxyMediaKeys for each available WebMediaPlayerAndroid.
- std::map<int, ProxyMediaKeys*> media_keys_;
-
int next_media_player_id_;
// WebFrame of the fullscreen video.
diff --git a/content/renderer/media/android/stream_texture_factory_impl.cc b/content/renderer/media/android/stream_texture_factory_impl.cc
index ef1c21baef..58d165b543 100644
--- a/content/renderer/media/android/stream_texture_factory_impl.cc
+++ b/content/renderer/media/android/stream_texture_factory_impl.cc
@@ -81,17 +81,17 @@ void StreamTextureProxyImpl::OnMatrixChanged(const float matrix[16]) {
scoped_refptr<StreamTextureFactoryImpl> StreamTextureFactoryImpl::Create(
const scoped_refptr<cc::ContextProvider>& context_provider,
GpuChannelHost* channel,
- int view_id) {
- return new StreamTextureFactoryImpl(context_provider, channel, view_id);
+ int frame_id) {
+ return new StreamTextureFactoryImpl(context_provider, channel, frame_id);
}
StreamTextureFactoryImpl::StreamTextureFactoryImpl(
const scoped_refptr<cc::ContextProvider>& context_provider,
GpuChannelHost* channel,
- int view_id)
+ int frame_id)
: context_provider_(context_provider),
channel_(channel),
- view_id_(view_id) {
+ frame_id_(frame_id) {
DCHECK(channel);
}
@@ -106,7 +106,7 @@ StreamTextureProxy* StreamTextureFactoryImpl::CreateProxy() {
void StreamTextureFactoryImpl::EstablishPeer(int32 stream_id, int player_id) {
DCHECK(channel_.get());
channel_->Send(
- new GpuStreamTextureMsg_EstablishPeer(stream_id, view_id_, player_id));
+ new GpuStreamTextureMsg_EstablishPeer(stream_id, frame_id_, player_id));
}
unsigned StreamTextureFactoryImpl::CreateStreamTexture(
diff --git a/content/renderer/media/android/stream_texture_factory_impl.h b/content/renderer/media/android/stream_texture_factory_impl.h
index bebec8ccb7..7721c4812e 100644
--- a/content/renderer/media/android/stream_texture_factory_impl.h
+++ b/content/renderer/media/android/stream_texture_factory_impl.h
@@ -26,7 +26,7 @@ class StreamTextureFactoryImpl : public StreamTextureFactory {
static scoped_refptr<StreamTextureFactoryImpl> Create(
const scoped_refptr<cc::ContextProvider>& context_provider,
GpuChannelHost* channel,
- int view_id);
+ int frame_id);
// StreamTextureFactory implementation.
virtual StreamTextureProxy* CreateProxy() OVERRIDE;
@@ -43,12 +43,12 @@ class StreamTextureFactoryImpl : public StreamTextureFactory {
StreamTextureFactoryImpl(
const scoped_refptr<cc::ContextProvider>& context_provider,
GpuChannelHost* channel,
- int view_id);
+ int frame_id);
virtual ~StreamTextureFactoryImpl();
scoped_refptr<cc::ContextProvider> context_provider_;
scoped_refptr<GpuChannelHost> channel_;
- int view_id_;
+ int frame_id_;
DISALLOW_IMPLICIT_CONSTRUCTORS(StreamTextureFactoryImpl);
};
diff --git a/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc b/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc
index b5512a4b35..75536cbacc 100644
--- a/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc
+++ b/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc
@@ -136,16 +136,16 @@ void StreamTextureProxyImpl::OnFrameAvailable() {
scoped_refptr<StreamTextureFactorySynchronousImpl>
StreamTextureFactorySynchronousImpl::Create(
const CreateContextProviderCallback& try_create_callback,
- int view_id) {
- return new StreamTextureFactorySynchronousImpl(try_create_callback, view_id);
+ int frame_id) {
+ return new StreamTextureFactorySynchronousImpl(try_create_callback, frame_id);
}
StreamTextureFactorySynchronousImpl::StreamTextureFactorySynchronousImpl(
const CreateContextProviderCallback& try_create_callback,
- int view_id)
+ int frame_id)
: create_context_provider_callback_(try_create_callback),
context_provider_(create_context_provider_callback_.Run()),
- view_id_(view_id) {}
+ frame_id_(frame_id) {}
StreamTextureFactorySynchronousImpl::~StreamTextureFactorySynchronousImpl() {}
@@ -167,7 +167,7 @@ void StreamTextureFactorySynchronousImpl::EstablishPeer(int32 stream_id,
SurfaceTexturePeer::GetInstance()->EstablishSurfaceTexturePeer(
base::Process::Current().handle(),
surface_texture,
- view_id_,
+ frame_id_,
player_id);
}
}
diff --git a/content/renderer/media/android/stream_texture_factory_synchronous_impl.h b/content/renderer/media/android/stream_texture_factory_synchronous_impl.h
index cc4026a95c..3466c564c9 100644
--- a/content/renderer/media/android/stream_texture_factory_synchronous_impl.h
+++ b/content/renderer/media/android/stream_texture_factory_synchronous_impl.h
@@ -41,7 +41,7 @@ class StreamTextureFactorySynchronousImpl : public StreamTextureFactory {
static scoped_refptr<StreamTextureFactorySynchronousImpl> Create(
const CreateContextProviderCallback& try_create_callback,
- int view_id);
+ int frame_id);
virtual StreamTextureProxy* CreateProxy() OVERRIDE;
virtual void EstablishPeer(int32 stream_id, int player_id) OVERRIDE;
@@ -56,12 +56,12 @@ class StreamTextureFactorySynchronousImpl : public StreamTextureFactory {
friend class base::RefCounted<StreamTextureFactorySynchronousImpl>;
StreamTextureFactorySynchronousImpl(
const CreateContextProviderCallback& try_create_callback,
- int view_id);
+ int frame_id);
virtual ~StreamTextureFactorySynchronousImpl();
CreateContextProviderCallback create_context_provider_callback_;
scoped_refptr<ContextProvider> context_provider_;
- int view_id_;
+ int frame_id_;
DISALLOW_IMPLICIT_CONSTRUCTORS(StreamTextureFactorySynchronousImpl);
};
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index 9c230c1cdd..cddec41d3d 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -22,6 +22,7 @@
#include "content/renderer/media/android/renderer_demuxer_android.h"
#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/crypto/key_systems.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#include "content/renderer/media/webcontentdecryptionmodule_impl.h"
#include "content/renderer/media/webmediaplayer_delegate.h"
#include "content/renderer/media/webmediaplayer_util.h"
@@ -85,7 +86,8 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
blink::WebFrame* frame,
blink::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
- RendererMediaPlayerManager* manager,
+ RendererMediaPlayerManager* player_manager,
+ RendererCdmManager* cdm_manager,
scoped_refptr<StreamTextureFactory> factory,
const scoped_refptr<base::MessageLoopProxy>& media_loop,
media::MediaLog* media_log)
@@ -99,7 +101,8 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
pending_seek_(false),
seeking_(false),
did_loading_progress_(false),
- manager_(manager),
+ player_manager_(player_manager),
+ cdm_manager_(cdm_manager),
network_state_(WebMediaPlayer::NetworkStateEmpty),
ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
texture_id_(0),
@@ -121,20 +124,22 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
media_log_(media_log),
web_cdm_(NULL),
weak_factory_(this) {
- DCHECK(manager_);
+ DCHECK(player_manager_);
+ DCHECK(cdm_manager_);
DCHECK(main_thread_checker_.CalledOnValidThread());
- player_id_ = manager_->RegisterMediaPlayer(this);
+ player_id_ = player_manager_->RegisterMediaPlayer(this);
#if defined(VIDEO_HOLE)
- if (manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) {
+ force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()->
+ HasSwitch(switches::kForceUseOverlayEmbeddedVideo);
+ if (force_use_overlay_embedded_video_ ||
+ player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) {
// Defer stream texture creation until we are sure it's necessary.
needs_establish_peer_ = false;
current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1));
}
- force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()->
- HasSwitch(switches::kForceUseOverlayEmbeddedVideo);
#endif // defined(VIDEO_HOLE)
TryCreateStreamTextureProxyIfNeeded();
}
@@ -143,9 +148,9 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() {
SetVideoFrameProviderClient(NULL);
client_->setWebLayer(NULL);
- if (manager_) {
- manager_->DestroyPlayer(player_id_);
- manager_->UnregisterMediaPlayer(player_id_);
+ if (player_manager_) {
+ player_manager_->DestroyPlayer(player_id_);
+ player_manager_->UnregisterMediaPlayer(player_id_);
}
if (stream_id_) {
@@ -231,11 +236,11 @@ void WebMediaPlayerAndroid::load(LoadType load_type,
url_ = url;
GURL first_party_url = frame_->document().firstPartyForCookies();
- manager_->Initialize(
+ player_manager_->Initialize(
player_type_, player_id_, url, first_party_url, demuxer_client_id);
- if (manager_->ShouldEnterFullscreen(frame_))
- manager_->EnterFullscreen(player_id_, frame_);
+ if (player_manager_->ShouldEnterFullscreen(frame_))
+ player_manager_->EnterFullscreen(player_id_, frame_);
UpdateNetworkState(WebMediaPlayer::NetworkStateLoading);
UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing);
@@ -265,20 +270,22 @@ void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) {
void WebMediaPlayerAndroid::play() {
#if defined(VIDEO_HOLE)
if (hasVideo() && needs_external_surface_ &&
- !manager_->IsInFullscreen(frame_)) {
+ !player_manager_->IsInFullscreen(frame_)) {
DCHECK(!needs_establish_peer_);
- manager_->RequestExternalSurface(player_id_, last_computed_rect_);
+ player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
}
#endif // defined(VIDEO_HOLE)
TryCreateStreamTextureProxyIfNeeded();
// There is no need to establish the surface texture peer for fullscreen
// video.
- if (hasVideo() && needs_establish_peer_ && !manager_->IsInFullscreen(frame_))
+ if (hasVideo() && needs_establish_peer_ &&
+ !player_manager_->IsInFullscreen(frame_)) {
EstablishSurfaceTexturePeer();
+ }
if (paused())
- manager_->Start(player_id_);
+ player_manager_->Start(player_id_);
UpdatePlayingState(true);
UpdateNetworkState(WebMediaPlayer::NetworkStateLoading);
playing_started_ = true;
@@ -329,7 +336,7 @@ void WebMediaPlayerAndroid::seek(double seconds) {
media_source_delegate_->StartWaitingForSeek(seek_time_);
// Kick off the asynchronous seek!
- manager_->Seek(player_id_, seek_time_);
+ player_manager_->Seek(player_id_, seek_time_);
}
bool WebMediaPlayerAndroid::supportsSave() const {
@@ -341,7 +348,7 @@ void WebMediaPlayerAndroid::setRate(double rate) {
}
void WebMediaPlayerAndroid::setVolume(double volume) {
- manager_->SetVolume(player_id_, volume);
+ player_manager_->SetVolume(player_id_, volume);
}
bool WebMediaPlayerAndroid::hasVideo() const {
@@ -433,7 +440,7 @@ WebMediaPlayer::ReadyState WebMediaPlayerAndroid::readyState() const {
return ready_state_;
}
-const WebTimeRanges& WebMediaPlayerAndroid::buffered() {
+WebTimeRanges WebMediaPlayerAndroid::buffered() const {
if (media_source_delegate_)
return media_source_delegate_->Buffered();
return buffered_;
@@ -448,7 +455,7 @@ double WebMediaPlayerAndroid::maxTimeSeekable() const {
return duration();
}
-bool WebMediaPlayerAndroid::didLoadingProgress() const {
+bool WebMediaPlayerAndroid::didLoadingProgress() {
bool ret = did_loading_progress_;
did_loading_progress_ = false;
return ret;
@@ -696,10 +703,10 @@ void WebMediaPlayerAndroid::OnVideoSizeChanged(int width, int height) {
// TODO(qinmin): Change this so that only EME needs the H/W surface
if (force_use_overlay_embedded_video_ ||
(media_source_delegate_ && media_source_delegate_->IsVideoEncrypted() &&
- manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) {
+ player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) {
needs_external_surface_ = true;
- if (!paused() && !manager_->IsInFullscreen(frame_))
- manager_->RequestExternalSurface(player_id_, last_computed_rect_);
+ if (!paused() && !player_manager_->IsInFullscreen(frame_))
+ player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
} else if (stream_texture_proxy_ && !stream_id_) {
// Do deferred stream texture creation finally.
DoCreateStreamTexture();
@@ -756,10 +763,10 @@ void WebMediaPlayerAndroid::OnDisconnectedFromRemoteDevice() {
}
void WebMediaPlayerAndroid::OnDidEnterFullscreen() {
- if (!manager_->IsInFullscreen(frame_)) {
+ if (!player_manager_->IsInFullscreen(frame_)) {
frame_->view()->willEnterFullScreen();
frame_->view()->didEnterFullScreen();
- manager_->DidEnterFullscreen(frame_);
+ player_manager_->DidEnterFullscreen(frame_);
}
}
@@ -774,12 +781,12 @@ void WebMediaPlayerAndroid::OnDidExitFullscreen() {
#if defined(VIDEO_HOLE)
if (!paused() && needs_external_surface_)
- manager_->RequestExternalSurface(player_id_, last_computed_rect_);
+ player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
#endif // defined(VIDEO_HOLE)
frame_->view()->willExitFullScreen();
frame_->view()->didExitFullScreen();
- manager_->DidExitFullscreen();
+ player_manager_->DidExitFullscreen();
client_->repaint();
}
@@ -865,13 +872,13 @@ void WebMediaPlayerAndroid::ReleaseMediaResources() {
case WebMediaPlayer::NetworkStateDecodeError:
break;
}
- manager_->ReleaseResources(player_id_);
+ player_manager_->ReleaseResources(player_id_);
OnPlayerReleased();
}
void WebMediaPlayerAndroid::OnDestruct() {
- if (manager_)
- manager_->UnregisterMediaPlayer(player_id_);
+ if (player_manager_)
+ player_manager_->UnregisterMediaPlayer(player_id_);
Detach();
}
@@ -890,11 +897,11 @@ void WebMediaPlayerAndroid::Detach() {
current_frame_ = NULL;
}
is_remote_ = false;
- manager_ = NULL;
+ player_manager_ = NULL;
}
void WebMediaPlayerAndroid::Pause(bool is_media_related_action) {
- manager_->Pause(player_id_, is_media_related_action);
+ player_manager_->Pause(player_id_, is_media_related_action);
UpdatePlayingState(false);
}
@@ -1144,7 +1151,7 @@ void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) {
}
void WebMediaPlayerAndroid::setPoster(const blink::WebURL& poster) {
- manager_->SetPoster(player_id_, poster);
+ player_manager_->SetPoster(player_id_, poster);
}
void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) {
@@ -1304,7 +1311,7 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal(
if (current_key_system_.empty()) {
if (!proxy_decryptor_) {
proxy_decryptor_.reset(new ProxyDecryptor(
- manager_,
+ cdm_manager_,
base::Bind(&WebMediaPlayerAndroid::OnKeyAdded,
weak_factory_.GetWeakPtr()),
base::Bind(&WebMediaPlayerAndroid::OnKeyError,
@@ -1322,7 +1329,11 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal(
.Run(proxy_decryptor_->GetDecryptor());
}
- manager_->SetCdm(player_id_, proxy_decryptor_->GetCdmId());
+ // Only browser CDMs have CDM ID. Render side CDMs (e.g. ClearKey CDM) do
+ // not have a CDM ID and there is no need to call player_manager_->SetCdm().
+ if (proxy_decryptor_->GetCdmId() != RendererCdmManager::kInvalidCdmId)
+ player_manager_->SetCdm(player_id_, proxy_decryptor_->GetCdmId());
+
current_key_system_ = key_system;
} else if (key_system != current_key_system_) {
return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
@@ -1437,7 +1448,8 @@ void WebMediaPlayerAndroid::setContentDecryptionModule(
if (!decryptor_ready_cb_.is_null())
base::ResetAndReturn(&decryptor_ready_cb_).Run(web_cdm_->GetDecryptor());
- manager_->SetCdm(player_id_, web_cdm_->GetCdmId());
+ if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId)
+ player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId());
}
void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) {
@@ -1545,18 +1557,18 @@ void WebMediaPlayerAndroid::SetDecryptorReadyCB(
}
void WebMediaPlayerAndroid::enterFullscreen() {
- if (manager_->CanEnterFullscreen(frame_)) {
- manager_->EnterFullscreen(player_id_, frame_);
+ if (player_manager_->CanEnterFullscreen(frame_)) {
+ player_manager_->EnterFullscreen(player_id_, frame_);
SetNeedsEstablishPeer(false);
}
}
void WebMediaPlayerAndroid::exitFullscreen() {
- manager_->ExitFullscreen(player_id_);
+ player_manager_->ExitFullscreen(player_id_);
}
bool WebMediaPlayerAndroid::canEnterFullscreen() const {
- return manager_->CanEnterFullscreen(frame_);
+ return player_manager_->CanEnterFullscreen(frame_);
}
} // namespace content
diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h
index 9a6468a92b..7c853e1479 100644
--- a/content/renderer/media/android/webmediaplayer_android.h
+++ b/content/renderer/media/android/webmediaplayer_android.h
@@ -54,6 +54,7 @@ class WebLayerImpl;
}
namespace content {
+class RendererCdmManager;
class RendererMediaPlayerManager;
class WebContentDecryptionModuleImpl;
class WebMediaPlayerDelegate;
@@ -75,7 +76,8 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
WebMediaPlayerAndroid(blink::WebFrame* frame,
blink::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
- RendererMediaPlayerManager* manager,
+ RendererMediaPlayerManager* player_manager,
+ RendererCdmManager* cdm_manager,
scoped_refptr<StreamTextureFactory> factory,
const scoped_refptr<base::MessageLoopProxy>& media_loop,
media::MediaLog* media_log);
@@ -98,7 +100,7 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
virtual bool supportsSave() const;
virtual void setRate(double rate);
virtual void setVolume(double volume);
- virtual const blink::WebTimeRanges& buffered();
+ virtual blink::WebTimeRanges buffered() const;
virtual double maxTimeSeekable() const;
// Poster image, as defined in the <video> element.
@@ -132,7 +134,7 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
virtual double timelineOffset() const;
virtual double currentTime() const;
- virtual bool didLoadingProgress() const;
+ virtual bool didLoadingProgress();
// Internal states of loading and network.
virtual blink::WebMediaPlayer::NetworkState networkState() const;
@@ -331,13 +333,18 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
base::TimeDelta seek_time_;
// Whether loading has progressed since the last call to didLoadingProgress.
- mutable bool did_loading_progress_;
+ bool did_loading_progress_;
- // Manager for managing this object and for delegating method calls on
- // Render Thread.
- RendererMediaPlayerManager* manager_;
+ // Manages this object and delegates player calls to the browser process.
+ // Owned by RenderFrameImpl.
+ RendererMediaPlayerManager* player_manager_;
- // Player ID assigned by the |manager_|.
+ // Delegates EME calls to the browser process. Owned by RenderFrameImpl.
+ // TODO(xhwang): Remove |cdm_manager_| when prefixed EME is deprecated. See
+ // http://crbug.com/249976
+ RendererCdmManager* cdm_manager_;
+
+ // Player ID assigned by the |player_manager_|.
int player_id_;
// Current player states.
@@ -439,7 +446,7 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
// This is only Used by Clear Key key system implementation, where a renderer
// side CDM will be used. This is similar to WebMediaPlayerImpl. For other key
// systems, a browser side CDM will be used and we set CDM by calling
- // manager_->SetCdm() directly.
+ // player_manager_->SetCdm() directly.
media::DecryptorReadyCB decryptor_ready_cb_;
// NOTE: Weak pointers must be invalidated before all other member variables.
diff --git a/content/renderer/media/buffered_data_source_host_impl.cc b/content/renderer/media/buffered_data_source_host_impl.cc
index dd231f3843..45c97e6358 100644
--- a/content/renderer/media/buffered_data_source_host_impl.cc
+++ b/content/renderer/media/buffered_data_source_host_impl.cc
@@ -35,7 +35,7 @@ static base::TimeDelta TimeForByteOffset(
void BufferedDataSourceHostImpl::AddBufferedTimeRanges(
media::Ranges<base::TimeDelta>* buffered_time_ranges,
- base::TimeDelta media_duration) {
+ base::TimeDelta media_duration) const {
if (total_bytes_ && buffered_byte_ranges_.size()) {
for (size_t i = 0; i < buffered_byte_ranges_.size(); ++i) {
int64 start = buffered_byte_ranges_.start(i);
@@ -47,7 +47,7 @@ void BufferedDataSourceHostImpl::AddBufferedTimeRanges(
}
}
-bool BufferedDataSourceHostImpl::DidLoadingProgress() const {
+bool BufferedDataSourceHostImpl::DidLoadingProgress() {
bool ret = did_loading_progress_;
did_loading_progress_ = false;
return ret;
diff --git a/content/renderer/media/buffered_data_source_host_impl.h b/content/renderer/media/buffered_data_source_host_impl.h
index 788050fb75..d04d4671cc 100644
--- a/content/renderer/media/buffered_data_source_host_impl.h
+++ b/content/renderer/media/buffered_data_source_host_impl.h
@@ -25,13 +25,12 @@ class CONTENT_EXPORT BufferedDataSourceHostImpl
virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE;
// Translate the byte ranges to time ranges and append them to the list.
+ // TODO(sandersd): This is a confusing name, find something better.
void AddBufferedTimeRanges(
media::Ranges<base::TimeDelta>* buffered_time_ranges,
- base::TimeDelta media_duration);
+ base::TimeDelta media_duration) const;
- // TODO(sandersd): Change this to non-const along with Pipeline's version.
- // http://crbug.com/360251
- bool DidLoadingProgress() const;
+ bool DidLoadingProgress();
private:
// Total size of the data source.
@@ -42,7 +41,7 @@ class CONTENT_EXPORT BufferedDataSourceHostImpl
// True when AddBufferedByteRange() has been called more recently than
// DidLoadingProgress().
- mutable bool did_loading_progress_;
+ bool did_loading_progress_;
DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceHostImpl);
};
diff --git a/content/renderer/media/cdm_session_adapter.cc b/content/renderer/media/cdm_session_adapter.cc
index c3695147f5..71e347936d 100644
--- a/content/renderer/media/cdm_session_adapter.cc
+++ b/content/renderer/media/cdm_session_adapter.cc
@@ -30,6 +30,8 @@ CdmSessionAdapter::~CdmSessionAdapter() {}
bool CdmSessionAdapter::Initialize(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
+#elif defined(OS_ANDROID)
+ RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const std::string& key_system,
const GURL& security_origin) {
@@ -40,8 +42,7 @@ bool CdmSessionAdapter::Initialize(
#if defined(ENABLE_PEPPER_CDMS)
create_pepper_cdm_cb,
#elif defined(OS_ANDROID)
- // TODO(xhwang): Support Android.
- NULL,
+ manager,
&cdm_id_,
#endif // defined(ENABLE_PEPPER_CDMS)
base::Bind(&CdmSessionAdapter::OnSessionCreated, weak_this),
@@ -112,7 +113,7 @@ void CdmSessionAdapter::OnSessionCreated(uint32 session_id,
void CdmSessionAdapter::OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
WebContentDecryptionModuleSessionImpl* session = GetSession(session_id);
DLOG_IF(WARNING, !session) << __FUNCTION__ << " for unknown session "
<< session_id;
diff --git a/content/renderer/media/cdm_session_adapter.h b/content/renderer/media/cdm_session_adapter.h
index 1756054a86..0a3c81c69c 100644
--- a/content/renderer/media/cdm_session_adapter.h
+++ b/content/renderer/media/cdm_session_adapter.h
@@ -21,6 +21,9 @@ class GURL;
namespace content {
+#if defined(OS_ANDROID)
+class RendererCdmManager;
+#endif
class WebContentDecryptionModuleSessionImpl;
// Owns the CDM instance and makes calls from session objects to the CDM.
@@ -35,6 +38,8 @@ class CdmSessionAdapter : public base::RefCounted<CdmSessionAdapter> {
bool Initialize(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
+#elif defined(OS_ANDROID)
+ RendererCdmManager* manager,
#endif
const std::string& key_system,
const GURL& security_origin);
@@ -84,7 +89,7 @@ class CdmSessionAdapter : public base::RefCounted<CdmSessionAdapter> {
void OnSessionCreated(uint32 session_id, const std::string& web_session_id);
void OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url);
+ const GURL& destination_url);
void OnSessionReady(uint32 session_id);
void OnSessionClosed(uint32 session_id);
void OnSessionError(uint32 session_id,
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc
index 82d6b0f6d8..159e7f181b 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.cc
+++ b/content/renderer/media/crypto/content_decryption_module_factory.cc
@@ -12,8 +12,8 @@
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/crypto/ppapi_decryptor.h"
#elif defined(OS_ANDROID)
-#include "content/renderer/media/android/proxy_media_keys.h"
-#include "content/renderer/media/android/renderer_media_player_manager.h"
+#include "content/renderer/media/crypto/proxy_media_keys.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#endif // defined(ENABLE_PEPPER_CDMS)
namespace content {
@@ -24,7 +24,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
#elif defined(OS_ANDROID)
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
int* cdm_id,
#endif // defined(ENABLE_PEPPER_CDMS)
const media::SessionCreatedCB& session_created_cb,
@@ -38,7 +38,7 @@ scoped_ptr<media::MediaKeys> ContentDecryptionModuleFactory::Create(
// DCHECK(security_origin.is_valid());
#if defined(OS_ANDROID)
- *cdm_id = RendererMediaPlayerManager::kInvalidCdmId;
+ *cdm_id = RendererCdmManager::kInvalidCdmId;
#endif
if (CanUseAesDecryptor(key_system)) {
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.h b/content/renderer/media/crypto/content_decryption_module_factory.h
index d7d8269b13..805a11eb82 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.h
+++ b/content/renderer/media/crypto/content_decryption_module_factory.h
@@ -18,7 +18,7 @@ class GURL;
namespace content {
-class RendererMediaPlayerManager;
+class RendererCdmManager;
class ContentDecryptionModuleFactory {
public:
@@ -30,7 +30,7 @@ class ContentDecryptionModuleFactory {
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
#elif defined(OS_ANDROID)
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
int* cdm_id, // Output parameter indicating the CDM ID of the MediaKeys.
#endif // defined(ENABLE_PEPPER_CDMS)
const media::SessionCreatedCB& session_created_cb,
diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc
index 76d0203aed..7ab6cf9b7f 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.cc
+++ b/content/renderer/media/crypto/ppapi_decryptor.cc
@@ -361,7 +361,7 @@ void PpapiDecryptor::OnSessionCreated(uint32 session_id,
void PpapiDecryptor::OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
DCHECK(render_loop_proxy_->BelongsToCurrentThread());
session_message_cb_.Run(session_id, message, destination_url);
}
diff --git a/content/renderer/media/crypto/ppapi_decryptor.h b/content/renderer/media/crypto/ppapi_decryptor.h
index 430c3613de..54caebba3c 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.h
+++ b/content/renderer/media/crypto/ppapi_decryptor.h
@@ -93,7 +93,7 @@ class PpapiDecryptor : public media::MediaKeys, public media::Decryptor {
void OnSessionCreated(uint32 session_id, const std::string& web_session_id);
void OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url);
+ const GURL& destination_url);
void OnSessionReady(uint32 session_id);
void OnSessionClosed(uint32 session_id);
void OnSessionError(uint32 session_id,
diff --git a/content/renderer/media/crypto/proxy_decryptor.cc b/content/renderer/media/crypto/proxy_decryptor.cc
index 95fe49ffc7..6c1639e9be 100644
--- a/content/renderer/media/crypto/proxy_decryptor.cc
+++ b/content/renderer/media/crypto/proxy_decryptor.cc
@@ -19,7 +19,7 @@
#endif // defined(ENABLE_PEPPER_CDMS)
#if defined(OS_ANDROID)
-#include "content/renderer/media/android/renderer_media_player_manager.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#endif // defined(OS_ANDROID)
namespace content {
@@ -41,7 +41,7 @@ ProxyDecryptor::ProxyDecryptor(
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
#elif defined(OS_ANDROID)
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const KeyAddedCB& key_added_cb,
const KeyErrorCB& key_error_cb,
@@ -51,7 +51,7 @@ ProxyDecryptor::ProxyDecryptor(
create_pepper_cdm_cb_(create_pepper_cdm_cb),
#elif defined(OS_ANDROID)
manager_(manager),
- cdm_id_(RendererMediaPlayerManager::kInvalidCdmId),
+ cdm_id_(RendererCdmManager::kInvalidCdmId),
#endif // defined(ENABLE_PEPPER_CDMS)
key_added_cb_(key_added_cb),
key_error_cb_(key_error_cb),
@@ -223,9 +223,10 @@ void ProxyDecryptor::OnSessionCreated(uint32 session_id,
void ProxyDecryptor::OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
// Assumes that OnSessionCreated() has been called before this.
- key_message_cb_.Run(LookupWebSessionId(session_id), message, destination_url);
+ key_message_cb_.Run(
+ LookupWebSessionId(session_id), message, destination_url.spec());
}
void ProxyDecryptor::OnSessionReady(uint32 session_id) {
diff --git a/content/renderer/media/crypto/proxy_decryptor.h b/content/renderer/media/crypto/proxy_decryptor.h
index 2919ef7c71..2fdb903200 100644
--- a/content/renderer/media/crypto/proxy_decryptor.h
+++ b/content/renderer/media/crypto/proxy_decryptor.h
@@ -26,7 +26,7 @@ class GURL;
namespace content {
#if defined(OS_ANDROID)
-class RendererMediaPlayerManager;
+class RendererCdmManager;
#endif // defined(OS_ANDROID)
// ProxyDecryptor is for EME v0.1b only. It should not be used for the WD API.
@@ -58,7 +58,7 @@ class ProxyDecryptor {
#if defined(ENABLE_PEPPER_CDMS)
const CreatePepperCdmCB& create_pepper_cdm_cb,
#elif defined(OS_ANDROID)
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
#endif // defined(ENABLE_PEPPER_CDMS)
const KeyAddedCB& key_added_cb,
const KeyErrorCB& key_error_cb,
@@ -100,7 +100,7 @@ class ProxyDecryptor {
void OnSessionCreated(uint32 session_id, const std::string& web_session_id);
void OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& default_url);
+ const GURL& default_url);
void OnSessionReady(uint32 session_id);
void OnSessionClosed(uint32 session_id);
void OnSessionError(uint32 session_id,
@@ -119,7 +119,7 @@ class ProxyDecryptor {
// Callback to create the Pepper plugin.
CreatePepperCdmCB create_pepper_cdm_cb_;
#elif defined(OS_ANDROID)
- RendererMediaPlayerManager* manager_;
+ RendererCdmManager* manager_;
int cdm_id_;
#endif // defined(ENABLE_PEPPER_CDMS)
diff --git a/content/renderer/media/android/proxy_media_keys.cc b/content/renderer/media/crypto/proxy_media_keys.cc
index 68175c8e46..354211ff89 100644
--- a/content/renderer/media/android/proxy_media_keys.cc
+++ b/content/renderer/media/crypto/proxy_media_keys.cc
@@ -1,25 +1,22 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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 "content/renderer/media/android/proxy_media_keys.h"
+#include "content/renderer/media/crypto/proxy_media_keys.h"
#include <vector>
#include "base/basictypes.h"
#include "base/logging.h"
-#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/crypto/key_systems.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
namespace content {
-int ProxyMediaKeys::next_cdm_id_ =
- RendererMediaPlayerManager::kInvalidCdmId + 1;
-
scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create(
const std::string& key_system,
const GURL& security_origin,
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
const media::SessionCreatedCB& session_created_cb,
const media::SessionMessageCB& session_message_cb,
const media::SessionReadyCB& session_ready_cb,
@@ -39,6 +36,7 @@ scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create(
ProxyMediaKeys::~ProxyMediaKeys() {
manager_->DestroyCdm(cdm_id_);
+ manager_->UnregisterMediaKeys(cdm_id_);
}
bool ProxyMediaKeys::CreateSession(uint32 session_id,
@@ -94,7 +92,7 @@ void ProxyMediaKeys::OnSessionCreated(uint32 session_id,
void ProxyMediaKeys::OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url) {
+ const GURL& destination_url) {
session_message_cb_.Run(session_id, message, destination_url);
}
@@ -117,19 +115,19 @@ int ProxyMediaKeys::GetCdmId() const {
}
ProxyMediaKeys::ProxyMediaKeys(
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
const media::SessionCreatedCB& session_created_cb,
const media::SessionMessageCB& session_message_cb,
const media::SessionReadyCB& session_ready_cb,
const media::SessionClosedCB& session_closed_cb,
const media::SessionErrorCB& session_error_cb)
: manager_(manager),
- cdm_id_(next_cdm_id_++),
session_created_cb_(session_created_cb),
session_message_cb_(session_message_cb),
session_ready_cb_(session_ready_cb),
session_closed_cb_(session_closed_cb),
session_error_cb_(session_error_cb) {
+ cdm_id_ = manager->RegisterMediaKeys(this);
}
void ProxyMediaKeys::InitializeCdm(const std::string& key_system,
diff --git a/content/renderer/media/android/proxy_media_keys.h b/content/renderer/media/crypto/proxy_media_keys.h
index afe1719b57..87dd495262 100644
--- a/content/renderer/media/android/proxy_media_keys.h
+++ b/content/renderer/media/crypto/proxy_media_keys.h
@@ -1,9 +1,9 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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.
-#ifndef CONTENT_RENDERER_MEDIA_ANDROID_PROXY_MEDIA_KEYS_H_
-#define CONTENT_RENDERER_MEDIA_ANDROID_PROXY_MEDIA_KEYS_H_
+#ifndef CONTENT_RENDERER_MEDIA_CRYPTO_PROXY_MEDIA_KEYS_H_
+#define CONTENT_RENDERER_MEDIA_CRYPTO_PROXY_MEDIA_KEYS_H_
#include "base/basictypes.h"
#include "media/base/media_keys.h"
@@ -12,18 +12,15 @@ class GURL;
namespace content {
-class RendererMediaPlayerManager;
+class RendererCdmManager;
-// A MediaKeys proxy that wraps the EME part of RendererMediaPlayerManager.
-// TODO(xhwang): Instead of accessing RendererMediaPlayerManager directly, let
-// RendererMediaPlayerManager return a MediaKeys object that can be used by
-// ProxyDecryptor directly. Then we can remove this class!
+// A MediaKeys proxy that wraps the EME part of RendererCdmManager.
class ProxyMediaKeys : public media::MediaKeys {
public:
static scoped_ptr<ProxyMediaKeys> Create(
const std::string& key_system,
const GURL& security_origin,
- RendererMediaPlayerManager* manager,
+ RendererCdmManager* manager,
const media::SessionCreatedCB& session_created_cb,
const media::SessionMessageCB& session_message_cb,
const media::SessionReadyCB& session_ready_cb,
@@ -48,7 +45,7 @@ class ProxyMediaKeys : public media::MediaKeys {
void OnSessionCreated(uint32 session_id, const std::string& web_session_id);
void OnSessionMessage(uint32 session_id,
const std::vector<uint8>& message,
- const std::string& destination_url);
+ const GURL& destination_url);
void OnSessionReady(uint32 session_id);
void OnSessionClosed(uint32 session_id);
void OnSessionError(uint32 session_id,
@@ -58,7 +55,7 @@ class ProxyMediaKeys : public media::MediaKeys {
int GetCdmId() const;
private:
- ProxyMediaKeys(RendererMediaPlayerManager* manager,
+ ProxyMediaKeys(RendererCdmManager* manager,
const media::SessionCreatedCB& session_created_cb,
const media::SessionMessageCB& session_message_cb,
const media::SessionReadyCB& session_ready_cb,
@@ -68,12 +65,9 @@ class ProxyMediaKeys : public media::MediaKeys {
void InitializeCdm(const std::string& key_system,
const GURL& security_origin);
- // CDM ID should be unique per renderer process.
- // TODO(xhwang): Use uint32 to prevent undefined overflow behavior.
- static int next_cdm_id_;
-
- RendererMediaPlayerManager* manager_;
+ RendererCdmManager* manager_;
int cdm_id_;
+
media::SessionCreatedCB session_created_cb_;
media::SessionMessageCB session_message_cb_;
media::SessionReadyCB session_ready_cb_;
@@ -85,4 +79,4 @@ class ProxyMediaKeys : public media::MediaKeys {
} // namespace content
-#endif // CONTENT_RENDERER_MEDIA_ANDROID_PROXY_MEDIA_KEYS_H_
+#endif // CONTENT_RENDERER_MEDIA_CRYPTO_PROXY_MEDIA_KEYS_H_
diff --git a/content/renderer/media/crypto/renderer_cdm_manager.cc b/content/renderer/media/crypto/renderer_cdm_manager.cc
new file mode 100644
index 0000000000..986455f684
--- /dev/null
+++ b/content/renderer/media/crypto/renderer_cdm_manager.cc
@@ -0,0 +1,143 @@
+// 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 "content/renderer/media/crypto/renderer_cdm_manager.h"
+
+#include "base/stl_util.h"
+#include "content/common/media/cdm_messages.h"
+#include "content/renderer/media/crypto/proxy_media_keys.h"
+
+namespace content {
+
+// Maximum sizes for various EME API parameters. These are checks to prevent
+// unnecessarily large messages from being passed around, and the sizes
+// are somewhat arbitrary as the EME spec doesn't specify any limits.
+const size_t kMaxWebSessionIdLength = 512;
+const size_t kMaxSessionMessageLength = 10240; // 10 KB
+
+RendererCdmManager::RendererCdmManager(RenderFrame* render_frame)
+ : RenderFrameObserver(render_frame),
+ next_cdm_id_(kInvalidCdmId + 1) {
+}
+
+RendererCdmManager::~RendererCdmManager() {}
+
+bool RendererCdmManager::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(RendererCdmManager, msg)
+ IPC_MESSAGE_HANDLER(CdmMsg_SessionCreated, OnSessionCreated)
+ IPC_MESSAGE_HANDLER(CdmMsg_SessionMessage, OnSessionMessage)
+ IPC_MESSAGE_HANDLER(CdmMsg_SessionReady, OnSessionReady)
+ IPC_MESSAGE_HANDLER(CdmMsg_SessionClosed, OnSessionClosed)
+ IPC_MESSAGE_HANDLER(CdmMsg_SessionError, OnSessionError)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void RendererCdmManager::InitializeCdm(int cdm_id,
+ ProxyMediaKeys* media_keys,
+ const std::string& key_system,
+ const GURL& security_origin) {
+ DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
+ Send(new CdmHostMsg_InitializeCdm(
+ routing_id(), cdm_id, key_system, security_origin));
+}
+
+void RendererCdmManager::CreateSession(
+ int cdm_id,
+ uint32 session_id,
+ CdmHostMsg_CreateSession_ContentType content_type,
+ const std::vector<uint8>& init_data) {
+ DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
+ Send(new CdmHostMsg_CreateSession(
+ routing_id(), cdm_id, session_id, content_type, init_data));
+}
+
+void RendererCdmManager::UpdateSession(int cdm_id,
+ uint32 session_id,
+ const std::vector<uint8>& response) {
+ DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
+ Send(
+ new CdmHostMsg_UpdateSession(routing_id(), cdm_id, session_id, response));
+}
+
+void RendererCdmManager::ReleaseSession(int cdm_id, uint32 session_id) {
+ DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
+ Send(new CdmHostMsg_ReleaseSession(routing_id(), cdm_id, session_id));
+}
+
+void RendererCdmManager::DestroyCdm(int cdm_id) {
+ DCHECK(GetMediaKeys(cdm_id)) << "|cdm_id| not registered.";
+ Send(new CdmHostMsg_DestroyCdm(routing_id(), cdm_id));
+}
+
+void RendererCdmManager::OnSessionCreated(int cdm_id,
+ uint32 session_id,
+ const std::string& web_session_id) {
+ if (web_session_id.length() > kMaxWebSessionIdLength) {
+ OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
+ return;
+ }
+
+ ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
+ if (media_keys)
+ media_keys->OnSessionCreated(session_id, web_session_id);
+}
+
+void RendererCdmManager::OnSessionMessage(int cdm_id,
+ uint32 session_id,
+ const std::vector<uint8>& message,
+ const GURL& destination_url) {
+ if (message.size() > kMaxSessionMessageLength) {
+ OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
+ return;
+ }
+
+ ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
+ if (media_keys)
+ media_keys->OnSessionMessage(session_id, message, destination_url);
+}
+
+void RendererCdmManager::OnSessionReady(int cdm_id, uint32 session_id) {
+ ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
+ if (media_keys)
+ media_keys->OnSessionReady(session_id);
+}
+
+void RendererCdmManager::OnSessionClosed(int cdm_id, uint32 session_id) {
+ ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
+ if (media_keys)
+ media_keys->OnSessionClosed(session_id);
+}
+
+void RendererCdmManager::OnSessionError(int cdm_id,
+ uint32 session_id,
+ media::MediaKeys::KeyError error_code,
+ uint32 system_code) {
+ ProxyMediaKeys* media_keys = GetMediaKeys(cdm_id);
+ if (media_keys)
+ media_keys->OnSessionError(session_id, error_code, system_code);
+}
+
+int RendererCdmManager::RegisterMediaKeys(ProxyMediaKeys* media_keys) {
+ int cdm_id = next_cdm_id_++;
+ DCHECK_NE(cdm_id, kInvalidCdmId);
+ DCHECK(!ContainsKey(proxy_media_keys_map_, cdm_id));
+ proxy_media_keys_map_[cdm_id] = media_keys;
+ return cdm_id;
+}
+
+void RendererCdmManager::UnregisterMediaKeys(int cdm_id) {
+ DCHECK(ContainsKey(proxy_media_keys_map_, cdm_id));
+ proxy_media_keys_map_.erase(cdm_id);
+}
+
+ProxyMediaKeys* RendererCdmManager::GetMediaKeys(int cdm_id) {
+ std::map<int, ProxyMediaKeys*>::iterator iter =
+ proxy_media_keys_map_.find(cdm_id);
+ return (iter != proxy_media_keys_map_.end()) ? iter->second : NULL;
+}
+
+} // namespace content
diff --git a/content/renderer/media/crypto/renderer_cdm_manager.h b/content/renderer/media/crypto/renderer_cdm_manager.h
new file mode 100644
index 0000000000..a5ff82fc21
--- /dev/null
+++ b/content/renderer/media/crypto/renderer_cdm_manager.h
@@ -0,0 +1,90 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_
+#define CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "content/common/media/cdm_messages_enums.h"
+#include "content/public/renderer/render_frame_observer.h"
+#include "media/base/media_keys.h"
+#include "url/gurl.h"
+
+namespace blink {
+class WebFrame;
+}
+
+namespace content {
+
+class ProxyMediaKeys;
+
+// Class for managing all the CDM objects in the same RenderFrame.
+class RendererCdmManager : public RenderFrameObserver {
+ public:
+ static const int kInvalidCdmId = 0;
+
+ // Constructs a RendererCdmManager object for the |render_frame|.
+ explicit RendererCdmManager(RenderFrame* render_frame);
+ virtual ~RendererCdmManager();
+
+ // RenderFrameObserver overrides.
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+
+ // Encrypted media related methods.
+ void InitializeCdm(int cdm_id,
+ ProxyMediaKeys* media_keys,
+ const std::string& key_system,
+ const GURL& security_origin);
+ void CreateSession(int cdm_id,
+ uint32 session_id,
+ CdmHostMsg_CreateSession_ContentType conent_type,
+ const std::vector<uint8>& init_data);
+ void UpdateSession(int cdm_id,
+ uint32 session_id,
+ const std::vector<uint8>& response);
+ void ReleaseSession(int cdm_id, uint32 session_id);
+ void DestroyCdm(int cdm_id);
+
+ // Registers a ProxyMediaKeys object. Returns allocated CDM ID.
+ int RegisterMediaKeys(ProxyMediaKeys* media_keys);
+
+ // Unregisters a ProxyMediaKeys object identified by |cdm_id|.
+ void UnregisterMediaKeys(int cdm_id);
+
+ private:
+ // Gets the pointer to ProxyMediaKeys given the |cdm_id|.
+ ProxyMediaKeys* GetMediaKeys(int cdm_id);
+
+ // Message handlers.
+ void OnSessionCreated(int cdm_id,
+ uint32 session_id,
+ const std::string& web_session_id);
+ void OnSessionMessage(int cdm_id,
+ uint32 session_id,
+ const std::vector<uint8>& message,
+ const GURL& destination_url);
+ void OnSessionReady(int cdm_id, uint32 session_id);
+ void OnSessionClosed(int cdm_id, uint32 session_id);
+ void OnSessionError(int cdm_id,
+ uint32 session_id,
+ media::MediaKeys::KeyError error_code,
+ uint32 system_code);
+
+ // CDM ID should be unique per renderer frame.
+ // TODO(xhwang): Use uint32 to prevent undefined overflow behavior.
+ int next_cdm_id_;
+
+ // CDM ID to ProxyMediaKeys mapping.
+ std::map<int, ProxyMediaKeys*> proxy_media_keys_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(RendererCdmManager);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_CRYPTO_RENDERER_CDM_MANAGER_H_
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc
index 27a35bbb97..460ab8baf4 100644
--- a/content/renderer/media/media_stream_audio_processor.cc
+++ b/content/renderer/media/media_stream_audio_processor.cc
@@ -6,7 +6,6 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
-#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "content/public/common/content_switches.h"
#include "content/renderer/media/media_stream_audio_processor_options.h"
@@ -25,7 +24,6 @@ namespace content {
namespace {
using webrtc::AudioProcessing;
-using webrtc::MediaConstraintsInterface;
#if defined(OS_ANDROID)
const int kAudioProcessingSampleRate = 16000;
@@ -158,16 +156,13 @@ class MediaStreamAudioProcessor::MediaStreamAudioConverter
};
bool MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() {
- const std::string group_name =
- base::FieldTrialList::FindFullName("MediaStreamAudioTrackProcessing");
- return group_name == "Enabled" || CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableAudioTrackProcessing);
+ return !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableAudioTrackProcessing);
}
MediaStreamAudioProcessor::MediaStreamAudioProcessor(
const blink::WebMediaConstraints& constraints,
int effects,
- MediaStreamType type,
WebRtcPlayoutDataSource* playout_data_source)
: render_delay_ms_(0),
playout_data_source_(playout_data_source),
@@ -175,7 +170,7 @@ MediaStreamAudioProcessor::MediaStreamAudioProcessor(
typing_detected_(false) {
capture_thread_checker_.DetachFromThread();
render_thread_checker_.DetachFromThread();
- InitializeAudioProcessingModule(constraints, effects, type);
+ InitializeAudioProcessingModule(constraints, effects);
}
MediaStreamAudioProcessor::~MediaStreamAudioProcessor() {
@@ -283,68 +278,53 @@ void MediaStreamAudioProcessor::GetStats(AudioProcessorStats* stats) {
}
void MediaStreamAudioProcessor::InitializeAudioProcessingModule(
- const blink::WebMediaConstraints& constraints, int effects,
- MediaStreamType type) {
+ const blink::WebMediaConstraints& constraints, int effects) {
DCHECK(!audio_processing_);
- RTCMediaConstraints native_constraints(constraints);
+ MediaAudioConstraints audio_constraints(constraints, effects);
// Audio mirroring can be enabled even though audio processing is otherwise
// disabled.
- audio_mirroring_ = GetPropertyFromConstraints(
- &native_constraints, webrtc::MediaConstraintsInterface::kAudioMirroring);
+ audio_mirroring_ = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogAudioMirroring);
if (!IsAudioTrackProcessingEnabled()) {
RecordProcessingState(AUDIO_PROCESSING_IN_WEBRTC);
return;
}
- // Only apply the fixed constraints for gUM of MEDIA_DEVICE_AUDIO_CAPTURE.
- DCHECK(IsAudioMediaType(type));
- if (type == MEDIA_DEVICE_AUDIO_CAPTURE)
- ApplyFixedAudioConstraints(&native_constraints);
-
- if (effects & media::AudioParameters::ECHO_CANCELLER) {
- // If platform echo canceller is enabled, disable the software AEC.
- native_constraints.AddMandatory(
- MediaConstraintsInterface::kEchoCancellation,
- MediaConstraintsInterface::kValueFalse, true);
- }
-
#if defined(OS_IOS)
- // On iOS, VPIO provides built-in AEC and AGC.
- const bool enable_aec = false;
- const bool enable_agc = false;
+ // On iOS, VPIO provides built-in AGC and AEC.
+ const bool echo_cancellation = false;
+ const bool goog_agc = false;
#else
- const bool enable_aec = GetPropertyFromConstraints(
- &native_constraints, MediaConstraintsInterface::kEchoCancellation);
- const bool enable_agc = GetPropertyFromConstraints(
- &native_constraints, webrtc::MediaConstraintsInterface::kAutoGainControl);
+ const bool echo_cancellation =
+ audio_constraints.GetEchoCancellationProperty();
+ const bool goog_agc = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogAutoGainControl);
#endif
#if defined(OS_IOS) || defined(OS_ANDROID)
- const bool enable_experimental_aec = false;
- const bool enable_typing_detection = false;
+ const bool goog_experimental_aec = false;
+ const bool goog_typing_detection = false;
#else
- const bool enable_experimental_aec = GetPropertyFromConstraints(
- &native_constraints,
- MediaConstraintsInterface::kExperimentalEchoCancellation);
- const bool enable_typing_detection = GetPropertyFromConstraints(
- &native_constraints, MediaConstraintsInterface::kTypingNoiseDetection);
+ const bool goog_experimental_aec = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogExperimentalEchoCancellation);
+ const bool goog_typing_detection = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogTypingNoiseDetection);
#endif
- const bool enable_ns = GetPropertyFromConstraints(
- &native_constraints, MediaConstraintsInterface::kNoiseSuppression);
- const bool enable_experimental_ns = GetPropertyFromConstraints(
- &native_constraints,
- MediaConstraintsInterface::kExperimentalNoiseSuppression);
- const bool enable_high_pass_filter = GetPropertyFromConstraints(
- &native_constraints, MediaConstraintsInterface::kHighpassFilter);
-
- // Return immediately if no audio processing component is enabled.
- if (!enable_aec && !enable_experimental_aec && !enable_ns &&
- !enable_high_pass_filter && !enable_typing_detection && !enable_agc &&
- !enable_experimental_ns) {
+ const bool goog_ns = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogNoiseSuppression);
+ const bool goog_experimental_ns = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogExperimentalNoiseSuppression);
+ const bool goog_high_pass_filter = audio_constraints.GetProperty(
+ MediaAudioConstraints::kGoogHighpassFilter);
+
+ // Return immediately if no goog constraint is enabled.
+ if (!echo_cancellation && !goog_experimental_aec && !goog_ns &&
+ !goog_high_pass_filter && !goog_typing_detection &&
+ !goog_agc && !goog_experimental_ns) {
RecordProcessingState(AUDIO_PROCESSING_DISABLED);
return;
}
@@ -359,32 +339,33 @@ void MediaStreamAudioProcessor::InitializeAudioProcessingModule(
kAudioProcessingChannelLayout));
// Enable the audio processing components.
- if (enable_aec) {
+ if (echo_cancellation) {
EnableEchoCancellation(audio_processing_.get());
- if (enable_experimental_aec)
+
+ if (goog_experimental_aec)
EnableExperimentalEchoCancellation(audio_processing_.get());
if (playout_data_source_)
playout_data_source_->AddPlayoutSink(this);
}
- if (enable_ns)
+ if (goog_ns)
EnableNoiseSuppression(audio_processing_.get());
- if (enable_experimental_ns)
+ if (goog_experimental_ns)
EnableExperimentalNoiseSuppression(audio_processing_.get());
- if (enable_high_pass_filter)
+ if (goog_high_pass_filter)
EnableHighPassFilter(audio_processing_.get());
- if (enable_typing_detection) {
+ if (goog_typing_detection) {
// TODO(xians): Remove this |typing_detector_| after the typing suppression
// is enabled by default.
typing_detector_.reset(new webrtc::TypingDetection());
EnableTypingDetection(audio_processing_.get(), typing_detector_.get());
}
- if (enable_agc)
+ if (goog_agc)
EnableAutomaticGainControl(audio_processing_.get());
RecordProcessingState(AUDIO_PROCESSING_ENABLED);
diff --git a/content/renderer/media/media_stream_audio_processor.h b/content/renderer/media/media_stream_audio_processor.h
index 2233007bc1..b97cb395e4 100644
--- a/content/renderer/media/media_stream_audio_processor.h
+++ b/content/renderer/media/media_stream_audio_processor.h
@@ -11,7 +11,6 @@
#include "base/threading/thread_checker.h"
#include "base/time/time.h"
#include "content/common/content_export.h"
-#include "content/public/common/media_stream_request.h"
#include "content/renderer/media/webrtc_audio_device_impl.h"
#include "media/base/audio_converter.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
@@ -47,8 +46,8 @@ class CONTENT_EXPORT MediaStreamAudioProcessor :
NON_EXPORTED_BASE(public WebRtcPlayoutDataSource::Sink),
NON_EXPORTED_BASE(public AudioProcessorInterface) {
public:
- // Returns true if |kEnableAudioTrackProcessing| is on or if the
- // |MediaStreamAudioTrackProcessing| finch experiment is enabled.
+ // Returns false if |kDisableAudioTrackProcessing| is set to true, otherwise
+ // returns true.
static bool IsAudioTrackProcessingEnabled();
// |playout_data_source| is used to register this class as a sink to the
@@ -56,7 +55,6 @@ class CONTENT_EXPORT MediaStreamAudioProcessor :
// |playout_data_source| won't be used.
MediaStreamAudioProcessor(const blink::WebMediaConstraints& constraints,
int effects,
- MediaStreamType type,
WebRtcPlayoutDataSource* playout_data_source);
// Called when format of the capture data has changed.
@@ -125,8 +123,7 @@ class CONTENT_EXPORT MediaStreamAudioProcessor :
// Helper to initialize the WebRtc AudioProcessing.
void InitializeAudioProcessingModule(
- const blink::WebMediaConstraints& constraints, int effects,
- MediaStreamType type);
+ const blink::WebMediaConstraints& constraints, int effects);
// Helper to initialize the capture converter.
void InitializeCaptureConverter(const media::AudioParameters& source_params);
diff --git a/content/renderer/media/media_stream_audio_processor_options.cc b/content/renderer/media/media_stream_audio_processor_options.cc
index e1474c029b..eda4a390eb 100644
--- a/content/renderer/media/media_stream_audio_processor_options.cc
+++ b/content/renderer/media/media_stream_audio_processor_options.cc
@@ -8,57 +8,83 @@
#include "base/logging.h"
#include "base/metrics/field_trial.h"
#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "content/common/media/media_stream_options.h"
+#include "content/renderer/media/media_stream_constraints_util.h"
+#include "content/renderer/media/media_stream_source.h"
#include "content/renderer/media/rtc_media_constraints.h"
#include "media/audio/audio_parameters.h"
-#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
-#include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
#include "third_party/webrtc/modules/audio_processing/include/audio_processing.h"
#include "third_party/webrtc/modules/audio_processing/typing_detection.h"
namespace content {
+const char MediaAudioConstraints::kEchoCancellation[] = "echoCancellation";
+const char MediaAudioConstraints::kGoogEchoCancellation[] =
+ "googEchoCancellation";
+const char MediaAudioConstraints::kGoogExperimentalEchoCancellation[] =
+ "googEchoCancellation2";
+const char MediaAudioConstraints::kGoogAutoGainControl[] =
+ "googAutoGainControl";
+const char MediaAudioConstraints::kGoogExperimentalAutoGainControl[] =
+ "googAutoGainControl2";
+const char MediaAudioConstraints::kGoogNoiseSuppression[] =
+ "googNoiseSuppression";
+const char MediaAudioConstraints::kGoogExperimentalNoiseSuppression[] =
+ "googNoiseSuppression2";
+const char MediaAudioConstraints::kGoogHighpassFilter[] = "googHighpassFilter";
+const char MediaAudioConstraints::kGoogTypingNoiseDetection[] =
+ "googTypingNoiseDetection";
+const char MediaAudioConstraints::kGoogAudioMirroring[] = "googAudioMirroring";
+
namespace {
// Constant constraint keys which enables default audio constraints on
// mediastreams with audio.
struct {
const char* key;
- const char* value;
+ bool value;
} const kDefaultAudioConstraints[] = {
- { webrtc::MediaConstraintsInterface::kEchoCancellation,
- webrtc::MediaConstraintsInterface::kValueTrue },
+ { MediaAudioConstraints::kEchoCancellation, true },
+ { MediaAudioConstraints::kGoogEchoCancellation, true },
#if defined(OS_CHROMEOS) || defined(OS_MACOSX)
// Enable the extended filter mode AEC on platforms with known echo issues.
- { webrtc::MediaConstraintsInterface::kExperimentalEchoCancellation,
- webrtc::MediaConstraintsInterface::kValueTrue },
+ { MediaAudioConstraints::kGoogExperimentalEchoCancellation, true },
+#else
+ { MediaAudioConstraints::kGoogExperimentalEchoCancellation, false },
#endif
- { webrtc::MediaConstraintsInterface::kAutoGainControl,
- webrtc::MediaConstraintsInterface::kValueTrue },
- { webrtc::MediaConstraintsInterface::kExperimentalAutoGainControl,
- webrtc::MediaConstraintsInterface::kValueTrue },
- { webrtc::MediaConstraintsInterface::kNoiseSuppression,
- webrtc::MediaConstraintsInterface::kValueTrue },
- { webrtc::MediaConstraintsInterface::kHighpassFilter,
- webrtc::MediaConstraintsInterface::kValueTrue },
- { webrtc::MediaConstraintsInterface::kTypingNoiseDetection,
- webrtc::MediaConstraintsInterface::kValueTrue },
+ { MediaAudioConstraints::kGoogAutoGainControl, true },
+ { MediaAudioConstraints::kGoogExperimentalAutoGainControl, true },
+ { MediaAudioConstraints::kGoogNoiseSuppression, true },
+ { MediaAudioConstraints::kGoogHighpassFilter, true },
+ { MediaAudioConstraints::kGoogTypingNoiseDetection, true },
+ { MediaAudioConstraints::kGoogExperimentalNoiseSuppression, false },
#if defined(OS_WIN)
- { content::kMediaStreamAudioDucking,
- webrtc::MediaConstraintsInterface::kValueTrue },
+ { kMediaStreamAudioDucking, true },
+#else
+ { kMediaStreamAudioDucking, false },
#endif
};
+bool IsAudioProcessingConstraint(const std::string& key) {
+ // |kMediaStreamAudioDucking| does not require audio processing.
+ return key != kMediaStreamAudioDucking;
+}
+
} // namespace
-void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints) {
+// TODO(xians): Remove this method after the APM in WebRtc is deprecated.
+void MediaAudioConstraints::ApplyFixedAudioConstraints(
+ RTCMediaConstraints* constraints) {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kDefaultAudioConstraints); ++i) {
bool already_set_value;
if (!webrtc::FindConstraint(constraints, kDefaultAudioConstraints[i].key,
&already_set_value, NULL)) {
- constraints->AddOptional(kDefaultAudioConstraints[i].key,
- kDefaultAudioConstraints[i].value, false);
+ const std::string value = kDefaultAudioConstraints[i].value ?
+ webrtc::MediaConstraintsInterface::kValueTrue :
+ webrtc::MediaConstraintsInterface::kValueFalse;
+ constraints->AddOptional(kDefaultAudioConstraints[i].key, value, false);
} else {
DVLOG(1) << "Constraint " << kDefaultAudioConstraints[i].key
<< " already set to " << already_set_value;
@@ -66,21 +92,39 @@ void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints) {
}
}
-bool NeedsAudioProcessing(const blink::WebMediaConstraints& constraints,
- int effects) {
- RTCMediaConstraints native_constraints(constraints);
- ApplyFixedAudioConstraints(&native_constraints);
- if (effects & media::AudioParameters::ECHO_CANCELLER) {
- // If platform echo canceller is enabled, disable the software AEC.
- native_constraints.AddOptional(
- MediaConstraintsInterface::kEchoCancellation,
- MediaConstraintsInterface::kValueFalse, true);
+MediaAudioConstraints::MediaAudioConstraints(
+ const blink::WebMediaConstraints& constraints, int effects)
+ : constraints_(constraints),
+ effects_(effects),
+ default_audio_processing_constraint_value_(true) {
+ // The default audio processing constraints are turned off when
+ // - gUM has a specific kMediaStreamSource, which is used by tab capture
+ // and screen capture.
+ // - |kEchoCancellation| is explicitly set to false.
+ std::string value_str;
+ bool value_bool = false;
+ if ((GetConstraintValueAsString(constraints, kMediaStreamSource,
+ &value_str)) ||
+ (GetConstraintValueAsBoolean(constraints_, kEchoCancellation,
+ &value_bool) && !value_bool)) {
+ default_audio_processing_constraint_value_ = false;
}
+}
+
+MediaAudioConstraints::~MediaAudioConstraints() {}
+
+// TODO(xians): Remove this method after the APM in WebRtc is deprecated.
+bool MediaAudioConstraints::NeedsAudioProcessing() {
+ if (GetEchoCancellationProperty())
+ return true;
+
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kDefaultAudioConstraints); ++i) {
- bool value = false;
- if (webrtc::FindConstraint(&native_constraints,
- kDefaultAudioConstraints[i].key, &value, NULL) &&
- value) {
+ // |kEchoCancellation| and |kGoogEchoCancellation| have been convered by
+ // GetEchoCancellationProperty().
+ if (kDefaultAudioConstraints[i].key != kEchoCancellation &&
+ kDefaultAudioConstraints[i].key != kGoogEchoCancellation &&
+ IsAudioProcessingConstraint(kDefaultAudioConstraints[i].key) &&
+ GetProperty(kDefaultAudioConstraints[i].key)) {
return true;
}
}
@@ -88,17 +132,81 @@ bool NeedsAudioProcessing(const blink::WebMediaConstraints& constraints,
return false;
}
-bool GetPropertyFromConstraints(const MediaConstraintsInterface* constraints,
- const std::string& key) {
+bool MediaAudioConstraints::GetProperty(const std::string& key) {
+ // Return the value if the constraint is specified in |constraints|,
+ // otherwise return the default value.
+ bool value = false;
+ if (!GetConstraintValueAsBoolean(constraints_, key, &value))
+ value = GetDefaultValueForConstraint(constraints_, key);
+
+ return value;
+}
+
+bool MediaAudioConstraints::GetEchoCancellationProperty() {
+ // If platform echo canceller is enabled, disable the software AEC.
+ if (effects_ & media::AudioParameters::ECHO_CANCELLER)
+ return false;
+
+ // If |kEchoCancellation| is specified in the constraints, it will
+ // override the value of |kGoogEchoCancellation|.
bool value = false;
- return webrtc::FindConstraint(constraints, key, &value, NULL) && value;
+ if (GetConstraintValueAsBoolean(constraints_, kEchoCancellation, &value))
+ return value;
+
+ return GetProperty(kGoogEchoCancellation);
+}
+
+bool MediaAudioConstraints::IsValid() {
+ blink::WebVector<blink::WebMediaConstraint> mandatory;
+ constraints_.getMandatoryConstraints(mandatory);
+ for (size_t i = 0; i < mandatory.size(); ++i) {
+ const std::string key = mandatory[i].m_name.utf8();
+ if (key == kMediaStreamSource || key == kMediaStreamSourceId ||
+ key == MediaStreamSource::kSourceId) {
+ // Ignore Chrome specific Tab capture and |kSourceId| constraints.
+ continue;
+ }
+
+ bool valid = false;
+ for (size_t j = 0; j < ARRAYSIZE_UNSAFE(kDefaultAudioConstraints); ++j) {
+ if (key == kDefaultAudioConstraints[j].key) {
+ bool value = false;
+ valid = GetMandatoryConstraintValueAsBoolean(constraints_, key, &value);
+ break;
+ }
+ }
+
+ if (!valid) {
+ DLOG(ERROR) << "Invalid MediaStream constraint. Name: " << key;
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool MediaAudioConstraints::GetDefaultValueForConstraint(
+ const blink::WebMediaConstraints& constraints, const std::string& key) {
+ // |kMediaStreamAudioDucking| is not restricted by
+ // |default_audio_processing_constraint_value_| since it does not require
+ // audio processing.
+ if (!default_audio_processing_constraint_value_ &&
+ IsAudioProcessingConstraint(key))
+ return false;
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kDefaultAudioConstraints); ++i) {
+ if (kDefaultAudioConstraints[i].key == key)
+ return kDefaultAudioConstraints[i].value;
+ }
+
+ return false;
}
void EnableEchoCancellation(AudioProcessing* audio_processing) {
#if defined(OS_ANDROID) || defined(OS_IOS)
const std::string group_name =
base::FieldTrialList::FindFullName("ReplaceAECMWithAEC");
- if (group_name.empty() || (group_name != "Enabled")) {
+ if (group_name.empty() || group_name != "Enabled") {
// Mobile devices are using AECM.
int err = audio_processing->echo_control_mobile()->set_routing_mode(
webrtc::EchoControlMobile::kSpeakerphone);
diff --git a/content/renderer/media/media_stream_audio_processor_options.h b/content/renderer/media/media_stream_audio_processor_options.h
index 3ad41100b4..a051fa477e 100644
--- a/content/renderer/media/media_stream_audio_processor_options.h
+++ b/content/renderer/media/media_stream_audio_processor_options.h
@@ -8,12 +8,10 @@
#include <string>
#include "base/platform_file.h"
+#include "content/common/content_export.h"
+#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
-namespace blink {
-class WebMediaConstraints;
-}
-
namespace webrtc {
class AudioFrame;
@@ -30,26 +28,65 @@ class RTCMediaConstraints;
using webrtc::AudioProcessing;
using webrtc::MediaConstraintsInterface;
-// Merge |constraints| with |kDefaultAudioConstraints|. For any key which exists
-// in both, the value from |constraints| is maintained, including its
-// mandatory/optional status. New values from |kDefaultAudioConstraints| will
-// be added with mandatory status.
-void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints);
-
-// Checks if any audio constraints are set that requires audio processing to
-// be applied. |effects| is the bitmasks telling whether certain platform
-// hardware audio effects are enabled, like hardware echo cancellation. If some
-// hardware effect is enabled, the corresponding software audio processing will
-// be disabled.
-bool NeedsAudioProcessing(const blink::WebMediaConstraints& constraints,
- int effects);
-
-// Gets the property named by |key| from the |constraints|.
-// Returns true if the key is found and has a valid boolean value; Otherwise
-// false.
-bool GetPropertyFromConstraints(
- const MediaConstraintsInterface* constraints,
- const std::string& key);
+// A helper class to parse audio constraints from a blink::WebMediaConstraints
+// object.
+class CONTENT_EXPORT MediaAudioConstraints {
+ public:
+ // Constraint keys used by audio processing.
+ static const char kEchoCancellation[];
+ static const char kGoogEchoCancellation[];
+ static const char kGoogExperimentalEchoCancellation[];
+ static const char kGoogAutoGainControl[];
+ static const char kGoogExperimentalAutoGainControl[];
+ static const char kGoogNoiseSuppression[];
+ static const char kGoogExperimentalNoiseSuppression[];
+ static const char kGoogHighpassFilter[];
+ static const char kGoogTypingNoiseDetection[];
+ static const char kGoogAudioMirroring[];
+
+ // Merge |constraints| with |kDefaultAudioConstraints|. For any key which
+ // exists in both, the value from |constraints| is maintained, including its
+ // mandatory/optional status. New values from |kDefaultAudioConstraints| will
+ // be added with optional status.
+ static void ApplyFixedAudioConstraints(RTCMediaConstraints* constraints);
+
+ // |effects| is the bitmasks telling whether certain platform
+ // hardware audio effects are enabled, like hardware echo cancellation. If
+ // some hardware effect is enabled, the corresponding software audio
+ // processing will be disabled.
+ MediaAudioConstraints(const blink::WebMediaConstraints& constraints,
+ int effects);
+ virtual ~MediaAudioConstraints();
+
+ // Checks if any audio constraints are set that requires audio processing to
+ // be applied.
+ bool NeedsAudioProcessing();
+
+ // Gets the property of the constraint named by |key| in |constraints_|.
+ // Returns the constraint's value if the key is found; Otherwise returns the
+ // default value of the constraint.
+ // Note, for constraint of |kEchoCancellation| or |kGoogEchoCancellation|,
+ // clients should use GetEchoCancellationProperty().
+ bool GetProperty(const std::string& key);
+
+ // Gets the property of echo cancellation defined in |constraints_|. The
+ // returned value depends on a combination of |effects_|, |kEchoCancellation|
+ // and |kGoogEchoCancellation| in |constraints_|.
+ bool GetEchoCancellationProperty();
+
+ // Returns true if all the mandatory constraints in |constraints_| are valid;
+ // Otherwise return false.
+ bool IsValid();
+
+ private:
+ // Gets the default value of constraint named by |key| in |constraints|.
+ bool GetDefaultValueForConstraint(
+ const blink::WebMediaConstraints& constraints, const std::string& key);
+
+ const blink::WebMediaConstraints constraints_;
+ const int effects_;
+ bool default_audio_processing_constraint_value_;
+};
// Enables the echo cancellation in |audio_processing|.
void EnableEchoCancellation(AudioProcessing* audio_processing);
@@ -72,7 +109,7 @@ void EnableExperimentalEchoCancellation(AudioProcessing* audio_processing);
// Starts the echo cancellation dump in |audio_processing|.
void StartEchoCancellationDump(AudioProcessing* audio_processing,
- const base::PlatformFile& aec_dump_file);
+ const base::PlatformFile& aec_dump_file);
// Stops the echo cancellation dump in |audio_processing|.
// This method has no impact if echo cancellation dump has not been started on
diff --git a/content/renderer/media/media_stream_audio_processor_unittest.cc b/content/renderer/media/media_stream_audio_processor_unittest.cc
index ba938a6d01..d48f1c5694 100644
--- a/content/renderer/media/media_stream_audio_processor_unittest.cc
+++ b/content/renderer/media/media_stream_audio_processor_unittest.cc
@@ -11,6 +11,7 @@
#include "content/public/common/content_switches.h"
#include "content/public/common/media_stream_request.h"
#include "content/renderer/media/media_stream_audio_processor.h"
+#include "content/renderer/media/media_stream_audio_processor_options.h"
#include "content/renderer/media/mock_media_constraint_factory.h"
#include "media/audio/audio_parameters.h"
#include "media/base/audio_bus.h"
@@ -152,13 +153,15 @@ class MediaStreamAudioProcessorTest : public ::testing::Test {
};
TEST_F(MediaStreamAudioProcessorTest, WithoutAudioProcessing) {
- // Setup the audio processor without enabling the flag.
- blink::WebMediaConstraints constraints;
+ // Setup the audio processor with disabled flag on.
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableAudioTrackProcessing);
+ MockMediaConstraintFactory constraint_factory;
scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
new WebRtcAudioDeviceImpl());
scoped_refptr<MediaStreamAudioProcessor> audio_processor(
new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
- constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE,
+ constraint_factory.CreateWebMediaConstraints(), 0,
webrtc_audio_device.get()));
EXPECT_FALSE(audio_processor->has_audio_processing());
audio_processor->OnCaptureFormatChanged(params_);
@@ -173,15 +176,12 @@ TEST_F(MediaStreamAudioProcessorTest, WithoutAudioProcessing) {
}
TEST_F(MediaStreamAudioProcessorTest, WithAudioProcessing) {
- // Setup the audio processor with the flag enabled.
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableAudioTrackProcessing);
- blink::WebMediaConstraints constraints;
+ MockMediaConstraintFactory constraint_factory;
scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
new WebRtcAudioDeviceImpl());
scoped_refptr<MediaStreamAudioProcessor> audio_processor(
new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
- constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE,
+ constraint_factory.CreateWebMediaConstraints(), 0,
webrtc_audio_device.get()));
EXPECT_TRUE(audio_processor->has_audio_processing());
audio_processor->OnCaptureFormatChanged(params_);
@@ -197,16 +197,16 @@ TEST_F(MediaStreamAudioProcessorTest, WithAudioProcessing) {
}
TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) {
- // Setup the audio processor with enabling the flag.
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableAudioTrackProcessing);
- blink::WebMediaConstraints constraints;
scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device(
new WebRtcAudioDeviceImpl());
- // Create MediaStreamAudioProcessor instance for MEDIA_TAB_AUDIO_CAPTURE type.
+ // Create MediaStreamAudioProcessor instance for kMediaStreamSourceTab source.
+ MockMediaConstraintFactory tab_constraint_factory;
+ const std::string tab_string = kMediaStreamSourceTab;
+ tab_constraint_factory.AddMandatory(kMediaStreamSource,
+ tab_string);
scoped_refptr<MediaStreamAudioProcessor> audio_processor(
new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
- constraints, 0, MEDIA_TAB_AUDIO_CAPTURE,
+ tab_constraint_factory.CreateWebMediaConstraints(), 0,
webrtc_audio_device.get()));
EXPECT_FALSE(audio_processor->has_audio_processing());
audio_processor->OnCaptureFormatChanged(params_);
@@ -216,11 +216,15 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) {
params_.channels(),
params_.sample_rate() / 100);
- // Create MediaStreamAudioProcessor instance for MEDIA_LOOPBACK_AUDIO_CAPTURE.
- audio_processor =
- new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
- constraints, 0, MEDIA_LOOPBACK_AUDIO_CAPTURE,
- webrtc_audio_device.get());
+ // Create MediaStreamAudioProcessor instance for kMediaStreamSourceSystem
+ // source.
+ MockMediaConstraintFactory system_constraint_factory;
+ const std::string system_string = kMediaStreamSourceSystem;
+ system_constraint_factory.AddMandatory(kMediaStreamSource,
+ system_string);
+ audio_processor = new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
+ system_constraint_factory.CreateWebMediaConstraints(), 0,
+ webrtc_audio_device.get());
EXPECT_FALSE(audio_processor->has_audio_processing());
// Set |audio_processor| to NULL to make sure |webrtc_audio_device| outlives
@@ -229,10 +233,6 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) {
}
TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) {
- // Setup the audio processor with enabling the flag.
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableAudioTrackProcessing);
-
// Turn off the default constraints and pass it to MediaStreamAudioProcessor.
MockMediaConstraintFactory constraint_factory;
constraint_factory.DisableDefaultAudioConstraints();
@@ -241,7 +241,7 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) {
scoped_refptr<MediaStreamAudioProcessor> audio_processor(
new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
constraint_factory.CreateWebMediaConstraints(), 0,
- MEDIA_DEVICE_AUDIO_CAPTURE, webrtc_audio_device.get()));
+ webrtc_audio_device.get()));
EXPECT_FALSE(audio_processor->has_audio_processing());
audio_processor->OnCaptureFormatChanged(params_);
@@ -254,4 +254,100 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) {
audio_processor = NULL;
}
+TEST_F(MediaStreamAudioProcessorTest, VerifyConstraints) {
+ static const char* kDefaultAudioConstraints[] = {
+ MediaAudioConstraints::kEchoCancellation,
+ MediaAudioConstraints::kGoogAudioMirroring,
+ MediaAudioConstraints::kGoogAutoGainControl,
+ MediaAudioConstraints::kGoogEchoCancellation,
+ MediaAudioConstraints::kGoogExperimentalEchoCancellation,
+ MediaAudioConstraints::kGoogExperimentalAutoGainControl,
+ MediaAudioConstraints::kGoogExperimentalNoiseSuppression,
+ MediaAudioConstraints::kGoogHighpassFilter,
+ MediaAudioConstraints::kGoogNoiseSuppression,
+ MediaAudioConstraints::kGoogTypingNoiseDetection
+ };
+
+ // Verify mandatory constraints.
+ for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) {
+ MockMediaConstraintFactory constraint_factory;
+ constraint_factory.AddMandatory(kDefaultAudioConstraints[i], false);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ MediaAudioConstraints audio_constraints(constraints, 0);
+ EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i]));
+ }
+
+ // Verify optional constraints.
+ for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) {
+ MockMediaConstraintFactory constraint_factory;
+ constraint_factory.AddOptional(kDefaultAudioConstraints[i], false);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ MediaAudioConstraints audio_constraints(constraints, 0);
+ EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i]));
+ }
+
+ {
+ // Verify echo cancellation is off when platform aec effect is on.
+ MockMediaConstraintFactory constraint_factory;
+ MediaAudioConstraints audio_constraints(
+ constraint_factory.CreateWebMediaConstraints(),
+ media::AudioParameters::ECHO_CANCELLER);
+ EXPECT_FALSE(audio_constraints.GetEchoCancellationProperty());
+ }
+
+ {
+ // Verify |kEchoCancellation| overwrite |kGoogEchoCancellation|.
+ MockMediaConstraintFactory constraint_factory_1;
+ constraint_factory_1.AddOptional(MediaAudioConstraints::kEchoCancellation,
+ true);
+ constraint_factory_1.AddOptional(
+ MediaAudioConstraints::kGoogEchoCancellation, false);
+ blink::WebMediaConstraints constraints_1 =
+ constraint_factory_1.CreateWebMediaConstraints();
+ MediaAudioConstraints audio_constraints_1(constraints_1, 0);
+ EXPECT_TRUE(audio_constraints_1.GetEchoCancellationProperty());
+
+ MockMediaConstraintFactory constraint_factory_2;
+ constraint_factory_2.AddOptional(MediaAudioConstraints::kEchoCancellation,
+ false);
+ constraint_factory_2.AddOptional(
+ MediaAudioConstraints::kGoogEchoCancellation, true);
+ blink::WebMediaConstraints constraints_2 =
+ constraint_factory_2.CreateWebMediaConstraints();
+ MediaAudioConstraints audio_constraints_2(constraints_2, 0);
+ EXPECT_FALSE(audio_constraints_2.GetEchoCancellationProperty());
+ }
+
+ {
+ // When |kEchoCancellation| is explicitly set to false, the default values
+ // for all the constraints except |kMediaStreamAudioDucking| are false.
+ MockMediaConstraintFactory constraint_factory;
+ constraint_factory.AddOptional(MediaAudioConstraints::kEchoCancellation,
+ false);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ MediaAudioConstraints audio_constraints(constraints, 0);
+ for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) {
+ EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i]));
+ }
+ EXPECT_FALSE(audio_constraints.NeedsAudioProcessing());
+#if defined(OS_WIN)
+ EXPECT_TRUE(audio_constraints.GetProperty(kMediaStreamAudioDucking));
+#else
+ EXPECT_FALSE(audio_constraints.GetProperty(kMediaStreamAudioDucking));
+#endif
+ }
+}
+
+TEST_F(MediaStreamAudioProcessorTest, ValidateConstraints) {
+ MockMediaConstraintFactory constraint_factory;
+ const std::string dummy_constraint = "dummy";
+ constraint_factory.AddMandatory(dummy_constraint, true);
+ MediaAudioConstraints audio_constraints(
+ constraint_factory.CreateWebMediaConstraints(), 0);
+ EXPECT_FALSE(audio_constraints.IsValid());
+}
+
} // namespace content
diff --git a/content/renderer/media/media_stream_audio_source.cc b/content/renderer/media/media_stream_audio_source.cc
index a8aa7d6c4d..069f4e3825 100644
--- a/content/renderer/media/media_stream_audio_source.cc
+++ b/content/renderer/media/media_stream_audio_source.cc
@@ -10,7 +10,7 @@ MediaStreamAudioSource::MediaStreamAudioSource(
int render_view_id,
const StreamDeviceInfo& device_info,
const SourceStoppedCallback& stop_callback,
- MediaStreamDependencyFactory* factory)
+ PeerConnectionDependencyFactory* factory)
: render_view_id_(render_view_id),
factory_(factory) {
SetDeviceInfo(device_info);
diff --git a/content/renderer/media/media_stream_audio_source.h b/content/renderer/media/media_stream_audio_source.h
index 08730d9219..29f1d4cfba 100644
--- a/content/renderer/media/media_stream_audio_source.h
+++ b/content/renderer/media/media_stream_audio_source.h
@@ -7,8 +7,8 @@
#include "base/compiler_specific.h"
#include "content/common/content_export.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_source.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
@@ -20,7 +20,7 @@ class CONTENT_EXPORT MediaStreamAudioSource
MediaStreamAudioSource(int render_view_id,
const StreamDeviceInfo& device_info,
const SourceStoppedCallback& stop_callback,
- MediaStreamDependencyFactory* factory);
+ PeerConnectionDependencyFactory* factory);
MediaStreamAudioSource();
virtual ~MediaStreamAudioSource();
@@ -56,7 +56,7 @@ class CONTENT_EXPORT MediaStreamAudioSource
scoped_refptr<WebRtcAudioCapturer> audio_capturer_;
- MediaStreamDependencyFactory* factory_;
+ PeerConnectionDependencyFactory* factory_;
DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource);
};
diff --git a/content/renderer/media/media_stream_center.cc b/content/renderer/media/media_stream_center.cc
index 934790e2f6..9d663497f3 100644
--- a/content/renderer/media/media_stream_center.cc
+++ b/content/renderer/media/media_stream_center.cc
@@ -13,10 +13,10 @@
#include "content/public/renderer/media_stream_audio_sink.h"
#include "content/public/renderer/render_thread.h"
#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_source.h"
#include "content/renderer/media/media_stream_video_source.h"
#include "content/renderer/media/media_stream_video_track.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc_local_audio_source_provider.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
@@ -37,7 +37,7 @@ namespace {
void CreateNativeAudioMediaStreamTrack(
const blink::WebMediaStreamTrack& track,
- MediaStreamDependencyFactory* factory) {
+ PeerConnectionDependencyFactory* factory) {
DCHECK(!track.extraData());
blink::WebMediaStreamSource source = track.source();
DCHECK_EQ(source.type(), blink::WebMediaStreamSource::TypeAudio);
@@ -53,14 +53,22 @@ void CreateNativeVideoMediaStreamTrack(
MediaStreamVideoSource::GetVideoSource(source);
DCHECK(native_source);
blink::WebMediaStreamTrack writable_track(track);
+ // TODO(perkj): The constraints to use here should be passed from blink when
+ // a new track is created. For cloning, it should be the constraints of the
+ // cloned track and not the originating source.
+ // Also - source.constraints() returns an uninitialized constraint if the
+ // source is coming from a remote video track. See http://crbug/287805.
+ blink::WebMediaConstraints constraints = source.constraints();
+ if (constraints.isNull())
+ constraints.initialize();
writable_track.setExtraData(
- new MediaStreamVideoTrack(native_source, source.constraints(),
+ new MediaStreamVideoTrack(native_source, constraints,
MediaStreamVideoSource::ConstraintsCallback(),
track.isEnabled()));
}
void CreateNativeMediaStreamTrack(const blink::WebMediaStreamTrack& track,
- MediaStreamDependencyFactory* factory) {
+ PeerConnectionDependencyFactory* factory) {
DCHECK(!track.isNull() && !track.extraData());
DCHECK(!track.source().isNull());
@@ -77,7 +85,7 @@ void CreateNativeMediaStreamTrack(const blink::WebMediaStreamTrack& track,
} // namespace
MediaStreamCenter::MediaStreamCenter(blink::WebMediaStreamCenterClient* client,
- MediaStreamDependencyFactory* factory)
+ PeerConnectionDependencyFactory* factory)
: rtc_factory_(factory), next_request_id_(0) {}
MediaStreamCenter::~MediaStreamCenter() {}
@@ -133,7 +141,7 @@ MediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(
static_cast<MediaStreamTrack*>(track.extraData());
// Only local audio track is supported now.
// TODO(xians): Support remote audio track.
- if (!media_stream_track || !media_stream_track->is_local_track ()) {
+ if (!media_stream_track || !media_stream_track->is_local_track()) {
NOTIMPLEMENTED();
return NULL;
}
@@ -180,7 +188,6 @@ void MediaStreamCenter::didCreateMediaStream(blink::WebMediaStream& stream) {
if (!MediaStreamTrack::GetTrack(video_tracks[i]))
CreateNativeMediaStreamTrack(video_tracks[i], rtc_factory_);
}
-
}
bool MediaStreamCenter::didAddMediaStreamTrack(
diff --git a/content/renderer/media/media_stream_center.h b/content/renderer/media/media_stream_center.h
index 90b698064f..d2dfa98cd5 100644
--- a/content/renderer/media/media_stream_center.h
+++ b/content/renderer/media/media_stream_center.h
@@ -23,14 +23,14 @@ class WebMediaStreamCenterClient;
}
namespace content {
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
class CONTENT_EXPORT MediaStreamCenter
: NON_EXPORTED_BASE(public blink::WebMediaStreamCenter),
public RenderProcessObserver {
public:
MediaStreamCenter(blink::WebMediaStreamCenterClient* client,
- MediaStreamDependencyFactory* factory);
+ PeerConnectionDependencyFactory* factory);
virtual ~MediaStreamCenter();
private:
@@ -76,7 +76,7 @@ class CONTENT_EXPORT MediaStreamCenter
// |rtc_factory_| is a weak pointer and is owned by the RenderThreadImpl.
// It is valid as long as RenderThreadImpl exist.
- MediaStreamDependencyFactory* rtc_factory_;
+ PeerConnectionDependencyFactory* rtc_factory_;
// A strictly increasing id that's used to label incoming GetSources()
// requests.
diff --git a/content/renderer/media/media_stream_client.h b/content/renderer/media/media_stream_client.h
deleted file mode 100644
index 01b4233354..0000000000
--- a/content/renderer/media/media_stream_client.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CLIENT_H_
-#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CLIENT_H_
-
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "content/renderer/media/video_frame_provider.h"
-
-class GURL;
-
-namespace content {
-
-class MediaStreamAudioRenderer;
-
-// Define an interface for media stream client to get some information about
-// the media stream.
-class MediaStreamClient {
- public:
- // Check if the |url| is derived from a media stream object.
- virtual bool IsMediaStream(const GURL& url) = 0;
-
- virtual scoped_refptr<VideoFrameProvider> GetVideoFrameProvider(
- const GURL& url,
- const base::Closure& error_cb,
- const VideoFrameProvider::RepaintCB& repaint_cb) = 0;
-
- virtual scoped_refptr<MediaStreamAudioRenderer> GetAudioRenderer(
- const GURL& url, int render_frame_id) = 0;
-
- protected:
- virtual ~MediaStreamClient() {}
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CLIENT_H_
diff --git a/content/renderer/media/media_stream_constraints_util.cc b/content/renderer/media/media_stream_constraints_util.cc
new file mode 100644
index 0000000000..ddc223dacc
--- /dev/null
+++ b/content/renderer/media/media_stream_constraints_util.cc
@@ -0,0 +1,132 @@
+// 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 "content/renderer/media/media_stream_constraints_util.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+
+namespace content {
+
+namespace {
+
+// Convert a string ("true", "false") to a boolean.
+bool ConvertStringToBoolean(const std::string& string, bool* value) {
+ static const char kValueTrue[] = "true";
+ static const char kValueFalse[] = "false";
+
+ *value = (string == kValueTrue);
+ return *value || (string == kValueFalse);
+}
+
+} // namespace
+
+bool GetConstraintValueAsBoolean(const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value) {
+ return GetMandatoryConstraintValueAsBoolean(constraints, name, value) ||
+ GetOptionalConstraintValueAsBoolean(constraints, name, value);
+}
+
+bool GetConstraintValueAsInteger(const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value) {
+ return GetMandatoryConstraintValueAsInteger(constraints, name, value) ||
+ GetOptionalConstraintValueAsInteger(constraints, name, value);
+}
+
+bool GetConstraintValueAsString(const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ std::string* value) {
+ blink::WebString value_str;
+ base::string16 name_16 = base::UTF8ToUTF16(name);
+ if (!constraints.getMandatoryConstraintValue(name_16, value_str) &&
+ !constraints.getOptionalConstraintValue(name_16, value_str)) {
+ return false;
+ }
+
+ *value = value_str.utf8();
+ return true;
+}
+
+bool GetMandatoryConstraintValueAsBoolean(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value) {
+ blink::WebString value_str;
+ if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+
+ return ConvertStringToBoolean(value_str.utf8(), value);
+}
+
+bool GetMandatoryConstraintValueAsInteger(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value) {
+ blink::WebString value_str;
+ if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+
+ return base::StringToInt(value_str.utf8(), value);
+}
+
+bool GetMandatoryConstraintValueAsDouble(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ double* value) {
+ blink::WebString value_str;
+ if (!constraints.getMandatoryConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+ return base::StringToDouble(value_str.utf8(), value);
+}
+
+bool GetOptionalConstraintValueAsBoolean(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value) {
+ blink::WebString value_str;
+ if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+
+ return ConvertStringToBoolean(value_str.utf8(), value);
+}
+
+bool GetOptionalConstraintValueAsInteger(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value) {
+ blink::WebString value_str;
+ if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+
+ return base::StringToInt(value_str.utf8(), value);
+}
+
+bool GetOptionalConstraintValueAsDouble(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ double* value) {
+ blink::WebString value_str;
+ if (!constraints.getOptionalConstraintValue(base::UTF8ToUTF16(name),
+ value_str)) {
+ return false;
+ }
+
+ return base::StringToDouble(value_str.utf8(), value);
+}
+
+} // namespace content
diff --git a/content/renderer/media/media_stream_constraints_util.h b/content/renderer/media/media_stream_constraints_util.h
new file mode 100644
index 0000000000..2068588b99
--- /dev/null
+++ b/content/renderer/media/media_stream_constraints_util.h
@@ -0,0 +1,87 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_H_
+#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_H_
+
+#include <string>
+
+#include "content/common/content_export.h"
+
+namespace blink {
+class WebMediaConstraints;
+class WebString;
+}
+
+namespace content {
+
+// Method to get boolean value of constraint with |name| from constraints.
+// Returns true if the constraint is specified in either mandatory or optional
+// constraints.
+bool CONTENT_EXPORT GetConstraintValueAsBoolean(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value);
+
+// Method to get int value of constraint with |name| from constraints.
+// Returns true if the constraint is specified in either mandatory or Optional
+// constraints.
+bool CONTENT_EXPORT GetConstraintValueAsInteger(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value);
+
+// Method to get std::string value of constraint with |name| from constraints.
+// Returns true if the constraint is specified in either mandatory or Optional
+// constraints.
+bool CONTENT_EXPORT GetConstraintValueAsString(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ std::string* value);
+
+// Method to get boolean value of constraint with |name| from the
+// mandatory constraints.
+bool CONTENT_EXPORT GetMandatoryConstraintValueAsBoolean(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value);
+
+// Method to get int value of constraint with |name| from the
+// mandatory constraints.
+bool CONTENT_EXPORT GetMandatoryConstraintValueAsInteger(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value);
+
+// Method to get double value of constraint with |name| from the
+// mandatory constraints.
+bool CONTENT_EXPORT GetMandatoryConstraintValueAsDouble(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ double* value);
+
+// Method to get bool value of constraint with |name| from the
+// optional constraints.
+bool CONTENT_EXPORT GetOptionalConstraintValueAsBoolean(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ bool* value);
+
+// Method to get int value of constraint with |name| from the
+// optional constraints.
+bool CONTENT_EXPORT GetOptionalConstraintValueAsInteger(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ int* value);
+
+// Method to get double value of constraint with |name| from the
+// optional constraints.
+bool CONTENT_EXPORT GetOptionalConstraintValueAsDouble(
+ const blink::WebMediaConstraints& constraints,
+ const std::string& name,
+ double* value);
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_H_
diff --git a/content/renderer/media/media_stream_constraints_util_unittest.cc b/content/renderer/media/media_stream_constraints_util_unittest.cc
new file mode 100644
index 0000000000..37e7df66dd
--- /dev/null
+++ b/content/renderer/media/media_stream_constraints_util_unittest.cc
@@ -0,0 +1,103 @@
+// 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 <string>
+
+#include "content/renderer/media/media_stream_audio_processor_options.h"
+#include "content/renderer/media/media_stream_constraints_util.h"
+#include "content/renderer/media/media_stream_video_source.h"
+#include "content/renderer/media/mock_media_constraint_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class MediaStreamConstraintsUtilTest : public testing::Test {
+};
+
+TEST_F(MediaStreamConstraintsUtilTest, BooleanConstraints) {
+ static const std::string kValueTrue = "true";
+ static const std::string kValueFalse = "false";
+
+ MockMediaConstraintFactory constraint_factory;
+ // Mandatory constraints.
+ constraint_factory.AddMandatory(MediaAudioConstraints::kEchoCancellation,
+ kValueTrue);
+ constraint_factory.AddMandatory(MediaAudioConstraints::kGoogEchoCancellation,
+ kValueFalse);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ bool value_true = false;
+ bool value_false = false;
+ EXPECT_TRUE(GetMandatoryConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kEchoCancellation, &value_true));
+ EXPECT_TRUE(GetMandatoryConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kGoogEchoCancellation, &value_false));
+ EXPECT_TRUE(value_true);
+ EXPECT_FALSE(value_false);
+
+ // Optional constraints.
+ constraint_factory.AddOptional(MediaAudioConstraints::kEchoCancellation,
+ kValueFalse);
+ constraint_factory.AddOptional(MediaAudioConstraints::kGoogEchoCancellation,
+ kValueTrue);
+ constraints = constraint_factory.CreateWebMediaConstraints();
+ EXPECT_TRUE(GetOptionalConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kEchoCancellation, &value_false));
+ EXPECT_TRUE(GetOptionalConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kGoogEchoCancellation,
+ &value_true));
+ EXPECT_TRUE(value_true);
+ EXPECT_FALSE(value_false);
+}
+
+TEST_F(MediaStreamConstraintsUtilTest, IntConstraints) {
+ MockMediaConstraintFactory constraint_factory;
+ int width = 600;
+ int height = 480;
+ constraint_factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, width);
+ constraint_factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, height);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ int value_width = 0;
+ int value_height = 0;
+ EXPECT_TRUE(GetMandatoryConstraintValueAsInteger(
+ constraints, MediaStreamVideoSource::kMaxWidth, &value_width));
+ EXPECT_TRUE(GetMandatoryConstraintValueAsInteger(
+ constraints, MediaStreamVideoSource::kMaxHeight, &value_height));
+ EXPECT_EQ(width, value_width);
+ EXPECT_EQ(height, value_height);
+
+ width = 720;
+ height = 600;
+ constraint_factory.AddOptional(MediaStreamVideoSource::kMaxWidth, width);
+ constraint_factory.AddOptional(MediaStreamVideoSource::kMaxHeight, height);
+ constraints = constraint_factory.CreateWebMediaConstraints();
+ EXPECT_TRUE(GetOptionalConstraintValueAsInteger(
+ constraints, MediaStreamVideoSource::kMaxWidth, &value_width));
+ EXPECT_TRUE(GetOptionalConstraintValueAsInteger(
+ constraints, MediaStreamVideoSource::kMaxHeight, &value_height));
+ EXPECT_EQ(width, value_width);
+ EXPECT_EQ(height, value_height);
+}
+
+TEST_F(MediaStreamConstraintsUtilTest, WrongBooleanConstraints) {
+ static const std::string kWrongValueTrue = "True";
+ static const std::string kWrongValueFalse = "False";
+ MockMediaConstraintFactory constraint_factory;
+ constraint_factory.AddMandatory(MediaAudioConstraints::kEchoCancellation,
+ kWrongValueTrue);
+ constraint_factory.AddMandatory(MediaAudioConstraints::kGoogEchoCancellation,
+ kWrongValueFalse);
+ blink::WebMediaConstraints constraints =
+ constraint_factory.CreateWebMediaConstraints();
+ bool value_false = false;
+ EXPECT_FALSE(GetMandatoryConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kEchoCancellation, &value_false));
+ EXPECT_FALSE(value_false);
+ EXPECT_FALSE(GetMandatoryConstraintValueAsBoolean(
+ constraints, MediaAudioConstraints::kGoogEchoCancellation, &value_false));
+ EXPECT_FALSE(value_false);
+}
+
+} // namespace content
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc
index 1f09817524..e1bb11196e 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -11,26 +11,20 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_audio_renderer.h"
#include "content/renderer/media/media_stream_audio_source.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_dispatcher.h"
#include "content/renderer/media/media_stream_video_capturer_source.h"
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/peer_connection_tracker.h"
-#include "content/renderer/media/rtc_video_renderer.h"
+#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
-#include "content/renderer/media/webrtc_audio_renderer.h"
-#include "content/renderer/media/webrtc_local_audio_renderer.h"
#include "content/renderer/media/webrtc_logging.h"
#include "content/renderer/media/webrtc_uma_histograms.h"
#include "content/renderer/render_thread_impl.h"
-#include "media/base/audio_hardware_config.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
-#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
namespace content {
namespace {
@@ -57,21 +51,12 @@ void CopyStreamConstraints(const blink::WebMediaConstraints& constraints,
static int g_next_request_id = 0;
-void GetDefaultOutputDeviceParams(
- int* output_sample_rate, int* output_buffer_size) {
- // Fetch the default audio output hardware config.
- media::AudioHardwareConfig* hardware_config =
- RenderThreadImpl::current()->GetAudioHardwareConfig();
- *output_sample_rate = hardware_config->GetOutputSampleRate();
- *output_buffer_size = hardware_config->GetOutputBufferSize();
-}
-
} // namespace
MediaStreamImpl::MediaStreamImpl(
RenderView* render_view,
MediaStreamDispatcher* media_stream_dispatcher,
- MediaStreamDependencyFactory* dependency_factory)
+ PeerConnectionDependencyFactory* dependency_factory)
: RenderViewObserver(render_view),
dependency_factory_(dependency_factory),
media_stream_dispatcher_(media_stream_dispatcher) {
@@ -185,99 +170,6 @@ void MediaStreamImpl::cancelUserMediaRequest(
}
}
-blink::WebMediaStream MediaStreamImpl::GetMediaStream(
- const GURL& url) {
- return blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url);
-}
-
-bool MediaStreamImpl::IsMediaStream(const GURL& url) {
- blink::WebMediaStream web_stream(
- blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
-
- return (!web_stream.isNull() &&
- (MediaStream::GetMediaStream(web_stream) != NULL));
-}
-
-scoped_refptr<VideoFrameProvider>
-MediaStreamImpl::GetVideoFrameProvider(
- const GURL& url,
- const base::Closure& error_cb,
- const VideoFrameProvider::RepaintCB& repaint_cb) {
- DCHECK(CalledOnValidThread());
- blink::WebMediaStream web_stream(GetMediaStream(url));
-
- if (web_stream.isNull() || !web_stream.extraData())
- return NULL; // This is not a valid stream.
-
- DVLOG(1) << "MediaStreamImpl::GetVideoFrameProvider stream:"
- << base::UTF16ToUTF8(web_stream.id());
-
- blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
- web_stream.videoTracks(video_tracks);
- if (video_tracks.isEmpty() ||
- !MediaStreamVideoTrack::GetTrack(video_tracks[0])) {
- return NULL;
- }
-
- return new RTCVideoRenderer(video_tracks[0], error_cb, repaint_cb);
-}
-
-scoped_refptr<MediaStreamAudioRenderer>
-MediaStreamImpl::GetAudioRenderer(const GURL& url, int render_frame_id) {
- DCHECK(CalledOnValidThread());
- blink::WebMediaStream web_stream(GetMediaStream(url));
-
- if (web_stream.isNull() || !web_stream.extraData())
- return NULL; // This is not a valid stream.
-
- DVLOG(1) << "MediaStreamImpl::GetAudioRenderer stream:"
- << base::UTF16ToUTF8(web_stream.id());
-
- MediaStream* native_stream = MediaStream::GetMediaStream(web_stream);
-
- // TODO(tommi): MediaStreams do not have a 'local or not' concept.
- // Tracks _might_, but even so, we need to fix the data flow so that
- // it works the same way for all track implementations, local, remote or what
- // have you.
- // In this function, we should simply create a renderer object that receives
- // and mixes audio from all the tracks that belong to the media stream.
- // We need to remove the |is_local| property from MediaStreamExtraData since
- // this concept is peerconnection specific (is a previously recorded stream
- // local or remote?).
- if (native_stream->is_local()) {
- // Create the local audio renderer if the stream contains audio tracks.
- blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
- web_stream.audioTracks(audio_tracks);
- if (audio_tracks.isEmpty())
- return NULL;
-
- // TODO(xians): Add support for the case where the media stream contains
- // multiple audio tracks.
- return CreateLocalAudioRenderer(audio_tracks[0], render_frame_id);
- }
-
- webrtc::MediaStreamInterface* stream =
- MediaStream::GetAdapter(web_stream);
- if (stream->GetAudioTracks().empty())
- return NULL;
-
- // This is a remote WebRTC media stream.
- WebRtcAudioDeviceImpl* audio_device =
- dependency_factory_->GetWebRtcAudioDevice();
-
- // Share the existing renderer if any, otherwise create a new one.
- scoped_refptr<WebRtcAudioRenderer> renderer(audio_device->renderer());
- if (!renderer.get()) {
- renderer = CreateRemoteAudioRenderer(stream, render_frame_id);
-
- if (renderer.get() && !audio_device->SetAudioRenderer(renderer.get()))
- renderer = NULL;
- }
-
- return renderer.get() ?
- renderer->CreateSharedAudioRendererProxy(stream) : NULL;
-}
-
// Callback from MediaStreamDispatcher.
// The requested stream have been generated by the MediaStreamDispatcher.
void MediaStreamImpl::OnStreamGenerated(
@@ -464,8 +356,7 @@ void MediaStreamImpl::CreateVideoTracks(
request->frame,
&webkit_source);
(*webkit_tracks)[i] =
- request->CreateAndStartVideoTrack(webkit_source, constraints,
- dependency_factory_);
+ request->CreateAndStartVideoTrack(webkit_source, constraints);
}
}
@@ -719,66 +610,6 @@ void MediaStreamImpl::StopLocalSource(
source_impl->StopSource();
}
-scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer(
- webrtc::MediaStreamInterface* stream,
- int render_frame_id) {
- if (stream->GetAudioTracks().empty())
- return NULL;
-
- DVLOG(1) << "MediaStreamImpl::CreateRemoteAudioRenderer label:"
- << stream->label();
-
- // TODO(tommi): Change the default value of session_id to be
- // StreamDeviceInfo::kNoId. Also update AudioOutputDevice etc.
- int session_id = 0, sample_rate = 0, buffer_size = 0;
- if (!GetAuthorizedDeviceInfoForAudioRenderer(&session_id,
- &sample_rate,
- &buffer_size)) {
- GetDefaultOutputDeviceParams(&sample_rate, &buffer_size);
- }
-
- return new WebRtcAudioRenderer(
- stream, RenderViewObserver::routing_id(), render_frame_id, session_id,
- sample_rate, buffer_size);
-}
-
-scoped_refptr<WebRtcLocalAudioRenderer>
-MediaStreamImpl::CreateLocalAudioRenderer(
- const blink::WebMediaStreamTrack& audio_track,
- int render_frame_id) {
- DVLOG(1) << "MediaStreamImpl::CreateLocalAudioRenderer";
-
- int session_id = 0, sample_rate = 0, buffer_size = 0;
- if (!GetAuthorizedDeviceInfoForAudioRenderer(&session_id,
- &sample_rate,
- &buffer_size)) {
- GetDefaultOutputDeviceParams(&sample_rate, &buffer_size);
- }
-
- // Create a new WebRtcLocalAudioRenderer instance and connect it to the
- // existing WebRtcAudioCapturer so that the renderer can use it as source.
- return new WebRtcLocalAudioRenderer(
- audio_track,
- RenderViewObserver::routing_id(),
- render_frame_id,
- session_id,
- buffer_size);
-}
-
-bool MediaStreamImpl::GetAuthorizedDeviceInfoForAudioRenderer(
- int* session_id,
- int* output_sample_rate,
- int* output_frames_per_buffer) {
- DCHECK(CalledOnValidThread());
- WebRtcAudioDeviceImpl* audio_device =
- dependency_factory_->GetWebRtcAudioDevice();
- if (!audio_device)
- return false;
-
- return audio_device->GetAuthorizedDeviceInfoForAudioRenderer(
- session_id, output_sample_rate, output_frames_per_buffer);
-}
-
MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo(
int request_id,
blink::WebFrame* frame,
@@ -816,8 +647,7 @@ void MediaStreamImpl::UserMediaRequestInfo::StartAudioTrack(
blink::WebMediaStreamTrack
MediaStreamImpl::UserMediaRequestInfo::CreateAndStartVideoTrack(
const blink::WebMediaStreamSource& source,
- const blink::WebMediaConstraints& constraints,
- MediaStreamDependencyFactory* factory) {
+ const blink::WebMediaConstraints& constraints) {
DCHECK(source.type() == blink::WebMediaStreamSource::TypeVideo);
MediaStreamVideoSource* native_source =
MediaStreamVideoSource::GetVideoSource(source);
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h
index af9e13506b..76ae25a967 100644
--- a/content/renderer/media/media_stream_impl.h
+++ b/content/renderer/media/media_stream_impl.h
@@ -17,7 +17,6 @@
#include "base/threading/non_thread_safe.h"
#include "content/common/content_export.h"
#include "content/public/renderer/render_view_observer.h"
-#include "content/renderer/media/media_stream_client.h"
#include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
#include "content/renderer/media/media_stream_source.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
@@ -28,24 +27,20 @@
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
namespace content {
-class MediaStreamAudioRenderer;
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
class MediaStreamDispatcher;
class MediaStreamVideoSource;
class VideoCapturerDelegate;
-class WebRtcAudioRenderer;
-class WebRtcLocalAudioRenderer;
-// MediaStreamImpl is a delegate for the Media Stream API messages used by
-// WebKit. It ties together WebKit, native PeerConnection in libjingle and
-// MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost)
+// MediaStreamImpl is a delegate for the Media Stream GetUserMedia API.
+// It ties together WebKit and MediaStreamManager
+// (via MediaStreamDispatcher and MediaStreamDispatcherHost)
// in the browser process. It must be created, called and destroyed on the
// render thread.
// MediaStreamImpl have weak pointers to a MediaStreamDispatcher.
class CONTENT_EXPORT MediaStreamImpl
: public RenderViewObserver,
NON_EXPORTED_BASE(public blink::WebUserMediaClient),
- NON_EXPORTED_BASE(public MediaStreamClient),
public MediaStreamDispatcherEventHandler,
public base::SupportsWeakPtr<MediaStreamImpl>,
NON_EXPORTED_BASE(public base::NonThreadSafe) {
@@ -53,23 +48,14 @@ class CONTENT_EXPORT MediaStreamImpl
MediaStreamImpl(
RenderView* render_view,
MediaStreamDispatcher* media_stream_dispatcher,
- MediaStreamDependencyFactory* dependency_factory);
+ PeerConnectionDependencyFactory* dependency_factory);
virtual ~MediaStreamImpl();
// blink::WebUserMediaClient implementation
virtual void requestUserMedia(
- const blink::WebUserMediaRequest& user_media_request) OVERRIDE;
+ const blink::WebUserMediaRequest& user_media_request);
virtual void cancelUserMediaRequest(
- const blink::WebUserMediaRequest& user_media_request) OVERRIDE;
-
- // MediaStreamClient implementation.
- virtual bool IsMediaStream(const GURL& url) OVERRIDE;
- virtual scoped_refptr<VideoFrameProvider> GetVideoFrameProvider(
- const GURL& url,
- const base::Closure& error_cb,
- const VideoFrameProvider::RepaintCB& repaint_cb) OVERRIDE;
- virtual scoped_refptr<MediaStreamAudioRenderer>
- GetAudioRenderer(const GURL& url, int render_frame_id) OVERRIDE;
+ const blink::WebUserMediaRequest& user_media_request);
// MediaStreamDispatcherEventHandler implementation.
virtual void OnStreamGenerated(
@@ -109,11 +95,6 @@ class CONTENT_EXPORT MediaStreamImpl
blink::WebUserMediaRequest* request_info,
content::MediaStreamRequestResult result);
-
- // Returns the WebKit representation of a MediaStream given an URL.
- // This is virtual for test purposes.
- virtual blink::WebMediaStream GetMediaStream(const GURL& url);
-
// Creates a MediaStreamVideoSource object.
// This is virtual for test purposes.
virtual MediaStreamVideoSource* CreateVideoSource(
@@ -149,8 +130,7 @@ class CONTENT_EXPORT MediaStreamImpl
blink::WebMediaStreamTrack CreateAndStartVideoTrack(
const blink::WebMediaStreamSource& source,
- const blink::WebMediaConstraints& constraints,
- MediaStreamDependencyFactory* factory);
+ const blink::WebMediaConstraints& constraints);
// Triggers |callback| when all sources used in this request have either
// successfully started, or a source has failed to start.
@@ -159,7 +139,7 @@ class CONTENT_EXPORT MediaStreamImpl
bool IsSourceUsed(const blink::WebMediaStreamSource& source) const;
void RemoveSource(const blink::WebMediaStreamSource& source);
- bool AreAllSourcesRemoved() const { return sources_.empty(); };
+ bool AreAllSourcesRemoved() const { return sources_.empty(); }
private:
void OnTrackStarted(MediaStreamSource* source, bool success);
@@ -225,25 +205,11 @@ class CONTENT_EXPORT MediaStreamImpl
void StopLocalSource(const blink::WebMediaStreamSource& source,
bool notify_dispatcher);
- scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer(
- webrtc::MediaStreamInterface* stream, int render_frame_id);
- scoped_refptr<WebRtcLocalAudioRenderer> CreateLocalAudioRenderer(
- const blink::WebMediaStreamTrack& audio_track,
- int render_frame_id);
-
- // Returns a valid session id if a single capture device is currently open
- // (and then the matching session_id), otherwise -1.
- // This is used to pass on a session id to a webrtc audio renderer (either
- // local or remote), so that audio will be rendered to a matching output
- // device, should one exist.
- // Note that if there are more than one open capture devices the function
- // will not be able to pick an appropriate device and return false.
- bool GetAuthorizedDeviceInfoForAudioRenderer(
- int* session_id, int* output_sample_rate, int* output_buffer_size);
-
- // Weak ref to a MediaStreamDependencyFactory, owned by the RenderThread.
+ // Weak ref to a PeerConnectionDependencyFactory, owned by the RenderThread.
// It's valid for the lifetime of RenderThread.
- MediaStreamDependencyFactory* dependency_factory_;
+ // TODO(xians): Remove this dependency once audio do not need it for local
+ // audio.
+ PeerConnectionDependencyFactory* dependency_factory_;
// media_stream_dispatcher_ is a weak reference, owned by RenderView. It's
// valid for the lifetime of RenderView.
diff --git a/content/renderer/media/media_stream_impl_unittest.cc b/content/renderer/media/media_stream_impl_unittest.cc
index 2d15fb166f..c516aff14f 100644
--- a/content/renderer/media/media_stream_impl_unittest.cc
+++ b/content/renderer/media/media_stream_impl_unittest.cc
@@ -3,14 +3,15 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream.h"
#include "content/renderer/media/media_stream_impl.h"
#include "content/renderer/media/media_stream_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_media_stream_dispatcher.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
@@ -25,7 +26,7 @@ class MockMediaStreamVideoCapturerSource : public MockMediaStreamVideoSource {
MockMediaStreamVideoCapturerSource(
const StreamDeviceInfo& device,
const SourceStoppedCallback& stop_callback,
- MediaStreamDependencyFactory* factory)
+ PeerConnectionDependencyFactory* factory)
: MockMediaStreamVideoSource(false) {
SetDeviceInfo(device);
SetStopCallback(stop_callback);
@@ -42,7 +43,7 @@ class MediaStreamImplUnderTest : public MediaStreamImpl {
};
MediaStreamImplUnderTest(MediaStreamDispatcher* media_stream_dispatcher,
- MediaStreamDependencyFactory* dependency_factory)
+ PeerConnectionDependencyFactory* dependency_factory)
: MediaStreamImpl(NULL, media_stream_dispatcher, dependency_factory),
state_(REQUEST_NOT_STARTED),
result_(NUM_MEDIA_REQUEST_RESULTS),
@@ -99,7 +100,7 @@ class MediaStreamImplUnderTest : public MediaStreamImpl {
blink::WebMediaStream last_generated_stream_;
RequestState state_;
content::MediaStreamRequestResult result_;
- MediaStreamDependencyFactory* factory_;
+ PeerConnectionDependencyFactory* factory_;
MockMediaStreamVideoCapturerSource* video_source_;
};
@@ -109,7 +110,7 @@ class MediaStreamImplTest : public ::testing::Test {
// Create our test object.
child_process_.reset(new ChildProcess());
ms_dispatcher_.reset(new MockMediaStreamDispatcher());
- dependency_factory_.reset(new MockMediaStreamDependencyFactory());
+ dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
ms_impl_.reset(new MediaStreamImplUnderTest(ms_dispatcher_.get(),
dependency_factory_.get()));
}
@@ -167,10 +168,11 @@ class MediaStreamImplTest : public ::testing::Test {
}
protected:
+ base::MessageLoop message_loop_;
scoped_ptr<ChildProcess> child_process_;
scoped_ptr<MockMediaStreamDispatcher> ms_dispatcher_;
scoped_ptr<MediaStreamImplUnderTest> ms_impl_;
- scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
+ scoped_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
};
TEST_F(MediaStreamImplTest, GenerateMediaStream) {
diff --git a/content/renderer/media/media_stream_renderer_factory.cc b/content/renderer/media/media_stream_renderer_factory.cc
new file mode 100644
index 0000000000..628364465a
--- /dev/null
+++ b/content/renderer/media/media_stream_renderer_factory.cc
@@ -0,0 +1,197 @@
+// 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 "content/renderer/media/media_stream_renderer_factory.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/renderer/media/media_stream.h"
+#include "content/renderer/media/media_stream_video_track.h"
+#include "content/renderer/media/rtc_video_renderer.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+#include "content/renderer/media/webrtc_audio_renderer.h"
+#include "content/renderer/media/webrtc_local_audio_renderer.h"
+#include "content/renderer/render_thread_impl.h"
+#include "media/base/audio_hardware_config.h"
+#include "third_party/WebKit/public/platform/WebMediaStream.h"
+#include "third_party/WebKit/public/platform/WebURL.h"
+#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
+#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
+
+namespace content {
+
+namespace {
+
+PeerConnectionDependencyFactory* GetPeerConnectionDependencyFactory() {
+ return RenderThreadImpl::current()->GetPeerConnectionDependencyFactory();
+}
+
+void GetDefaultOutputDeviceParams(
+ int* output_sample_rate, int* output_buffer_size) {
+ // Fetch the default audio output hardware config.
+ media::AudioHardwareConfig* hardware_config =
+ RenderThreadImpl::current()->GetAudioHardwareConfig();
+ *output_sample_rate = hardware_config->GetOutputSampleRate();
+ *output_buffer_size = hardware_config->GetOutputBufferSize();
+}
+
+
+// Returns a valid session id if a single capture device is currently open
+// (and then the matching session_id), otherwise -1.
+// This is used to pass on a session id to a webrtc audio renderer (either
+// local or remote), so that audio will be rendered to a matching output
+// device, should one exist.
+// Note that if there are more than one open capture devices the function
+// will not be able to pick an appropriate device and return false.
+bool GetAuthorizedDeviceInfoForAudioRenderer(
+ int* session_id,
+ int* output_sample_rate,
+ int* output_frames_per_buffer) {
+ WebRtcAudioDeviceImpl* audio_device =
+ GetPeerConnectionDependencyFactory()->GetWebRtcAudioDevice();
+ if (!audio_device)
+ return false;
+
+ return audio_device->GetAuthorizedDeviceInfoForAudioRenderer(
+ session_id, output_sample_rate, output_frames_per_buffer);
+}
+
+scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer(
+ webrtc::MediaStreamInterface* stream,
+ int routing_id,
+ int render_frame_id) {
+ if (stream->GetAudioTracks().empty())
+ return NULL;
+
+ DVLOG(1) << "MediaStreamRendererFactory::CreateRemoteAudioRenderer label:"
+ << stream->label();
+
+ // TODO(tommi): Change the default value of session_id to be
+ // StreamDeviceInfo::kNoId. Also update AudioOutputDevice etc.
+ int session_id = 0, sample_rate = 0, buffer_size = 0;
+ if (!GetAuthorizedDeviceInfoForAudioRenderer(&session_id,
+ &sample_rate,
+ &buffer_size)) {
+ GetDefaultOutputDeviceParams(&sample_rate, &buffer_size);
+ }
+
+ return new WebRtcAudioRenderer(
+ stream, routing_id, render_frame_id, session_id,
+ sample_rate, buffer_size);
+}
+
+
+scoped_refptr<WebRtcLocalAudioRenderer> CreateLocalAudioRenderer(
+ const blink::WebMediaStreamTrack& audio_track,
+ int routing_id,
+ int render_frame_id) {
+ DVLOG(1) << "MediaStreamRendererFactory::CreateLocalAudioRenderer";
+
+ int session_id = 0, sample_rate = 0, buffer_size = 0;
+ if (!GetAuthorizedDeviceInfoForAudioRenderer(&session_id,
+ &sample_rate,
+ &buffer_size)) {
+ GetDefaultOutputDeviceParams(&sample_rate, &buffer_size);
+ }
+
+ // Create a new WebRtcLocalAudioRenderer instance and connect it to the
+ // existing WebRtcAudioCapturer so that the renderer can use it as source.
+ return new WebRtcLocalAudioRenderer(
+ audio_track,
+ routing_id,
+ render_frame_id,
+ session_id,
+ buffer_size);
+}
+
+} // namespace
+
+
+MediaStreamRendererFactory::MediaStreamRendererFactory() {
+}
+
+MediaStreamRendererFactory::~MediaStreamRendererFactory() {
+}
+
+scoped_refptr<VideoFrameProvider>
+MediaStreamRendererFactory::GetVideoFrameProvider(
+ const GURL& url,
+ const base::Closure& error_cb,
+ const VideoFrameProvider::RepaintCB& repaint_cb) {
+ blink::WebMediaStream web_stream =
+ blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url);
+ DCHECK(!web_stream.isNull());
+
+ DVLOG(1) << "MediaStreamRendererFactory::GetVideoFrameProvider stream:"
+ << base::UTF16ToUTF8(web_stream.id());
+
+ blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+ web_stream.videoTracks(video_tracks);
+ if (video_tracks.isEmpty() ||
+ !MediaStreamVideoTrack::GetTrack(video_tracks[0])) {
+ return NULL;
+ }
+
+ return new RTCVideoRenderer(video_tracks[0], error_cb, repaint_cb);
+}
+
+scoped_refptr<MediaStreamAudioRenderer>
+MediaStreamRendererFactory::GetAudioRenderer(
+ const GURL& url, int render_view_id, int render_frame_id) {
+ blink::WebMediaStream web_stream =
+ blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url);
+
+ if (web_stream.isNull() || !web_stream.extraData())
+ return NULL; // This is not a valid stream.
+
+ DVLOG(1) << "MediaStreamRendererFactory::GetAudioRenderer stream:"
+ << base::UTF16ToUTF8(web_stream.id());
+
+ MediaStream* native_stream = MediaStream::GetMediaStream(web_stream);
+
+ // TODO(tommi): MediaStreams do not have a 'local or not' concept.
+ // Tracks _might_, but even so, we need to fix the data flow so that
+ // it works the same way for all track implementations, local, remote or what
+ // have you.
+ // In this function, we should simply create a renderer object that receives
+ // and mixes audio from all the tracks that belong to the media stream.
+ // We need to remove the |is_local| property from MediaStreamExtraData since
+ // this concept is peerconnection specific (is a previously recorded stream
+ // local or remote?).
+ if (native_stream->is_local()) {
+ // Create the local audio renderer if the stream contains audio tracks.
+ blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+ web_stream.audioTracks(audio_tracks);
+ if (audio_tracks.isEmpty())
+ return NULL;
+
+ // TODO(xians): Add support for the case where the media stream contains
+ // multiple audio tracks.
+ return CreateLocalAudioRenderer(audio_tracks[0], render_view_id,
+ render_frame_id);
+ }
+
+ webrtc::MediaStreamInterface* stream =
+ MediaStream::GetAdapter(web_stream);
+ if (stream->GetAudioTracks().empty())
+ return NULL;
+
+ // This is a remote WebRTC media stream.
+ WebRtcAudioDeviceImpl* audio_device =
+ GetPeerConnectionDependencyFactory()->GetWebRtcAudioDevice();
+
+ // Share the existing renderer if any, otherwise create a new one.
+ scoped_refptr<WebRtcAudioRenderer> renderer(audio_device->renderer());
+ if (!renderer.get()) {
+ renderer = CreateRemoteAudioRenderer(stream, render_view_id,
+ render_frame_id);
+
+ if (renderer.get() && !audio_device->SetAudioRenderer(renderer.get()))
+ renderer = NULL;
+ }
+
+ return renderer.get() ?
+ renderer->CreateSharedAudioRendererProxy(stream) : NULL;
+}
+
+} // namespace content
diff --git a/content/renderer/media/media_stream_renderer_factory.h b/content/renderer/media/media_stream_renderer_factory.h
new file mode 100644
index 0000000000..eb07e1cae4
--- /dev/null
+++ b/content/renderer/media/media_stream_renderer_factory.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_RENDERER_FACTORY_H_
+#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_RENDERER_FACTORY_H_
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "content/common/content_export.h"
+#include "content/renderer/media/media_stream_audio_renderer.h"
+#include "content/renderer/media/video_frame_provider.h"
+#include "url/gurl.h"
+
+namespace content {
+
+// MediaStreamRendererFactory is used by WebMediaPlayerMS to create audio and
+// video feeds from a MediaStream provided an URL.
+// The factory methods are virtual in order for blink layouttests to be able to
+// override them.
+class CONTENT_EXPORT MediaStreamRendererFactory {
+ public:
+ MediaStreamRendererFactory();
+ virtual ~MediaStreamRendererFactory();
+
+ virtual scoped_refptr<VideoFrameProvider> GetVideoFrameProvider(
+ const GURL& url,
+ const base::Closure& error_cb,
+ const VideoFrameProvider::RepaintCB& repaint_cb);
+
+ virtual scoped_refptr<MediaStreamAudioRenderer> GetAudioRenderer(
+ const GURL& url,
+ int render_view_id,
+ int render_frame_id);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MediaStreamRendererFactory);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_RENDERER_FACTORY_H_
diff --git a/content/renderer/media/media_stream_source.cc b/content/renderer/media/media_stream_source.cc
index 64ec3ea4f1..8db2602440 100644
--- a/content/renderer/media/media_stream_source.cc
+++ b/content/renderer/media/media_stream_source.cc
@@ -8,6 +8,8 @@
namespace content {
+const char MediaStreamSource::kSourceId[] = "sourceId";
+
MediaStreamSource::MediaStreamSource() {
}
diff --git a/content/renderer/media/media_stream_source.h b/content/renderer/media/media_stream_source.h
index 138e58ec6b..18821c38cf 100644
--- a/content/renderer/media/media_stream_source.h
+++ b/content/renderer/media/media_stream_source.h
@@ -27,6 +27,10 @@ class CONTENT_EXPORT MediaStreamSource
typedef base::Callback<void(MediaStreamSource* source,
bool success)> ConstraintsCallback;
+ // Source constraints key for
+ // http://dev.w3.org/2011/webrtc/editor/getusermedia.html.
+ static const char kSourceId[];
+
MediaStreamSource();
virtual ~MediaStreamSource();
diff --git a/content/renderer/media/media_stream_video_capture_source_unittest.cc b/content/renderer/media/media_stream_video_capture_source_unittest.cc
index a204f1e238..65deacbb38 100644
--- a/content/renderer/media/media_stream_video_capture_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_capture_source_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream_video_capturer_source.h"
@@ -21,8 +22,8 @@ class MockVideoCapturerDelegate : public VideoCapturerDelegate {
MOCK_METHOD3(StartCapture,
void(const media::VideoCaptureParams& params,
const VideoCaptureDeliverFrameCB& new_frame_callback,
- const StartedCallback& started_callback));
- MOCK_METHOD0(StopCapture,void());
+ const RunningCallback& running_callback));
+ MOCK_METHOD0(StopCapture, void());
private:
virtual ~MockVideoCapturerDelegate() {}
@@ -60,14 +61,19 @@ class MediaStreamVideoCapturerSourceTest : public testing::Test {
enabled);
}
+ MockVideoCapturerDelegate& mock_delegate() {
+ return *static_cast<MockVideoCapturerDelegate*>(delegate_.get());
+ }
+
protected:
void OnConstraintsApplied(MediaStreamSource* source, bool success) {
}
+ base::MessageLoopForUI message_loop_;
scoped_ptr<ChildProcess> child_process_;
blink::WebMediaStreamSource webkit_source_;
MediaStreamVideoCapturerSource* source_; // owned by webkit_source.
- scoped_refptr<MockVideoCapturerDelegate> delegate_;
+ scoped_refptr<VideoCapturerDelegate> delegate_;
};
TEST_F(MediaStreamVideoCapturerSourceTest, TabCaptureAllowResolutionChange) {
@@ -75,13 +81,13 @@ TEST_F(MediaStreamVideoCapturerSourceTest, TabCaptureAllowResolutionChange) {
device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE;
InitWithDeviceInfo(device_info);
- EXPECT_CALL(*delegate_, StartCapture(
+ EXPECT_CALL(mock_delegate(), StartCapture(
testing::Field(&media::VideoCaptureParams::allow_resolution_change, true),
testing::_,
testing::_)).Times(1);
blink::WebMediaStreamTrack track = StartSource();
// When the track goes out of scope, the source will be stopped.
- EXPECT_CALL(*delegate_, StopCapture());
+ EXPECT_CALL(mock_delegate(), StopCapture());
}
TEST_F(MediaStreamVideoCapturerSourceTest,
@@ -90,13 +96,39 @@ TEST_F(MediaStreamVideoCapturerSourceTest,
device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
InitWithDeviceInfo(device_info);
- EXPECT_CALL(*delegate_, StartCapture(
+ EXPECT_CALL(mock_delegate(), StartCapture(
testing::Field(&media::VideoCaptureParams::allow_resolution_change, true),
testing::_,
testing::_)).Times(1);
blink::WebMediaStreamTrack track = StartSource();
// When the track goes out of scope, the source will be stopped.
- EXPECT_CALL(*delegate_, StopCapture());
+ EXPECT_CALL(mock_delegate(), StopCapture());
+}
+
+TEST_F(MediaStreamVideoCapturerSourceTest, Ended) {
+ StreamDeviceInfo device_info;
+ device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
+ delegate_ = new VideoCapturerDelegate(device_info);
+ source_ = new MediaStreamVideoCapturerSource(
+ device_info,
+ MediaStreamSource::SourceStoppedCallback(),
+ delegate_);
+ webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
+ blink::WebMediaStreamSource::TypeVideo,
+ base::UTF8ToUTF16("dummy_source_name"));
+ webkit_source_.setExtraData(source_);
+ blink::WebMediaStreamTrack track = StartSource();
+ message_loop_.RunUntilIdle();
+
+ delegate_->OnStateUpdateOnRenderThread(VIDEO_CAPTURE_STATE_STARTED);
+ message_loop_.RunUntilIdle();
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+ webkit_source_.readyState());
+
+ delegate_->OnStateUpdateOnRenderThread(VIDEO_CAPTURE_STATE_ERROR);
+ message_loop_.RunUntilIdle();
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
+ webkit_source_.readyState());
}
} // namespace content
diff --git a/content/renderer/media/media_stream_video_capturer_source.cc b/content/renderer/media/media_stream_video_capturer_source.cc
index 4bcab47e9f..25bb59deee 100644
--- a/content/renderer/media/media_stream_video_capturer_source.cc
+++ b/content/renderer/media/media_stream_video_capturer_source.cc
@@ -98,10 +98,10 @@ void VideoCapturerDelegate::GetCurrentSupportedFormats(
void VideoCapturerDelegate::StartCapture(
const media::VideoCaptureParams& params,
const VideoCaptureDeliverFrameCB& new_frame_callback,
- const StartedCallback& started_callback) {
+ const RunningCallback& running_callback) {
DCHECK(params.requested_format.IsValid());
DCHECK(thread_checker_.CalledOnValidThread());
- started_callback_ = started_callback;
+ running_callback_ = running_callback;
got_first_frame_ = false;
// NULL in unit test.
@@ -127,7 +127,7 @@ void VideoCapturerDelegate::StopCapture() {
if (!stop_capture_cb_.is_null()) {
base::ResetAndReturn(&stop_capture_cb_).Run();
}
- started_callback_.Reset();
+ running_callback_.Reset();
source_formats_callback_.Reset();
}
@@ -135,9 +135,12 @@ void VideoCapturerDelegate::OnStateUpdateOnRenderThread(
VideoCaptureState state) {
DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(3) << "OnStateUpdateOnRenderThread state = " << state;
- if (state > VIDEO_CAPTURE_STATE_STARTING && !started_callback_.is_null()) {
- base::ResetAndReturn(&started_callback_).Run(
- state == VIDEO_CAPTURE_STATE_STARTED);
+ if (state == VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) {
+ running_callback_.Run(true);
+ return;
+ }
+ if (state > VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) {
+ base::ResetAndReturn(&running_callback_).Run(false);
}
}
diff --git a/content/renderer/media/media_stream_video_capturer_source.h b/content/renderer/media/media_stream_video_capturer_source.h
index dcae91a7eb..dcffa02d37 100644
--- a/content/renderer/media/media_stream_video_capturer_source.h
+++ b/content/renderer/media/media_stream_video_capturer_source.h
@@ -6,6 +6,7 @@
#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_VIDEO_CAPTURER_SOURCE_H_
#include "base/callback.h"
+#include "base/gtest_prod_util.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/threading/thread_checker.h"
#include "content/common/media/video_capture.h"
@@ -21,7 +22,7 @@ namespace content {
class CONTENT_EXPORT VideoCapturerDelegate
: public base::RefCountedThreadSafe<VideoCapturerDelegate> {
public:
- typedef base::Callback<void(bool running)> StartedCallback;
+ typedef base::Callback<void(bool running)> RunningCallback;
explicit VideoCapturerDelegate(
const StreamDeviceInfo& device_info);
@@ -37,18 +38,21 @@ class CONTENT_EXPORT VideoCapturerDelegate
// Starts capturing frames using the resolution in |params|.
// |new_frame_callback| is triggered when a new video frame is available.
- // |started_callback| is triggered before the first video frame is received
- // or if the underlying video capturer fails to start.
+ // If capturing is started successfully then |running_callback| will be
+ // called with a parameter of true.
+ // If capturing fails to start or stopped due to an external event then
+ // |running_callback| will be called with a parameter of false.
virtual void StartCapture(
const media::VideoCaptureParams& params,
const VideoCaptureDeliverFrameCB& new_frame_callback,
- const StartedCallback& started_callback);
+ const RunningCallback& running_callback);
// Stops capturing frames and clears all callbacks including the
// SupportedFormatsCallback callback.
virtual void StopCapture();
private:
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamVideoCapturerSourceTest, Ended);
friend class base::RefCountedThreadSafe<VideoCapturerDelegate>;
friend class MockVideoCapturerDelegate;
@@ -68,9 +72,9 @@ class CONTENT_EXPORT VideoCapturerDelegate
bool is_screen_cast_;
bool got_first_frame_;
- // |started_callback| is provided to this class in StartCapture and must be
+ // |running_callback| is provided to this class in StartCapture and must be
// valid until StopCapture is called.
- StartedCallback started_callback_;
+ RunningCallback running_callback_;
VideoCaptureDeviceFormatsCB source_formats_callback_;
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc
index 2db0ef0e8f..bc482c07e0 100644
--- a/content/renderer/media/media_stream_video_source.cc
+++ b/content/renderer/media/media_stream_video_source.cc
@@ -12,10 +12,9 @@
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "content/child/child_process.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/media_stream_constraints_util.h"
#include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/video_frame_deliverer.h"
-#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
+#include "content/renderer/media/video_track_adapter.h"
namespace content {
@@ -45,17 +44,79 @@ const int MediaStreamVideoSource::kDefaultHeight = 480;
const int MediaStreamVideoSource::kDefaultFrameRate = 30;
namespace {
-// Constraints keys for http://dev.w3.org/2011/webrtc/editor/getusermedia.html
-const char kSourceId[] = "sourceId";
// Google-specific key prefix. Constraints with this prefix are ignored if they
// are unknown.
const char kGooglePrefix[] = "goog";
-// MediaStreamVideoSource supports cropping of video frames but only up to
-// kMaxCropFactor. Ie - if a constraint is set to maxHeight 360, an original
-// input frame height of max 360 * kMaxCropFactor pixels is accepted.
-const int kMaxCropFactor = 2;
+// Returns true if |constraint| has mandatory constraints.
+bool HasMandatoryConstraints(const blink::WebMediaConstraints& constraints) {
+ blink::WebVector<blink::WebMediaConstraint> mandatory_constraints;
+ constraints.getMandatoryConstraints(mandatory_constraints);
+ return !mandatory_constraints.isEmpty();
+}
+
+// Retrieve the desired max width and height from |constraints|. If not set,
+// the |desired_width| and |desired_height| are set to
+// std::numeric_limits<int>::max();
+// If either max width or height is set as a mandatory constraint, the optional
+// constraints are not checked.
+void GetDesiredMaxWidthAndHeight(const blink::WebMediaConstraints& constraints,
+ int* desired_width, int* desired_height) {
+ *desired_width = std::numeric_limits<int>::max();
+ *desired_height = std::numeric_limits<int>::max();
+
+ bool mandatory = GetMandatoryConstraintValueAsInteger(
+ constraints,
+ MediaStreamVideoSource::kMaxWidth,
+ desired_width);
+ mandatory |= GetMandatoryConstraintValueAsInteger(
+ constraints,
+ MediaStreamVideoSource::kMaxHeight,
+ desired_height);
+ if (mandatory)
+ return;
+
+ GetOptionalConstraintValueAsInteger(constraints,
+ MediaStreamVideoSource::kMaxWidth,
+ desired_width);
+ GetOptionalConstraintValueAsInteger(constraints,
+ MediaStreamVideoSource::kMaxHeight,
+ desired_height);
+}
+
+// Retrieve the desired max and min aspect ratio from |constraints|. If not set,
+// the |min_aspect_ratio| is set to 0 and |max_aspect_ratio| is set to
+// std::numeric_limits<double>::max();
+// If either min or max aspect ratio is set as a mandatory constraint, the
+// optional constraints are not checked.
+void GetDesiredMinAndMaxAspectRatio(
+ const blink::WebMediaConstraints& constraints,
+ double* min_aspect_ratio,
+ double* max_aspect_ratio) {
+ *min_aspect_ratio = 0;
+ *max_aspect_ratio = std::numeric_limits<double>::max();
+
+ bool mandatory = GetMandatoryConstraintValueAsDouble(
+ constraints,
+ MediaStreamVideoSource::kMinAspectRatio,
+ min_aspect_ratio);
+ mandatory |= GetMandatoryConstraintValueAsDouble(
+ constraints,
+ MediaStreamVideoSource::kMaxAspectRatio,
+ max_aspect_ratio);
+ if (mandatory)
+ return;
+
+ GetOptionalConstraintValueAsDouble(
+ constraints,
+ MediaStreamVideoSource::kMinAspectRatio,
+ min_aspect_ratio);
+ GetOptionalConstraintValueAsDouble(
+ constraints,
+ MediaStreamVideoSource::kMaxAspectRatio,
+ max_aspect_ratio);
+}
// Returns true if |constraint| is fulfilled. |format| can be changed
// changed by a constraint. Ie - the frame rate can be changed by setting
@@ -78,7 +139,7 @@ bool UpdateFormatForConstraint(
return true;
}
- if (constraint_name == kSourceId) {
+ if (constraint_name == MediaStreamSource::kSourceId) {
// This is a constraint that doesn't affect the format.
return true;
}
@@ -90,22 +151,10 @@ bool UpdateFormatForConstraint(
if (constraint_name == MediaStreamVideoSource::kMinAspectRatio ||
constraint_name == MediaStreamVideoSource::kMaxAspectRatio) {
- double double_value = 0;
- base::StringToDouble(constraint_value, &double_value);
-
- // The aspect ratio in |constraint.m_value| has been converted to a string
- // and back to a double, so it may have a rounding error.
- // E.g if the value 1/3 is converted to a string, the string will not have
- // infinite length.
- // We add a margin of 0.0005 which is high enough to detect the same aspect
- // ratio but small enough to avoid matching wrong aspect ratios.
- const double kRoundingTruncation = 0.0005;
- double ratio = static_cast<double>(format->frame_size.width()) /
- format->frame_size.height();
- if (constraint_name == MediaStreamVideoSource::kMinAspectRatio)
- return (double_value <= ratio + kRoundingTruncation);
- // Subtract 0.0005 to avoid rounding problems. Same as above.
- return (double_value >= ratio - kRoundingTruncation);
+ // These constraints are handled by cropping if the camera outputs the wrong
+ // aspect ratio.
+ double value;
+ return base::StringToDouble(constraint_value, &value);
}
int value;
@@ -117,11 +166,11 @@ bool UpdateFormatForConstraint(
if (constraint_name == MediaStreamVideoSource::kMinWidth) {
return (value <= format->frame_size.width());
} else if (constraint_name == MediaStreamVideoSource::kMaxWidth) {
- return (value * kMaxCropFactor >= format->frame_size.width());
+ return value > 0;
} else if (constraint_name == MediaStreamVideoSource::kMinHeight) {
return (value <= format->frame_size.height());
} else if (constraint_name == MediaStreamVideoSource::kMaxHeight) {
- return (value * kMaxCropFactor >= format->frame_size.height());
+ return value > 0;
} else if (constraint_name == MediaStreamVideoSource::kMinFrameRate) {
return (value <= format->frame_rate);
} else if (constraint_name == MediaStreamVideoSource::kMaxFrameRate) {
@@ -175,13 +224,37 @@ media::VideoCaptureFormats FilterFormats(
return supported_formats;
}
+ double max_aspect_ratio;
+ double min_aspect_ratio;
+ GetDesiredMinAndMaxAspectRatio(constraints,
+ &min_aspect_ratio,
+ &max_aspect_ratio);
+
+ if (min_aspect_ratio > max_aspect_ratio || max_aspect_ratio < 0.05f) {
+ DLOG(WARNING) << "Wrong requested aspect ratio.";
+ return media::VideoCaptureFormats();
+ }
+
+ int min_width = 0;
+ GetMandatoryConstraintValueAsInteger(constraints,
+ MediaStreamVideoSource::kMinWidth,
+ &min_width);
+ int min_height = 0;
+ GetMandatoryConstraintValueAsInteger(constraints,
+ MediaStreamVideoSource::kMinHeight,
+ &min_height);
+ int max_width;
+ int max_height;
+ GetDesiredMaxWidthAndHeight(constraints, &max_width, &max_height);
+
+ if (min_width > max_width || min_height > max_height)
+ return media::VideoCaptureFormats();
+
blink::WebVector<blink::WebMediaConstraint> mandatory;
blink::WebVector<blink::WebMediaConstraint> optional;
constraints.getMandatoryConstraints(mandatory);
constraints.getOptionalConstraints(optional);
-
media::VideoCaptureFormats candidates = supported_formats;
-
for (size_t i = 0; i < mandatory.size(); ++i)
FilterFormatsByConstraint(mandatory[i], true, &candidates);
@@ -206,43 +279,6 @@ media::VideoCaptureFormats FilterFormats(
return candidates;
}
-bool GetConstraintValue(const blink::WebMediaConstraints& constraints,
- bool mandatory, const blink::WebString& name,
- int* value) {
- blink::WebString value_str;
- bool ret = mandatory ?
- constraints.getMandatoryConstraintValue(name, value_str) :
- constraints.getOptionalConstraintValue(name, value_str);
- if (ret)
- base::StringToInt(value_str.utf8(), value);
- return ret;
-}
-
-// Returns true if |constraint| has mandatory constraints.
-bool HasMandatoryConstraints(const blink::WebMediaConstraints& constraints) {
- blink::WebVector<blink::WebMediaConstraint> mandatory_constraints;
- constraints.getMandatoryConstraints(mandatory_constraints);
- return !mandatory_constraints.isEmpty();
-}
-
-// Retrieve the desired max width and height from |constraints|.
-void GetDesiredMaxWidthAndHeight(const blink::WebMediaConstraints& constraints,
- int* desired_width, int* desired_height) {
- bool mandatory = GetConstraintValue(constraints, true,
- MediaStreamVideoSource::kMaxWidth,
- desired_width);
- mandatory |= GetConstraintValue(constraints, true,
- MediaStreamVideoSource::kMaxHeight,
- desired_height);
- if (mandatory)
- return;
-
- GetConstraintValue(constraints, false, MediaStreamVideoSource::kMaxWidth,
- desired_width);
- GetConstraintValue(constraints, false, MediaStreamVideoSource::kMaxHeight,
- desired_height);
-}
-
const media::VideoCaptureFormat& GetBestFormatBasedOnArea(
const media::VideoCaptureFormats& formats,
int area) {
@@ -268,109 +304,21 @@ const media::VideoCaptureFormat& GetBestFormatBasedOnArea(
void GetBestCaptureFormat(
const media::VideoCaptureFormats& formats,
const blink::WebMediaConstraints& constraints,
- media::VideoCaptureFormat* capture_format,
- gfx::Size* max_frame_output_size) {
+ media::VideoCaptureFormat* capture_format) {
DCHECK(!formats.empty());
- DCHECK(max_frame_output_size);
- int max_width = std::numeric_limits<int>::max();
- int max_height = std::numeric_limits<int>::max();;
+ int max_width;
+ int max_height;
GetDesiredMaxWidthAndHeight(constraints, &max_width, &max_height);
*capture_format = GetBestFormatBasedOnArea(
formats,
std::min(max_width, MediaStreamVideoSource::kDefaultWidth) *
std::min(max_height, MediaStreamVideoSource::kDefaultHeight));
-
- max_frame_output_size->set_width(max_width);
- max_frame_output_size->set_height(max_height);
-}
-
-// Empty method used for keeping a reference to the original media::VideoFrame
-// in MediaStreamVideoSource::FrameDeliverer::DeliverFrameOnIO if cropping is
-// needed. The reference to |frame| is kept in the closure that calls this
-// method.
-void ReleaseOriginalFrame(
- const scoped_refptr<media::VideoFrame>& frame) {
}
} // anonymous namespace
-// Helper class used for delivering video frames to all registered tracks
-// on the IO-thread.
-class MediaStreamVideoSource::FrameDeliverer : public VideoFrameDeliverer {
- public:
- FrameDeliverer(
- const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
- : VideoFrameDeliverer(io_message_loop) {
- }
-
- // Register |callback| to receive video frames of max size
- // |max_frame_output_size| on the IO thread.
- // TODO(perkj): Currently |max_frame_output_size| must be the same for all
- // |callbacks|.
- void AddCallback(void* id,
- const VideoCaptureDeliverFrameCB& callback,
- const gfx::Size& max_frame_output_size) {
- DCHECK(thread_checker().CalledOnValidThread());
- io_message_loop()->PostTask(
- FROM_HERE,
- base::Bind(
- &FrameDeliverer::AddCallbackWithResolutionOnIO,
- this, id, callback, max_frame_output_size));
- }
-
- virtual void DeliverFrameOnIO(
- const scoped_refptr<media::VideoFrame>& frame,
- const media::VideoCaptureFormat& format) OVERRIDE {
- DCHECK(io_message_loop()->BelongsToCurrentThread());
- TRACE_EVENT0("video", "MediaStreamVideoSource::DeliverFrameOnIO");
- if (max_output_size_.IsEmpty())
- return; // Frame received before the output has been decided.
-
- scoped_refptr<media::VideoFrame> video_frame(frame);
- const gfx::Size& visible_size = frame->visible_rect().size();
- if (visible_size.width() > max_output_size_.width() ||
- visible_size.height() > max_output_size_.height()) {
- // If |frame| is not the size that is expected, we need to crop it by
- // providing a new |visible_rect|. The new visible rect must be within the
- // original |visible_rect|.
- gfx::Rect output_rect = frame->visible_rect();
- output_rect.ClampToCenteredSize(max_output_size_);
- // TODO(perkj): Allow cropping of textures once http://crbug/362521 is
- // fixed.
- if (frame->format() != media::VideoFrame::NATIVE_TEXTURE) {
- video_frame = media::VideoFrame::WrapVideoFrame(
- frame,
- output_rect,
- output_rect.size(),
- base::Bind(&ReleaseOriginalFrame, frame));
- }
- }
- VideoFrameDeliverer::DeliverFrameOnIO(video_frame, format);
- }
-
- protected:
- virtual ~FrameDeliverer() {
- }
-
- void AddCallbackWithResolutionOnIO(
- void* id,
- const VideoCaptureDeliverFrameCB& callback,
- const gfx::Size& max_frame_output_size) {
- DCHECK(io_message_loop()->BelongsToCurrentThread());
- // Currently we only support one frame output size.
- DCHECK(!max_frame_output_size.IsEmpty() &&
- (max_output_size_.IsEmpty() ||
- max_output_size_ == max_frame_output_size));
- max_output_size_ = max_frame_output_size;
- VideoFrameDeliverer::AddCallbackOnIO(id, callback);
- }
-
- private:
- gfx::Size max_output_size_;
-};
-
// static
MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource(
const blink::WebMediaStreamSource& source) {
@@ -388,9 +336,8 @@ bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) {
MediaStreamVideoSource::MediaStreamVideoSource()
: state_(NEW),
- frame_deliverer_(
- new MediaStreamVideoSource::FrameDeliverer(
- ChildProcess::current()->io_message_loop_proxy())),
+ track_adapter_(new VideoTrackAdapter(
+ ChildProcess::current()->io_message_loop_proxy())),
weak_factory_(this) {
}
@@ -404,6 +351,7 @@ void MediaStreamVideoSource::AddTrack(
const blink::WebMediaConstraints& constraints,
const ConstraintsCallback& callback) {
DCHECK(CalledOnValidThread());
+ DCHECK(!constraints.isNull());
DCHECK(std::find(tracks_.begin(), tracks_.end(),
track) == tracks_.end());
tracks_.push_back(track);
@@ -416,10 +364,12 @@ void MediaStreamVideoSource::AddTrack(
// Tab capture and Screen capture needs the maximum requested height
// and width to decide on the resolution.
int max_requested_width = 0;
- GetConstraintValue(constraints, true, kMaxWidth, &max_requested_width);
+ GetMandatoryConstraintValueAsInteger(constraints, kMaxWidth,
+ &max_requested_width);
int max_requested_height = 0;
- GetConstraintValue(constraints, true, kMaxHeight, &max_requested_height);
+ GetMandatoryConstraintValueAsInteger(constraints, kMaxHeight,
+ &max_requested_height);
state_ = RETRIEVING_CAPABILITIES;
GetCurrentSupportedFormats(
@@ -450,9 +400,20 @@ void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) {
std::find(tracks_.begin(), tracks_.end(), video_track);
DCHECK(it != tracks_.end());
tracks_.erase(it);
- // Call |RemoveCallback| here even if adding the track has failed and
- // frame_deliverer_->AddCallback has not been called.
- frame_deliverer_->RemoveCallback(video_track);
+
+ // Check if |video_track| is waiting for applying new constraints and remove
+ // the request in that case.
+ for (std::vector<RequestedConstraints>::iterator it =
+ requested_constraints_.begin();
+ it != requested_constraints_.end(); ++it) {
+ if (it->track == video_track) {
+ requested_constraints_.erase(it);
+ break;
+ }
+ }
+ // Call |frame_adapter_->RemoveTrack| here even if adding the track has
+ // failed and |frame_adapter_->AddCallback| has not been called.
+ track_adapter_->RemoveTrack(video_track);
if (tracks_.empty())
StopSource();
@@ -460,7 +421,8 @@ void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) {
const scoped_refptr<base::MessageLoopProxy>&
MediaStreamVideoSource::io_message_loop() const {
- return frame_deliverer_->io_message_loop();
+ DCHECK(CalledOnValidThread());
+ return track_adapter_->io_message_loop();
}
void MediaStreamVideoSource::DoStopSource() {
@@ -480,9 +442,7 @@ void MediaStreamVideoSource::OnSupportedFormats(
supported_formats_ = formats;
if (!FindBestFormatWithConstraints(supported_formats_,
- &current_format_,
- &max_frame_output_size_,
- &current_constraints_)) {
+ &current_format_)) {
SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
// This object can be deleted after calling FinalizeAddTrack. See comment
// in the header file.
@@ -500,15 +460,12 @@ void MediaStreamVideoSource::OnSupportedFormats(
params.requested_format = current_format_;
StartSourceImpl(
params,
- base::Bind(&MediaStreamVideoSource::FrameDeliverer::DeliverFrameOnIO,
- frame_deliverer_));
+ base::Bind(&VideoTrackAdapter::DeliverFrameOnIO, track_adapter_));
}
bool MediaStreamVideoSource::FindBestFormatWithConstraints(
const media::VideoCaptureFormats& formats,
- media::VideoCaptureFormat* best_format,
- gfx::Size* max_frame_output_size,
- blink::WebMediaConstraints* resulting_constraints) {
+ media::VideoCaptureFormat* best_format) {
// Find the first constraints that we can fulfill.
for (std::vector<RequestedConstraints>::iterator request_it =
requested_constraints_.begin();
@@ -521,9 +478,6 @@ bool MediaStreamVideoSource::FindBestFormatWithConstraints(
// we will start with whatever format is native to the source.
if (formats.empty() && !HasMandatoryConstraints(requested_constraints)) {
*best_format = media::VideoCaptureFormat();
- *resulting_constraints = requested_constraints;
- *max_frame_output_size = gfx::Size(std::numeric_limits<int>::max(),
- std::numeric_limits<int>::max());
return true;
}
media::VideoCaptureFormats filtered_formats =
@@ -532,9 +486,7 @@ bool MediaStreamVideoSource::FindBestFormatWithConstraints(
// A request with constraints that can be fulfilled.
GetBestCaptureFormat(filtered_formats,
requested_constraints,
- best_format,
- max_frame_output_size);
- *resulting_constraints= requested_constraints;
+ best_format);
return true;
}
}
@@ -576,11 +528,23 @@ void MediaStreamVideoSource::FinalizeAddTrack() {
((!current_format_.IsValid() && !HasMandatoryConstraints(
it->constraints)) ||
!FilterFormats(it->constraints, formats).empty());
+
if (success) {
- frame_deliverer_->AddCallback(it->track, it->frame_callback,
- max_frame_output_size_);
+ int max_width;
+ int max_height;
+ GetDesiredMaxWidthAndHeight(it->constraints, &max_width, &max_height);
+ double max_aspect_ratio;
+ double min_aspect_ratio;
+ GetDesiredMinAndMaxAspectRatio(it->constraints,
+ &min_aspect_ratio,
+ &max_aspect_ratio);
+ track_adapter_->AddTrack(it->track,it->frame_callback,
+ max_width, max_height,
+ min_aspect_ratio, max_aspect_ratio);
}
+
DVLOG(3) << "FinalizeAddTrack() success " << success;
+
if (!it->callback.is_null())
it->callback.Run(this, success);
}
diff --git a/content/renderer/media/media_stream_video_source.h b/content/renderer/media/media_stream_video_source.h
index 34b9170335..8a9383854e 100644
--- a/content/renderer/media/media_stream_video_source.h
+++ b/content/renderer/media/media_stream_video_source.h
@@ -10,11 +10,11 @@
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/threading/non_thread_safe.h"
#include "content/common/content_export.h"
#include "content/common/media/video_capture.h"
#include "content/renderer/media/media_stream_source.h"
-#include "content/renderer/media/video_frame_deliverer.h"
#include "media/base/video_frame.h"
#include "media/video/capture/video_capture_types.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
@@ -24,6 +24,7 @@
namespace content {
class MediaStreamVideoTrack;
+class VideoTrackAdapter;
// MediaStreamVideoSource is an interface used for sending video frames to a
// MediaStreamVideoTrack.
@@ -38,8 +39,7 @@ class MediaStreamVideoTrack;
// the source implementation must call OnSupportedFormats.
// MediaStreamVideoSource then match the constraints provided in AddTrack with
// the formats and call StartSourceImpl. The source implementation must call
-// OnStartDone when the underlying source has been started or failed to
-// start.
+// OnStartDone when the underlying source has been started or failed to start.
class CONTENT_EXPORT MediaStreamVideoSource
: public MediaStreamSource,
NON_EXPORTED_BASE(public base::NonThreadSafe) {
@@ -128,14 +128,10 @@ class CONTENT_EXPORT MediaStreamVideoSource
// Finds the first constraints in |requested_constraints_| that can be
// fulfilled. |best_format| is set to the video resolution that can be
- // fulfilled. |frame_output_size| is the requested frame size after cropping.
- // |resulting_constraints| is set to the found constraints in
- // |requested_constraints_|.
+ // fulfilled.
bool FindBestFormatWithConstraints(
const media::VideoCaptureFormats& formats,
- media::VideoCaptureFormat* best_format,
- gfx::Size* frame_output_size,
- blink::WebMediaConstraints* resulting_constraints);
+ media::VideoCaptureFormat* best_format);
// Trigger all cached callbacks from AddTrack. AddTrack is successful
// if the capture delegate has started and the constraints provided in
@@ -149,10 +145,6 @@ class CONTENT_EXPORT MediaStreamVideoSource
State state_;
media::VideoCaptureFormat current_format_;
- blink::WebMediaConstraints current_constraints_;
- // |max_frame_output_size_| is the maximum frame size allowed by
- // |current_constraints_|.
- gfx::Size max_frame_output_size_;
struct RequestedConstraints {
RequestedConstraints(MediaStreamVideoTrack* track,
@@ -170,12 +162,10 @@ class CONTENT_EXPORT MediaStreamVideoSource
media::VideoCaptureFormats supported_formats_;
- // |FrameDeliverer| is an internal helper object used for delivering video
- // frames using callbacks to all registered tracks on the IO thread.
- class FrameDeliverer;
- scoped_refptr<FrameDeliverer> frame_deliverer_;
+ // |track_adapter_| delivers video frames to the tracks on the IO-thread.
+ scoped_refptr<VideoTrackAdapter> track_adapter_;
- // Tracks that currently are receiving video frames.
+ // Tracks that currently are connected to this source.
std::vector<MediaStreamVideoTrack*> tracks_;
// NOTE: Weak pointers must be invalidated before all other member variables.
diff --git a/content/renderer/media/media_stream_video_source_unittest.cc b/content/renderer/media/media_stream_video_source_unittest.cc
index 1b1f204dc0..81e1626c47 100644
--- a/content/renderer/media/media_stream_video_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_source_unittest.cc
@@ -94,7 +94,7 @@ class MediaStreamVideoSourceTest
MockMediaStreamVideoSource* mock_source() { return mock_source_; }
- // Test that the source crops to the requested max width and
+ // Test that the source crops/scales to the requested width and
// height even though the camera delivers a larger frame.
void TestSourceCropFrame(int capture_width,
int capture_height,
@@ -107,8 +107,8 @@ class MediaStreamVideoSourceTest
30);
MockMediaStreamVideoSink sink;
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
-
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink);
EXPECT_EQ(1, sink.number_of_frames());
@@ -130,6 +130,64 @@ class MediaStreamVideoSourceTest
run_loop.Run();
}
+ void DeliverVideoFrameAndWaitForTwoRenderers(
+ int width,
+ int height,
+ MockMediaStreamVideoSink* sink1,
+ MockMediaStreamVideoSink* sink2) {
+ base::RunLoop run_loop;
+ base::Closure quit_closure = run_loop.QuitClosure();
+ EXPECT_CALL(*sink1, OnVideoFrame());
+ EXPECT_CALL(*sink2, OnVideoFrame()).WillOnce(
+ RunClosure(quit_closure));
+ scoped_refptr<media::VideoFrame> frame =
+ media::VideoFrame::CreateBlackFrame(gfx::Size(width, height));
+ mock_source()->DeliverVideoFrame(frame);
+ run_loop.Run();
+ }
+
+ void TestTwoTracksWithDifferentConstraints(
+ const blink::WebMediaConstraints& constraints1,
+ const blink::WebMediaConstraints& constraints2,
+ int capture_width,
+ int capture_height,
+ int expected_width1,
+ int expected_height1,
+ int expected_width2,
+ int expected_height2) {
+ blink::WebMediaStreamTrack track1 =
+ CreateTrackAndStartSource(constraints1, capture_width, capture_height,
+ MediaStreamVideoSource::kDefaultFrameRate);
+
+ blink::WebMediaStreamTrack track2 =
+ CreateTrack("dummy", constraints2);
+
+ MockMediaStreamVideoSink sink1;
+ MediaStreamVideoSink::AddToVideoTrack(&sink1, sink1.GetDeliverFrameCB(),
+ track1);
+ EXPECT_EQ(0, sink1.number_of_frames());
+
+ MockMediaStreamVideoSink sink2;
+ MediaStreamVideoSink::AddToVideoTrack(&sink2, sink2.GetDeliverFrameCB(),
+ track2);
+ EXPECT_EQ(0, sink2.number_of_frames());
+
+ DeliverVideoFrameAndWaitForTwoRenderers(capture_width,
+ capture_height,
+ &sink1,
+ &sink2);
+
+ EXPECT_EQ(1, sink1.number_of_frames());
+ EXPECT_EQ(expected_width1, sink1.frame_size().width());
+ EXPECT_EQ(expected_height1, sink1.frame_size().height());
+
+ EXPECT_EQ(1, sink2.number_of_frames());
+ EXPECT_EQ(expected_width2, sink2.frame_size().width());
+ EXPECT_EQ(expected_height2, sink2.frame_size().height());
+
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1);
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
+ }
void ReleaseTrackAndSourceOnAddTrackCallback(
const blink::WebMediaStreamTrack& track_to_release) {
@@ -151,8 +209,8 @@ class MediaStreamVideoSourceTest
track_to_release_.reset();
}
}
- scoped_ptr<ChildProcess> child_process_;
base::MessageLoopForUI message_loop_;
+ scoped_ptr<ChildProcess> child_process_;
blink::WebMediaStreamTrack track_to_release_;
int number_of_successful_constraints_applied_;
int number_of_failed_constraints_applied_;
@@ -246,14 +304,53 @@ TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) {
640.0 / 480);
factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280);
- CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 640, 480, 30);
+ TestSourceCropFrame(1280, 720,
+ factory.CreateWebMediaConstraints(), 960, 720);
+}
+
+// Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2.
+TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) {
+ MockMediaConstraintFactory factory;
+ factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
+
+ TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth,
+ MediaStreamVideoSource::kDefaultHeight,
+ factory.CreateWebMediaConstraints(), 640, 320);
}
-// Test that AddTrack fail if the mandatory aspect ratio
-// is set higher than supported.
-TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) {
+TEST_F(MediaStreamVideoSourceTest, MinAspectRatioLargerThanMaxAspectRatio) {
MockMediaConstraintFactory factory;
factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
+ factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 1);
+ blink::WebMediaStreamTrack track = CreateTrack(
+ "123", factory.CreateWebMediaConstraints());
+ mock_source()->CompleteGetSupportedFormats();
+ EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, MaxAspectRatioZero) {
+ MockMediaConstraintFactory factory;
+ factory.AddOptional(MediaStreamVideoSource::kMaxAspectRatio, 0);
+ blink::WebMediaStreamTrack track = CreateTrack(
+ "123", factory.CreateWebMediaConstraints());
+ mock_source()->CompleteGetSupportedFormats();
+ EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidth) {
+ MockMediaConstraintFactory factory;
+ factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640);
+ factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 320);
+ blink::WebMediaStreamTrack track = CreateTrack(
+ "123", factory.CreateWebMediaConstraints());
+ mock_source()->CompleteGetSupportedFormats();
+ EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
+}
+
+TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeight) {
+ MockMediaConstraintFactory factory;
+ factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480);
+ factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 360);
blink::WebMediaStreamTrack track = CreateTrack(
"123", factory.CreateWebMediaConstraints());
mock_source()->CompleteGetSupportedFormats();
@@ -278,7 +375,7 @@ TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
// source during the callback if adding a track fails.
TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnFailureCallBack) {
MockMediaConstraintFactory factory;
- factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
+ factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 99999);
{
blink::WebMediaStreamTrack track =
CreateTrack("123", factory.CreateWebMediaConstraints());
@@ -405,6 +502,15 @@ TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame637359) {
TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359);
}
+TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame320320) {
+ MockMediaConstraintFactory factory;
+ factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 320);
+ factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 320);
+ factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 320);
+ factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 320);
+ TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320);
+}
+
TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) {
MockMediaConstraintFactory factory;
factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 1920);
@@ -415,6 +521,84 @@ TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) {
1280, 720);
}
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) {
+ MockMediaConstraintFactory factory1;
+ factory1.AddOptional(MediaStreamVideoSource::kMaxWidth, 640);
+ factory1.AddOptional(MediaStreamVideoSource::kMaxHeight, 480);
+
+ MockMediaConstraintFactory factory2;
+ factory2.AddOptional(MediaStreamVideoSource::kMaxHeight, 360);
+
+ TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
+ factory2.CreateWebMediaConstraints(),
+ 640, 480,
+ 640, 480,
+ 640, 360);
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) {
+ MockMediaConstraintFactory factory1;
+ factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280);
+ factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720);
+
+
+ MockMediaConstraintFactory factory2;
+ factory2.AddMandatory(MediaStreamVideoSource::kMaxWidth, 640);
+ factory2.AddMandatory(MediaStreamVideoSource::kMaxHeight, 360);
+
+ TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
+ factory2.CreateWebMediaConstraints(),
+ 1280, 720,
+ 1280, 720,
+ 640, 360);
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700) {
+ MockMediaConstraintFactory factory1;
+ factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280);
+ factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720);
+
+ MockMediaConstraintFactory factory2;
+ factory2.AddMandatory(MediaStreamVideoSource::kMaxWidth, 700);
+ factory2.AddMandatory(MediaStreamVideoSource::kMaxHeight, 700);
+
+ TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
+ factory2.CreateWebMediaConstraints(),
+ 1280, 720,
+ 1280, 720,
+ 700, 700);
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndMaxAspectRatio4To3) {
+ MockMediaConstraintFactory factory1;
+ factory1.AddOptional(MediaStreamVideoSource::kMinWidth, 1280);
+ factory1.AddOptional(MediaStreamVideoSource::kMinHeight, 720);
+
+ MockMediaConstraintFactory factory2;
+ factory2.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 640.0 / 480);
+
+ TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
+ factory2.CreateWebMediaConstraints(),
+ 1280, 720,
+ 1280, 720,
+ 960, 720);
+}
+
+TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVgaAndMinAspectRatio) {
+ MockMediaConstraintFactory factory1;
+ factory1.AddOptional(MediaStreamVideoSource::kMaxWidth, 640);
+ factory1.AddOptional(MediaStreamVideoSource::kMaxHeight, 480);
+
+ MockMediaConstraintFactory factory2;
+ factory2.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 640.0 / 360);
+
+ TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
+ factory2.CreateWebMediaConstraints(),
+ 640, 480,
+ 640, 480,
+ 640, 360);
+}
+
// Test that a source can change the frame resolution on the fly and that
// tracks sinks get the new frame size unless constraints force the frame to be
// cropped.
@@ -429,7 +613,8 @@ TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) {
640, 480, 30);
MockMediaStreamVideoSink sink;
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
EXPECT_EQ(0, sink.number_of_frames());
DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
EXPECT_EQ(1, sink.number_of_frames());
diff --git a/content/renderer/media/media_stream_video_track.cc b/content/renderer/media/media_stream_video_track.cc
index 577c7dca65..cbb2869b69 100644
--- a/content/renderer/media/media_stream_video_track.cc
+++ b/content/renderer/media/media_stream_video_track.cc
@@ -11,7 +11,7 @@
namespace content {
// Helper class used for delivering video frames to MediaStreamSinks on the
-// IO-thread and MediaStreamVideoSinks on the main render thread.
+// IO-thread.
// Frames are delivered to an instance of this class from a
// MediaStreamVideoSource on the IO-thread to the method DeliverFrameOnIO.
// Frames are only delivered to the sinks if the track is enabled.
@@ -24,19 +24,14 @@ class MediaStreamVideoTrack::FrameDeliverer : public VideoFrameDeliverer {
enabled_(enabled) {
}
- // Add |sink| to receive frames and state changes on the main render thread.
- void AddSink(MediaStreamVideoSink* sink) {
+ // Add |sink| to receive state changes on the main render thread.
+ // Video frames will be delivered to |callback| on the IO thread.
+ void AddSink(MediaStreamVideoSink* sink,
+ const VideoCaptureDeliverFrameCB& callback) {
DCHECK(thread_checker().CalledOnValidThread());
DCHECK(std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end());
- if (sinks_.empty()) {
- VideoCaptureDeliverFrameCB frame_callback = media::BindToCurrentLoop(
- base::Bind(
- &MediaStreamVideoTrack::FrameDeliverer::OnVideoFrameOnMainThread,
- this));
- AddCallback(this, frame_callback);
- }
-
sinks_.push_back(sink);
+ AddCallback(sink, callback);
}
void RemoveSink(MediaStreamVideoSink* sink) {
@@ -45,21 +40,7 @@ class MediaStreamVideoTrack::FrameDeliverer : public VideoFrameDeliverer {
std::find(sinks_.begin(), sinks_.end(), sink);
DCHECK(it != sinks_.end());
sinks_.erase(it);
- if (sinks_.empty()) {
- RemoveCallback(this);
- }
- }
-
- // Called when a video frame is received on the main render thread.
- // It delivers the received frames to the registered MediaStreamVideo sinks.
- void OnVideoFrameOnMainThread(
- const scoped_refptr<media::VideoFrame>& frame,
- const media::VideoCaptureFormat& format) {
- DCHECK(thread_checker().CalledOnValidThread());
- for (std::vector<MediaStreamVideoSink*>::iterator it = sinks_.begin();
- it != sinks_.end(); ++it) {
- (*it)->OnVideoFrame(frame);
- }
+ RemoveCallback(sink);
}
void SetEnabled(bool enabled) {
@@ -133,6 +114,7 @@ MediaStreamVideoTrack::MediaStreamVideoTrack(
enabled)),
constraints_(constraints),
source_(source) {
+ DCHECK(!constraints.isNull());
source->AddTrack(this,
base::Bind(
&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO,
@@ -141,13 +123,15 @@ MediaStreamVideoTrack::MediaStreamVideoTrack(
}
MediaStreamVideoTrack::~MediaStreamVideoTrack() {
+ DCHECK(thread_checker_.CalledOnValidThread());
Stop();
DVLOG(3) << "~MediaStreamVideoTrack()";
}
-void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
+void MediaStreamVideoTrack::AddSink(
+ MediaStreamVideoSink* sink, const VideoCaptureDeliverFrameCB& callback) {
DCHECK(thread_checker_.CalledOnValidThread());
- frame_deliverer_->AddSink(sink);
+ frame_deliverer_->AddSink(sink, callback);
}
void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
@@ -155,17 +139,6 @@ void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) {
frame_deliverer_->RemoveSink(sink);
}
-void MediaStreamVideoTrack::AddSink(
- MediaStreamSink* sink, const VideoCaptureDeliverFrameCB& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- frame_deliverer_->AddCallback(sink, callback);
-}
-
-void MediaStreamVideoTrack::RemoveSink(MediaStreamSink* sink) {
- DCHECK(thread_checker_.CalledOnValidThread());
- frame_deliverer_->RemoveCallback(sink);
-}
-
void MediaStreamVideoTrack::SetEnabled(bool enabled) {
DCHECK(thread_checker_.CalledOnValidThread());
MediaStreamTrack::SetEnabled(enabled);
diff --git a/content/renderer/media/media_stream_video_track.h b/content/renderer/media/media_stream_video_track.h
index 9fa8125d27..040686c582 100644
--- a/content/renderer/media/media_stream_video_track.h
+++ b/content/renderer/media/media_stream_video_track.h
@@ -8,6 +8,7 @@
#include <vector>
#include "base/compiler_specific.h"
+#include "base/gtest_prod_util.h"
#include "base/memory/scoped_vector.h"
#include "base/threading/thread_checker.h"
#include "content/common/content_export.h"
@@ -48,17 +49,6 @@ class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack {
bool enabled);
virtual ~MediaStreamVideoTrack();
- // Add |sink| to receive state changes and video frames on the main render
- // thread.
- virtual void AddSink(MediaStreamVideoSink* sink);
- virtual void RemoveSink(MediaStreamVideoSink* sink);
-
- // Add |sink| to receive state changes on the main render thread and video
- // frames in the |callback| method on the IO-thread.
- virtual void AddSink(MediaStreamSink* sink,
- const VideoCaptureDeliverFrameCB& callback);
- virtual void RemoveSink(MediaStreamSink* sink);
-
virtual void SetEnabled(bool enabled) OVERRIDE;
virtual void Stop() OVERRIDE;
@@ -73,6 +63,23 @@ class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack {
base::ThreadChecker thread_checker_;
private:
+ // MediaStreamVideoSink is a friend to allow it to call AddSink() and
+ // RemoveSink().
+ friend class MediaStreamVideoSink;
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamRemoteVideoSourceTest, StartTrack);
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamRemoteVideoSourceTest, RemoteTrackStop);
+ FRIEND_TEST_ALL_PREFIXES(VideoDestinationHandlerTest, PutFrame);
+
+ // Add |sink| to receive state changes on the main render thread and video
+ // frames in the |callback| method on the IO-thread.
+ // |callback| will be reset on the render thread.
+ // These two methods are private such that no subclass can intercept and
+ // store the callback. This is important to ensure that we can release
+ // the callback on render thread without reference to it on the IO-thread.
+ void AddSink(MediaStreamVideoSink* sink,
+ const VideoCaptureDeliverFrameCB& callback);
+ void RemoveSink(MediaStreamVideoSink* sink);
+
// |FrameDeliverer| is an internal helper object used for delivering video
// frames on the IO-thread using callbacks to all registered tracks.
class FrameDeliverer;
diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
index 758c568f30..949b0170c2 100644
--- a/content/renderer/media/media_stream_video_track_unittest.cc
+++ b/content/renderer/media/media_stream_video_track_unittest.cc
@@ -2,9 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/thread_checker_impl.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/mock_media_stream_video_sink.h"
@@ -73,8 +77,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
}
private:
- scoped_ptr<ChildProcess> child_process_;
base::MessageLoopForUI message_loop_;
+ scoped_ptr<ChildProcess> child_process_;
blink::WebMediaStreamSource blink_source_;
// |mock_source_| is owned by |webkit_source_|.
MockMediaStreamVideoSource* mock_source_;
@@ -84,7 +88,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
DeliverVideoFrameAndWaitForRenderer(&sink);
EXPECT_EQ(1, sink.number_of_frames());
@@ -103,10 +108,54 @@ TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
EXPECT_EQ(2, sink.number_of_frames());
}
+class CheckThreadHelper {
+ public:
+ CheckThreadHelper(base::Closure callback, bool* correct)
+ : callback_(callback),
+ correct_(correct) {
+ }
+
+ ~CheckThreadHelper() {
+ *correct_ = thread_checker_.CalledOnValidThread();
+ callback_.Run();
+ }
+
+ private:
+ base::Closure callback_;
+ bool* correct_;
+ base::ThreadCheckerImpl thread_checker_;
+};
+
+void CheckThreadVideoFrameReceiver(
+ CheckThreadHelper* helper,
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ // Do nothing.
+}
+
+// Checks that the callback given to the track is reset on the right thread.
+TEST_F(MediaStreamVideoTrackTest, ResetCallbackOnThread) {
+ MockMediaStreamVideoSink sink;
+ blink::WebMediaStreamTrack track = CreateTrack();
+
+ base::RunLoop run_loop;
+ bool correct = false;
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink,
+ base::Bind(
+ &CheckThreadVideoFrameReceiver,
+ base::Owned(new CheckThreadHelper(run_loop.QuitClosure(), &correct))),
+ track);
+ MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+ run_loop.Run();
+ EXPECT_TRUE(correct) << "Not called on correct thread.";
+}
+
TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
MediaStreamVideoTrack* video_track =
MediaStreamVideoTrack::GetVideoTrack(track);
@@ -137,7 +186,8 @@ TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
MockMediaStreamVideoSink sink;
blink::WebMediaStreamTrack track = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink, sink.GetDeliverFrameCB(), track);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
mock_source()->StopSource();
@@ -148,7 +198,8 @@ TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
MockMediaStreamVideoSink sink1;
blink::WebMediaStreamTrack track1 = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink1, track1);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink1, sink1.GetDeliverFrameCB(), track1);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
@@ -156,7 +207,8 @@ TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
MockMediaStreamVideoSink sink2;
blink::WebMediaStreamTrack track2 = CreateTrack();
- MediaStreamVideoSink::AddToVideoTrack(&sink2, track2);
+ MediaStreamVideoSink::AddToVideoTrack(
+ &sink2, sink2.GetDeliverFrameCB(), track2);
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
MediaStreamVideoTrack* native_track1 =
diff --git a/content/renderer/media/mock_media_constraint_factory.cc b/content/renderer/media/mock_media_constraint_factory.cc
index 99d9f56244..5708d50bf2 100644
--- a/content/renderer/media/mock_media_constraint_factory.cc
+++ b/content/renderer/media/mock_media_constraint_factory.cc
@@ -9,6 +9,13 @@
namespace content {
+namespace {
+
+static const char kValueTrue[] = "true";
+static const char kValueFalse[] = "false";
+
+} // namespace
+
MockMediaConstraintFactory::MockMediaConstraintFactory() {
}
@@ -37,6 +44,18 @@ void MockMediaConstraintFactory::AddMandatory(const std::string& key,
base::UTF8ToUTF16(base::DoubleToString(value))));
}
+void MockMediaConstraintFactory::AddMandatory(const std::string& key,
+ const std::string& value) {
+ mandatory_.push_back(blink::WebMediaConstraint(
+ base::UTF8ToUTF16(key), base::UTF8ToUTF16(value)));
+}
+
+void MockMediaConstraintFactory::AddMandatory(const std::string& key,
+ bool value) {
+ const std::string string_value = value ? kValueTrue : kValueFalse;
+ AddMandatory(key, string_value);
+}
+
void MockMediaConstraintFactory::AddOptional(const std::string& key,
int value) {
optional_.push_back(blink::WebMediaConstraint(base::UTF8ToUTF16(key),
@@ -50,6 +69,18 @@ void MockMediaConstraintFactory::AddOptional(const std::string& key,
base::UTF8ToUTF16(base::DoubleToString(value))));
}
+void MockMediaConstraintFactory::AddOptional(const std::string& key,
+ const std::string& value) {
+ optional_.push_back(blink::WebMediaConstraint(
+ base::UTF8ToUTF16(key), base::UTF8ToUTF16(value)));
+}
+
+void MockMediaConstraintFactory::AddOptional(const std::string& key,
+ bool value) {
+ const std::string string_value = value ? kValueTrue : kValueFalse;
+ AddOptional(key, string_value);
+}
+
void MockMediaConstraintFactory::DisableDefaultAudioConstraints() {
static const char* kDefaultAudioConstraints[] = {
webrtc::MediaConstraintsInterface::kEchoCancellation,
@@ -62,7 +93,7 @@ void MockMediaConstraintFactory::DisableDefaultAudioConstraints() {
webrtc::MediaConstraintsInterface::kExperimentalNoiseSuppression
};
MockMediaConstraintFactory factory;
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kDefaultAudioConstraints); ++i) {
+ for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) {
AddMandatory(kDefaultAudioConstraints[i], false);
}
}
diff --git a/content/renderer/media/mock_media_constraint_factory.h b/content/renderer/media/mock_media_constraint_factory.h
index 6eb261a42f..e98cb30429 100644
--- a/content/renderer/media/mock_media_constraint_factory.h
+++ b/content/renderer/media/mock_media_constraint_factory.h
@@ -20,8 +20,12 @@ class MockMediaConstraintFactory {
blink::WebMediaConstraints CreateWebMediaConstraints();
void AddMandatory(const std::string& key, int value);
void AddMandatory(const std::string& key, double value);
+ void AddMandatory(const std::string& key, const std::string& value);
+ void AddMandatory(const std::string& key, bool value);
void AddOptional(const std::string& key, int value);
void AddOptional(const std::string& key, double value);
+ void AddOptional(const std::string& key, const std::string& value);
+ void AddOptional(const std::string& key, bool value);
void DisableDefaultAudioConstraints();
private:
diff --git a/content/renderer/media/mock_media_stream_video_sink.cc b/content/renderer/media/mock_media_stream_video_sink.cc
index 4246a39497..638c897535 100644
--- a/content/renderer/media/mock_media_stream_video_sink.cc
+++ b/content/renderer/media/mock_media_stream_video_sink.cc
@@ -4,20 +4,32 @@
#include "content/renderer/media/mock_media_stream_video_sink.h"
+#include "media/base/bind_to_current_loop.h"
+
namespace content {
MockMediaStreamVideoSink::MockMediaStreamVideoSink()
: number_of_frames_(0),
enabled_(true),
format_(media::VideoFrame::UNKNOWN),
- state_(blink::WebMediaStreamSource::ReadyStateLive) {
+ state_(blink::WebMediaStreamSource::ReadyStateLive),
+ weak_factory_(this) {
}
MockMediaStreamVideoSink::~MockMediaStreamVideoSink() {
}
-void MockMediaStreamVideoSink::OnVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame) {
+VideoCaptureDeliverFrameCB
+MockMediaStreamVideoSink::GetDeliverFrameCB() {
+ return media::BindToCurrentLoop(
+ base::Bind(
+ &MockMediaStreamVideoSink::DeliverVideoFrame,
+ weak_factory_.GetWeakPtr()));
+}
+
+void MockMediaStreamVideoSink::DeliverVideoFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
++number_of_frames_;
format_ = frame->format();
frame_size_ = frame->natural_size();
diff --git a/content/renderer/media/mock_media_stream_video_sink.h b/content/renderer/media/mock_media_stream_video_sink.h
index 07ec43fa73..acab871563 100644
--- a/content/renderer/media/mock_media_stream_video_sink.h
+++ b/content/renderer/media/mock_media_stream_video_sink.h
@@ -7,6 +7,8 @@
#include "content/public/renderer/media_stream_video_sink.h"
+#include "base/memory/weak_ptr.h"
+#include "content/common/media/video_capture.h"
#include "media/base/video_frame.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -17,15 +19,15 @@ class MockMediaStreamVideoSink : public MediaStreamVideoSink {
MockMediaStreamVideoSink();
virtual ~MockMediaStreamVideoSink();
- virtual void OnVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame) OVERRIDE;
virtual void OnReadyStateChanged(
- blink::WebMediaStreamSource::ReadyState state) OVERRIDE;
+ blink::WebMediaStreamSource::ReadyState state) OVERRIDE;
virtual void OnEnabledChanged(bool enabled) OVERRIDE;
// Triggered when OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame)
// is called.
- MOCK_METHOD0(OnVideoFrame, void());
+ MOCK_METHOD0(OnVideoFrame, void());
+
+ VideoCaptureDeliverFrameCB GetDeliverFrameCB();
int number_of_frames() const { return number_of_frames_; }
media::VideoFrame::Format format() const { return format_; }
@@ -35,11 +37,16 @@ class MockMediaStreamVideoSink : public MediaStreamVideoSink {
blink::WebMediaStreamSource::ReadyState state() const { return state_; }
private:
+ void DeliverVideoFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
+
int number_of_frames_;
bool enabled_;
media::VideoFrame::Format format_;
blink::WebMediaStreamSource::ReadyState state_;
gfx::Size frame_size_;
+ base::WeakPtrFactory<MockMediaStreamVideoSink> weak_factory_;
};
} // namespace content
diff --git a/content/renderer/media/mock_media_stream_video_source.cc b/content/renderer/media/mock_media_stream_video_source.cc
index 12bddb4564..ce060f6f60 100644
--- a/content/renderer/media/mock_media_stream_video_source.cc
+++ b/content/renderer/media/mock_media_stream_video_source.cc
@@ -84,7 +84,6 @@ void MockMediaStreamVideoSource::DeliverVideoFrameOnIO(
const scoped_refptr<media::VideoFrame>& frame,
media::VideoCaptureFormat format,
const VideoCaptureDeliverFrameCB& frame_callback) {
- DCHECK(io_message_loop()->BelongsToCurrentThread());
frame_callback.Run(frame, format);
}
diff --git a/content/renderer/media/mock_peer_connection_impl.cc b/content/renderer/media/mock_peer_connection_impl.cc
index c00c02367b..41fa2d1a5d 100644
--- a/content/renderer/media/mock_peer_connection_impl.cc
+++ b/content/renderer/media/mock_peer_connection_impl.cc
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_peer_connection_impl.h"
#include <vector>
#include "base/logging.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
using testing::_;
using webrtc::AudioTrackInterface;
@@ -205,7 +205,7 @@ const char MockPeerConnectionImpl::kDummyOffer[] = "dummy offer";
const char MockPeerConnectionImpl::kDummyAnswer[] = "dummy answer";
MockPeerConnectionImpl::MockPeerConnectionImpl(
- MockMediaStreamDependencyFactory* factory)
+ MockPeerConnectionDependencyFactory* factory)
: dependency_factory_(factory),
local_streams_(new talk_base::RefCountedObject<MockStreamCollection>),
remote_streams_(new talk_base::RefCountedObject<MockStreamCollection>),
diff --git a/content/renderer/media/mock_peer_connection_impl.h b/content/renderer/media/mock_peer_connection_impl.h
index ca23116bb8..d563746aee 100644
--- a/content/renderer/media/mock_peer_connection_impl.h
+++ b/content/renderer/media/mock_peer_connection_impl.h
@@ -9,18 +9,19 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h"
namespace content {
-class MockMediaStreamDependencyFactory;
+class MockPeerConnectionDependencyFactory;
class MockStreamCollection;
class MockPeerConnectionImpl : public webrtc::PeerConnectionInterface {
public:
- explicit MockPeerConnectionImpl(MockMediaStreamDependencyFactory* factory);
+ explicit MockPeerConnectionImpl(MockPeerConnectionDependencyFactory* factory);
// PeerConnectionInterface implementation.
virtual talk_base::scoped_refptr<webrtc::StreamCollectionInterface>
@@ -120,7 +121,7 @@ class MockPeerConnectionImpl : public webrtc::PeerConnectionInterface {
private:
// Used for creating MockSessionDescription.
- MockMediaStreamDependencyFactory* dependency_factory_;
+ MockPeerConnectionDependencyFactory* dependency_factory_;
std::string stream_label_;
talk_base::scoped_refptr<MockStreamCollection> local_streams_;
diff --git a/content/renderer/media/mock_web_rtc_peer_connection_handler_client.h b/content/renderer/media/mock_web_rtc_peer_connection_handler_client.h
index 720a7cb65e..31b5a02d43 100644
--- a/content/renderer/media/mock_web_rtc_peer_connection_handler_client.h
+++ b/content/renderer/media/mock_web_rtc_peer_connection_handler_client.h
@@ -35,6 +35,7 @@ class MockWebRTCPeerConnectionHandlerClient
void(const blink::WebMediaStream& stream_descriptor));
MOCK_METHOD1(didAddRemoteDataChannel,
void(blink::WebRTCDataChannelHandler*));
+ MOCK_METHOD0(releasePeerConnectionHandler, void());
void didGenerateICECandidateWorker(
const blink::WebRTCICECandidate& candidate);
diff --git a/content/renderer/media/remote_media_stream_impl.cc b/content/renderer/media/remote_media_stream_impl.cc
index f61830d180..d2421310ef 100644
--- a/content/renderer/media/remote_media_stream_impl.cc
+++ b/content/renderer/media/remote_media_stream_impl.cc
@@ -9,9 +9,9 @@
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_video_track.h"
#include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "third_party/WebKit/public/platform/WebString.h"
namespace content {
@@ -42,7 +42,7 @@ void InitializeWebkitTrack(webrtc::MediaStreamTrackInterface* track,
track->enabled()));
} else {
DCHECK(type == blink::WebMediaStreamSource::TypeAudio);
- content::MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
+ content::PeerConnectionDependencyFactory::AddNativeAudioTrackToBlinkTrack(
track, *webkit_track, false);
}
}
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.cc b/content/renderer/media/renderer_webaudiodevice_impl.cc
index 1caac4ce0b..536bb1e388 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.cc
+++ b/content/renderer/media/renderer_webaudiodevice_impl.cc
@@ -57,7 +57,7 @@ void RendererWebAudioDeviceImpl::start() {
output_device_ = AudioDeviceFactory::NewOutputDevice(
render_view ? render_view->routing_id() : MSG_ROUTING_NONE,
render_frame ? render_frame->GetRoutingID(): MSG_ROUTING_NONE);
- output_device_->InitializeUnifiedStream(params_, this, session_id_);
+ output_device_->InitializeWithSessionId(params_, this, session_id_);
output_device_->Start();
// Note: Default behavior is to auto-play on start.
}
@@ -77,32 +77,22 @@ double RendererWebAudioDeviceImpl::sampleRate() {
int RendererWebAudioDeviceImpl::Render(media::AudioBus* dest,
int audio_delay_milliseconds) {
- RenderIO(NULL, dest, audio_delay_milliseconds);
- return dest->frames();
-}
-
-void RendererWebAudioDeviceImpl::RenderIO(media::AudioBus* source,
- media::AudioBus* dest,
- int audio_delay_milliseconds) {
- // Make the client callback for an I/O cycle.
if (client_callback_) {
- // Wrap the input pointers using WebVector.
- size_t source_channels =
- source ? static_cast<size_t>(source->channels()) : 0;
- WebVector<float*> web_audio_source_data(source_channels);
- for (size_t i = 0; i < source_channels; ++i)
- web_audio_source_data[i] = source->channel(i);
-
// Wrap the output pointers using WebVector.
WebVector<float*> web_audio_dest_data(
static_cast<size_t>(dest->channels()));
for (int i = 0; i < dest->channels(); ++i)
web_audio_dest_data[i] = dest->channel(i);
+ // TODO(xians): Remove the following |web_audio_source_data| after
+ // changing the blink interface.
+ WebVector<float*> web_audio_source_data(static_cast<size_t>(0));
client_callback_->render(web_audio_source_data,
web_audio_dest_data,
dest->frames());
}
+
+ return dest->frames();
}
void RendererWebAudioDeviceImpl::OnRenderError() {
diff --git a/content/renderer/media/renderer_webaudiodevice_impl.h b/content/renderer/media/renderer_webaudiodevice_impl.h
index 962ec0851c..0f06a89aa9 100644
--- a/content/renderer/media/renderer_webaudiodevice_impl.h
+++ b/content/renderer/media/renderer_webaudiodevice_impl.h
@@ -36,10 +36,6 @@ class RendererWebAudioDeviceImpl
virtual int Render(media::AudioBus* dest,
int audio_delay_milliseconds) OVERRIDE;
- virtual void RenderIO(media::AudioBus* source,
- media::AudioBus* dest,
- int audio_delay_milliseconds) OVERRIDE;
-
virtual void OnRenderError() OVERRIDE;
private:
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index 1171c289e4..687e887e1a 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -10,19 +10,20 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/common/content_switches.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_track.h"
#include "content/renderer/media/peer_connection_tracker.h"
#include "content/renderer/media/remote_media_stream_impl.h"
#include "content/renderer/media/rtc_data_channel_handler.h"
#include "content/renderer/media/rtc_dtmf_sender_handler.h"
#include "content/renderer/media/rtc_media_constraints.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
#include "content/renderer/media/webrtc_audio_device_impl.h"
@@ -186,6 +187,7 @@ class CreateSessionDescriptionRequest
virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc) OVERRIDE {
tracker_.TrackOnSuccess(desc);
webkit_request_.requestSucceeded(CreateWebKitSessionDescription(desc));
+ delete desc;
}
virtual void OnFailure(const std::string& error) OVERRIDE {
tracker_.TrackOnFailure(error);
@@ -316,17 +318,60 @@ void LocalRTCStatsResponse::addStatistic(size_t report,
impl_.addStatistic(report, name, value);
}
+namespace {
+
+class PeerConnectionUMAObserver : public webrtc::UMAObserver {
+ public:
+ PeerConnectionUMAObserver() {}
+ virtual ~PeerConnectionUMAObserver() {}
+
+ virtual void IncrementCounter(
+ webrtc::PeerConnectionUMAMetricsCounter counter) OVERRIDE {
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.IPMetrics",
+ counter,
+ webrtc::kBoundary);
+ }
+
+ virtual void AddHistogramSample(
+ webrtc::PeerConnectionUMAMetricsName type, int value) OVERRIDE {
+ switch (type) {
+ case webrtc::kTimeToConnect:
+ UMA_HISTOGRAM_MEDIUM_TIMES(
+ "WebRTC.PeerConnection.TimeToConnect",
+ base::TimeDelta::FromMilliseconds(value));
+ break;
+ case webrtc::kNetworkInterfaces_IPv4:
+ UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4Interfaces",
+ value);
+ break;
+ case webrtc::kNetworkInterfaces_IPv6:
+ UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6Interfaces",
+ value);
+ break;
+ default:
+ NOTREACHED();
+ }
+ }
+};
+
+base::LazyInstance<std::set<RTCPeerConnectionHandler*> >::Leaky
+ g_peer_connection_handlers = LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
RTCPeerConnectionHandler::RTCPeerConnectionHandler(
blink::WebRTCPeerConnectionHandlerClient* client,
- MediaStreamDependencyFactory* dependency_factory)
+ PeerConnectionDependencyFactory* dependency_factory)
: client_(client),
dependency_factory_(dependency_factory),
frame_(NULL),
peer_connection_tracker_(NULL),
num_data_channels_created_(0) {
+ g_peer_connection_handlers.Get().insert(this);
}
RTCPeerConnectionHandler::~RTCPeerConnectionHandler() {
+ g_peer_connection_handlers.Get().erase(this);
if (peer_connection_tracker_)
peer_connection_tracker_->UnregisterPeerConnection(this);
STLDeleteValues(&remote_streams_);
@@ -335,6 +380,18 @@ RTCPeerConnectionHandler::~RTCPeerConnectionHandler() {
"WebRTC.NumDataChannelsPerPeerConnection", num_data_channels_created_);
}
+// static
+void RTCPeerConnectionHandler::DestructAllHandlers() {
+ std::set<RTCPeerConnectionHandler*> handlers(
+ g_peer_connection_handlers.Get().begin(),
+ g_peer_connection_handlers.Get().end());
+ for (std::set<RTCPeerConnectionHandler*>::iterator handler = handlers.begin();
+ handler != handlers.end();
+ ++handler) {
+ (*handler)->client_->releasePeerConnectionHandler();
+ }
+}
+
void RTCPeerConnectionHandler::associateWithFrame(blink::WebFrame* frame) {
DCHECK(frame);
frame_ = frame;
@@ -364,6 +421,8 @@ bool RTCPeerConnectionHandler::initialize(
peer_connection_tracker_->RegisterPeerConnection(
this, servers, constraints, frame_);
+ uma_observer_ = new talk_base::RefCountedObject<PeerConnectionUMAObserver>();
+ native_peer_connection_->RegisterUMAObserver(uma_observer_.get());
return true;
}
diff --git a/content/renderer/media/rtc_peer_connection_handler.h b/content/renderer/media/rtc_peer_connection_handler.h
index 2634224b79..558ecbf631 100644
--- a/content/renderer/media/rtc_peer_connection_handler.h
+++ b/content/renderer/media/rtc_peer_connection_handler.h
@@ -24,7 +24,7 @@ class WebRTCDataChannelHandler;
namespace content {
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
class PeerConnectionTracker;
class RemoteMediaStreamImpl;
class WebRtcMediaStreamAdapter;
@@ -85,9 +85,12 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
public:
RTCPeerConnectionHandler(
blink::WebRTCPeerConnectionHandlerClient* client,
- MediaStreamDependencyFactory* dependency_factory);
+ PeerConnectionDependencyFactory* dependency_factory);
virtual ~RTCPeerConnectionHandler();
+ // Destroy all existing RTCPeerConnectionHandler objects.
+ static void DestructAllHandlers();
+
void associateWithFrame(blink::WebFrame* frame);
// Initialize method only used for unit test.
@@ -189,7 +192,7 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
// |dependency_factory_| is a raw pointer, and is valid for the lifetime of
// RenderThreadImpl.
- MediaStreamDependencyFactory* dependency_factory_;
+ PeerConnectionDependencyFactory* dependency_factory_;
blink::WebFrame* frame_;
@@ -208,6 +211,7 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
typedef std::map<webrtc::MediaStreamInterface*,
content::RemoteMediaStreamImpl*> RemoteStreamMap;
RemoteStreamMap remote_streams_;
+ scoped_refptr<webrtc::UMAObserver> uma_observer_;
DISALLOW_COPY_AND_ASSIGN(RTCPeerConnectionHandler);
};
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index 93e5b23768..7ed95ffb2a 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -14,13 +14,13 @@
#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_source.h"
#include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
#include "content/renderer/media/mock_peer_connection_impl.h"
#include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
#include "content/renderer/media/peer_connection_tracker.h"
#include "content/renderer/media/rtc_media_constraints.h"
#include "content/renderer/media/rtc_peer_connection_handler.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -187,7 +187,7 @@ class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler {
public:
RTCPeerConnectionHandlerUnderTest(
WebRTCPeerConnectionHandlerClient* client,
- MediaStreamDependencyFactory* dependency_factory)
+ PeerConnectionDependencyFactory* dependency_factory)
: RTCPeerConnectionHandler(client, dependency_factory) {
}
@@ -205,7 +205,7 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
virtual void SetUp() {
mock_client_.reset(new NiceMock<MockWebRTCPeerConnectionHandlerClient>());
- mock_dependency_factory_.reset(new MockMediaStreamDependencyFactory());
+ mock_dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
pc_handler_.reset(
new RTCPeerConnectionHandlerUnderTest(mock_client_.get(),
mock_dependency_factory_.get()));
@@ -287,9 +287,10 @@ class RTCPeerConnectionHandlerTest : public ::testing::Test {
return stream;
}
+ base::MessageLoop message_loop_;
scoped_ptr<ChildProcess> child_process_;
scoped_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_;
- scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory_;
+ scoped_ptr<MockPeerConnectionDependencyFactory> mock_dependency_factory_;
scoped_ptr<NiceMock<MockPeerConnectionTracker> > mock_tracker_;
scoped_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_;
diff --git a/content/renderer/media/rtc_video_encoder.cc b/content/renderer/media/rtc_video_encoder.cc
index e078b7ea73..22f17a1783 100644
--- a/content/renderer/media/rtc_video_encoder.cc
+++ b/content/renderer/media/rtc_video_encoder.cc
@@ -279,8 +279,7 @@ void RTCVideoEncoder::Impl::RequestEncodingParametersChange(uint32 bitrate,
void RTCVideoEncoder::Impl::Destroy() {
DVLOG(3) << "Impl::Destroy()";
DCHECK(thread_checker_.CalledOnValidThread());
- if (video_encoder_)
- video_encoder_.release()->Destroy();
+ video_encoder_.reset();
}
void RTCVideoEncoder::Impl::RequireBitstreamBuffers(
@@ -400,8 +399,7 @@ void RTCVideoEncoder::Impl::NotifyError(
retval = WEBRTC_VIDEO_CODEC_ERROR;
}
- if (video_encoder_)
- video_encoder_.release()->Destroy();
+ video_encoder_.reset();
if (async_waiter_) {
SignalAsyncWaiter(retval);
diff --git a/content/renderer/media/rtc_video_renderer.cc b/content/renderer/media/rtc_video_renderer.cc
index 26cff0d820..ba380b9c84 100644
--- a/content/renderer/media/rtc_video_renderer.cc
+++ b/content/renderer/media/rtc_video_renderer.cc
@@ -6,6 +6,7 @@
#include "base/debug/trace_event.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "media/base/bind_to_current_loop.h"
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
@@ -22,7 +23,8 @@ RTCVideoRenderer::RTCVideoRenderer(
message_loop_proxy_(base::MessageLoopProxy::current()),
state_(STOPPED),
frame_size_(kMinFrameSize, kMinFrameSize),
- video_track_(video_track) {
+ video_track_(video_track),
+ weak_factory_(this) {
}
RTCVideoRenderer::~RTCVideoRenderer() {
@@ -32,7 +34,13 @@ void RTCVideoRenderer::Start() {
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
DCHECK_EQ(state_, STOPPED);
- AddToVideoTrack(this, video_track_);
+ AddToVideoTrack(
+ this,
+ media::BindToCurrentLoop(
+ base::Bind(
+ &RTCVideoRenderer::OnVideoFrame,
+ weak_factory_.GetWeakPtr())),
+ video_track_);
state_ = STARTED;
if (video_track_.source().readyState() ==
@@ -46,6 +54,7 @@ void RTCVideoRenderer::Stop() {
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
DCHECK(state_ == STARTED || state_ == PAUSED);
RemoveFromVideoTrack(this, video_track_);
+ weak_factory_.InvalidateWeakPtrs();
state_ = STOPPED;
frame_size_.set_width(kMinFrameSize);
frame_size_.set_height(kMinFrameSize);
@@ -79,7 +88,8 @@ void RTCVideoRenderer::OnEnabledChanged(bool enabled) {
}
void RTCVideoRenderer::OnVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame) {
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
if (state_ != STARTED) {
return;
@@ -104,7 +114,7 @@ void RTCVideoRenderer::RenderSignalingFrame() {
// originates from a video camera.
scoped_refptr<media::VideoFrame> video_frame =
media::VideoFrame::CreateBlackFrame(frame_size_);
- OnVideoFrame(video_frame);
+ OnVideoFrame(video_frame, media::VideoCaptureFormat());
}
} // namespace content
diff --git a/content/renderer/media/rtc_video_renderer.h b/content/renderer/media/rtc_video_renderer.h
index 35a8da9802..e10686c9db 100644
--- a/content/renderer/media/rtc_video_renderer.h
+++ b/content/renderer/media/rtc_video_renderer.h
@@ -6,7 +6,9 @@
#define CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
#include "base/callback.h"
+#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
+#include "content/common/media/video_capture.h"
#include "content/public/renderer/media_stream_video_sink.h"
#include "content/renderer/media/video_frame_provider.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
@@ -52,9 +54,10 @@ class CONTENT_EXPORT RTCVideoRenderer
STOPPED,
};
+ void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
+
// VideoTrackSink implementation. Called on the main thread.
- virtual void OnVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame) OVERRIDE;
virtual void OnReadyStateChanged(
blink::WebMediaStreamSource::ReadyState state) OVERRIDE;
virtual void OnEnabledChanged(bool enabled) OVERRIDE;
@@ -67,6 +70,7 @@ class CONTENT_EXPORT RTCVideoRenderer
State state_;
gfx::Size frame_size_;
blink::WebMediaStreamTrack video_track_;
+ base::WeakPtrFactory<RTCVideoRenderer> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RTCVideoRenderer);
};
diff --git a/content/renderer/media/video_frame_deliverer.cc b/content/renderer/media/video_frame_deliverer.cc
index 67b11c42ec..ad823397d8 100644
--- a/content/renderer/media/video_frame_deliverer.cc
+++ b/content/renderer/media/video_frame_deliverer.cc
@@ -8,6 +8,11 @@
#include "base/location.h"
namespace content {
+namespace {
+void ResetCallback(scoped_ptr<VideoCaptureDeliverFrameCB> callback) {
+ // |callback| will be deleted when this exits.
+}
+} // namespace
VideoFrameDeliverer::VideoFrameDeliverer(
const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
@@ -41,15 +46,25 @@ void VideoFrameDeliverer::RemoveCallback(void* id) {
io_message_loop_->PostTask(
FROM_HERE,
base::Bind(&VideoFrameDeliverer::RemoveCallbackOnIO,
- this, id));
+ this, id, base::MessageLoopProxy::current()));
}
-void VideoFrameDeliverer::RemoveCallbackOnIO(void* id) {
+void VideoFrameDeliverer::RemoveCallbackOnIO(
+ void* id, const scoped_refptr<base::MessageLoopProxy>& message_loop) {
DCHECK(io_message_loop_->BelongsToCurrentThread());
std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin();
for (; it != callbacks_.end(); ++it) {
if (it->first == id) {
- callbacks_.erase(it);
+ // Callback is copied to heap and then deleted on the target thread.
+ // The following code ensures that the callback is not referenced on
+ // the stack.
+ scoped_ptr<VideoCaptureDeliverFrameCB> callback;
+ {
+ callback.reset(new VideoCaptureDeliverFrameCB(it->second));
+ callbacks_.erase(it);
+ }
+ message_loop->PostTask(
+ FROM_HERE, base::Bind(&ResetCallback, base::Passed(&callback)));
return;
}
}
diff --git a/content/renderer/media/video_frame_deliverer.h b/content/renderer/media/video_frame_deliverer.h
index f17c588bf5..0649d81383 100644
--- a/content/renderer/media/video_frame_deliverer.h
+++ b/content/renderer/media/video_frame_deliverer.h
@@ -20,7 +20,7 @@ namespace content {
// VideoFrameDeliverer is a helper class used for registering
// VideoCaptureDeliverFrameCB on the main render thread to receive video frames
// on the IO-thread.
-// Its used by MediaStreamVideoTrack and MediaStreamVideoSource.
+// Its used by MediaStreamVideoTrack.
class VideoFrameDeliverer
: public base::RefCountedThreadSafe<VideoFrameDeliverer> {
public:
@@ -30,9 +30,10 @@ class VideoFrameDeliverer
// Add |callback| to receive video frames on the IO-thread.
// Must be called on the main render thread.
void AddCallback(void* id, const VideoCaptureDeliverFrameCB& callback);
+
// Removes |callback| associated with |id| from receiving video frames if |id|
// has been added. It is ok to call RemoveCallback even if the |id| has not
- // been added.
+ // been added. Note that the added callback will be reset on the main thread.
// Must be called on the main render thread.
void RemoveCallback(void* id);
@@ -48,8 +49,11 @@ class VideoFrameDeliverer
protected:
void AddCallbackOnIO(void* id, const VideoCaptureDeliverFrameCB& callback);
+
+ // Callback will be removed and then reset on the designated message loop.
// It is ok to call RemoveCallback even if |id| has not been added.
- void RemoveCallbackOnIO(void* id);
+ void RemoveCallbackOnIO(
+ void* id, const scoped_refptr<base::MessageLoopProxy>& message_loop);
protected:
virtual ~VideoFrameDeliverer();
diff --git a/content/renderer/media/video_source_handler.cc b/content/renderer/media/video_source_handler.cc
index 9882207965..dabc9cc132 100644
--- a/content/renderer/media/video_source_handler.cc
+++ b/content/renderer/media/video_source_handler.cc
@@ -7,10 +7,13 @@
#include <string>
#include "base/logging.h"
+#include "base/memory/weak_ptr.h"
#include "base/synchronization/lock.h"
#include "content/public/renderer/media_stream_video_sink.h"
#include "content/renderer/media/media_stream.h"
#include "content/renderer/media/media_stream_registry_interface.h"
+#include "media/base/bind_to_current_loop.h"
+#include "media/video/capture/video_capture_types.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
#include "third_party/WebKit/public/platform/WebURL.h"
#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
@@ -23,26 +26,44 @@ namespace content {
// It can be attached to a FrameReaderInterface to output the received frame.
class PpFrameReceiver : public MediaStreamVideoSink {
public:
- PpFrameReceiver() : reader_(NULL) {}
+ PpFrameReceiver(blink::WebMediaStreamTrack track)
+ : track_(track),
+ reader_(NULL),
+ weak_factory_(this) {
+ }
+
virtual ~PpFrameReceiver() {}
- // Implements MediaStreamVideoSink.
- virtual void OnVideoFrame(
- const scoped_refptr<media::VideoFrame>& frame) OVERRIDE {
- base::AutoLock auto_lock(lock_);
- if (reader_) {
- reader_->GotFrame(frame);
+ void SetReader(FrameReaderInterface* reader) {
+ if (reader) {
+ DCHECK(!reader_);
+ MediaStreamVideoSink::AddToVideoTrack(
+ this,
+ media::BindToCurrentLoop(
+ base::Bind(
+ &PpFrameReceiver::OnVideoFrame,
+ weak_factory_.GetWeakPtr())),
+ track_);
+ } else {
+ DCHECK(reader_);
+ MediaStreamVideoSink::RemoveFromVideoTrack(this, track_);
+ weak_factory_.InvalidateWeakPtrs();
}
+ reader_ = reader;
}
- void SetReader(FrameReaderInterface* reader) {
- base::AutoLock auto_lock(lock_);
- reader_ = reader;
+ void OnVideoFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ if (reader_) {
+ reader_->GotFrame(frame);
+ }
}
private:
+ blink::WebMediaStreamTrack track_;
FrameReaderInterface* reader_;
- base::Lock lock_;
+ base::WeakPtrFactory<PpFrameReceiver> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PpFrameReceiver);
};
@@ -109,28 +130,26 @@ blink::WebMediaStreamTrack VideoSourceHandler::GetFirstVideoTrack(
return video_tracks[0];
}
-MediaStreamVideoSink* VideoSourceHandler::GetReceiver(
- FrameReaderInterface* reader) {
+void VideoSourceHandler::DeliverFrameForTesting(
+ FrameReaderInterface* reader,
+ const scoped_refptr<media::VideoFrame>& frame) {
SourceInfoMap::iterator it = reader_to_receiver_.find(reader);
if (it == reader_to_receiver_.end()) {
- return NULL;
+ return;
}
- return it->second->receiver_.get();
+ PpFrameReceiver* receiver = it->second->receiver_.get();
+ receiver->OnVideoFrame(frame, media::VideoCaptureFormat());
}
VideoSourceHandler::SourceInfo::SourceInfo(
const blink::WebMediaStreamTrack& blink_track,
FrameReaderInterface* reader)
- : receiver_(new PpFrameReceiver()),
- track_(blink_track) {
- MediaStreamVideoSink::AddToVideoTrack(receiver_.get(), track_);
+ : receiver_(new PpFrameReceiver(blink_track)) {
receiver_->SetReader(reader);
}
VideoSourceHandler::SourceInfo::~SourceInfo() {
- MediaStreamVideoSink::RemoveFromVideoTrack(receiver_.get(), track_);
receiver_->SetReader(NULL);
}
} // namespace content
-
diff --git a/content/renderer/media/video_source_handler.h b/content/renderer/media/video_source_handler.h
index 7337d804fb..ead167a0a5 100644
--- a/content/renderer/media/video_source_handler.h
+++ b/content/renderer/media/video_source_handler.h
@@ -9,6 +9,7 @@
#include <string>
#include "base/compiler_specific.h"
+#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/thread_checker.h"
@@ -50,22 +51,24 @@ class CONTENT_EXPORT VideoSourceHandler {
// Returns true on success and false on failure.
bool Close(FrameReaderInterface* reader);
- // Gets the MediaStreamVideoSink associated with |reader|.
- // Made it public only for testing purpose.
- MediaStreamVideoSink* GetReceiver(FrameReaderInterface* reader);
-
private:
+ FRIEND_TEST_ALL_PREFIXES(VideoSourceHandlerTest, OpenClose);
+
struct SourceInfo {
SourceInfo(const blink::WebMediaStreamTrack& blink_track,
FrameReaderInterface* reader);
~SourceInfo();
scoped_ptr<PpFrameReceiver> receiver_;
- blink::WebMediaStreamTrack track_;
};
typedef std::map<FrameReaderInterface*, SourceInfo*> SourceInfoMap;
+ // Deliver VideoFrame to the MediaStreamVideoSink associated with
+ // |reader|. For testing only.
+ void DeliverFrameForTesting(FrameReaderInterface* reader,
+ const scoped_refptr<media::VideoFrame>& frame);
+
blink::WebMediaStreamTrack GetFirstVideoTrack(const std::string& url);
MediaStreamRegistryInterface* registry_;
@@ -79,4 +82,3 @@ class CONTENT_EXPORT VideoSourceHandler {
} // namespace content
#endif // CONTENT_RENDERER_MEDIA_VIDEO_SOURCE_HANDLER_H_
-
diff --git a/content/renderer/media/video_source_handler_unittest.cc b/content/renderer/media/video_source_handler_unittest.cc
index 1d66ca0228..94dce46a19 100644
--- a/content/renderer/media/video_source_handler_unittest.cc
+++ b/content/renderer/media/video_source_handler_unittest.cc
@@ -4,8 +4,10 @@
#include <string>
+#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "content/child/child_process.h"
+#include "content/common/media/video_capture.h"
#include "content/public/renderer/media_stream_video_sink.h"
#include "content/renderer/media/media_stream.h"
#include "content/renderer/media/media_stream_registry_interface.h"
@@ -49,6 +51,7 @@ class VideoSourceHandlerTest : public ::testing::Test {
}
protected:
+ base::MessageLoop message_loop_;
scoped_ptr<ChildProcess> child_process_;
scoped_ptr<VideoSourceHandler> handler_;
MockMediaStreamRegistry registry_;
@@ -70,8 +73,7 @@ TEST_F(VideoSourceHandlerTest, OpenClose) {
captured_frame->set_timestamp(ts);
// The frame is delivered to VideoSourceHandler.
- MediaStreamVideoSink* receiver = handler_->GetReceiver(&reader);
- receiver->OnVideoFrame(captured_frame);
+ handler_->DeliverFrameForTesting(&reader, captured_frame);
// Compare |frame| to |captured_frame|.
const media::VideoFrame* frame = reader.last_frame();
@@ -84,7 +86,6 @@ TEST_F(VideoSourceHandlerTest, OpenClose) {
EXPECT_FALSE(handler_->Close(NULL));
EXPECT_TRUE(handler_->Close(&reader));
- EXPECT_TRUE(handler_->GetReceiver(&reader) == NULL);
}
TEST_F(VideoSourceHandlerTest, OpenWithoutClose) {
diff --git a/content/renderer/media/video_track_adapter.cc b/content/renderer/media/video_track_adapter.cc
new file mode 100644
index 0000000000..46223f8cfa
--- /dev/null
+++ b/content/renderer/media/video_track_adapter.cc
@@ -0,0 +1,335 @@
+// 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 "content/renderer/media/video_track_adapter.h"
+
+#include <algorithm>
+#include <limits>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/debug/trace_event.h"
+#include "base/location.h"
+#include "media/base/video_util.h"
+
+namespace content {
+
+namespace {
+
+// Empty method used for keeping a reference to the original media::VideoFrame
+// in VideoFrameResolutionAdapter::DeliverFrame if cropping is needed.
+// The reference to |frame| is kept in the closure that calls this method.
+void ReleaseOriginalFrame(
+ const scoped_refptr<media::VideoFrame>& frame) {
+}
+
+void ResetCallbackOnMainRenderThread(
+ scoped_ptr<VideoCaptureDeliverFrameCB> callback) {
+ // |callback| will be deleted when this exits.
+}
+
+} // anonymous namespace
+
+// VideoFrameResolutionAdapter is created on and lives on
+// on the IO-thread. It does the resolution adaptation and delivers frames to
+// all registered tracks on the IO-thread.
+// All method calls must be on the IO-thread.
+class VideoTrackAdapter::VideoFrameResolutionAdapter
+ : public base::RefCountedThreadSafe<VideoFrameResolutionAdapter> {
+ public:
+ VideoFrameResolutionAdapter(
+ scoped_refptr<base::SingleThreadTaskRunner> render_message_loop,
+ int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio);
+
+ // Add |callback| to receive video frames on the IO-thread.
+ // |callback| will however be released on the main render thread.
+ void AddCallback(const MediaStreamVideoTrack* track,
+ const VideoCaptureDeliverFrameCB& callback);
+
+ // Removes |callback| associated with |track| from receiving video frames if
+ // |track| has been added. It is ok to call RemoveCallback even if the |track|
+ // has not been added. The |callback| is released on the main render thread.
+ void RemoveCallback(const MediaStreamVideoTrack* track);
+
+ void DeliverFrame(const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
+
+ // Returns true if all arguments match with the output of this adapter.
+ bool ConstraintsMatch(int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio) const;
+
+ bool IsEmpty() const;
+
+ private:
+ virtual ~VideoFrameResolutionAdapter();
+ friend class base::RefCountedThreadSafe<VideoFrameResolutionAdapter>;
+
+ virtual void DoDeliverFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
+
+ // Bound to the IO-thread.
+ base::ThreadChecker io_thread_checker_;
+
+ // The task runner where we will release VideoCaptureDeliverFrameCB
+ // registered in AddCallback.
+ scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_;
+
+ gfx::Size max_frame_size_;
+ double min_aspect_ratio_;
+ double max_aspect_ratio_;
+
+ typedef std::pair<const void*, VideoCaptureDeliverFrameCB>
+ VideoIdCallbackPair;
+ std::vector<VideoIdCallbackPair> callbacks_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoFrameResolutionAdapter);
+};
+
+VideoTrackAdapter::
+VideoFrameResolutionAdapter::VideoFrameResolutionAdapter(
+ scoped_refptr<base::SingleThreadTaskRunner> render_message_loop,
+ int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio)
+ : renderer_task_runner_(render_message_loop),
+ max_frame_size_(max_width, max_height),
+ min_aspect_ratio_(min_aspect_ratio),
+ max_aspect_ratio_(max_aspect_ratio) {
+ DCHECK(renderer_task_runner_);
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ DCHECK_GE(max_aspect_ratio_, min_aspect_ratio_);
+ CHECK_NE(0, max_aspect_ratio_);
+ DVLOG(3) << "VideoFrameResolutionAdapter("
+ << "{ max_width =" << max_width << "}, "
+ << "{ max_height =" << max_height << "}, "
+ << "{ min_aspect_ratio =" << min_aspect_ratio << "}, "
+ << "{ max_aspect_ratio_ =" << max_aspect_ratio_ << "}) ";
+}
+
+VideoTrackAdapter::
+VideoFrameResolutionAdapter::~VideoFrameResolutionAdapter() {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ DCHECK(callbacks_.empty());
+}
+
+void VideoTrackAdapter::VideoFrameResolutionAdapter::DeliverFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ // TODO(perkj): Allow cropping / scaling of textures once
+ // http://crbug/362521 is fixed.
+ if (frame->format() == media::VideoFrame::NATIVE_TEXTURE) {
+ DoDeliverFrame(frame, format);
+ return;
+ }
+ scoped_refptr<media::VideoFrame> video_frame(frame);
+ double input_ratio =
+ static_cast<double>(frame->natural_size().width()) /
+ frame->natural_size().height();
+
+ // If |frame| has larger width or height than requested, or the aspect ratio
+ // does not match the requested, we want to create a wrapped version of this
+ // frame with a size that fulfills the constraints.
+ if (frame->natural_size().width() > max_frame_size_.width() ||
+ frame->natural_size().height() > max_frame_size_.height() ||
+ input_ratio > max_aspect_ratio_ ||
+ input_ratio < min_aspect_ratio_) {
+ int desired_width = std::min(max_frame_size_.width(),
+ frame->natural_size().width());
+ int desired_height = std::min(max_frame_size_.height(),
+ frame->natural_size().height());
+
+ double resulting_ratio =
+ static_cast<double>(desired_width) / desired_height;
+ double requested_ratio = resulting_ratio;
+
+ if (requested_ratio > max_aspect_ratio_)
+ requested_ratio = max_aspect_ratio_;
+ else if (requested_ratio < min_aspect_ratio_)
+ requested_ratio = min_aspect_ratio_;
+
+ if (resulting_ratio < requested_ratio) {
+ desired_height = static_cast<int>((desired_height * resulting_ratio) /
+ requested_ratio);
+ // Make sure we scale to an even height to avoid rounding errors
+ desired_height = (desired_height + 1) & ~1;
+ } else if (resulting_ratio > requested_ratio) {
+ desired_width = static_cast<int>((desired_width * requested_ratio) /
+ resulting_ratio);
+ // Make sure we scale to an even width to avoid rounding errors.
+ desired_width = (desired_width + 1) & ~1;
+ }
+
+ gfx::Size desired_size(desired_width, desired_height);
+
+ // Get the largest centered rectangle with the same aspect ratio of
+ // |desired_size| that fits entirely inside of |frame->visible_rect()|.
+ // This will be the rect we need to crop the original frame to.
+ // From this rect, the original frame can be scaled down to |desired_size|.
+ gfx::Rect region_in_frame =
+ media::ComputeLetterboxRegion(frame->visible_rect(), desired_size);
+
+ video_frame = media::VideoFrame::WrapVideoFrame(
+ frame,
+ region_in_frame,
+ desired_size,
+ base::Bind(&ReleaseOriginalFrame, frame));
+
+ DVLOG(3) << "desired size " << desired_size.ToString()
+ << " output natural size "
+ << video_frame->natural_size().ToString()
+ << " output visible rect "
+ << video_frame->visible_rect().ToString();
+ }
+ DoDeliverFrame(video_frame, format);
+}
+
+void VideoTrackAdapter::
+VideoFrameResolutionAdapter::DoDeliverFrame(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ for (std::vector<VideoIdCallbackPair>::const_iterator it = callbacks_.begin();
+ it != callbacks_.end(); ++it) {
+ it->second.Run(frame, format);
+ }
+}
+
+void VideoTrackAdapter::VideoFrameResolutionAdapter::AddCallback(
+ const MediaStreamVideoTrack* track,
+ const VideoCaptureDeliverFrameCB& callback) {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ callbacks_.push_back(std::make_pair(track, callback));
+}
+
+void VideoTrackAdapter::VideoFrameResolutionAdapter::RemoveCallback(
+ const MediaStreamVideoTrack* track) {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin();
+ for (; it != callbacks_.end(); ++it) {
+ if (it->first == track) {
+ // Make sure the VideoCaptureDeliverFrameCB is released on the main
+ // render thread since it was added on the main render thread in
+ // VideoTrackAdapter::AddTrack.
+ scoped_ptr<VideoCaptureDeliverFrameCB> callback(
+ new VideoCaptureDeliverFrameCB(it->second));
+ callbacks_.erase(it);
+ renderer_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&ResetCallbackOnMainRenderThread,
+ base::Passed(&callback)));
+
+ return;
+ }
+ }
+}
+
+bool VideoTrackAdapter::VideoFrameResolutionAdapter::ConstraintsMatch(
+ int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio) const {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ return max_frame_size_.width() == max_width &&
+ max_frame_size_.height() == max_height &&
+ min_aspect_ratio_ == min_aspect_ratio &&
+ max_aspect_ratio_ == max_aspect_ratio;
+}
+
+bool VideoTrackAdapter::VideoFrameResolutionAdapter::IsEmpty() const {
+ DCHECK(io_thread_checker_.CalledOnValidThread());
+ return callbacks_.empty();
+}
+
+VideoTrackAdapter::VideoTrackAdapter(
+ const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
+ : io_message_loop_(io_message_loop),
+ renderer_task_runner_(base::MessageLoopProxy::current()) {
+ DCHECK(io_message_loop_);
+}
+
+VideoTrackAdapter::~VideoTrackAdapter() {
+ DCHECK(adapters_.empty());
+}
+
+void VideoTrackAdapter::AddTrack(const MediaStreamVideoTrack* track,
+ VideoCaptureDeliverFrameCB frame_callback,
+ int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ io_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&VideoTrackAdapter::AddTrackOnIO,
+ this, track, frame_callback, max_width, max_height,
+ min_aspect_ratio, max_aspect_ratio));
+}
+
+void VideoTrackAdapter::AddTrackOnIO(
+ const MediaStreamVideoTrack* track,
+ VideoCaptureDeliverFrameCB frame_callback,
+ int max_width,
+ int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio) {
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ scoped_refptr<VideoFrameResolutionAdapter> adapter;
+ for (FrameAdapters::const_iterator it = adapters_.begin();
+ it != adapters_.end(); ++it) {
+ if ((*it)->ConstraintsMatch(max_width, max_height, min_aspect_ratio,
+ max_aspect_ratio)) {
+ adapter = it->get();
+ break;
+ }
+ }
+ if (!adapter) {
+ adapter = new VideoFrameResolutionAdapter(renderer_task_runner_,
+ max_width,
+ max_height,
+ min_aspect_ratio,
+ max_aspect_ratio);
+ adapters_.push_back(adapter);
+ }
+
+ adapter->AddCallback(track, frame_callback);
+}
+
+void VideoTrackAdapter::RemoveTrack(const MediaStreamVideoTrack* track) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ io_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&VideoTrackAdapter::RemoveTrackOnIO, this, track));
+}
+
+void VideoTrackAdapter::RemoveTrackOnIO(const MediaStreamVideoTrack* track) {
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ for (FrameAdapters::iterator it = adapters_.begin();
+ it != adapters_.end(); ++it) {
+ (*it)->RemoveCallback(track);
+ if ((*it)->IsEmpty()) {
+ adapters_.erase(it);
+ break;
+ }
+ }
+}
+
+void VideoTrackAdapter::DeliverFrameOnIO(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ DCHECK(io_message_loop_->BelongsToCurrentThread());
+ TRACE_EVENT0("video", "VideoTrackAdapter::DeliverFrameOnIO");
+ for (FrameAdapters::iterator it = adapters_.begin();
+ it != adapters_.end(); ++it) {
+ (*it)->DeliverFrame(frame, format);
+ }
+}
+
+} // namespace content
diff --git a/content/renderer/media/video_track_adapter.h b/content/renderer/media/video_track_adapter.h
new file mode 100644
index 0000000000..7ed65a118d
--- /dev/null
+++ b/content/renderer/media/video_track_adapter.h
@@ -0,0 +1,88 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_
+#define CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_
+
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "content/renderer/media/media_stream_video_track.h"
+#include "media/base/video_frame.h"
+
+namespace content {
+
+// VideoTrackAdapter is a helper class used by MediaStreamVideoSource used for
+// adapting the video resolution from a source implementation to the resolution
+// a track requires. Different tracks can have different resolution constraints.
+// The constraints can be set as max width and height as well as max and min
+// aspect ratio.
+// Video frames are delivered to a track using a VideoCaptureDeliverFrameCB on
+// the IO-thread.
+// Adaptations is done by wrapping the original media::VideoFrame in a new
+// media::VideoFrame with a new visible_rect and natural_size.
+class VideoTrackAdapter
+ : public base::RefCountedThreadSafe<VideoTrackAdapter> {
+ public:
+ explicit VideoTrackAdapter(
+ const scoped_refptr<base::MessageLoopProxy>& io_message_loop);
+
+ // Register |track| to receive video frames in |frame_callback| with
+ // a resolution within the boundaries of the arguments.
+ // Must be called on the main render thread. |frame_callback| is guaranteed to
+ // be released on the main render thread.
+ void AddTrack(const MediaStreamVideoTrack* track,
+ VideoCaptureDeliverFrameCB frame_callback,
+ int max_width, int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio);
+ void RemoveTrack(const MediaStreamVideoTrack* track);
+
+ // Delivers |frame| to all tracks that have registered a callback.
+ // Must be called on the IO-thread.
+ void DeliverFrameOnIO(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
+
+ const scoped_refptr<base::MessageLoopProxy>& io_message_loop() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return io_message_loop_;
+ }
+
+ private:
+ virtual ~VideoTrackAdapter();
+ friend class base::RefCountedThreadSafe<VideoTrackAdapter>;
+
+ void AddTrackOnIO(
+ const MediaStreamVideoTrack* track,
+ VideoCaptureDeliverFrameCB frame_callback,
+ int max_width, int max_height,
+ double min_aspect_ratio,
+ double max_aspect_ratio);
+ void RemoveTrackOnIO(const MediaStreamVideoTrack* track);
+
+ // |thread_checker_| is bound to the main render thread.
+ base::ThreadChecker thread_checker_;
+
+ scoped_refptr<base::MessageLoopProxy> io_message_loop_;
+
+ // |renderer_task_runner_| is used to ensure that
+ // VideoCaptureDeliverFrameCB is released on the main render thread.
+ scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_;
+
+ // VideoFrameResolutionAdapter is an inner class that is created on the main
+ // render thread but operates on the IO-thread. It does the resolution
+ // adaptation and delivers frames to all registered tracks on the IO-thread.
+ class VideoFrameResolutionAdapter;
+ typedef std::vector<scoped_refptr<VideoFrameResolutionAdapter> >
+ FrameAdapters;
+ FrameAdapters adapters_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoTrackAdapter);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_MEDIA_VIDEO_TRACK_ADAPTER_H_
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
index fa64ee7c23..99c44a1a9d 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
@@ -24,17 +24,21 @@
#include "content/renderer/media/crypto/pepper_cdm_wrapper_impl.h"
#endif
-namespace blink {
-class WebFrame;
-}
-
namespace content {
WebContentDecryptionModuleImpl* WebContentDecryptionModuleImpl::Create(
+#if defined(ENABLE_PEPPER_CDMS)
blink::WebLocalFrame* frame,
+#elif defined(OS_ANDROID)
+ RendererCdmManager* manager,
+#endif
const blink::WebSecurityOrigin& security_origin,
const base::string16& key_system) {
+#if defined(ENABLE_PEPPER_CDMS)
DCHECK(frame);
+#elif defined(OS_ANDROID)
+ DCHECK(manager);
+#endif
DCHECK(!security_origin.isNull());
DCHECK(!key_system.empty());
@@ -61,6 +65,8 @@ WebContentDecryptionModuleImpl* WebContentDecryptionModuleImpl::Create(
if (!adapter->Initialize(
#if defined(ENABLE_PEPPER_CDMS)
base::Bind(&PepperCdmWrapperImpl::Create, frame),
+#elif defined(OS_ANDROID)
+ manager,
#endif
key_system_ascii,
security_origin_as_gurl)) {
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.h b/content/renderer/media/webcontentdecryptionmodule_impl.h
index 63d6de846d..152f962c18 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.h
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.h
@@ -13,7 +13,9 @@
#include "third_party/WebKit/public/platform/WebContentDecryptionModule.h"
namespace blink {
+#if defined(ENABLE_PEPPER_CDMS)
class WebLocalFrame;
+#endif
class WebSecurityOrigin;
}
@@ -25,13 +27,20 @@ class MediaKeys;
namespace content {
class CdmSessionAdapter;
+#if defined(OS_ANDROID)
+class RendererCdmManager;
+#endif
class WebContentDecryptionModuleSessionImpl;
class WebContentDecryptionModuleImpl
: public blink::WebContentDecryptionModule {
public:
static WebContentDecryptionModuleImpl* Create(
+#if defined(ENABLE_PEPPER_CDMS)
blink::WebLocalFrame* frame,
+#elif defined(OS_ANDROID)
+ RendererCdmManager* manager,
+#endif
const blink::WebSecurityOrigin& security_origin,
const base::string16& key_system);
diff --git a/content/renderer/media/webcontentdecryptionmodulesession_impl.cc b/content/renderer/media/webcontentdecryptionmodulesession_impl.cc
index 76935ae169..343397f32d 100644
--- a/content/renderer/media/webcontentdecryptionmodulesession_impl.cc
+++ b/content/renderer/media/webcontentdecryptionmodulesession_impl.cc
@@ -71,10 +71,9 @@ void WebContentDecryptionModuleSessionImpl::OnSessionCreated(
void WebContentDecryptionModuleSessionImpl::OnSessionMessage(
const std::vector<uint8>& message,
- const std::string& destination_url) {
- client_->message(message.empty() ? NULL : &message[0],
- message.size(),
- GURL(destination_url));
+ const GURL& destination_url) {
+ client_->message(
+ message.empty() ? NULL : &message[0], message.size(), destination_url);
}
void WebContentDecryptionModuleSessionImpl::OnSessionReady() {
diff --git a/content/renderer/media/webcontentdecryptionmodulesession_impl.h b/content/renderer/media/webcontentdecryptionmodulesession_impl.h
index add26cab23..f61a71363c 100644
--- a/content/renderer/media/webcontentdecryptionmodulesession_impl.h
+++ b/content/renderer/media/webcontentdecryptionmodulesession_impl.h
@@ -42,7 +42,7 @@ class WebContentDecryptionModuleSessionImpl
// Callbacks.
void OnSessionCreated(const std::string& web_session_id);
void OnSessionMessage(const std::vector<uint8>& message,
- const std::string& destination_url);
+ const GURL& destination_url);
void OnSessionReady();
void OnSessionClosed();
void OnSessionError(media::MediaKeys::KeyError error_code,
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index 1f1149824e..6aa009a18f 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -511,16 +511,13 @@ WebMediaPlayer::ReadyState WebMediaPlayerImpl::readyState() const {
return ready_state_;
}
-const blink::WebTimeRanges& WebMediaPlayerImpl::buffered() {
+blink::WebTimeRanges WebMediaPlayerImpl::buffered() const {
DCHECK(main_loop_->BelongsToCurrentThread());
media::Ranges<base::TimeDelta> buffered_time_ranges =
pipeline_.GetBufferedTimeRanges();
buffered_data_source_host_.AddBufferedTimeRanges(
&buffered_time_ranges, pipeline_.GetMediaDuration());
- blink::WebTimeRanges buffered_web_time_ranges(
- ConvertToWebTimeRanges(buffered_time_ranges));
- buffered_web_time_ranges_.swap(buffered_web_time_ranges);
- return buffered_web_time_ranges_;
+ return ConvertToWebTimeRanges(buffered_time_ranges);
}
double WebMediaPlayerImpl::maxTimeSeekable() const {
@@ -537,7 +534,7 @@ double WebMediaPlayerImpl::maxTimeSeekable() const {
return duration();
}
-bool WebMediaPlayerImpl::didLoadingProgress() const {
+bool WebMediaPlayerImpl::didLoadingProgress() {
DCHECK(main_loop_->BelongsToCurrentThread());
bool pipeline_progress = pipeline_.DidLoadingProgress();
bool data_progress = buffered_data_source_host_.DidLoadingProgress();
diff --git a/content/renderer/media/webmediaplayer_impl.h b/content/renderer/media/webmediaplayer_impl.h
index 4bf0f6ed35..c27c0393c4 100644
--- a/content/renderer/media/webmediaplayer_impl.h
+++ b/content/renderer/media/webmediaplayer_impl.h
@@ -87,7 +87,7 @@ class WebMediaPlayerImpl
virtual void setRate(double rate);
virtual void setVolume(double volume);
virtual void setPreload(blink::WebMediaPlayer::Preload preload);
- virtual const blink::WebTimeRanges& buffered();
+ virtual blink::WebTimeRanges buffered() const;
virtual double maxTimeSeekable() const;
// Methods for painting.
@@ -115,9 +115,7 @@ class WebMediaPlayerImpl
virtual blink::WebMediaPlayer::NetworkState networkState() const;
virtual blink::WebMediaPlayer::ReadyState readyState() const;
- // TODO(sandersd): Change this to non-const in blink::WebMediaPlayer.
- // http://crbug.com/360251
- virtual bool didLoadingProgress() const;
+ virtual bool didLoadingProgress();
virtual bool hasSingleSecurityOrigin() const;
virtual bool didPassCORSAccessCheck() const;
@@ -328,8 +326,6 @@ class WebMediaPlayerImpl
media::ChunkDemuxer* chunk_demuxer_;
BufferedDataSourceHostImpl buffered_data_source_host_;
- // TODO(sandersd): Remove this cache. http://crbug.com/360254
- blink::WebTimeRanges buffered_web_time_ranges_;
// Temporary for EME v0.1. In the future the init data type should be passed
// through GenerateKeyRequest() directly from WebKit.
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
index f2a3e70e73..7227eee68e 100644
--- a/content/renderer/media/webmediaplayer_ms.cc
+++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -11,8 +11,9 @@
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
#include "cc/layers/video_layer.h"
+#include "content/public/renderer/render_view.h"
#include "content/renderer/media/media_stream_audio_renderer.h"
-#include "content/renderer/media/media_stream_client.h"
+#include "content/renderer/media/media_stream_renderer_factory.h"
#include "content/renderer/media/video_frame_provider.h"
#include "content/renderer/media/webmediaplayer_delegate.h"
#include "content/renderer/media/webmediaplayer_util.h"
@@ -80,15 +81,14 @@ WebMediaPlayerMS::WebMediaPlayerMS(
blink::WebFrame* frame,
blink::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
- MediaStreamClient* media_stream_client,
- media::MediaLog* media_log)
+ media::MediaLog* media_log,
+ scoped_ptr<MediaStreamRendererFactory> factory)
: frame_(frame),
network_state_(WebMediaPlayer::NetworkStateEmpty),
ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
buffered_(static_cast<size_t>(1)),
client_(client),
delegate_(delegate),
- media_stream_client_(media_stream_client),
paused_(true),
current_frame_used_(false),
pending_repaint_(false),
@@ -97,9 +97,9 @@ WebMediaPlayerMS::WebMediaPlayerMS(
sequence_started_(false),
total_frame_count_(0),
dropped_frame_count_(0),
- media_log_(media_log) {
+ media_log_(media_log),
+ renderer_factory_(factory.Pass()) {
DVLOG(1) << "WebMediaPlayerMS::ctor";
- DCHECK(media_stream_client);
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
}
@@ -141,15 +141,16 @@ void WebMediaPlayerMS::load(LoadType load_type,
SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
- // Check if this url is media stream.
- video_frame_provider_ = media_stream_client_->GetVideoFrameProvider(
+ video_frame_provider_ = renderer_factory_->GetVideoFrameProvider(
url,
base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()),
base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()));
- audio_renderer_ = media_stream_client_->GetAudioRenderer(
+ RenderFrame* frame = RenderFrame::FromWebFrame(frame_);
+ audio_renderer_ = renderer_factory_->GetAudioRenderer(
url,
- RenderFrame::FromWebFrame(frame_)->GetRoutingID());
+ frame->GetRenderView()->GetRoutingID(),
+ frame->GetRoutingID());
if (video_frame_provider_.get() || audio_renderer_.get()) {
if (audio_renderer_.get())
@@ -301,7 +302,7 @@ WebMediaPlayer::ReadyState WebMediaPlayerMS::readyState() const {
return ready_state_;
}
-const blink::WebTimeRanges& WebMediaPlayerMS::buffered() {
+blink::WebTimeRanges WebMediaPlayerMS::buffered() const {
DCHECK(thread_checker_.CalledOnValidThread());
return buffered_;
}
@@ -311,7 +312,7 @@ double WebMediaPlayerMS::maxTimeSeekable() const {
return 0.0;
}
-bool WebMediaPlayerMS::didLoadingProgress() const {
+bool WebMediaPlayerMS::didLoadingProgress() {
DCHECK(thread_checker_.CalledOnValidThread());
return true;
}
diff --git a/content/renderer/media/webmediaplayer_ms.h b/content/renderer/media/webmediaplayer_ms.h
index 9ba5aa73b3..0405b699a3 100644
--- a/content/renderer/media/webmediaplayer_ms.h
+++ b/content/renderer/media/webmediaplayer_ms.h
@@ -31,7 +31,7 @@ class WebLayerImpl;
namespace content {
class MediaStreamAudioRenderer;
-class MediaStreamClient;
+class MediaStreamRendererFactory;
class VideoFrameProvider;
class WebMediaPlayerDelegate;
@@ -59,8 +59,8 @@ class WebMediaPlayerMS
WebMediaPlayerMS(blink::WebFrame* frame,
blink::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
- MediaStreamClient* media_stream_client,
- media::MediaLog* media_log);
+ media::MediaLog* media_log,
+ scoped_ptr<MediaStreamRendererFactory> factory);
virtual ~WebMediaPlayerMS();
virtual void load(LoadType load_type,
@@ -75,7 +75,7 @@ class WebMediaPlayerMS
virtual void setRate(double rate);
virtual void setVolume(double volume);
virtual void setPreload(blink::WebMediaPlayer::Preload preload);
- virtual const blink::WebTimeRanges& buffered();
+ virtual blink::WebTimeRanges buffered() const;
virtual double maxTimeSeekable() const;
// Methods for painting.
@@ -100,7 +100,7 @@ class WebMediaPlayerMS
virtual blink::WebMediaPlayer::NetworkState networkState() const;
virtual blink::WebMediaPlayer::ReadyState readyState() const;
- virtual bool didLoadingProgress() const;
+ virtual bool didLoadingProgress();
virtual bool hasSingleSecurityOrigin() const;
virtual bool didPassCORSAccessCheck() const;
@@ -150,8 +150,6 @@ class WebMediaPlayerMS
base::WeakPtr<WebMediaPlayerDelegate> delegate_;
- MediaStreamClient* media_stream_client_;
-
// Specify content:: to disambiguate from cc::.
scoped_refptr<content::VideoFrameProvider> video_frame_provider_;
bool paused_;
@@ -188,6 +186,8 @@ class WebMediaPlayerMS
scoped_refptr<media::MediaLog> media_log_;
+ scoped_ptr<MediaStreamRendererFactory> renderer_factory_;
+
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerMS);
};
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.h b/content/renderer/media/webrtc/media_stream_remote_video_source.h
index e7d65dd25b..76041ee8d7 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.h
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_REMOTE_VIDEO_SOURCE_H_
#define CONTENT_RENDERER_MEDIA_WEBRTC_MEDIA_STREAM_REMOTE_VIDEO_SOURCE_H_
+#include "base/threading/thread_checker.h"
#include "content/common/content_export.h"
#include "content/renderer/media/media_stream_video_source.h"
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc b/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
index 16c3687a92..c6b50ec25e 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
@@ -7,9 +7,9 @@
#include "base/strings/utf_string_conversions.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_media_stream_video_sink.h"
#include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "media/base/video_frame.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.h"
@@ -34,7 +34,7 @@ class MediaStreamRemoteVideoSourceTest
public:
MediaStreamRemoteVideoSourceTest()
: child_process_(new ChildProcess()),
- mock_factory_(new MockMediaStreamDependencyFactory()),
+ mock_factory_(new MockPeerConnectionDependencyFactory()),
webrtc_video_track_(
mock_factory_->CreateLocalVideoTrack(
"test",
@@ -92,9 +92,9 @@ class MediaStreamRemoteVideoSourceTest
++number_of_failed_constraints_applied_;
}
- scoped_ptr<ChildProcess> child_process_;
base::MessageLoopForUI message_loop_;
- scoped_ptr<MockMediaStreamDependencyFactory> mock_factory_;
+ scoped_ptr<ChildProcess> child_process_;
+ scoped_ptr<MockPeerConnectionDependencyFactory> mock_factory_;
scoped_refptr<webrtc::VideoTrackInterface> webrtc_video_track_;
// |remote_source_| is owned by |webkit_source_|.
MediaStreamRemoteVideoSourceUnderTest* remote_source_;
@@ -108,10 +108,7 @@ TEST_F(MediaStreamRemoteVideoSourceTest, StartTrack) {
EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
MockMediaStreamVideoSink sink;
- track->AddSink(&sink);
-
-
-
+ track->AddSink(&sink, sink.GetDeliverFrameCB());
base::RunLoop run_loop;
base::Closure quit_closure = run_loop.QuitClosure();
EXPECT_CALL(sink, OnVideoFrame()).WillOnce(
@@ -129,8 +126,7 @@ TEST_F(MediaStreamRemoteVideoSourceTest, RemoteTrackStop) {
scoped_ptr<MediaStreamVideoTrack> track(CreateTrack());
MockMediaStreamVideoSink sink;
- track->AddSink(&sink);
-
+ track->AddSink(&sink, sink.GetDeliverFrameCB());
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
webkit_source().readyState());
diff --git a/content/renderer/media/webrtc/media_stream_track_metrics_unittest.cc b/content/renderer/media/webrtc/media_stream_track_metrics_unittest.cc
index b976c71379..343ab3033e 100644
--- a/content/renderer/media/webrtc/media_stream_track_metrics_unittest.cc
+++ b/content/renderer/media/webrtc/media_stream_track_metrics_unittest.cc
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/webrtc/media_stream_track_metrics.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.cc b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
index 9816113d14..7048d935d4 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.cc
+++ b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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 "content/renderer/media/mock_media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
@@ -430,15 +430,15 @@ class MockIceCandidate : public IceCandidateInterface {
std::string sdp_;
};
-MockMediaStreamDependencyFactory::MockMediaStreamDependencyFactory()
- : MediaStreamDependencyFactory(NULL),
+MockPeerConnectionDependencyFactory::MockPeerConnectionDependencyFactory()
+ : PeerConnectionDependencyFactory(NULL),
fail_to_create_next_audio_capturer_(false) {
}
-MockMediaStreamDependencyFactory::~MockMediaStreamDependencyFactory() {}
+MockPeerConnectionDependencyFactory::~MockPeerConnectionDependencyFactory() {}
scoped_refptr<webrtc::PeerConnectionInterface>
-MockMediaStreamDependencyFactory::CreatePeerConnection(
+MockPeerConnectionDependencyFactory::CreatePeerConnection(
const webrtc::PeerConnectionInterface::IceServers& ice_servers,
const webrtc::MediaConstraintsInterface* constraints,
blink::WebFrame* frame,
@@ -447,7 +447,7 @@ MockMediaStreamDependencyFactory::CreatePeerConnection(
}
scoped_refptr<webrtc::AudioSourceInterface>
-MockMediaStreamDependencyFactory::CreateLocalAudioSource(
+MockPeerConnectionDependencyFactory::CreateLocalAudioSource(
const webrtc::MediaConstraintsInterface* constraints) {
last_audio_source_ =
new talk_base::RefCountedObject<MockAudioSource>(constraints);
@@ -455,13 +455,13 @@ MockMediaStreamDependencyFactory::CreateLocalAudioSource(
}
WebRtcVideoCapturerAdapter*
-MockMediaStreamDependencyFactory::CreateVideoCapturer(
+MockPeerConnectionDependencyFactory::CreateVideoCapturer(
bool is_screen_capture) {
return new MockRtcVideoCapturer(is_screen_capture);
}
scoped_refptr<webrtc::VideoSourceInterface>
-MockMediaStreamDependencyFactory::CreateVideoSource(
+MockPeerConnectionDependencyFactory::CreateVideoSource(
cricket::VideoCapturer* capturer,
const blink::WebMediaConstraints& constraints) {
last_video_source_ = new talk_base::RefCountedObject<MockVideoSource>();
@@ -470,19 +470,19 @@ MockMediaStreamDependencyFactory::CreateVideoSource(
}
scoped_refptr<WebAudioCapturerSource>
-MockMediaStreamDependencyFactory::CreateWebAudioSource(
+MockPeerConnectionDependencyFactory::CreateWebAudioSource(
blink::WebMediaStreamSource* source) {
return NULL;
}
scoped_refptr<webrtc::MediaStreamInterface>
-MockMediaStreamDependencyFactory::CreateLocalMediaStream(
+MockPeerConnectionDependencyFactory::CreateLocalMediaStream(
const std::string& label) {
return new talk_base::RefCountedObject<MockMediaStream>(label);
}
scoped_refptr<webrtc::VideoTrackInterface>
-MockMediaStreamDependencyFactory::CreateLocalVideoTrack(
+MockPeerConnectionDependencyFactory::CreateLocalVideoTrack(
const std::string& id,
webrtc::VideoSourceInterface* source) {
scoped_refptr<webrtc::VideoTrackInterface> track(
@@ -492,7 +492,7 @@ MockMediaStreamDependencyFactory::CreateLocalVideoTrack(
}
scoped_refptr<webrtc::VideoTrackInterface>
-MockMediaStreamDependencyFactory::CreateLocalVideoTrack(
+MockPeerConnectionDependencyFactory::CreateLocalVideoTrack(
const std::string& id,
cricket::VideoCapturer* capturer) {
scoped_refptr<MockVideoSource> source =
@@ -504,7 +504,7 @@ MockMediaStreamDependencyFactory::CreateLocalVideoTrack(
}
SessionDescriptionInterface*
-MockMediaStreamDependencyFactory::CreateSessionDescription(
+MockPeerConnectionDependencyFactory::CreateSessionDescription(
const std::string& type,
const std::string& sdp,
webrtc::SdpParseError* error) {
@@ -512,7 +512,7 @@ MockMediaStreamDependencyFactory::CreateSessionDescription(
}
webrtc::IceCandidateInterface*
-MockMediaStreamDependencyFactory::CreateIceCandidate(
+MockPeerConnectionDependencyFactory::CreateIceCandidate(
const std::string& sdp_mid,
int sdp_mline_index,
const std::string& sdp) {
@@ -520,7 +520,7 @@ MockMediaStreamDependencyFactory::CreateIceCandidate(
}
scoped_refptr<WebRtcAudioCapturer>
-MockMediaStreamDependencyFactory::CreateAudioCapturer(
+MockPeerConnectionDependencyFactory::CreateAudioCapturer(
int render_view_id, const StreamDeviceInfo& device_info,
const blink::WebMediaConstraints& constraints,
MediaStreamAudioSource* audio_source) {
@@ -533,7 +533,7 @@ MockMediaStreamDependencyFactory::CreateAudioCapturer(
constraints, NULL, audio_source);
}
-void MockMediaStreamDependencyFactory::StartLocalAudioTrack(
+void MockPeerConnectionDependencyFactory::StartLocalAudioTrack(
WebRtcLocalAudioTrack* audio_track) {
audio_track->Start();
}
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.h b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h
index 4bbad2ae18..12f4d24d86 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.h
+++ b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h
@@ -1,15 +1,16 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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.
-#ifndef CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
-#define CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
+#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#define CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#include <set>
#include <string>
#include <vector>
#include "base/compiler_specific.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
#include "third_party/libjingle/source/talk/media/base/videorenderer.h"
@@ -166,11 +167,12 @@ class MockMediaStream : public webrtc::MediaStreamInterface {
};
// A mock factory for creating different objects for
-// RTC MediaStreams and PeerConnections.
-class MockMediaStreamDependencyFactory : public MediaStreamDependencyFactory {
+// RTC PeerConnections.
+class MockPeerConnectionDependencyFactory
+ : public PeerConnectionDependencyFactory {
public:
- MockMediaStreamDependencyFactory();
- virtual ~MockMediaStreamDependencyFactory();
+ MockPeerConnectionDependencyFactory();
+ virtual ~MockPeerConnectionDependencyFactory();
virtual scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
const webrtc::PeerConnectionInterface::IceServers& ice_servers,
@@ -224,9 +226,9 @@ class MockMediaStreamDependencyFactory : public MediaStreamDependencyFactory {
scoped_refptr <MockAudioSource> last_audio_source_;
scoped_refptr <MockVideoSource> last_video_source_;
- DISALLOW_COPY_AND_ASSIGN(MockMediaStreamDependencyFactory);
+ DISALLOW_COPY_AND_ASSIGN(MockPeerConnectionDependencyFactory);
};
} // namespace content
-#endif // CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
+#endif // CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
index 0b13677591..a50e17db3a 100644
--- a/content/renderer/media/media_stream_dependency_factory.cc
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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 "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include <vector>
@@ -12,6 +12,7 @@
#include "content/common/media/media_stream_messages.h"
#include "content/public/common/content_switches.h"
#include "content/renderer/media/media_stream.h"
+#include "content/renderer/media/media_stream_audio_processor.h"
#include "content/renderer/media/media_stream_audio_processor_options.h"
#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_video_source.h"
@@ -153,14 +154,14 @@ class P2PPortAllocatorFactory : public webrtc::PortAllocatorFactoryInterface {
private:
scoped_refptr<P2PSocketDispatcher> socket_dispatcher_;
// |network_manager_| and |socket_factory_| are a weak references, owned by
- // MediaStreamDependencyFactory.
+ // PeerConnectionDependencyFactory.
talk_base::NetworkManager* network_manager_;
talk_base::PacketSocketFactory* socket_factory_;
// Raw ptr to the WebFrame that created the P2PPortAllocatorFactory.
blink::WebFrame* web_frame_;
};
-MediaStreamDependencyFactory::MediaStreamDependencyFactory(
+PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
P2PSocketDispatcher* p2p_socket_dispatcher)
: network_manager_(NULL),
p2p_socket_dispatcher_(p2p_socket_dispatcher),
@@ -169,12 +170,12 @@ MediaStreamDependencyFactory::MediaStreamDependencyFactory(
chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
}
-MediaStreamDependencyFactory::~MediaStreamDependencyFactory() {
+PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() {
CleanupPeerConnectionFactory();
}
blink::WebRTCPeerConnectionHandler*
-MediaStreamDependencyFactory::CreateRTCPeerConnectionHandler(
+PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler(
blink::WebRTCPeerConnectionHandlerClient* client) {
// Save histogram data so we can see how much PeerConnetion is used.
// The histogram counts the number of calls to the JS API
@@ -184,7 +185,7 @@ MediaStreamDependencyFactory::CreateRTCPeerConnectionHandler(
return new RTCPeerConnectionHandler(client, this);
}
-bool MediaStreamDependencyFactory::InitializeMediaStreamAudioSource(
+bool PeerConnectionDependencyFactory::InitializeMediaStreamAudioSource(
int render_view_id,
const blink::WebMediaConstraints& audio_constraints,
MediaStreamAudioSource* source_data) {
@@ -193,7 +194,7 @@ bool MediaStreamDependencyFactory::InitializeMediaStreamAudioSource(
// Do additional source initialization if the audio source is a valid
// microphone or tab audio.
RTCMediaConstraints native_audio_constraints(audio_constraints);
- ApplyFixedAudioConstraints(&native_audio_constraints);
+ MediaAudioConstraints::ApplyFixedAudioConstraints(&native_audio_constraints);
StreamDeviceInfo device_info = source_data->device_info();
RTCMediaConstraints constraints = native_audio_constraints;
@@ -230,7 +231,8 @@ bool MediaStreamDependencyFactory::InitializeMediaStreamAudioSource(
return true;
}
-WebRtcVideoCapturerAdapter* MediaStreamDependencyFactory::CreateVideoCapturer(
+WebRtcVideoCapturerAdapter*
+PeerConnectionDependencyFactory::CreateVideoCapturer(
bool is_screeencast) {
// We need to make sure the libjingle thread wrappers have been created
// before we can use an instance of a WebRtcVideoCapturerAdapter. This is
@@ -242,7 +244,7 @@ WebRtcVideoCapturerAdapter* MediaStreamDependencyFactory::CreateVideoCapturer(
}
scoped_refptr<webrtc::VideoSourceInterface>
-MediaStreamDependencyFactory::CreateVideoSource(
+PeerConnectionDependencyFactory::CreateVideoSource(
cricket::VideoCapturer* capturer,
const blink::WebMediaConstraints& constraints) {
RTCMediaConstraints webrtc_constraints(constraints);
@@ -252,14 +254,14 @@ MediaStreamDependencyFactory::CreateVideoSource(
}
const scoped_refptr<webrtc::PeerConnectionFactoryInterface>&
-MediaStreamDependencyFactory::GetPcFactory() {
+PeerConnectionDependencyFactory::GetPcFactory() {
if (!pc_factory_)
CreatePeerConnectionFactory();
CHECK(pc_factory_);
return pc_factory_;
}
-void MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
+void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() {
DCHECK(!pc_factory_.get());
DCHECK(!signaling_thread_);
DCHECK(!worker_thread_);
@@ -267,7 +269,7 @@ void MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
DCHECK(!socket_factory_);
DCHECK(!chrome_worker_thread_.IsRunning());
- DVLOG(1) << "MediaStreamDependencyFactory::CreatePeerConnectionFactory()";
+ DVLOG(1) << "PeerConnectionDependencyFactory::CreatePeerConnectionFactory()";
jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true);
@@ -278,7 +280,7 @@ void MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
base::WaitableEvent start_worker_event(true, false);
chrome_worker_thread_.message_loop()->PostTask(FROM_HERE, base::Bind(
- &MediaStreamDependencyFactory::InitializeWorkerThread,
+ &PeerConnectionDependencyFactory::InitializeWorkerThread,
base::Unretained(this),
&worker_thread_,
&start_worker_event));
@@ -287,7 +289,7 @@ void MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
base::WaitableEvent create_network_manager_event(true, false);
chrome_worker_thread_.message_loop()->PostTask(FROM_HERE, base::Bind(
- &MediaStreamDependencyFactory::CreateIpcNetworkManagerOnWorkerThread,
+ &PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread,
base::Unretained(this),
&create_network_manager_event));
create_network_manager_event.Wait();
@@ -350,12 +352,12 @@ void MediaStreamDependencyFactory::CreatePeerConnectionFactory() {
StartAecDump(aec_dump_file_.Pass());
}
-bool MediaStreamDependencyFactory::PeerConnectionFactoryCreated() {
+bool PeerConnectionDependencyFactory::PeerConnectionFactoryCreated() {
return pc_factory_.get() != NULL;
}
scoped_refptr<webrtc::PeerConnectionInterface>
-MediaStreamDependencyFactory::CreatePeerConnection(
+PeerConnectionDependencyFactory::CreatePeerConnection(
const webrtc::PeerConnectionInterface::IceServers& ice_servers,
const webrtc::MediaConstraintsInterface* constraints,
blink::WebFrame* web_frame,
@@ -384,20 +386,20 @@ MediaStreamDependencyFactory::CreatePeerConnection(
}
scoped_refptr<webrtc::MediaStreamInterface>
-MediaStreamDependencyFactory::CreateLocalMediaStream(
+PeerConnectionDependencyFactory::CreateLocalMediaStream(
const std::string& label) {
return GetPcFactory()->CreateLocalMediaStream(label).get();
}
scoped_refptr<webrtc::AudioSourceInterface>
-MediaStreamDependencyFactory::CreateLocalAudioSource(
+PeerConnectionDependencyFactory::CreateLocalAudioSource(
const webrtc::MediaConstraintsInterface* constraints) {
scoped_refptr<webrtc::AudioSourceInterface> source =
GetPcFactory()->CreateAudioSource(constraints).get();
return source;
}
-void MediaStreamDependencyFactory::CreateLocalAudioTrack(
+void PeerConnectionDependencyFactory::CreateLocalAudioTrack(
const blink::WebMediaStreamTrack& track) {
blink::WebMediaStreamSource source = track.source();
DCHECK_EQ(source.type(), blink::WebMediaStreamSource::TypeAudio);
@@ -442,7 +444,7 @@ void MediaStreamDependencyFactory::CreateLocalAudioTrack(
writable_track.setExtraData(audio_track.release());
}
-void MediaStreamDependencyFactory::StartLocalAudioTrack(
+void PeerConnectionDependencyFactory::StartLocalAudioTrack(
WebRtcLocalAudioTrack* audio_track) {
// Add the WebRtcAudioDevice as the sink to the local audio track.
// TODO(xians): Implement a PeerConnection sink adapter and remove this
@@ -455,9 +457,9 @@ void MediaStreamDependencyFactory::StartLocalAudioTrack(
}
scoped_refptr<WebAudioCapturerSource>
-MediaStreamDependencyFactory::CreateWebAudioSource(
+PeerConnectionDependencyFactory::CreateWebAudioSource(
blink::WebMediaStreamSource* source) {
- DVLOG(1) << "MediaStreamDependencyFactory::CreateWebAudioSource()";
+ DVLOG(1) << "PeerConnectionDependencyFactory::CreateWebAudioSource()";
scoped_refptr<WebAudioCapturerSource>
webaudio_capturer_source(new WebAudioCapturerSource());
@@ -484,14 +486,14 @@ MediaStreamDependencyFactory::CreateWebAudioSource(
}
scoped_refptr<webrtc::VideoTrackInterface>
-MediaStreamDependencyFactory::CreateLocalVideoTrack(
+PeerConnectionDependencyFactory::CreateLocalVideoTrack(
const std::string& id,
webrtc::VideoSourceInterface* source) {
return GetPcFactory()->CreateVideoTrack(id, source).get();
}
scoped_refptr<webrtc::VideoTrackInterface>
-MediaStreamDependencyFactory::CreateLocalVideoTrack(
+PeerConnectionDependencyFactory::CreateLocalVideoTrack(
const std::string& id, cricket::VideoCapturer* capturer) {
if (!capturer) {
LOG(ERROR) << "CreateLocalVideoTrack called with null VideoCapturer.";
@@ -507,14 +509,15 @@ MediaStreamDependencyFactory::CreateLocalVideoTrack(
}
webrtc::SessionDescriptionInterface*
-MediaStreamDependencyFactory::CreateSessionDescription(
+PeerConnectionDependencyFactory::CreateSessionDescription(
const std::string& type,
const std::string& sdp,
webrtc::SdpParseError* error) {
return webrtc::CreateSessionDescription(type, sdp, error);
}
-webrtc::IceCandidateInterface* MediaStreamDependencyFactory::CreateIceCandidate(
+webrtc::IceCandidateInterface*
+PeerConnectionDependencyFactory::CreateIceCandidate(
const std::string& sdp_mid,
int sdp_mline_index,
const std::string& sdp) {
@@ -522,11 +525,11 @@ webrtc::IceCandidateInterface* MediaStreamDependencyFactory::CreateIceCandidate(
}
WebRtcAudioDeviceImpl*
-MediaStreamDependencyFactory::GetWebRtcAudioDevice() {
+PeerConnectionDependencyFactory::GetWebRtcAudioDevice() {
return audio_device_.get();
}
-void MediaStreamDependencyFactory::InitializeWorkerThread(
+void PeerConnectionDependencyFactory::InitializeWorkerThread(
talk_base::Thread** thread,
base::WaitableEvent* event) {
jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
@@ -535,27 +538,27 @@ void MediaStreamDependencyFactory::InitializeWorkerThread(
event->Signal();
}
-void MediaStreamDependencyFactory::CreateIpcNetworkManagerOnWorkerThread(
+void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnWorkerThread(
base::WaitableEvent* event) {
DCHECK_EQ(base::MessageLoop::current(), chrome_worker_thread_.message_loop());
network_manager_ = new IpcNetworkManager(p2p_socket_dispatcher_.get());
event->Signal();
}
-void MediaStreamDependencyFactory::DeleteIpcNetworkManager() {
+void PeerConnectionDependencyFactory::DeleteIpcNetworkManager() {
DCHECK_EQ(base::MessageLoop::current(), chrome_worker_thread_.message_loop());
delete network_manager_;
network_manager_ = NULL;
}
-void MediaStreamDependencyFactory::CleanupPeerConnectionFactory() {
+void PeerConnectionDependencyFactory::CleanupPeerConnectionFactory() {
pc_factory_ = NULL;
if (network_manager_) {
// The network manager needs to free its resources on the thread they were
// created, which is the worked thread.
if (chrome_worker_thread_.IsRunning()) {
chrome_worker_thread_.message_loop()->PostTask(FROM_HERE, base::Bind(
- &MediaStreamDependencyFactory::DeleteIpcNetworkManager,
+ &PeerConnectionDependencyFactory::DeleteIpcNetworkManager,
base::Unretained(this)));
// Stopping the thread will wait until all tasks have been
// processed before returning. We wait for the above task to finish before
@@ -568,7 +571,7 @@ void MediaStreamDependencyFactory::CleanupPeerConnectionFactory() {
}
scoped_refptr<WebRtcAudioCapturer>
-MediaStreamDependencyFactory::CreateAudioCapturer(
+PeerConnectionDependencyFactory::CreateAudioCapturer(
int render_view_id,
const StreamDeviceInfo& device_info,
const blink::WebMediaConstraints& constraints,
@@ -585,7 +588,7 @@ MediaStreamDependencyFactory::CreateAudioCapturer(
audio_source);
}
-void MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
+void PeerConnectionDependencyFactory::AddNativeAudioTrackToBlinkTrack(
webrtc::MediaStreamTrackInterface* native_track,
const blink::WebMediaStreamTrack& webkit_track,
bool is_local_track) {
@@ -601,10 +604,16 @@ void MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
is_local_track));
}
-bool MediaStreamDependencyFactory::OnControlMessageReceived(
+scoped_refptr<base::MessageLoopProxy>
+PeerConnectionDependencyFactory::GetWebRtcWorkerThread() const {
+ DCHECK(CalledOnValidThread());
+ return chrome_worker_thread_.message_loop_proxy();
+}
+
+bool PeerConnectionDependencyFactory::OnControlMessageReceived(
const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(MediaStreamDependencyFactory, message)
+ IPC_BEGIN_MESSAGE_MAP(PeerConnectionDependencyFactory, message)
IPC_MESSAGE_HANDLER(MediaStreamMsg_EnableAecDump, OnAecDumpFile)
IPC_MESSAGE_HANDLER(MediaStreamMsg_DisableAecDump, OnDisableAecDump)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -612,20 +621,19 @@ bool MediaStreamDependencyFactory::OnControlMessageReceived(
return handled;
}
-void MediaStreamDependencyFactory::OnAecDumpFile(
+void PeerConnectionDependencyFactory::OnAecDumpFile(
IPC::PlatformFileForTransit file_handle) {
DCHECK(!aec_dump_file_.IsValid());
base::File file = IPC::PlatformFileForTransitToFile(file_handle);
DCHECK(file.IsValid());
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableAudioTrackProcessing)) {
+ if (MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled()) {
EnsureWebRtcAudioDeviceImpl();
GetWebRtcAudioDevice()->EnableAecDump(file.Pass());
return;
}
- // TODO(xians): Remove the following code after kEnableAudioTrackProcessing
+ // TODO(xians): Remove the following code after kDisableAudioTrackProcessing
// is removed.
if (PeerConnectionFactoryCreated())
StartAecDump(file.Pass());
@@ -633,27 +641,26 @@ void MediaStreamDependencyFactory::OnAecDumpFile(
aec_dump_file_ = file.Pass();
}
-void MediaStreamDependencyFactory::OnDisableAecDump() {
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableAudioTrackProcessing)) {
+void PeerConnectionDependencyFactory::OnDisableAecDump() {
+ if (MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled()) {
GetWebRtcAudioDevice()->DisableAecDump();
return;
}
- // TODO(xians): Remove the following code after kEnableAudioTrackProcessing
+ // TODO(xians): Remove the following code after kDisableAudioTrackProcessing
// is removed.
if (aec_dump_file_.IsValid())
aec_dump_file_.Close();
}
-void MediaStreamDependencyFactory::StartAecDump(base::File aec_dump_file) {
+void PeerConnectionDependencyFactory::StartAecDump(base::File aec_dump_file) {
// |pc_factory_| always takes ownership of |aec_dump_file|. If StartAecDump()
// fails, |aec_dump_file| will be closed.
if (!GetPcFactory()->StartAecDump(aec_dump_file.TakePlatformFile()))
VLOG(1) << "Could not start AEC dump.";
}
-void MediaStreamDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
+void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() {
if (audio_device_)
return;
diff --git a/content/renderer/media/media_stream_dependency_factory.h b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
index 4c42ff4f84..969fb6b9d7 100644
--- a/content/renderer/media/media_stream_dependency_factory.h
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.h
@@ -1,15 +1,14 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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.
-#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
-#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
+#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#define CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
#include <string>
#include "base/basictypes.h"
#include "base/files/file.h"
-#include "base/memory/ref_counted.h"
#include "base/threading/thread.h"
#include "content/common/content_export.h"
#include "content/public/renderer/render_process_observer.h"
@@ -53,17 +52,14 @@ class WebRtcLoggingMessageFilter;
class WebRtcVideoCapturerAdapter;
struct StreamDeviceInfo;
-// Object factory for RTC MediaStreams and RTC PeerConnections.
-class CONTENT_EXPORT MediaStreamDependencyFactory
+// Object factory for RTC PeerConnections.
+class CONTENT_EXPORT PeerConnectionDependencyFactory
: NON_EXPORTED_BASE(public base::NonThreadSafe),
public RenderProcessObserver {
public:
- // MediaSourcesCreatedCallback is used in CreateNativeMediaSources.
- typedef base::Callback<void(blink::WebMediaStream* web_stream,
- bool live)> MediaSourcesCreatedCallback;
- MediaStreamDependencyFactory(
+ PeerConnectionDependencyFactory(
P2PSocketDispatcher* p2p_socket_dispatcher);
- virtual ~MediaStreamDependencyFactory();
+ virtual ~PeerConnectionDependencyFactory();
// Create a RTCPeerConnectionHandler object that implements the
// WebKit WebRTCPeerConnectionHandler interface.
@@ -131,6 +127,8 @@ class CONTENT_EXPORT MediaStreamDependencyFactory
const blink::WebMediaStreamTrack& webkit_track,
bool is_local_track);
+ scoped_refptr<base::MessageLoopProxy> GetWebRtcWorkerThread() const;
+
protected:
// Asks the PeerConnection factory to create a Local Audio Source.
virtual scoped_refptr<webrtc::AudioSourceInterface>
@@ -208,9 +206,9 @@ class CONTENT_EXPORT MediaStreamDependencyFactory
base::File aec_dump_file_;
- DISALLOW_COPY_AND_ASSIGN(MediaStreamDependencyFactory);
+ DISALLOW_COPY_AND_ASSIGN(PeerConnectionDependencyFactory);
};
} // namespace content
-#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_DEPENDENCY_FACTORY_H_
+#endif // CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
diff --git a/content/renderer/media/media_stream_dependency_factory_unittest.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory_unittest.cc
index e0e71ab5f0..72f564e40a 100644
--- a/content/renderer/media/media_stream_dependency_factory_unittest.cc
+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory_unittest.cc
@@ -1,25 +1,25 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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 "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h"
namespace content {
-class MediaStreamDependencyFactoryTest : public ::testing::Test {
+class PeerConnectionDependencyFactoryTest : public ::testing::Test {
public:
virtual void SetUp() {
- dependency_factory_.reset(new MockMediaStreamDependencyFactory());
+ dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
}
protected:
- scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
+ scoped_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
};
-TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
+TEST_F(PeerConnectionDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
MockWebRTCPeerConnectionHandlerClient client_jsep;
scoped_ptr<blink::WebRTCPeerConnectionHandler> pc_handler(
dependency_factory_->CreateRTCPeerConnectionHandler(&client_jsep));
diff --git a/content/renderer/media/webrtc/video_destination_handler.h b/content/renderer/media/webrtc/video_destination_handler.h
index 0b6641c562..e84fdd603d 100644
--- a/content/renderer/media/webrtc/video_destination_handler.h
+++ b/content/renderer/media/webrtc/video_destination_handler.h
@@ -16,7 +16,7 @@
namespace content {
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
class MediaStreamRegistryInterface;
class PPB_ImageData_Impl;
diff --git a/content/renderer/media/webrtc/video_destination_handler_unittest.cc b/content/renderer/media/webrtc/video_destination_handler_unittest.cc
index 062c2777f9..49e9cf7ebc 100644
--- a/content/renderer/media/webrtc/video_destination_handler_unittest.cc
+++ b/content/renderer/media/webrtc/video_destination_handler_unittest.cc
@@ -36,8 +36,13 @@ class VideoDestinationHandlerTest : public PpapiUnittest {
public:
VideoDestinationHandlerTest()
: child_process_(new ChildProcess()),
- registry_(MockMediaStreamRegistry()) {
- registry_.Init(kTestStreamUrl);
+ registry_(new MockMediaStreamRegistry()) {
+ registry_->Init(kTestStreamUrl);
+ }
+
+ virtual void TearDown() {
+ registry_.reset();
+ PpapiUnittest::TearDown();
}
base::MessageLoop* io_message_loop() const {
@@ -46,15 +51,15 @@ class VideoDestinationHandlerTest : public PpapiUnittest {
protected:
scoped_ptr<ChildProcess> child_process_;
- MockMediaStreamRegistry registry_;
+ scoped_ptr<MockMediaStreamRegistry> registry_;
};
TEST_F(VideoDestinationHandlerTest, Open) {
FrameWriterInterface* frame_writer = NULL;
// Unknow url will return false.
- EXPECT_FALSE(VideoDestinationHandler::Open(&registry_,
+ EXPECT_FALSE(VideoDestinationHandler::Open(registry_.get(),
kUnknownStreamUrl, &frame_writer));
- EXPECT_TRUE(VideoDestinationHandler::Open(&registry_,
+ EXPECT_TRUE(VideoDestinationHandler::Open(registry_.get(),
kTestStreamUrl, &frame_writer));
// The |frame_writer| is a proxy and is owned by whoever call Open.
delete frame_writer;
@@ -62,12 +67,12 @@ TEST_F(VideoDestinationHandlerTest, Open) {
TEST_F(VideoDestinationHandlerTest, PutFrame) {
FrameWriterInterface* frame_writer = NULL;
- EXPECT_TRUE(VideoDestinationHandler::Open(&registry_,
+ EXPECT_TRUE(VideoDestinationHandler::Open(registry_.get(),
kTestStreamUrl, &frame_writer));
ASSERT_TRUE(frame_writer);
// Verify the video track has been added.
- const blink::WebMediaStream test_stream = registry_.test_stream();
+ const blink::WebMediaStream test_stream = registry_->test_stream();
blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
test_stream.videoTracks(video_tracks);
ASSERT_EQ(1u, video_tracks.size());
@@ -78,9 +83,8 @@ TEST_F(VideoDestinationHandlerTest, PutFrame) {
ASSERT_TRUE(native_track != NULL);
MockMediaStreamVideoSink sink;
- native_track->AddSink(&sink);
-
- scoped_refptr<PPB_ImageData_Impl> image(
+ native_track->AddSink(&sink, sink.GetDeliverFrameCB());
+ scoped_refptr<PPB_ImageData_Impl> image(
new PPB_ImageData_Impl(instance()->pp_instance(),
PPB_ImageData_Impl::ForTest()));
image->Init(PP_IMAGEDATAFORMAT_BGRA_PREMUL, 640, 360, true);
diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
index d798b3101f..693067ac93 100644
--- a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
+++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
@@ -4,6 +4,7 @@
#include "base/command_line.h"
#include "content/public/common/content_switches.h"
+#include "content/renderer/media/mock_media_constraint_factory.h"
#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
#include "content/renderer/media/webrtc_local_audio_track.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -35,11 +36,13 @@ class WebRtcLocalAudioTrackAdapterTest : public ::testing::Test {
WebRtcLocalAudioTrackAdapterTest()
: params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
media::CHANNEL_LAYOUT_STEREO, 48000, 16, 480),
- adapter_(WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL)),
- capturer_(WebRtcAudioCapturer::CreateCapturer(
- -1, StreamDeviceInfo(MEDIA_DEVICE_AUDIO_CAPTURE, "", ""),
- blink::WebMediaConstraints(), NULL, NULL)),
- track_(new WebRtcLocalAudioTrack(adapter_, capturer_, NULL)) {}
+ adapter_(WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL)) {
+ MockMediaConstraintFactory constraint_factory;
+ capturer_ = WebRtcAudioCapturer::CreateCapturer(
+ -1, StreamDeviceInfo(MEDIA_DEVICE_AUDIO_CAPTURE, "", ""),
+ constraint_factory.CreateWebMediaConstraints(), NULL, NULL);
+ track_.reset(new WebRtcLocalAudioTrack(adapter_, capturer_, NULL));
+ }
protected:
virtual void SetUp() OVERRIDE {
@@ -85,12 +88,12 @@ TEST_F(WebRtcLocalAudioTrackAdapterTest, GetSignalLevel) {
webrtc::AudioTrackInterface* webrtc_track =
static_cast<webrtc::AudioTrackInterface*>(adapter_.get());
int signal_level = 0;
- EXPECT_FALSE(webrtc_track->GetSignalLevel(&signal_level));
+ EXPECT_TRUE(webrtc_track->GetSignalLevel(&signal_level));
- // Enable the audio processing in the audio track.
+ // Disable the audio processing in the audio track.
CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableAudioTrackProcessing);
- EXPECT_TRUE(webrtc_track->GetSignalLevel(&signal_level));
+ switches::kDisableAudioTrackProcessing);
+ EXPECT_FALSE(webrtc_track->GetSignalLevel(&signal_level));
}
} // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
index 9a7f8b57a1..0751238daf 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
@@ -6,8 +6,8 @@
#include "base/logging.h"
#include "content/renderer/media/media_stream_audio_source.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_track.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebString.h"
@@ -16,7 +16,7 @@ namespace content {
WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter(
const blink::WebMediaStream& web_stream,
- MediaStreamDependencyFactory* factory)
+ PeerConnectionDependencyFactory* factory)
: web_stream_(web_stream),
factory_(factory) {
webrtc_media_stream_ =
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter.h b/content/renderer/media/webrtc/webrtc_media_stream_adapter.h
index 9c64b441e7..d5983224ed 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_adapter.h
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter.h
@@ -16,7 +16,7 @@
namespace content {
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
// WebRtcMediaStreamAdapter is an adapter between a blink::WebMediaStream
// object and a webrtc MediaStreams that is currently sent on a PeerConnection.
@@ -30,7 +30,7 @@ class CONTENT_EXPORT WebRtcMediaStreamAdapter
: NON_EXPORTED_BASE(public MediaStreamObserver) {
public:
WebRtcMediaStreamAdapter(const blink::WebMediaStream& web_stream,
- MediaStreamDependencyFactory* factory);
+ PeerConnectionDependencyFactory* factory);
virtual ~WebRtcMediaStreamAdapter();
bool IsEqual(const blink::WebMediaStream& web_stream) {
@@ -52,9 +52,9 @@ class CONTENT_EXPORT WebRtcMediaStreamAdapter
blink::WebMediaStream web_stream_;
- // Pointer to a MediaStreamDependencyFactory, owned by the RenderThread.
+ // Pointer to a PeerConnectionDependencyFactory, owned by the RenderThread.
// It's valid for the lifetime of RenderThread.
- MediaStreamDependencyFactory* factory_;
+ PeerConnectionDependencyFactory* factory_;
scoped_refptr<webrtc::MediaStreamInterface> webrtc_media_stream_;
ScopedVector<WebRtcVideoTrackAdapter> video_adapters_;
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc
index 5a5b9bff01..a5eced1d87 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc
@@ -3,13 +3,14 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "content/child/child_process.h"
#include "content/renderer/media/media_stream.h"
#include "content/renderer/media/media_stream_audio_source.h"
#include "content/renderer/media/media_stream_video_source.h"
#include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -24,7 +25,7 @@ class WebRtcMediaStreamAdapterTest : public ::testing::Test {
public:
virtual void SetUp() {
child_process_.reset(new ChildProcess());
- dependency_factory_.reset(new MockMediaStreamDependencyFactory());
+ dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
}
blink::WebMediaStream CreateBlinkMediaStream(bool audio, bool video) {
@@ -91,8 +92,9 @@ class WebRtcMediaStreamAdapterTest : public ::testing::Test {
}
protected:
+ base::MessageLoop message_loop_;
scoped_ptr<ChildProcess> child_process_;
- scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
+ scoped_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
scoped_ptr<WebRtcMediaStreamAdapter> adapter_;
};
diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc
index 199cdff753..603edb3780 100644
--- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc
@@ -8,7 +8,7 @@
#include "base/debug/trace_event.h"
#include "base/memory/aligned_memory.h"
#include "media/base/video_frame.h"
-#include "third_party/libyuv/include/libyuv/convert.h"
+#include "third_party/libyuv/include/libyuv/scale.h"
namespace content {
@@ -17,6 +17,7 @@ WebRtcVideoCapturerAdapter::WebRtcVideoCapturerAdapter(bool is_screencast)
running_(false),
buffer_(NULL),
buffer_size_(0) {
+ thread_checker_.DetachFromThread();
}
WebRtcVideoCapturerAdapter::~WebRtcVideoCapturerAdapter() {
@@ -26,6 +27,7 @@ WebRtcVideoCapturerAdapter::~WebRtcVideoCapturerAdapter() {
cricket::CaptureState WebRtcVideoCapturerAdapter::Start(
const cricket::VideoFormat& capture_format) {
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(!running_);
DVLOG(3) << " WebRtcVideoCapturerAdapter::Start w = " << capture_format.width
<< " h = " << capture_format.height;
@@ -35,6 +37,7 @@ cricket::CaptureState WebRtcVideoCapturerAdapter::Start(
}
void WebRtcVideoCapturerAdapter::Stop() {
+ DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(3) << " WebRtcVideoCapturerAdapter::Stop ";
DCHECK(running_);
running_ = false;
@@ -43,11 +46,13 @@ void WebRtcVideoCapturerAdapter::Stop() {
}
bool WebRtcVideoCapturerAdapter::IsRunning() {
+ DCHECK(thread_checker_.CalledOnValidThread());
return running_;
}
bool WebRtcVideoCapturerAdapter::GetPreferredFourccs(
std::vector<uint32>* fourccs) {
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!fourccs)
return false;
fourccs->push_back(cricket::FOURCC_I420);
@@ -61,6 +66,7 @@ bool WebRtcVideoCapturerAdapter::IsScreencast() const {
bool WebRtcVideoCapturerAdapter::GetBestCaptureFormat(
const cricket::VideoFormat& desired,
cricket::VideoFormat* best_format) {
+ DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(3) << " GetBestCaptureFormat:: "
<< " w = " << desired.width
<< " h = " << desired.height;
@@ -77,14 +83,23 @@ bool WebRtcVideoCapturerAdapter::GetBestCaptureFormat(
void WebRtcVideoCapturerAdapter::OnFrameCaptured(
const scoped_refptr<media::VideoFrame>& frame) {
- DCHECK(media::VideoFrame::I420 == frame->format() ||
- media::VideoFrame::YV12 == frame->format());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ TRACE_EVENT0("video", "WebRtcVideoCapturerAdapter::OnFrameCaptured");
+ if (!(media::VideoFrame::I420 == frame->format() ||
+ media::VideoFrame::YV12 == frame->format())) {
+ // Some types of sources support textures as output. Since connecting
+ // sources and sinks do not check the format, we need to just ignore
+ // formats that we can not handle.
+ NOTREACHED();
+ return;
+ }
+
if (first_frame_timestamp_ == media::kNoTimestamp())
first_frame_timestamp_ = frame->timestamp();
cricket::CapturedFrame captured_frame;
- captured_frame.width = frame->visible_rect().width();
- captured_frame.height = frame->visible_rect().height();
+ captured_frame.width = frame->natural_size().width();
+ captured_frame.height = frame->natural_size().height();
// cricket::CapturedFrame time is in nanoseconds.
captured_frame.elapsed_time =
(frame->timestamp() - first_frame_timestamp_).InMicroseconds() *
@@ -97,10 +112,10 @@ void WebRtcVideoCapturerAdapter::OnFrameCaptured(
// TODO(perkj):
// Libjingle expects contiguous layout of image planes as input.
// The only format where that is true in Chrome is I420 where the
- // coded_size == visible_rect().size().
+ // coded_size == natural_size().
if (frame->format() != media::VideoFrame::I420 ||
- frame->coded_size() != frame->visible_rect().size()) {
- // Cropping and or switching UV planes is needed.
+ frame->coded_size() != frame->natural_size()) {
+ // Cropping / Scaling and or switching UV planes is needed.
UpdateI420Buffer(frame);
captured_frame.data = buffer_;
captured_frame.data_size = buffer_size_;
@@ -120,26 +135,26 @@ void WebRtcVideoCapturerAdapter::OnFrameCaptured(
void WebRtcVideoCapturerAdapter::UpdateI420Buffer(
const scoped_refptr<media::VideoFrame>& src) {
- const int src_width = src->coded_size().width();
- const int src_height = src->coded_size().height();
- const int dst_width = src->visible_rect().width();
- const int dst_height = src->visible_rect().height();
- DCHECK(src_width >= dst_width && src_height >= dst_height);
+ DCHECK(thread_checker_.CalledOnValidThread());
+ const int dst_width = src->natural_size().width();
+ const int dst_height = src->natural_size().height();
+ DCHECK(src->visible_rect().width() >= dst_width &&
+ src->visible_rect().height() >= dst_height);
- const int horiz_crop = src->visible_rect().x();
- const int vert_crop = src->visible_rect().y();
+ const gfx::Rect& visible_rect = src->visible_rect();
const uint8* src_y = src->data(media::VideoFrame::kYPlane) +
- (src_width * vert_crop + horiz_crop);
- const int center = (src_width + 1) / 2;
+ visible_rect.y() * src->stride(media::VideoFrame::kYPlane) +
+ visible_rect.x();
const uint8* src_u = src->data(media::VideoFrame::kUPlane) +
- (center * vert_crop + horiz_crop) / 2;
+ visible_rect.y() / 2 * src->stride(media::VideoFrame::kUPlane) +
+ visible_rect.x() / 2;
const uint8* src_v = src->data(media::VideoFrame::kVPlane) +
- (center * vert_crop + horiz_crop) / 2;
+ visible_rect.y() / 2 * src->stride(media::VideoFrame::kVPlane) +
+ visible_rect.x() / 2;
const size_t dst_size =
- media::VideoFrame::AllocationSize(src->format(),
- src->visible_rect().size());
+ media::VideoFrame::AllocationSize(src->format(), src->natural_size());
if (dst_size != buffer_size_) {
base::AlignedFree(buffer_);
@@ -156,20 +171,23 @@ void WebRtcVideoCapturerAdapter::UpdateI420Buffer(
const int dst_halfheight = (dst_height + 1) / 2;
uint8* dst_v = dst_u + dst_halfwidth * dst_halfheight;
- libyuv::I420Copy(src_y,
- src->stride(media::VideoFrame::kYPlane),
- src_u,
- src->stride(media::VideoFrame::kUPlane),
- src_v,
- src->stride(media::VideoFrame::kVPlane),
- dst_y,
- dst_stride_y,
- dst_u,
- dst_halfwidth,
- dst_v,
- dst_halfwidth,
- dst_width,
- dst_height);
+ libyuv::I420Scale(src_y,
+ src->stride(media::VideoFrame::kYPlane),
+ src_u,
+ src->stride(media::VideoFrame::kUPlane),
+ src_v,
+ src->stride(media::VideoFrame::kVPlane),
+ visible_rect.width(),
+ visible_rect.height(),
+ dst_y,
+ dst_stride_y,
+ dst_u,
+ dst_halfwidth,
+ dst_v,
+ dst_halfwidth,
+ dst_width,
+ dst_height,
+ libyuv::kFilterBilinear);
}
} // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.h b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.h
index 753bf3cbf5..0f38f6b9ed 100644
--- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.h
+++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.h
@@ -8,6 +8,8 @@
#include <vector>
#include "base/compiler_specific.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/threading/thread_checker.h"
#include "content/common/content_export.h"
#include "media/base/video_frame.h"
#include "media/video/capture/video_capture_types.h"
@@ -19,12 +21,18 @@ namespace content {
// used for VideoCapturing in libJingle and especially in PeerConnections.
// The class is created and destroyed on the main render thread.
// PeerConnection access cricket::VideoCapturer from a libJingle worker thread.
+// An instance of WebRtcVideoCapturerAdapter is owned by an instance of
+// webrtc::VideoSourceInterface in libJingle. The implementation of
+// webrtc::VideoSourceInterface guarantees that this object is not deleted
+// while it is still used in libJingle.
class CONTENT_EXPORT WebRtcVideoCapturerAdapter
: NON_EXPORTED_BASE(public cricket::VideoCapturer) {
public:
explicit WebRtcVideoCapturerAdapter(bool is_screencast);
virtual ~WebRtcVideoCapturerAdapter();
+ // OnFrameCaptured delivers video frames to libjingle. It must be called on
+ // libjingles worker thread.
// This method is virtual for testing purposes.
virtual void OnFrameCaptured(const scoped_refptr<media::VideoFrame>& frame);
@@ -42,7 +50,9 @@ class CONTENT_EXPORT WebRtcVideoCapturerAdapter
void UpdateI420Buffer(const scoped_refptr<media::VideoFrame>& src);
- private:
+ // |thread_checker_| is bound to the libjingle worker thread.
+ base::ThreadChecker thread_checker_;
+
const bool is_screencast_;
bool running_;
base::TimeDelta first_frame_timestamp_;
diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc
index bd817abaaa..250124d0b8 100644
--- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc
+++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc
@@ -25,22 +25,23 @@ class WebRtcVideoCapturerAdapterTest
void TestSourceCropFrame(int capture_width,
int capture_height,
- int expected_width,
- int expected_height) {
- const int visible_width = std::min(capture_width, expected_width);
- const int horiz_crop = ((capture_width - visible_width) / 2);
- const int visible_height = std::min(capture_height, expected_height);
- const int vert_crop = ((expected_height - visible_height) / 2);
+ int cropped_width,
+ int cropped_height,
+ int natural_width,
+ int natural_height) {
+ const int horiz_crop = ((capture_width - cropped_width) / 2);
+ const int vert_crop = ((capture_height - cropped_height) / 2);
gfx::Size coded_size(capture_width, capture_height);
- gfx::Rect view_rect(horiz_crop, vert_crop, visible_width, visible_height);
+ gfx::Size natural_size(natural_width, natural_height);
+ gfx::Rect view_rect(horiz_crop, vert_crop, cropped_width, cropped_height);
scoped_refptr<media::VideoFrame> frame =
media::VideoFrame::CreateFrame(media::VideoFrame::I420,
- coded_size, view_rect, coded_size,
+ coded_size, view_rect, natural_size,
base::TimeDelta());
adapter_.OnFrameCaptured(frame);
- EXPECT_EQ(expected_width, output_frame_width_);
- EXPECT_EQ(expected_height, output_frame_height_);
+ EXPECT_EQ(natural_width, output_frame_width_);
+ EXPECT_EQ(natural_height, output_frame_height_);
}
protected:
void OnFrameCaptured(cricket::VideoCapturer* capturer,
@@ -56,11 +57,15 @@ class WebRtcVideoCapturerAdapterTest
};
TEST_F(WebRtcVideoCapturerAdapterTest, CropFrameTo640360) {
- TestSourceCropFrame(640, 480, 640, 360);
+ TestSourceCropFrame(640, 480, 640, 360, 640, 360);
}
-TEST_F(WebRtcVideoCapturerAdapterTest, CropFrameTo732489) {
- TestSourceCropFrame(1280, 720, 731, 489);
+TEST_F(WebRtcVideoCapturerAdapterTest, CropFrameTo320320) {
+ TestSourceCropFrame(640, 480, 480, 480, 320, 320);
+}
+
+TEST_F(WebRtcVideoCapturerAdapterTest, Scale720To640360) {
+ TestSourceCropFrame(1280, 720, 1280, 720, 640, 360);
}
} // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_video_track_adapter.cc b/content/renderer/media/webrtc/webrtc_video_track_adapter.cc
index 0fdef64f2e..1d9920f1b2 100644
--- a/content/renderer/media/webrtc/webrtc_video_track_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_video_track_adapter.cc
@@ -5,6 +5,7 @@
#include "content/renderer/media/webrtc/webrtc_video_track_adapter.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/synchronization/lock.h"
#include "content/common/media/media_stream_options.h"
#include "content/renderer/media/media_stream_video_source.h"
#include "content/renderer/media/media_stream_video_track.h"
@@ -24,49 +25,112 @@ namespace content {
// Simple help class used for receiving video frames on the IO-thread from
// a MediaStreamVideoTrack and forward the frames to a
-// WebRtcVideoCapturerAdapter that implements a video capturer for libjingle.
+// WebRtcVideoCapturerAdapter on libjingle's worker thread.
+// WebRtcVideoCapturerAdapter implements a video capturer for libjingle.
class WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter
: public base::RefCountedThreadSafe<WebRtcVideoSourceAdapter> {
public:
WebRtcVideoSourceAdapter(
+ const scoped_refptr<base::MessageLoopProxy>& libjingle_worker_thread,
const scoped_refptr<webrtc::VideoSourceInterface>& source,
WebRtcVideoCapturerAdapter* capture_adapter);
+ // WebRtcVideoTrackAdapter can be destroyed on the main render thread or
+ // libjingles worker thread since it posts video frames on that thread. But
+ // |video_source_| must be released on the main render thread before the
+ // PeerConnectionFactory has been destroyed. The only way to ensure that is
+ // to make sure |video_source_| is released when WebRtcVideoTrackAdapter() is
+ // destroyed.
+ void ReleaseSourceOnMainThread();
+
void OnVideoFrameOnIO(const scoped_refptr<media::VideoFrame>& frame,
const media::VideoCaptureFormat& format);
private:
+ void OnVideoFrameOnWorkerThread(const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
friend class base::RefCountedThreadSafe<WebRtcVideoSourceAdapter>;
virtual ~WebRtcVideoSourceAdapter();
+ scoped_refptr<base::MessageLoopProxy> render_thread_message_loop_;
+
+ // |render_thread_checker_| is bound to the main render thread.
+ base::ThreadChecker render_thread_checker_;
// Used to DCHECK that frames are called on the IO-thread.
base::ThreadChecker io_thread_checker_;
+
+ // Used for posting frames to libjingle's worker thread. Accessed on the
+ // IO-thread.
+ scoped_refptr<base::MessageLoopProxy> libjingle_worker_thread_;
+
scoped_refptr<webrtc::VideoSourceInterface> video_source_;
+
+ // Used to protect |capture_adapter_|. It is taken by libjingle's worker
+ // thread for each video frame that is delivered but only taken on the
+ // main render thread in ReleaseSourceOnMainThread() when
+ // the owning WebRtcVideoTrackAdapter is being destroyed.
+ base::Lock capture_adapter_stop_lock_;
// |capture_adapter_| is owned by |video_source_|
WebRtcVideoCapturerAdapter* capture_adapter_;
};
WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::WebRtcVideoSourceAdapter(
+ const scoped_refptr<base::MessageLoopProxy>& libjingle_worker_thread,
const scoped_refptr<webrtc::VideoSourceInterface>& source,
WebRtcVideoCapturerAdapter* capture_adapter)
- : video_source_(source),
+ : render_thread_message_loop_(base::MessageLoopProxy::current()),
+ libjingle_worker_thread_(libjingle_worker_thread),
+ video_source_(source),
capture_adapter_(capture_adapter) {
io_thread_checker_.DetachFromThread();
}
WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::~WebRtcVideoSourceAdapter() {
+ DVLOG(3) << "~WebRtcVideoSourceAdapter()";
+ DCHECK(!capture_adapter_);
+ // This object can be destroyed on the main render thread or libjingles
+ // worker thread since it posts video frames on that thread. But
+ // |video_source_| must be released on the main render thread before the
+ // PeerConnectionFactory has been destroyed. The only way to ensure that is
+ // to make sure |video_source_| is released when WebRtcVideoTrackAdapter() is
+ // destroyed.
+}
+
+void WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::
+ReleaseSourceOnMainThread() {
+ DCHECK(render_thread_checker_.CalledOnValidThread());
+ // Since frames are posted to the worker thread, this object might be deleted
+ // on that thread. However, since |video_source_| was created on the render
+ // thread, it should be released on the render thread.
+ base::AutoLock auto_lock(capture_adapter_stop_lock_);
+ // |video_source| owns |capture_adapter_|.
+ capture_adapter_ = NULL;
+ video_source_ = NULL;
}
void WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnIO(
const scoped_refptr<media::VideoFrame>& frame,
const media::VideoCaptureFormat& format) {
DCHECK(io_thread_checker_.CalledOnValidThread());
- capture_adapter_->OnFrameCaptured(frame);
+ libjingle_worker_thread_->PostTask(
+ FROM_HERE,
+ base::Bind(&WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread,
+ this, frame, format));
+}
+
+void
+WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread(
+ const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
+ DCHECK(libjingle_worker_thread_->BelongsToCurrentThread());
+ base::AutoLock auto_lock(capture_adapter_stop_lock_);
+ if (capture_adapter_)
+ capture_adapter_->OnFrameCaptured(frame);
}
WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter(
const blink::WebMediaStreamTrack& track,
- MediaStreamDependencyFactory* factory)
+ PeerConnectionDependencyFactory* factory)
: web_track_(track) {
const blink::WebMediaConstraints& constraints =
MediaStreamVideoTrack::GetVideoTrack(track)->constraints();
@@ -86,12 +150,16 @@ WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter(
video_track_->set_enabled(web_track_.isEnabled());
- source_adapter_ = new WebRtcVideoSourceAdapter(video_source,
- capture_adapter);
+ source_adapter_ = new WebRtcVideoSourceAdapter(
+ factory->GetWebRtcWorkerThread(),
+ video_source,
+ capture_adapter);
- MediaStreamVideoTrack::GetVideoTrack(track)->AddSink(
- this, base::Bind(&WebRtcVideoSourceAdapter::OnVideoFrameOnIO,
- source_adapter_));
+ AddToVideoTrack(
+ this,
+ base::Bind(&WebRtcVideoSourceAdapter::OnVideoFrameOnIO,
+ source_adapter_),
+ web_track_);
DVLOG(3) << "WebRtcVideoTrackAdapter ctor() : is_screencast "
<< is_screencast;
@@ -100,7 +168,8 @@ WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter(
WebRtcVideoTrackAdapter::~WebRtcVideoTrackAdapter() {
DCHECK(thread_checker_.CalledOnValidThread());
DVLOG(3) << "WebRtcVideoTrackAdapter dtor().";
- MediaStreamVideoTrack::GetVideoTrack(web_track_)->RemoveSink(this);
+ RemoveFromVideoTrack(this, web_track_);
+ source_adapter_->ReleaseSourceOnMainThread();
}
void WebRtcVideoTrackAdapter::OnEnabledChanged(bool enabled) {
@@ -109,4 +178,3 @@ void WebRtcVideoTrackAdapter::OnEnabledChanged(bool enabled) {
}
} // namespace content
-
diff --git a/content/renderer/media/webrtc/webrtc_video_track_adapter.h b/content/renderer/media/webrtc/webrtc_video_track_adapter.h
index 6b649bab0c..0ff7a6ffd9 100644
--- a/content/renderer/media/webrtc/webrtc_video_track_adapter.h
+++ b/content/renderer/media/webrtc/webrtc_video_track_adapter.h
@@ -7,8 +7,8 @@
#include "base/macros.h"
#include "base/threading/thread_checker.h"
-#include "content/public/renderer/media_stream_sink.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/public/renderer/media_stream_video_sink.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
@@ -27,10 +27,10 @@ class MediaStreamVideoTrack;
// added to an RTCPeerConnection object.
// Instances of this class is owned by the WebRtcMediaStreamAdapter object that
// created it.
-class WebRtcVideoTrackAdapter : public MediaStreamSink {
+class WebRtcVideoTrackAdapter : public MediaStreamVideoSink {
public:
WebRtcVideoTrackAdapter(const blink::WebMediaStreamTrack& track,
- MediaStreamDependencyFactory* factory);
+ PeerConnectionDependencyFactory* factory);
virtual ~WebRtcVideoTrackAdapter();
webrtc::VideoTrackInterface* webrtc_video_track() {
diff --git a/content/renderer/media/webrtc_audio_capturer.cc b/content/renderer/media/webrtc_audio_capturer.cc
index c4de8e905c..caa3606a3f 100644
--- a/content/renderer/media/webrtc_audio_capturer.cc
+++ b/content/renderer/media/webrtc_audio_capturer.cc
@@ -165,6 +165,11 @@ bool WebRtcAudioCapturer::Initialize() {
return true;
}
+ MediaAudioConstraints audio_constraints(constraints_,
+ device_info_.device.input.effects);
+ if (!audio_constraints.IsValid())
+ return false;
+
media::ChannelLayout channel_layout = static_cast<media::ChannelLayout>(
device_info_.device.input.channel_layout);
DVLOG(1) << "Audio input hardware channel layout: " << channel_layout;
@@ -224,8 +229,7 @@ WebRtcAudioCapturer::WebRtcAudioCapturer(
: constraints_(constraints),
audio_processor_(
new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
- constraints, device_info.device.input.effects,
- device_info.device.type, audio_device)),
+ constraints, device_info.device.input.effects, audio_device)),
running_(false),
render_view_id_(render_view_id),
device_info_(device_info),
@@ -332,8 +336,9 @@ void WebRtcAudioCapturer::SetCapturerSource(
// Notify the |audio_processor_| of the new format.
audio_processor_->OnCaptureFormatChanged(params);
- need_audio_processing_ = NeedsAudioProcessing(
- constraints_, device_info_.device.input.effects);
+ MediaAudioConstraints audio_constraints(constraints_,
+ device_info_.device.input.effects);
+ need_audio_processing_ = audio_constraints.NeedsAudioProcessing();
// Notify all tracks about the new format.
tracks_.TagAll();
}
diff --git a/content/renderer/media/webrtc_audio_capturer_unittest.cc b/content/renderer/media/webrtc_audio_capturer_unittest.cc
index 8b67aeab85..0011f76305 100644
--- a/content/renderer/media/webrtc_audio_capturer_unittest.cc
+++ b/content/renderer/media/webrtc_audio_capturer_unittest.cc
@@ -84,9 +84,9 @@ class WebRtcAudioCapturerTest : public testing::Test {
#endif
}
- void EnableAudioTrackProcessing() {
+ void DisableAudioTrackProcessing() {
CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableAudioTrackProcessing);
+ switches::kDisableAudioTrackProcessing);
}
void VerifyAudioParams(const blink::WebMediaConstraints& constraints,
@@ -156,14 +156,14 @@ class WebRtcAudioCapturerTest : public testing::Test {
// Pass the delay value, volume and key_pressed info via capture callback, and
// those values should be correctly stored and passed to the track.
-TEST_F(WebRtcAudioCapturerTest, VerifyAudioParams) {
+TEST_F(WebRtcAudioCapturerTest, VerifyAudioParamsWithoutAudioProcessing) {
+ DisableAudioTrackProcessing();
// Use constraints with default settings.
- blink::WebMediaConstraints constraints;
- VerifyAudioParams(constraints, true);
+ MockMediaConstraintFactory constraint_factory;
+ VerifyAudioParams(constraint_factory.CreateWebMediaConstraints(), true);
}
TEST_F(WebRtcAudioCapturerTest, VerifyAudioParamsWithAudioProcessing) {
- EnableAudioTrackProcessing();
// Turn off the default constraints to verify that the sink will get packets
// with a buffer size smaller than 10ms.
MockMediaConstraintFactory constraint_factory;
@@ -171,4 +171,21 @@ TEST_F(WebRtcAudioCapturerTest, VerifyAudioParamsWithAudioProcessing) {
VerifyAudioParams(constraint_factory.CreateWebMediaConstraints(), false);
}
+TEST_F(WebRtcAudioCapturerTest, FailToCreateCapturerWithWrongConstraints) {
+ MockMediaConstraintFactory constraint_factory;
+ const std::string dummy_constraint = "dummy";
+ constraint_factory.AddMandatory(dummy_constraint, true);
+
+ scoped_refptr<WebRtcAudioCapturer> capturer(
+ WebRtcAudioCapturer::CreateCapturer(
+ 0, StreamDeviceInfo(MEDIA_DEVICE_AUDIO_CAPTURE,
+ "", "", params_.sample_rate(),
+ params_.channel_layout(),
+ params_.frames_per_buffer()),
+ constraint_factory.CreateWebMediaConstraints(), NULL, NULL)
+ );
+ EXPECT_TRUE(capturer == NULL);
+}
+
+
} // namespace content
diff --git a/content/renderer/media/webrtc_audio_device_impl.cc b/content/renderer/media/webrtc_audio_device_impl.cc
index 517b3e79e7..ae37d2074b 100644
--- a/content/renderer/media/webrtc_audio_device_impl.cc
+++ b/content/renderer/media/webrtc_audio_device_impl.cc
@@ -150,6 +150,8 @@ void WebRtcAudioDeviceImpl::RenderData(media::AudioBus* audio_bus,
int16* audio_data = &render_buffer_[0];
while (accumulated_audio_frames < audio_bus->frames()) {
// Get 10ms and append output to temporary byte buffer.
+ uint32_t rtp_ts = 0;
+ int64_t ntp_ts = 0;
if (is_audio_track_processing_enabled_) {
// When audio processing is enabled in the audio track, we use
// PullRenderData() instead of NeedMorePlayData() to avoid passing the
@@ -160,7 +162,9 @@ void WebRtcAudioDeviceImpl::RenderData(media::AudioBus* audio_bus,
sample_rate,
audio_bus->channels(),
frames_per_10_ms,
- audio_data);
+ audio_data,
+ &rtp_ts,
+ &ntp_ts);
accumulated_audio_frames += frames_per_10_ms;
} else {
// TODO(xians): Remove the following code after the APM in WebRTC is
@@ -170,7 +174,9 @@ void WebRtcAudioDeviceImpl::RenderData(media::AudioBus* audio_bus,
audio_bus->channels(),
sample_rate,
audio_data,
- num_audio_frames);
+ num_audio_frames,
+ &rtp_ts,
+ &ntp_ts);
accumulated_audio_frames += num_audio_frames;
}
diff --git a/content/renderer/media/webrtc_audio_renderer.cc b/content/renderer/media/webrtc_audio_renderer.cc
index c341d0fb3c..28252ebead 100644
--- a/content/renderer/media/webrtc_audio_renderer.cc
+++ b/content/renderer/media/webrtc_audio_renderer.cc
@@ -324,10 +324,8 @@ bool WebRtcAudioRenderer::Initialize(WebRtcAudioRendererSource* source) {
sink_ = AudioDeviceFactory::NewOutputDevice(
source_render_view_id_, source_render_frame_id_);
- // TODO(tommi): Rename InitializeUnifiedStream to rather reflect association
- // with a session.
DCHECK_GE(session_id_, 0);
- sink_->InitializeUnifiedStream(sink_params_, this, session_id_);
+ sink_->InitializeWithSessionId(sink_params_, this, session_id_);
sink_->Start();
diff --git a/content/renderer/media/webrtc_audio_renderer_unittest.cc b/content/renderer/media/webrtc_audio_renderer_unittest.cc
index 34d0c7582f..fa64dbc3aa 100644
--- a/content/renderer/media/webrtc_audio_renderer_unittest.cc
+++ b/content/renderer/media/webrtc_audio_renderer_unittest.cc
@@ -7,7 +7,7 @@
#include "content/renderer/media/audio_device_factory.h"
#include "content/renderer/media/audio_message_filter.h"
#include "content/renderer/media/media_stream_audio_renderer.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc_audio_device_impl.h"
#include "content/renderer/media/webrtc_audio_renderer.h"
#include "media/audio/audio_output_device.h"
diff --git a/content/renderer/media/webrtc_local_audio_renderer.cc b/content/renderer/media/webrtc_local_audio_renderer.cc
index 53aad237f8..1deb11e26e 100644
--- a/content/renderer/media/webrtc_local_audio_renderer.cc
+++ b/content/renderer/media/webrtc_local_audio_renderer.cc
@@ -287,7 +287,7 @@ void WebRtcLocalAudioRenderer::MaybeStartSink() {
return;
DVLOG(1) << "WebRtcLocalAudioRenderer::MaybeStartSink() -- Starting sink_.";
- sink_->InitializeUnifiedStream(sink_params_, this, session_id_);
+ sink_->InitializeWithSessionId(sink_params_, this, session_id_);
sink_->Start();
sink_started_ = true;
UMA_HISTOGRAM_ENUMERATION("Media.LocalRendererSinkStates",
diff --git a/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc b/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
index 4a85903ee9..3374b7488d 100644
--- a/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
+++ b/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
@@ -4,6 +4,7 @@
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
+#include "content/renderer/media/mock_media_constraint_factory.h"
#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
#include "content/renderer/media/webrtc_local_audio_source_provider.h"
@@ -11,7 +12,6 @@
#include "media/audio/audio_parameters.h"
#include "media/base/audio_bus.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
namespace content {
@@ -29,10 +29,11 @@ class WebRtcLocalAudioSourceProviderTest : public testing::Test {
source_params_.frames_per_buffer() * source_params_.channels();
source_data_.reset(new int16[length]);
sink_bus_ = media::AudioBus::Create(sink_params_);
- blink::WebMediaConstraints constraints;
- scoped_refptr<WebRtcAudioCapturer> capturer(
- WebRtcAudioCapturer::CreateCapturer(-1, StreamDeviceInfo(),
- constraints, NULL, NULL));
+ MockMediaConstraintFactory constraint_factory;
+ scoped_refptr<WebRtcAudioCapturer> capturer(
+ WebRtcAudioCapturer::CreateCapturer(
+ -1, StreamDeviceInfo(),
+ constraint_factory.CreateWebMediaConstraints(), NULL, NULL));
scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
scoped_ptr<WebRtcLocalAudioTrack> native_track(
diff --git a/content/renderer/media/webrtc_local_audio_track.cc b/content/renderer/media/webrtc_local_audio_track.cc
index 22175f78c9..95f34f64ea 100644
--- a/content/renderer/media/webrtc_local_audio_track.cc
+++ b/content/renderer/media/webrtc_local_audio_track.cc
@@ -113,7 +113,7 @@ void WebRtcLocalAudioTrack::OnSetFormat(
void WebRtcLocalAudioTrack::SetAudioProcessor(
const scoped_refptr<MediaStreamAudioProcessor>& processor) {
// if the |processor| does not have audio processing, which can happen if
- // kEnableAudioTrackProcessing is not set or all the constraints in
+ // kDisableAudioTrackProcessing is set set or all the constraints in
// the |processor| are turned off. In such case, we pass NULL to the
// adapter to indicate that no stats can be gotten from the processor.
adapter_->SetAudioProcessor(processor->has_audio_processing() ?
diff --git a/content/renderer/media/webrtc_local_audio_track_unittest.cc b/content/renderer/media/webrtc_local_audio_track_unittest.cc
index 9bc9ff4cd5..64f4ef3158 100644
--- a/content/renderer/media/webrtc_local_audio_track_unittest.cc
+++ b/content/renderer/media/webrtc_local_audio_track_unittest.cc
@@ -170,7 +170,7 @@ class WebRtcLocalAudioTrackTest : public ::testing::Test {
virtual void SetUp() OVERRIDE {
params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
media::CHANNEL_LAYOUT_STEREO, 2, 0, 48000, 16, 480);
- blink::WebMediaConstraints constraints;
+ MockMediaConstraintFactory constraint_factory;
blink_source_.initialize("dummy", blink::WebMediaStreamSource::TypeAudio,
"dummy");
MediaStreamAudioSource* audio_source = new MediaStreamAudioSource();
@@ -178,9 +178,9 @@ class WebRtcLocalAudioTrackTest : public ::testing::Test {
StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE,
std::string(), std::string());
- capturer_ = WebRtcAudioCapturer::CreateCapturer(-1, device,
- constraints, NULL,
- audio_source);
+ capturer_ = WebRtcAudioCapturer::CreateCapturer(
+ -1, device, constraint_factory.CreateWebMediaConstraints(), NULL,
+ audio_source);
audio_source->SetAudioCapturer(capturer_);
capturer_source_ = new MockCapturerSource(capturer_.get());
EXPECT_CALL(*capturer_source_.get(), OnInitialize(_, capturer_.get(), -1))
@@ -446,11 +446,13 @@ TEST_F(WebRtcLocalAudioTrackTest, ConnectTracksToDifferentCapturers) {
track_1->AddSink(sink_1.get());
// Create a new capturer with new source with different audio format.
- blink::WebMediaConstraints constraints;
+ MockMediaConstraintFactory constraint_factory;
StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE,
std::string(), std::string());
scoped_refptr<WebRtcAudioCapturer> new_capturer(
- WebRtcAudioCapturer::CreateCapturer(-1, device, constraints, NULL, NULL));
+ WebRtcAudioCapturer::CreateCapturer(
+ -1, device, constraint_factory.CreateWebMediaConstraints(), NULL,
+ NULL));
scoped_refptr<MockCapturerSource> new_source(
new MockCapturerSource(new_capturer.get()));
EXPECT_CALL(*new_source.get(), OnInitialize(_, new_capturer.get(), -1));
diff --git a/content/renderer/net_info_helper.cc b/content/renderer/net_info_helper.cc
new file mode 100644
index 0000000000..8e0d651f79
--- /dev/null
+++ b/content/renderer/net_info_helper.cc
@@ -0,0 +1,31 @@
+// 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 "content/renderer/net_info_helper.h"
+
+namespace content {
+
+blink::WebConnectionType
+NetConnectionTypeToWebConnectionType(
+ net::NetworkChangeNotifier::ConnectionType net_type) {
+ switch (net_type) {
+ case net::NetworkChangeNotifier::CONNECTION_UNKNOWN:
+ return blink::ConnectionTypeOther;
+ case net::NetworkChangeNotifier::CONNECTION_ETHERNET:
+ return blink::ConnectionTypeEthernet;
+ case net::NetworkChangeNotifier::CONNECTION_WIFI:
+ return blink::ConnectionTypeWifi;
+ case net::NetworkChangeNotifier::CONNECTION_NONE:
+ return blink::ConnectionTypeNone;
+ case net::NetworkChangeNotifier::CONNECTION_2G:
+ case net::NetworkChangeNotifier::CONNECTION_3G:
+ case net::NetworkChangeNotifier::CONNECTION_4G:
+ return blink::ConnectionTypeCellular;
+ }
+
+ NOTREACHED();
+ return blink::ConnectionTypeNone;
+}
+
+} // namespace content
diff --git a/content/renderer/net_info_helper.h b/content/renderer/net_info_helper.h
new file mode 100644
index 0000000000..a9e19a03cf
--- /dev/null
+++ b/content/renderer/net_info_helper.h
@@ -0,0 +1,18 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
+#define CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
+
+#include "net/base/network_change_notifier.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
+
+namespace content {
+
+blink::WebConnectionType NetConnectionTypeToWebConnectionType(
+ net::NetworkChangeNotifier::ConnectionType type);
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_RENDERER_NET_INFO_HELPER_H_
diff --git a/content/renderer/notification_provider.cc b/content/renderer/notification_provider.cc
index 04f0a4aac2..79325dcb7a 100644
--- a/content/renderer/notification_provider.cc
+++ b/content/renderer/notification_provider.cc
@@ -78,10 +78,6 @@ WebNotificationPresenter::Permission NotificationProvider::checkPermission(
void NotificationProvider::requestPermission(
const WebSecurityOrigin& origin,
WebNotificationPermissionCallback* callback) {
- // We only request permission in response to a user gesture.
- if (!WebUserGestureIndicator::isProcessingUserGesture())
- return;
-
int id = manager_.RegisterPermissionRequest(callback);
Send(new DesktopNotificationHostMsg_RequestPermission(
diff --git a/content/renderer/p2p/ipc_network_manager.cc b/content/renderer/p2p/ipc_network_manager.cc
index a11e03cbab..9cf6cf5013 100644
--- a/content/renderer/p2p/ipc_network_manager.cc
+++ b/content/renderer/p2p/ipc_network_manager.cc
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/command_line.h"
+#include "base/metrics/histogram.h"
#include "base/sys_byteorder.h"
#include "content/public/common/content_switches.h"
#include "net/base/net_util.h"
@@ -30,7 +31,6 @@ talk_base::AdapterType ConvertConnectionTypeToAdapterType(
default:
return talk_base::ADAPTER_TYPE_UNKNOWN;
}
- return talk_base::ADAPTER_TYPE_UNKNOWN;
}
} // namespace
@@ -76,6 +76,8 @@ void IpcNetworkManager::OnNetworkListChanged(
// talk_base::Network uses these prefix_length to compare network
// interfaces discovered.
std::vector<talk_base::Network*> networks;
+ int ipv4_interfaces = 0;
+ int ipv6_interfaces = 0;
for (net::NetworkInterfaceList::const_iterator it = list.begin();
it != list.end(); it++) {
if (it->address.size() == net::kIPv4AddressSize) {
@@ -87,6 +89,7 @@ void IpcNetworkManager::OnNetworkListChanged(
ConvertConnectionTypeToAdapterType(it->type));
network->AddIP(talk_base::IPAddress(address));
networks.push_back(network);
+ ++ipv4_interfaces;
} else if (it->address.size() == net::kIPv6AddressSize) {
in6_addr address;
memcpy(&address, &it->address[0], sizeof(in6_addr));
@@ -97,10 +100,21 @@ void IpcNetworkManager::OnNetworkListChanged(
ConvertConnectionTypeToAdapterType(it->type));
network->AddIP(ip6_addr);
networks.push_back(network);
+ ++ipv6_interfaces;
}
}
}
+ if (ipv4_interfaces > 0) {
+ UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4Interfaces",
+ ipv4_interfaces);
+ }
+
+ if (ipv6_interfaces > 0) {
+ UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6Interfaces",
+ ipv6_interfaces);
+ }
+
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAllowLoopbackInPeerConnection)) {
std::string name_v4("loopback_ipv4");
diff --git a/content/renderer/p2p/ipc_socket_factory.cc b/content/renderer/p2p/ipc_socket_factory.cc
index 59d94ff683..d035494349 100644
--- a/content/renderer/p2p/ipc_socket_factory.cc
+++ b/content/renderer/p2p/ipc_socket_factory.cc
@@ -474,8 +474,12 @@ void IpcPacketSocket::OnSendComplete() {
void IpcPacketSocket::OnError() {
DCHECK_EQ(base::MessageLoop::current(), message_loop_);
+ bool was_closed = (state_ == IS_ERROR || state_ == IS_CLOSED);
state_ = IS_ERROR;
error_ = ECONNABORTED;
+ if (!was_closed) {
+ SignalClose(this, 0);
+ }
}
void IpcPacketSocket::OnDataReceived(const net::IPEndPoint& address,
diff --git a/content/renderer/p2p/port_allocator.cc b/content/renderer/p2p/port_allocator.cc
index 6c60f47173..61cfefd490 100644
--- a/content/renderer/p2p/port_allocator.cc
+++ b/content/renderer/p2p/port_allocator.cc
@@ -80,12 +80,7 @@ P2PPortAllocator::P2PPortAllocator(
if (config_.disable_tcp_transport)
flags |= cricket::PORTALLOCATOR_DISABLE_TCP;
set_flags(flags);
- // TODO(ronghuawu): crbug/138185 add ourselves to the firewall list in browser
- // process and then remove below line.
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableWebRtcTcpServerSocket)) {
- set_allow_tcp_listen(false);
- }
+ set_allow_tcp_listen(false);
}
P2PPortAllocator::~P2PPortAllocator() {
diff --git a/content/renderer/pepper/content_decryptor_delegate.cc b/content/renderer/pepper/content_decryptor_delegate.cc
index a36cf6f353..38c0293f24 100644
--- a/content/renderer/pepper/content_decryptor_delegate.cc
+++ b/content/renderer/pepper/content_decryptor_delegate.cc
@@ -591,6 +591,7 @@ void ContentDecryptorDelegate::OnSessionCreated(uint32 session_id,
void ContentDecryptorDelegate::OnSessionMessage(uint32 session_id,
PP_Var message_var,
PP_Var default_url_var) {
+ // TODO(amogh.bihani): Replace all the default_url with destination_url.
if (session_message_cb_.is_null())
return;
@@ -609,7 +610,14 @@ void ContentDecryptorDelegate::OnSessionMessage(uint32 session_id,
return;
}
- session_message_cb_.Run(session_id, message, default_url_string->value());
+ GURL verified_gurl = GURL(default_url_string->value());
+ if (!verified_gurl.is_valid() && !verified_gurl.is_empty()) {
+ DLOG(WARNING) << "SessionMessage default_url is invalid : "
+ << verified_gurl.possibly_invalid_spec();
+ verified_gurl = GURL::EmptyGURL(); // Replace invalid default_url.
+ }
+
+ session_message_cb_.Run(session_id, message, verified_gurl);
}
void ContentDecryptorDelegate::OnSessionReady(uint32 session_id) {
diff --git a/content/renderer/pepper/fake_pepper_plugin_instance.cc b/content/renderer/pepper/fake_pepper_plugin_instance.cc
index 4b050ed0fe..e00c1eeed2 100644
--- a/content/renderer/pepper/fake_pepper_plugin_instance.cc
+++ b/content/renderer/pepper/fake_pepper_plugin_instance.cc
@@ -73,6 +73,7 @@ void FakePepperPluginInstance::SetSelectedText(
void FakePepperPluginInstance::SetLinkUnderCursor(const std::string& url) {}
void FakePepperPluginInstance::SetTextInputType(ui::TextInputType type) {}
+void FakePepperPluginInstance::PostMessageToJavaScript(PP_Var message) {}
} // namespace content
diff --git a/content/renderer/pepper/fake_pepper_plugin_instance.h b/content/renderer/pepper/fake_pepper_plugin_instance.h
index 2b9a6803ad..99a0cee43a 100644
--- a/content/renderer/pepper/fake_pepper_plugin_instance.h
+++ b/content/renderer/pepper/fake_pepper_plugin_instance.h
@@ -42,6 +42,7 @@ class FakePepperPluginInstance : public PepperPluginInstance {
virtual void SetSelectedText(const base::string16& selected_text) OVERRIDE;
virtual void SetLinkUnderCursor(const std::string& url) OVERRIDE;
virtual void SetTextInputType(ui::TextInputType type) OVERRIDE;
+ virtual void PostMessageToJavaScript(PP_Var message) OVERRIDE;
private:
GURL gurl_;
diff --git a/content/renderer/pepper/message_channel.cc b/content/renderer/pepper/message_channel.cc
index 81f49e998f..12d24baeda 100644
--- a/content/renderer/pepper/message_channel.cc
+++ b/content/renderer/pepper/message_channel.cc
@@ -31,6 +31,7 @@
using ppapi::ArrayBufferVar;
using ppapi::PpapiGlobals;
+using ppapi::ScopedPPVar;
using ppapi::StringVar;
using blink::WebBindings;
using blink::WebElement;
@@ -65,56 +66,9 @@ NPObject* ToPassThroughObject(NPObject* object) {
return channel ? channel->passthrough_object() : NULL;
}
-// Helper function to determine if a given identifier is equal to kPostMessage.
-bool IdentifierIsPostMessage(NPIdentifier identifier) {
- return WebBindings::getStringIdentifier(kPostMessage) == identifier;
-}
-
-// Copy a PP_Var in to a PP_Var that is appropriate for sending via postMessage.
-// This currently just copies the value. For a string Var, the result is a
-// PP_Var with the a copy of |var|'s string contents and a reference count of 1.
-PP_Var CopyPPVar(const PP_Var& var) {
- switch (var.type) {
- case PP_VARTYPE_UNDEFINED:
- case PP_VARTYPE_NULL:
- case PP_VARTYPE_BOOL:
- case PP_VARTYPE_INT32:
- case PP_VARTYPE_DOUBLE:
- return var;
- case PP_VARTYPE_STRING: {
- StringVar* string = StringVar::FromPPVar(var);
- if (!string)
- return PP_MakeUndefined();
- return StringVar::StringToPPVar(string->value());
- }
- case PP_VARTYPE_ARRAY_BUFFER: {
- ArrayBufferVar* buffer = ArrayBufferVar::FromPPVar(var);
- if (!buffer)
- return PP_MakeUndefined();
- PP_Var new_buffer_var =
- PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar(
- buffer->ByteLength());
- DCHECK(new_buffer_var.type == PP_VARTYPE_ARRAY_BUFFER);
- if (new_buffer_var.type != PP_VARTYPE_ARRAY_BUFFER)
- return PP_MakeUndefined();
- ArrayBufferVar* new_buffer = ArrayBufferVar::FromPPVar(new_buffer_var);
- DCHECK(new_buffer);
- if (!new_buffer)
- return PP_MakeUndefined();
- memcpy(new_buffer->Map(), buffer->Map(), buffer->ByteLength());
- return new_buffer_var;
- }
- case PP_VARTYPE_OBJECT:
- case PP_VARTYPE_ARRAY:
- case PP_VARTYPE_DICTIONARY:
- case PP_VARTYPE_RESOURCE:
- // These types are not supported by PostMessage in-process. In some rare
- // cases with the NaCl plugin, they may be sent but they will be dropped
- // anyway (see crbug.com/318837 for details).
- return PP_MakeUndefined();
- }
- NOTREACHED();
- return PP_MakeUndefined();
+// Return true iff |identifier| is equal to |string|.
+bool IdentifierIs(NPIdentifier identifier, const char string[]) {
+ return WebBindings::getStringIdentifier(string) == identifier;
}
//------------------------------------------------------------------------------
@@ -137,8 +91,7 @@ bool MessageChannelHasMethod(NPObject* np_obj, NPIdentifier name) {
if (!np_obj)
return false;
- // We only handle a function called postMessage.
- if (IdentifierIsPostMessage(name))
+ if (IdentifierIs(name, kPostMessage))
return true;
// Other method names we will pass to the passthrough object, if we have one.
@@ -156,15 +109,15 @@ bool MessageChannelInvoke(NPObject* np_obj,
if (!np_obj)
return false;
- // We only handle a function called postMessage.
- if (IdentifierIsPostMessage(name) && (arg_count == 1)) {
- MessageChannel* message_channel = ToMessageChannel(np_obj);
- if (message_channel) {
- message_channel->NPVariantToPPVar(&args[0]);
- return true;
- } else {
- return false;
- }
+ MessageChannel* message_channel = ToMessageChannel(np_obj);
+ if (!message_channel)
+ return false;
+
+ // Check to see if we should handle this function ourselves. We only handle
+ // kPostMessage.
+ if (IdentifierIs(name, kPostMessage) && (arg_count == 1)) {
+ message_channel->PostMessageToNative(&args[0]);
+ return true;
}
// Other method calls we will pass to the passthrough object, if we have one.
NPObject* passthrough = ToPassThroughObject(np_obj);
@@ -215,7 +168,7 @@ bool MessageChannelGetProperty(NPObject* np_obj,
return false;
// Don't allow getting the postMessage function.
- if (IdentifierIsPostMessage(name))
+ if (IdentifierIs(name, kPostMessage))
return false;
MessageChannel* message_channel = ToMessageChannel(np_obj);
@@ -238,7 +191,7 @@ bool MessageChannelSetProperty(NPObject* np_obj,
return false;
// Don't allow setting the postMessage function.
- if (IdentifierIsPostMessage(name))
+ if (IdentifierIs(name, kPostMessage))
return false;
// Invoke on the passthrough object, if we have one.
@@ -294,12 +247,21 @@ NPClass message_channel_class = {
// MessageChannel --------------------------------------------------------------
struct MessageChannel::VarConversionResult {
- VarConversionResult(const ppapi::ScopedPPVar& r, bool s)
- : result(r), success(s), conversion_completed(true) {}
- VarConversionResult() : success(false), conversion_completed(false) {}
- ppapi::ScopedPPVar result;
- bool success;
- bool conversion_completed;
+ VarConversionResult() : success_(false), conversion_completed_(false) {}
+ void ConversionCompleted(const ScopedPPVar& var,
+ bool success) {
+ conversion_completed_ = true;
+ var_ = var;
+ success_ = success;
+ }
+ const ScopedPPVar& var() const { return var_; }
+ bool success() const { return success_; }
+ bool conversion_completed() const { return conversion_completed_; }
+
+ private:
+ ScopedPPVar var_;
+ bool success_;
+ bool conversion_completed_;
};
MessageChannel::MessageChannelNPObject::MessageChannelNPObject() {}
@@ -321,61 +283,30 @@ MessageChannel::MessageChannel(PepperPluginInstanceImpl* instance)
np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
}
-void MessageChannel::NPVariantToPPVar(const NPVariant* variant) {
- converted_var_queue_.push_back(VarConversionResult());
- std::list<VarConversionResult>::iterator result_iterator =
- --converted_var_queue_.end();
- switch (variant->type) {
- case NPVariantType_Void:
- NPVariantToPPVarComplete(
- result_iterator, ppapi::ScopedPPVar(PP_MakeUndefined()), true);
- return;
- case NPVariantType_Null:
- NPVariantToPPVarComplete(
- result_iterator, ppapi::ScopedPPVar(PP_MakeNull()), true);
- return;
- case NPVariantType_Bool:
- NPVariantToPPVarComplete(result_iterator,
- ppapi::ScopedPPVar(PP_MakeBool(PP_FromBool(
- NPVARIANT_TO_BOOLEAN(*variant)))),
- true);
- return;
- case NPVariantType_Int32:
- NPVariantToPPVarComplete(
- result_iterator,
- ppapi::ScopedPPVar(PP_MakeInt32(NPVARIANT_TO_INT32(*variant))),
- true);
- return;
- case NPVariantType_Double:
- NPVariantToPPVarComplete(
- result_iterator,
- ppapi::ScopedPPVar(PP_MakeDouble(NPVARIANT_TO_DOUBLE(*variant))),
- true);
- return;
- case NPVariantType_String:
- NPVariantToPPVarComplete(
- result_iterator,
- ppapi::ScopedPPVar(ppapi::ScopedPPVar::PassRef(),
- StringVar::StringToPPVar(
- NPVARIANT_TO_STRING(*variant).UTF8Characters,
- NPVARIANT_TO_STRING(*variant).UTF8Length)),
- true);
- return;
- case NPVariantType_Object: {
- // Calling WebBindings::toV8Value creates a wrapper around NPVariant so it
- // shouldn't result in a deep copy.
- v8::Handle<v8::Value> v8_value = WebBindings::toV8Value(variant);
- V8VarConverter(instance_->pp_instance())
- .FromV8Value(v8_value,
- v8::Isolate::GetCurrent()->GetCurrentContext(),
- base::Bind(&MessageChannel::NPVariantToPPVarComplete,
- weak_ptr_factory_.GetWeakPtr(),
- result_iterator));
- return;
- }
+void MessageChannel::EnqueuePluginMessage(const NPVariant* variant) {
+ plugin_message_queue_.push_back(VarConversionResult());
+ if (variant->type == NPVariantType_Object) {
+ // Convert NPVariantType_Object in to an appropriate PP_Var like Dictionary,
+ // Array, etc. Note NPVariantToVar would convert to an "Object" PP_Var,
+ // which we don't support for Messaging.
+
+ // Calling WebBindings::toV8Value creates a wrapper around NPVariant so it
+ // won't result in a deep copy.
+ v8::Handle<v8::Value> v8_value = WebBindings::toV8Value(variant);
+ V8VarConverter v8_var_converter(instance_->pp_instance());
+ v8_var_converter.FromV8Value(
+ v8_value,
+ v8::Isolate::GetCurrent()->GetCurrentContext(),
+ base::Bind(&MessageChannel::FromV8ValueComplete,
+ weak_ptr_factory_.GetWeakPtr(),
+ &plugin_message_queue_.back()));
+ } else {
+ plugin_message_queue_.back().ConversionCompleted(
+ ScopedPPVar(ScopedPPVar::PassRef(),
+ NPVariantToPPVar(instance(), variant)),
+ true);
+ DCHECK(plugin_message_queue_.back().var().get().type != PP_VARTYPE_OBJECT);
}
- NPVariantToPPVarComplete(
- result_iterator, ppapi::ScopedPPVar(PP_MakeUndefined()), false);
}
void MessageChannel::PostMessageToJavaScript(PP_Var message_data) {
@@ -409,82 +340,69 @@ void MessageChannel::PostMessageToJavaScript(PP_Var message_data) {
WebSerializedScriptValue serialized_val =
WebSerializedScriptValue::serialize(v8_val);
- if (instance_->module()->IsProxied()) {
- if (early_message_queue_state_ != SEND_DIRECTLY) {
- // We can't just PostTask here; the messages would arrive out of
- // order. Instead, we queue them up until we're ready to post
- // them.
- early_message_queue_.push_back(serialized_val);
- } else {
- // The proxy sent an asynchronous message, so the plugin is already
- // unblocked. Therefore, there's no need to PostTask.
- DCHECK(early_message_queue_.size() == 0);
- PostMessageToJavaScriptImpl(serialized_val);
- }
+ if (early_message_queue_state_ != SEND_DIRECTLY) {
+ // We can't just PostTask here; the messages would arrive out of
+ // order. Instead, we queue them up until we're ready to post
+ // them.
+ early_message_queue_.push_back(serialized_val);
} else {
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&MessageChannel::PostMessageToJavaScriptImpl,
- weak_ptr_factory_.GetWeakPtr(),
- serialized_val));
+ // The proxy sent an asynchronous message, so the plugin is already
+ // unblocked. Therefore, there's no need to PostTask.
+ DCHECK(early_message_queue_.empty());
+ PostMessageToJavaScriptImpl(serialized_val);
}
}
-void MessageChannel::StopQueueingJavaScriptMessages() {
+void MessageChannel::Start() {
// We PostTask here instead of draining the message queue directly
// since we haven't finished initializing the PepperWebPluginImpl yet, so
// the plugin isn't available in the DOM.
- early_message_queue_state_ = DRAIN_PENDING;
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(&MessageChannel::DrainEarlyMessageQueue,
weak_ptr_factory_.GetWeakPtr()));
}
-void MessageChannel::QueueJavaScriptMessages() {
- if (early_message_queue_state_ == DRAIN_PENDING)
- early_message_queue_state_ = DRAIN_CANCELLED;
- else
- early_message_queue_state_ = QUEUE_MESSAGES;
+void MessageChannel::FromV8ValueComplete(VarConversionResult* result_holder,
+ const ScopedPPVar& result,
+ bool success) {
+ result_holder->ConversionCompleted(result, success);
+ DrainCompletedPluginMessages();
}
-void MessageChannel::NPVariantToPPVarComplete(
- const std::list<VarConversionResult>::iterator& result_iterator,
- const ppapi::ScopedPPVar& result,
- bool success) {
- *result_iterator = VarConversionResult(result, success);
- std::list<VarConversionResult>::iterator it = converted_var_queue_.begin();
- while (it != converted_var_queue_.end() && it->conversion_completed) {
- if (it->success) {
- PostMessageToNative(it->result.get());
+void MessageChannel::DrainCompletedPluginMessages() {
+ if (early_message_queue_state_ == QUEUE_MESSAGES)
+ return;
+
+ while (!plugin_message_queue_.empty() &&
+ plugin_message_queue_.front().conversion_completed()) {
+ const VarConversionResult& front = plugin_message_queue_.front();
+ if (front.success()) {
+ instance_->HandleMessage(front.var());
} else {
PpapiGlobals::Get()->LogWithSource(instance()->pp_instance(),
PP_LOGLEVEL_ERROR,
std::string(),
kV8ToVarConversionError);
}
-
- converted_var_queue_.erase(it++);
+ plugin_message_queue_.pop_front();
}
}
void MessageChannel::DrainEarlyMessageQueue() {
+ DCHECK(early_message_queue_state_ == QUEUE_MESSAGES);
+
// Take a reference on the PluginInstance. This is because JavaScript code
// may delete the plugin, which would destroy the PluginInstance and its
// corresponding MessageChannel.
scoped_refptr<PepperPluginInstanceImpl> instance_ref(instance_);
-
- if (early_message_queue_state_ == DRAIN_CANCELLED) {
- early_message_queue_state_ = QUEUE_MESSAGES;
- return;
- }
- DCHECK(early_message_queue_state_ == DRAIN_PENDING);
-
while (!early_message_queue_.empty()) {
PostMessageToJavaScriptImpl(early_message_queue_.front());
early_message_queue_.pop_front();
}
early_message_queue_state_ = SEND_DIRECTLY;
+
+ DrainCompletedPluginMessages();
}
void MessageChannel::PostMessageToJavaScriptImpl(
@@ -515,30 +433,12 @@ void MessageChannel::PostMessageToJavaScriptImpl(
// at least, postMessage on Workers does not provide the origin or source.
// TODO(dmichael): Add origin if we change to a more iframe-like origin
// policy (see crbug.com/81537)
-
container->element().dispatchEvent(msg_event);
}
-void MessageChannel::PostMessageToNative(PP_Var message_data) {
- if (instance_->module()->IsProxied()) {
- // In the proxied case, the copy will happen via serializiation, and the
- // message is asynchronous. Therefore there's no need to copy the Var, nor
- // to PostTask.
- PostMessageToNativeImpl(message_data);
- } else {
- // Make a copy of the message data for the Task we will run.
- PP_Var var_copy(CopyPPVar(message_data));
-
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&MessageChannel::PostMessageToNativeImpl,
- weak_ptr_factory_.GetWeakPtr(),
- var_copy));
- }
-}
-
-void MessageChannel::PostMessageToNativeImpl(PP_Var message_data) {
- instance_->HandleMessage(message_data);
+void MessageChannel::PostMessageToNative(const NPVariant* message_data) {
+ EnqueuePluginMessage(message_data);
+ DrainCompletedPluginMessages();
}
MessageChannel::~MessageChannel() {
@@ -565,7 +465,7 @@ void MessageChannel::SetPassthroughObject(NPObject* passthrough) {
bool MessageChannel::GetReadOnlyProperty(NPIdentifier key,
NPVariant* value) const {
- std::map<NPIdentifier, ppapi::ScopedPPVar>::const_iterator it =
+ std::map<NPIdentifier, ScopedPPVar>::const_iterator it =
internal_properties_.find(key);
if (it != internal_properties_.end()) {
if (value)
@@ -576,7 +476,7 @@ bool MessageChannel::GetReadOnlyProperty(NPIdentifier key,
}
void MessageChannel::SetReadOnlyProperty(PP_Var key, PP_Var value) {
- internal_properties_[PPVarToNPIdentifier(key)] = ppapi::ScopedPPVar(value);
+ internal_properties_[PPVarToNPIdentifier(key)] = ScopedPPVar(value);
}
} // namespace content
diff --git a/content/renderer/pepper/message_channel.h b/content/renderer/pepper/message_channel.h
index 222d56c1f0..077a68dfa7 100644
--- a/content/renderer/pepper/message_channel.h
+++ b/content/renderer/pepper/message_channel.h
@@ -53,16 +53,13 @@ class MessageChannel {
explicit MessageChannel(PepperPluginInstanceImpl* instance);
~MessageChannel();
- // Converts an NPVariant to a PP_Var. This occurs asynchronously and
- // NPVariantToPPVarComplete will be called upon completion.
- void NPVariantToPPVar(const NPVariant* variant);
-
// Post a message to the onmessage handler for this channel's instance
// asynchronously.
void PostMessageToJavaScript(PP_Var message_data);
- // Post a message to the PPP_Instance HandleMessage function for this
- // channel's instance.
- void PostMessageToNative(PP_Var message_data);
+
+ // Post a message to the plugin's HandleMessage function for this channel's
+ // instance.
+ void PostMessageToNative(const NPVariant* message_data);
// Return the NPObject* to which we should forward any calls which aren't
// related to postMessage. Note that this can be NULL; it only gets set if
@@ -75,11 +72,10 @@ class MessageChannel {
PepperPluginInstanceImpl* instance() { return instance_; }
- // Messages sent to JavaScript are queued by default. After the DOM is
- // set up for the plugin, users of MessageChannel should call
- // StopQueueingJavaScriptMessages to start dispatching messages to JavaScript.
- void QueueJavaScriptMessages();
- void StopQueueingJavaScriptMessages();
+ // Messages are queued initially. After the PepperPluginInstanceImpl is ready
+ // to send and handle messages, users of MessageChannel should call
+ // Start().
+ void Start();
bool GetReadOnlyProperty(NPIdentifier key, NPVariant* value) const;
void SetReadOnlyProperty(PP_Var key, PP_Var value);
@@ -88,13 +84,12 @@ class MessageChannel {
// Struct for storing the result of a NPVariant being converted to a PP_Var.
struct VarConversionResult;
- // This is called when an NPVariant is finished being converted.
- // |result_iteartor| is an iterator into |converted_var_queue_| where the
- // result should be stored.
- void NPVariantToPPVarComplete(
- const std::list<VarConversionResult>::iterator& result_iterator,
- const ppapi::ScopedPPVar& result,
- bool success);
+ void EnqueuePluginMessage(const NPVariant* variant);
+
+ void FromV8ValueComplete(VarConversionResult* result_holder,
+ const ppapi::ScopedPPVar& result_var,
+ bool success);
+ void DrainCompletedPluginMessages();
PepperPluginInstanceImpl* instance_;
@@ -118,22 +113,22 @@ class MessageChannel {
void DrainEarlyMessageQueue();
- // TODO(teravest): Remove all the tricky DRAIN_CANCELLED logic once
- // PluginInstance::ResetAsProxied() is gone.
std::deque<blink::WebSerializedScriptValue> early_message_queue_;
enum EarlyMessageQueueState {
QUEUE_MESSAGES, // Queue JS messages.
SEND_DIRECTLY, // Post JS messages directly.
- DRAIN_PENDING, // Drain queue, then transition to DIRECT.
- DRAIN_CANCELLED // Preempt drain, go back to QUEUE.
};
EarlyMessageQueueState early_message_queue_state_;
- // This queue stores vars that have been converted from NPVariants. Because
- // conversion can happen asynchronously, the queue stores the var until all
- // previous vars have been converted before calling PostMessage to ensure that
- // the order in which messages are processed is preserved.
- std::list<VarConversionResult> converted_var_queue_;
+ // This queue stores vars that are being sent to the plugin. Because
+ // conversion can happen asynchronously for object types, the queue stores
+ // the var until all previous vars have been converted and sent. This
+ // preserves the order in which JS->plugin messages are processed.
+ //
+ // Note we rely on raw VarConversionResult* pointers remaining valid after
+ // calls to push_back or pop_front; hence why we're using list. (deque would
+ // probably also work, but is less clearly specified).
+ std::list<VarConversionResult> plugin_message_queue_;
std::map<NPIdentifier, ppapi::ScopedPPVar> internal_properties_;
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.cc b/content/renderer/pepper/mock_renderer_ppapi_host.cc
index da95d8f91f..0f7b6e8557 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.cc
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.cc
@@ -79,6 +79,14 @@ IPC::PlatformFileForTransit MockRendererPpapiHost::ShareHandleWithRemote(
bool MockRendererPpapiHost::IsRunningInProcess() const { return false; }
+std::string MockRendererPpapiHost::GetPluginName() const {
+ return std::string();
+}
+
+void MockRendererPpapiHost::SetToExternalPluginHost() {
+ NOTIMPLEMENTED();
+}
+
void MockRendererPpapiHost::CreateBrowserResourceHosts(
PP_Instance instance,
const std::vector<IPC::Message>& nested_msgs,
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h
index f1ebbbce63..62c9d650f1 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.h
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.h
@@ -52,6 +52,8 @@ class MockRendererPpapiHost : public RendererPpapiHost {
base::PlatformFile handle,
bool should_close_source) OVERRIDE;
virtual bool IsRunningInProcess() const OVERRIDE;
+ virtual std::string GetPluginName() const OVERRIDE;
+ virtual void SetToExternalPluginHost() OVERRIDE;
virtual void CreateBrowserResourceHosts(
PP_Instance instance,
const std::vector<IPC::Message>& nested_msgs,
diff --git a/content/renderer/pepper/pepper_audio_input_host.cc b/content/renderer/pepper/pepper_audio_input_host.cc
index d0f1601eec..a86e1775d3 100644
--- a/content/renderer/pepper/pepper_audio_input_host.cc
+++ b/content/renderer/pepper/pepper_audio_input_host.cc
@@ -60,12 +60,12 @@ int32_t PepperAudioInputHost::OnResourceMessageReceived(
if (enumeration_helper_.HandleResourceMessage(msg, context, &result))
return result;
- IPC_BEGIN_MESSAGE_MAP(PepperAudioInputHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioInput_Open, OnOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioInput_StartOrStop,
- OnStartOrStop);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_AudioInput_Close, OnClose);
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperAudioInputHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioInput_Open, OnOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_AudioInput_StartOrStop,
+ OnStartOrStop)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_AudioInput_Close, OnClose)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_browser_connection.cc b/content/renderer/pepper/pepper_browser_connection.cc
index 3394c5665e..892506ede2 100644
--- a/content/renderer/pepper/pepper_browser_connection.cc
+++ b/content/renderer/pepper/pepper_browser_connection.cc
@@ -30,9 +30,9 @@ bool PepperBrowserConnection::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PepperBrowserConnection, msg)
- IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHostReply,
- OnMsgCreateResourceHostsFromHostReply)
- IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_MESSAGE_HANDLER(PpapiHostMsg_CreateResourceHostsFromHostReply,
+ OnMsgCreateResourceHostsFromHostReply)
+ IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
index 03a2b0216f..d983f4a581 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
@@ -115,15 +115,16 @@ int32_t PepperDeviceEnumerationHostHelper::InternalHandleResourceMessage(
HostMessageContext* context,
bool* handled) {
*handled = true;
- IPC_BEGIN_MESSAGE_MAP(PepperDeviceEnumerationHostHelper, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_DeviceEnumeration_EnumerateDevices, OnEnumerateDevices)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_DeviceEnumeration_MonitorDeviceChange, OnMonitorDeviceChange)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_DeviceEnumeration_StopMonitoringDeviceChange,
- OnStopMonitoringDeviceChange)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperDeviceEnumerationHostHelper, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_DeviceEnumeration_EnumerateDevices, OnEnumerateDevices)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_DeviceEnumeration_MonitorDeviceChange,
+ OnMonitorDeviceChange)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_DeviceEnumeration_StopMonitoringDeviceChange,
+ OnStopMonitoringDeviceChange)
+ PPAPI_END_MESSAGE_MAP()
*handled = false;
return PP_ERROR_FAILED;
diff --git a/content/renderer/pepper/pepper_file_chooser_host.cc b/content/renderer/pepper/pepper_file_chooser_host.cc
index e65cc72c0f..d067c201e3 100644
--- a/content/renderer/pepper/pepper_file_chooser_host.cc
+++ b/content/renderer/pepper/pepper_file_chooser_host.cc
@@ -82,9 +82,9 @@ PepperFileChooserHost::~PepperFileChooserHost() {}
int32_t PepperFileChooserHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperFileChooserHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileChooser_Show, OnShow)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFileChooserHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileChooser_Show, OnShow)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_file_system_host.cc b/content/renderer/pepper/pepper_file_system_host.cc
index 2dc3403602..036d319a61 100644
--- a/content/renderer/pepper/pepper_file_system_host.cc
+++ b/content/renderer/pepper/pepper_file_system_host.cc
@@ -53,12 +53,13 @@ PepperFileSystemHost::~PepperFileSystemHost() {}
int32_t PepperFileSystemHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperFileSystemHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_Open, OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_FileSystem_InitIsolatedFileSystem,
- OnHostMsgInitIsolatedFileSystem)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperFileSystemHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_FileSystem_Open,
+ OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_FileSystem_InitIsolatedFileSystem,
+ OnHostMsgInitIsolatedFileSystem)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc
index 6cce27eea0..a33b994d81 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.cc
+++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -221,20 +221,20 @@ bool PepperGraphics2DHost::Init(
int32_t PepperGraphics2DHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperGraphics2DHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_PaintImageData,
- OnHostMsgPaintImageData)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_Scroll,
- OnHostMsgScroll)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_ReplaceContents,
- OnHostMsgReplaceContents)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Graphics2D_Flush,
+ PPAPI_BEGIN_MESSAGE_MAP(PepperGraphics2DHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_PaintImageData,
+ OnHostMsgPaintImageData)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_Scroll,
+ OnHostMsgScroll)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_ReplaceContents,
+ OnHostMsgReplaceContents)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_Flush,
OnHostMsgFlush)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_SetScale,
- OnHostMsgSetScale)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_ReadImageData,
- OnHostMsgReadImageData)
- IPC_END_MESSAGE_MAP()
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_SetScale,
+ OnHostMsgSetScale)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_Graphics2D_ReadImageData,
+ OnHostMsgReadImageData)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
@@ -500,11 +500,15 @@ int32_t PepperGraphics2DHost::OnHostMsgReplaceContents(
}
int32_t PepperGraphics2DHost::OnHostMsgFlush(
- ppapi::host::HostMessageContext* context) {
+ ppapi::host::HostMessageContext* context,
+ const std::vector<ui::LatencyInfo>& latency_info) {
// Don't allow more than one pending flush at a time.
if (HasPendingFlush())
return PP_ERROR_INPROGRESS;
+ if (bound_instance_)
+ bound_instance_->AddLatencyInfo(latency_info);
+
PP_Resource old_image_data = 0;
flush_reply_context_ = context->MakeReplyMessageContext();
if (is_running_in_process_)
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.h b/content/renderer/pepper/pepper_graphics_2d_host.h
index 71eb59f4e2..25df4d179a 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host.h
+++ b/content/renderer/pepper/pepper_graphics_2d_host.h
@@ -15,6 +15,7 @@
#include "ppapi/host/host_message_context.h"
#include "ppapi/host/resource_host.h"
#include "third_party/WebKit/public/platform/WebCanvas.h"
+#include "ui/events/latency_info.h"
#include "ui/gfx/point.h"
#include "ui/gfx/size.h"
@@ -105,7 +106,8 @@ class CONTENT_EXPORT PepperGraphics2DHost
const PP_Point& amount);
int32_t OnHostMsgReplaceContents(ppapi::host::HostMessageContext* context,
const ppapi::HostResource& image_data);
- int32_t OnHostMsgFlush(ppapi::host::HostMessageContext* context);
+ int32_t OnHostMsgFlush(ppapi::host::HostMessageContext* context,
+ const std::vector<ui::LatencyInfo>& latency_info);
int32_t OnHostMsgSetScale(ppapi::host::HostMessageContext* context,
float scale);
int32_t OnHostMsgReadImageData(ppapi::host::HostMessageContext* context,
diff --git a/content/renderer/pepper/pepper_graphics_2d_host_unittest.cc b/content/renderer/pepper/pepper_graphics_2d_host_unittest.cc
index d16c86314b..8914a3d801 100644
--- a/content/renderer/pepper/pepper_graphics_2d_host_unittest.cc
+++ b/content/renderer/pepper/pepper_graphics_2d_host_unittest.cc
@@ -15,6 +15,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebCanvas.h"
#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/events/latency_info.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
@@ -64,7 +65,8 @@ class PepperGraphics2DHostTest : public testing::Test {
void Flush() {
ppapi::host::HostMessageContext context(
ppapi::proxy::ResourceMessageCallParams(host_->pp_resource(), 0));
- host_->OnHostMsgFlush(&context);
+ std::vector<ui::LatencyInfo> latency;
+ host_->OnHostMsgFlush(&context, latency);
host_->ViewFlushedPaint();
host_->SendOffscreenFlushAck();
}
diff --git a/content/renderer/pepper/pepper_media_stream_track_host_base.cc b/content/renderer/pepper/pepper_media_stream_track_host_base.cc
index 4a22c49894..d76684eecf 100644
--- a/content/renderer/pepper/pepper_media_stream_track_host_base.cc
+++ b/content/renderer/pepper/pepper_media_stream_track_host_base.cc
@@ -91,12 +91,12 @@ void PepperMediaStreamTrackHostBase::SendEnqueueBuffersMessageToPlugin(
int32_t PepperMediaStreamTrackHostBase::OnResourceMessageReceived(
const IPC::Message& msg,
HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperMediaStreamTrackHostBase, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_MediaStreamTrack_EnqueueBuffer,
- OnHostMsgEnqueueBuffer)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_MediaStreamTrack_Close,
- OnHostMsgClose)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperMediaStreamTrackHostBase, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_MediaStreamTrack_EnqueueBuffer, OnHostMsgEnqueueBuffer)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_MediaStreamTrack_Close,
+ OnHostMsgClose)
+ PPAPI_END_MESSAGE_MAP()
return ppapi::host::ResourceHost::OnResourceMessageReceived(msg, context);
}
diff --git a/content/renderer/pepper/pepper_media_stream_video_track_host.cc b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
index 7d98e719ff..e12ed40120 100644
--- a/content/renderer/pepper/pepper_media_stream_video_track_host.cc
+++ b/content/renderer/pepper/pepper_media_stream_video_track_host.cc
@@ -9,6 +9,7 @@
#include "base/rand_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/renderer/media/media_stream_video_track.h"
+#include "media/base/bind_to_current_loop.h"
#include "media/base/yuv_convert.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_media_stream_video_track.h"
@@ -240,7 +241,8 @@ PepperMediaStreamVideoTrackHost::PepperMediaStreamVideoTrackHost(
plugin_frame_format_(PP_VIDEOFRAME_FORMAT_UNKNOWN),
frame_data_size_(0),
type_(kRead),
- output_started_(false) {
+ output_started_(false),
+ weak_factory_(this) {
DCHECK(!track_.isNull());
}
@@ -255,7 +257,8 @@ PepperMediaStreamVideoTrackHost::PepperMediaStreamVideoTrackHost(
plugin_frame_format_(PP_VIDEOFRAME_FORMAT_UNKNOWN),
frame_data_size_(0),
type_(kWrite),
- output_started_(false) {
+ output_started_(false),
+ weak_factory_(this) {
InitBlinkTrack();
DCHECK(!track_.isNull());
}
@@ -312,6 +315,7 @@ void PepperMediaStreamVideoTrackHost::InitBuffers() {
void PepperMediaStreamVideoTrackHost::OnClose() {
if (connected_) {
MediaStreamVideoSink::RemoveFromVideoTrack(this, track_);
+ weak_factory_.InvalidateWeakPtrs();
connected_ = false;
}
}
@@ -376,7 +380,8 @@ int32_t PepperMediaStreamVideoTrackHost::SendFrameToTrack(int32_t index) {
}
void PepperMediaStreamVideoTrackHost::OnVideoFrame(
- const scoped_refptr<VideoFrame>& frame) {
+ const scoped_refptr<VideoFrame>& frame,
+ const media::VideoCaptureFormat& format) {
DCHECK(frame);
// TODO(penghuang): Check |frame->end_of_stream()| and close the track.
PP_VideoFrame_Format ppformat = ToPpapiFormat(frame->format());
@@ -400,18 +405,18 @@ void PepperMediaStreamVideoTrackHost::OnVideoFrame(
CHECK_EQ(ppformat, source_frame_format_) << "Frame format is changed.";
gfx::Size size = GetTargetSize(source_frame_size_, plugin_frame_size_);
- PP_VideoFrame_Format format =
+ ppformat =
GetTargetFormat(source_frame_format_, plugin_frame_format_);
ppapi::MediaStreamBuffer::Video* buffer =
&(buffer_manager()->GetBufferPointer(index)->video);
buffer->header.size = buffer_manager()->buffer_size();
buffer->header.type = ppapi::MediaStreamBuffer::TYPE_VIDEO;
buffer->timestamp = frame->timestamp().InSecondsF();
- buffer->format = format;
+ buffer->format = ppformat;
buffer->size.width = size.width();
buffer->size.height = size.height();
buffer->data_size = frame_data_size_;
- ConvertFromMediaVideoFrame(frame, format, size, buffer->data);
+ ConvertFromMediaVideoFrame(frame, ppformat, size, buffer->data);
SendEnqueueBufferMessageToPlugin(index);
}
@@ -447,7 +452,13 @@ void PepperMediaStreamVideoTrackHost::StopSourceImpl() {
void PepperMediaStreamVideoTrackHost::DidConnectPendingHostToResource() {
if (!connected_) {
- MediaStreamVideoSink::AddToVideoTrack(this, track_);
+ MediaStreamVideoSink::AddToVideoTrack(
+ this,
+ media::BindToCurrentLoop(
+ base::Bind(
+ &PepperMediaStreamVideoTrackHost::OnVideoFrame,
+ weak_factory_.GetWeakPtr())),
+ track_);
connected_ = true;
}
}
@@ -455,10 +466,10 @@ void PepperMediaStreamVideoTrackHost::DidConnectPendingHostToResource() {
int32_t PepperMediaStreamVideoTrackHost::OnResourceMessageReceived(
const IPC::Message& msg,
HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperMediaStreamVideoTrackHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(
- PpapiHostMsg_MediaStreamVideoTrack_Configure, OnHostMsgConfigure)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperMediaStreamVideoTrackHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(
+ PpapiHostMsg_MediaStreamVideoTrack_Configure, OnHostMsgConfigure)
+ PPAPI_END_MESSAGE_MAP()
return PepperMediaStreamTrackHostBase::OnResourceMessageReceived(msg,
context);
}
diff --git a/content/renderer/pepper/pepper_media_stream_video_track_host.h b/content/renderer/pepper/pepper_media_stream_video_track_host.h
index 36587068f1..b985b386b0 100644
--- a/content/renderer/pepper/pepper_media_stream_video_track_host.h
+++ b/content/renderer/pepper/pepper_media_stream_video_track_host.h
@@ -6,6 +6,7 @@
#define CONTENT_RENDERER_PEPPER_PEPPER_MEDIA_STREAM_VIDEO_TRACK_HOST_H_
#include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
#include "content/public/renderer/media_stream_video_sink.h"
#include "content/renderer/media/media_stream_video_source.h"
#include "content/renderer/pepper/pepper_media_stream_track_host_base.h"
@@ -54,9 +55,8 @@ class PepperMediaStreamVideoTrackHost : public PepperMediaStreamTrackHostBase,
// Sends frame with |index| to |track_|.
int32_t SendFrameToTrack(int32_t index);
- // MediaStreamVideoSink overrides:
- virtual void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame)
- OVERRIDE;
+ void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
+ const media::VideoCaptureFormat& format);
// MediaStreamVideoSource overrides:
virtual void GetCurrentSupportedFormats(
@@ -119,6 +119,8 @@ class PepperMediaStreamVideoTrackHost : public PepperMediaStreamTrackHostBase,
class FrameDeliverer;
scoped_refptr<FrameDeliverer> frame_deliverer_;
+ base::WeakPtrFactory<PepperMediaStreamVideoTrackHost> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(PepperMediaStreamVideoTrackHost);
};
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index 283db70dfd..c1bc651ca3 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -16,11 +16,15 @@
#include "base/strings/utf_offset_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
+#include "cc/base/latency_info_swap_promise.h"
#include "cc/layers/texture_layer.h"
+#include "cc/trees/layer_tree_host.h"
#include "content/common/content_constants_internal.h"
+#include "content/common/input/web_input_event_traits.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/page_zoom.h"
#include "content/public/renderer/content_renderer_client.h"
+#include "content/renderer/gpu/render_widget_compositor.h"
#include "content/renderer/pepper/common.h"
#include "content/renderer/pepper/content_decryptor_delegate.h"
#include "content/renderer/pepper/event_conversion.h"
@@ -80,6 +84,7 @@
#include "ppapi/shared_impl/ppp_instance_combined.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/scoped_pp_resource.h"
+#include "ppapi/shared_impl/scoped_pp_var.h"
#include "ppapi/shared_impl/time_conversion.h"
#include "ppapi/shared_impl/url_request_info_data.h"
#include "ppapi/shared_impl/var.h"
@@ -146,6 +151,7 @@ using ppapi::PPB_View_Shared;
using ppapi::PPP_Instance_Combined;
using ppapi::Resource;
using ppapi::ScopedPPResource;
+using ppapi::ScopedPPVar;
using ppapi::StringVar;
using ppapi::TrackedCallback;
using ppapi::thunk::EnterResourceNoLock;
@@ -402,6 +408,23 @@ class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget {
PepperPluginInstanceImpl* plugin_;
};
+void InitLatencyInfo(ui::LatencyInfo* new_latency,
+ const ui::LatencyInfo* old_latency,
+ blink::WebInputEvent::Type type,
+ int64 input_sequence) {
+ new_latency->AddLatencyNumber(
+ ui::INPUT_EVENT_LATENCY_BEGIN_PLUGIN_COMPONENT,
+ 0,
+ input_sequence);
+ new_latency->TraceEventType(WebInputEventTraits::GetName(type));
+ if (old_latency) {
+ new_latency->CopyLatencyFrom(*old_latency,
+ ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT);
+ new_latency->CopyLatencyFrom(*old_latency,
+ ui::INPUT_EVENT_LATENCY_UI_COMPONENT);
+ }
+}
+
} // namespace
// static
@@ -536,6 +559,8 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl(
npp_(new NPP_t),
isolate_(v8::Isolate::GetCurrent()),
is_deleted_(false),
+ last_input_number_(0),
+ is_tracking_latency_(false),
view_change_weak_ptr_factory_(this),
weak_factory_(this) {
pp_instance_ = HostGlobals::Get()->AddInstance(this);
@@ -822,8 +847,14 @@ bool PepperPluginInstanceImpl::Initialize(
scoped_ptr<const char * []> argv_array(StringVectorToArgArray(argv_));
bool success = PP_ToBool(instance_interface_->DidCreate(
pp_instance(), argn_.size(), argn_array.get(), argv_array.get()));
- if (success)
- message_channel_->StopQueueingJavaScriptMessages();
+ // If this is a plugin that hosts external plugins, we should delay messages
+ // so that the child plugin that's created later will receive all the
+ // messages. (E.g., NaCl trusted plugin starting a child NaCl app.)
+ //
+ // A host for external plugins will call ResetAsProxied later, at which point
+ // we can Start() the message_channel_.
+ if (success && (!module_->renderer_ppapi_host()->IsExternalPluginHost()))
+ message_channel_->Start();
return success;
}
@@ -1091,8 +1122,20 @@ bool PepperPluginInstanceImpl::HandleInputEvent(
pending_user_gesture_token_.setOutOfProcess();
}
+ const ui::LatencyInfo* current_event_latency_info = NULL;
+ if (render_frame_->GetRenderWidget()) {
+ current_event_latency_info =
+ render_frame_->GetRenderWidget()->current_event_latency_info();
+ }
+
// Each input event may generate more than one PP_InputEvent.
for (size_t i = 0; i < events.size(); i++) {
+ if (is_tracking_latency_) {
+ InitLatencyInfo(&events[i].latency_info,
+ current_event_latency_info,
+ event.type,
+ last_input_number_++);
+ }
if (filtered_input_event_mask_ & event_class)
events[i].is_filtered = true;
else
@@ -1112,11 +1155,11 @@ bool PepperPluginInstanceImpl::HandleInputEvent(
return rv;
}
-void PepperPluginInstanceImpl::HandleMessage(PP_Var message) {
+void PepperPluginInstanceImpl::HandleMessage(ScopedPPVar message) {
TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleMessage");
ppapi::proxy::HostDispatcher* dispatcher =
ppapi::proxy::HostDispatcher::GetForInstance(pp_instance());
- if (!dispatcher || (message.type == PP_VARTYPE_OBJECT)) {
+ if (!dispatcher || (message.get().type == PP_VARTYPE_OBJECT)) {
// The dispatcher should always be valid, and the browser should never send
// an 'object' var over PPP_Messaging.
NOTREACHED();
@@ -1125,7 +1168,7 @@ void PepperPluginInstanceImpl::HandleMessage(PP_Var message) {
dispatcher->Send(new PpapiMsg_PPPMessaging_HandleMessage(
ppapi::API_ID_PPP_MESSAGING,
pp_instance(),
- ppapi::proxy::SerializedVarSendInputShmem(dispatcher, message,
+ ppapi::proxy::SerializedVarSendInputShmem(dispatcher, message.get(),
pp_instance())));
}
@@ -1258,6 +1301,10 @@ void PepperPluginInstanceImpl::SetTextInputType(ui::TextInputType type) {
render_frame_->PepperTextInputTypeChanged(this);
}
+void PepperPluginInstanceImpl::PostMessageToJavaScript(PP_Var message) {
+ message_channel_->PostMessageToJavaScript(message);
+}
+
base::string16 PepperPluginInstanceImpl::GetSelectedText(bool html) {
// Keep a reference on the stack. See NOTE above.
scoped_refptr<PepperPluginInstanceImpl> ref(this);
@@ -1633,7 +1680,8 @@ bool PepperPluginInstanceImpl::PrintPage(int page_number,
// The canvas only has a metafile on it for print preview.
bool save_for_later =
(printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas) != NULL);
-#if defined(OS_MACOSX) || defined(OS_WIN)
+#if defined(OS_MACOSX) || \
+ (defined(OS_WIN) && !defined(WIN_PDF_METAFILE_FOR_PRINTING))
save_for_later = save_for_later && skia::IsPreviewMetafile(*canvas);
#endif
if (save_for_later) {
@@ -1983,6 +2031,21 @@ bool PepperPluginInstanceImpl::PrepareTextureMailbox(
void PepperPluginInstanceImpl::OnDestruct() { render_frame_ = NULL; }
+void PepperPluginInstanceImpl::AddLatencyInfo(
+ const std::vector<ui::LatencyInfo>& latency_info) {
+ if (render_frame_ && render_frame_->GetRenderWidget()) {
+ RenderWidgetCompositor* compositor =
+ render_frame_->GetRenderWidget()->compositor();
+ if (compositor) {
+ for (size_t i = 0; i < latency_info.size(); i++) {
+ scoped_ptr<cc::SwapPromise> swap_promise(
+ new cc::LatencyInfoSwapPromise(latency_info[i]));
+ compositor->QueueSwapPromise(swap_promise.Pass());
+ }
+ }
+ }
+}
+
void PepperPluginInstanceImpl::AddPluginObject(PluginObject* plugin_object) {
DCHECK(live_plugin_objects_.find(plugin_object) ==
live_plugin_objects_.end());
@@ -2492,6 +2555,11 @@ void PepperPluginInstanceImpl::ClearInputEventRequest(PP_Instance instance,
RequestInputEventsHelper(event_classes);
}
+void PepperPluginInstanceImpl::StartTrackingLatency(PP_Instance instance) {
+ if (module_->permissions().HasPermission(ppapi::PERMISSION_PRIVATE))
+ is_tracking_latency_ = true;
+}
+
void PepperPluginInstanceImpl::ZoomChanged(PP_Instance instance,
double factor) {
// We only want to tell the page to change its zoom if the whole page is the
@@ -2518,7 +2586,7 @@ void PepperPluginInstanceImpl::ZoomLimitsChanged(PP_Instance instance,
void PepperPluginInstanceImpl::PostMessage(PP_Instance instance,
PP_Var message) {
- message_channel_->PostMessageToJavaScript(message);
+ PostMessageToJavaScript(message);
}
PP_Bool PepperPluginInstanceImpl::SetCursor(PP_Instance instance,
@@ -2732,9 +2800,6 @@ PP_ExternalPluginResult PepperPluginInstanceImpl::ResetAsProxied(
original_module_ = module_;
module_ = module;
- // Don't send any messages to the plugin until DidCreate() has finished.
- message_channel_->QueueJavaScriptMessages();
-
// For NaCl instances, remember the NaCl plugin instance interface, so we
// can shut it down by calling its DidDestroy in our Delete() method.
original_instance_interface_.reset(instance_interface_.release());
@@ -2770,7 +2835,7 @@ PP_ExternalPluginResult PepperPluginInstanceImpl::ResetAsProxied(
if (!instance_interface_->DidCreate(
pp_instance(), argn_.size(), argn_array.get(), argv_array.get()))
return PP_EXTERNAL_PLUGIN_ERROR_INSTANCE;
- message_channel_->StopQueueingJavaScriptMessages();
+ message_channel_->Start();
// Clear sent_initial_did_change_view_ and cancel any pending DidChangeView
// event. This way, SendDidChangeView will send the "current" view
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.h b/content/renderer/pepper/pepper_plugin_instance_impl.h
index b018b14412..9d067a94a0 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.h
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.h
@@ -55,6 +55,7 @@
#include "third_party/WebKit/public/web/WebPlugin.h"
#include "third_party/WebKit/public/web/WebUserGestureToken.h"
#include "ui/base/ime/text_input_type.h"
+#include "ui/events/latency_info.h"
#include "ui/gfx/rect.h"
#include "url/gurl.h"
@@ -89,6 +90,7 @@ namespace ppapi {
class Resource;
struct InputEventData;
struct PPP_Instance_Combined;
+class ScopedPPVar;
}
namespace v8 {
@@ -296,8 +298,8 @@ class CONTENT_EXPORT PepperPluginInstanceImpl
// already in fullscreen mode).
bool SetFullscreen(bool fullscreen);
- // Implementation of PPP_Messaging.
- void HandleMessage(PP_Var message);
+ // Send the message on to the plugin.
+ void HandleMessage(ppapi::ScopedPPVar message);
// Returns true if the plugin is processing a user gesture.
bool IsProcessingUserGesture();
@@ -363,6 +365,7 @@ class CONTENT_EXPORT PepperPluginInstanceImpl
virtual void SetSelectedText(const base::string16& selected_text) OVERRIDE;
virtual void SetLinkUnderCursor(const std::string& url) OVERRIDE;
virtual void SetTextInputType(ui::TextInputType type) OVERRIDE;
+ virtual void PostMessageToJavaScript(PP_Var message) OVERRIDE;
// PPB_Instance_API implementation.
virtual PP_Bool BindGraphics(PP_Instance instance,
@@ -402,6 +405,7 @@ class CONTENT_EXPORT PepperPluginInstanceImpl
uint32_t event_classes) OVERRIDE;
virtual void ClearInputEventRequest(PP_Instance instance,
uint32_t event_classes) OVERRIDE;
+ virtual void StartTrackingLatency(PP_Instance instance) OVERRIDE;
virtual void ZoomChanged(PP_Instance instance, double factor) OVERRIDE;
virtual void ZoomLimitsChanged(PP_Instance instance,
double minimum_factor,
@@ -505,6 +509,8 @@ class CONTENT_EXPORT PepperPluginInstanceImpl
// RenderFrameObserver
virtual void OnDestruct() OVERRIDE;
+ void AddLatencyInfo(const std::vector<ui::LatencyInfo>& latency_info);
+
private:
friend class base::RefCounted<PepperPluginInstanceImpl>;
friend class PpapiUnittest;
@@ -862,6 +868,10 @@ class CONTENT_EXPORT PepperPluginInstanceImpl
// The text that is currently selected in the plugin.
base::string16 selected_text_;
+ int64 last_input_number_;
+
+ bool is_tracking_latency_;
+
// We use a weak ptr factory for scheduling DidChangeView events so that we
// can tell whether updates are pending and consolidate them. When there's
// already a weak ptr pending (HasWeakPtrs is true), code should update the
diff --git a/content/renderer/pepper/pepper_truetype_font_host.cc b/content/renderer/pepper/pepper_truetype_font_host.cc
index 131c8f2160..fc99393544 100644
--- a/content/renderer/pepper/pepper_truetype_font_host.cc
+++ b/content/renderer/pepper/pepper_truetype_font_host.cc
@@ -36,14 +36,14 @@ int32_t PepperTrueTypeFontHost::OnResourceMessageReceived(
if (!host()->permissions().HasPermission(ppapi::PERMISSION_DEV))
return PP_ERROR_FAILED;
- IPC_BEGIN_MESSAGE_MAP(PepperTrueTypeFontHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_Describe,
- OnHostMsgDescribe)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_GetTableTags,
- OnHostMsgGetTableTags)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TrueTypeFont_GetTable,
- OnHostMsgGetTable)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperTrueTypeFontHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_Describe,
+ OnHostMsgDescribe)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_TrueTypeFont_GetTableTags,
+ OnHostMsgGetTableTags)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_TrueTypeFont_GetTable,
+ OnHostMsgGetTable)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_url_loader_host.cc b/content/renderer/pepper/pepper_url_loader_host.cc
index 4a327d10d9..27d427149e 100644
--- a/content/renderer/pepper/pepper_url_loader_host.cc
+++ b/content/renderer/pepper/pepper_url_loader_host.cc
@@ -104,16 +104,17 @@ PepperURLLoaderHost::~PepperURLLoaderHost() {
int32_t PepperURLLoaderHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperURLLoaderHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_URLLoader_Open, OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_URLLoader_SetDeferLoading,
- OnHostMsgSetDeferLoading)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_URLLoader_Close,
- OnHostMsgClose);
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
- PpapiHostMsg_URLLoader_GrantUniversalAccess,
- OnHostMsgGrantUniversalAccess)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperURLLoaderHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_URLLoader_Open,
+ OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_URLLoader_SetDeferLoading,
+ OnHostMsgSetDeferLoading)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_URLLoader_Close,
+ OnHostMsgClose);
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(
+ PpapiHostMsg_URLLoader_GrantUniversalAccess,
+ OnHostMsgGrantUniversalAccess)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_video_capture_host.cc b/content/renderer/pepper/pepper_video_capture_host.cc
index 871b94d4ea..71bebb30eb 100644
--- a/content/renderer/pepper/pepper_video_capture_host.cc
+++ b/content/renderer/pepper/pepper_video_capture_host.cc
@@ -63,16 +63,17 @@ int32_t PepperVideoCaptureHost::OnResourceMessageReceived(
if (enumeration_helper_.HandleResourceMessage(msg, context, &result))
return result;
- IPC_BEGIN_MESSAGE_MAP(PepperVideoCaptureHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoCapture_Open, OnOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_StartCapture,
- OnStartCapture)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoCapture_ReuseBuffer,
- OnReuseBuffer)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_StopCapture,
- OnStopCapture)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_Close, OnClose)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperVideoCaptureHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoCapture_Open, OnOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_StartCapture,
+ OnStartCapture)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoCapture_ReuseBuffer,
+ OnReuseBuffer)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_StopCapture,
+ OnStopCapture)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoCapture_Close,
+ OnClose)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_video_destination_host.cc b/content/renderer/pepper/pepper_video_destination_host.cc
index 97432a6db7..5254374b1b 100644
--- a/content/renderer/pepper/pepper_video_destination_host.cc
+++ b/content/renderer/pepper/pepper_video_destination_host.cc
@@ -32,14 +32,14 @@ PepperVideoDestinationHost::~PepperVideoDestinationHost() {}
int32_t PepperVideoDestinationHost::OnResourceMessageReceived(
const IPC::Message& msg,
HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperVideoDestinationHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoDestination_Open,
- OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoDestination_PutFrame,
- OnHostMsgPutFrame)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoDestination_Close,
- OnHostMsgClose)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperVideoDestinationHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoDestination_Open,
+ OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoDestination_PutFrame,
+ OnHostMsgPutFrame)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoDestination_Close,
+ OnHostMsgClose)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_video_source_host.cc b/content/renderer/pepper/pepper_video_source_host.cc
index c8eaf63bfa..d90ed26e8e 100644
--- a/content/renderer/pepper/pepper_video_source_host.cc
+++ b/content/renderer/pepper/pepper_video_source_host.cc
@@ -69,14 +69,14 @@ PepperVideoSourceHost::~PepperVideoSourceHost() { Close(); }
int32_t PepperVideoSourceHost::OnResourceMessageReceived(
const IPC::Message& msg,
HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperVideoSourceHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoSource_Open,
- OnHostMsgOpen)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoSource_GetFrame,
- OnHostMsgGetFrame)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoSource_Close,
- OnHostMsgClose)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperVideoSourceHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_VideoSource_Open,
+ OnHostMsgOpen)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoSource_GetFrame,
+ OnHostMsgGetFrame)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_VideoSource_Close,
+ OnHostMsgClose)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/pepper_websocket_host.cc b/content/renderer/pepper/pepper_websocket_host.cc
index e5bfe7aaa2..9b74ccc2dc 100644
--- a/content/renderer/pepper/pepper_websocket_host.cc
+++ b/content/renderer/pepper/pepper_websocket_host.cc
@@ -82,17 +82,18 @@ PepperWebSocketHost::~PepperWebSocketHost() {
int32_t PepperWebSocketHost::OnResourceMessageReceived(
const IPC::Message& msg,
ppapi::host::HostMessageContext* context) {
- IPC_BEGIN_MESSAGE_MAP(PepperWebSocketHost, msg)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Connect,
- OnHostMsgConnect)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Close,
- OnHostMsgClose)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_SendText,
- OnHostMsgSendText)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_SendBinary,
- OnHostMsgSendBinary)
- PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Fail, OnHostMsgFail)
- IPC_END_MESSAGE_MAP()
+ PPAPI_BEGIN_MESSAGE_MAP(PepperWebSocketHost, msg)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Connect,
+ OnHostMsgConnect)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Close,
+ OnHostMsgClose)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_SendText,
+ OnHostMsgSendText)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_SendBinary,
+ OnHostMsgSendBinary)
+ PPAPI_DISPATCH_HOST_RESOURCE_CALL(PpapiHostMsg_WebSocket_Fail,
+ OnHostMsgFail)
+ PPAPI_END_MESSAGE_MAP()
return PP_ERROR_FAILED;
}
diff --git a/content/renderer/pepper/plugin_module.cc b/content/renderer/pepper/plugin_module.cc
index 97e856115d..9d95fb5b14 100644
--- a/content/renderer/pepper/plugin_module.cc
+++ b/content/renderer/pepper/plugin_module.cc
@@ -110,6 +110,7 @@
#include "ppapi/c/private/ppb_flash_message_loop.h"
#include "ppapi/c/private/ppb_flash_print.h"
#include "ppapi/c/private/ppb_host_resolver_private.h"
+#include "ppapi/c/private/ppb_input_event_private.h"
#include "ppapi/c/private/ppb_instance_private.h"
#include "ppapi/c/private/ppb_isolated_file_system_private.h"
#include "ppapi/c/private/ppb_output_protection_private.h"
@@ -396,7 +397,7 @@ PluginModule::PluginModule(const std::string& name,
library_(NULL),
name_(name),
path_(path),
- permissions_(perms),
+ permissions_(ppapi::PpapiPermissions::GetForCommandLine(perms.GetBits())),
reserve_instance_id_(NULL) {
// Ensure the globals object is created.
if (!host_globals)
@@ -684,9 +685,6 @@ scoped_refptr<PluginModule> PluginModule::Create(
return scoped_refptr<PluginModule>();
}
- ppapi::PpapiPermissions permissions =
- ppapi::PpapiPermissions::GetForCommandLine(info->permissions);
-
// Out of process: have the browser start the plugin process for us.
IPC::ChannelHandle channel_handle;
base::ProcessId peer_pid;
@@ -698,6 +696,8 @@ scoped_refptr<PluginModule> PluginModule::Create(
return scoped_refptr<PluginModule>();
}
+ ppapi::PpapiPermissions permissions(info->permissions);
+
// AddLiveModule must be called before any early returns since the
// module's destructor will remove itself.
module = new PluginModule(info->name, path, permissions);
diff --git a/content/renderer/pepper/ppb_broker_impl.cc b/content/renderer/pepper/ppb_broker_impl.cc
index bc2cbfa916..00378773d7 100644
--- a/content/renderer/pepper/ppb_broker_impl.cc
+++ b/content/renderer/pepper/ppb_broker_impl.cc
@@ -124,11 +124,11 @@ void PPB_Broker_Impl::BrokerConnected(int32_t handle, int32_t result) {
bool PPB_Broker_Impl::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PPB_Broker_Impl, message)
- IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerChannelCreated,
- OnPpapiBrokerChannelCreated)
- IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerPermissionResult,
- OnPpapiBrokerPermissionResult)
- IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerChannelCreated,
+ OnPpapiBrokerChannelCreated)
+ IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerPermissionResult,
+ OnPpapiBrokerPermissionResult)
+ IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
diff --git a/content/renderer/pepper/ppb_video_decoder_impl.cc b/content/renderer/pepper/ppb_video_decoder_impl.cc
index 9844c36b7c..4a3cde418a 100644
--- a/content/renderer/pepper/ppb_video_decoder_impl.cc
+++ b/content/renderer/pepper/ppb_video_decoder_impl.cc
@@ -224,8 +224,7 @@ int32_t PPB_VideoDecoder_Impl::Reset(scoped_refptr<TrackedCallback> callback) {
void PPB_VideoDecoder_Impl::Destroy() {
FlushCommandBuffer();
- if (decoder_)
- decoder_.release()->Destroy();
+ decoder_.reset();
ppp_videodecoder_ = NULL;
::ppapi::PPB_VideoDecoder_Shared::Destroy();
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc
index 22e7f46f36..850399addb 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.cc
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc
@@ -41,7 +41,9 @@ RendererPpapiHostImpl::RendererPpapiHostImpl(
PluginModule* module,
ppapi::proxy::HostDispatcher* dispatcher,
const ppapi::PpapiPermissions& permissions)
- : module_(module), dispatcher_(dispatcher) {
+ : module_(module),
+ dispatcher_(dispatcher),
+ is_external_plugin_host_(false) {
// Hook the PpapiHost up to the dispatcher for out-of-process communication.
ppapi_host_.reset(new ppapi::host::PpapiHost(dispatcher, permissions));
ppapi_host_->AddHostFactoryFilter(scoped_ptr<ppapi::host::HostFactory>(
@@ -54,7 +56,7 @@ RendererPpapiHostImpl::RendererPpapiHostImpl(
RendererPpapiHostImpl::RendererPpapiHostImpl(
PluginModule* module,
const ppapi::PpapiPermissions& permissions)
- : module_(module), dispatcher_(NULL) {
+ : module_(module), dispatcher_(NULL), is_external_plugin_host_(false) {
// Hook the host up to the in-process router.
in_process_router_.reset(new PepperInProcessRouter(this));
ppapi_host_.reset(new ppapi::host::PpapiHost(
@@ -125,6 +127,10 @@ PepperPluginInstanceImpl* RendererPpapiHostImpl::GetPluginInstanceImpl(
return GetAndValidateInstance(instance);
}
+bool RendererPpapiHostImpl::IsExternalPluginHost() const {
+ return is_external_plugin_host_;
+}
+
ppapi::host::PpapiHost* RendererPpapiHostImpl::GetPpapiHost() {
return ppapi_host_.get();
}
@@ -227,6 +233,14 @@ bool RendererPpapiHostImpl::IsRunningInProcess() const {
return is_running_in_process_;
}
+std::string RendererPpapiHostImpl::GetPluginName() const {
+ return module_->name();
+}
+
+void RendererPpapiHostImpl::SetToExternalPluginHost() {
+ is_external_plugin_host_ = true;
+}
+
void RendererPpapiHostImpl::CreateBrowserResourceHosts(
PP_Instance instance,
const std::vector<IPC::Message>& nested_msgs,
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h
index 8da1411942..a30735dc3c 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.h
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.h
@@ -73,6 +73,8 @@ class RendererPpapiHostImpl : public RendererPpapiHost {
PepperPluginInstanceImpl* GetPluginInstanceImpl(PP_Instance instance) const;
+ bool IsExternalPluginHost() const;
+
// RendererPpapiHost implementation.
virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE;
virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE;
@@ -94,6 +96,8 @@ class RendererPpapiHostImpl : public RendererPpapiHost {
base::PlatformFile handle,
bool should_close_source) OVERRIDE;
virtual bool IsRunningInProcess() const OVERRIDE;
+ virtual std::string GetPluginName() const OVERRIDE;
+ virtual void SetToExternalPluginHost() OVERRIDE;
virtual void CreateBrowserResourceHosts(
PP_Instance instance,
const std::vector<IPC::Message>& nested_msgs,
@@ -130,6 +134,9 @@ class RendererPpapiHostImpl : public RendererPpapiHost {
// Whether the plugin is running in process.
bool is_running_in_process_;
+ // Whether this is a host for external plugins.
+ bool is_external_plugin_host_;
+
DISALLOW_COPY_AND_ASSIGN(RendererPpapiHostImpl);
};
diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc
index 62164cff49..476e3d3741 100644
--- a/content/renderer/pepper/resource_converter.cc
+++ b/content/renderer/pepper/resource_converter.cc
@@ -203,7 +203,7 @@ ResourceConverterImpl::ResourceConverterImpl(PP_Instance instance,
ResourceConverterImpl::~ResourceConverterImpl() {
// Verify Flush() was called.
DCHECK(browser_host_create_messages_.empty());
- DCHECK(browser_vars.empty());
+ DCHECK(browser_vars_.empty());
}
bool ResourceConverterImpl::FromV8Value(v8::Handle<v8::Object> val,
@@ -269,9 +269,9 @@ void ResourceConverterImpl::Flush(const base::Callback<void(bool)>& callback) {
host_->CreateBrowserResourceHosts(
instance_,
browser_host_create_messages_,
- base::Bind(&FlushComplete, callback, browser_vars));
+ base::Bind(&FlushComplete, callback, browser_vars_));
browser_host_create_messages_.clear();
- browser_vars.clear();
+ browser_vars_.clear();
}
bool ResourceConverterImpl::ToV8Value(const PP_Var& var,
@@ -336,7 +336,7 @@ ResourceConverterImpl::CreateResourceVarWithBrowserHost(
scoped_refptr<HostResourceVar> result =
CreateResourceVar(pending_renderer_id, create_message);
browser_host_create_messages_.push_back(browser_host_create_message);
- browser_vars.push_back(result);
+ browser_vars_.push_back(result);
return result;
}
diff --git a/content/renderer/pepper/resource_converter.h b/content/renderer/pepper/resource_converter.h
index d399cc587b..5b46adf4c5 100644
--- a/content/renderer/pepper/resource_converter.h
+++ b/content/renderer/pepper/resource_converter.h
@@ -95,7 +95,7 @@ class ResourceConverterImpl : public ResourceConverter {
// conveniently passed to |CreateBrowserResourceHosts|.
std::vector<IPC::Message> browser_host_create_messages_;
// A list of the resource vars associated with browser hosts.
- std::vector<scoped_refptr<HostResourceVar> > browser_vars;
+ std::vector<scoped_refptr<HostResourceVar> > browser_vars_;
DISALLOW_COPY_AND_ASSIGN(ResourceConverterImpl);
};
diff --git a/content/renderer/pepper/v8_var_converter.cc b/content/renderer/pepper/v8_var_converter.cc
index 6dc5d78ecd..bc1a25347a 100644
--- a/content/renderer/pepper/v8_var_converter.cc
+++ b/content/renderer/pepper/v8_var_converter.cc
@@ -399,6 +399,20 @@ void V8VarConverter::FromV8Value(
v8::Handle<v8::Value> val,
v8::Handle<v8::Context> context,
const base::Callback<void(const ScopedPPVar&, bool)>& callback) {
+ ScopedPPVar result_var;
+ if (FromV8ValueInternal(val, context, &result_var)) {
+ resource_converter_->Flush(base::Bind(callback, result_var));
+ } else {
+ message_loop_proxy_->PostTask(
+ FROM_HERE,
+ base::Bind(callback, result_var, false));
+ }
+}
+
+bool V8VarConverter::FromV8ValueInternal(
+ v8::Handle<v8::Value> val,
+ v8::Handle<v8::Context> context,
+ ppapi::ScopedPPVar* result_var) {
v8::Context::Scope context_scope(context);
v8::HandleScope handle_scope(context->GetIsolate());
@@ -408,6 +422,7 @@ void V8VarConverter::FromV8Value(
std::stack<StackEntry<v8::Handle<v8::Value> > > stack;
stack.push(StackEntry<v8::Handle<v8::Value> >(val));
ScopedPPVar root;
+ *result_var = PP_MakeUndefined();
bool is_root = true;
while (!stack.empty()) {
@@ -431,10 +446,7 @@ void V8VarConverter::FromV8Value(
&visited_handles,
&parent_handles,
resource_converter_.get())) {
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
if (is_root) {
@@ -451,21 +463,14 @@ void V8VarConverter::FromV8Value(
ArrayVar* array_var = ArrayVar::FromPPVar(current_var);
if (!array_var) {
NOTREACHED();
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
for (uint32 i = 0; i < v8_array->Length(); ++i) {
v8::TryCatch try_catch;
v8::Handle<v8::Value> child_v8 = v8_array->Get(i);
- if (try_catch.HasCaught()) {
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
- }
+ if (try_catch.HasCaught())
+ return false;
if (!v8_array->HasRealIndexedProperty(i))
continue;
@@ -478,10 +483,7 @@ void V8VarConverter::FromV8Value(
&visited_handles,
&parent_handles,
resource_converter_.get())) {
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
if (did_create && child_v8->IsObject())
stack.push(child_v8);
@@ -496,10 +498,7 @@ void V8VarConverter::FromV8Value(
DictionaryVar* dict_var = DictionaryVar::FromPPVar(current_var);
if (!dict_var) {
NOTREACHED();
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
v8::Handle<v8::Array> property_names(v8_object->GetOwnPropertyNames());
@@ -511,10 +510,7 @@ void V8VarConverter::FromV8Value(
NOTREACHED() << "Key \"" << *v8::String::Utf8Value(key)
<< "\" "
"is neither a string nor a number";
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
// Skip all callbacks: crbug.com/139933
@@ -525,12 +521,8 @@ void V8VarConverter::FromV8Value(
v8::TryCatch try_catch;
v8::Handle<v8::Value> child_v8 = v8_object->Get(key);
- if (try_catch.HasCaught()) {
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
- }
+ if (try_catch.HasCaught())
+ return false;
PP_Var child_var;
if (!GetOrCreateVar(child_v8,
@@ -540,10 +532,7 @@ void V8VarConverter::FromV8Value(
&visited_handles,
&parent_handles,
resource_converter_.get())) {
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(callback, ScopedPPVar(PP_MakeUndefined()), false));
- return;
+ return false;
}
if (did_create && child_v8->IsObject())
stack.push(child_v8);
@@ -554,7 +543,8 @@ void V8VarConverter::FromV8Value(
}
}
}
- resource_converter_->Flush(base::Bind(callback, root));
+ *result_var = root;
+ return true;
}
} // namespace content
diff --git a/content/renderer/pepper/v8_var_converter.h b/content/renderer/pepper/v8_var_converter.h
index 8bb22b7b2f..34230235ae 100644
--- a/content/renderer/pepper/v8_var_converter.h
+++ b/content/renderer/pepper/v8_var_converter.h
@@ -46,8 +46,12 @@ class CONTENT_EXPORT V8VarConverter {
v8::Handle<v8::Value> val,
v8::Handle<v8::Context> context,
const base::Callback<void(const ppapi::ScopedPPVar&, bool)>& callback);
-
private:
+ // Returns true on success, false on failure.
+ bool FromV8ValueInternal(v8::Handle<v8::Value> val,
+ v8::Handle<v8::Context> context,
+ ppapi::ScopedPPVar* result_var);
+
// The message loop to run the callback to |FromV8Value| from.
scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b93c8ed0d1..7c8317ace7 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -60,6 +60,7 @@
#include "content/renderer/media/audio_renderer_mixer_manager.h"
#include "content/renderer/media/media_stream_dispatcher.h"
#include "content/renderer/media/media_stream_impl.h"
+#include "content/renderer/media/media_stream_renderer_factory.h"
#include "content/renderer/media/render_media_log.h"
#include "content/renderer/media/webcontentdecryptionmodule_impl.h"
#include "content/renderer/media/webmediaplayer_impl.h"
@@ -91,6 +92,7 @@
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebGlyphCache.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
#include "third_party/WebKit/public/web/WebPlugin.h"
#include "third_party/WebKit/public/web/WebPluginParams.h"
@@ -120,8 +122,10 @@
#include "content/common/gpu/client/context_provider_command_buffer.h"
#include "content/renderer/android/synchronous_compositor_factory.h"
+#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "content/renderer/media/android/stream_texture_factory_impl.h"
#include "content/renderer/media/android/webmediaplayer_android.h"
+#include "content/renderer/media/crypto/renderer_cdm_manager.h"
#endif
using blink::WebContextMenuData;
@@ -165,6 +169,10 @@ namespace {
const size_t kExtraCharsBeforeAndAfterSelection = 100;
+typedef std::map<int, RenderFrameImpl*> RoutingIDFrameMap;
+static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map =
+ LAZY_INSTANCE_INITIALIZER;
+
typedef std::map<blink::WebFrame*, RenderFrameImpl*> FrameMap;
base::LazyInstance<FrameMap> g_frame_map = LAZY_INSTANCE_INITIALIZER;
@@ -358,6 +366,15 @@ RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view,
}
// static
+RenderFrameImpl* RenderFrameImpl::FromRoutingID(int32 routing_id) {
+ RoutingIDFrameMap::iterator iter =
+ g_routing_id_frame_map.Get().find(routing_id);
+ if (iter != g_routing_id_frame_map.Get().end())
+ return iter->second;
+ return NULL;
+}
+
+// static
RenderFrame* RenderFrame::FromWebFrame(blink::WebFrame* web_frame) {
return RenderFrameImpl::FromWebFrame(web_frame);
}
@@ -382,17 +399,27 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
render_view_(render_view->AsWeakPtr()),
routing_id_(routing_id),
is_swapped_out_(false),
+ render_frame_proxy_(NULL),
is_detaching_(false),
cookie_jar_(this),
selection_text_offset_(0),
selection_range_(gfx::Range::InvalidRange()),
handling_select_range_(false),
notification_provider_(NULL),
- media_stream_client_(NULL),
web_user_media_client_(NULL),
+#if defined(OS_ANDROID)
+ media_player_manager_(NULL),
+ cdm_manager_(NULL),
+#endif
weak_factory_(this) {
RenderThread::Get()->AddRoute(routing_id_, this);
+ std::pair<RoutingIDFrameMap::iterator, bool> result =
+ g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
+ CHECK(result.second) << "Inserting a duplicate item.";
+
+ render_view_->RegisterRenderFrame(this);
+
#if defined(OS_ANDROID)
new JavaBridgeDispatcher(this);
#endif
@@ -405,6 +432,14 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id)
RenderFrameImpl::~RenderFrameImpl() {
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone());
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct());
+
+#if defined(VIDEO_HOLE)
+ if (media_player_manager_)
+ render_view_->UnregisterVideoHoleFrame(this);
+#endif // defined(VIDEO_HOLE)
+
+ render_view_->UnregisterRenderFrame(this);
+ g_routing_id_frame_map.Get().erase(routing_id_);
RenderThread::Get()->RemoveRoute(routing_id_);
}
@@ -616,20 +651,22 @@ void RenderFrameImpl::OnImeConfirmComposition(
#endif // ENABLE_PLUGINS
-void RenderFrameImpl::SetMediaStreamClientForTesting(
- MediaStreamClient* media_stream_client) {
- DCHECK(!media_stream_client_);
- DCHECK(!web_user_media_client_);
- media_stream_client_ = media_stream_client;
-}
-
bool RenderFrameImpl::Send(IPC::Message* message) {
- if (is_detaching_ ||
- ((is_swapped_out_ || render_view_->is_swapped_out()) &&
- !SwappedOutMessages::CanSendWhileSwappedOut(message))) {
+ if (is_detaching_) {
delete message;
return false;
}
+ if (is_swapped_out_ || render_view_->is_swapped_out()) {
+ if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
+ delete message;
+ return false;
+ }
+ // In most cases, send IPCs through the proxy when swapped out. In some
+ // calls the associated RenderViewImpl routing id is used to send
+ // messages, so don't use the proxy.
+ if (render_frame_proxy_ && message->routing_id() == routing_id_)
+ return render_frame_proxy_->Send(message);
+ }
return RenderThread::Get()->Send(message);
}
@@ -645,8 +682,7 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
}
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameImpl, msg, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderFrameImpl, msg)
IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate)
IPC_MESSAGE_HANDLER(FrameMsg_BeforeUnload, OnBeforeUnload)
IPC_MESSAGE_HANDLER(FrameMsg_SwapOut, OnSwapOut)
@@ -682,14 +718,7 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard)
#endif
IPC_MESSAGE_HANDLER(FrameMsg_Reload, OnReload)
- IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- // The message had a handler, but its deserialization failed.
- // Kill the renderer to avoid potential spoofing attacks.
- int id = msg.type();
- CHECK(false) << "Unable to deserialize " << id << " in RenderFrameImpl.";
- }
+ IPC_END_MESSAGE_MAP()
return handled;
}
@@ -891,7 +920,9 @@ void RenderFrameImpl::OnBeforeUnload() {
before_unload_end_time));
}
-void RenderFrameImpl::OnSwapOut() {
+void RenderFrameImpl::OnSwapOut(int proxy_routing_id) {
+ RenderFrameProxy* proxy = NULL;
+
// Only run unload if we're not swapped out yet, but send the ack either way.
if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
// Swap this RenderFrame out so the frame can navigate to a page rendered by
@@ -899,8 +930,11 @@ void RenderFrameImpl::OnSwapOut() {
// clearing the page. Once WasSwappedOut is called, we also allow this
// process to exit if there are no other active RenderFrames in it.
- // Send an UpdateState message before we get swapped out.
+ // Send an UpdateState message before we get swapped out. Create the
+ // RenderFrameProxy as well so its routing id is registered for receiving
+ // IPC messages.
render_view_->SyncNavigationState();
+ proxy = RenderFrameProxy::CreateFrameProxy(proxy_routing_id, routing_id_);
// Synchronously run the unload handler before sending the ACK.
// TODO(creis): Call dispatchUnloadEvent unconditionally here to support
@@ -953,6 +987,11 @@ void RenderFrameImpl::OnSwapOut() {
render_view_->suppress_dialogs_until_swap_out_ = false;
Send(new FrameHostMsg_SwapOut_ACK(routing_id_));
+
+ // Now that all of the cleanup is complete and the browser side is notified,
+ // start using the RenderFrameProxy, if one is created.
+ if (proxy)
+ set_render_frame_proxy(proxy);
}
void RenderFrameImpl::OnBuffersSwapped(
@@ -1221,6 +1260,8 @@ void RenderFrameImpl::LoadNavigationErrorPage(
void RenderFrameImpl::DidCommitCompositorFrame() {
if (compositing_helper_)
compositing_helper_->DidCommitCompositorFrame();
+ FOR_EACH_OBSERVER(
+ RenderFrameObserver, observers_, DidCommitCompositorFrame());
}
RenderView* RenderFrameImpl::GetRenderView() {
@@ -1345,9 +1386,10 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
blink::WebLocalFrame* frame,
const blink::WebURL& url,
blink::WebMediaPlayerClient* client) {
- WebMediaPlayer* player = CreateWebMediaPlayerForMediaStream(url, client);
- if (player)
- return player;
+ blink::WebMediaStream web_stream(
+ blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
+ if (!web_stream.isNull())
+ return CreateWebMediaPlayerForMediaStream(url, client);
#if defined(OS_ANDROID)
return CreateAndroidWebMediaPlayer(url, client);
@@ -1370,7 +1412,13 @@ RenderFrameImpl::createContentDecryptionModule(
const blink::WebString& key_system) {
DCHECK(!frame_ || frame_ == frame);
return WebContentDecryptionModuleImpl::Create(
- frame, security_origin, key_system);
+#if defined(ENABLE_PEPPER_CDMS)
+ frame,
+#elif defined(OS_ANDROID)
+ GetCdmManager(),
+#endif
+ security_origin,
+ key_system);
}
blink::WebApplicationCacheHost* RenderFrameImpl::createApplicationCacheHost(
@@ -1536,11 +1584,7 @@ void RenderFrameImpl::didChangeName(blink::WebLocalFrame* frame,
if (!render_view_->renderer_preferences_.report_frame_name_changes)
return;
- render_view_->Send(
- new ViewHostMsg_UpdateFrameName(render_view_->GetRoutingID(),
- routing_id_,
- !frame->parent(),
- base::UTF16ToUTF8(name)));
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidChangeName(name));
}
void RenderFrameImpl::didMatchCSS(
@@ -1885,6 +1929,12 @@ void RenderFrameImpl::didCommitProvisionalLoad(
DocumentState* document_state =
DocumentState::FromDataSource(frame->dataSource());
NavigationState* navigation_state = document_state->navigation_state();
+
+ // When we perform a new navigation, we need to update the last committed
+ // session history entry with state for the page we are leaving. Do this
+ // before updating the HistoryController state.
+ render_view_->UpdateSessionHistory(frame);
+
render_view_->history_controller()->UpdateForCommit(this, item, commit_type,
navigation_state->was_within_same_page());
@@ -1902,10 +1952,6 @@ void RenderFrameImpl::didCommitProvisionalLoad(
bool is_new_navigation = commit_type == blink::WebStandardCommit;
if (is_new_navigation) {
- // When we perform a new navigation, we need to update the last committed
- // session history entry with state for the page we are leaving.
- render_view_->UpdateSessionHistory(frame);
-
// We bump our Page ID to correspond with the new session history entry.
render_view_->page_id_ = render_view_->next_page_id_++;
@@ -1943,7 +1989,6 @@ void RenderFrameImpl::didCommitProvisionalLoad(
navigation_state->pending_page_id() != render_view_->page_id_ &&
!navigation_state->request_committed()) {
// This is a successful session history navigation!
- render_view_->UpdateSessionHistory(frame);
render_view_->page_id_ = navigation_state->pending_page_id();
render_view_->history_list_offset_ =
@@ -1973,28 +2018,22 @@ void RenderFrameImpl::didCommitProvisionalLoad(
UpdateURL(frame);
// Check whether we have new encoding name.
- render_view_->UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
+ UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
}
-void RenderFrameImpl::didClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) {
+void RenderFrameImpl::didClearWindowObject(blink::WebLocalFrame* frame) {
DCHECK(!frame_ || frame_ == frame);
// TODO(nasko): Move implementation here. Needed state:
// * enabled_bindings_
// * dom_automation_controller_
// * stats_collection_controller_
- render_view_->didClearWindowObject(frame, world_id);
-
- // Only install controllers into the main world.
- if (world_id)
- return;
+ render_view_->didClearWindowObject(frame);
if (render_view_->GetEnabledBindings() & BINDINGS_POLICY_DOM_AUTOMATION)
DomAutomationController::Install(this, frame);
- FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
- DidClearWindowObject(world_id));
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidClearWindowObject());
}
void RenderFrameImpl::didCreateDocumentElement(blink::WebLocalFrame* frame) {
@@ -2005,9 +2044,14 @@ void RenderFrameImpl::didCreateDocumentElement(blink::WebLocalFrame* frame) {
if (url.is_valid() && url.spec() != kAboutBlankURL) {
// TODO(nasko): Check if webview()->mainFrame() is the same as the
// frame->tree()->top().
- if (frame == render_view_->webview()->mainFrame()) {
+ blink::WebFrame* main_frame = render_view_->webview()->mainFrame();
+ if (frame == main_frame) {
+ // For now, don't remember plugin zoom values. We don't want to mix them
+ // with normal web content (i.e. a fixed layout plugin would usually want
+ // them different).
render_view_->Send(new ViewHostMsg_DocumentAvailableInMainFrame(
- render_view_->GetRoutingID()));
+ render_view_->GetRoutingID(),
+ main_frame->document().isPluginDocument()));
}
}
@@ -2019,8 +2063,20 @@ void RenderFrameImpl::didReceiveTitle(blink::WebLocalFrame* frame,
const blink::WebString& title,
blink::WebTextDirection direction) {
DCHECK(!frame_ || frame_ == frame);
- // TODO(nasko): Investigate wheather implementation should move here.
- render_view_->didReceiveTitle(frame, title, direction);
+ // Ignore all but top level navigations.
+ if (!frame->parent()) {
+ base::string16 title16 = title;
+ base::debug::TraceLog::GetInstance()->UpdateProcessLabel(
+ routing_id_, base::UTF16ToUTF8(title16));
+
+ base::string16 shortened_title = title16.substr(0, kMaxTitleChars);
+ Send(new FrameHostMsg_UpdateTitle(routing_id_,
+ render_view_->page_id_,
+ shortened_title, direction));
+ }
+
+ // Also check whether we have new encoding name.
+ UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
}
void RenderFrameImpl::didChangeIcon(blink::WebLocalFrame* frame,
@@ -2043,7 +2099,7 @@ void RenderFrameImpl::didFinishDocumentLoad(blink::WebLocalFrame* frame) {
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidFinishDocumentLoad());
// Check whether we have new encoding name.
- render_view_->UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
+ UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
}
void RenderFrameImpl::didHandleOnloadEvents(blink::WebLocalFrame* frame) {
@@ -2700,7 +2756,7 @@ void RenderFrameImpl::willStartUsingPeerConnectionHandler(
blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() {
// This can happen in tests, in which case it's OK to return NULL.
- if (!InitializeMediaStreamClient())
+ if (!InitializeUserMediaClient())
return NULL;
return web_user_media_client_;
@@ -2849,6 +2905,14 @@ void RenderFrameImpl::OnStop() {
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnStop());
}
+void RenderFrameImpl::WasHidden() {
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden());
+}
+
+void RenderFrameImpl::WasShown() {
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown());
+}
+
// Tell the embedding application that the URL of the active page has changed.
void RenderFrameImpl::UpdateURL(blink::WebFrame* frame) {
DCHECK(!frame_ || frame_ == frame);
@@ -3026,28 +3090,17 @@ WebElement RenderFrameImpl::GetFocusedElement() {
}
void RenderFrameImpl::didStartLoading(bool to_different_document) {
- bool view_was_loading = render_view_->is_loading();
render_view_->FrameDidStartLoading(frame_);
- if (!view_was_loading)
- Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document));
+ Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document));
}
void RenderFrameImpl::didStopLoading() {
- if (!render_view_->is_loading())
- return;
render_view_->FrameDidStopLoading(frame_);
-
- // NOTE: For now we're doing the safest thing, and sending out notification
- // when done loading. This currently isn't an issue as the favicon is only
- // displayed when done loading. Ideally we would send notification when
- // finished parsing the head, but webkit doesn't support that yet.
- // The feed discovery code would also benefit from access to the head.
- if (!render_view_->is_loading())
- Send(new FrameHostMsg_DidStopLoading(routing_id_));
+ Send(new FrameHostMsg_DidStopLoading(routing_id_));
}
void RenderFrameImpl::didChangeLoadProgress(double load_progress) {
- render_view_->FrameDidChangeLoadProgress(frame_, load_progress);
+ Send(new FrameHostMsg_DidChangeLoadProgress(routing_id_, load_progress));
}
WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
@@ -3200,14 +3253,14 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
(frame->isViewSourceModeEnabled() &&
type != blink::WebNavigationTypeReload);
- if (!should_fork && url.SchemeIs(kFileScheme)) {
+ if (!should_fork && url.SchemeIs(url::kFileScheme)) {
// Fork non-file to file opens. Check the opener URL if this is the
// initial navigation in a newly opened window.
GURL source_url(old_url);
if (is_initial_navigation && source_url.is_empty() && frame->opener())
source_url = frame->opener()->top()->document().url();
DCHECK(!source_url.is_empty());
- should_fork = !source_url.SchemeIs(kFileScheme);
+ should_fork = !source_url.SchemeIs(url::kFileScheme);
}
if (!should_fork) {
@@ -3307,6 +3360,13 @@ void RenderFrameImpl::OpenURL(WebFrame* frame,
Send(new FrameHostMsg_OpenURL(routing_id_, params));
}
+void RenderFrameImpl::UpdateEncoding(WebFrame* frame,
+ const std::string& encoding_name) {
+ // Only update main frame's encoding_name.
+ if (!frame->parent())
+ Send(new FrameHostMsg_UpdateEncoding(routing_id_, encoding_name));
+}
+
void RenderFrameImpl::SyncSelectionIfRequired() {
base::string16 text;
size_t offset;
@@ -3368,8 +3428,8 @@ void RenderFrameImpl::SyncSelectionIfRequired() {
GetRenderWidget()->UpdateSelectionBounds();
}
-bool RenderFrameImpl::InitializeMediaStreamClient() {
- if (media_stream_client_)
+bool RenderFrameImpl::InitializeUserMediaClient() {
+ if (web_user_media_client_)
return true;
if (!RenderThreadImpl::current()) // Will be NULL during unit tests.
@@ -3389,8 +3449,7 @@ bool RenderFrameImpl::InitializeMediaStreamClient() {
MediaStreamImpl* media_stream_impl = new MediaStreamImpl(
render_view_.get(),
render_view_->media_stream_dispatcher_,
- RenderThreadImpl::current()->GetMediaStreamDependencyFactory());
- media_stream_client_ = media_stream_impl;
+ RenderThreadImpl::current()->GetPeerConnectionDependencyFactory());
web_user_media_client_ = media_stream_impl;
return true;
#else
@@ -3402,21 +3461,28 @@ WebMediaPlayer* RenderFrameImpl::CreateWebMediaPlayerForMediaStream(
const blink::WebURL& url,
WebMediaPlayerClient* client) {
#if defined(ENABLE_WEBRTC)
- if (!InitializeMediaStreamClient()) {
- LOG(ERROR) << "Failed to initialize MediaStreamClient";
- return NULL;
- }
- if (media_stream_client_->IsMediaStream(url)) {
#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
- bool found_neon =
- (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
- UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon);
+ bool found_neon =
+ (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
+ UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon);
#endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
- return new WebMediaPlayerMS(frame_, client, weak_factory_.GetWeakPtr(),
- media_stream_client_, new RenderMediaLog());
- }
-#endif // defined(ENABLE_WEBRTC)
+ return new WebMediaPlayerMS(frame_, client, weak_factory_.GetWeakPtr(),
+ new RenderMediaLog(),
+ CreateRendererFactory());
+#else
return NULL;
+#endif // defined(ENABLE_WEBRTC)
+}
+
+scoped_ptr<MediaStreamRendererFactory>
+RenderFrameImpl::CreateRendererFactory() {
+#if defined(ENABLE_WEBRTC)
+ return scoped_ptr<MediaStreamRendererFactory>(
+ new MediaStreamRendererFactory());
+#else
+ return scoped_ptr<MediaStreamRendererFactory>(
+ static_cast<MediaStreamRendererFactory*>(NULL));
+#endif
}
#if defined(OS_ANDROID)
@@ -3448,19 +3514,36 @@ WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
}
stream_texture_factory = StreamTextureFactoryImpl::Create(
- context_provider, gpu_channel_host, render_view_->routing_id_);
+ context_provider, gpu_channel_host, routing_id_);
}
return new WebMediaPlayerAndroid(
frame_,
client,
weak_factory_.GetWeakPtr(),
- render_view_->media_player_manager_,
+ GetMediaPlayerManager(),
+ GetCdmManager(),
stream_texture_factory,
RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
new RenderMediaLog());
}
-#endif
+RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() {
+ if (!media_player_manager_) {
+ media_player_manager_ = new RendererMediaPlayerManager(this);
+#if defined(VIDEO_HOLE)
+ render_view_->RegisterVideoHoleFrame(this);
+#endif // defined(VIDEO_HOLE)
+ }
+ return media_player_manager_;
+}
+
+RendererCdmManager* RenderFrameImpl::GetCdmManager() {
+ if (!cdm_manager_)
+ cdm_manager_ = new RendererCdmManager(this);
+ return cdm_manager_;
+}
+
+#endif // defined(OS_ANDROID)
} // namespace content
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index a13caa67c4..28f75e48c9 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -18,6 +18,7 @@
#include "content/public/common/referrer.h"
#include "content/public/renderer/render_frame.h"
#include "content/renderer/media/webmediaplayer_delegate.h"
+#include "content/renderer/render_frame_proxy.h"
#include "content/renderer/renderer_webcookiejar_impl.h"
#include "ipc/ipc_message.h"
#include "third_party/WebKit/public/web/WebDataSource.h"
@@ -25,6 +26,10 @@
#include "third_party/WebKit/public/web/WebHistoryCommitType.h"
#include "ui/gfx/range/range.h"
+#if defined(OS_ANDROID)
+#include "content/renderer/media/android/renderer_media_player_manager.h"
+#endif
+
class TransportDIB;
struct FrameMsg_BuffersSwapped_Params;
struct FrameMsg_CompositorFrameSwapped_Params;
@@ -53,7 +58,7 @@ class Rect;
namespace content {
class ChildFrameCompositingHelper;
-class MediaStreamClient;
+class MediaStreamRendererFactory;
class NotificationProvider;
class PepperPluginInstanceImpl;
class RendererPpapiHost;
@@ -63,6 +68,11 @@ class RenderWidget;
class RenderWidgetFullscreenPepper;
struct CustomContextMenuContext;
+#if defined(OS_ANDROID)
+class RendererCdmManager;
+class RendererMediaPlayerManager;
+#endif
+
class CONTENT_EXPORT RenderFrameImpl
: public RenderFrame,
NON_EXPORTED_BASE(public blink::WebFrameClient),
@@ -74,6 +84,9 @@ class CONTENT_EXPORT RenderFrameImpl
// TODO(creis): We should structure this so that |SetWebFrame| isn't needed.
static RenderFrameImpl* Create(RenderViewImpl* render_view, int32 routing_id);
+ // Returns the RenderFrameImpl for the given routing ID.
+ static RenderFrameImpl* FromRoutingID(int routing_id);
+
// Just like RenderFrame::FromWebFrame but returns the implementation.
static RenderFrameImpl* FromWebFrame(blink::WebFrame* web_frame);
@@ -88,6 +101,12 @@ class CONTENT_EXPORT RenderFrameImpl
return is_swapped_out_;
}
+ // TODO(nasko): This can be removed once we don't have a swapped out state on
+ // RenderFrames. See https://crbug.com/357747.
+ void set_render_frame_proxy(RenderFrameProxy* proxy) {
+ render_frame_proxy_ = proxy;
+ }
+
// Out-of-process child frames receive a signal from RenderWidgetCompositor
// when a compositor frame has committed.
void DidCommitCompositorFrame();
@@ -113,6 +132,10 @@ class CONTENT_EXPORT RenderFrameImpl
// Notification from RenderView.
virtual void OnStop();
+ // Notifications from RenderWidget.
+ void WasHidden();
+ void WasShown();
+
// Start/Stop loading notifications.
// TODO(nasko): Those are page-level methods at this time and come from
// WebViewClient. We should move them to be WebFrameClient calls and put
@@ -178,10 +201,6 @@ class CONTENT_EXPORT RenderFrameImpl
bool keep_selection);
#endif // ENABLE_PLUGINS
- // Overrides the MediaStreamClient used when creating MediaStream players.
- // Must be called before any players are created.
- void SetMediaStreamClientForTesting(MediaStreamClient* media_stream_client);
-
// IPC::Sender
virtual bool Send(IPC::Message* msg) OVERRIDE;
@@ -274,7 +293,7 @@ class CONTENT_EXPORT RenderFrameImpl
blink::WebLocalFrame* frame,
const blink::WebHistoryItem& item,
blink::WebHistoryCommitType commit_type);
- virtual void didClearWindowObject(blink::WebLocalFrame* frame, int world_id);
+ virtual void didClearWindowObject(blink::WebLocalFrame* frame);
virtual void didCreateDocumentElement(blink::WebLocalFrame* frame);
virtual void didReceiveTitle(blink::WebLocalFrame* frame,
const blink::WebString& title,
@@ -386,7 +405,7 @@ class CONTENT_EXPORT RenderFrameImpl
friend class RenderFrameObserver;
FRIEND_TEST_ALL_PREFIXES(RendererAccessibilityTest,
AccessibilityMessagesQueueWhileSwappedOut);
- FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest,
+ FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest,
ShouldUpdateSelectionTextFromContextMenuParams);
FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest,
OnExtendSelectionAndDelete);
@@ -412,7 +431,7 @@ class CONTENT_EXPORT RenderFrameImpl
// The documentation for these functions should be in
// content/common/*_messages.h for the message that the function is handling.
void OnBeforeUnload();
- void OnSwapOut();
+ void OnSwapOut(int proxy_routing_id);
void OnChildFrameProcessGone();
void OnBuffersSwapped(const FrameMsg_BuffersSwapped_Params& params);
void OnCompositorFrameSwapped(const IPC::Message& message);
@@ -460,6 +479,22 @@ class CONTENT_EXPORT RenderFrameImpl
const Referrer& referrer,
blink::WebNavigationPolicy policy);
+ // Update current main frame's encoding and send it to browser window.
+ // Since we want to let users see the right encoding info from menu
+ // before finishing loading, we call the UpdateEncoding in
+ // a) function:DidCommitLoadForFrame. When this function is called,
+ // that means we have got first data. In here we try to get encoding
+ // of page if it has been specified in http header.
+ // b) function:DidReceiveTitle. When this function is called,
+ // that means we have got specified title. Because in most of webpages,
+ // title tags will follow meta tags. In here we try to get encoding of
+ // page if it has been specified in meta tag.
+ // c) function:DidFinishDocumentLoadForFrame. When this function is
+ // called, that means we have got whole html page. In here we should
+ // finally get right encoding of page.
+ void UpdateEncoding(blink::WebFrame* frame,
+ const std::string& encoding_name);
+
// Dispatches the current state of selection on the webpage to the browser if
// it has changed.
// TODO(varunjain): delete this method once we figure out how to keep
@@ -485,19 +520,26 @@ class CONTENT_EXPORT RenderFrameImpl
const blink::WebURLError& error,
bool replace);
- // Initializes |media_stream_client_|, returning true if successful. Returns
+ // Initializes |web_user_media_client_|, returning true if successful. Returns
// false if it wasn't possible to create a MediaStreamClient (e.g., WebRTC is
- // disabled) in which case |media_stream_client_| is NULL.
- bool InitializeMediaStreamClient();
+ // disabled) in which case |web_user_media_client_| is NULL.
+ bool InitializeUserMediaClient();
blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
const blink::WebURL& url,
blink::WebMediaPlayerClient* client);
+ // Creates a factory object used for creating audio and video renderers.
+ // The method is virtual so that layouttests can override it.
+ virtual scoped_ptr<MediaStreamRendererFactory> CreateRendererFactory();
+
#if defined(OS_ANDROID)
- blink::WebMediaPlayer* CreateAndroidWebMediaPlayer(
+ blink::WebMediaPlayer* CreateAndroidWebMediaPlayer(
const blink::WebURL& url,
blink::WebMediaPlayerClient* client);
+
+ RendererMediaPlayerManager* GetMediaPlayerManager();
+ RendererCdmManager* GetCdmManager();
#endif
// Stores the WebLocalFrame we are associated with.
@@ -506,6 +548,10 @@ class CONTENT_EXPORT RenderFrameImpl
base::WeakPtr<RenderViewImpl> render_view_;
int routing_id_;
bool is_swapped_out_;
+ // RenderFrameProxy exists only when is_swapped_out_ is true.
+ // TODO(nasko): This can be removed once we don't have a swapped out state on
+ // RenderFrame. See https://crbug.com/357747.
+ RenderFrameProxy* render_frame_proxy_;
bool is_detaching_;
#if defined(ENABLE_PLUGINS)
@@ -559,10 +605,16 @@ class CONTENT_EXPORT RenderFrameImpl
// Holds a reference to the service which provides desktop notifications.
NotificationProvider* notification_provider_;
- // MediaStreamClient attached to this frame; lazily initialized.
- MediaStreamClient* media_stream_client_;
blink::WebUserMediaClient* web_user_media_client_;
+#if defined(OS_ANDROID)
+ // These manage all media players and CDMs in this render frame for
+ // communicating with the real media player and CDM objects in the browser
+ // process. It's okay to use raw pointers since they are RenderFrameObservers.
+ RendererMediaPlayerManager* media_player_manager_;
+ RendererCdmManager* cdm_manager_;
+#endif
+
base::WeakPtrFactory<RenderFrameImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
new file mode 100644
index 0000000000..f9643248a0
--- /dev/null
+++ b/content/renderer/render_frame_proxy.cc
@@ -0,0 +1,89 @@
+// 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 "content/renderer/render_frame_proxy.h"
+
+#include <map>
+
+#include "base/lazy_instance.h"
+#include "content/common/frame_messages.h"
+#include "content/common/swapped_out_messages.h"
+#include "content/renderer/render_frame_impl.h"
+#include "content/renderer/render_thread_impl.h"
+#include "content/renderer/render_view_impl.h"
+
+namespace content {
+
+namespace {
+
+typedef std::map<int, RenderFrameProxy*> RoutingIDProxyMap;
+static base::LazyInstance<RoutingIDProxyMap> g_routing_id_proxy_map =
+ LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
+// static
+RenderFrameProxy* RenderFrameProxy::CreateFrameProxy(int routing_id,
+ int frame_routing_id) {
+ DCHECK_NE(routing_id, MSG_ROUTING_NONE);
+ RenderFrameProxy* proxy = new RenderFrameProxy(routing_id, frame_routing_id);
+ return proxy;
+}
+
+// static
+RenderFrameProxy* RenderFrameProxy::FromRoutingID(int32 routing_id) {
+ RoutingIDProxyMap* proxies = g_routing_id_proxy_map.Pointer();
+ RoutingIDProxyMap::iterator it = proxies->find(routing_id);
+ return it == proxies->end() ? NULL : it->second;
+}
+
+RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id)
+ : routing_id_(routing_id),
+ frame_routing_id_(frame_routing_id) {
+ std::pair<RoutingIDProxyMap::iterator, bool> result =
+ g_routing_id_proxy_map.Get().insert(std::make_pair(routing_id_, this));
+ CHECK(result.second) << "Inserting a duplicate item.";
+ RenderThread::Get()->AddRoute(routing_id_, this);
+
+ render_frame_ = RenderFrameImpl::FromRoutingID(frame_routing_id);
+ CHECK(render_frame_);
+}
+
+RenderFrameProxy::~RenderFrameProxy() {
+ RenderThread::Get()->RemoveRoute(routing_id_);
+ g_routing_id_proxy_map.Get().erase(routing_id_);
+}
+
+bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(RenderFrameProxy, msg)
+ IPC_MESSAGE_HANDLER(FrameMsg_DeleteProxy, OnDeleteProxy)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+
+ if (!handled)
+ return render_frame_->OnMessageReceived(msg);
+
+ return handled;
+}
+
+bool RenderFrameProxy::Send(IPC::Message* message) {
+ if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
+ delete message;
+ return false;
+ }
+ message->set_routing_id(routing_id_);
+ return RenderThread::Get()->Send(message);
+}
+
+void RenderFrameProxy::OnDeleteProxy() {
+ RenderFrameImpl* render_frame =
+ RenderFrameImpl::FromRoutingID(frame_routing_id_);
+ CHECK(render_frame);
+ render_frame->set_render_frame_proxy(NULL);
+
+ delete this;
+}
+
+} // namespace
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
new file mode 100644
index 0000000000..f05371df53
--- /dev/null
+++ b/content/renderer/render_frame_proxy.h
@@ -0,0 +1,79 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_RENDER_FRAME_PROXY_H_
+#define CONTENT_RENDERER_RENDER_FRAME_PROXY_H_
+
+#include "base/basictypes.h"
+#include "content/common/content_export.h"
+#include "ipc/ipc_listener.h"
+#include "ipc/ipc_sender.h"
+
+#include "third_party/WebKit/public/web/WebFrameClient.h"
+#include "third_party/WebKit/public/web/WebRemoteFrame.h"
+
+namespace content {
+
+class RenderFrameImpl;
+class RenderViewImpl;
+
+// When a page's frames are rendered by multiple processes, each renderer has a
+// full copy of the frame tree. It has full RenderFrames for the frames it is
+// responsible for rendering and placeholder objects for frames rendered by
+// other processes. This class is the renderer-side object for the placeholder.
+// RenderFrameProxy allows us to keep existing window references valid over
+// cross-process navigations and route cross-site asynchronous JavaScript calls,
+// such as postMessage.
+//
+// For now, RenderFrameProxy is created when RenderFrame is swapped out. It
+// acts as a wrapper and is used for sending and receiving IPC messages. It is
+// deleted when the RenderFrame is swapped back in or the node of the frame
+// tree is deleted.
+//
+// Long term, RenderFrameProxy will be created to replace the RenderFrame in the
+// frame tree and the RenderFrame will be deleted after its unload handler has
+// finished executing. It will still be responsible for routing IPC messages
+// which are valid for cross-site interactions between frames.
+// RenderFrameProxy will be deleted when the node in the frame tree is deleted
+// or when navigating the frame causes it to return to this process and a new
+// RenderFrame is created for it.
+class CONTENT_EXPORT RenderFrameProxy
+ : public IPC::Listener,
+ public IPC::Sender,
+ NON_EXPORTED_BASE(public blink::WebFrameClient) {
+ public:
+ static RenderFrameProxy* CreateFrameProxy(int routing_id,
+ int frame_routing_id);
+
+ // Returns the RenderFrameProxy for the given routing ID.
+ static RenderFrameProxy* FromRoutingID(int routing_id);
+
+ virtual ~RenderFrameProxy();
+
+ // IPC::Sender
+ virtual bool Send(IPC::Message* msg) OVERRIDE;
+
+ RenderFrameImpl* render_frame() {
+ return render_frame_;
+ }
+
+ private:
+ RenderFrameProxy(int routing_id, int frame_routing_id);
+
+ // IPC::Listener
+ virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+
+ // IPC handlers
+ void OnDeleteProxy();
+
+ int routing_id_;
+ int frame_routing_id_;
+ RenderFrameImpl* render_frame_;
+
+ DISALLOW_COPY_AND_ASSIGN(RenderFrameProxy);
+};
+
+} // namespace
+
+#endif // CONTENT_RENDERER_RENDER_FRAME_PROXY_H_
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index e4ea63fd7b..f64d242a21 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -76,13 +76,15 @@
#include "content/renderer/media/audio_message_filter.h"
#include "content/renderer/media/audio_renderer_mixer_manager.h"
#include "content/renderer/media/media_stream_center.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/midi_message_filter.h"
#include "content/renderer/media/peer_connection_tracker.h"
#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h"
+#include "content/renderer/media/rtc_peer_connection_handler.h"
#include "content/renderer/media/video_capture_impl_manager.h"
#include "content/renderer/media/video_capture_message_filter.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/media/webrtc_identity_service.h"
+#include "content/renderer/net_info_helper.h"
#include "content/renderer/p2p/socket_dispatcher.h"
#include "content/renderer/render_process_impl.h"
#include "content/renderer/render_view_impl.h"
@@ -196,6 +198,7 @@ class RenderViewZoomer : public RenderViewVisitor {
// Empty scheme works as wildcard that matches any scheme,
if ((net::GetHostOrSpecFromURL(url) == host_) &&
(scheme_.empty() || scheme_ == url.scheme())) {
+ webview->hidePopups();
webview->setZoomLevel(zoom_level_);
}
return true;
@@ -377,9 +380,9 @@ void RenderThreadImpl::Init() {
webrtc_identity_service_.reset(new WebRTCIdentityService());
- media_stream_factory_.reset(new MediaStreamDependencyFactory(
+ peer_connection_factory_.reset(new PeerConnectionDependencyFactory(
p2p_socket_dispatcher_.get()));
- AddObserver(media_stream_factory_.get());
+ AddObserver(peer_connection_factory_.get());
#endif // defined(ENABLE_WEBRTC)
audio_input_message_filter_ =
@@ -533,10 +536,10 @@ void RenderThreadImpl::Shutdown() {
RemoveFilter(audio_message_filter_.get());
audio_message_filter_ = NULL;
- // |media_stream_factory_| produces users of |vc_manager_| so it must be
- // destroyed first.
#if defined(ENABLE_WEBRTC)
- media_stream_factory_.reset();
+ RTCPeerConnectionHandler::DestructAllHandlers();
+
+ peer_connection_factory_.reset();
#endif
RemoveFilter(vc_manager_->video_capture_message_filter());
vc_manager_.reset();
@@ -561,6 +564,11 @@ void RenderThreadImpl::Shutdown() {
input_event_filter_ = NULL;
}
+ // RemoveEmbeddedWorkerRoute may be called while deleting
+ // EmbeddedWorkerDispatcher. So it must be deleted before deleting
+ // RenderThreadImpl.
+ embedded_worker_dispatcher_.reset();
+
// Ramp down IDB before we ramp down WebKit (and V8), since IDB classes might
// hold pointers to V8 objects (e.g., via pending requests).
main_thread_indexed_db_dispatcher_.reset();
@@ -1172,7 +1180,7 @@ scoped_ptr<gfx::GpuMemoryBuffer> RenderThreadImpl::AllocateGpuMemoryBuffer(
.PassAs<gfx::GpuMemoryBuffer>();
}
-void RenderThreadImpl::AcceptConnection(
+void RenderThreadImpl::ConnectToService(
const mojo::String& service_name,
mojo::ScopedMessagePipeHandle message_pipe) {
// TODO(darin): Invent some kind of registration system to use here.
@@ -1251,6 +1259,7 @@ void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) {
params.frame_name,
false,
params.swapped_out,
+ params.proxy_routing_id,
params.hidden,
params.never_visible,
params.next_page_id,
@@ -1314,7 +1323,7 @@ blink::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter(
->OverrideCreateWebMediaStreamCenter(client);
if (!media_stream_center_) {
scoped_ptr<MediaStreamCenter> media_stream_center(
- new MediaStreamCenter(client, GetMediaStreamDependencyFactory()));
+ new MediaStreamCenter(client, GetPeerConnectionDependencyFactory()));
AddObserver(media_stream_center.get());
media_stream_center_ = media_stream_center.release();
}
@@ -1323,9 +1332,9 @@ blink::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter(
return media_stream_center_;
}
-MediaStreamDependencyFactory*
-RenderThreadImpl::GetMediaStreamDependencyFactory() {
- return media_stream_factory_.get();
+PeerConnectionDependencyFactory*
+RenderThreadImpl::GetPeerConnectionDependencyFactory() {
+ return peer_connection_factory_.get();
}
GpuChannelHost* RenderThreadImpl::GetGpuChannel() {
@@ -1351,11 +1360,15 @@ void RenderThreadImpl::OnPurgePluginListCache(bool reload_pages) {
FOR_EACH_OBSERVER(RenderProcessObserver, observers_, PluginListChanged());
}
-void RenderThreadImpl::OnNetworkStateChanged(bool online) {
+void RenderThreadImpl::OnNetworkStateChanged(
+ bool online,
+ net::NetworkChangeNotifier::ConnectionType type) {
EnsureWebKitInitialized();
WebNetworkStateNotifier::setOnLine(online);
- FOR_EACH_OBSERVER(RenderProcessObserver, observers_,
- NetworkStateChanged(online));
+ FOR_EACH_OBSERVER(
+ RenderProcessObserver, observers_, NetworkStateChanged(online));
+ WebNetworkStateNotifier::setWebConnectionType(
+ NetConnectionTypeToWebConnectionType(type));
}
void RenderThreadImpl::OnTempCrashWithData(const GURL& data) {
@@ -1419,8 +1432,12 @@ void RenderThreadImpl::OnMemoryPressure(
base::MemoryPressureListener::MEMORY_PRESSURE_CRITICAL) {
// Trigger full v8 garbage collection on critical memory notification.
v8::V8::LowMemoryNotification();
- // Clear the image cache.
- blink::WebImageCache::clear();
+
+ if (webkit_platform_support_) {
+ // Clear the image cache. Do not call into blink if it is not initialized.
+ blink::WebImageCache::clear();
+ }
+
// Purge Skia font cache, by setting it to 0 and then again to the previous
// limit.
size_t font_cache_limit = SkGraphics::SetFontCacheLimit(0);
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index f221bd4da0..778c95b989 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -20,6 +20,8 @@
#include "content/common/content_export.h"
#include "content/common/gpu/client/gpu_channel_host.h"
#include "content/public/renderer/render_thread.h"
+#include "net/base/network_change_notifier.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
#include "ui/gfx/native_widget_types.h"
#if defined(OS_MACOSX)
@@ -86,8 +88,9 @@ class IndexedDBDispatcher;
class InputEventFilter;
class InputHandlerManager;
class MediaStreamCenter;
-class MediaStreamDependencyFactory;
+class PeerConnectionDependencyFactory;
class MidiMessageFilter;
+class NetInfoDispatcher;
class P2PSocketDispatcher;
class PeerConnectionTracker;
class RendererDemuxerAndroid;
@@ -261,7 +264,7 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread,
blink::WebMediaStreamCenterClient* client);
// Returns a factory used for creating RTC PeerConnection objects.
- MediaStreamDependencyFactory* GetMediaStreamDependencyFactory();
+ PeerConnectionDependencyFactory* GetPeerConnectionDependencyFactory();
PeerConnectionTracker* peer_connection_tracker() {
return peer_connection_tracker_.get();
@@ -416,8 +419,8 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread,
unsigned internalformat,
unsigned usage) OVERRIDE;
- // mojo::ShellClient implementation:
- virtual void AcceptConnection(
+ // mojo::ServiceProvider implementation:
+ virtual void ConnectToService(
const mojo::String& service_name,
mojo::ScopedMessagePipeHandle message_pipe) OVERRIDE;
@@ -429,7 +432,8 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread,
void OnCreateNewView(const ViewMsg_New_Params& params);
void OnTransferBitmap(const SkBitmap& bitmap, int resource_id);
void OnPurgePluginListCache(bool reload_pages);
- void OnNetworkStateChanged(bool online);
+ void OnNetworkStateChanged(bool online,
+ net::NetworkChangeNotifier::ConnectionType type);
void OnGetAccessibilityTree();
void OnTempCrashWithData(const GURL& data);
void OnUpdateTimezone();
@@ -472,7 +476,7 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread,
#endif
scoped_refptr<DevToolsAgentFilter> devtools_agent_message_filter_;
- scoped_ptr<MediaStreamDependencyFactory> media_stream_factory_;
+ scoped_ptr<PeerConnectionDependencyFactory> peer_connection_factory_;
// This is used to communicate to the browser process the status
// of all the peer connections created in the renderer.
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc
index 6715ef3337..11d486ee2c 100644
--- a/content/renderer/render_thread_impl_browsertest.cc
+++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -57,8 +57,9 @@ TEST_F(RenderThreadImplBrowserTest,
std::string channel_id = IPC::Channel::GenerateVerifiedChannelID(
std::string());
DummyListener dummy_listener;
- IPC::Channel channel(channel_id, IPC::Channel::MODE_SERVER, &dummy_listener);
- ASSERT_TRUE(channel.Connect());
+ scoped_ptr<IPC::Channel> channel(
+ IPC::Channel::CreateServer(channel_id, &dummy_listener));
+ ASSERT_TRUE(channel->Connect());
scoped_ptr<MockRenderProcess> mock_process(new MockRenderProcess);
// Owned by mock_process.
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index b06151b93a..9acd60ad18 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -82,6 +82,8 @@ namespace content {
namespace {
+static const int kProxyRoutingId = 13;
+
#if (defined(USE_AURA) && defined(USE_X11)) || defined(USE_OZONE)
// Converts MockKeyboard::Modifiers to ui::EventFlags.
int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) {
@@ -488,7 +490,7 @@ TEST_F(RenderViewImplTest, SendSwapOutACK) {
int initial_page_id = view()->GetPageId();
// Respond to a swap out request.
- view()->main_render_frame()->OnSwapOut();
+ view()->main_render_frame()->OnSwapOut(kProxyRoutingId);
// Ensure the swap out commits synchronously.
EXPECT_NE(initial_page_id, view()->GetPageId());
@@ -501,7 +503,7 @@ TEST_F(RenderViewImplTest, SendSwapOutACK) {
// It is possible to get another swap out request. Ensure that we send
// an ACK, even if we don't have to do anything else.
render_thread_->sink().ClearMessages();
- view()->main_render_frame()->OnSwapOut();
+ view()->main_render_frame()->OnSwapOut(kProxyRoutingId);
const IPC::Message* msg2 = render_thread_->sink().GetUniqueMessageMatching(
FrameHostMsg_SwapOut_ACK::ID);
ASSERT_TRUE(msg2);
@@ -537,9 +539,10 @@ TEST_F(RenderViewImplTest, ReloadWhileSwappedOut) {
const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_A);
- int page_id_A;
- PageState state_A;
- ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A);
+ ViewHostMsg_UpdateState::Param params;
+ ViewHostMsg_UpdateState::Read(msg_A, &params);
+ int page_id_A = params.a;
+ PageState state_A = params.b;
EXPECT_EQ(1, page_id_A);
render_thread_->sink().ClearMessages();
@@ -556,7 +559,7 @@ TEST_F(RenderViewImplTest, ReloadWhileSwappedOut) {
ProcessPendingMessages();
// Respond to a swap out request.
- view()->main_render_frame()->OnSwapOut();
+ view()->main_render_frame()->OnSwapOut(kProxyRoutingId);
// Check for a OnSwapOutACK.
const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching(
@@ -609,9 +612,10 @@ TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) {
const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_A);
- int page_id_A;
- PageState state_A;
- ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A);
+ ViewHostMsg_UpdateState::Param param;
+ ViewHostMsg_UpdateState::Read(msg_A, &param);
+ int page_id_A = param.a;
+ PageState state_A = param.b;
EXPECT_EQ(1, page_id_A);
render_thread_->sink().ClearMessages();
@@ -623,9 +627,9 @@ TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) {
const IPC::Message* msg_B = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_B);
- int page_id_B;
- PageState state_B;
- ViewHostMsg_UpdateState::Read(msg_B, &page_id_B, &state_B);
+ ViewHostMsg_UpdateState::Read(msg_B, &param);
+ int page_id_B = param.a;
+ PageState state_B = param.b;
EXPECT_EQ(2, page_id_B);
EXPECT_NE(state_A, state_B);
render_thread_->sink().ClearMessages();
@@ -638,9 +642,9 @@ TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) {
const IPC::Message* msg_C = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_C);
- int page_id_C;
- PageState state_C;
- ViewHostMsg_UpdateState::Read(msg_C, &page_id_C, &state_C);
+ ViewHostMsg_UpdateState::Read(msg_C, &param);
+ int page_id_C = param.a;
+ PageState state_C = param.b;
EXPECT_EQ(3, page_id_C);
EXPECT_NE(state_B, state_C);
render_thread_->sink().ClearMessages();
@@ -690,9 +694,9 @@ TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) {
const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg);
- int page_id;
- PageState state;
- ViewHostMsg_UpdateState::Read(msg, &page_id, &state);
+ ViewHostMsg_UpdateState::Read(msg, &param);
+ int page_id = param.a;
+ PageState state = param.b;
EXPECT_EQ(page_id_C, page_id);
EXPECT_NE(state_A, state);
EXPECT_NE(state_B, state);
@@ -720,9 +724,10 @@ TEST_F(RenderViewImplTest, StaleNavigationsIgnored) {
const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_A);
- int page_id_A;
- PageState state_A;
- ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A);
+ ViewHostMsg_UpdateState::Param param;
+ ViewHostMsg_UpdateState::Read(msg_A, &param);
+ int page_id_A = param.a;
+ PageState state_A = param.b;
EXPECT_EQ(1, page_id_A);
render_thread_->sink().ClearMessages();
@@ -785,9 +790,10 @@ TEST_F(RenderViewImplTest, DontIgnoreBackAfterNavEntryLimit) {
const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_A);
- int page_id_A;
- PageState state_A;
- ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A);
+ ViewHostMsg_UpdateState::Param param;
+ ViewHostMsg_UpdateState::Read(msg_A, &param);
+ int page_id_A = param.a;
+ PageState state_A = param.b;
EXPECT_EQ(1, page_id_A);
render_thread_->sink().ClearMessages();
@@ -802,9 +808,9 @@ TEST_F(RenderViewImplTest, DontIgnoreBackAfterNavEntryLimit) {
const IPC::Message* msg_B = render_thread_->sink().GetUniqueMessageMatching(
ViewHostMsg_UpdateState::ID);
ASSERT_TRUE(msg_B);
- int page_id_B;
- PageState state_B;
- ViewHostMsg_UpdateState::Read(msg_B, &page_id_B, &state_B);
+ ViewHostMsg_UpdateState::Read(msg_B, &param);
+ int page_id_B = param.a;
+ PageState state_B = param.b;
EXPECT_EQ(2, page_id_B);
render_thread_->sink().ClearMessages();
@@ -895,13 +901,11 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
const IPC::Message* msg = render_thread_->sink().GetMessageAt(0);
EXPECT_TRUE(msg != NULL);
EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type());
- ui::TextInputType type;
- bool can_compose_inline = false;
- ui::TextInputMode input_mode = ui::TEXT_INPUT_MODE_DEFAULT;
- ViewHostMsg_TextInputTypeChanged::Read(msg,
- &type,
- &input_mode,
- &can_compose_inline);
+ ViewHostMsg_TextInputTypeChanged::Param params;
+ ViewHostMsg_TextInputTypeChanged::Read(msg, &params);
+ ui::TextInputType type = params.a;
+ ui::TextInputMode input_mode = params.b;
+ bool can_compose_inline = params.c;
EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type);
EXPECT_EQ(true, can_compose_inline);
@@ -917,10 +921,9 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
msg = render_thread_->sink().GetMessageAt(0);
EXPECT_TRUE(msg != NULL);
EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type());
- ViewHostMsg_TextInputTypeChanged::Read(msg,
- &type,
- &input_mode,
- &can_compose_inline);
+ ViewHostMsg_TextInputTypeChanged::Read(msg, & params);
+ type = params.a;
+ input_mode = params.b;
EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type);
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kInputModeTestCases); i++) {
@@ -940,10 +943,9 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) {
const IPC::Message* msg = render_thread_->sink().GetMessageAt(0);
EXPECT_TRUE(msg != NULL);
EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type());
- ViewHostMsg_TextInputTypeChanged::Read(msg,
- &type,
- &input_mode,
- &can_compose_inline);
+ ViewHostMsg_TextInputTypeChanged::Read(msg, & params);
+ type = params.a;
+ input_mode = params.b;
EXPECT_EQ(test_case->expected_mode, input_mode);
}
}
@@ -1810,6 +1812,9 @@ TEST_F(RenderViewImplTest, TestBackForward) {
EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_b, &was_page_b));
EXPECT_EQ(1, was_page_b);
+ PageState back_state =
+ HistoryEntryToPageState(view()->history_controller()->GetCurrentEntry());
+
LoadHTML("<div id=pagename>Page C</div>");
int was_page_c = -1;
base::string16 check_page_c =
@@ -1820,17 +1825,18 @@ TEST_F(RenderViewImplTest, TestBackForward) {
PageState forward_state =
HistoryEntryToPageState(view()->history_controller()->GetCurrentEntry());
- GoBack(HistoryEntryToPageState(
- view()->history_controller()->GetPreviousEntry()));
+ GoBack(back_state);
EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_b, &was_page_b));
EXPECT_EQ(1, was_page_b);
+ PageState back_state2 =
+ HistoryEntryToPageState(view()->history_controller()->GetCurrentEntry());
+
GoForward(forward_state);
EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_c, &was_page_c));
EXPECT_EQ(1, was_page_c);
- GoBack(HistoryEntryToPageState(
- view()->history_controller()->GetPreviousEntry()));
+ GoBack(back_state2);
EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_b, &was_page_b));
EXPECT_EQ(1, was_page_b);
@@ -2233,40 +2239,6 @@ TEST_F(RenderViewImplTest, SendFaviconURLUpdateEvent) {
ViewHostMsg_UpdateFaviconURL::ID));
}
-// Test progress tracker messages.
-TEST_F(RenderViewImplTest, SendProgressCompletionUpdates) {
- std::string data_url_string = "data:text/html,<body>placeholder</body>";
- GURL url(data_url_string);
- GetMainFrame()->loadRequest(blink::WebURLRequest(url));
-
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- FrameHostMsg_DidStartLoading::ID));
-
- // The load started, we should receive a start notification and a progress
- // update with the minimum progress.
- const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching(
- ViewHostMsg_DidChangeLoadProgress::ID);
- EXPECT_TRUE(message);
- Tuple1<double> progress_value;
- ViewHostMsg_DidChangeLoadProgress::Read(message, &progress_value);
- EXPECT_EQ(0.1, progress_value.a);
- render_thread_->sink().ClearMessages();
-
- FrameLoadWaiter(frame()).Wait();
-
- // The data url has loaded, so we should see a progress change to 1.0 (done)
- // and a stop notification.
- message = render_thread_->sink().GetFirstMessageMatching(
- ViewHostMsg_DidChangeLoadProgress::ID);
- EXPECT_TRUE(message);
- ViewHostMsg_DidChangeLoadProgress::Read(message, &progress_value);
- EXPECT_EQ(1.0, progress_value.a);
-
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- FrameHostMsg_DidStopLoading::ID));
- render_thread_->sink().ClearMessages();
-}
-
TEST_F(RenderViewImplTest, FocusElementCallsFocusedNodeChanged) {
LoadHTML("<input id='test1' value='hello1'></input>"
"<input id='test2' value='hello2'></input>");
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 17b69a0e3f..c23a44e9f9 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -86,16 +86,16 @@
#include "content/renderer/ime_event_guard.h"
#include "content/renderer/input/input_handler_manager.h"
#include "content/renderer/internal_document_state_data.h"
-#include "content/renderer/load_progress_tracker.h"
#include "content/renderer/media/audio_device_factory.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/media_stream_dispatcher.h"
#include "content/renderer/media/midi_dispatcher.h"
#include "content/renderer/media/video_capture_impl_manager.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/memory_benchmarking_extension.h"
#include "content/renderer/mhtml_generator.h"
#include "content/renderer/push_messaging_dispatcher.h"
#include "content/renderer/render_frame_impl.h"
+#include "content/renderer/render_frame_proxy.h"
#include "content/renderer/render_process.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/render_view_impl_params.h"
@@ -199,7 +199,6 @@
#include "content/renderer/android/content_detector.h"
#include "content/renderer/android/email_detector.h"
#include "content/renderer/android/phone_number_detector.h"
-#include "content/renderer/media/android/renderer_media_player_manager.h"
#include "net/android/network_library.h"
#include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/public/platform/WebFloatPoint.h"
@@ -661,7 +660,6 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
mouse_lock_dispatcher_(NULL),
#if defined(OS_ANDROID)
expected_content_intent_id_(0),
- media_player_manager_(NULL),
#endif
#if defined(OS_WIN)
focused_plugin_id_(-1),
@@ -672,7 +670,6 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
pepper_last_mouse_event_target_(NULL),
#endif
enumeration_completion_id_(0),
- load_progress_tracker_(new LoadProgressTracker(this)),
session_storage_namespace_id_(params->session_storage_namespace_id),
next_snapshot_id_(0) {
}
@@ -693,6 +690,14 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
WebLocalFrame* web_frame = WebLocalFrame::create(main_render_frame);
main_render_frame->SetWebFrame(web_frame);
+ if (params->proxy_routing_id != MSG_ROUTING_NONE) {
+ CHECK(params->swapped_out);
+ RenderFrameProxy* proxy =
+ RenderFrameProxy::CreateFrameProxy(params->proxy_routing_id,
+ params->main_frame_routing_id);
+ main_render_frame->set_render_frame_proxy(proxy);
+ }
+
webwidget_ = WebView::create(this);
webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
@@ -781,10 +786,6 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
new TextInputClientObserver(this);
#endif // defined(OS_MACOSX)
-#if defined(OS_ANDROID)
- media_player_manager_ = new RendererMediaPlayerManager(this);
-#endif
-
// The next group of objects all implement RenderViewObserver, so are deleted
// along with the RenderView automatically.
devtools_agent_ = new DevToolsAgent(this);
@@ -908,6 +909,7 @@ RenderViewImpl* RenderViewImpl::Create(
const base::string16& frame_name,
bool is_renderer_created,
bool swapped_out,
+ int32 proxy_routing_id,
bool hidden,
bool never_visible,
int32 next_page_id,
@@ -925,6 +927,7 @@ RenderViewImpl* RenderViewImpl::Create(
frame_name,
is_renderer_created,
swapped_out,
+ proxy_routing_id,
hidden,
never_visible,
next_page_id,
@@ -1055,8 +1058,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
return true;
bool handled = true;
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(RenderViewImpl, message, msg_is_ok)
+ IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message)
IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand)
IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
@@ -1065,13 +1067,11 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
OnSetEditCommandsForNextKeyEvent)
IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate)
IPC_MESSAGE_HANDLER(ViewMsg_Stop, OnStop)
- IPC_MESSAGE_HANDLER(ViewMsg_SetName, OnSetName)
IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt)
IPC_MESSAGE_HANDLER(ViewMsg_SaveImageAt, OnSaveImageAt)
IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind)
IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding)
IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom)
- IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevel, OnSetZoomLevel)
IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL,
OnSetZoomLevelForLoadingURL)
IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding)
@@ -1098,7 +1098,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted)
IPC_MESSAGE_HANDLER(ViewMsg_ClearFocusedElement, OnClearFocusedElement)
- IPC_MESSAGE_HANDLER(ViewMsg_SetBackground, OnSetBackground)
+ IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque)
IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode,
OnEnablePreferredSizeChangedMode)
IPC_MESSAGE_HANDLER(ViewMsg_EnableAutoResize, OnEnableAutoResize)
@@ -1125,6 +1125,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
OnReleaseDisambiguationPopupBitmap)
IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted,
OnWindowSnapshotCompleted)
+ IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret)
#if defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult,
OnActivateNearestFindResult)
@@ -1132,7 +1133,6 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItems, OnSelectPopupMenuItems)
IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState,
OnUpdateTopControlsState)
- IPC_MESSAGE_HANDLER(ViewMsg_PauseVideo, OnPauseVideo)
IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData)
#elif defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted,
@@ -1149,15 +1149,18 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message))
IPC_END_MESSAGE_MAP()
- if (!msg_is_ok) {
- // The message had a handler, but its deserialization failed.
- // Kill the renderer to avoid potential spoofing attacks.
- CHECK(false) << "Unable to deserialize message in RenderViewImpl.";
- }
-
return handled;
}
+void RenderViewImpl::OnSelectWordAroundCaret() {
+ if (!webview())
+ return;
+
+ handling_input_event_ = true;
+ webview()->focusedFrame()->selectWordAroundCaret();
+ handling_input_event_ = false;
+}
+
void RenderViewImpl::OnNavigate(const FrameMsg_Navigate_Params& params) {
FOR_EACH_OBSERVER(RenderViewObserver, observers_, Navigate(params.url));
}
@@ -1263,13 +1266,6 @@ void RenderViewImpl::OnSetEditCommandsForNextKeyEvent(
edit_commands_ = edit_commands;
}
-void RenderViewImpl::OnSetName(const std::string& name) {
- if (!webview())
- return;
-
- webview()->mainFrame()->setName(WebString::fromUTF8(name));
-}
-
void RenderViewImpl::OnSetHistoryLengthAndPrune(int history_length,
int32 minimum_page_id) {
DCHECK_GE(history_length, 0);
@@ -1308,56 +1304,17 @@ void RenderViewImpl::OnSetInLiveResize(bool in_live_resize) {
}
#endif
-#if defined(OS_ANDROID)
-void RenderViewImpl::OnPauseVideo() {
- // Inform RendererMediaPlayerManager to release all video player resources.
- // If something is in progress the resource will not be freed, it will
- // only be freed once the tab is destroyed or if the user navigates away
- // via WebMediaPlayerAndroid::Destroy.
- media_player_manager_->ReleaseVideoResources();
-}
-#endif
-
///////////////////////////////////////////////////////////////////////////////
-// Tell the embedding application that the title of the active page has changed
-void RenderViewImpl::UpdateTitle(WebFrame* frame,
- const base::string16& title,
- WebTextDirection title_direction) {
- // Ignore all but top level navigations.
- if (frame->parent())
- return;
-
- base::debug::TraceLog::GetInstance()->UpdateProcessLabel(
- routing_id_, base::UTF16ToUTF8(title));
-
- base::string16 shortened_title = title.substr(0, kMaxTitleChars);
- Send(new ViewHostMsg_UpdateTitle(routing_id_, page_id_, shortened_title,
- title_direction));
-}
-
-void RenderViewImpl::UpdateEncoding(WebFrame* frame,
- const std::string& encoding_name) {
- // Only update main frame's encoding_name.
- if (webview()->mainFrame() == frame &&
- last_encoding_name_ != encoding_name) {
- // Save the encoding name for later comparing.
- last_encoding_name_ = encoding_name;
-
- Send(new ViewHostMsg_UpdateEncoding(routing_id_, last_encoding_name_));
- }
-}
-
-// Sends the last committed session history state to the browser so it will be
-// saved before we navigate to a new page. This must be called *before* the
-// page ID has been updated so we know what it was.
+// Sends the current history state to the browser so it will be saved before we
+// navigate to a new page.
void RenderViewImpl::UpdateSessionHistory(WebFrame* frame) {
// If we have a valid page ID at this point, then it corresponds to the page
// we are navigating away from. Otherwise, this is the first navigation, so
// there is no past session history to record.
if (page_id_ == -1)
return;
- SendUpdateState(history_controller_->GetPreviousEntry());
+ SendUpdateState(history_controller_->GetCurrentEntry());
}
void RenderViewImpl::SendUpdateState(HistoryEntry* entry) {
@@ -1490,6 +1447,7 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator,
base::string16(), // WebCore will take care of setting the correct name.
true, // is_renderer_created
false, // swapped_out
+ MSG_ROUTING_NONE, // proxy_routing_id
params.disposition == NEW_BACKGROUND_TAB, // hidden
never_visible,
1, // next_page_id
@@ -1561,10 +1519,6 @@ bool RenderViewImpl::enumerateChosenDirectory(
}
void RenderViewImpl::FrameDidStartLoading(WebFrame* frame) {
- if (load_progress_tracker_ != NULL) {
- load_progress_tracker_->DidStartLoading(
- RenderFrameImpl::FromWebFrame(frame)->GetRoutingID());
- }
DCHECK_GE(frames_in_progress_, 0);
if (frames_in_progress_ == 0)
FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidStartLoading());
@@ -1572,10 +1526,6 @@ void RenderViewImpl::FrameDidStartLoading(WebFrame* frame) {
}
void RenderViewImpl::FrameDidStopLoading(WebFrame* frame) {
- if (load_progress_tracker_ != NULL) {
- load_progress_tracker_->DidStopLoading(
- RenderFrameImpl::FromWebFrame(frame)->GetRoutingID());
- }
// TODO(japhet): This should be a DCHECK, but the pdf plugin sometimes
// calls DidStopLoading() without a matching DidStartLoading().
if (frames_in_progress_ == 0)
@@ -1587,27 +1537,10 @@ void RenderViewImpl::FrameDidStopLoading(WebFrame* frame) {
}
}
-void RenderViewImpl::FrameDidChangeLoadProgress(WebFrame* frame,
- double load_progress) {
- if (load_progress_tracker_ != NULL) {
- load_progress_tracker_->DidChangeLoadProgress(
- RenderFrameImpl::FromWebFrame(frame)->GetRoutingID(), load_progress);
- }
-}
-
void RenderViewImpl::didCancelCompositionOnSelectionChange() {
Send(new ViewHostMsg_ImeCancelComposition(routing_id()));
}
-void RenderViewImpl::didExecuteCommand(const WebString& command_name) {
- const std::string& name = base::UTF16ToUTF8(command_name);
- if (StartsWithASCII(name, "Move", true) ||
- StartsWithASCII(name, "Insert", true) ||
- StartsWithASCII(name, "Delete", true))
- return;
- RenderThreadImpl::current()->RecordComputedAction(name);
-}
-
bool RenderViewImpl::handleCurrentKeyboardEvent() {
if (edit_commands_.empty())
return false;
@@ -1951,23 +1884,6 @@ bool RenderViewImpl::isPointerLocked() {
webwidget_mouse_lock_target_.get());
}
-void RenderViewImpl::didActivateCompositor() {
-#if !defined(OS_MACOSX) // many events are unhandled - http://crbug.com/138003
- RenderThreadImpl* render_thread = RenderThreadImpl::current();
- // render_thread may be NULL in tests.
- InputHandlerManager* input_handler_manager =
- render_thread ? render_thread->input_handler_manager() : NULL;
- if (input_handler_manager) {
- input_handler_manager->AddInputHandler(
- routing_id_,
- compositor_->GetInputHandler(),
- AsWeakPtr());
- }
-#endif
-
- RenderWidget::didActivateCompositor();
-}
-
void RenderViewImpl::didHandleGestureEvent(
const WebGestureEvent& event,
bool event_cancelled) {
@@ -1986,9 +1902,21 @@ void RenderViewImpl::didHandleGestureEvent(
void RenderViewImpl::initializeLayerTreeView() {
RenderWidget::initializeLayerTreeView();
RenderWidgetCompositor* rwc = compositor();
- if (!rwc || !webview() || !webview()->devToolsAgent())
+ if (!rwc)
return;
- webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId());
+ if (webview() && webview()->devToolsAgent())
+ webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId());
+
+#if !defined(OS_MACOSX) // many events are unhandled - http://crbug.com/138003
+ RenderThreadImpl* render_thread = RenderThreadImpl::current();
+ // render_thread may be NULL in tests.
+ InputHandlerManager* input_handler_manager =
+ render_thread ? render_thread->input_handler_manager() : NULL;
+ if (input_handler_manager) {
+ input_handler_manager->AddInputHandler(
+ routing_id_, rwc->GetInputHandler(), AsWeakPtr());
+ }
+#endif
}
// blink::WebFrameClient -----------------------------------------------------
@@ -2130,7 +2058,7 @@ void RenderViewImpl::PopulateDocumentStateFromPending(
InternalDocumentStateData* internal_data =
InternalDocumentStateData::FromDocumentState(document_state);
- if (!params.url.SchemeIs(kJavaScriptScheme) &&
+ if (!params.url.SchemeIs(url::kJavaScriptScheme) &&
params.navigation_type == FrameMsg_Navigate_Type::RESTORE) {
// We're doing a load of a page that was restored from the last session. By
// default this prefers the cache over loading (LOAD_PREFERRING_CACHE) which
@@ -2167,7 +2095,7 @@ NavigationState* RenderViewImpl::CreateNavigationStateFromPending() {
// A navigation resulting from loading a javascript URL should not be treated
// as a browser initiated event. Instead, we want it to look as if the page
// initiated any load resulting from JS execution.
- if (!params.url.SchemeIs(kJavaScriptScheme)) {
+ if (!params.url.SchemeIs(url::kJavaScriptScheme)) {
navigation_state = NavigationState::CreateBrowserInitiated(
params.page_id,
params.pending_history_list_offset,
@@ -2222,13 +2150,9 @@ void RenderViewImpl::FrameDidCommitProvisionalLoad(WebLocalFrame* frame,
}
}
-void RenderViewImpl::didClearWindowObject(WebLocalFrame* frame, int world_id) {
- FOR_EACH_OBSERVER(RenderViewObserver, observers_,
- DidClearWindowObject(frame, world_id));
-
- // Only install controllers into the main world.
- if (world_id)
- return;
+void RenderViewImpl::didClearWindowObject(WebLocalFrame* frame) {
+ FOR_EACH_OBSERVER(
+ RenderViewObserver, observers_, DidClearWindowObject(frame));
if (enabled_bindings_& BINDINGS_POLICY_WEB_UI)
WebUIExtension::Install(frame);
@@ -2245,15 +2169,6 @@ void RenderViewImpl::didClearWindowObject(WebLocalFrame* frame, int world_id) {
MemoryBenchmarkingExtension::Install(frame);
}
-void RenderViewImpl::didReceiveTitle(WebLocalFrame* frame,
- const WebString& title,
- WebTextDirection direction) {
- UpdateTitle(frame, title, direction);
-
- // Also check whether we have new encoding name.
- UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
-}
-
void RenderViewImpl::didChangeIcon(WebLocalFrame* frame,
WebIconURL::Type icon_type) {
if (frame->parent())
@@ -2733,12 +2648,6 @@ void RenderViewImpl::OnZoom(PageZoom zoom) {
zoomLevelChanged();
}
-void RenderViewImpl::OnSetZoomLevel(double zoom_level) {
- webview()->hidePopups();
- webview()->setZoomLevel(zoom_level);
- zoomLevelChanged();
-}
-
void RenderViewImpl::OnSetZoomLevelForLoadingURL(const GURL& url,
double zoom_level) {
#if !defined(OS_ANDROID)
@@ -2962,6 +2871,8 @@ void RenderViewImpl::OnDisableScrollbarsForSmallWindows(
void RenderViewImpl::OnSetRendererPrefs(
const RendererPreferences& renderer_prefs) {
double old_zoom_level = renderer_preferences_.default_zoom_level;
+ std::string old_accept_languages = renderer_preferences_.accept_languages;
+
renderer_preferences_ = renderer_prefs;
UpdateFontRenderingFromRendererPrefs();
@@ -2996,6 +2907,11 @@ void RenderViewImpl::OnSetRendererPrefs(
webview()->setZoomLevel(renderer_preferences_.default_zoom_level);
zoomLevelChanged();
}
+
+ if (webview() &&
+ old_accept_languages != renderer_preferences_.accept_languages) {
+ webview()->acceptLanguagesChanged();
+ }
}
void RenderViewImpl::OnMediaPlayerActionAt(const gfx::Point& location,
@@ -3142,7 +3058,12 @@ void RenderViewImpl::OnResize(const ViewMsg_Resize_Params& params) {
UpdateScrollState(webview()->mainFrame());
}
+ gfx::Size old_visible_viewport_size = visible_viewport_size_;
+
RenderWidget::OnResize(params);
+
+ if (old_visible_viewport_size != visible_viewport_size_)
+ has_scrolled_focused_editable_node_into_rect_ = false;
}
void RenderViewImpl::DidInitiatePaint() {
@@ -3230,13 +3151,11 @@ void RenderViewImpl::OnClearFocusedElement() {
webview()->clearFocusedElement();
}
-void RenderViewImpl::OnSetBackground(const SkBitmap& background) {
+void RenderViewImpl::OnSetBackgroundOpaque(bool opaque) {
if (webview())
- webview()->setIsTransparent(!background.empty());
+ webview()->setIsTransparent(!opaque);
if (compositor_)
- compositor_->setHasTransparentBackground(!background.empty());
-
- SetBackground(background);
+ compositor_->setHasTransparentBackground(!opaque);
}
void RenderViewImpl::OnSetAccessibilityMode(AccessibilityMode new_mode) {
@@ -3728,22 +3647,16 @@ blink::WebSpeechRecognizer* RenderViewImpl::speechRecognizer() {
void RenderViewImpl::zoomLimitsChanged(double minimum_level,
double maximum_level) {
- // For now, don't remember plugin zoom values. We don't want to mix them with
- // normal web content (i.e. a fixed layout plugin would usually want them
- // different).
- bool remember = !webview()->mainFrame()->document().isPluginDocument();
-
int minimum_percent = static_cast<int>(
ZoomLevelToZoomFactor(minimum_level) * 100);
int maximum_percent = static_cast<int>(
ZoomLevelToZoomFactor(maximum_level) * 100);
Send(new ViewHostMsg_UpdateZoomLimits(
- routing_id_, minimum_percent, maximum_percent, remember));
+ routing_id_, minimum_percent, maximum_percent));
}
void RenderViewImpl::zoomLevelChanged() {
- bool remember = !webview()->mainFrame()->document().isPluginDocument();
double zoom_level = webview()->zoomLevel();
FOR_EACH_OBSERVER(RenderViewObserver, observers_, ZoomLevelChanged());
@@ -3754,7 +3667,7 @@ void RenderViewImpl::zoomLevelChanged() {
// Tell the browser which url got zoomed so it can update the menu and the
// saved values if necessary
Send(new ViewHostMsg_DidZoomURL(
- routing_id_, zoom_level, remember,
+ routing_id_, zoom_level,
GURL(webview()->mainFrame()->document().url())));
}
}
@@ -4048,6 +3961,36 @@ void RenderViewImpl::SetDeviceScaleFactorForTesting(float factor) {
OnResize(params);
}
+void RenderViewImpl::SetScreenOrientationForTesting(
+ const blink::WebScreenOrientationType& orientation) {
+ ViewMsg_Resize_Params params;
+ params.screen_info = screen_info_;
+ params.screen_info.orientationType = orientation;
+ // FIXME(ostap): This relationship between orientationType and
+ // orientationAngle is temporary. The test should be able to specify
+ // the angle in addition to the orientation type.
+ switch (orientation) {
+ case blink::WebScreenOrientationLandscapePrimary:
+ params.screen_info.orientationAngle = 90;
+ break;
+ case blink::WebScreenOrientationLandscapeSecondary:
+ params.screen_info.orientationAngle = -90;
+ break;
+ case blink::WebScreenOrientationPortraitSecondary:
+ params.screen_info.orientationAngle = 180;
+ break;
+ default:
+ params.screen_info.orientationAngle = 0;
+ }
+ params.new_size = size();
+ params.physical_backing_size = gfx::ToCeiledSize(
+ gfx::ScaleSize(size(), params.screen_info.deviceScaleFactor));
+ params.overdraw_bottom_height = 0.f;
+ params.resizer_rect = WebRect();
+ params.is_fullscreen = is_fullscreen();
+ OnResize(params);
+}
+
void RenderViewImpl::SetDeviceColorProfileForTesting(
const std::vector<char>& color_profile) {
// TODO(noel): Add RenderViewImpl::SetDeviceColorProfile(color_profile).
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 8ef97aeaa5..2ff9098056 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -136,7 +136,6 @@ class GeolocationDispatcher;
class HistoryController;
class HistoryEntry;
class ImageResourceFetcher;
-class LoadProgressTracker;
class MidiDispatcher;
class MediaStreamDispatcher;
class MouseLockDispatcher;
@@ -156,7 +155,6 @@ struct FileChooserParams;
struct RenderViewImplParams;
#if defined(OS_ANDROID)
-class RendererMediaPlayerManager;
class WebMediaPlayerProxyAndroid;
#endif
@@ -174,7 +172,9 @@ class CONTENT_EXPORT RenderViewImpl
// Creates a new RenderView. |opener_id| is the routing ID of the RenderView
// responsible for creating this RenderView. Note that if the original opener
// has been closed, |window_was_created_with_opener| will be true and
- // |opener_id| will be MSG_ROUTING_NONE.
+ // |opener_id| will be MSG_ROUTING_NONE. When |swapped_out| is true, the
+ // |proxy_routing_id| is specified, so a RenderFrameProxy can be created for
+ // this RenderView's main RenderFrame.
static RenderViewImpl* Create(int32 opener_id,
bool window_was_created_with_opener,
const RendererPreferences& renderer_prefs,
@@ -186,6 +186,7 @@ class CONTENT_EXPORT RenderViewImpl
const base::string16& frame_name,
bool is_renderer_created,
bool swapped_out,
+ int32 proxy_routing_id,
bool hidden,
bool never_visible,
int32 next_page_id,
@@ -277,8 +278,6 @@ class CONTENT_EXPORT RenderViewImpl
void FrameDidStartLoading(blink::WebFrame* frame);
void FrameDidStopLoading(blink::WebFrame* frame);
- void FrameDidChangeLoadProgress(blink::WebFrame* frame,
- double load_progress);
void FrameDidCommitProvisionalLoad(blink::WebLocalFrame* frame,
bool is_new_navigation);
@@ -360,6 +359,10 @@ class CONTENT_EXPORT RenderViewImpl
// Change the device scale factor and force the compositor to resize.
void SetDeviceScaleFactorForTesting(float factor);
+ // Change screen orientation and force the compositor to resize.
+ void SetScreenOrientationForTesting(
+ const blink::WebScreenOrientationType& orientation);
+
// Change the device ICC color profile while running a layout test.
void SetDeviceColorProfileForTesting(const std::vector<char>& color_profile);
@@ -389,7 +392,6 @@ class CONTENT_EXPORT RenderViewImpl
virtual bool requestPointerLock();
virtual void requestPointerUnlock();
virtual bool isPointerLocked();
- virtual void didActivateCompositor() OVERRIDE;
virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
bool event_cancelled) OVERRIDE;
virtual void initializeLayerTreeView() OVERRIDE;
@@ -412,7 +414,6 @@ class CONTENT_EXPORT RenderViewImpl
const blink::WebString& path,
blink::WebFileChooserCompletion* chooser_completion);
virtual void didCancelCompositionOnSelectionChange();
- virtual void didExecuteCommand(const blink::WebString& command_name);
virtual bool handleCurrentKeyboardEvent();
virtual bool runFileChooser(
const blink::WebFileChooserParams& params,
@@ -569,9 +570,6 @@ class CONTENT_EXPORT RenderViewImpl
virtual void InstrumentDidBeginFrame() OVERRIDE;
virtual void InstrumentDidCancelFrame() OVERRIDE;
virtual void InstrumentWillComposite() OVERRIDE;
-#if defined(OS_ANDROID)
- virtual void UpdateSelectionRootBounds() OVERRIDE;
-#endif
protected:
explicit RenderViewImpl(RenderViewImplParams* params);
@@ -657,10 +655,7 @@ class CONTENT_EXPORT RenderViewImpl
void didCreateDataSource(blink::WebLocalFrame* frame,
blink::WebDataSource* datasource);
- void didClearWindowObject(blink::WebLocalFrame* frame, int world_id);
- void didReceiveTitle(blink::WebLocalFrame* frame,
- const blink::WebString& title,
- blink::WebTextDirection direction);
+ void didClearWindowObject(blink::WebLocalFrame* frame);
void didChangeIcon(blink::WebLocalFrame*, blink::WebIconURL::Type);
void didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame);
void didChangeScrollOffset(blink::WebLocalFrame* frame);
@@ -674,27 +669,9 @@ class CONTENT_EXPORT RenderViewImpl
static WindowOpenDisposition NavigationPolicyToDisposition(
blink::WebNavigationPolicy policy);
- void UpdateTitle(blink::WebFrame* frame, const base::string16& title,
- blink::WebTextDirection title_direction);
void UpdateSessionHistory(blink::WebFrame* frame);
void SendUpdateState(HistoryEntry* entry);
- // Update current main frame's encoding and send it to browser window.
- // Since we want to let users see the right encoding info from menu
- // before finishing loading, we call the UpdateEncoding in
- // a) function:DidCommitLoadForFrame. When this function is called,
- // that means we have got first data. In here we try to get encoding
- // of page if it has been specified in http header.
- // b) function:DidReceiveTitle. When this function is called,
- // that means we have got specified title. Because in most of webpages,
- // title tags will follow meta tags. In here we try to get encoding of
- // page if it has been specified in meta tag.
- // c) function:DidFinishDocumentLoadForFrame. When this function is
- // called, that means we have got whole html page. In here we should
- // finally get right encoding of page.
- void UpdateEncoding(blink::WebFrame* frame,
- const std::string& encoding_name);
-
// Sends a message and runs a nested message loop.
bool SendAndRunNestedMessageLoop(IPC::SyncMessage* message);
@@ -717,7 +694,6 @@ class CONTENT_EXPORT RenderViewImpl
void OnShowContextMenu(const gfx::Point& location);
void OnCopyImageAt(int x, int y);
void OnSaveImageAt(int x, int y);
- void OnSetName(const std::string& name);
void OnDeterminePageLanguage();
void OnDisableScrollbarsForSmallWindows(
const gfx::Size& disable_scrollbars_size_limit);
@@ -763,14 +739,13 @@ class CONTENT_EXPORT RenderViewImpl
void OnResetPageEncodingToDefault();
void OnSetAccessibilityMode(AccessibilityMode new_mode);
void OnSetActive(bool active);
- void OnSetBackground(const SkBitmap& background);
+ void OnSetBackgroundOpaque(bool opaque);
void OnExitFullscreen();
void OnSetHistoryLengthAndPrune(int history_length, int32 minimum_page_id);
void OnSetInitialFocus(bool reverse);
void OnSetPageEncoding(const std::string& encoding_name);
void OnSetRendererPrefs(const RendererPreferences& renderer_prefs);
void OnSetWebUIProperty(const std::string& name, const std::string& value);
- void OnSetZoomLevel(double zoom_level);
void OnSetZoomLevelForLoadingURL(const GURL& url, double zoom_level);
void OnStop();
void OnStopFinding(StopFindAction action);
@@ -783,6 +758,7 @@ class CONTENT_EXPORT RenderViewImpl
void OnDisownOpener();
void OnWindowSnapshotCompleted(const int snapshot_id,
const gfx::Size& size, const std::vector<unsigned char>& png);
+ void OnSelectWordAroundCaret();
#if defined(OS_ANDROID)
void OnActivateNearestFindResult(int request_id, float x, float y);
void OnFindMatchRects(int current_version);
@@ -792,9 +768,7 @@ class CONTENT_EXPORT RenderViewImpl
void OnUpdateTopControlsState(bool enable_hiding,
bool enable_showing,
bool animate);
- void OnPauseVideo();
void OnExtractSmartClipData(const gfx::Rect& rect);
- void GetSelectionRootBounds(gfx::Rect* bounds) const;
#elif defined(OS_MACOSX)
void OnPluginImeCompositionCompleted(const base::string16& text,
int plugin_id);
@@ -1006,10 +980,9 @@ class CONTENT_EXPORT RenderViewImpl
// process.
int history_list_length_;
- // Counter to track how many frames have sent start notifications but not
- // stop notifications.
- // TODO(japhet): This state will need to move to the browser process
- // (probably WebContents) for site isolation.
+ // Counter to track how many frames have sent start notifications but not stop
+ // notifications. TODO(avi): Remove this once DidStartLoading/DidStopLoading
+ // are gone.
int frames_in_progress_;
// The list of page IDs for each history item this RenderView knows about.
@@ -1018,11 +991,6 @@ class CONTENT_EXPORT RenderViewImpl
// navigate to stale entries that have been cropped from our history.
std::vector<int32> history_page_ids_;
- // Page info -----------------------------------------------------------------
-
- // The last gotten main frame's encoding.
- std::string last_encoding_name_;
-
// UI state ------------------------------------------------------------------
// The state of our target_url transmissions. When we receive a request to
@@ -1135,10 +1103,6 @@ class CONTENT_EXPORT RenderViewImpl
typedef std::vector< linked_ptr<ContentDetector> > ContentDetectorList;
ContentDetectorList content_detectors_;
- // The media player manager for managing all the media players on this view
- // for communicating with the real media player objects in browser process.
- RendererMediaPlayerManager* media_player_manager_;
-
// A date/time picker object for date and time related input elements.
scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
#endif
@@ -1189,9 +1153,6 @@ class CONTENT_EXPORT RenderViewImpl
std::map<int, blink::WebFileChooserCompletion*> enumeration_completions_;
int enumeration_completion_id_;
- // Reports load progress to the browser.
- scoped_ptr<LoadProgressTracker> load_progress_tracker_;
-
// The SessionStorage namespace that we're assigned to has an ID, and that ID
// is passed to us upon creation. WebKit asks for this ID upon first use and
// uses it whenever asking the browser process to allocate new storage areas.
diff --git a/content/renderer/render_view_impl_android.cc b/content/renderer/render_view_impl_android.cc
index 6863c5775b..679da548f9 100644
--- a/content/renderer/render_view_impl_android.cc
+++ b/content/renderer/render_view_impl_android.cc
@@ -9,7 +9,6 @@
#include "cc/trees/layer_tree_host.h"
#include "content/common/view_messages.h"
#include "content/renderer/gpu/render_widget_compositor.h"
-#include "third_party/WebKit/public/platform/WebRect.h"
#include "third_party/WebKit/public/web/WebView.h"
namespace content {
@@ -70,22 +69,4 @@ void RenderViewImpl::OnExtractSmartClipData(const gfx::Rect& rect) {
routing_id_, webview()->getSmartClipData(rect)));
}
-void RenderViewImpl::GetSelectionRootBounds(gfx::Rect* bounds) const {
- blink::WebRect bounds_webrect;
- webview()->getSelectionRootBounds(bounds_webrect);
- *bounds = bounds_webrect;
-}
-
-void RenderViewImpl::UpdateSelectionRootBounds() {
- if (!webview() || handling_ime_event_)
- return;
-
- gfx::Rect bounds;
- GetSelectionRootBounds(&bounds);
- if (selection_root_rect_ != bounds) {
- selection_root_rect_ = bounds;
- Send(new ViewHostMsg_SelectionRootBoundsChanged(routing_id_, bounds));
- }
-}
-
} // namespace content
diff --git a/content/renderer/render_view_impl_params.cc b/content/renderer/render_view_impl_params.cc
index a3f303edb4..81522d8edc 100644
--- a/content/renderer/render_view_impl_params.cc
+++ b/content/renderer/render_view_impl_params.cc
@@ -18,6 +18,7 @@ RenderViewImplParams::RenderViewImplParams(
const base::string16& frame_name,
bool is_renderer_created,
bool swapped_out,
+ int32 proxy_routing_id,
bool hidden,
bool never_visible,
int32 next_page_id,
@@ -34,6 +35,7 @@ RenderViewImplParams::RenderViewImplParams(
frame_name(frame_name),
is_renderer_created(is_renderer_created),
swapped_out(swapped_out),
+ proxy_routing_id(proxy_routing_id),
hidden(hidden),
never_visible(never_visible),
next_page_id(next_page_id),
diff --git a/content/renderer/render_view_impl_params.h b/content/renderer/render_view_impl_params.h
index 4dcd75345f..a439447d68 100644
--- a/content/renderer/render_view_impl_params.h
+++ b/content/renderer/render_view_impl_params.h
@@ -34,6 +34,7 @@ struct CONTENT_EXPORT RenderViewImplParams {
const base::string16& frame_name,
bool is_renderer_created,
bool swapped_out,
+ int32 proxy_routing_id,
bool hidden,
bool never_visible,
int32 next_page_id,
@@ -52,6 +53,7 @@ struct CONTENT_EXPORT RenderViewImplParams {
const base::string16& frame_name;
bool is_renderer_created;
bool swapped_out;
+ int32 proxy_routing_id;
bool hidden;
bool never_visible;
int32 next_page_id;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 6f3af3212d..d17cf08048 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -4,6 +4,7 @@
#include "content/renderer/render_widget.h"
+#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
@@ -260,9 +261,7 @@ void RenderWidget::ScreenMetricsEmulator::Apply(
if (!applied_widget_rect_.height())
applied_widget_rect_.set_height(original_size_.height());
- if (params_.fitToView) {
- DCHECK(!original_size_.IsEmpty());
-
+ if (params_.fitToView && !original_size_.IsEmpty()) {
int width_with_gutter =
std::max(original_size_.width() - 2 * params_.viewInsets.width, 1);
int height_with_gutter =
@@ -375,7 +374,8 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
has_focus_(false),
handling_input_event_(false),
handling_ime_event_(false),
- handling_touchstart_event_(false),
+ handling_event_type_(WebInputEvent::Undefined),
+ ignore_ack_for_mouse_move_from_debugger_(false),
closing_(false),
is_swapped_out_(swapped_out),
input_method_is_active_(false),
@@ -385,12 +385,10 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
popup_type_(popup_type),
pending_window_rect_count_(0),
suppress_next_char_events_(false),
- is_accelerated_compositing_active_(false),
- animation_update_pending_(false),
- invalidation_task_posted_(false),
screen_info_(screen_info),
device_scale_factor_(screen_info_.deviceScaleFactor),
is_threaded_compositing_enabled_(false),
+ current_event_latency_info_(NULL),
next_output_surface_id_(0),
#if defined(OS_ANDROID)
text_field_is_dirty_(false),
@@ -410,11 +408,6 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
is_threaded_compositing_enabled_ =
CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableThreadedCompositing);
-
- legacy_software_mode_stats_ = cc::RenderingStatsInstrumentation::Create();
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- cc::switches::kEnableGpuBenchmarking))
- legacy_software_mode_stats_->set_record_rendering_stats(true);
}
RenderWidget::~RenderWidget() {
@@ -495,11 +488,8 @@ void RenderWidget::CompleteInit() {
init_complete_ = true;
- if (webwidget_) {
- if (is_threaded_compositing_enabled_ || ForceCompositingModeEnabled()) {
- webwidget_->enterForceCompositingMode(true);
- }
- }
+ if (webwidget_)
+ webwidget_->enterForceCompositingMode(true);
if (compositor_)
StartCompositor();
@@ -662,6 +652,7 @@ void RenderWidget::Resize(const gfx::Size& new_size,
physical_backing_size_ = physical_backing_size;
overdraw_bottom_height_ = overdraw_bottom_height;
+ visible_viewport_size_ = visible_viewport_size;
resizer_rect_ = resizer_rect;
// NOTE: We may have entered fullscreen mode without changing our size.
@@ -777,6 +768,8 @@ void RenderWidget::OnWasHidden() {
TRACE_EVENT0("renderer", "RenderWidget::OnWasHidden");
// Go into a mode where we stop generating paint and scrolling events.
SetHidden(true);
+ FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
+ WasHidden());
}
void RenderWidget::OnWasShown(bool needs_repainting) {
@@ -787,18 +780,16 @@ void RenderWidget::OnWasShown(bool needs_repainting) {
// See OnWasHidden
SetHidden(false);
+ FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
+ WasShown());
if (!needs_repainting)
return;
// Generate a full repaint.
- if (!is_accelerated_compositing_active_) {
- didInvalidateRect(gfx::Rect(size_.width(), size_.height()));
- } else {
- if (compositor_)
- compositor_->SetNeedsForcedRedraw();
- scheduleComposite();
- }
+ if (compositor_)
+ compositor_->SetNeedsForcedRedraw();
+ scheduleComposite();
}
void RenderWidget::OnWasSwappedOut() {
@@ -919,11 +910,15 @@ void RenderWidget::OnSwapBuffersComplete() {
void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
const ui::LatencyInfo& latency_info,
bool is_keyboard_shortcut) {
- handling_input_event_ = true;
- if (!input_event) {
- handling_input_event_ = false;
+ base::AutoReset<bool> handling_input_event_resetter(
+ &handling_input_event_, true);
+ if (!input_event)
return;
- }
+ base::AutoReset<WebInputEvent::Type> handling_event_type_resetter(
+ &handling_event_type_, input_event->type);
+
+ base::AutoReset<const ui::LatencyInfo*> resetter(&current_event_latency_info_,
+ &latency_info);
base::TimeTicks start_time;
if (base::TimeTicks::IsHighResNowFastAndReliable())
@@ -1009,9 +1004,6 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
prevent_default = prevent_default || WillHandleGestureEvent(gesture_event);
}
- if (input_event->type == WebInputEvent::TouchStart)
- handling_touchstart_event_ = true;
-
bool processed = prevent_default;
if (input_event->type != WebInputEvent::Char || !suppress_next_char_events_) {
suppress_next_char_events_ = false;
@@ -1019,8 +1011,6 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
processed = webwidget_->handleInputEvent(*input_event);
}
- handling_touchstart_event_ = false;
-
// If this RawKeyDown event corresponds to a browser keyboard shortcut and
// it's not processed by webkit, then we need to suppress the upcoming Char
// events.
@@ -1069,12 +1059,17 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
TRACE_EVENT_SYNTHETIC_DELAY_END("blink.HandleInputEvent");
- if (!WebInputEventTraits::IgnoresAckDisposition(*input_event)) {
+ // Note that we can't use handling_event_type_ here since it will be overriden
+ // by reentrant calls for events after the paused one.
+ bool no_ack = ignore_ack_for_mouse_move_from_debugger_ &&
+ input_event->type == WebInputEvent::MouseMove;
+ if (!WebInputEventTraits::IgnoresAckDisposition(*input_event) && !no_ack) {
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = input_event->type;
+ ack.state = ack_result;
+ ack.latency = swap_latency_info;
scoped_ptr<IPC::Message> response(
- new InputHostMsg_HandleInputEvent_ACK(routing_id_,
- input_event->type,
- ack_result,
- swap_latency_info));
+ new InputHostMsg_HandleInputEvent_ACK(routing_id_, ack));
if (rate_limiting_wanted && event_type_can_be_rate_limited &&
frame_pending && !is_hidden_) {
// We want to rate limit the input events in this case, so we'll wait for
@@ -1095,6 +1090,8 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
Send(response.release());
}
}
+ if (input_event->type == WebInputEvent::MouseMove)
+ ignore_ack_for_mouse_move_from_debugger_ = false;
#if defined(OS_ANDROID)
// Allow the IME to be shown when the focus changes as a consequence
@@ -1109,8 +1106,6 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
UpdateTextInputState(SHOW_IME_IF_NEEDED, FROM_IME);
#endif
- handling_input_event_ = false;
-
if (!prevent_default) {
if (WebInputEvent::isKeyboardEventType(input_event->type))
DidHandleKeyEvent();
@@ -1144,21 +1139,6 @@ void RenderWidget::ClearFocus() {
webwidget_->setFocus(false);
}
-void RenderWidget::AnimationCallback() {
- TRACE_EVENT0("renderer", "RenderWidget::AnimationCallback");
- if (!animation_update_pending_) {
- TRACE_EVENT0("renderer", "EarlyOut_NoAnimationUpdatePending");
- return;
- }
- FlushPendingInputEventAck();
-}
-
-void RenderWidget::InvalidationCallback() {
- TRACE_EVENT0("renderer", "RenderWidget::InvalidationCallback");
- invalidation_task_posted_ = false;
- FlushPendingInputEventAck();
-}
-
void RenderWidget::FlushPendingInputEventAck() {
if (pending_input_event_ack_)
Send(pending_input_event_ack_.release());
@@ -1168,68 +1148,6 @@ void RenderWidget::FlushPendingInputEventAck() {
///////////////////////////////////////////////////////////////////////////////
// WebWidgetClient
-void RenderWidget::didInvalidateRect(const WebRect& rect) {
- // The invalidated rect might be outside the bounds of the view.
- gfx::Rect view_rect(size_);
- gfx::Rect damaged_rect = gfx::IntersectRects(view_rect, rect);
- if (damaged_rect.IsEmpty())
- return;
-
- // We may not need to schedule another call to DoDeferredUpdate.
- if (invalidation_task_posted_)
- return;
-
- // When GPU rendering, combine pending animations and invalidations into
- // a single update.
- if (is_accelerated_compositing_active_ &&
- animation_update_pending_ &&
- animation_timer_.IsRunning())
- return;
-
- // Perform updating asynchronously. This serves two purposes:
- // 1) Ensures that we call WebView::Paint without a bunch of other junk
- // on the call stack.
- // 2) Allows us to collect more damage rects before painting to help coalesce
- // the work that we will need to do.
- invalidation_task_posted_ = true;
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&RenderWidget::InvalidationCallback, this));
-}
-
-void RenderWidget::didScrollRect(int dx, int dy,
- const WebRect& clip_rect) {
- // Drop scrolls on the floor when we are in compositing mode.
- // TODO(nduca): stop WebViewImpl from sending scrolls in the first place.
- if (is_accelerated_compositing_active_)
- return;
-
- // The scrolled rect might be outside the bounds of the view.
- gfx::Rect view_rect(size_);
- gfx::Rect damaged_rect = gfx::IntersectRects(view_rect, clip_rect);
- if (damaged_rect.IsEmpty())
- return;
-
- // We may not need to schedule another call to DoDeferredUpdate.
- if (invalidation_task_posted_)
- return;
-
- // When GPU rendering, combine pending animations and invalidations into
- // a single update.
- if (is_accelerated_compositing_active_ &&
- animation_update_pending_ &&
- animation_timer_.IsRunning())
- return;
-
- // Perform updating asynchronously. This serves two purposes:
- // 1) Ensures that we call WebView::Paint without a bunch of other junk
- // on the call stack.
- // 2) Allows us to collect more damage rects before painting to help coalesce
- // the work that we will need to do.
- invalidation_task_posted_ = true;
- base::MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&RenderWidget::InvalidationCallback, this));
-}
-
void RenderWidget::didAutoResize(const WebSize& new_size) {
if (size_.width() != new_size.width || size_.height() != new_size.height) {
size_ = new_size;
@@ -1257,38 +1175,6 @@ void RenderWidget::AutoResizeCompositor() {
compositor_->setViewportSize(size_, physical_backing_size_);
}
-void RenderWidget::didActivateCompositor() {
- TRACE_EVENT0("gpu", "RenderWidget::didActivateCompositor");
-
-#if !defined(OS_MACOSX)
- if (!is_accelerated_compositing_active_) {
- // When not in accelerated compositing mode, in certain cases (e.g. waiting
- // for a resize or if no backing store) the RenderWidgetHost is blocking the
- // browser's UI thread for some time, waiting for an UpdateRect. If we are
- // going to switch to accelerated compositing, the GPU process may need
- // round-trips to the browser's UI thread before finishing the frame,
- // causing deadlocks if we delay the UpdateRect until we receive the
- // OnSwapBuffersComplete. So send a dummy message that will unblock the
- // browser's UI thread. This is not necessary on Mac, because SwapBuffers
- // now unblocks GetBackingStore on Mac.
- Send(new ViewHostMsg_UpdateIsDelayed(routing_id_));
- }
-#endif
-
- is_accelerated_compositing_active_ = true;
- Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
- routing_id_, is_accelerated_compositing_active_));
- webwidget_->enterForceCompositingMode(true);
-}
-
-void RenderWidget::didDeactivateCompositor() {
- TRACE_EVENT0("gpu", "RenderWidget::didDeactivateCompositor");
-
- is_accelerated_compositing_active_ = false;
- Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
- routing_id_, is_accelerated_compositing_active_));
-}
-
void RenderWidget::initializeLayerTreeView() {
compositor_ = RenderWidgetCompositor::Create(
this, is_threaded_compositing_enabled_);
@@ -1317,7 +1203,6 @@ void RenderWidget::willBeginCompositorFrame() {
UpdateTextInputType();
#if defined(OS_ANDROID)
UpdateTextInputState(NO_SHOW_IME, FROM_NON_IME);
- UpdateSelectionRootBounds();
#endif
UpdateSelectionBounds();
}
@@ -1330,6 +1215,19 @@ void RenderWidget::didBecomeReadyForAdditionalInput() {
void RenderWidget::DidCommitCompositorFrame() {
FOR_EACH_OBSERVER(RenderFrameImpl, swapped_out_frames_,
DidCommitCompositorFrame());
+#if defined(VIDEO_HOLE)
+ // Not using FOR_EACH_OBSERVER because |swapped_out_frames_| and
+ // |video_hole_frames_| may have common frames.
+ if (!video_hole_frames_.might_have_observers())
+ return;
+ ObserverListBase<RenderFrameImpl>::Iterator iter(video_hole_frames_);
+ RenderFrameImpl* frame;
+ while ((frame = iter.GetNext()) != NULL) {
+ // Prevent duplicate notification of DidCommitCompositorFrame().
+ if (!swapped_out_frames_.HasObserver(frame))
+ frame->DidCommitCompositorFrame();
+ }
+#endif // defined(VIDEO_HOLE)
}
void RenderWidget::didCommitAndDrawCompositorFrame() {
@@ -1372,27 +1270,7 @@ void RenderWidget::scheduleComposite() {
// render_thread may be NULL in tests.
if (render_thread && render_thread->compositor_message_loop_proxy().get() &&
compositor_) {
- compositor_->setNeedsAnimate();
- } else {
- // TODO(nduca): replace with something a little less hacky. The reason this
- // hack is still used is because the Invalidate-DoDeferredUpdate loop
- // contains a lot of host-renderer synchronization logic that is still
- // important for the accelerated compositing case. The option of simply
- // duplicating all that code is less desirable than "faking out" the
- // invalidation path using a magical damage rect.
- didInvalidateRect(WebRect(0, 0, 1, 1));
- }
-}
-
-void RenderWidget::scheduleAnimation() {
- if (animation_update_pending_)
- return;
-
- TRACE_EVENT0("gpu", "RenderWidget::scheduleAnimation");
- animation_update_pending_ = true;
- if (!animation_timer_.IsRunning()) {
- animation_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(0), this,
- &RenderWidget::AnimationCallback);
+ compositor_->setNeedsAnimate();
}
}
@@ -1609,12 +1487,8 @@ void RenderWidget::OnRepaint(gfx::Size size_to_paint) {
}
set_next_paint_is_repaint_ack();
- if (is_accelerated_compositing_active_ && compositor_) {
+ if (compositor_)
compositor_->SetNeedsRedrawRect(gfx::Rect(size_to_paint));
- } else {
- gfx::Rect repaint_rect(size_to_paint.width(), size_to_paint.height());
- didInvalidateRect(repaint_rect);
- }
}
void RenderWidget::OnSyntheticGestureCompleted() {
@@ -1665,17 +1539,31 @@ bool RenderWidget::ShouldHandleImeEvent() {
#endif
}
+bool RenderWidget::SendAckForMouseMoveFromDebugger() {
+ if (handling_event_type_ == WebInputEvent::MouseMove) {
+ // If we pause multiple times during a single mouse move event, we should
+ // only send ACK once.
+ if (!ignore_ack_for_mouse_move_from_debugger_) {
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = handling_event_type_;
+ ack.state = INPUT_EVENT_ACK_STATE_CONSUMED;
+ Send(new InputHostMsg_HandleInputEvent_ACK(routing_id_, ack));
+ }
+ return true;
+ }
+ return false;
+}
+
+void RenderWidget::IgnoreAckForMouseMoveFromDebugger() {
+ ignore_ack_for_mouse_move_from_debugger_ = true;
+}
+
void RenderWidget::SetDeviceScaleFactor(float device_scale_factor) {
if (device_scale_factor_ == device_scale_factor)
return;
device_scale_factor_ = device_scale_factor;
-
- if (!is_accelerated_compositing_active_) {
- didInvalidateRect(gfx::Rect(size_.width(), size_.height()));
- } else {
- scheduleComposite();
- }
+ scheduleComposite();
}
void RenderWidget::OnOrientationChange() {
@@ -1720,13 +1608,6 @@ void RenderWidget::DidToggleFullscreen() {
}
}
-void RenderWidget::SetBackground(const SkBitmap& background) {
- background_ = background;
-
- // Generate a full repaint.
- didInvalidateRect(gfx::Rect(size_.width(), size_.height()));
-}
-
bool RenderWidget::next_paint_is_resize_ack() const {
return ViewHostMsg_UpdateRect_Flags::is_resize_ack(next_paint_flags_);
}
@@ -1760,9 +1641,6 @@ void RenderWidget::FinishHandlingImeEvent() {
// While handling an ime event, text input state and selection bounds updates
// are ignored. These must explicitly be updated once finished handling the
// ime event.
-#if defined(OS_ANDROID)
- UpdateSelectionRootBounds();
-#endif
UpdateSelectionBounds();
#if defined(OS_ANDROID)
UpdateTextInputState(NO_SHOW_IME, FROM_IME);
@@ -1851,6 +1729,12 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime,
IncrementOutstandingImeEventAcks();
text_field_is_dirty_ = false;
#endif
+#if defined(USE_AURA)
+ Send(new ViewHostMsg_TextInputTypeChanged(routing_id(),
+ new_type,
+ text_input_mode_,
+ new_can_compose_inline));
+#endif
Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p));
text_input_info_ = new_info;
@@ -2123,7 +2007,7 @@ void RenderWidget::setTouchAction(
// Ignore setTouchAction calls that result from synthetic touch events (eg.
// when blink is emulating touch with mouse).
- if (!handling_touchstart_event_)
+ if (handling_event_type_ != WebInputEvent::TouchStart)
return;
// Verify the same values are used by the types so we can cast between them.
@@ -2155,11 +2039,6 @@ void RenderWidget::didUpdateTextOfFocusedElementByNonUserInput() {
#endif
}
-#if defined(OS_ANDROID)
-void RenderWidget::UpdateSelectionRootBounds() {
-}
-#endif
-
bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const {
return true;
}
@@ -2240,4 +2119,22 @@ void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) {
swapped_out_frames_.RemoveObserver(frame);
}
+void RenderWidget::RegisterRenderFrame(RenderFrameImpl* frame) {
+ render_frames_.AddObserver(frame);
+}
+
+void RenderWidget::UnregisterRenderFrame(RenderFrameImpl* frame) {
+ render_frames_.RemoveObserver(frame);
+}
+
+#if defined(VIDEO_HOLE)
+void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) {
+ video_hole_frames_.AddObserver(frame);
+}
+
+void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
+ video_hole_frames_.RemoveObserver(frame);
+}
+#endif // defined(VIDEO_HOLE)
+
} // namespace content
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 97a3b29247..8ed0c4029a 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -8,6 +8,7 @@
#include <deque>
#include <map>
+#include "base/auto_reset.h"
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
@@ -24,6 +25,7 @@
#include "ipc/ipc_sender.h"
#include "third_party/WebKit/public/platform/WebRect.h"
#include "third_party/WebKit/public/web/WebCompositionUnderline.h"
+#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "third_party/WebKit/public/web/WebPopupType.h"
#include "third_party/WebKit/public/web/WebTextDirection.h"
#include "third_party/WebKit/public/web/WebTextInputInfo.h"
@@ -52,7 +54,6 @@ class SyncMessage;
namespace blink {
struct WebDeviceEmulationParams;
class WebGestureEvent;
-class WebInputEvent;
class WebKeyboardEvent;
class WebMouseEvent;
class WebTouchEvent;
@@ -112,6 +113,16 @@ class CONTENT_EXPORT RenderWidget
void RegisterSwappedOutChildFrame(RenderFrameImpl* frame);
void UnregisterSwappedOutChildFrame(RenderFrameImpl* frame);
+ // Functions to track all RenderFrame objects associated with this
+ // RenderWidget.
+ void RegisterRenderFrame(RenderFrameImpl* frame);
+ void UnregisterRenderFrame(RenderFrameImpl* frame);
+
+#if defined(VIDEO_HOLE)
+ void RegisterVideoHoleFrame(RenderFrameImpl* frame);
+ void UnregisterVideoHoleFrame(RenderFrameImpl* frame);
+#endif // defined(VIDEO_HOLE)
+
// IPC::Listener
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
@@ -121,19 +132,13 @@ class CONTENT_EXPORT RenderWidget
// blink::WebWidgetClient
virtual void suppressCompositorScheduling(bool enable);
virtual void willBeginCompositorFrame();
- virtual void didInvalidateRect(const blink::WebRect&);
- virtual void didScrollRect(int dx, int dy,
- const blink::WebRect& clipRect);
virtual void didAutoResize(const blink::WebSize& new_size);
- virtual void didActivateCompositor() OVERRIDE;
- virtual void didDeactivateCompositor();
virtual void initializeLayerTreeView();
virtual blink::WebLayerTreeView* layerTreeView();
virtual void didBecomeReadyForAdditionalInput();
virtual void didCommitAndDrawCompositorFrame();
virtual void didCompleteSwapBuffers();
virtual void scheduleComposite();
- virtual void scheduleAnimation();
virtual void didFocus();
virtual void didBlur();
virtual void didChangeCursor(const blink::WebCursorInfo&);
@@ -165,6 +170,10 @@ class CONTENT_EXPORT RenderWidget
RenderWidgetCompositor* compositor() const;
+ const ui::LatencyInfo* current_event_latency_info() const {
+ return current_event_latency_info_;
+ }
+
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback);
// Callback for use with synthetic gestures (e.g. BeginSmoothScroll).
@@ -194,6 +203,15 @@ class CONTENT_EXPORT RenderWidget
virtual void InstrumentDidCancelFrame() {}
virtual void InstrumentWillComposite() {}
+ // When paused in debugger, we send ack for mouse event early. This ensures
+ // that we continue receiving mouse moves and pass them to debugger. Returns
+ // whether we are paused in mouse move event and have sent the ack.
+ bool SendAckForMouseMoveFromDebugger();
+
+ // When resumed from pause in debugger while handling mouse move,
+ // we should not send an extra ack (see SendAckForMouseMoveFromDebugger).
+ void IgnoreAckForMouseMoveFromDebugger();
+
bool UsingSynchronousRendererCompositor() const;
// ScreenMetricsEmulator class manages screen emulation inside a render
@@ -303,17 +321,10 @@ class CONTENT_EXPORT RenderWidget
// active RenderWidgets.
void SetSwappedOut(bool is_swapped_out);
- void AnimationCallback();
- void InvalidationCallback();
void FlushPendingInputEventAck();
void DoDeferredClose();
void DoDeferredSetWindowRect(const blink::WebRect& pos);
- // Set the background of the render widget to a bitmap. The bitmap will be
- // tiled in both directions if it isn't big enough to fill the area. This is
- // mainly intended to be used in conjuction with WebView::SetIsTransparent().
- virtual void SetBackground(const SkBitmap& bitmap);
-
// Resizes the render widget.
void Resize(const gfx::Size& new_size,
const gfx::Size& physical_backing_size,
@@ -498,12 +509,6 @@ class CONTENT_EXPORT RenderWidget
// by script, not by user input.
virtual void didUpdateTextOfFocusedElementByNonUserInput();
-#if defined(OS_ANDROID)
- // Checks if the selection root bounds have changed. If they have changed, the
- // new value will be sent to the browser process.
- virtual void UpdateSelectionRootBounds();
-#endif
-
// Creates a 3D context associated with this view.
scoped_ptr<WebGraphicsContext3DCommandBufferImpl> CreateGraphicsContext3D();
@@ -586,8 +591,11 @@ class CONTENT_EXPORT RenderWidget
// Are we currently handling an ime event?
bool handling_ime_event_;
- // Are we currently handling a touchstart event?
- bool handling_touchstart_event_;
+ // Type of the input event we are currently handling.
+ blink::WebInputEvent::Type handling_event_type_;
+
+ // Whether we should not send ack for the current mouse move.
+ bool ignore_ack_for_mouse_move_from_debugger_;
// True if we have requested this widget be closed. No more messages will
// be sent, except for a Close.
@@ -617,11 +625,6 @@ class CONTENT_EXPORT RenderWidget
gfx::Rect selection_focus_rect_;
gfx::Rect selection_anchor_rect_;
- // Stores the current selection root bounds.
-#if defined(OS_ANDROID)
- gfx::Rect selection_root_rect_;
-#endif
-
// Stores the current composition character bounds.
std::vector<gfx::Rect> composition_character_bounds_;
@@ -635,9 +638,6 @@ class CONTENT_EXPORT RenderWidget
typedef std::vector<WebPluginGeometry> WebPluginGeometryVector;
WebPluginGeometryVector plugin_window_moves_;
- // A custom background for the widget.
- SkBitmap background_;
-
// While we are waiting for the browser to update window sizes, we track the
// pending size temporarily.
int pending_window_rect_count_;
@@ -655,17 +655,6 @@ class CONTENT_EXPORT RenderWidget
// Indicates if the next sequence of Char events should be suppressed or not.
bool suppress_next_char_events_;
- // Set to true if painting to the window is handled by the accelerated
- // compositor.
- bool is_accelerated_compositing_active_;
-
- base::OneShotTimer<RenderWidget> animation_timer_;
- bool animation_update_pending_;
- bool invalidation_task_posted_;
-
- // Stats for legacy software mode
- scoped_ptr<cc::RenderingStatsInstrumentation> legacy_software_mode_stats_;
-
// Properties of the screen hosting this RenderWidget instance.
blink::WebScreenInfo screen_info_;
@@ -682,6 +671,8 @@ class CONTENT_EXPORT RenderWidget
// Specified whether the compositor will run in its own thread.
bool is_threaded_compositing_enabled_;
+ const ui::LatencyInfo* current_event_latency_info_;
+
uint32 next_output_surface_id_;
#if defined(OS_ANDROID)
@@ -716,9 +707,17 @@ class CONTENT_EXPORT RenderWidget
scoped_ptr<ResizingModeSelector> resizing_mode_selector_;
- // A list of swapped out RenderFrames that need to be notified
+ // Lists of swapped out RenderFrames that need to be notified
// of compositing-related events (e.g. DidCommitCompositorFrame).
ObserverList<RenderFrameImpl> swapped_out_frames_;
+#if defined(VIDEO_HOLE)
+ ObserverList<RenderFrameImpl> video_hole_frames_;
+#endif // defined(VIDEO_HOLE)
+
+ // A list of RenderFrames associated with this RenderWidget. Notifications
+ // are sent to each frame in the list for events such as changing
+ // visibility state for example.
+ ObserverList<RenderFrameImpl> render_frames_;
ui::MenuSourceType context_menu_source_type_;
gfx::Point touch_editing_context_menu_location_;
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc
index bf85de27f9..509b38c9eb 100644
--- a/content/renderer/render_widget_fullscreen_pepper.cc
+++ b/content/renderer/render_widget_fullscreen_pepper.cc
@@ -324,22 +324,17 @@ void RenderWidgetFullscreenPepper::DidChangeCursor(
void RenderWidgetFullscreenPepper::SetLayer(blink::WebLayer* layer) {
layer_ = layer;
- bool compositing = !!layer_;
- if (compositing != is_accelerated_compositing_active_) {
- if (compositing) {
- if (!layerTreeView())
- initializeLayerTreeView();
- if (!layerTreeView())
- return;
- layer_->setBounds(blink::WebSize(size()));
- layer_->setDrawsContent(true);
- compositor_->setDeviceScaleFactor(device_scale_factor_);
- compositor_->setRootLayer(*layer_);
- didActivateCompositor();
- } else {
- didDeactivateCompositor();
- }
+ if (!layer_) {
+ if (compositor_)
+ compositor_->clearRootLayer();
+ return;
}
+ if (!layerTreeView())
+ initializeLayerTreeView();
+ layer_->setBounds(blink::WebSize(size()));
+ layer_->setDrawsContent(true);
+ compositor_->setDeviceScaleFactor(device_scale_factor_);
+ compositor_->setRootLayer(*layer_);
}
bool RenderWidgetFullscreenPepper::OnMessageReceived(const IPC::Message& msg) {
diff --git a/content/renderer/render_widget_unittest.cc b/content/renderer/render_widget_unittest.cc
index 41dd8472cc..f8f145dd56 100644
--- a/content/renderer/render_widget_unittest.cc
+++ b/content/renderer/render_widget_unittest.cc
@@ -77,10 +77,6 @@ class TouchableRenderWidget : public RenderWidget {
TEST_F(RenderWidgetUnittest, TouchHitTestSinglePoint) {
scoped_refptr<TouchableRenderWidget> widget = new TouchableRenderWidget();
- blink::WebInputEvent::Type type;
- InputEventAckState ack_state;
- ui::LatencyInfo latency;
-
SyntheticWebTouchEvent touch;
touch.PressPoint(10, 10);
@@ -91,7 +87,9 @@ TEST_F(RenderWidgetUnittest, TouchHitTestSinglePoint) {
// be 'no consumer exists'.
const IPC::Message* message = widget->sink()->GetMessageAt(0);
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- InputHostMsg_HandleInputEvent_ACK::Read(message, &type, &ack_state, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ InputHostMsg_HandleInputEvent_ACK::Read(message, &params);
+ InputEventAckState ack_state = params.a.state;
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, ack_state);
widget->sink()->ClearMessages();
@@ -104,7 +102,8 @@ TEST_F(RenderWidgetUnittest, TouchHitTestSinglePoint) {
ASSERT_EQ(1u, widget->sink()->message_count());
message = widget->sink()->GetMessageAt(0);
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- InputHostMsg_HandleInputEvent_ACK::Read(message, &type, &ack_state, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Read(message, &params);
+ ack_state = params.a.state;
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_state);
widget->sink()->ClearMessages();
}
@@ -116,10 +115,6 @@ TEST_F(RenderWidgetUnittest, TouchHitTestMultiplePoints) {
rects.push_back(gfx::Rect(25, 0, 10, 10));
widget->SetTouchRegion(rects);
- blink::WebInputEvent::Type type;
- InputEventAckState ack_state;
- ui::LatencyInfo latency;
-
SyntheticWebTouchEvent touch;
touch.PressPoint(25, 25);
@@ -130,7 +125,9 @@ TEST_F(RenderWidgetUnittest, TouchHitTestMultiplePoints) {
// be 'no consumer exists'.
const IPC::Message* message = widget->sink()->GetMessageAt(0);
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- InputHostMsg_HandleInputEvent_ACK::Read(message, &type, &ack_state, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ InputHostMsg_HandleInputEvent_ACK::Read(message, &params);
+ InputEventAckState ack_state = params.a.state;
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, ack_state);
widget->sink()->ClearMessages();
@@ -140,7 +137,8 @@ TEST_F(RenderWidgetUnittest, TouchHitTestMultiplePoints) {
ASSERT_EQ(1u, widget->sink()->message_count());
message = widget->sink()->GetMessageAt(0);
EXPECT_EQ(InputHostMsg_HandleInputEvent_ACK::ID, message->type());
- InputHostMsg_HandleInputEvent_ACK::Read(message, &type, &ack_state, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Read(message, &params);
+ ack_state = params.a.state;
EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_state);
widget->sink()->ClearMessages();
}
diff --git a/content/renderer/renderer.gni b/content/renderer/renderer.gni
new file mode 100644
index 0000000000..2b638894a2
--- /dev/null
+++ b/content/renderer/renderer.gni
@@ -0,0 +1,14 @@
+# 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.
+
+# This file defines the content renderer gypi values. This file is read once
+# and cached, which is a performance optimization that allows us to share the
+# results of parsing the .gypi file between the public and private BUILD.gn
+# files. It also saves us from duplicating this exec_script call.
+content_renderer_gypi_values = exec_script(
+ "//build/gypi_to_gn.py",
+ [ rebase_path("../content_renderer.gypi") ],
+ "scope",
+ [ "../content_renderer.gypi" ])
+
diff --git a/content/renderer/renderer_clipboard_client.cc b/content/renderer/renderer_clipboard_client.cc
index c1c7c96616..e4f275c92e 100644
--- a/content/renderer/renderer_clipboard_client.cc
+++ b/content/renderer/renderer_clipboard_client.cc
@@ -7,6 +7,7 @@
#include "content/renderer/renderer_clipboard_client.h"
#include "base/memory/shared_memory.h"
+#include "base/numerics/safe_math.h"
#include "base/strings/string16.h"
#include "content/common/clipboard_messages.h"
#include "content/public/renderer/content_renderer_client.h"
@@ -49,7 +50,13 @@ void RendererClipboardWriteContext::WriteBitmapFromPixels(
if (shared_buf_)
return;
- uint32 buf_size = 4 * size.width() * size.height();
+ base::CheckedNumeric<uint32> checked_buf_size = 4;
+ checked_buf_size *= size.width();
+ checked_buf_size *= size.height();
+ if (!checked_buf_size.IsValid())
+ return;
+
+ uint32 buf_size = checked_buf_size.ValueOrDie();
// Allocate a shared memory buffer to hold the bitmap bits.
shared_buf_.reset(ChildThread::current()->AllocateSharedMemory(buf_size));
diff --git a/content/renderer/renderer_webcookiejar_impl.cc b/content/renderer/renderer_webcookiejar_impl.cc
index 40bef329db..93d037a32b 100644
--- a/content/renderer/renderer_webcookiejar_impl.cc
+++ b/content/renderer/renderer_webcookiejar_impl.cc
@@ -71,7 +71,7 @@ bool RendererWebCookieJarImpl::cookiesEnabled(
const WebURL& url, const WebURL& first_party_for_cookies) {
bool cookies_enabled;
sender_->Send(new ViewHostMsg_CookiesEnabled(
- url, first_party_for_cookies, &cookies_enabled));
+ sender_->GetRoutingID(), url, first_party_for_cookies, &cookies_enabled));
return cookies_enabled;
}
diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc
index 91906df8db..433cca1284 100644
--- a/content/renderer/renderer_webkitplatformsupport_impl.cc
+++ b/content/renderer/renderer_webkitplatformsupport_impl.cc
@@ -11,7 +11,6 @@
#include "base/message_loop/message_loop_proxy.h"
#include "base/metrics/histogram.h"
#include "base/numerics/safe_conversions.h"
-#include "base/platform_file.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "content/child/blink_glue.h"
@@ -38,18 +37,20 @@
#include "content/public/common/content_switches.h"
#include "content/public/common/webplugininfo.h"
#include "content/public/renderer/content_renderer_client.h"
+#include "content/renderer/battery_status/battery_status_dispatcher.h"
#include "content/renderer/device_sensors/device_motion_event_pump.h"
#include "content/renderer/device_sensors/device_orientation_event_pump.h"
#include "content/renderer/dom_storage/webstoragenamespace_impl.h"
#include "content/renderer/gamepad_shared_memory_reader.h"
#include "content/renderer/media/audio_decoder.h"
#include "content/renderer/media/crypto/key_systems.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
#include "content/renderer/media/renderer_webaudiodevice_impl.h"
#include "content/renderer/media/renderer_webmidiaccessor_impl.h"
#include "content/renderer/media/webcontentdecryptionmodule_impl.h"
+#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
#include "content/renderer/render_thread_impl.h"
#include "content/renderer/renderer_clipboard_client.h"
+#include "content/renderer/screen_orientation/mock_screen_orientation_controller.h"
#include "content/renderer/screen_orientation/screen_orientation_dispatcher.h"
#include "content/renderer/webclipboard_impl.h"
#include "content/renderer/webgraphicscontext3d_provider_impl.h"
@@ -61,6 +62,7 @@
#include "media/filters/stream_parser_factory.h"
#include "net/base/mime_util.h"
#include "net/base/net_util.h"
+#include "third_party/WebKit/public/platform/WebBatteryStatusListener.h"
#include "third_party/WebKit/public/platform/WebBlobRegistry.h"
#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h"
@@ -137,6 +139,8 @@ using blink::WebVector;
namespace content {
+namespace {
+
static bool g_sandbox_enabled = true;
static blink::WebGamepadListener* web_gamepad_listener = NULL;
base::LazyInstance<WebGamepads>::Leaky g_test_gamepads =
@@ -145,8 +149,10 @@ base::LazyInstance<blink::WebDeviceMotionData>::Leaky
g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER;
base::LazyInstance<blink::WebDeviceOrientationData>::Leaky
g_test_device_orientation_data = LAZY_INSTANCE_INITIALIZER;
-static blink::WebScreenOrientationListener*
- g_test_screen_orientation_listener = NULL;
+base::LazyInstance<MockScreenOrientationController>::Leaky
+ g_test_screen_orientation_controller = LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
//------------------------------------------------------------------------------
@@ -915,8 +921,8 @@ RendererWebKitPlatformSupportImpl::createRTCPeerConnectionHandler(
if (peer_connection_handler)
return peer_connection_handler;
- MediaStreamDependencyFactory* rtc_dependency_factory =
- render_thread->GetMediaStreamDependencyFactory();
+ PeerConnectionDependencyFactory* rtc_dependency_factory =
+ render_thread->GetPeerConnectionDependencyFactory();
return rtc_dependency_factory->CreateRTCPeerConnectionHandler(client);
#else
return NULL;
@@ -1009,16 +1015,6 @@ RendererWebKitPlatformSupportImpl::createOffscreenGraphicsContext3D(
CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE));
WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits limits;
-
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kWebGLCommandBufferSizeKb)) {
- std::string size_string = command_line->GetSwitchValueASCII(
- switches::kWebGLCommandBufferSizeKb);
- size_t buffer_size_kb;
- if (base::StringToSizeT(size_string, &buffer_size_kb)) {
- limits.command_buffer_size = buffer_size_kb * 1024;
- }
- }
bool lose_context_when_out_of_memory = false;
return WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext(
gpu_channel_host.get(),
@@ -1081,6 +1077,12 @@ void RendererWebKitPlatformSupportImpl::SetMockDeviceMotionDataForTesting(
g_test_device_motion_data.Get() = data;
}
+// static
+void RendererWebKitPlatformSupportImpl::ResetMockScreenOrientationForTesting()
+{
+ g_test_screen_orientation_controller.Get().ResetData();
+}
+
//------------------------------------------------------------------------------
void RendererWebKitPlatformSupportImpl::setDeviceOrientationListener(
@@ -1129,7 +1131,7 @@ void RendererWebKitPlatformSupportImpl::setScreenOrientationListener(
// backend in order to let Blink get tested properly, That means that screen
// orientation updates have to be done manually instead of from signals sent
// by the browser process.
- g_test_screen_orientation_listener = listener;
+ g_test_screen_orientation_controller.Get().SetListener(listener);
return;
}
@@ -1145,6 +1147,7 @@ void RendererWebKitPlatformSupportImpl::lockOrientation(
blink::WebScreenOrientationLockType orientation) {
if (RenderThreadImpl::current() &&
RenderThreadImpl::current()->layout_test_mode()) {
+ g_test_screen_orientation_controller.Get().UpdateLock(orientation);
return;
}
RenderThread::Get()->Send(new ScreenOrientationHostMsg_Lock(orientation));
@@ -1153,6 +1156,7 @@ void RendererWebKitPlatformSupportImpl::lockOrientation(
void RendererWebKitPlatformSupportImpl::unlockOrientation() {
if (RenderThreadImpl::current() &&
RenderThreadImpl::current()->layout_test_mode()) {
+ g_test_screen_orientation_controller.Get().ResetLock();
return;
}
RenderThread::Get()->Send(new ScreenOrientationHostMsg_Unlock);
@@ -1161,9 +1165,8 @@ void RendererWebKitPlatformSupportImpl::unlockOrientation() {
// static
void RendererWebKitPlatformSupportImpl::SetMockScreenOrientationForTesting(
blink::WebScreenOrientationType orientation) {
- if (!g_test_screen_orientation_listener)
- return;
- g_test_screen_orientation_listener->didChangeScreenOrientation(orientation);
+ g_test_screen_orientation_controller.Get()
+ .UpdateDeviceOrientation(orientation);
}
//------------------------------------------------------------------------------
@@ -1182,4 +1185,15 @@ void RendererWebKitPlatformSupportImpl::queryStorageUsageAndQuota(
QuotaDispatcher::CreateWebStorageQuotaCallbacksWrapper(callbacks));
}
+//------------------------------------------------------------------------------
+
+void RendererWebKitPlatformSupportImpl::setBatteryStatusListener(
+ blink::WebBatteryStatusListener* listener) {
+ if (!battery_status_dispatcher_) {
+ battery_status_dispatcher_.reset(
+ new BatteryStatusDispatcher(RenderThreadImpl::current()));
+ }
+ battery_status_dispatcher_->SetListener(listener);
+}
+
} // namespace content
diff --git a/content/renderer/renderer_webkitplatformsupport_impl.h b/content/renderer/renderer_webkitplatformsupport_impl.h
index 5e3ba6937d..a91ffefbc9 100644
--- a/content/renderer/renderer_webkitplatformsupport_impl.h
+++ b/content/renderer/renderer_webkitplatformsupport_impl.h
@@ -7,7 +7,6 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "content/child/blink_platform_impl.h"
#include "content/common/content_export.h"
#include "content/renderer/webpublicsuffixlist_impl.h"
@@ -36,6 +35,7 @@ class WebScreenOrientationListener;
}
namespace content {
+class BatteryStatusDispatcher;
class DeviceMotionEventPump;
class DeviceOrientationEventPump;
class QuotaMessageFilter;
@@ -117,8 +117,8 @@ class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
createMIDIAccessor(blink::WebMIDIAccessorClient* client);
virtual blink::WebBlobRegistry* blobRegistry();
- virtual void sampleGamepads(blink::WebGamepads&) OVERRIDE;
- virtual void setGamepadListener(blink::WebGamepadListener*) OVERRIDE;
+ virtual void sampleGamepads(blink::WebGamepads&);
+ virtual void setGamepadListener(blink::WebGamepadListener*);
virtual blink::WebRTCPeerConnectionHandler* createRTCPeerConnectionHandler(
blink::WebRTCPeerConnectionHandlerClient* client);
virtual blink::WebMediaStreamCenter* createMediaStreamCenter(
@@ -136,19 +136,21 @@ class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
virtual blink::WebString convertIDNToUnicode(
const blink::WebString& host, const blink::WebString& languages);
virtual void setDeviceMotionListener(
- blink::WebDeviceMotionListener* listener) OVERRIDE;
+ blink::WebDeviceMotionListener* listener);
virtual void setDeviceOrientationListener(
- blink::WebDeviceOrientationListener* listener) OVERRIDE;
+ blink::WebDeviceOrientationListener* listener);
virtual void queryStorageUsageAndQuota(
const blink::WebURL& storage_partition,
blink::WebStorageQuotaType,
- blink::WebStorageQuotaCallbacks) OVERRIDE;
+ blink::WebStorageQuotaCallbacks);
virtual void vibrate(unsigned int milliseconds);
virtual void cancelVibration();
virtual void setScreenOrientationListener(
- blink::WebScreenOrientationListener*) OVERRIDE;
- virtual void lockOrientation(blink::WebScreenOrientationLockType) OVERRIDE;
- virtual void unlockOrientation() OVERRIDE;
+ blink::WebScreenOrientationListener*);
+ virtual void lockOrientation(blink::WebScreenOrientationLockType);
+ virtual void unlockOrientation();
+ virtual void setBatteryStatusListener(
+ blink::WebBatteryStatusListener* listener);
// Disables the WebSandboxSupport implementation for testing.
// Tests that do not set up a full sandbox environment should call
@@ -180,6 +182,8 @@ class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
// Forces the screen orientation for testing purposes.
static void SetMockScreenOrientationForTesting(
blink::WebScreenOrientationType);
+ // Resets the mock screen orientation data used for testing.
+ static void ResetMockScreenOrientationForTesting();
WebDatabaseObserverImpl* web_database_observer_impl() {
return web_database_observer_impl_.get();
@@ -231,6 +235,8 @@ class CONTENT_EXPORT RendererWebKitPlatformSupportImpl
scoped_ptr<blink::WebScrollbarBehavior> web_scrollbar_behavior_;
+ scoped_ptr<BatteryStatusDispatcher> battery_status_dispatcher_;
+
DISALLOW_COPY_AND_ASSIGN(RendererWebKitPlatformSupportImpl);
};
diff --git a/content/renderer/screen_orientation/OWNERS b/content/renderer/screen_orientation/OWNERS
new file mode 100644
index 0000000000..2d28246082
--- /dev/null
+++ b/content/renderer/screen_orientation/OWNERS
@@ -0,0 +1 @@
+mlamouri@chromium.org
diff --git a/content/renderer/screen_orientation/mock_screen_orientation_controller.cc b/content/renderer/screen_orientation/mock_screen_orientation_controller.cc
new file mode 100644
index 0000000000..bbff907dda
--- /dev/null
+++ b/content/renderer/screen_orientation/mock_screen_orientation_controller.cc
@@ -0,0 +1,127 @@
+// 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 "content/renderer/screen_orientation/mock_screen_orientation_controller.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/message_loop/message_loop.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationListener.h"
+
+namespace content {
+
+MockScreenOrientationController::MockScreenOrientationController()
+ : current_lock_(blink::WebScreenOrientationLockDefault),
+ device_orientation_(blink::WebScreenOrientationPortraitPrimary),
+ current_orientation_(blink::WebScreenOrientationPortraitPrimary),
+ listener_(NULL) {
+ // Since MockScreenOrientationController is held by LazyInstance reference,
+ // add this ref for it.
+ AddRef();
+}
+
+MockScreenOrientationController::~MockScreenOrientationController() {
+}
+
+void MockScreenOrientationController::SetListener(
+ blink::WebScreenOrientationListener* listener) {
+ listener_ = listener;
+}
+
+void MockScreenOrientationController::ResetData() {
+ current_lock_ = blink::WebScreenOrientationLockDefault;
+ device_orientation_ = blink::WebScreenOrientationPortraitPrimary;
+ current_orientation_ = blink::WebScreenOrientationPortraitPrimary;
+}
+
+void MockScreenOrientationController::UpdateLock(
+ blink::WebScreenOrientationLockType lock) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&MockScreenOrientationController::UpdateLockSync, this, lock));
+}
+void MockScreenOrientationController::UpdateLockSync(
+ blink::WebScreenOrientationLockType lock) {
+ DCHECK(lock != blink::WebScreenOrientationLockDefault);
+ current_lock_ = lock;
+ if (!IsOrientationAllowedByCurrentLock(current_orientation_))
+ UpdateScreenOrientation(SuitableOrientationForCurrentLock());
+}
+
+void MockScreenOrientationController::ResetLock() {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&MockScreenOrientationController::ResetLockSync, this));
+}
+
+void MockScreenOrientationController::ResetLockSync() {
+ bool will_screen_orientation_need_updating =
+ !IsOrientationAllowedByCurrentLock(device_orientation_);
+ current_lock_ = blink::WebScreenOrientationLockDefault;
+ if (will_screen_orientation_need_updating)
+ UpdateScreenOrientation(device_orientation_);
+}
+
+void MockScreenOrientationController::UpdateDeviceOrientation(
+ blink::WebScreenOrientationType orientation) {
+ if (device_orientation_ == orientation)
+ return;
+ device_orientation_ = orientation;
+ if (!IsOrientationAllowedByCurrentLock(orientation))
+ return;
+ UpdateScreenOrientation(orientation);
+}
+
+void MockScreenOrientationController::UpdateScreenOrientation(
+ blink::WebScreenOrientationType orientation) {
+ if (current_orientation_ == orientation)
+ return;
+ current_orientation_ = orientation;
+ if (listener_)
+ listener_->didChangeScreenOrientation(current_orientation_);
+}
+
+bool MockScreenOrientationController::IsOrientationAllowedByCurrentLock(
+ blink::WebScreenOrientationType orientation) {
+ if (current_lock_ == blink::WebScreenOrientationLockDefault ||
+ current_lock_ == blink::WebScreenOrientationLockAny) {
+ return true;
+ }
+
+ switch (orientation) {
+ case blink::WebScreenOrientationPortraitPrimary:
+ return current_lock_ == blink::WebScreenOrientationLockPortraitPrimary ||
+ current_lock_ == blink::WebScreenOrientationLockPortrait;
+ case blink::WebScreenOrientationPortraitSecondary:
+ return current_lock_ ==
+ blink::WebScreenOrientationLockPortraitSecondary ||
+ current_lock_ == blink::WebScreenOrientationLockPortrait;
+ case blink::WebScreenOrientationLandscapePrimary:
+ return current_lock_ == blink::WebScreenOrientationLockLandscapePrimary ||
+ current_lock_ == blink::WebScreenOrientationLockLandscape;
+ case blink::WebScreenOrientationLandscapeSecondary:
+ return current_lock_ ==
+ blink::WebScreenOrientationLockLandscapeSecondary ||
+ current_lock_ == blink::WebScreenOrientationLockLandscape;
+ default:
+ return false;
+ }
+}
+
+blink::WebScreenOrientationType
+MockScreenOrientationController::SuitableOrientationForCurrentLock() {
+ switch (current_lock_) {
+ case blink::WebScreenOrientationLockPortraitSecondary:
+ return blink::WebScreenOrientationPortraitSecondary;
+ case blink::WebScreenOrientationLockLandscapePrimary:
+ case blink::WebScreenOrientationLockLandscape:
+ return blink::WebScreenOrientationLandscapePrimary;
+ case blink::WebScreenOrientationLockLandscapeSecondary:
+ return blink::WebScreenOrientationLandscapePrimary;
+ default:
+ return blink::WebScreenOrientationPortraitPrimary;
+ }
+}
+
+} // namespace content
diff --git a/content/renderer/screen_orientation/mock_screen_orientation_controller.h b/content/renderer/screen_orientation/mock_screen_orientation_controller.h
new file mode 100644
index 0000000000..31420555fb
--- /dev/null
+++ b/content/renderer/screen_orientation/mock_screen_orientation_controller.h
@@ -0,0 +1,52 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_SCREEN_ORIENTATION_MOCK_SCREEN_ORIENTATION_CONTROLLER_H_
+#define CONTENT_RENDERER_SCREEN_ORIENTATION_MOCK_SCREEN_ORIENTATION_CONTROLLER_H_
+
+#include "base/lazy_instance.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
+
+namespace blink {
+class WebScreenOrientationListener;
+}
+
+namespace content {
+
+class MockScreenOrientationController
+ : public base::RefCountedThreadSafe<MockScreenOrientationController> {
+ public:
+ MockScreenOrientationController();
+
+ void SetListener(blink::WebScreenOrientationListener* listener);
+ void ResetData();
+ void UpdateLock(blink::WebScreenOrientationLockType);
+ void ResetLock();
+ void UpdateDeviceOrientation(blink::WebScreenOrientationType);
+
+ private:
+ virtual ~MockScreenOrientationController();
+
+ void UpdateLockSync(blink::WebScreenOrientationLockType);
+ void ResetLockSync();
+ void UpdateScreenOrientation(blink::WebScreenOrientationType);
+ bool IsOrientationAllowedByCurrentLock(blink::WebScreenOrientationType);
+ blink::WebScreenOrientationType SuitableOrientationForCurrentLock();
+
+ blink::WebScreenOrientationLockType current_lock_;
+ blink::WebScreenOrientationType device_orientation_;
+ blink::WebScreenOrientationType current_orientation_;
+ blink::WebScreenOrientationListener* listener_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockScreenOrientationController);
+ friend class base::LazyInstance<MockScreenOrientationController>;
+ friend class base::RefCountedThreadSafe<MockScreenOrientationController>;
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_SCREEN_ORIENTATION_MOCK_SCREEN_ORIENTATION_CONTROLLER_H_
diff --git a/content/renderer/service_worker/OWNERS b/content/renderer/service_worker/OWNERS
index 633b8a4fd9..ed6fb7661c 100644
--- a/content/renderer/service_worker/OWNERS
+++ b/content/renderer/service_worker/OWNERS
@@ -1,3 +1,6 @@
-alecflett@chromium.org
-kinuko@chromium.org
michaeln@chromium.org
+falken@chromium.org
+horo@chromium.org
+
+# may not be available
+kinuko@chromium.org
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc
index 4bd0635995..509c85f406 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.cc
+++ b/content/renderer/service_worker/embedded_worker_context_client.cc
@@ -7,11 +7,12 @@
#include "base/lazy_instance.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/pickle.h"
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_local.h"
#include "content/child/request_extra_data.h"
#include "content/child/service_worker/service_worker_network_provider.h"
#include "content/child/thread_safe_sender.h"
-#include "content/child/webmessageportchannel_impl.h"
#include "content/child/worker_task_runner.h"
#include "content/child/worker_thread_task_runner.h"
#include "content/common/devtools_messages.h"
@@ -98,9 +99,6 @@ EmbeddedWorkerContextClient::EmbeddedWorkerContextClient(
}
EmbeddedWorkerContextClient::~EmbeddedWorkerContextClient() {
- // g_worker_client_tls.Pointer()->Get() could be NULL if this gets
- // deleted before workerContextStarted() is called.
- g_worker_client_tls.Pointer()->Set(NULL);
}
bool EmbeddedWorkerContextClient::OnMessageReceived(
@@ -144,6 +142,8 @@ void EmbeddedWorkerContextClient::workerContextStarted(
worker_task_runner_ = new WorkerThreadTaskRunner(
WorkerTaskRunner::Instance()->CurrentWorkerId());
DCHECK_NE(0, WorkerTaskRunner::Instance()->CurrentWorkerId());
+ // g_worker_client_tls.Pointer()->Get() could return NULL if this context
+ // gets deleted before workerContextStarted() is called.
DCHECK(g_worker_client_tls.Pointer()->Get() == NULL);
DCHECK(!script_context_);
g_worker_client_tls.Pointer()->Set(this);
@@ -166,25 +166,20 @@ void EmbeddedWorkerContextClient::willDestroyWorkerContext() {
// (while we're still on the worker thread).
script_context_.reset();
-#if !defined(HAS_SERVICE_WORKER_CONTEXT_DESTROYED)
- // TODO(kinuko): Remove this after blink side is landed.
- main_thread_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&CallWorkerContextDestroyedOnMainThread,
- embedded_worker_id_));
-#endif
+ // This also lets the message filter stop dispatching messages to
+ // this client.
+ g_worker_client_tls.Pointer()->Set(NULL);
}
void EmbeddedWorkerContextClient::workerContextDestroyed() {
- // TODO(kinuko): Remove this ifdef after blink side is landed.
-#ifdef HAS_SERVICE_WORKER_CONTEXT_DESTROYED
+ DCHECK(g_worker_client_tls.Pointer()->Get() == NULL);
+
// Now we should be able to free the WebEmbeddedWorker container on the
// main thread.
main_thread_proxy_->PostTask(
FROM_HERE,
base::Bind(&CallWorkerContextDestroyedOnMainThread,
embedded_worker_id_));
-#endif
}
void EmbeddedWorkerContextClient::reportException(
@@ -252,10 +247,18 @@ void EmbeddedWorkerContextClient::didHandleFetchEvent(
int request_id,
const blink::WebServiceWorkerResponse& web_response) {
DCHECK(script_context_);
- ServiceWorkerResponse response(web_response.statusCode(),
+ std::map<std::string, std::string> headers;
+ const blink::WebVector<blink::WebString>& header_keys =
+ web_response.getHeaderKeys();
+ for (size_t i = 0; i < header_keys.size(); ++i) {
+ const base::string16& key = header_keys[i];
+ headers[base::UTF16ToUTF8(key)] =
+ base::UTF16ToUTF8(web_response.getHeader(key));
+ }
+ ServiceWorkerResponse response(web_response.status(),
web_response.statusText().utf8(),
- web_response.method().utf8(),
- std::map<std::string, std::string>());
+ headers,
+ std::string());
script_context_->DidHandleFetchEvent(
request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response);
}
@@ -292,9 +295,8 @@ void EmbeddedWorkerContextClient::postMessageToClient(
const blink::WebString& message,
blink::WebMessagePortChannelArray* channels) {
DCHECK(script_context_);
- script_context_->PostMessageToDocument(
- client_id, message,
- WebMessagePortChannelImpl::ExtractMessagePortIDs(channels));
+ script_context_->PostMessageToDocument(client_id, message,
+ make_scoped_ptr(channels));
}
void EmbeddedWorkerContextClient::OnMessageToWorker(
diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.cc b/content/renderer/service_worker/embedded_worker_dispatcher.cc
index 6486bfdd15..15ff76a414 100644
--- a/content/renderer/service_worker/embedded_worker_dispatcher.cc
+++ b/content/renderer/service_worker/embedded_worker_dispatcher.cc
@@ -82,7 +82,9 @@ void EmbeddedWorkerDispatcher::OnStartWorker(
blink::WebEmbeddedWorkerStartData start_data;
start_data.scriptURL = params.script_url;
start_data.userAgent = base::UTF8ToUTF16(GetContentClient()->GetUserAgent());
- start_data.startMode = blink::WebEmbeddedWorkerStartModeDontPauseOnStart;
+ start_data.startMode =
+ params.pause_on_start ? blink::WebEmbeddedWorkerStartModePauseOnStart
+ : blink::WebEmbeddedWorkerStartModeDontPauseOnStart;
wrapper->worker()->startWorkerContext(start_data);
workers_.AddWithID(wrapper.release(), params.embedded_worker_id);
diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc
index 7df08084e6..bb3bf9a1b1 100644
--- a/content/renderer/service_worker/service_worker_script_context.cc
+++ b/content/renderer/service_worker/service_worker_script_context.cc
@@ -22,9 +22,10 @@ void SendPostMessageToDocumentOnMainThread(
int routing_id,
int client_id,
const base::string16& message,
- const std::vector<int>& message_port_ids) {
+ scoped_ptr<blink::WebMessagePortChannelArray> channels) {
sender->Send(new ServiceWorkerHostMsg_PostMessageToDocument(
- routing_id, client_id, message, message_port_ids));
+ routing_id, client_id, message,
+ WebMessagePortChannelImpl::ExtractMessagePortIDs(channels.release())));
}
} // namespace
@@ -92,8 +93,8 @@ void ServiceWorkerScriptContext::GetClientDocuments(
void ServiceWorkerScriptContext::PostMessageToDocument(
int client_id,
const base::string16& message,
- const std::vector<int>& message_port_ids) {
- // This may send IDs for MessagePorts, and all internal book-keeping
+ scoped_ptr<blink::WebMessagePortChannelArray> channels) {
+ // This may send channels for MessagePorts, and all internal book-keeping
// messages for MessagePort (e.g. QueueMessages) are sent from main thread
// (with thread hopping), so we need to do the same thread hopping here not
// to overtake those messages.
@@ -101,7 +102,7 @@ void ServiceWorkerScriptContext::PostMessageToDocument(
FROM_HERE,
base::Bind(&SendPostMessageToDocumentOnMainThread,
make_scoped_refptr(embedded_context_->thread_safe_sender()),
- GetRoutingID(), client_id, message, message_port_ids));
+ GetRoutingID(), client_id, message, base::Passed(&channels)));
}
void ServiceWorkerScriptContext::Send(IPC::Message* message) {
diff --git a/content/renderer/service_worker/service_worker_script_context.h b/content/renderer/service_worker/service_worker_script_context.h
index a528d34e8c..e455fbfd41 100644
--- a/content/renderer/service_worker/service_worker_script_context.h
+++ b/content/renderer/service_worker/service_worker_script_context.h
@@ -12,6 +12,7 @@
#include "base/strings/string16.h"
#include "content/child/webmessageportchannel_impl.h"
#include "content/common/service_worker/service_worker_types.h"
+#include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
@@ -50,9 +51,10 @@ class ServiceWorkerScriptContext {
void DidHandleSyncEvent(int request_id);
void GetClientDocuments(
blink::WebServiceWorkerClientsCallbacks* callbacks);
- void PostMessageToDocument(int client_id,
- const base::string16& message,
- const std::vector<int>& message_port_ids);
+ void PostMessageToDocument(
+ int client_id,
+ const base::string16& message,
+ scoped_ptr<blink::WebMessagePortChannelArray> channels);
private:
typedef IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>
diff --git a/content/renderer/v8_value_converter_impl.cc b/content/renderer/v8_value_converter_impl.cc
index b321f55cf6..d12b26bdf0 100644
--- a/content/renderer/v8_value_converter_impl.cc
+++ b/content/renderer/v8_value_converter_impl.cc
@@ -38,7 +38,8 @@ bool V8ValueConverter::Strategy::FromV8Array(
}
bool V8ValueConverter::Strategy::FromV8ArrayBuffer(v8::Handle<v8::Object> value,
- base::Value** out) const {
+ base::Value** out,
+ v8::Isolate* isolate) const {
return false;
}
@@ -342,7 +343,7 @@ base::Value* V8ValueConverterImpl::FromV8ValueImpl(
}
if (val->IsArrayBuffer() || val->IsArrayBufferView())
- return FromV8ArrayBuffer(val->ToObject());
+ return FromV8ArrayBuffer(val->ToObject(), isolate);
if (val->IsObject())
return FromV8Object(val->ToObject(), state, isolate);
@@ -405,10 +406,11 @@ base::Value* V8ValueConverterImpl::FromV8Array(
}
base::Value* V8ValueConverterImpl::FromV8ArrayBuffer(
- v8::Handle<v8::Object> val) const {
+ v8::Handle<v8::Object> val,
+ v8::Isolate* isolate) const {
if (strategy_) {
base::Value* out = NULL;
- if (strategy_->FromV8ArrayBuffer(val, &out))
+ if (strategy_->FromV8ArrayBuffer(val, &out, isolate))
return out;
}
diff --git a/content/renderer/v8_value_converter_impl.h b/content/renderer/v8_value_converter_impl.h
index d026a18723..a5288aecd1 100644
--- a/content/renderer/v8_value_converter_impl.h
+++ b/content/renderer/v8_value_converter_impl.h
@@ -61,7 +61,8 @@ class CONTENT_EXPORT V8ValueConverterImpl : public V8ValueConverter {
// This will convert objects of type ArrayBuffer or any of the
// ArrayBufferView subclasses.
- base::Value* FromV8ArrayBuffer(v8::Handle<v8::Object> val) const;
+ base::Value* FromV8ArrayBuffer(v8::Handle<v8::Object> val,
+ v8::Isolate* isolate) const;
base::Value* FromV8Object(v8::Handle<v8::Object> object,
FromV8ValueState* state,
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc
index f6f252d22f..6f1302dd5f 100644
--- a/content/renderer/v8_value_converter_impl_unittest.cc
+++ b/content/renderer/v8_value_converter_impl_unittest.cc
@@ -732,7 +732,8 @@ class V8ValueConverterOverridingStrategyForTesting
return true;
}
virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
- base::Value** out) const OVERRIDE {
+ base::Value** out,
+ v8::Isolate* isolate) const OVERRIDE {
*out = NewReferenceValue();
return true;
}
@@ -822,7 +823,8 @@ class V8ValueConverterBypassStrategyForTesting
return false;
}
virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
- base::Value** out) const OVERRIDE {
+ base::Value** out,
+ v8::Isolate* isolate) const OVERRIDE {
return false;
}
virtual bool FromV8Number(v8::Handle<v8::Number> value,
diff --git a/content/renderer/web_preferences.cc b/content/renderer/web_preferences.cc
index a2d4e5ecbb..33a0004de1 100644
--- a/content/renderer/web_preferences.cc
+++ b/content/renderer/web_preferences.cc
@@ -5,6 +5,8 @@
#include "content/public/renderer/web_preferences.h"
#include "base/strings/utf_string_conversions.h"
+#include "content/renderer/net_info_helper.h"
+#include "third_party/WebKit/public/platform/WebConnectionType.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURL.h"
#include "third_party/WebKit/public/web/WebKit.h"
@@ -183,11 +185,6 @@ void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
// Disable GL multisampling if requested on command line.
settings->setOpenGLMultisamplingEnabled(prefs.gl_multisampling_enabled);
- // Enable privileged WebGL extensions for Chrome extensions or if requested
- // on command line.
- settings->setPrivilegedWebGLExtensionsEnabled(
- prefs.privileged_webgl_extensions_enabled);
-
// Enable WebGL errors to the JS console if requested.
settings->setWebGLErrorsToConsoleEnabled(
prefs.webgl_errors_to_console_enabled);
@@ -197,8 +194,6 @@ void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
settings->setLayerSquashingEnabled(prefs.layer_squashing_enabled);
- settings->setThreadedHTMLParser(prefs.threaded_html_parser);
-
// Enable gpu-accelerated compositing always.
settings->setAcceleratedCompositingEnabled(true);
@@ -270,9 +265,6 @@ void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
settings->setDeviceSupportsMouse(prefs.device_supports_mouse);
settings->setEnableTouchAdjustment(prefs.touch_adjustment_enabled);
- settings->setFixedPositionCreatesStackingContext(
- prefs.fixed_position_creates_stacking_context);
-
settings->setDeferredImageDecodingEnabled(
prefs.deferred_image_decoding_enabled);
settings->setShouldRespectImageOrientation(
@@ -335,6 +327,8 @@ void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
#endif
WebNetworkStateNotifier::setOnLine(prefs.is_online);
+ WebNetworkStateNotifier::setWebConnectionType(
+ NetConnectionTypeToWebConnectionType(prefs.connection_type));
settings->setPinchVirtualViewportEnabled(
prefs.pinch_virtual_viewport_enabled);
@@ -342,8 +336,6 @@ void ApplyWebPreferences(const WebPreferences& prefs, WebView* web_view) {
prefs.pinch_overlay_scrollbar_thickness);
settings->setUseSolidColorScrollbars(prefs.use_solid_color_scrollbars);
settings->setCompositorTouchHitTesting(prefs.compositor_touch_hit_testing);
-
- settings->setUseThreadedHTMLParserForDataURLs(true);
}
} // namespace content
diff --git a/content/renderer/web_ui_extension.cc b/content/renderer/web_ui_extension.cc
index dcc4ed5f8b..11565f2b4a 100644
--- a/content/renderer/web_ui_extension.cc
+++ b/content/renderer/web_ui_extension.cc
@@ -42,7 +42,7 @@ bool ShouldRespondToRequest(
bool webui_enabled =
(render_view->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI) &&
(frame_url.SchemeIs(kChromeUIScheme) ||
- frame_url.SchemeIs(kDataScheme));
+ frame_url.SchemeIs(url::kDataScheme));
if (!webui_enabled)
return false;
diff --git a/content/renderer/web_ui_mojo.cc b/content/renderer/web_ui_mojo.cc
index 37deb223ec..38c71d5c1c 100644
--- a/content/renderer/web_ui_mojo.cc
+++ b/content/renderer/web_ui_mojo.cc
@@ -110,8 +110,7 @@ WebUIMojoContextState* WebUIMojo::GetContextState() {
return context_state ? context_state->state.get() : NULL;
}
-void WebUIMojo::DidClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) {
+void WebUIMojo::DidClearWindowObject(blink::WebLocalFrame* frame) {
if (frame != render_view()->GetWebView()->mainFrame())
return;
diff --git a/content/renderer/web_ui_mojo.h b/content/renderer/web_ui_mojo.h
index 504f737330..2a645429a2 100644
--- a/content/renderer/web_ui_mojo.h
+++ b/content/renderer/web_ui_mojo.h
@@ -65,8 +65,7 @@ class WebUIMojo
WebUIMojoContextState* GetContextState();
// RenderViewObserver overrides:
- virtual void DidClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) OVERRIDE;
+ virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE;
MainFrameObserver main_frame_observer_;
diff --git a/content/renderer/webclipboard_impl.cc b/content/renderer/webclipboard_impl.cc
index 317ec7d283..663d6f064f 100644
--- a/content/renderer/webclipboard_impl.cc
+++ b/content/renderer/webclipboard_impl.cc
@@ -155,8 +155,15 @@ void WebClipboardImpl::writeImage(const WebImage& image,
if (!image.isNull()) {
const SkBitmap& bitmap = image.getSkBitmap();
+ // WriteBitmapFromPixels expects 32-bit data.
+ DCHECK_EQ(bitmap.config(), SkBitmap::kARGB_8888_Config);
+
SkAutoLockPixels locked(bitmap);
- scw.WriteBitmapFromPixels(bitmap.getPixels(), image.size());
+ void *pixels = bitmap.getPixels();
+ // TODO(piman): this should not be NULL, but it is. crbug.com/369621
+ if (!pixels)
+ return;
+ scw.WriteBitmapFromPixels(pixels, image.size());
}
if (!url.isEmpty()) {
diff --git a/content/result_codes_java.target.darwin-arm.mk b/content/result_codes_java.target.darwin-arm.mk
index 0947c779a1..4a821a3ea2 100644
--- a/content/result_codes_java.target.darwin-arm.mk
+++ b/content/result_codes_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.darwin-arm64.mk b/content/result_codes_java.target.darwin-arm64.mk
index d125a11818..3c06f05003 100644
--- a/content/result_codes_java.target.darwin-arm64.mk
+++ b/content/result_codes_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.darwin-mips.mk b/content/result_codes_java.target.darwin-mips.mk
index 4413f63bba..eebb4d1131 100644
--- a/content/result_codes_java.target.darwin-mips.mk
+++ b/content/result_codes_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.darwin-x86.mk b/content/result_codes_java.target.darwin-x86.mk
index c14ac1bf6a..b9f56b5897 100644
--- a/content/result_codes_java.target.darwin-x86.mk
+++ b/content/result_codes_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.darwin-x86_64.mk b/content/result_codes_java.target.darwin-x86_64.mk
index 987436a327..efbfaa97d7 100644
--- a/content/result_codes_java.target.darwin-x86_64.mk
+++ b/content/result_codes_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.linux-arm.mk b/content/result_codes_java.target.linux-arm.mk
index 0947c779a1..4a821a3ea2 100644
--- a/content/result_codes_java.target.linux-arm.mk
+++ b/content/result_codes_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.linux-arm64.mk b/content/result_codes_java.target.linux-arm64.mk
index d125a11818..3c06f05003 100644
--- a/content/result_codes_java.target.linux-arm64.mk
+++ b/content/result_codes_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.linux-mips.mk b/content/result_codes_java.target.linux-mips.mk
index 4413f63bba..eebb4d1131 100644
--- a/content/result_codes_java.target.linux-mips.mk
+++ b/content/result_codes_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.linux-x86.mk b/content/result_codes_java.target.linux-x86.mk
index c14ac1bf6a..b9f56b5897 100644
--- a/content/result_codes_java.target.linux-x86.mk
+++ b/content/result_codes_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/result_codes_java.target.linux-x86_64.mk b/content/result_codes_java.target.linux-x86_64.mk
index 987436a327..efbfaa97d7 100644
--- a/content/result_codes_java.target.linux-x86_64.mk
+++ b/content/result_codes_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.darwin-arm.mk b/content/screen_orientation_values_java.target.darwin-arm.mk
index 955c6c5da4..f06fa0aee8 100644
--- a/content/screen_orientation_values_java.target.darwin-arm.mk
+++ b/content/screen_orientation_values_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.darwin-arm64.mk b/content/screen_orientation_values_java.target.darwin-arm64.mk
index 4decb62e72..ddc79f9c67 100644
--- a/content/screen_orientation_values_java.target.darwin-arm64.mk
+++ b/content/screen_orientation_values_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.darwin-mips.mk b/content/screen_orientation_values_java.target.darwin-mips.mk
index 6af4d9e0d5..6ba74b1094 100644
--- a/content/screen_orientation_values_java.target.darwin-mips.mk
+++ b/content/screen_orientation_values_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.darwin-x86.mk b/content/screen_orientation_values_java.target.darwin-x86.mk
index bb8f66535c..14ea203fad 100644
--- a/content/screen_orientation_values_java.target.darwin-x86.mk
+++ b/content/screen_orientation_values_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.darwin-x86_64.mk b/content/screen_orientation_values_java.target.darwin-x86_64.mk
index 4338e376a4..f24064ec49 100644
--- a/content/screen_orientation_values_java.target.darwin-x86_64.mk
+++ b/content/screen_orientation_values_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.linux-arm.mk b/content/screen_orientation_values_java.target.linux-arm.mk
index 955c6c5da4..f06fa0aee8 100644
--- a/content/screen_orientation_values_java.target.linux-arm.mk
+++ b/content/screen_orientation_values_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.linux-arm64.mk b/content/screen_orientation_values_java.target.linux-arm64.mk
index 4decb62e72..ddc79f9c67 100644
--- a/content/screen_orientation_values_java.target.linux-arm64.mk
+++ b/content/screen_orientation_values_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.linux-mips.mk b/content/screen_orientation_values_java.target.linux-mips.mk
index 6af4d9e0d5..6ba74b1094 100644
--- a/content/screen_orientation_values_java.target.linux-mips.mk
+++ b/content/screen_orientation_values_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.linux-x86.mk b/content/screen_orientation_values_java.target.linux-x86.mk
index bb8f66535c..14ea203fad 100644
--- a/content/screen_orientation_values_java.target.linux-x86.mk
+++ b/content/screen_orientation_values_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/screen_orientation_values_java.target.linux-x86_64.mk b/content/screen_orientation_values_java.target.linux-x86_64.mk
index 4338e376a4..f24064ec49 100644
--- a/content/screen_orientation_values_java.target.linux-x86_64.mk
+++ b/content/screen_orientation_values_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/shell/DEPS b/content/shell/DEPS
index 1d7524c9e7..386f7d0951 100644
--- a/content/shell/DEPS
+++ b/content/shell/DEPS
@@ -27,4 +27,7 @@ specific_include_rules = {
"shell_views\.cc": [
"+ui/wm/test"
],
+ "content_browser_tests_android\.cc": [
+ "+media/base"
+ ],
}
diff --git a/content/shell/android/browsertests_apk/content_browser_tests_android.cc b/content/shell/android/browsertests_apk/content_browser_tests_android.cc
index d4dd0b2221..9abc6367c8 100644
--- a/content/shell/android/browsertests_apk/content_browser_tests_android.cc
+++ b/content/shell/android/browsertests_apk/content_browser_tests_android.cc
@@ -29,6 +29,7 @@
#include "content/shell/android/shell_jni_registrar.h"
#include "content/shell/app/shell_main_delegate.h"
#include "jni/ContentBrowserTestsActivity_jni.h"
+#include "media/base/media_switches.h"
#include "testing/android/native_test_util.h"
using testing::native_test_util::ArgsToArgv;
diff --git a/content/shell/android/java/src/org/chromium/content_shell/Shell.java b/content/shell/android/java/src/org/chromium/content_shell/Shell.java
index 99caca885f..2b63bc0273 100644
--- a/content/shell/android/java/src/org/chromium/content_shell/Shell.java
+++ b/content/shell/android/java/src/org/chromium/content_shell/Shell.java
@@ -44,7 +44,6 @@ public class Shell extends LinearLayout {
}
};
- private ContentView mContentView;
private ContentViewCore mContentViewCore;
private ContentViewClient mContentViewClient;
private EditText mUrlTextView;
@@ -150,7 +149,7 @@ public class Shell extends LinearLayout {
}
loadUrl(mUrlTextView.getText().toString());
setKeyboardVisibilityForUrl(false);
- mContentView.requestFocus();
+ mContentViewCore.getContainerView().requestFocus();
return true;
}
});
@@ -183,8 +182,8 @@ public class Shell extends LinearLayout {
}
mUrlTextView.clearFocus();
// TODO(aurimas): Remove this when crbug.com/174541 is fixed.
- mContentView.clearFocus();
- mContentView.requestFocus();
+ mContentViewCore.getContainerView().clearFocus();
+ mContentViewCore.getContainerView().requestFocus();
}
/**
@@ -247,30 +246,44 @@ public class Shell extends LinearLayout {
/**
* Initializes the ContentView based on the native tab contents pointer passed in.
- * @param nativeTabContents The pointer to the native tab contents object.
+ * @param nativeWebContents The pointer to the native tab contents object.
*/
@SuppressWarnings("unused")
@CalledByNative
- private void initFromNativeTabContents(long nativeTabContents) {
- mContentView = ContentView.newInstance(getContext(), nativeTabContents, mWindow);
- mContentViewCore = mContentView.getContentViewCore();
+ private void initFromNativeTabContents(long nativeWebContents) {
+ Context context = getContext();
+ mContentViewCore = new ContentViewCore(context);
+ ContentView cv = ContentView.newInstance(context, mContentViewCore);
+ mContentViewCore.initialize(cv, cv, nativeWebContents, mWindow);
mContentViewCore.setContentViewClient(mContentViewClient);
if (getParent() != null) mContentViewCore.onShow();
if (mContentViewCore.getUrl() != null) mUrlTextView.setText(mContentViewCore.getUrl());
- ((FrameLayout) findViewById(R.id.contentview_holder)).addView(mContentView,
+ ((FrameLayout) findViewById(R.id.contentview_holder)).addView(cv,
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
- mContentView.requestFocus();
+ cv.requestFocus();
mContentViewRenderView.setCurrentContentViewCore(mContentViewCore);
}
/**
+ * Enable/Disable navigation(Prev/Next) button if navigation is allowed/disallowed
+ * in respective direction.
+ * @param controlId Id of button to update
+ * @param enabled enable/disable value
+ */
+ @CalledByNative
+ private void enableUiControl(int controlId, boolean enabled) {
+ if (controlId == 0) mPrevButton.setEnabled(enabled);
+ else if (controlId == 1) mNextButton.setEnabled(enabled);
+ }
+
+ /**
* @return The {@link ViewGroup} currently shown by this Shell.
*/
public ViewGroup getContentView() {
- return mContentView;
+ return mContentViewCore.getContainerView();
}
/**
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc
index b7aeb6be28..97ea71a8ec 100644
--- a/content/shell/app/shell_main_delegate.cc
+++ b/content/shell/app/shell_main_delegate.cc
@@ -12,6 +12,7 @@
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/path_service.h"
+#include "base/platform_file.h"
#include "cc/base/switches.h"
#include "content/public/browser/browser_main_runner.h"
#include "content/public/common/content_switches.h"
diff --git a/content/shell/browser/shell_android.cc b/content/shell/browser/shell_android.cc
index d18bd5df1b..4033b479a9 100644
--- a/content/shell/browser/shell_android.cc
+++ b/content/shell/browser/shell_android.cc
@@ -36,6 +36,10 @@ void Shell::PlatformCleanUp() {
}
void Shell::PlatformEnableUIControl(UIControl control, bool is_enabled) {
+ JNIEnv* env = AttachCurrentThread();
+ if (java_object_.is_null())
+ return;
+ Java_Shell_enableUiControl(env, java_object_.obj(), control, is_enabled);
}
void Shell::PlatformSetAddressBarURL(const GURL& url) {
diff --git a/content/shell/browser/shell_aura.cc b/content/shell/browser/shell_aura.cc
index 33ee197e78..5f945d4b77 100644
--- a/content/shell/browser/shell_aura.cc
+++ b/content/shell/browser/shell_aura.cc
@@ -51,9 +51,9 @@ void Shell::PlatformSetContents() {
CHECK(platform_);
aura::Window* content = web_contents_->GetNativeView();
aura::Window* parent = platform_->host()->window();
- if (parent->Contains(content))
- return;
- parent->AddChild(content);
+ if (!parent->Contains(content))
+ parent->AddChild(content);
+
content->Show();
}
diff --git a/content/shell/browser/shell_browser_context.cc b/content/shell/browser/shell_browser_context.cc
index 7778ff65a7..39d70a53aa 100644
--- a/content/shell/browser/shell_browser_context.cc
+++ b/content/shell/browser/shell_browser_context.cc
@@ -65,7 +65,7 @@ ShellBrowserContext::ShellBrowserContext(bool off_the_record,
: off_the_record_(off_the_record),
net_log_(net_log),
ignore_certificate_errors_(false),
- guest_manager_delegate_(NULL),
+ guest_manager_(NULL),
resource_context_(new ShellResourceContext) {
InitWhileIOAllowed();
}
@@ -141,7 +141,7 @@ net::URLRequestContextGetter* ShellBrowserContext::GetRequestContext() {
net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext(
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
DCHECK(!url_request_getter_.get());
url_request_getter_ = new ShellURLRequestContextGetter(
ignore_certificate_errors_,
@@ -149,7 +149,7 @@ net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext(
BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO),
BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE),
protocol_handlers,
- protocol_interceptors.Pass(),
+ request_interceptors.Pass(),
net_log_);
resource_context_->set_url_request_context_getter(url_request_getter_.get());
return url_request_getter_.get();
@@ -206,15 +206,15 @@ void ShellBrowserContext::CancelMidiSysExPermissionRequest(
void ShellBrowserContext::RequestProtectedMediaIdentifierPermission(
int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback& callback) {
callback.Run(true);
}
void ShellBrowserContext::CancelProtectedMediaIdentifierPermissionRequests(
- int group_id) {
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) {
}
net::URLRequestContextGetter*
@@ -222,7 +222,7 @@ ShellBrowserContext::CreateRequestContextForStoragePartition(
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
return NULL;
}
@@ -235,9 +235,8 @@ GeolocationPermissionContext*
return NULL;
}
-BrowserPluginGuestManagerDelegate*
- ShellBrowserContext::GetGuestManagerDelegate() {
- return guest_manager_delegate_;
+BrowserPluginGuestManager* ShellBrowserContext::GetGuestManager() {
+ return guest_manager_;
}
quota::SpecialStoragePolicy* ShellBrowserContext::GetSpecialStoragePolicy() {
diff --git a/content/shell/browser/shell_browser_context.h b/content/shell/browser/shell_browser_context.h
index 63bbf34905..60baa521fc 100644
--- a/content/shell/browser/shell_browser_context.h
+++ b/content/shell/browser/shell_browser_context.h
@@ -29,9 +29,9 @@ class ShellBrowserContext : public BrowserContext {
ShellBrowserContext(bool off_the_record, net::NetLog* net_log);
virtual ~ShellBrowserContext();
- void set_guest_manager_delegate_for_testing(
- BrowserPluginGuestManagerDelegate* guest_manager_delegate) {
- guest_manager_delegate_ = guest_manager_delegate;
+ void set_guest_manager_for_testing(
+ BrowserPluginGuestManager* guest_manager) {
+ guest_manager_ = guest_manager;
}
// BrowserContext implementation.
@@ -63,27 +63,26 @@ class ShellBrowserContext : public BrowserContext {
virtual void RequestProtectedMediaIdentifierPermission(
int render_process_id,
int render_view_id,
- int bridge_id,
- int group_id,
- const GURL& requesting_frame,
+ const GURL& origin,
const ProtectedMediaIdentifierPermissionCallback& callback) OVERRIDE;
virtual void CancelProtectedMediaIdentifierPermissionRequests(
- int group_id) OVERRIDE;
+ int render_process_id,
+ int render_view_id,
+ const GURL& origin) OVERRIDE;
virtual ResourceContext* GetResourceContext() OVERRIDE;
virtual GeolocationPermissionContext*
GetGeolocationPermissionContext() OVERRIDE;
- virtual content::BrowserPluginGuestManagerDelegate*
- GetGuestManagerDelegate() OVERRIDE;
+ virtual BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
net::URLRequestContextGetter* CreateRequestContext(
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors);
+ URLRequestInterceptorScopedVector request_interceptors);
net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors);
+ URLRequestInterceptorScopedVector request_interceptors);
private:
class ShellResourceContext;
@@ -96,7 +95,7 @@ class ShellBrowserContext : public BrowserContext {
net::NetLog* net_log_;
bool ignore_certificate_errors_;
base::FilePath path_;
- BrowserPluginGuestManagerDelegate* guest_manager_delegate_;
+ BrowserPluginGuestManager* guest_manager_;
scoped_ptr<ShellResourceContext> resource_context_;
scoped_ptr<ShellDownloadManagerDelegate> download_manager_delegate_;
scoped_refptr<ShellURLRequestContextGetter> url_request_getter_;
diff --git a/content/shell/browser/shell_browser_main_parts.cc b/content/shell/browser/shell_browser_main_parts.cc
index d5cbed5449..08eab4f43e 100644
--- a/content/shell/browser/shell_browser_main_parts.cc
+++ b/content/shell/browser/shell_browser_main_parts.cc
@@ -41,9 +41,9 @@
#if defined(USE_AURA) && defined(USE_X11)
#include "ui/events/x/touch_factory_x11.h"
-#if !defined(OS_CHROMEOS)
-#include "ui/base/ime/input_method_initializer.h"
#endif
+#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
+#include "ui/base/ime/input_method_initializer.h"
#endif
namespace content {
@@ -108,7 +108,7 @@ void ShellBrowserMainParts::PostMainMessageLoopStart() {
}
void ShellBrowserMainParts::PreEarlyInitialization() {
-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(USE_X11)
+#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
ui::InitializeInputMethodForTesting();
#endif
#if defined(OS_ANDROID)
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index 21423d2db7..e49d5b7555 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -162,11 +162,11 @@ void ShellContentBrowserClient::RenderProcessWillLaunch(
net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext(
BrowserContext* content_browser_context,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
ShellBrowserContext* shell_browser_context =
ShellBrowserContextForBrowserContext(content_browser_context);
return shell_browser_context->CreateRequestContext(
- protocol_handlers, protocol_interceptors.Pass());
+ protocol_handlers, request_interceptors.Pass());
}
net::URLRequestContextGetter*
@@ -175,14 +175,14 @@ ShellContentBrowserClient::CreateRequestContextForStoragePartition(
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) {
+ URLRequestInterceptorScopedVector request_interceptors) {
ShellBrowserContext* shell_browser_context =
ShellBrowserContextForBrowserContext(content_browser_context);
return shell_browser_context->CreateRequestContextForStoragePartition(
partition_path,
in_memory,
protocol_handlers,
- protocol_interceptors.Pass());
+ request_interceptors.Pass());
}
bool ShellContentBrowserClient::IsHandledURL(const GURL& url) {
@@ -192,12 +192,12 @@ bool ShellContentBrowserClient::IsHandledURL(const GURL& url) {
// Keep in sync with ProtocolHandlers added by
// ShellURLRequestContextGetter::GetURLRequestContext().
static const char* const kProtocolList[] = {
- kBlobScheme,
- kFileSystemScheme,
+ url::kBlobScheme,
+ url::kFileSystemScheme,
kChromeUIScheme,
kChromeDevToolsScheme,
- kDataScheme,
- kFileScheme,
+ url::kDataScheme,
+ url::kFileScheme,
};
for (size_t i = 0; i < arraysize(kProtocolList); ++i) {
if (url.scheme() == kProtocolList[i])
@@ -294,7 +294,7 @@ bool ShellContentBrowserClient::ShouldSwapProcessesForRedirect(
void ShellContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
const CommandLine& command_line,
int child_process_id,
- std::vector<content::FileDescriptorInfo>* mappings) {
+ std::vector<FileDescriptorInfo>* mappings) {
#if defined(OS_ANDROID)
int flags = base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ;
base::FilePath pak_file;
@@ -309,8 +309,7 @@ void ShellContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
<< "content_shell.pak";
}
mappings->push_back(
- content::FileDescriptorInfo(kShellPakDescriptor,
- base::FileDescriptor(f.Pass())));
+ FileDescriptorInfo(kShellPakDescriptor, base::FileDescriptor(f.Pass())));
if (breakpad::IsCrashReporterEnabled()) {
f = breakpad::CrashDumpManager::GetInstance()->CreateMinidumpFile(
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h
index 397a73aa20..4cc0098c86 100644
--- a/content/shell/browser/shell_content_browser_client.h
+++ b/content/shell/browser/shell_content_browser_client.h
@@ -10,7 +10,6 @@
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "content/public/browser/content_browser_client.h"
#include "content/shell/browser/shell_speech_recognition_manager_delegate.h"
@@ -37,13 +36,13 @@ class ShellContentBrowserClient : public ContentBrowserClient {
virtual net::URLRequestContextGetter* CreateRequestContext(
BrowserContext* browser_context,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) OVERRIDE;
+ URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
BrowserContext* browser_context,
const base::FilePath& partition_path,
bool in_memory,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors) OVERRIDE;
+ URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
virtual bool IsHandledURL(const GURL& url) OVERRIDE;
virtual void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) OVERRIDE;
@@ -67,7 +66,7 @@ class ShellContentBrowserClient : public ContentBrowserClient {
virtual void GetAdditionalMappedFilesForChildProcess(
const base::CommandLine& command_line,
int child_process_id,
- std::vector<content::FileDescriptorInfo>* mappings) OVERRIDE;
+ std::vector<FileDescriptorInfo>* mappings) OVERRIDE;
#endif
#if defined(OS_WIN)
virtual void PreSpawnRenderer(sandbox::TargetPolicy* policy,
diff --git a/content/shell/browser/shell_message_filter.cc b/content/shell/browser/shell_message_filter.cc
index d913734c5d..b2008b31ad 100644
--- a/content/shell/browser/shell_message_filter.cc
+++ b/content/shell/browser/shell_message_filter.cc
@@ -42,10 +42,9 @@ void ShellMessageFilter::OverrideThreadForMessage(const IPC::Message& message,
*thread = BrowserThread::FILE;
}
-bool ShellMessageFilter::OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) {
+bool ShellMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
- IPC_BEGIN_MESSAGE_MAP_EX(ShellMessageFilter, message, *message_was_ok)
+ IPC_BEGIN_MESSAGE_MAP(ShellMessageFilter, message)
IPC_MESSAGE_HANDLER(ShellViewHostMsg_ReadFileToString, OnReadFileToString)
IPC_MESSAGE_HANDLER(ShellViewHostMsg_RegisterIsolatedFileSystem,
OnRegisterIsolatedFileSystem)
diff --git a/content/shell/browser/shell_message_filter.h b/content/shell/browser/shell_message_filter.h
index 135a915991..6b0024cac4 100644
--- a/content/shell/browser/shell_message_filter.h
+++ b/content/shell/browser/shell_message_filter.h
@@ -39,8 +39,7 @@ class ShellMessageFilter : public BrowserMessageFilter {
// BrowserMessageFilter implementation.
virtual void OverrideThreadForMessage(const IPC::Message& message,
BrowserThread::ID* thread) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnReadFileToString(const base::FilePath& local_file,
std::string* contents);
diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc
index 33b8073ba7..673fa375c0 100644
--- a/content/shell/browser/shell_platform_data_aura.cc
+++ b/content/shell/browser/shell_platform_data_aura.cc
@@ -82,12 +82,9 @@ class MinimalInputEventFilter : public ui::internal::InputMethodDelegate,
private:
// ui::EventHandler:
virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE {
- const ui::EventType type = event->type();
- if (type == ui::ET_TRANSLATED_KEY_PRESS ||
- type == ui::ET_TRANSLATED_KEY_RELEASE) {
- // The |event| is already handled by this object, change the type of the
- // event to ui::ET_KEY_* and pass it to the next filter.
- static_cast<ui::TranslatedKeyEvent*>(event)->ConvertToKeyEvent();
+ // See the comment in InputMethodEventFilter::OnKeyEvent() for details.
+ if (event->IsTranslated()) {
+ event->SetTranslated(false);
} else {
if (input_method_->DispatchKeyEvent(*event))
event->StopPropagation();
@@ -96,7 +93,10 @@ class MinimalInputEventFilter : public ui::internal::InputMethodDelegate,
// ui::internal::InputMethodDelegate:
virtual bool DispatchKeyEventPostIME(const ui::KeyEvent& event) OVERRIDE {
- ui::TranslatedKeyEvent aura_event(event);
+ // See the comment in InputMethodEventFilter::DispatchKeyEventPostIME() for
+ // details.
+ ui::KeyEvent aura_event(event);
+ aura_event.SetTranslated(true);
ui::EventDispatchDetails details =
host_->dispatcher()->OnEventFromSource(&aura_event);
return aura_event.handled() || details.dispatcher_destroyed;
diff --git a/content/shell/browser/shell_url_request_context_getter.cc b/content/shell/browser/shell_url_request_context_getter.cc
index 40bca8ca98..95a8ba4788 100644
--- a/content/shell/browser/shell_url_request_context_getter.cc
+++ b/content/shell/browser/shell_url_request_context_getter.cc
@@ -14,7 +14,6 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/cookie_store_factory.h"
#include "content/public/common/content_switches.h"
-#include "content/public/common/url_constants.h"
#include "content/shell/browser/shell_network_delegate.h"
#include "content/shell/common/shell_switches.h"
#include "net/base/cache_type.h"
@@ -33,11 +32,12 @@
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/url_request/data_protocol_handler.h"
#include "net/url_request/file_protocol_handler.h"
-#include "net/url_request/protocol_intercept_job_factory.h"
#include "net/url_request/static_http_user_agent_settings.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_storage.h"
+#include "net/url_request/url_request_intercepting_job_factory.h"
#include "net/url_request/url_request_job_factory_impl.h"
+#include "url/url_constants.h"
namespace content {
@@ -64,14 +64,14 @@ ShellURLRequestContextGetter::ShellURLRequestContextGetter(
base::MessageLoop* io_loop,
base::MessageLoop* file_loop,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors,
+ URLRequestInterceptorScopedVector request_interceptors,
net::NetLog* net_log)
: ignore_certificate_errors_(ignore_certificate_errors),
base_path_(base_path),
io_loop_(io_loop),
file_loop_(file_loop),
net_log_(net_log),
- protocol_interceptors_(protocol_interceptors.Pass()) {
+ request_interceptors_(request_interceptors.Pass()) {
// Must first be created on the UI thread.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -104,8 +104,7 @@ net::URLRequestContext* ShellURLRequestContextGetter::GetURLRequestContext() {
url_request_context_->set_network_delegate(network_delegate_.get());
storage_.reset(
new net::URLRequestContextStorage(url_request_context_.get()));
- storage_->set_cookie_store(
- content::CreateCookieStore(content::CookieStoreConfig()));
+ storage_->set_cookie_store(CreateCookieStore(CookieStoreConfig()));
storage_->set_server_bound_cert_service(new net::ServerBoundCertService(
new net::DefaultServerBoundCertStore(NULL),
base::WorkerPool::GetTaskRunner(true)));
@@ -207,27 +206,26 @@ net::URLRequestContext* ShellURLRequestContextGetter::GetURLRequestContext() {
// ShellContentBrowserClient::IsHandledURL().
InstallProtocolHandlers(job_factory.get(), &protocol_handlers_);
bool set_protocol = job_factory->SetProtocolHandler(
- kDataScheme, new net::DataProtocolHandler);
+ url::kDataScheme, new net::DataProtocolHandler);
DCHECK(set_protocol);
set_protocol = job_factory->SetProtocolHandler(
- kFileScheme,
+ url::kFileScheme,
new net::FileProtocolHandler(
- content::BrowserThread::GetBlockingPool()->
- GetTaskRunnerWithShutdownBehavior(
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)));
+ BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)));
DCHECK(set_protocol);
// Set up interceptors in the reverse order.
scoped_ptr<net::URLRequestJobFactory> top_job_factory =
job_factory.PassAs<net::URLRequestJobFactory>();
- for (ProtocolHandlerScopedVector::reverse_iterator i =
- protocol_interceptors_.rbegin();
- i != protocol_interceptors_.rend();
+ for (URLRequestInterceptorScopedVector::reverse_iterator i =
+ request_interceptors_.rbegin();
+ i != request_interceptors_.rend();
++i) {
- top_job_factory.reset(new net::ProtocolInterceptJobFactory(
+ top_job_factory.reset(new net::URLRequestInterceptingJobFactory(
top_job_factory.Pass(), make_scoped_ptr(*i)));
}
- protocol_interceptors_.weak_clear();
+ request_interceptors_.weak_clear();
storage_->set_job_factory(top_job_factory.release());
}
diff --git a/content/shell/browser/shell_url_request_context_getter.h b/content/shell/browser/shell_url_request_context_getter.h
index 354951469c..fefe1f71a5 100644
--- a/content/shell/browser/shell_url_request_context_getter.h
+++ b/content/shell/browser/shell_url_request_context_getter.h
@@ -36,7 +36,7 @@ class ShellURLRequestContextGetter : public net::URLRequestContextGetter {
base::MessageLoop* io_loop,
base::MessageLoop* file_loop,
ProtocolHandlerMap* protocol_handlers,
- ProtocolHandlerScopedVector protocol_interceptors,
+ URLRequestInterceptorScopedVector request_interceptors,
net::NetLog* net_log);
// net::URLRequestContextGetter implementation.
@@ -61,7 +61,7 @@ class ShellURLRequestContextGetter : public net::URLRequestContextGetter {
scoped_ptr<net::URLRequestContextStorage> storage_;
scoped_ptr<net::URLRequestContext> url_request_context_;
ProtocolHandlerMap protocol_handlers_;
- ProtocolHandlerScopedVector protocol_interceptors_;
+ URLRequestInterceptorScopedVector request_interceptors_;
DISALLOW_COPY_AND_ASSIGN(ShellURLRequestContextGetter);
};
diff --git a/content/shell/browser/shell_views.cc b/content/shell/browser/shell_views.cc
index fda7fbcd46..dcdd8909bf 100644
--- a/content/shell/browser/shell_views.cc
+++ b/content/shell/browser/shell_views.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "base/strings/utf_string_conversions.h"
+#include "content/public/browser/context_factory.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/context_menu_params.h"
@@ -354,7 +355,7 @@ class ShellWindowDelegateView : public views::WidgetDelegateView,
virtual View* GetContentsView() OVERRIDE { return this; }
// Overridden from View
- virtual gfx::Size GetMinimumSize() OVERRIDE {
+ virtual gfx::Size GetMinimumSize() const OVERRIDE {
// We want to be able to make the window smaller than its initial
// (preferred) size.
return gfx::Size();
@@ -424,7 +425,8 @@ void Shell::PlatformInitialize(const gfx::Size& default_window_size) {
chromeos::DBusThreadManager::Initialize();
gfx::Screen::SetScreenInstance(
gfx::SCREEN_TYPE_NATIVE, aura::TestScreen::Create());
- wm_test_helper_ = new wm::WMTestHelper(default_window_size);
+ wm_test_helper_ = new wm::WMTestHelper(default_window_size,
+ GetContextFactory());
#else
gfx::Screen::SetScreenInstance(
gfx::SCREEN_TYPE_NATIVE, views::CreateDesktopScreen());
@@ -496,7 +498,6 @@ void Shell::PlatformCreateWindow(int width, int height) {
views::Widget::InitParams params;
params.bounds = gfx::Rect(0, 0, width, height);
params.delegate = new ShellWindowDelegateView(this);
- params.top_level = true;
params.remove_standard_frame = true;
window_widget_->Init(params);
#endif
diff --git a/content/shell/common/webkit_test_helpers.cc b/content/shell/common/webkit_test_helpers.cc
index 5c0cf3d113..91c1285ec4 100644
--- a/content/shell/common/webkit_test_helpers.cc
+++ b/content/shell/common/webkit_test_helpers.cc
@@ -97,14 +97,12 @@ void ApplyLayoutTestDefaultPreferences(WebPreferences* prefs) {
webkit_glue::kCommonScript] = base::ASCIIToUTF16("Helvetica");
prefs->minimum_logical_font_size = 9;
prefs->asynchronous_spell_checking_enabled = false;
- prefs->threaded_html_parser = true;
prefs->accelerated_2d_canvas_enabled =
command_line.HasSwitch(switches::kEnableAccelerated2DCanvas);
prefs->force_compositing_mode =
command_line.HasSwitch(switches::kForceCompositingMode);
prefs->accelerated_compositing_for_video_enabled = false;
prefs->mock_scrollbars_enabled = false;
- prefs->fixed_position_creates_stacking_context = false;
prefs->smart_insert_delete_enabled = true;
prefs->minimum_accelerated_2d_canvas_size = 0;
#if defined(OS_ANDROID)
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index fdb0bc2f81..c6bb80dad9 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -18,8 +18,7 @@
#include "content/shell/renderer/shell_render_process_observer.h"
#include "content/shell/renderer/shell_render_view_observer.h"
#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "content/shell/renderer/webkit_test_runner.h"
#include "content/test/mock_webclipboard_impl.h"
#include "third_party/WebKit/public/platform/WebMediaStreamCenter.h"
@@ -104,7 +103,7 @@ void ShellContentRendererClient::RenderViewCreated(RenderView* render_view) {
WebKitTestRunner* test_runner = WebKitTestRunner::Get(render_view);
test_runner->Reset();
render_view->GetWebView()->setSpellCheckClient(
- test_runner->proxy()->spellCheckClient());
+ test_runner->proxy()->GetSpellCheckClient());
WebTestDelegate* delegate =
ShellRenderProcessObserver::GetInstance()->test_delegate();
if (delegate == static_cast<WebTestDelegate*>(test_runner))
@@ -186,9 +185,9 @@ void ShellContentRendererClient::WebTestProxyCreated(RenderView* render_view,
test_runner->set_proxy(proxy);
if (!ShellRenderProcessObserver::GetInstance()->test_delegate())
ShellRenderProcessObserver::GetInstance()->SetTestDelegate(test_runner);
- proxy->setInterfaces(
+ proxy->SetInterfaces(
ShellRenderProcessObserver::GetInstance()->test_interfaces());
- test_runner->proxy()->setDelegate(
+ test_runner->proxy()->SetDelegate(
ShellRenderProcessObserver::GetInstance()->test_delegate());
}
diff --git a/content/shell/renderer/shell_content_renderer_client.h b/content/shell/renderer/shell_content_renderer_client.h
index 9f03471654..cff6b76e88 100644
--- a/content/shell/renderer/shell_content_renderer_client.h
+++ b/content/shell/renderer/shell_content_renderer_client.h
@@ -7,7 +7,6 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
#include "content/public/renderer/content_renderer_client.h"
namespace blink {
diff --git a/content/shell/renderer/shell_render_frame_observer.cc b/content/shell/renderer/shell_render_frame_observer.cc
index 6842d8a062..796e209b81 100644
--- a/content/shell/renderer/shell_render_frame_observer.cc
+++ b/content/shell/renderer/shell_render_frame_observer.cc
@@ -9,7 +9,7 @@
#include "content/shell/common/shell_switches.h"
#include "content/shell/renderer/shell_render_process_observer.h"
#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
+#include "content/shell/renderer/test_runner/web_test_runner.h"
#include "third_party/WebKit/public/web/WebFrame.h"
namespace content {
@@ -20,7 +20,7 @@ ShellRenderFrameObserver::ShellRenderFrameObserver(RenderFrame* render_frame)
return;
render_frame->GetWebFrame()->setPermissionClient(
ShellRenderProcessObserver::GetInstance()->test_interfaces()->
- testRunner()->webPermissions());
+ testRunner()->GetWebPermissions());
}
} // namespace content
diff --git a/content/shell/renderer/shell_render_view_observer.cc b/content/shell/renderer/shell_render_view_observer.cc
index 482bb53a3b..3ef6cbf9ee 100644
--- a/content/shell/renderer/shell_render_view_observer.cc
+++ b/content/shell/renderer/shell_render_view_observer.cc
@@ -17,8 +17,8 @@ ShellRenderViewObserver::ShellRenderViewObserver(RenderView* render_view)
: RenderViewObserver(render_view) {
}
-void ShellRenderViewObserver::DidClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) {
+void ShellRenderViewObserver::DidClearWindowObject(
+ blink::WebLocalFrame* frame) {
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kExposeInternalsForTesting)) {
blink::WebTestingSupport::injectInternalsObject(frame);
diff --git a/content/shell/renderer/shell_render_view_observer.h b/content/shell/renderer/shell_render_view_observer.h
index 2d8092c029..f0befb8df1 100644
--- a/content/shell/renderer/shell_render_view_observer.h
+++ b/content/shell/renderer/shell_render_view_observer.h
@@ -23,8 +23,7 @@ class ShellRenderViewObserver : public RenderViewObserver {
private:
// RenderViewObserver implementation.
- virtual void DidClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) OVERRIDE;
+ virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(ShellRenderViewObserver);
};
diff --git a/content/shell/renderer/test_runner/MockColorChooser.cpp b/content/shell/renderer/test_runner/MockColorChooser.cpp
index cd7609bd7b..67ba0f475c 100644
--- a/content/shell/renderer/test_runner/MockColorChooser.cpp
+++ b/content/shell/renderer/test_runner/MockColorChooser.cpp
@@ -5,7 +5,7 @@
#include "content/shell/renderer/test_runner/MockColorChooser.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
using namespace blink;
using namespace std;
@@ -33,12 +33,12 @@ MockColorChooser::MockColorChooser(blink::WebColorChooserClient* client, WebTest
, m_delegate(delegate)
, m_proxy(proxy)
{
- m_proxy->didOpenChooser();
+ m_proxy->DidOpenChooser();
}
MockColorChooser::~MockColorChooser()
{
- m_proxy->didCloseChooser();
+ m_proxy->DidCloseChooser();
}
void MockColorChooser::setSelectedColor(const blink::WebColor)
diff --git a/content/shell/renderer/test_runner/MockColorChooser.h b/content/shell/renderer/test_runner/MockColorChooser.h
index a4a269a99e..c5ca961de3 100644
--- a/content/shell/renderer/test_runner/MockColorChooser.h
+++ b/content/shell/renderer/test_runner/MockColorChooser.h
@@ -26,7 +26,7 @@ public:
virtual void endChooser() OVERRIDE;
void invokeDidEndChooser();
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
blink::WebColorChooserClient* m_client;
diff --git a/content/shell/renderer/test_runner/MockConstraints.cpp b/content/shell/renderer/test_runner/MockConstraints.cpp
deleted file mode 100644
index 7e01872102..0000000000
--- a/content/shell/renderer/test_runner/MockConstraints.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/shell/renderer/test_runner/MockConstraints.h"
-
-#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-
-using namespace blink;
-
-namespace content {
-
-namespace {
-
-bool isSupported(const WebString& constraint)
-{
- return constraint == "valid_and_supported_1" || constraint == "valid_and_supported_2";
-}
-
-bool isValid(const WebString& constraint)
-{
- return isSupported(constraint) || constraint == "valid_but_unsupported_1" || constraint == "valid_but_unsupported_2";
-}
-
-}
-
-bool MockConstraints::verifyConstraints(const WebMediaConstraints& constraints, WebString* failedConstraint)
-{
- WebVector<WebMediaConstraint> mandatoryConstraints;
- constraints.getMandatoryConstraints(mandatoryConstraints);
- if (mandatoryConstraints.size()) {
- for (size_t i = 0; i < mandatoryConstraints.size(); ++i) {
- const WebMediaConstraint& curr = mandatoryConstraints[i];
- if (!isSupported(curr.m_name) || curr.m_value != "1") {
- if (failedConstraint)
- *failedConstraint = curr.m_name;
- return false;
- }
- }
- }
-
- WebVector<WebMediaConstraint> optionalConstraints;
- constraints.getOptionalConstraints(optionalConstraints);
- if (optionalConstraints.size()) {
- for (size_t i = 0; i < optionalConstraints.size(); ++i) {
- const WebMediaConstraint& curr = optionalConstraints[i];
- if (!isValid(curr.m_name) || curr.m_value != "0") {
- if (failedConstraint)
- *failedConstraint = curr.m_name;
- return false;
- }
- }
- }
-
- return true;
-}
-
-} // namespace content
diff --git a/content/shell/renderer/test_runner/MockGrammarCheck.cpp b/content/shell/renderer/test_runner/MockGrammarCheck.cpp
deleted file mode 100644
index 9bf1e32cd2..0000000000
--- a/content/shell/renderer/test_runner/MockGrammarCheck.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/shell/renderer/test_runner/MockGrammarCheck.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "content/shell/renderer/test_runner/TestCommon.h"
-#include "third_party/WebKit/public/platform/WebCString.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/web/WebTextCheckingResult.h"
-
-using namespace blink;
-using namespace std;
-
-namespace content {
-
-bool MockGrammarCheck::checkGrammarOfString(const WebString& text, vector<WebTextCheckingResult>* results)
-{
- DCHECK(results);
- base::string16 stringText = text;
- if (find_if(stringText.begin(), stringText.end(), isASCIIAlpha) == stringText.end())
- return true;
-
- // Find matching grammatical errors from known ones. This function has to
- // check all errors because the given text may consist of two or more
- // sentences that have grammatical errors.
- static const struct {
- const char* text;
- int location;
- int length;
- } grammarErrors[] = {
- {"I have a issue.", 7, 1},
- {"I have an grape.", 7, 2},
- {"I have an kiwi.", 7, 2},
- {"I have an muscat.", 7, 2},
- {"You has the right.", 4, 3},
- {"apple orange zz.", 0, 16},
- {"apple zz orange.", 0, 16},
- {"apple,zz,orange.", 0, 16},
- {"orange,zz,apple.", 0, 16},
- {"the the adlj adaasj sdklj. there there", 4, 3},
- {"the the adlj adaasj sdklj. there there", 33, 5},
- {"zz apple orange.", 0, 16},
- };
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(grammarErrors); ++i) {
- size_t offset = 0;
- base::string16 error(grammarErrors[i].text, grammarErrors[i].text + strlen(grammarErrors[i].text));
- while ((offset = stringText.find(error, offset)) != base::string16::npos) {
- results->push_back(WebTextCheckingResult(WebTextDecorationTypeGrammar, offset + grammarErrors[i].location, grammarErrors[i].length));
- offset += grammarErrors[i].length;
- }
- }
- return false;
-}
-
-} // namespace content
diff --git a/content/shell/renderer/test_runner/MockWebMIDIAccessor.cpp b/content/shell/renderer/test_runner/MockWebMIDIAccessor.cpp
index 940c806932..0854023ed8 100644
--- a/content/shell/renderer/test_runner/MockWebMIDIAccessor.cpp
+++ b/content/shell/renderer/test_runner/MockWebMIDIAccessor.cpp
@@ -6,8 +6,8 @@
#include "content/shell/renderer/test_runner/TestInterfaces.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
#include "content/shell/renderer/test_runner/test_runner.h"
+#include "content/shell/renderer/test_runner/web_test_runner.h"
#include "third_party/WebKit/public/platform/WebMIDIAccessorClient.h"
using namespace blink;
diff --git a/content/shell/renderer/test_runner/MockWebMIDIAccessor.h b/content/shell/renderer/test_runner/MockWebMIDIAccessor.h
index 302c5bfc1c..3fa0a31b11 100644
--- a/content/shell/renderer/test_runner/MockWebMIDIAccessor.h
+++ b/content/shell/renderer/test_runner/MockWebMIDIAccessor.h
@@ -31,7 +31,7 @@ public:
double timestamp) OVERRIDE {}
// WebTask related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
blink::WebMIDIAccessorClient* m_client;
diff --git a/content/shell/renderer/test_runner/MockWebMediaStreamCenter.h b/content/shell/renderer/test_runner/MockWebMediaStreamCenter.h
index 2aee2b8d2b..57e4b2f36b 100644
--- a/content/shell/renderer/test_runner/MockWebMediaStreamCenter.h
+++ b/content/shell/renderer/test_runner/MockWebMediaStreamCenter.h
@@ -36,7 +36,7 @@ public:
const blink::WebMediaStreamTrack&) OVERRIDE;
// Task related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
WebTaskList m_taskList;
diff --git a/content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h b/content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h
index 82425ffa55..d475cb4965 100644
--- a/content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h
+++ b/content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h
@@ -28,7 +28,7 @@ public:
virtual bool insertDTMF(const blink::WebString& tones, long duration, long interToneGap) OVERRIDE;
// WebTask related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
void clearToneBuffer() { m_toneBuffer.reset(); }
private:
diff --git a/content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h b/content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h
index 6d2d604e80..7116616660 100644
--- a/content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h
+++ b/content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h
@@ -35,7 +35,7 @@ public:
virtual void close() OVERRIDE;
// WebTask related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
MockWebRTCDataChannelHandler();
diff --git a/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.cpp b/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.cpp
index 831d2fbcbb..b8bc34e9e0 100644
--- a/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.cpp
+++ b/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.cpp
@@ -4,11 +4,11 @@
#include "content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h"
-#include "content/shell/renderer/test_runner/MockConstraints.h"
#include "content/shell/renderer/test_runner/MockWebRTCDTMFSenderHandler.h"
#include "content/shell/renderer/test_runner/MockWebRTCDataChannelHandler.h"
#include "content/shell/renderer/test_runner/TestInterfaces.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
+#include "content/shell/renderer/test_runner/mock_constraints.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
@@ -159,7 +159,7 @@ MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(WebRTCPeerConne
bool MockWebRTCPeerConnectionHandler::initialize(const WebRTCConfiguration&, const WebMediaConstraints& constraints)
{
- if (MockConstraints::verifyConstraints(constraints)) {
+ if (MockConstraints::VerifyConstraints(constraints)) {
m_interfaces->delegate()->postTask(new RTCPeerConnectionStateTask(this, m_client, WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted, WebRTCPeerConnectionHandlerClient::ICEGatheringStateComplete));
return true;
}
diff --git a/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h b/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h
index 18ccf87fd1..384b45f8cf 100644
--- a/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h
+++ b/content/shell/renderer/test_runner/MockWebRTCPeerConnectionHandler.h
@@ -44,7 +44,7 @@ public:
virtual void stop() OVERRIDE;
// WebTask related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
MockWebRTCPeerConnectionHandler();
diff --git a/content/shell/renderer/test_runner/MockWebSpeechRecognizer.h b/content/shell/renderer/test_runner/MockWebSpeechRecognizer.h
index fa1a60633d..df248efa76 100644
--- a/content/shell/renderer/test_runner/MockWebSpeechRecognizer.h
+++ b/content/shell/renderer/test_runner/MockWebSpeechRecognizer.h
@@ -43,7 +43,7 @@ public:
// Methods accessed from Task objects:
blink::WebSpeechRecognizerClient* client() { return m_client; }
blink::WebSpeechRecognitionHandle& handle() { return m_handle; }
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
class Task {
public:
diff --git a/content/shell/renderer/test_runner/SpellCheckClient.cpp b/content/shell/renderer/test_runner/SpellCheckClient.cpp
index 3e8d47d9cf..fed48838ee 100644
--- a/content/shell/renderer/test_runner/SpellCheckClient.cpp
+++ b/content/shell/renderer/test_runner/SpellCheckClient.cpp
@@ -4,9 +4,9 @@
#include "content/shell/renderer/test_runner/SpellCheckClient.h"
-#include "content/shell/renderer/test_runner/MockGrammarCheck.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
+#include "content/shell/renderer/test_runner/mock_grammar_check.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "third_party/WebKit/public/web/WebTextCheckingCompletion.h"
#include "third_party/WebKit/public/web/WebTextCheckingResult.h"
@@ -76,7 +76,7 @@ void SpellCheckClient::checkTextOfParagraph(const WebString& text, WebTextChecki
}
}
if (mask & WebTextCheckingTypeGrammar)
- MockGrammarCheck::checkGrammarOfString(text, &results);
+ MockGrammarCheck::CheckGrammarOfString(text, &results);
webResults->assign(results);
}
@@ -123,12 +123,12 @@ void SpellCheckClient::finishLastTextCheck()
text = text.substr(misspelledPosition + misspelledLength);
offset += misspelledPosition + misspelledLength;
}
- MockGrammarCheck::checkGrammarOfString(m_lastRequestedTextCheckString, &results);
+ MockGrammarCheck::CheckGrammarOfString(m_lastRequestedTextCheckString, &results);
}
m_lastRequestedTextCheckingCompletion->didFinishCheckingText(results);
m_lastRequestedTextCheckingCompletion = 0;
- m_webTestProxy->postSpellCheckEvent(WebString("finishLastTextCheck"));
+ m_webTestProxy->PostSpellCheckEvent(WebString("finishLastTextCheck"));
}
WebString SpellCheckClient::autoCorrectWord(const WebString&)
diff --git a/content/shell/renderer/test_runner/SpellCheckClient.h b/content/shell/renderer/test_runner/SpellCheckClient.h
index d7efa920d5..36eb8ffde0 100644
--- a/content/shell/renderer/test_runner/SpellCheckClient.h
+++ b/content/shell/renderer/test_runner/SpellCheckClient.h
@@ -22,7 +22,7 @@ public:
void setDelegate(WebTestDelegate*);
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
MockSpellCheck* mockSpellCheck() { return &m_spellcheck; }
// blink::WebSpellCheckClient implementation.
diff --git a/content/shell/renderer/test_runner/TestInterfaces.cpp b/content/shell/renderer/test_runner/TestInterfaces.cpp
index 4c2e00dfee..4d0ca7d326 100644
--- a/content/shell/renderer/test_runner/TestInterfaces.cpp
+++ b/content/shell/renderer/test_runner/TestInterfaces.cpp
@@ -10,12 +10,12 @@
#include "base/command_line.h"
#include "base/strings/stringprintf.h"
#include "content/shell/common/shell_switches.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
#include "content/shell/renderer/test_runner/accessibility_controller.h"
#include "content/shell/renderer/test_runner/event_sender.h"
#include "content/shell/renderer/test_runner/gamepad_controller.h"
#include "content/shell/renderer/test_runner/text_input_controller.h"
#include "content/shell/renderer/test_runner/test_runner.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURL.h"
#include "third_party/WebKit/public/web/WebCache.h"
diff --git a/content/shell/renderer/test_runner/WebFrameTestProxy.h b/content/shell/renderer/test_runner/WebFrameTestProxy.h
deleted file mode 100644
index b9fa40a4de..0000000000
--- a/content/shell/renderer/test_runner/WebFrameTestProxy.h
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBFRAMETESTPROXY_H_
-#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBFRAMETESTPROXY_H_
-
-#include "base/basictypes.h"
-#include "content/shell/renderer/test_runner/test_runner.h"
-#include "content/shell/renderer/test_runner/TestInterfaces.h"
-#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-
-namespace content {
-
-// Templetized wrapper around RenderFrameImpl objects, which implement
-// the WebFrameClient interface.
-template<class Base, typename P, typename R>
-class WebFrameTestProxy : public Base {
-public:
- WebFrameTestProxy(P p, R r)
- : Base(p, r)
- , m_baseProxy(0) { }
-
- virtual ~WebFrameTestProxy() { }
-
- void setBaseProxy(WebTestProxyBase* proxy)
- {
- m_baseProxy = proxy;
- }
-
- blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame, const blink::WebPluginParams& params)
- {
- blink::WebPlugin* plugin = m_baseProxy->createPlugin(frame, params);
- if (plugin)
- return plugin;
- return Base::createPlugin(frame, params);
- }
-
- // WebFrameClient implementation.
- virtual void didAddMessageToConsole(const blink::WebConsoleMessage& message, const blink::WebString& sourceName, unsigned sourceLine, const blink::WebString& stackTrace)
- {
- m_baseProxy->didAddMessageToConsole(message, sourceName, sourceLine);
- Base::didAddMessageToConsole(message, sourceName, sourceLine, stackTrace);
- }
- virtual bool canCreatePluginWithoutRenderer(const blink::WebString& mimeType)
- {
- using blink::WebString;
-
- const CR_DEFINE_STATIC_LOCAL(WebString, suffix, ("-can-create-without-renderer"));
- return mimeType.utf8().find(suffix.utf8()) != std::string::npos;
- }
- virtual void loadURLExternally(blink::WebLocalFrame* frame, const blink::WebURLRequest& request, blink::WebNavigationPolicy policy, const blink::WebString& suggested_name)
- {
- m_baseProxy->loadURLExternally(frame, request, policy, suggested_name);
- Base::loadURLExternally(frame, request, policy, suggested_name);
- }
- virtual void didStartProvisionalLoad(blink::WebLocalFrame* frame)
- {
- m_baseProxy->didStartProvisionalLoad(frame);
- Base::didStartProvisionalLoad(frame);
- }
- virtual void didReceiveServerRedirectForProvisionalLoad(blink::WebLocalFrame* frame)
- {
- m_baseProxy->didReceiveServerRedirectForProvisionalLoad(frame);
- Base::didReceiveServerRedirectForProvisionalLoad(frame);
- }
- virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
- {
- // If the test finished, don't notify the embedder of the failed load,
- // as we already destroyed the document loader.
- if (m_baseProxy->didFailProvisionalLoad(frame, error))
- return;
- Base::didFailProvisionalLoad(frame, error);
- }
- virtual void didCommitProvisionalLoad(blink::WebLocalFrame* frame, const blink::WebHistoryItem& item, blink::WebHistoryCommitType commit_type)
- {
- m_baseProxy->didCommitProvisionalLoad(frame, item, commit_type);
- Base::didCommitProvisionalLoad(frame, item, commit_type);
- }
- virtual void didReceiveTitle(blink::WebLocalFrame* frame, const blink::WebString& title, blink::WebTextDirection direction)
- {
- m_baseProxy->didReceiveTitle(frame, title, direction);
- Base::didReceiveTitle(frame, title, direction);
- }
- virtual void didChangeIcon(blink::WebLocalFrame* frame, blink::WebIconURL::Type iconType)
- {
- m_baseProxy->didChangeIcon(frame, iconType);
- Base::didChangeIcon(frame, iconType);
- }
- virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame)
- {
- m_baseProxy->didFinishDocumentLoad(frame);
- Base::didFinishDocumentLoad(frame);
- }
- virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame)
- {
- m_baseProxy->didHandleOnloadEvents(frame);
- Base::didHandleOnloadEvents(frame);
- }
- virtual void didFailLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
- {
- m_baseProxy->didFailLoad(frame, error);
- Base::didFailLoad(frame, error);
- }
- virtual void didFinishLoad(blink::WebLocalFrame* frame)
- {
- m_baseProxy->didFinishLoad(frame);
- Base::didFinishLoad(frame);
- }
- virtual blink::WebNotificationPresenter* notificationPresenter()
- {
- return m_baseProxy->notificationPresenter();
- }
- virtual void didChangeSelection(bool is_selection_empty) {
- m_baseProxy->didChangeSelection(is_selection_empty);
- Base::didChangeSelection(is_selection_empty);
- }
- virtual blink::WebColorChooser* createColorChooser(
- blink::WebColorChooserClient* client,
- const blink::WebColor& initial_color,
- const blink::WebVector<blink::WebColorSuggestion>& suggestions) {
- return m_baseProxy->createColorChooser(client, initial_color, suggestions);
- }
- virtual void runModalAlertDialog(const blink::WebString& message) {
- m_baseProxy->m_delegate->printMessage(std::string("ALERT: ") + message.utf8().data() + "\n");
- }
- virtual bool runModalConfirmDialog(const blink::WebString& message) {
- m_baseProxy->m_delegate->printMessage(std::string("CONFIRM: ") + message.utf8().data() + "\n");
- return true;
- }
- virtual bool runModalPromptDialog(const blink::WebString& message, const blink::WebString& defaultValue, blink::WebString*) {
- m_baseProxy->m_delegate->printMessage(std::string("PROMPT: ") + message.utf8().data() + ", default text: " + defaultValue.utf8().data() + "\n");
- return true;
- }
- virtual bool runModalBeforeUnloadDialog(bool is_reload, const blink::WebString& message) {
- m_baseProxy->m_delegate->printMessage(std::string("CONFIRM NAVIGATION: ") + message.utf8().data() + "\n");
- return !m_baseProxy->m_testInterfaces->testRunner()->shouldStayOnPageAfterHandlingBeforeUnload();
- }
- virtual void showContextMenu(const blink::WebContextMenuData& contextMenuData) {
- m_baseProxy->showContextMenu(Base::GetWebFrame()->toWebLocalFrame(), contextMenuData);
- Base::showContextMenu(contextMenuData);
- }
- virtual void didDetectXSS(blink::WebLocalFrame* frame, const blink::WebURL& insecureURL, bool didBlockEntirePage)
- {
- // This is not implemented in RenderFrameImpl, so need to explicitly call
- // into the base proxy.
- m_baseProxy->didDetectXSS(frame, insecureURL, didBlockEntirePage);
- Base::didDetectXSS(frame, insecureURL, didBlockEntirePage);
- }
- virtual void didDispatchPingLoader(blink::WebLocalFrame* frame, const blink::WebURL& url)
- {
- // This is not implemented in RenderFrameImpl, so need to explicitly call
- // into the base proxy.
- m_baseProxy->didDispatchPingLoader(frame, url);
- Base::didDispatchPingLoader(frame, url);
- }
- virtual void willRequestResource(blink::WebLocalFrame* frame, const blink::WebCachedURLRequest& request)
- {
- // This is not implemented in RenderFrameImpl, so need to explicitly call
- // into the base proxy.
- m_baseProxy->willRequestResource(frame, request);
- Base::willRequestResource(frame, request);
- }
- virtual void didCreateDataSource(blink::WebLocalFrame* frame, blink::WebDataSource* ds)
- {
- Base::didCreateDataSource(frame, ds);
- }
- virtual void willSendRequest(blink::WebLocalFrame* frame, unsigned identifier, blink::WebURLRequest& request, const blink::WebURLResponse& redirectResponse)
- {
- m_baseProxy->willSendRequest(frame, identifier, request, redirectResponse);
- Base::willSendRequest(frame, identifier, request, redirectResponse);
- }
- virtual void didReceiveResponse(blink::WebLocalFrame* frame, unsigned identifier, const blink::WebURLResponse& response)
- {
- m_baseProxy->didReceiveResponse(frame, identifier, response);
- Base::didReceiveResponse(frame, identifier, response);
- }
- virtual void didChangeResourcePriority(blink::WebLocalFrame* frame, unsigned identifier, const blink::WebURLRequest::Priority& priority, int intra_priority_value)
- {
- // This is not implemented in RenderFrameImpl, so need to explicitly call
- // into the base proxy.
- m_baseProxy->didChangeResourcePriority(frame, identifier, priority, intra_priority_value);
- Base::didChangeResourcePriority(frame, identifier, priority, intra_priority_value);
- }
- virtual void didFinishResourceLoad(blink::WebLocalFrame* frame, unsigned identifier)
- {
- m_baseProxy->didFinishResourceLoad(frame, identifier);
- Base::didFinishResourceLoad(frame, identifier);
- }
- virtual blink::WebNavigationPolicy decidePolicyForNavigation(blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* extraData, const blink::WebURLRequest& request, blink::WebNavigationType type, blink::WebNavigationPolicy defaultPolicy, bool isRedirect)
- {
- blink::WebNavigationPolicy policy = m_baseProxy->decidePolicyForNavigation(frame, extraData, request, type, defaultPolicy, isRedirect);
- if (policy == blink::WebNavigationPolicyIgnore)
- return policy;
-
- return Base::decidePolicyForNavigation(frame, extraData, request, type, defaultPolicy, isRedirect);
- }
- virtual void willStartUsingPeerConnectionHandler(blink::WebLocalFrame* frame, blink::WebRTCPeerConnectionHandler* handler)
- {
- // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
- // See http://crbug/363285.
- }
- virtual blink::WebUserMediaClient* userMediaClient()
- {
- return m_baseProxy->userMediaClient();
- }
- virtual bool willCheckAndDispatchMessageEvent(blink::WebLocalFrame* sourceFrame, blink::WebFrame* targetFrame, blink::WebSecurityOrigin target, blink::WebDOMMessageEvent event)
- {
- if (m_baseProxy->willCheckAndDispatchMessageEvent(sourceFrame, targetFrame, target, event))
- return true;
- return Base::willCheckAndDispatchMessageEvent(sourceFrame, targetFrame, target, event);
- }
- virtual void didStopLoading()
- {
- m_baseProxy->didStopLoading();
- Base::didStopLoading();
- }
-
-private:
- WebTestProxyBase* m_baseProxy;
-
- DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
-};
-
-} // namespace content
-
-#endif // WebTestProxy_h
diff --git a/content/shell/renderer/test_runner/WebTask.h b/content/shell/renderer/test_runner/WebTask.h
index 6c7548bb11..35e5d2d600 100644
--- a/content/shell/renderer/test_runner/WebTask.h
+++ b/content/shell/renderer/test_runner/WebTask.h
@@ -41,12 +41,12 @@ private:
// A task containing an object pointer of class T. Derived classes should
// override runIfValid() which in turn can safely invoke methods on the
-// m_object. The Class T must have "WebTaskList* taskList()".
+// m_object. The Class T must have "WebTaskList* mutable_task_list()".
template<class T>
class WebMethodTask : public WebTask {
public:
explicit WebMethodTask(T* object)
- : WebTask(object->taskList())
+ : WebTask(object->mutable_task_list())
, m_object(object)
{
}
diff --git a/content/shell/renderer/test_runner/WebTestDelegate.h b/content/shell/renderer/test_runner/WebTestDelegate.h
index f63e31b7e9..353d13f95b 100644
--- a/content/shell/renderer/test_runner/WebTestDelegate.h
+++ b/content/shell/renderer/test_runner/WebTestDelegate.h
@@ -56,6 +56,9 @@ public:
// Set orientation to set when registering via Platform::setScreenOrientationListener().
virtual void setScreenOrientation(const blink::WebScreenOrientationType&) = 0;
+ // Reset the screen orientation data used for testing.
+ virtual void resetScreenOrientation() = 0;
+
// Add a message to the text dump for the layout test.
virtual void printMessage(const std::string& message) = 0;
diff --git a/content/shell/renderer/test_runner/WebTestProxy.cpp b/content/shell/renderer/test_runner/WebTestProxy.cpp
deleted file mode 100644
index 1a85a23b24..0000000000
--- a/content/shell/renderer/test_runner/WebTestProxy.cpp
+++ /dev/null
@@ -1,1321 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
-
-#include <cctype>
-
-#include "base/callback_helpers.h"
-#include "base/debug/trace_event.h"
-#include "base/logging.h"
-#include "content/shell/renderer/test_runner/event_sender.h"
-#include "content/shell/renderer/test_runner/MockColorChooser.h"
-#include "content/shell/renderer/test_runner/MockWebSpeechRecognizer.h"
-#include "content/shell/renderer/test_runner/SpellCheckClient.h"
-#include "content/shell/renderer/test_runner/TestCommon.h"
-#include "content/shell/renderer/test_runner/TestInterfaces.h"
-#include "content/shell/renderer/test_runner/TestPlugin.h"
-#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
-#include "content/shell/renderer/test_runner/WebUserMediaClientMock.h"
-#include "content/shell/renderer/test_runner/accessibility_controller.h"
-#include "content/shell/renderer/test_runner/test_runner.h"
-// FIXME: Including platform_canvas.h here is a layering violation.
-#include "skia/ext/platform_canvas.h"
-#include "third_party/WebKit/public/platform/WebCString.h"
-#include "third_party/WebKit/public/platform/WebURLError.h"
-#include "third_party/WebKit/public/platform/WebURLRequest.h"
-#include "third_party/WebKit/public/platform/WebURLResponse.h"
-#include "third_party/WebKit/public/web/WebAXEnums.h"
-#include "third_party/WebKit/public/web/WebAXObject.h"
-#include "third_party/WebKit/public/web/WebCachedURLRequest.h"
-#include "third_party/WebKit/public/web/WebConsoleMessage.h"
-#include "third_party/WebKit/public/web/WebDataSource.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebHistoryItem.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
-#include "third_party/WebKit/public/web/WebMIDIClientMock.h"
-#include "third_party/WebKit/public/web/WebNode.h"
-#include "third_party/WebKit/public/web/WebPluginParams.h"
-#include "third_party/WebKit/public/web/WebPrintParams.h"
-#include "third_party/WebKit/public/web/WebRange.h"
-#include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
-#include "third_party/WebKit/public/web/WebView.h"
-
-using namespace blink;
-using namespace std;
-
-namespace content {
-
-namespace {
-
-class HostMethodTask : public WebMethodTask<WebTestProxyBase> {
-public:
- typedef void (WebTestProxyBase::*CallbackMethodType)();
- HostMethodTask(WebTestProxyBase* object, CallbackMethodType callback)
- : WebMethodTask<WebTestProxyBase>(object)
- , m_callback(callback)
- { }
-
- virtual void runIfValid() OVERRIDE { (m_object->*m_callback)(); }
-
-private:
- CallbackMethodType m_callback;
-};
-
-class ClosureTask : public WebMethodTask<WebTestProxyBase> {
- public:
- ClosureTask(WebTestProxyBase* object, base::Closure callback)
- : WebMethodTask<WebTestProxyBase>(object), m_callback(callback) {}
-
- virtual void runIfValid() OVERRIDE {
- if (!m_callback.is_null())
- m_callback.Run();
- }
-
- private:
- base::Closure m_callback;
-};
-
-void printFrameDescription(WebTestDelegate* delegate, WebFrame* frame)
-{
- string name8 = frame->uniqueName().utf8();
- if (frame == frame->view()->mainFrame()) {
- if (!name8.length()) {
- delegate->printMessage("main frame");
- return;
- }
- delegate->printMessage(string("main frame \"") + name8 + "\"");
- return;
- }
- if (!name8.length()) {
- delegate->printMessage("frame (anonymous)");
- return;
- }
- delegate->printMessage(string("frame \"") + name8 + "\"");
-}
-
-void printFrameUserGestureStatus(WebTestDelegate* delegate, WebFrame* frame, const char* msg)
-{
- bool isUserGesture = WebUserGestureIndicator::isProcessingUserGesture();
- delegate->printMessage(string("Frame with user gesture \"") + (isUserGesture ? "true" : "false") + "\"" + msg);
-}
-
-// Used to write a platform neutral file:/// URL by taking the
-// filename and its directory. (e.g., converts
-// "file:///tmp/foo/bar.txt" to just "bar.txt").
-string descriptionSuitableForTestResult(const string& url)
-{
- if (url.empty() || string::npos == url.find("file://"))
- return url;
-
- size_t pos = url.rfind('/');
- if (pos == string::npos || !pos)
- return "ERROR:" + url;
- pos = url.rfind('/', pos - 1);
- if (pos == string::npos)
- return "ERROR:" + url;
-
- return url.substr(pos + 1);
-}
-
-void printResponseDescription(WebTestDelegate* delegate, const WebURLResponse& response)
-{
- if (response.isNull()) {
- delegate->printMessage("(null)");
- return;
- }
- string url = response.url().spec();
- char data[100];
- snprintf(data, sizeof(data), "%d", response. httpStatusCode());
- delegate->printMessage(string("<NSURLResponse ") + descriptionSuitableForTestResult(url) + ", http status code " + data + ">");
-}
-
-string URLDescription(const GURL& url)
-{
- if (url.SchemeIs("file"))
- return url.ExtractFileName();
- return url.possibly_invalid_spec();
-}
-
-string PriorityDescription(const WebURLRequest::Priority& priority)
-{
- switch (priority) {
- case WebURLRequest::PriorityVeryLow:
- return "VeryLow";
- case WebURLRequest::PriorityLow:
- return "Low";
- case WebURLRequest::PriorityMedium:
- return "Medium";
- case WebURLRequest::PriorityHigh:
- return "High";
- case WebURLRequest::PriorityVeryHigh:
- return "VeryHigh";
- case WebURLRequest::PriorityUnresolved:
- default:
- return "Unresolved";
- }
-}
-
-void blockRequest(WebURLRequest& request)
-{
- request.setURL(GURL("255.255.255.255"));
-}
-
-bool isLocalhost(const string& host)
-{
- return host == "127.0.0.1" || host == "localhost";
-}
-
-bool hostIsUsedBySomeTestsToGenerateError(const string& host)
-{
- return host == "255.255.255.255";
-}
-
-// Used to write a platform neutral file:/// URL by only taking the filename
-// (e.g., converts "file:///tmp/foo.txt" to just "foo.txt").
-string urlSuitableForTestResult(const string& url)
-{
- if (url.empty() || string::npos == url.find("file://"))
- return url;
-
- size_t pos = url.rfind('/');
- if (pos == string::npos) {
-#ifdef WIN32
- pos = url.rfind('\\');
- if (pos == string::npos)
- pos = 0;
-#else
- pos = 0;
-#endif
- }
- string filename = url.substr(pos + 1);
- if (filename.empty())
- return "file:"; // A WebKit test has this in its expected output.
- return filename;
-}
-
-// WebNavigationType debugging strings taken from PolicyDelegate.mm.
-const char* linkClickedString = "link clicked";
-const char* formSubmittedString = "form submitted";
-const char* backForwardString = "back/forward";
-const char* reloadString = "reload";
-const char* formResubmittedString = "form resubmitted";
-const char* otherString = "other";
-const char* illegalString = "illegal value";
-
-// Get a debugging string from a WebNavigationType.
-const char* webNavigationTypeToString(WebNavigationType type)
-{
- switch (type) {
- case blink::WebNavigationTypeLinkClicked:
- return linkClickedString;
- case blink::WebNavigationTypeFormSubmitted:
- return formSubmittedString;
- case blink::WebNavigationTypeBackForward:
- return backForwardString;
- case blink::WebNavigationTypeReload:
- return reloadString;
- case blink::WebNavigationTypeFormResubmitted:
- return formResubmittedString;
- case blink::WebNavigationTypeOther:
- return otherString;
- }
- return illegalString;
-}
-
-string dumpDocumentText(WebFrame* frame)
-{
- // We use the document element's text instead of the body text here because
- // not all documents have a body, such as XML documents.
- WebElement documentElement = frame->document().documentElement();
- if (documentElement.isNull())
- return string();
- return documentElement.innerText().utf8();
-}
-
-string dumpFramesAsText(WebFrame* frame, bool recursive)
-{
- string result;
-
- // Add header for all but the main frame. Skip empty frames.
- if (frame->parent() && !frame->document().documentElement().isNull()) {
- result.append("\n--------\nFrame: '");
- result.append(frame->uniqueName().utf8().data());
- result.append("'\n--------\n");
- }
-
- result.append(dumpDocumentText(frame));
- result.append("\n");
-
- if (recursive) {
- for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling())
- result.append(dumpFramesAsText(child, recursive));
- }
-
- return result;
-}
-
-string dumpFramesAsPrintedText(WebFrame* frame, bool recursive)
-{
- string result;
-
- // Cannot do printed format for anything other than HTML
- if (!frame->document().isHTMLDocument())
- return string();
-
- // Add header for all but the main frame. Skip empty frames.
- if (frame->parent() && !frame->document().documentElement().isNull()) {
- result.append("\n--------\nFrame: '");
- result.append(frame->uniqueName().utf8().data());
- result.append("'\n--------\n");
- }
-
- result.append(frame->renderTreeAsText(WebFrame::RenderAsTextPrinting).utf8());
- result.append("\n");
-
- if (recursive) {
- for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling())
- result.append(dumpFramesAsPrintedText(child, recursive));
- }
-
- return result;
-}
-
-string dumpFrameScrollPosition(WebFrame* frame, bool recursive)
-{
- string result;
- WebSize offset = frame->scrollOffset();
- if (offset.width > 0 || offset.height > 0) {
- if (frame->parent())
- result = string("frame '") + frame->uniqueName().utf8().data() + "' ";
- char data[100];
- snprintf(data, sizeof(data), "scrolled to %d,%d\n", offset.width, offset.height);
- result += data;
- }
-
- if (!recursive)
- return result;
- for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling())
- result += dumpFrameScrollPosition(child, recursive);
- return result;
-}
-
-string dumpAllBackForwardLists(TestInterfaces* interfaces, WebTestDelegate* delegate)
-{
- string result;
- const vector<WebTestProxyBase*>& windowList = interfaces->windowList();
- for (unsigned i = 0; i < windowList.size(); ++i)
- result.append(delegate->dumpHistoryForWindow(windowList.at(i)));
- return result;
-}
-
-}
-
-WebTestProxyBase::WebTestProxyBase()
- : m_testInterfaces(0)
- , m_delegate(0)
- , m_webWidget(0)
- , m_spellcheck(new SpellCheckClient(this))
- , m_chooserCount(0)
-{
- reset();
-}
-
-WebTestProxyBase::~WebTestProxyBase()
-{
- m_testInterfaces->windowClosed(this);
-}
-
-void WebTestProxyBase::setInterfaces(WebTestInterfaces* interfaces)
-{
- m_testInterfaces = interfaces->testInterfaces();
- m_testInterfaces->windowOpened(this);
-}
-
-void WebTestProxyBase::setDelegate(WebTestDelegate* delegate)
-{
- m_delegate = delegate;
- m_spellcheck->setDelegate(delegate);
- if (m_speechRecognizer.get())
- m_speechRecognizer->setDelegate(delegate);
-}
-
-void WebTestProxyBase::setWidget(WebWidget* widget)
-{
- m_webWidget = widget;
-}
-
-WebWidget* WebTestProxyBase::webWidget()
-{
- return m_webWidget;
-}
-
-WebView* WebTestProxyBase::webView()
-{
- DCHECK(m_webWidget);
- // TestRunner does not support popup widgets. So m_webWidget is always a WebView.
- return static_cast<WebView*>(m_webWidget);
-}
-
-void WebTestProxyBase::didForceResize()
-{
- invalidateAll();
- discardBackingStore();
-}
-
-void WebTestProxyBase::reset()
-{
- m_paintRect = WebRect();
- m_canvas.reset();
- m_isPainting = false;
- m_animateScheduled = false;
- m_resourceIdentifierMap.clear();
- m_logConsoleOutput = true;
- if (m_midiClient.get())
- m_midiClient->resetMock();
-}
-
-WebSpellCheckClient* WebTestProxyBase::spellCheckClient() const
-{
- return m_spellcheck.get();
-}
-
-WebColorChooser* WebTestProxyBase::createColorChooser(WebColorChooserClient* client, const blink::WebColor& color, const blink::WebVector<blink::WebColorSuggestion>& suggestions)
-{
- // This instance is deleted by WebCore::ColorInputType
- return new MockColorChooser(client, m_delegate, this);
-}
-
-bool WebTestProxyBase::runFileChooser(const blink::WebFileChooserParams&, blink::WebFileChooserCompletion*)
-{
- m_delegate->printMessage("Mock: Opening a file chooser.\n");
- // FIXME: Add ability to set file names to a file upload control.
- return false;
-}
-
-void WebTestProxyBase::showValidationMessage(const WebRect&, const WebString& message, const WebString& subMessage, WebTextDirection)
-{
- m_delegate->printMessage(std::string("ValidationMessageClient: main-message=") + std::string(message.utf8()) + " sub-message=" + std::string(subMessage.utf8()) + "\n");
-}
-
-void WebTestProxyBase::hideValidationMessage()
-{
-}
-
-void WebTestProxyBase::moveValidationMessage(const WebRect&)
-{
-}
-
-string WebTestProxyBase::captureTree(bool debugRenderTree)
-{
- bool shouldDumpCustomText = m_testInterfaces->testRunner()->shouldDumpAsCustomText();
- bool shouldDumpAsText = m_testInterfaces->testRunner()->shouldDumpAsText();
- bool shouldDumpAsMarkup = m_testInterfaces->testRunner()->shouldDumpAsMarkup();
- bool shouldDumpAsPrinted = m_testInterfaces->testRunner()->isPrinting();
- WebFrame* frame = webView()->mainFrame();
- string dataUtf8;
- if (shouldDumpCustomText) {
- // Append a newline for the test driver.
- dataUtf8 = m_testInterfaces->testRunner()->customDumpText() + "\n";
- } else if (shouldDumpAsText) {
- bool recursive = m_testInterfaces->testRunner()->shouldDumpChildFramesAsText();
- dataUtf8 = shouldDumpAsPrinted ? dumpFramesAsPrintedText(frame, recursive) : dumpFramesAsText(frame, recursive);
- } else if (shouldDumpAsMarkup) {
- // Append a newline for the test driver.
- dataUtf8 = frame->contentAsMarkup().utf8() + "\n";
- } else {
- bool recursive = m_testInterfaces->testRunner()->shouldDumpChildFrameScrollPositions();
- WebFrame::RenderAsTextControls renderTextBehavior = WebFrame::RenderAsTextNormal;
- if (shouldDumpAsPrinted)
- renderTextBehavior |= WebFrame::RenderAsTextPrinting;
- if (debugRenderTree)
- renderTextBehavior |= WebFrame::RenderAsTextDebug;
- dataUtf8 = frame->renderTreeAsText(renderTextBehavior).utf8();
- dataUtf8 += dumpFrameScrollPosition(frame, recursive);
- }
-
- if (m_testInterfaces->testRunner()->shouldDumpBackForwardList())
- dataUtf8 += dumpAllBackForwardLists(m_testInterfaces, m_delegate);
-
- return dataUtf8;
-}
-
-SkCanvas* WebTestProxyBase::capturePixels()
-{
- TRACE_EVENT0("shell", "WebTestProxyBase::capturePixels");
- webWidget()->layout();
- if (m_testInterfaces->testRunner()->isPrinting())
- paintPagesWithBoundaries();
- else
- paintInvalidatedRegion();
-
- DrawSelectionRect(canvas());
-
- return canvas();
-}
-
-void WebTestProxyBase::DrawSelectionRect(SkCanvas* canvas) {
- // See if we need to draw the selection bounds rect. Selection bounds
- // rect is the rect enclosing the (possibly transformed) selection.
- // The rect should be drawn after everything is laid out and painted.
- if (!m_testInterfaces->testRunner()->shouldDumpSelectionRect())
- return;
- // If there is a selection rect - draw a red 1px border enclosing rect
- WebRect wr = webView()->mainFrame()->selectionBoundsRect();
- if (wr.isEmpty())
- return;
- // Render a red rectangle bounding selection rect
- SkPaint paint;
- paint.setColor(0xFFFF0000); // Fully opaque red
- paint.setStyle(SkPaint::kStroke_Style);
- paint.setFlags(SkPaint::kAntiAlias_Flag);
- paint.setStrokeWidth(1.0f);
- SkIRect rect; // Bounding rect
- rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height);
- canvas->drawIRect(rect, paint);
-}
-
-void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) {
- TRACE_EVENT2("shell",
- "WebTestProxyBase::didCompositeAndReadback",
- "x",
- bitmap.info().fWidth,
- "y",
- bitmap.info().fHeight);
- SkCanvas canvas(bitmap);
- DrawSelectionRect(&canvas);
- DCHECK(!m_compositeAndReadbackCallbacks.empty());
- m_compositeAndReadbackCallbacks.front().Run(bitmap);
- m_compositeAndReadbackCallbacks.pop_front();
-}
-
-void WebTestProxyBase::CapturePixelsAsync(
- base::Callback<void(const SkBitmap&)> callback) {
- TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
-
- DCHECK(webWidget()->isAcceleratedCompositingActive());
- DCHECK(!callback.is_null());
- m_compositeAndReadbackCallbacks.push_back(callback);
- webWidget()->compositeAndReadbackAsync(this);
-}
-
-void WebTestProxyBase::setLogConsoleOutput(bool enabled)
-{
- m_logConsoleOutput = enabled;
-}
-
-void WebTestProxyBase::paintRect(const WebRect& rect)
-{
- DCHECK(!m_isPainting);
- DCHECK(canvas());
- m_isPainting = true;
- float deviceScaleFactor = webView()->deviceScaleFactor();
- int scaledX = static_cast<int>(static_cast<float>(rect.x) * deviceScaleFactor);
- int scaledY = static_cast<int>(static_cast<float>(rect.y) * deviceScaleFactor);
- int scaledWidth = static_cast<int>(ceil(static_cast<float>(rect.width) * deviceScaleFactor));
- int scaledHeight = static_cast<int>(ceil(static_cast<float>(rect.height) * deviceScaleFactor));
- WebRect deviceRect(scaledX, scaledY, scaledWidth, scaledHeight);
- webWidget()->paint(canvas(), deviceRect);
- m_isPainting = false;
-}
-
-void WebTestProxyBase::paintInvalidatedRegion()
-{
- webWidget()->animate(0.0);
- webWidget()->layout();
- WebSize widgetSize = webWidget()->size();
- WebRect clientRect(0, 0, widgetSize.width, widgetSize.height);
-
- // Paint the canvas if necessary. Allow painting to generate extra rects
- // for the first two calls. This is necessary because some WebCore rendering
- // objects update their layout only when painted.
- // Store the total area painted in total_paint. Then tell the gdk window
- // to update that area after we're done painting it.
- for (int i = 0; i < 3; ++i) {
- // rect = intersect(m_paintRect , clientRect)
- WebRect damageRect = m_paintRect;
- int left = max(damageRect.x, clientRect.x);
- int top = max(damageRect.y, clientRect.y);
- int right = min(damageRect.x + damageRect.width, clientRect.x + clientRect.width);
- int bottom = min(damageRect.y + damageRect.height, clientRect.y + clientRect.height);
- WebRect rect;
- if (left < right && top < bottom)
- rect = WebRect(left, top, right - left, bottom - top);
-
- m_paintRect = WebRect();
- if (rect.isEmpty())
- continue;
- paintRect(rect);
- }
- DCHECK(m_paintRect.isEmpty());
-}
-
-void WebTestProxyBase::paintPagesWithBoundaries()
-{
- DCHECK(!m_isPainting);
- DCHECK(canvas());
- m_isPainting = true;
-
- WebSize pageSizeInPixels = webWidget()->size();
- WebFrame* webFrame = webView()->mainFrame();
-
- int pageCount = webFrame->printBegin(pageSizeInPixels);
- int totalHeight = pageCount * (pageSizeInPixels.height + 1) - 1;
-
- SkCanvas* testCanvas = skia::TryCreateBitmapCanvas(pageSizeInPixels.width, totalHeight, false);
- if (testCanvas) {
- discardBackingStore();
- m_canvas.reset(testCanvas);
- } else {
- webFrame->printEnd();
- return;
- }
-
- webFrame->printPagesWithBoundaries(canvas(), pageSizeInPixels);
- webFrame->printEnd();
-
- m_isPainting = false;
-}
-
-SkCanvas* WebTestProxyBase::canvas()
-{
- if (m_canvas.get())
- return m_canvas.get();
- WebSize widgetSize = webWidget()->size();
- float deviceScaleFactor = webView()->deviceScaleFactor();
- int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor));
- int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.height) * deviceScaleFactor));
- // We're allocating the canvas to be non-opaque (third parameter), so we
- // don't end up with uninitialized memory if a layout test doesn't damage
- // the entire view.
- m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, false));
- return m_canvas.get();
-}
-
-void WebTestProxyBase::DisplayForSoftwareMode(const base::Closure& callback) {
- const blink::WebSize& size = webWidget()->size();
- WebRect rect(0, 0, size.width, size.height);
- m_paintRect = rect;
- paintInvalidatedRegion();
-
- if (!callback.is_null())
- callback.Run();
-}
-
-void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback,
- const SkBitmap& bitmap) {
- // Verify we actually composited.
- CHECK_NE(0, bitmap.info().fWidth);
- CHECK_NE(0, bitmap.info().fHeight);
- if (!callback.is_null())
- callback.Run();
-}
-
-void WebTestProxyBase::displayAsyncThen(base::Closure callback) {
- TRACE_EVENT0("shell", "WebTestProxyBase::displayAsyncThen");
-
- // TODO(danakj): Remove when we have kForceCompositingMode everywhere.
- if (!webWidget()->isAcceleratedCompositingActive()) {
- TRACE_EVENT0("shell",
- "WebTestProxyBase::displayAsyncThen "
- "isAcceleratedCompositingActive false");
- m_delegate->postTask(
- new ClosureTask(this,
- base::Bind(&WebTestProxyBase::DisplayForSoftwareMode,
- base::Unretained(this),
- callback)));
- return;
- }
-
- CapturePixelsAsync(base::Bind(
- &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback));
-}
-
-void WebTestProxyBase::discardBackingStore()
-{
- m_canvas.reset();
-}
-
-WebMIDIClientMock* WebTestProxyBase::midiClientMock()
-{
- if (!m_midiClient.get())
- m_midiClient.reset(new WebMIDIClientMock);
- return m_midiClient.get();
-}
-
-MockWebSpeechRecognizer* WebTestProxyBase::speechRecognizerMock()
-{
- if (!m_speechRecognizer.get()) {
- m_speechRecognizer.reset(new MockWebSpeechRecognizer());
- m_speechRecognizer->setDelegate(m_delegate);
- }
- return m_speechRecognizer.get();
-}
-
-void WebTestProxyBase::didInvalidateRect(const WebRect& rect)
-{
- // m_paintRect = m_paintRect U rect
- if (rect.isEmpty())
- return;
- if (m_paintRect.isEmpty()) {
- m_paintRect = rect;
- return;
- }
- int left = min(m_paintRect.x, rect.x);
- int top = min(m_paintRect.y, rect.y);
- int right = max(m_paintRect.x + m_paintRect.width, rect.x + rect.width);
- int bottom = max(m_paintRect.y + m_paintRect.height, rect.y + rect.height);
- m_paintRect = WebRect(left, top, right - left, bottom - top);
-}
-
-void WebTestProxyBase::didScrollRect(int, int, const WebRect& clipRect)
-{
- didInvalidateRect(clipRect);
-}
-
-void WebTestProxyBase::invalidateAll()
-{
- m_paintRect = WebRect(0, 0, INT_MAX, INT_MAX);
-}
-
-void WebTestProxyBase::scheduleComposite()
-{
- invalidateAll();
-}
-
-void WebTestProxyBase::scheduleAnimation()
-{
- if (!m_testInterfaces->testRunner()->TestIsRunning())
- return;
-
- if (!m_animateScheduled) {
- m_animateScheduled = true;
- m_delegate->postDelayedTask(new HostMethodTask(this, &WebTestProxyBase::animateNow), 1);
- }
-}
-
-void WebTestProxyBase::animateNow()
-{
- if (m_animateScheduled) {
- m_animateScheduled = false;
- webWidget()->animate(0.0);
- webWidget()->layout();
- }
-}
-
-bool WebTestProxyBase::isCompositorFramePending() const
-{
- return m_animateScheduled || !m_paintRect.isEmpty();
-}
-
-void WebTestProxyBase::show(WebNavigationPolicy)
-{
- invalidateAll();
-}
-
-void WebTestProxyBase::setWindowRect(const WebRect& rect)
-{
- invalidateAll();
- discardBackingStore();
-}
-
-void WebTestProxyBase::didAutoResize(const WebSize&)
-{
- invalidateAll();
-}
-
-void WebTestProxyBase::postAccessibilityEvent(const blink::WebAXObject& obj, blink::WebAXEvent event)
-{
- // Only hook the accessibility events occured during the test run.
- // This check prevents false positives in WebLeakDetector.
- // The pending tasks in browser/renderer message queue may trigger accessibility events,
- // and AccessibilityController will hold on to their target nodes if we don't ignore them here.
- if (!m_testInterfaces->testRunner()->TestIsRunning())
- return;
-
- if (event == blink::WebAXEventFocus)
- m_testInterfaces->accessibilityController()->SetFocusedElement(obj);
-
- const char* eventName = 0;
- switch (event) {
- case blink::WebAXEventActiveDescendantChanged:
- eventName = "ActiveDescendantChanged";
- break;
- case blink::WebAXEventAlert:
- eventName = "Alert";
- break;
- case blink::WebAXEventAriaAttributeChanged:
- eventName = "AriaAttributeChanged";
- break;
- case blink::WebAXEventAutocorrectionOccured:
- eventName = "AutocorrectionOccured";
- break;
- case blink::WebAXEventBlur:
- eventName = "Blur";
- break;
- case blink::WebAXEventCheckedStateChanged:
- eventName = "CheckedStateChanged";
- break;
- case blink::WebAXEventChildrenChanged:
- eventName = "ChildrenChanged";
- break;
- case blink::WebAXEventFocus:
- eventName = "Focus";
- break;
- case blink::WebAXEventHide:
- eventName = "Hide";
- break;
- case blink::WebAXEventInvalidStatusChanged:
- eventName = "InvalidStatusChanged";
- break;
- case blink::WebAXEventLayoutComplete:
- eventName = "LayoutComplete";
- break;
- case blink::WebAXEventLiveRegionChanged:
- eventName = "LiveRegionChanged";
- break;
- case blink::WebAXEventLoadComplete:
- eventName = "LoadComplete";
- break;
- case blink::WebAXEventLocationChanged:
- eventName = "LocationChanged";
- break;
- case blink::WebAXEventMenuListItemSelected:
- eventName = "MenuListItemSelected";
- break;
- case blink::WebAXEventMenuListValueChanged:
- eventName = "MenuListValueChanged";
- break;
- case blink::WebAXEventRowCollapsed:
- eventName = "RowCollapsed";
- break;
- case blink::WebAXEventRowCountChanged:
- eventName = "RowCountChanged";
- break;
- case blink::WebAXEventRowExpanded:
- eventName = "RowExpanded";
- break;
- case blink::WebAXEventScrollPositionChanged:
- eventName = "ScrollPositionChanged";
- break;
- case blink::WebAXEventScrolledToAnchor:
- eventName = "ScrolledToAnchor";
- break;
- case blink::WebAXEventSelectedChildrenChanged:
- eventName = "SelectedChildrenChanged";
- break;
- case blink::WebAXEventSelectedTextChanged:
- eventName = "SelectedTextChanged";
- break;
- case blink::WebAXEventShow:
- eventName = "Show";
- break;
- case blink::WebAXEventTextChanged:
- eventName = "TextChanged";
- break;
- case blink::WebAXEventTextInserted:
- eventName = "TextInserted";
- break;
- case blink::WebAXEventTextRemoved:
- eventName = "TextRemoved";
- break;
- case blink::WebAXEventValueChanged:
- eventName = "ValueChanged";
- break;
- default:
- eventName = "Unknown";
- break;
- }
-
- m_testInterfaces->accessibilityController()->NotificationReceived(obj, eventName);
-
- if (m_testInterfaces->accessibilityController()->ShouldLogAccessibilityEvents()) {
- string message("AccessibilityNotification - ");
- message += eventName;
-
- blink::WebNode node = obj.node();
- if (!node.isNull() && node.isElementNode()) {
- blink::WebElement element = node.to<blink::WebElement>();
- if (element.hasAttribute("id")) {
- message += " - id:";
- message += element.getAttribute("id").utf8().data();
- }
- }
-
- m_delegate->printMessage(message + "\n");
- }
-}
-
-void WebTestProxyBase::startDragging(WebLocalFrame*, const WebDragData& data, WebDragOperationsMask mask, const WebImage&, const WebPoint&)
-{
- // When running a test, we need to fake a drag drop operation otherwise
- // Windows waits for real mouse events to know when the drag is over.
- m_testInterfaces->eventSender()->DoDragDrop(data, mask);
-}
-
-// The output from these methods in layout test mode should match that
-// expected by the layout tests. See EditingDelegate.m in DumpRenderTree.
-
-void WebTestProxyBase::didChangeSelection(bool isEmptySelection)
-{
- if (m_testInterfaces->testRunner()->shouldDumpEditingCallbacks())
- m_delegate->printMessage("EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n");
-}
-
-void WebTestProxyBase::didChangeContents()
-{
- if (m_testInterfaces->testRunner()->shouldDumpEditingCallbacks())
- m_delegate->printMessage("EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n");
-}
-
-bool WebTestProxyBase::createView(WebLocalFrame*, const WebURLRequest& request, const WebWindowFeatures&, const WebString&, WebNavigationPolicy, bool)
-{
- if (!m_testInterfaces->testRunner()->canOpenWindows())
- return false;
- if (m_testInterfaces->testRunner()->shouldDumpCreateView())
- m_delegate->printMessage(string("createView(") + URLDescription(request.url()) + ")\n");
- return true;
-}
-
-WebPlugin* WebTestProxyBase::createPlugin(WebLocalFrame* frame, const WebPluginParams& params)
-{
- if (TestPlugin::isSupportedMimeType(params.mimeType))
- return TestPlugin::create(frame, params, m_delegate);
- return 0;
-}
-
-void WebTestProxyBase::setStatusText(const WebString& text)
-{
- if (!m_testInterfaces->testRunner()->shouldDumpStatusCallbacks())
- return;
- m_delegate->printMessage(string("UI DELEGATE STATUS CALLBACK: setStatusText:") + text.utf8().data() + "\n");
-}
-
-void WebTestProxyBase::didStopLoading()
-{
- if (m_testInterfaces->testRunner()->shouldDumpProgressFinishedCallback())
- m_delegate->printMessage("postProgressFinishedNotification\n");
-}
-
-void WebTestProxyBase::showContextMenu(WebLocalFrame*, const WebContextMenuData& contextMenuData)
-{
- m_testInterfaces->eventSender()->SetContextMenuData(contextMenuData);
-}
-
-WebUserMediaClient* WebTestProxyBase::userMediaClient()
-{
- if (!m_userMediaClient.get())
- m_userMediaClient.reset(new WebUserMediaClientMock(m_delegate));
- return m_userMediaClient.get();
-}
-
-// Simulate a print by going into print mode and then exit straight away.
-void WebTestProxyBase::printPage(WebLocalFrame* frame)
-{
- WebSize pageSizeInPixels = webWidget()->size();
- if (pageSizeInPixels.isEmpty())
- return;
- WebPrintParams printParams(pageSizeInPixels);
- frame->printBegin(printParams);
- frame->printEnd();
-}
-
-WebNotificationPresenter* WebTestProxyBase::notificationPresenter()
-{
- return m_testInterfaces->testRunner()->notification_presenter();
-}
-
-WebMIDIClient* WebTestProxyBase::webMIDIClient()
-{
- return midiClientMock();
-}
-
-WebSpeechRecognizer* WebTestProxyBase::speechRecognizer()
-{
- return speechRecognizerMock();
-}
-
-bool WebTestProxyBase::requestPointerLock()
-{
- return m_testInterfaces->testRunner()->RequestPointerLock();
-}
-
-void WebTestProxyBase::requestPointerUnlock()
-{
- m_testInterfaces->testRunner()->RequestPointerUnlock();
-}
-
-bool WebTestProxyBase::isPointerLocked()
-{
- return m_testInterfaces->testRunner()->isPointerLocked();
-}
-
-void WebTestProxyBase::didFocus()
-{
- m_delegate->setFocus(this, true);
-}
-
-void WebTestProxyBase::didBlur()
-{
- m_delegate->setFocus(this, false);
-}
-
-void WebTestProxyBase::setToolTipText(const WebString& text, WebTextDirection)
-{
- m_testInterfaces->testRunner()->setToolTipText(text);
-}
-
-void WebTestProxyBase::didOpenChooser()
-{
- m_chooserCount++;
-}
-
-void WebTestProxyBase::didCloseChooser()
-{
- m_chooserCount--;
-}
-
-bool WebTestProxyBase::isChooserShown()
-{
- return 0 < m_chooserCount;
-}
-
-void WebTestProxyBase::loadURLExternally(WebLocalFrame* frame, const WebURLRequest& request, WebNavigationPolicy policy, const WebString& suggested_name)
-{
- if (m_testInterfaces->testRunner()->shouldWaitUntilExternalURLLoad()) {
- if (policy == WebNavigationPolicyDownload) {
- m_delegate->printMessage(string("Downloading URL with suggested filename \"") + suggested_name.utf8() + "\"\n");
- } else {
- m_delegate->printMessage(string("Loading URL externally - \"") + URLDescription(request.url()) + "\"\n");
- }
- m_delegate->testFinished();
- }
-}
-
-void WebTestProxyBase::didStartProvisionalLoad(WebLocalFrame* frame)
-{
- if (!m_testInterfaces->testRunner()->topLoadingFrame())
- m_testInterfaces->testRunner()->setTopLoadingFrame(frame, false);
-
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didStartProvisionalLoadForFrame\n");
- }
-
- if (m_testInterfaces->testRunner()->shouldDumpUserGestureInFrameLoadCallbacks())
- printFrameUserGestureStatus(m_delegate, frame, " - in didStartProvisionalLoadForFrame\n");
-}
-
-void WebTestProxyBase::didReceiveServerRedirectForProvisionalLoad(WebLocalFrame* frame)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didReceiveServerRedirectForProvisionalLoadForFrame\n");
- }
-}
-
-bool WebTestProxyBase::didFailProvisionalLoad(WebLocalFrame* frame, const WebURLError&)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didFailProvisionalLoadWithError\n");
- }
- locationChangeDone(frame);
- return !frame->provisionalDataSource();
-}
-
-void WebTestProxyBase::didCommitProvisionalLoad(WebLocalFrame* frame, const WebHistoryItem&, blink::WebHistoryCommitType)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didCommitLoadForFrame\n");
- }
-}
-
-void WebTestProxyBase::didReceiveTitle(WebLocalFrame* frame, const WebString& title, WebTextDirection direction)
-{
- WebCString title8 = title.utf8();
-
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(string(" - didReceiveTitle: ") + title8.data() + "\n");
- }
-
- if (m_testInterfaces->testRunner()->shouldDumpTitleChanges())
- m_delegate->printMessage(string("TITLE CHANGED: '") + title8.data() + "'\n");
-}
-
-void WebTestProxyBase::didChangeIcon(WebLocalFrame* frame, WebIconURL::Type)
-{
- if (m_testInterfaces->testRunner()->shouldDumpIconChanges()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(string(" - didChangeIcons\n"));
- }
-}
-
-void WebTestProxyBase::didFinishDocumentLoad(WebLocalFrame* frame)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didFinishDocumentLoadForFrame\n");
- } else {
- unsigned pendingUnloadEvents = frame->unloadListenerCount();
- if (pendingUnloadEvents) {
- printFrameDescription(m_delegate, frame);
- char buffer[100];
- snprintf(buffer, sizeof(buffer), " - has %u onunload handler(s)\n", pendingUnloadEvents);
- m_delegate->printMessage(buffer);
- }
- }
-}
-
-void WebTestProxyBase::didHandleOnloadEvents(WebLocalFrame* frame)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didHandleOnloadEventsForFrame\n");
- }
-}
-
-void WebTestProxyBase::didFailLoad(WebLocalFrame* frame, const WebURLError&)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didFailLoadWithError\n");
- }
- locationChangeDone(frame);
-}
-
-void WebTestProxyBase::didFinishLoad(WebLocalFrame* frame)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(" - didFinishLoadForFrame\n");
- }
- locationChangeDone(frame);
-}
-
-void WebTestProxyBase::didDetectXSS(WebLocalFrame*, const WebURL&, bool)
-{
- if (m_testInterfaces->testRunner()->shouldDumpFrameLoadCallbacks())
- m_delegate->printMessage("didDetectXSS\n");
-}
-
-void WebTestProxyBase::didDispatchPingLoader(WebLocalFrame*, const WebURL& url)
-{
- if (m_testInterfaces->testRunner()->shouldDumpPingLoaderCallbacks())
- m_delegate->printMessage(string("PingLoader dispatched to '") + URLDescription(url).c_str() + "'.\n");
-}
-
-void WebTestProxyBase::willRequestResource(WebLocalFrame* frame, const blink::WebCachedURLRequest& request)
-{
- if (m_testInterfaces->testRunner()->shouldDumpResourceRequestCallbacks()) {
- printFrameDescription(m_delegate, frame);
- m_delegate->printMessage(string(" - ") + request.initiatorName().utf8().data());
- m_delegate->printMessage(string(" requested '") + URLDescription(request.urlRequest().url()).c_str() + "'\n");
- }
-}
-
-void WebTestProxyBase::willSendRequest(WebLocalFrame*, unsigned identifier, blink::WebURLRequest& request, const blink::WebURLResponse& redirectResponse)
-{
- // Need to use GURL for host() and SchemeIs()
- GURL url = request.url();
- string requestURL = url.possibly_invalid_spec();
-
- GURL mainDocumentURL = request.firstPartyForCookies();
-
- if (redirectResponse.isNull() && (m_testInterfaces->testRunner()->shouldDumpResourceLoadCallbacks() || m_testInterfaces->testRunner()->shouldDumpResourcePriorities())) {
- DCHECK(m_resourceIdentifierMap.find(identifier) == m_resourceIdentifierMap.end());
- m_resourceIdentifierMap[identifier] = descriptionSuitableForTestResult(requestURL);
- }
-
- if (m_testInterfaces->testRunner()->shouldDumpResourceLoadCallbacks()) {
- if (m_resourceIdentifierMap.find(identifier) == m_resourceIdentifierMap.end())
- m_delegate->printMessage("<unknown>");
- else
- m_delegate->printMessage(m_resourceIdentifierMap[identifier]);
- m_delegate->printMessage(" - willSendRequest <NSURLRequest URL ");
- m_delegate->printMessage(descriptionSuitableForTestResult(requestURL).c_str());
- m_delegate->printMessage(", main document URL ");
- m_delegate->printMessage(URLDescription(mainDocumentURL).c_str());
- m_delegate->printMessage(", http method ");
- m_delegate->printMessage(request.httpMethod().utf8().data());
- m_delegate->printMessage("> redirectResponse ");
- printResponseDescription(m_delegate, redirectResponse);
- m_delegate->printMessage("\n");
- }
-
- if (m_testInterfaces->testRunner()->shouldDumpResourcePriorities()) {
- m_delegate->printMessage(descriptionSuitableForTestResult(requestURL).c_str());
- m_delegate->printMessage(" has priority ");
- m_delegate->printMessage(PriorityDescription(request.priority()));
- m_delegate->printMessage("\n");
- }
-
- if (m_testInterfaces->testRunner()->httpHeadersToClear()) {
- const set<string> *clearHeaders = m_testInterfaces->testRunner()->httpHeadersToClear();
- for (set<string>::const_iterator header = clearHeaders->begin(); header != clearHeaders->end(); ++header)
- request.clearHTTPHeaderField(WebString::fromUTF8(*header));
- }
-
- string host = url.host();
- if (!host.empty() && (url.SchemeIs("http") || url.SchemeIs("https"))) {
- if (!isLocalhost(host) && !hostIsUsedBySomeTestsToGenerateError(host)
- && ((!mainDocumentURL.SchemeIs("http") && !mainDocumentURL.SchemeIs("https")) || isLocalhost(mainDocumentURL.host()))
- && !m_delegate->allowExternalPages()) {
- m_delegate->printMessage(string("Blocked access to external URL ") + requestURL + "\n");
- blockRequest(request);
- return;
- }
- }
-
- // Set the new substituted URL.
- request.setURL(m_delegate->rewriteLayoutTestsURL(request.url().spec()));
-}
-
-void WebTestProxyBase::didReceiveResponse(WebLocalFrame*, unsigned identifier, const blink::WebURLResponse& response)
-{
- if (m_testInterfaces->testRunner()->shouldDumpResourceLoadCallbacks()) {
- if (m_resourceIdentifierMap.find(identifier) == m_resourceIdentifierMap.end())
- m_delegate->printMessage("<unknown>");
- else
- m_delegate->printMessage(m_resourceIdentifierMap[identifier]);
- m_delegate->printMessage(" - didReceiveResponse ");
- printResponseDescription(m_delegate, response);
- m_delegate->printMessage("\n");
- }
- if (m_testInterfaces->testRunner()->shouldDumpResourceResponseMIMETypes()) {
- GURL url = response.url();
- WebString mimeType = response.mimeType();
- m_delegate->printMessage(url.ExtractFileName());
- m_delegate->printMessage(" has MIME type ");
- // Simulate NSURLResponse's mapping of empty/unknown MIME types to application/octet-stream
- m_delegate->printMessage(mimeType.isEmpty() ? "application/octet-stream" : mimeType.utf8().data());
- m_delegate->printMessage("\n");
- }
-}
-
-void WebTestProxyBase::didChangeResourcePriority(WebLocalFrame*, unsigned identifier, const blink::WebURLRequest::Priority& priority, int intra_priority_value)
-{
- if (m_testInterfaces->testRunner()->shouldDumpResourcePriorities()) {
- if (m_resourceIdentifierMap.find(identifier) == m_resourceIdentifierMap.end())
- m_delegate->printMessage("<unknown>");
- else
- m_delegate->printMessage(m_resourceIdentifierMap[identifier]);
- m_delegate->printMessage(" changed priority to ");
- m_delegate->printMessage(PriorityDescription(priority));
- char buffer[64];
- snprintf(buffer, sizeof(buffer), ", intra_priority %d", intra_priority_value);
- m_delegate->printMessage(buffer);
- m_delegate->printMessage("\n");
- }
-}
-
-void WebTestProxyBase::didFinishResourceLoad(WebLocalFrame*, unsigned identifier)
-{
- if (m_testInterfaces->testRunner()->shouldDumpResourceLoadCallbacks()) {
- if (m_resourceIdentifierMap.find(identifier) == m_resourceIdentifierMap.end())
- m_delegate->printMessage("<unknown>");
- else
- m_delegate->printMessage(m_resourceIdentifierMap[identifier]);
- m_delegate->printMessage(" - didFinishLoading\n");
- }
- m_resourceIdentifierMap.erase(identifier);
-}
-
-void WebTestProxyBase::didAddMessageToConsole(const WebConsoleMessage& message, const WebString& sourceName, unsigned sourceLine)
-{
- // This matches win DumpRenderTree's UIDelegate.cpp.
- if (!m_logConsoleOutput)
- return;
- string level;
- switch (message.level) {
- case WebConsoleMessage::LevelDebug:
- level = "DEBUG";
- break;
- case WebConsoleMessage::LevelLog:
- level = "MESSAGE";
- break;
- case WebConsoleMessage::LevelInfo:
- level = "INFO";
- break;
- case WebConsoleMessage::LevelWarning:
- level = "WARNING";
- break;
- case WebConsoleMessage::LevelError:
- level = "ERROR";
- break;
- }
- m_delegate->printMessage(string("CONSOLE ") + level + ": ");
- if (sourceLine) {
- char buffer[40];
- snprintf(buffer, sizeof(buffer), "line %d: ", sourceLine);
- m_delegate->printMessage(buffer);
- }
- if (!message.text.isEmpty()) {
- string newMessage;
- newMessage = message.text.utf8();
- size_t fileProtocol = newMessage.find("file://");
- if (fileProtocol != string::npos) {
- newMessage = newMessage.substr(0, fileProtocol)
- + urlSuitableForTestResult(newMessage.substr(fileProtocol));
- }
- m_delegate->printMessage(newMessage);
- }
- m_delegate->printMessage(string("\n"));
-}
-
-void WebTestProxyBase::locationChangeDone(WebFrame* frame)
-{
- if (frame != m_testInterfaces->testRunner()->topLoadingFrame())
- return;
- m_testInterfaces->testRunner()->setTopLoadingFrame(frame, true);
-}
-
-WebNavigationPolicy WebTestProxyBase::decidePolicyForNavigation(WebLocalFrame*, WebDataSource::ExtraData*, const WebURLRequest& request, WebNavigationType type, WebNavigationPolicy defaultPolicy, bool isRedirect)
-{
- WebNavigationPolicy result;
- if (!m_testInterfaces->testRunner()->policyDelegateEnabled())
- return defaultPolicy;
-
- m_delegate->printMessage(string("Policy delegate: attempt to load ") + URLDescription(request.url()) + " with navigation type '" + webNavigationTypeToString(type) + "'\n");
- if (m_testInterfaces->testRunner()->policyDelegateIsPermissive())
- result = blink::WebNavigationPolicyCurrentTab;
- else
- result = blink::WebNavigationPolicyIgnore;
-
- if (m_testInterfaces->testRunner()->policyDelegateShouldNotifyDone())
- m_testInterfaces->testRunner()->policyDelegateDone();
- return result;
-}
-
-bool WebTestProxyBase::willCheckAndDispatchMessageEvent(WebLocalFrame*, WebFrame*, WebSecurityOrigin, WebDOMMessageEvent)
-{
- if (m_testInterfaces->testRunner()->shouldInterceptPostMessage()) {
- m_delegate->printMessage("intercepted postMessage\n");
- return true;
- }
-
- return false;
-}
-
-void WebTestProxyBase::postSpellCheckEvent(const WebString& eventName)
-{
- if (m_testInterfaces->testRunner()->shouldDumpSpellCheckCallbacks()) {
- m_delegate->printMessage(string("SpellCheckEvent: ") + eventName.utf8().data() + "\n");
- }
-}
-
-void WebTestProxyBase::resetInputMethod()
-{
- // If a composition text exists, then we need to let the browser process
- // to cancel the input method's ongoing composition session.
- if (m_webWidget)
- m_webWidget->confirmComposition();
-}
-
-} // namespace content
diff --git a/content/shell/renderer/test_runner/WebTestProxy.h b/content/shell/renderer/test_runner/WebTestProxy.h
deleted file mode 100644
index adff5959a0..0000000000
--- a/content/shell/renderer/test_runner/WebTestProxy.h
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_
-#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_
-
-#include <deque>
-#include <map>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
-#include "content/shell/renderer/test_runner/WebTask.h"
-#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
-#include "third_party/WebKit/public/platform/WebRect.h"
-#include "third_party/WebKit/public/platform/WebURLError.h"
-#include "third_party/WebKit/public/platform/WebURLRequest.h"
-#include "third_party/WebKit/public/web/WebAXEnums.h"
-#include "third_party/WebKit/public/web/WebDOMMessageEvent.h"
-#include "third_party/WebKit/public/web/WebDataSource.h"
-#include "third_party/WebKit/public/web/WebDragOperation.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebHistoryCommitType.h"
-#include "third_party/WebKit/public/web/WebIconURL.h"
-#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
-#include "third_party/WebKit/public/web/WebNavigationType.h"
-#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
-#include "third_party/WebKit/public/web/WebTextAffinity.h"
-#include "third_party/WebKit/public/web/WebTextDirection.h"
-
-class SkCanvas;
-
-namespace blink {
-class WebAXObject;
-class WebAudioDevice;
-class WebCachedURLRequest;
-class WebColorChooser;
-class WebColorChooserClient;
-class WebDataSource;
-class WebDragData;
-class WebFileChooserCompletion;
-class WebFrame;
-class WebImage;
-class WebLocalFrame;
-class WebMIDIAccessor;
-class WebMIDIAccessorClient;
-class WebMIDIClient;
-class WebMIDIClientMock;
-class WebNode;
-class WebNotificationPresenter;
-class WebPlugin;
-class WebRange;
-class WebSerializedScriptValue;
-class WebSpeechRecognizer;
-class WebSpellCheckClient;
-class WebString;
-class WebURL;
-class WebURLResponse;
-class WebUserMediaClient;
-class WebView;
-class WebWidget;
-struct WebColorSuggestion;
-struct WebConsoleMessage;
-struct WebContextMenuData;
-struct WebFileChooserParams;
-struct WebPluginParams;
-struct WebPoint;
-struct WebSize;
-struct WebWindowFeatures;
-typedef unsigned WebColor;
-}
-
-namespace content {
-
-class MockWebSpeechRecognizer;
-class RenderFrame;
-class SpellCheckClient;
-class TestInterfaces;
-class WebTestDelegate;
-class WebTestInterfaces;
-class WebUserMediaClientMock;
-
-class WebTestProxyBase : public blink::WebCompositeAndReadbackAsyncCallback {
-public:
- void setInterfaces(WebTestInterfaces*);
- void setDelegate(WebTestDelegate*);
- void setWidget(blink::WebWidget*);
-
- void reset();
-
- blink::WebSpellCheckClient *spellCheckClient() const;
- blink::WebColorChooser* createColorChooser(blink::WebColorChooserClient*, const blink::WebColor&, const blink::WebVector<blink::WebColorSuggestion>& suggestions);
- bool runFileChooser(const blink::WebFileChooserParams&, blink::WebFileChooserCompletion*);
- void showValidationMessage(const blink::WebRect& anchorInRootView, const blink::WebString& mainText, const blink::WebString& supplementalText, blink::WebTextDirection);
- void hideValidationMessage();
- void moveValidationMessage(const blink::WebRect& anchorInRootView);
-
- std::string captureTree(bool debugRenderTree);
- SkCanvas* capturePixels();
- void CapturePixelsAsync(base::Callback<void(const SkBitmap&)> callback);
-
- void setLogConsoleOutput(bool enabled);
-
- // FIXME: Make this private again.
- void scheduleComposite();
-
- void didOpenChooser();
- void didCloseChooser();
- bool isChooserShown();
-
- void displayAsyncThen(base::Closure callback);
-
- void discardBackingStore();
-
- blink::WebMIDIClientMock* midiClientMock();
- MockWebSpeechRecognizer* speechRecognizerMock();
-
- WebTaskList* taskList() { return &m_taskList; }
-
- blink::WebView* webView();
-
- void didForceResize();
-
- void postSpellCheckEvent(const blink::WebString& eventName);
-
- // WebCompositeAndReadbackAsyncCallback implementation.
- virtual void didCompositeAndReadback(const SkBitmap& bitmap);
-
-protected:
- WebTestProxyBase();
- ~WebTestProxyBase();
-
- void didInvalidateRect(const blink::WebRect&);
- void didScrollRect(int, int, const blink::WebRect&);
- void scheduleAnimation();
- bool isCompositorFramePending() const;
- // FIXME: Remove once we switch to use didForceResize.
- void setWindowRect(const blink::WebRect&);
- void show(blink::WebNavigationPolicy);
- void didAutoResize(const blink::WebSize&);
- void postAccessibilityEvent(const blink::WebAXObject&, blink::WebAXEvent);
- void startDragging(blink::WebLocalFrame*, const blink::WebDragData&, blink::WebDragOperationsMask, const blink::WebImage&, const blink::WebPoint&);
- void didChangeSelection(bool isEmptySelection);
- void didChangeContents();
- void didEndEditing();
- bool createView(blink::WebLocalFrame* creator, const blink::WebURLRequest&, const blink::WebWindowFeatures&, const blink::WebString& frameName, blink::WebNavigationPolicy, bool suppressOpener);
- blink::WebPlugin* createPlugin(blink::WebLocalFrame*, const blink::WebPluginParams&);
- void setStatusText(const blink::WebString&);
- void didStopLoading();
- void showContextMenu(blink::WebLocalFrame*, const blink::WebContextMenuData&);
- blink::WebUserMediaClient* userMediaClient();
- void printPage(blink::WebLocalFrame*);
- blink::WebNotificationPresenter* notificationPresenter();
- blink::WebMIDIClient* webMIDIClient();
- blink::WebSpeechRecognizer* speechRecognizer();
- bool requestPointerLock();
- void requestPointerUnlock();
- bool isPointerLocked();
- void didFocus();
- void didBlur();
- void setToolTipText(const blink::WebString&, blink::WebTextDirection);
- void didAddMessageToConsole(const blink::WebConsoleMessage&, const blink::WebString& sourceName, unsigned sourceLine);
- void loadURLExternally(blink::WebLocalFrame* frame, const blink::WebURLRequest& request, blink::WebNavigationPolicy policy, const blink::WebString& suggested_name);
- void didStartProvisionalLoad(blink::WebLocalFrame*);
- void didReceiveServerRedirectForProvisionalLoad(blink::WebLocalFrame*);
- bool didFailProvisionalLoad(blink::WebLocalFrame*, const blink::WebURLError&);
- void didCommitProvisionalLoad(blink::WebLocalFrame*, const blink::WebHistoryItem&, blink::WebHistoryCommitType);
- void didReceiveTitle(blink::WebLocalFrame*, const blink::WebString& title, blink::WebTextDirection);
- void didChangeIcon(blink::WebLocalFrame*, blink::WebIconURL::Type);
- void didFinishDocumentLoad(blink::WebLocalFrame*);
- void didHandleOnloadEvents(blink::WebLocalFrame*);
- void didFailLoad(blink::WebLocalFrame*, const blink::WebURLError&);
- void didFinishLoad(blink::WebLocalFrame*);
- void didChangeLocationWithinPage(blink::WebLocalFrame*);
- void didDetectXSS(blink::WebLocalFrame*, const blink::WebURL& insecureURL, bool didBlockEntirePage);
- void didDispatchPingLoader(blink::WebLocalFrame*, const blink::WebURL&);
- void willRequestResource(blink::WebLocalFrame*, const blink::WebCachedURLRequest&);
- void willSendRequest(blink::WebLocalFrame*, unsigned identifier, blink::WebURLRequest&, const blink::WebURLResponse& redirectResponse);
- void didReceiveResponse(blink::WebLocalFrame*, unsigned identifier, const blink::WebURLResponse&);
- void didChangeResourcePriority(blink::WebLocalFrame*, unsigned identifier, const blink::WebURLRequest::Priority&, int intra_priority_value);
- void didFinishResourceLoad(blink::WebLocalFrame*, unsigned identifier);
- blink::WebNavigationPolicy decidePolicyForNavigation(blink::WebLocalFrame*, blink::WebDataSource::ExtraData*, const blink::WebURLRequest&, blink::WebNavigationType, blink::WebNavigationPolicy defaultPolicy, bool isRedirect);
- bool willCheckAndDispatchMessageEvent(blink::WebLocalFrame* sourceFrame, blink::WebFrame* targetFrame, blink::WebSecurityOrigin target, blink::WebDOMMessageEvent);
- void resetInputMethod();
-
-private:
- template<class, typename, typename> friend class WebFrameTestProxy;
- void locationChangeDone(blink::WebFrame*);
- void paintRect(const blink::WebRect&);
- void paintInvalidatedRegion();
- void paintPagesWithBoundaries();
- SkCanvas* canvas();
- void invalidateAll();
- void animateNow();
- void DrawSelectionRect(SkCanvas* canvas);
- void DisplayForSoftwareMode(const base::Closure& callback);
- void DidDisplayAsync(const base::Closure& callback, const SkBitmap& bitmap);
-
- blink::WebWidget* webWidget();
-
- TestInterfaces* m_testInterfaces;
- WebTestDelegate* m_delegate;
- blink::WebWidget* m_webWidget;
-
- WebTaskList m_taskList;
-
- scoped_ptr<SpellCheckClient> m_spellcheck;
- scoped_ptr<WebUserMediaClientMock> m_userMediaClient;
-
- // Painting.
- scoped_ptr<SkCanvas> m_canvas;
- blink::WebRect m_paintRect;
- bool m_isPainting;
- bool m_animateScheduled;
- std::map<unsigned, std::string> m_resourceIdentifierMap;
- std::map<unsigned, blink::WebURLRequest> m_requestMap;
- std::deque<base::Callback<void(const SkBitmap&)> >
- m_compositeAndReadbackCallbacks;
-
- bool m_logConsoleOutput;
- int m_chooserCount;
-
- scoped_ptr<blink::WebMIDIClientMock> m_midiClient;
- scoped_ptr<MockWebSpeechRecognizer> m_speechRecognizer;
-
-private:
- DISALLOW_COPY_AND_ASSIGN(WebTestProxyBase);
-};
-
-// Use this template to inject methods into your WebViewClient/WebFrameClient
-// implementation required for the running layout tests.
-template<class Base, typename T>
-class WebTestProxy : public Base, public WebTestProxyBase {
-public:
- explicit WebTestProxy(T t)
- : Base(t)
- {
- }
-
- virtual ~WebTestProxy() { }
-
- // WebViewClient implementation.
- virtual void didInvalidateRect(const blink::WebRect& rect)
- {
- WebTestProxyBase::didInvalidateRect(rect);
- }
- virtual void didScrollRect(int dx, int dy, const blink::WebRect& clipRect)
- {
- WebTestProxyBase::didScrollRect(dx, dy, clipRect);
- }
- virtual void scheduleComposite()
- {
- WebTestProxyBase::scheduleComposite();
- }
- virtual void scheduleAnimation()
- {
- WebTestProxyBase::scheduleAnimation();
- }
- virtual bool isCompositorFramePending() const
- {
- return WebTestProxyBase::isCompositorFramePending();
- }
- virtual void setWindowRect(const blink::WebRect& rect)
- {
- WebTestProxyBase::setWindowRect(rect);
- Base::setWindowRect(rect);
- }
- virtual void show(blink::WebNavigationPolicy policy)
- {
- WebTestProxyBase::show(policy);
- Base::show(policy);
- }
- virtual void didAutoResize(const blink::WebSize& newSize)
- {
- WebTestProxyBase::didAutoResize(newSize);
- Base::didAutoResize(newSize);
- }
- virtual void postAccessibilityEvent(const blink::WebAXObject& object, blink::WebAXEvent event)
- {
- WebTestProxyBase::postAccessibilityEvent(object, event);
- Base::postAccessibilityEvent(object, event);
- }
- virtual void startDragging(blink::WebLocalFrame* frame, const blink::WebDragData& data, blink::WebDragOperationsMask mask, const blink::WebImage& image, const blink::WebPoint& point)
- {
- WebTestProxyBase::startDragging(frame, data, mask, image, point);
- // Don't forward this call to Base because we don't want to do a real drag-and-drop.
- }
- virtual void didChangeContents()
- {
- WebTestProxyBase::didChangeContents();
- Base::didChangeContents();
- }
- virtual blink::WebView* createView(blink::WebLocalFrame* creator, const blink::WebURLRequest& request, const blink::WebWindowFeatures& features, const blink::WebString& frameName, blink::WebNavigationPolicy policy, bool suppressOpener)
- {
- if (!WebTestProxyBase::createView(creator, request, features, frameName, policy, suppressOpener))
- return 0;
- return Base::createView(creator, request, features, frameName, policy, suppressOpener);
- }
- virtual void setStatusText(const blink::WebString& text)
- {
- WebTestProxyBase::setStatusText(text);
- Base::setStatusText(text);
- }
- virtual blink::WebUserMediaClient* userMediaClient()
- {
- return WebTestProxyBase::userMediaClient();
- }
- virtual void printPage(blink::WebLocalFrame* frame)
- {
- WebTestProxyBase::printPage(frame);
- }
- virtual blink::WebMIDIClient* webMIDIClient()
- {
- return WebTestProxyBase::webMIDIClient();
- }
- virtual blink::WebSpeechRecognizer* speechRecognizer()
- {
- return WebTestProxyBase::speechRecognizer();
- }
- virtual bool requestPointerLock()
- {
- return WebTestProxyBase::requestPointerLock();
- }
- virtual void requestPointerUnlock()
- {
- WebTestProxyBase::requestPointerUnlock();
- }
- virtual bool isPointerLocked()
- {
- return WebTestProxyBase::isPointerLocked();
- }
- virtual void didFocus()
- {
- WebTestProxyBase::didFocus();
- Base::didFocus();
- }
- virtual void didBlur()
- {
- WebTestProxyBase::didBlur();
- Base::didBlur();
- }
- virtual void setToolTipText(const blink::WebString& text, blink::WebTextDirection hint)
- {
- WebTestProxyBase::setToolTipText(text, hint);
- Base::setToolTipText(text, hint);
- }
- virtual void resetInputMethod()
- {
- WebTestProxyBase::resetInputMethod();
- }
- virtual bool runFileChooser(const blink::WebFileChooserParams& params, blink::WebFileChooserCompletion* completion)
- {
- return WebTestProxyBase::runFileChooser(params, completion);
- }
- virtual void showValidationMessage(const blink::WebRect& anchorInRootView, const blink::WebString& mainText, const blink::WebString& supplementalText, blink::WebTextDirection hint)
- {
- WebTestProxyBase::showValidationMessage(anchorInRootView, mainText, supplementalText, hint);
- }
- virtual void hideValidationMessage()
- {
- WebTestProxyBase::hideValidationMessage();
- }
- virtual void moveValidationMessage(const blink::WebRect& anchorInRootView)
- {
- WebTestProxyBase::moveValidationMessage(anchorInRootView);
- }
- virtual void postSpellCheckEvent(const blink::WebString& eventName)
- {
- WebTestProxyBase::postSpellCheckEvent(eventName);
- }
-
-private:
- DISALLOW_COPY_AND_ASSIGN(WebTestProxy);
-};
-
-} // namespace content
-
-#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_
diff --git a/content/shell/renderer/test_runner/WebTestRunner.h b/content/shell/renderer/test_runner/WebTestRunner.h
deleted file mode 100644
index 1693946670..0000000000
--- a/content/shell/renderer/test_runner/WebTestRunner.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
-#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
-
-#include <vector>
-
-namespace blink {
-class WebPermissionClient;
-}
-
-namespace content {
-
-class WebTestRunner {
-public:
- // Returns a mock WebPermissionClient that is used for layout tests. An
- // embedder should use this for all WebViews it creates.
- virtual blink::WebPermissionClient* webPermissions() const = 0;
-
- // After WebTestDelegate::testFinished was invoked, the following methods
- // can be used to determine what kind of dump the main WebTestProxy can
- // provide.
-
- // If true, WebTestDelegate::audioData returns an audio dump and no text
- // or pixel results are available.
- virtual bool shouldDumpAsAudio() const = 0;
- virtual void getAudioData(std::vector<unsigned char>* bufferView) const = 0;
-
- // Returns true if the call to WebTestProxy::captureTree will invoke
- // WebTestDelegate::captureHistoryForWindow.
- virtual bool shouldDumpBackForwardList() const = 0;
-
- // Returns true if WebTestProxy::capturePixels should be invoked after
- // capturing text results.
- virtual bool shouldGeneratePixelResults() = 0;
-};
-
-} // namespace content
-
-#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
diff --git a/content/shell/renderer/test_runner/WebUserMediaClientMock.cpp b/content/shell/renderer/test_runner/WebUserMediaClientMock.cpp
index 03d3abe442..014c424e2f 100644
--- a/content/shell/renderer/test_runner/WebUserMediaClientMock.cpp
+++ b/content/shell/renderer/test_runner/WebUserMediaClientMock.cpp
@@ -5,8 +5,8 @@
#include "content/shell/renderer/test_runner/WebUserMediaClientMock.h"
#include "base/logging.h"
-#include "content/shell/renderer/test_runner/MockConstraints.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
+#include "content/shell/renderer/test_runner/mock_constraints.h"
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
@@ -121,12 +121,12 @@ void WebUserMediaClientMock::requestUserMedia(const WebUserMediaRequest& streamR
WebMediaConstraints constraints = request.audioConstraints();
WebString failedConstraint;
- if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints, &failedConstraint)) {
+ if (!constraints.isNull() && !MockConstraints::VerifyConstraints(constraints, &failedConstraint)) {
m_delegate->postTask(new UserMediaRequestConstraintFailedTask(this, request, failedConstraint));
return;
}
constraints = request.videoConstraints();
- if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints, &failedConstraint)) {
+ if (!constraints.isNull() && !MockConstraints::VerifyConstraints(constraints, &failedConstraint)) {
m_delegate->postTask(new UserMediaRequestConstraintFailedTask(this, request, failedConstraint));
return;
}
diff --git a/content/shell/renderer/test_runner/WebUserMediaClientMock.h b/content/shell/renderer/test_runner/WebUserMediaClientMock.h
index 8124e8c2c0..d7237f51c6 100644
--- a/content/shell/renderer/test_runner/WebUserMediaClientMock.h
+++ b/content/shell/renderer/test_runner/WebUserMediaClientMock.h
@@ -27,7 +27,7 @@ public:
virtual void cancelMediaDevicesRequest(const blink::WebMediaDevicesRequest&) OVERRIDE;
// Task related methods
- WebTaskList* taskList() { return &m_taskList; }
+ WebTaskList* mutable_task_list() { return &m_taskList; }
private:
WebTaskList m_taskList;
diff --git a/content/shell/renderer/test_runner/event_sender.cc b/content/shell/renderer/test_runner/event_sender.cc
index ed5b2a66b1..9646019048 100644
--- a/content/shell/renderer/test_runner/event_sender.cc
+++ b/content/shell/renderer/test_runner/event_sender.cc
@@ -11,7 +11,7 @@
#include "content/shell/renderer/test_runner/MockSpellCheck.h"
#include "content/shell/renderer/test_runner/TestInterfaces.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "gin/handle.h"
#include "gin/object_template_builder.h"
#include "gin/wrappable.h"
@@ -357,7 +357,6 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
void AddTouchPoint(gin::Arguments* args);
void MouseDragBegin();
void MouseDragEnd();
- void MouseMomentumBegin();
void GestureScrollBegin(gin::Arguments* args);
void GestureScrollEnd(gin::Arguments* args);
void GestureScrollUpdate(gin::Arguments* args);
@@ -371,7 +370,13 @@ class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
void GestureTwoFingerTap(gin::Arguments* args);
void ContinuousMouseScrollBy(gin::Arguments* args);
void MouseMoveTo(gin::Arguments* args);
+ void TrackpadScrollBegin();
+ void TrackpadScroll(gin::Arguments* args);
+ void TrackpadScrollEnd();
void MouseScrollBy(gin::Arguments* args);
+ // TODO(erikchen): Remove MouseMomentumBegin once CL 282743002 has landed.
+ void MouseMomentumBegin();
+ void MouseMomentumBegin2(gin::Arguments* args);
void MouseMomentumScrollBy(gin::Arguments* args);
void MouseMomentumEnd();
void ScheduleAsynchronousClick(gin::Arguments* args);
@@ -480,7 +485,6 @@ EventSenderBindings::GetObjectTemplateBuilder(v8::Isolate* isolate) {
.SetMethod("addTouchPoint", &EventSenderBindings::AddTouchPoint)
.SetMethod("mouseDragBegin", &EventSenderBindings::MouseDragBegin)
.SetMethod("mouseDragEnd", &EventSenderBindings::MouseDragEnd)
- .SetMethod("mouseMomentumBegin", &EventSenderBindings::MouseMomentumBegin)
.SetMethod("gestureScrollBegin", &EventSenderBindings::GestureScrollBegin)
.SetMethod("gestureScrollEnd", &EventSenderBindings::GestureScrollEnd)
.SetMethod("gestureScrollUpdate",
@@ -500,8 +504,15 @@ EventSenderBindings::GetObjectTemplateBuilder(v8::Isolate* isolate) {
.SetMethod("keyDown", &EventSenderBindings::KeyDown)
.SetMethod("mouseDown", &EventSenderBindings::MouseDown)
.SetMethod("mouseMoveTo", &EventSenderBindings::MouseMoveTo)
+ .SetMethod("trackpadScrollBegin",
+ &EventSenderBindings::TrackpadScrollBegin)
+ .SetMethod("trackpadScroll", &EventSenderBindings::TrackpadScroll)
+ .SetMethod("trackpadScrollEnd", &EventSenderBindings::TrackpadScrollEnd)
.SetMethod("mouseScrollBy", &EventSenderBindings::MouseScrollBy)
.SetMethod("mouseUp", &EventSenderBindings::MouseUp)
+ .SetMethod("mouseMomentumBegin", &EventSenderBindings::MouseMomentumBegin)
+ .SetMethod("mouseMomentumBegin2",
+ &EventSenderBindings::MouseMomentumBegin2)
.SetMethod("mouseMomentumScrollBy",
&EventSenderBindings::MouseMomentumScrollBy)
.SetMethod("mouseMomentumEnd", &EventSenderBindings::MouseMomentumEnd)
@@ -710,11 +721,6 @@ void EventSenderBindings::MouseDragEnd() {
sender_->MouseDragEnd();
}
-void EventSenderBindings::MouseMomentumBegin() {
- if (sender_)
- sender_->MouseMomentumBegin();
-}
-
void EventSenderBindings::GestureScrollBegin(gin::Arguments* args) {
if (sender_)
sender_->GestureScrollBegin(args);
@@ -781,11 +787,36 @@ void EventSenderBindings::MouseMoveTo(gin::Arguments* args) {
sender_->MouseMoveTo(args);
}
+void EventSenderBindings::TrackpadScrollBegin() {
+ if (sender_)
+ sender_->TrackpadScrollBegin();
+}
+
+void EventSenderBindings::TrackpadScroll(gin::Arguments* args) {
+ if (sender_)
+ sender_->TrackpadScroll(args);
+}
+
+void EventSenderBindings::TrackpadScrollEnd() {
+ if (sender_)
+ sender_->TrackpadScrollEnd();
+}
+
void EventSenderBindings::MouseScrollBy(gin::Arguments* args) {
if (sender_)
sender_->MouseScrollBy(args);
}
+void EventSenderBindings::MouseMomentumBegin() {
+ if (sender_)
+ sender_->MouseMomentumBegin();
+}
+
+void EventSenderBindings::MouseMomentumBegin2(gin::Arguments* args) {
+ if (sender_)
+ sender_->MouseMomentumBegin2(args);
+}
+
void EventSenderBindings::MouseMomentumScrollBy(gin::Arguments* args) {
if (sender_)
sender_->MouseMomentumScrollBy(args);
@@ -1378,8 +1409,8 @@ void EventSender::ZoomPageIn() {
const std::vector<WebTestProxyBase*>& window_list = interfaces_->windowList();
for (size_t i = 0; i < window_list.size(); ++i) {
- window_list.at(i)->webView()->setZoomLevel(
- window_list.at(i)->webView()->zoomLevel() + 1);
+ window_list.at(i)->GetWebView()->setZoomLevel(
+ window_list.at(i)->GetWebView()->zoomLevel() + 1);
}
}
@@ -1387,8 +1418,8 @@ void EventSender::ZoomPageOut() {
const std::vector<WebTestProxyBase*>& window_list = interfaces_->windowList();
for (size_t i = 0; i < window_list.size(); ++i) {
- window_list.at(i)->webView()->setZoomLevel(
- window_list.at(i)->webView()->zoomLevel() - 1);
+ window_list.at(i)->GetWebView()->setZoomLevel(
+ window_list.at(i)->GetWebView()->zoomLevel() - 1);
}
}
@@ -1396,7 +1427,7 @@ void EventSender::SetPageZoomFactor(double zoom_factor) {
const std::vector<WebTestProxyBase*>& window_list = interfaces_->windowList();
for (size_t i = 0; i < window_list.size(); ++i) {
- window_list.at(i)->webView()->setZoomLevel(
+ window_list.at(i)->GetWebView()->setZoomLevel(
ZoomFactorToZoomLevel(zoom_factor));
}
}
@@ -1644,20 +1675,6 @@ void EventSender::MouseDragEnd() {
view_->handleInputEvent(event);
}
-void EventSender::MouseMomentumBegin() {
- WebMouseWheelEvent event;
- InitMouseEvent(WebInputEvent::MouseWheel,
- WebMouseEvent::ButtonNone,
- last_mouse_pos_,
- GetCurrentEventTimeSec(),
- click_count_,
- 0,
- &event);
- event.momentumPhase = WebMouseWheelEvent::PhaseBegan;
- event.hasPreciseScrollingDeltas = true;
- view_->handleInputEvent(event);
-}
-
void EventSender::GestureScrollBegin(gin::Arguments* args) {
GestureEvent(WebInputEvent::GestureScrollBegin, args);
}
@@ -1742,12 +1759,70 @@ void EventSender::MouseMoveTo(gin::Arguments* args) {
}
}
+void EventSender::TrackpadScrollBegin() {
+ WebMouseWheelEvent event;
+ InitMouseEvent(WebInputEvent::MouseWheel,
+ WebMouseEvent::ButtonNone,
+ last_mouse_pos_,
+ GetCurrentEventTimeSec(),
+ click_count_,
+ 0,
+ &event);
+ event.phase = blink::WebMouseWheelEvent::PhaseBegan;
+ event.hasPreciseScrollingDeltas = true;
+ view_->handleInputEvent(event);
+}
+
+void EventSender::TrackpadScroll(gin::Arguments* args) {
+ WebMouseWheelEvent event;
+ InitMouseWheelEvent(args, true, &event);
+ event.phase = blink::WebMouseWheelEvent::PhaseChanged;
+ event.hasPreciseScrollingDeltas = true;
+ view_->handleInputEvent(event);
+}
+
+void EventSender::TrackpadScrollEnd() {
+ WebMouseWheelEvent event;
+ InitMouseEvent(WebInputEvent::MouseWheel,
+ WebMouseEvent::ButtonNone,
+ last_mouse_pos_,
+ GetCurrentEventTimeSec(),
+ click_count_,
+ 0,
+ &event);
+ event.phase = WebMouseWheelEvent::PhaseEnded;
+ event.hasPreciseScrollingDeltas = true;
+ view_->handleInputEvent(event);
+}
+
void EventSender::MouseScrollBy(gin::Arguments* args) {
WebMouseWheelEvent event;
InitMouseWheelEvent(args, false, &event);
view_->handleInputEvent(event);
}
+void EventSender::MouseMomentumBegin() {
+ WebMouseWheelEvent event;
+ InitMouseEvent(WebInputEvent::MouseWheel,
+ WebMouseEvent::ButtonNone,
+ last_mouse_pos_,
+ GetCurrentEventTimeSec(),
+ click_count_,
+ 0,
+ &event);
+ event.momentumPhase = WebMouseWheelEvent::PhaseBegan;
+ event.hasPreciseScrollingDeltas = true;
+ view_->handleInputEvent(event);
+}
+
+void EventSender::MouseMomentumBegin2(gin::Arguments* args) {
+ WebMouseWheelEvent event;
+ InitMouseWheelEvent(args, true, &event);
+ event.momentumPhase = WebMouseWheelEvent::PhaseBegan;
+ event.hasPreciseScrollingDeltas = true;
+ view_->handleInputEvent(event);
+}
+
void EventSender::MouseMomentumScrollBy(gin::Arguments* args) {
WebMouseWheelEvent event;
InitMouseWheelEvent(args, true, &event);
diff --git a/content/shell/renderer/test_runner/event_sender.h b/content/shell/renderer/test_runner/event_sender.h
index 3b2c7efc3a..0828f5911f 100644
--- a/content/shell/renderer/test_runner/event_sender.h
+++ b/content/shell/renderer/test_runner/event_sender.h
@@ -64,7 +64,7 @@ class EventSender : public base::SupportsWeakPtr<EventSender> {
int modifiers,
KeyLocationCode location);
- WebTaskList* taskList() { return &task_list_; }
+ WebTaskList* mutable_task_list() { return &task_list_; }
private:
friend class EventSenderBindings;
@@ -128,7 +128,6 @@ class EventSender : public base::SupportsWeakPtr<EventSender> {
void MouseDragBegin();
void MouseDragEnd();
- void MouseMomentumBegin();
void GestureScrollBegin(gin::Arguments* args);
void GestureScrollEnd(gin::Arguments* args);
@@ -144,7 +143,12 @@ class EventSender : public base::SupportsWeakPtr<EventSender> {
void ContinuousMouseScrollBy(gin::Arguments* args);
void MouseMoveTo(gin::Arguments* args);
+ void TrackpadScrollBegin();
+ void TrackpadScroll(gin::Arguments* args);
+ void TrackpadScrollEnd();
void MouseScrollBy(gin::Arguments* args);
+ void MouseMomentumBegin();
+ void MouseMomentumBegin2(gin::Arguments* args);
void MouseMomentumScrollBy(gin::Arguments* args);
void MouseMomentumEnd();
void ScheduleAsynchronousClick(int button_number, int modifiers);
diff --git a/content/shell/renderer/test_runner/mock_constraints.cc b/content/shell/renderer/test_runner/mock_constraints.cc
new file mode 100644
index 0000000000..b33bfdbf0a
--- /dev/null
+++ b/content/shell/renderer/test_runner/mock_constraints.cc
@@ -0,0 +1,62 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/shell/renderer/test_runner/mock_constraints.h"
+
+#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+
+using blink::WebMediaConstraint;
+using blink::WebMediaConstraints;
+using blink::WebString;
+using blink::WebVector;
+
+namespace content {
+
+namespace {
+
+bool IsSupported(const WebString& constraint) {
+ return constraint == "valid_and_supported_1" ||
+ constraint == "valid_and_supported_2";
+}
+
+bool IsValid(const WebString& constraint) {
+ return IsSupported(constraint) || constraint == "valid_but_unsupported_1" ||
+ constraint == "valid_but_unsupported_2";
+}
+
+} // namespace
+
+bool MockConstraints::VerifyConstraints(const WebMediaConstraints& constraints,
+ WebString* failed_constraint) {
+ WebVector<WebMediaConstraint> mandatory_constraints;
+ constraints.getMandatoryConstraints(mandatory_constraints);
+ if (mandatory_constraints.size()) {
+ for (size_t i = 0; i < mandatory_constraints.size(); ++i) {
+ const WebMediaConstraint& curr = mandatory_constraints[i];
+ if (!IsSupported(curr.m_name) || curr.m_value != "1") {
+ if (failed_constraint)
+ *failed_constraint = curr.m_name;
+ return false;
+ }
+ }
+ }
+
+ WebVector<WebMediaConstraint> optional_constraints;
+ constraints.getOptionalConstraints(optional_constraints);
+ if (optional_constraints.size()) {
+ for (size_t i = 0; i < optional_constraints.size(); ++i) {
+ const WebMediaConstraint& curr = optional_constraints[i];
+ if (!IsValid(curr.m_name) || curr.m_value != "0") {
+ if (failed_constraint)
+ *failed_constraint = curr.m_name;
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+} // namespace content
diff --git a/content/shell/renderer/test_runner/MockConstraints.h b/content/shell/renderer/test_runner/mock_constraints.h
index 6bcedad10f..c9e2e2a327 100644
--- a/content/shell/renderer/test_runner/MockConstraints.h
+++ b/content/shell/renderer/test_runner/mock_constraints.h
@@ -13,10 +13,11 @@ class WebString;
namespace content {
class MockConstraints {
-public:
- static bool verifyConstraints(const blink::WebMediaConstraints&, blink::WebString* failedConstraint = 0);
+ public:
+ static bool VerifyConstraints(const blink::WebMediaConstraints& constraints,
+ blink::WebString* failed_constraint = 0);
};
-} // content
+} // namespace content
#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCKCONSTRAINTS_H_
diff --git a/content/shell/renderer/test_runner/mock_grammar_check.cc b/content/shell/renderer/test_runner/mock_grammar_check.cc
new file mode 100644
index 0000000000..7cee706fc4
--- /dev/null
+++ b/content/shell/renderer/test_runner/mock_grammar_check.cc
@@ -0,0 +1,63 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/shell/renderer/test_runner/mock_grammar_check.h"
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "content/shell/renderer/test_runner/TestCommon.h"
+#include "third_party/WebKit/public/platform/WebCString.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/web/WebTextCheckingResult.h"
+
+namespace content {
+
+bool MockGrammarCheck::CheckGrammarOfString(
+ const blink::WebString& text,
+ std::vector<blink::WebTextCheckingResult>* results) {
+ DCHECK(results);
+ base::string16 string_text = text;
+ if (std::find_if(string_text.begin(), string_text.end(), isASCIIAlpha) ==
+ string_text.end())
+ return true;
+
+ // Find matching grammatical errors from known ones. This function has to
+ // check all errors because the given text may consist of two or more
+ // sentences that have grammatical errors.
+ static const struct {
+ const char* text;
+ int location;
+ int length;
+ } kGrammarErrors[] = {
+ {"I have a issue.", 7, 1},
+ {"I have an grape.", 7, 2},
+ {"I have an kiwi.", 7, 2},
+ {"I have an muscat.", 7, 2},
+ {"You has the right.", 4, 3},
+ {"apple orange zz.", 0, 16},
+ {"apple zz orange.", 0, 16},
+ {"apple,zz,orange.", 0, 16},
+ {"orange,zz,apple.", 0, 16},
+ {"the the adlj adaasj sdklj. there there", 4, 3},
+ {"the the adlj adaasj sdklj. there there", 33, 5},
+ {"zz apple orange.", 0, 16},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kGrammarErrors); ++i) {
+ size_t offset = 0;
+ base::string16 error(
+ kGrammarErrors[i].text,
+ kGrammarErrors[i].text + strlen(kGrammarErrors[i].text));
+ while ((offset = string_text.find(error, offset)) != base::string16::npos) {
+ results->push_back(
+ blink::WebTextCheckingResult(blink::WebTextDecorationTypeGrammar,
+ offset + kGrammarErrors[i].location,
+ kGrammarErrors[i].length));
+ offset += kGrammarErrors[i].length;
+ }
+ }
+ return false;
+}
+
+} // namespace content
diff --git a/content/shell/renderer/test_runner/MockGrammarCheck.h b/content/shell/renderer/test_runner/mock_grammar_check.h
index 9b0d4afb68..5bbd778ab2 100644
--- a/content/shell/renderer/test_runner/MockGrammarCheck.h
+++ b/content/shell/renderer/test_runner/mock_grammar_check.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCKGRAMMARCHECK_H_
-#define CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCKGRAMMARCHECK_H_
+#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_GRAMMAR_CHECK_H_
+#define CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_GRAMMAR_CHECK_H_
#include <vector>
@@ -20,10 +20,11 @@ namespace content {
// webkit tests and adds grammar markers on them. Even though this is sufficent
// for webkit tests, this class is not suitable for any other usages.
class MockGrammarCheck {
-public:
- static bool checkGrammarOfString(const blink::WebString&, std::vector<blink::WebTextCheckingResult>*);
+ public:
+ static bool CheckGrammarOfString(const blink::WebString&,
+ std::vector<blink::WebTextCheckingResult>*);
};
} // namespace content
-#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCKGRAMMARCHECK_H_
+#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_MOCK_GRAMMAR_CHECK_H_
diff --git a/content/shell/renderer/test_runner/test_runner.cc b/content/shell/renderer/test_runner/test_runner.cc
index 6b0e681314..dca6cdd060 100644
--- a/content/shell/renderer/test_runner/test_runner.cc
+++ b/content/shell/renderer/test_runner/test_runner.cc
@@ -12,8 +12,8 @@
#include "content/shell/renderer/test_runner/TestInterfaces.h"
#include "content/shell/renderer/test_runner/WebPermissions.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
#include "content/shell/renderer/test_runner/notification_presenter.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "gin/arguments.h"
#include "gin/array_buffer.h"
#include "gin/handle.h"
@@ -119,6 +119,7 @@ class TestRunnerBindings : public gin::Wrappable<TestRunnerBindings> {
virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) OVERRIDE;
+ void LogToStderr(const std::string& output);
void NotifyDone();
void WaitUntilDone();
void QueueBackNavigation(int how_far_back);
@@ -183,6 +184,7 @@ class TestRunnerBindings : public gin::Wrappable<TestRunnerBindings> {
void SetAllowUniversalAccessFromFileURLs(bool allow);
void SetAllowFileAccessFromFileURLs(bool allow);
void OverridePreference(const std::string key, v8::Handle<v8::Value> value);
+ void SetAcceptLanguages(const std::string& accept_languages);
void SetPluginsEnabled(bool enabled);
void DumpEditingCallbacks();
void DumpAsText();
@@ -295,6 +297,7 @@ gin::ObjectTemplateBuilder TestRunnerBindings::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<TestRunnerBindings>::GetObjectTemplateBuilder(isolate)
// Methods controlling test execution.
+ .SetMethod("logToStderr", &TestRunnerBindings::LogToStderr)
.SetMethod("notifyDone", &TestRunnerBindings::NotifyDone)
.SetMethod("waitUntilDone", &TestRunnerBindings::WaitUntilDone)
.SetMethod("queueBackNavigation",
@@ -381,6 +384,7 @@ gin::ObjectTemplateBuilder TestRunnerBindings::GetObjectTemplateBuilder(
.SetMethod("setAllowFileAccessFromFileURLs",
&TestRunnerBindings::SetAllowFileAccessFromFileURLs)
.SetMethod("overridePreference", &TestRunnerBindings::OverridePreference)
+ .SetMethod("setAcceptLanguages", &TestRunnerBindings::SetAcceptLanguages)
.SetMethod("setPluginsEnabled", &TestRunnerBindings::SetPluginsEnabled)
.SetMethod("dumpEditingCallbacks",
&TestRunnerBindings::DumpEditingCallbacks)
@@ -528,6 +532,10 @@ gin::ObjectTemplateBuilder TestRunnerBindings::GetObjectTemplateBuilder(
&TestRunnerBindings::DumpWindowStatusChanges);
}
+void TestRunnerBindings::LogToStderr(const std::string& output) {
+ LOG(ERROR) << output;
+}
+
void TestRunnerBindings::NotifyDone() {
if (runner_)
runner_->NotifyDone();
@@ -914,6 +922,14 @@ void TestRunnerBindings::OverridePreference(const std::string key,
runner_->OverridePreference(key, value);
}
+void TestRunnerBindings::SetAcceptLanguages(
+ const std::string& accept_languages) {
+ if (!runner_)
+ return;
+
+ runner_->SetAcceptLanguages(accept_languages);
+}
+
void TestRunnerBindings::SetPluginsEnabled(bool enabled) {
if (runner_)
runner_->SetPluginsEnabled(enabled);
@@ -1430,6 +1446,7 @@ void TestRunner::Reset() {
delegate_->useUnfortunateSynchronousResizeMode(false);
delegate_->disableAutoResizeMode(WebSize());
delegate_->deleteAllCookies();
+ delegate_->resetScreenOrientation();
}
dump_editting_callbacks_ = false;
@@ -1530,7 +1547,7 @@ void TestRunner::setCustomTextOutput(std::string text) {
has_custom_text_output_ = true;
}
-bool TestRunner::shouldGeneratePixelResults() {
+bool TestRunner::ShouldGeneratePixelResults() {
CheckResponseMimeType();
return generate_pixel_results_;
}
@@ -1547,12 +1564,12 @@ bool TestRunner::shouldDumpChildFramesAsText() const {
return dump_child_frames_as_text_;
}
-bool TestRunner::shouldDumpAsAudio() const {
+bool TestRunner::ShouldDumpAsAudio() const {
return dump_as_audio_;
}
-void TestRunner::getAudioData(std::vector<unsigned char>* bufferView) const {
- *bufferView = audio_data_;
+void TestRunner::GetAudioData(std::vector<unsigned char>* buffer_view) const {
+ *buffer_view = audio_data_;
}
bool TestRunner::shouldDumpFrameLoadCallbacks() const {
@@ -1607,7 +1624,7 @@ bool TestRunner::shouldDumpResourceResponseMIMETypes() const {
return test_is_running_ && dump_resource_reqponse_mime_types_;
}
-WebPermissionClient* TestRunner::webPermissions() const {
+WebPermissionClient* TestRunner::GetWebPermissions() const {
return web_permissions_.get();
}
@@ -1623,7 +1640,7 @@ bool TestRunner::shouldDumpSpellCheckCallbacks() const {
return dump_spell_check_callbacks_;
}
-bool TestRunner::shouldDumpBackForwardList() const {
+bool TestRunner::ShouldDumpBackForwardList() const {
return dump_back_forward_list_;
}
@@ -1757,7 +1774,7 @@ void TestRunner::NotifyDone() {
return;
// Test didn't timeout. Kill the timeout timer.
- taskList()->revokeAll();
+ task_list_.revokeAll();
CompleteNotifyDone();
}
@@ -2315,6 +2332,10 @@ void TestRunner::OverridePreference(const std::string key,
delegate_->applyPreferences();
}
+void TestRunner::SetAcceptLanguages(const std::string& accept_languages) {
+ proxy_->SetAcceptLanguages(accept_languages);
+}
+
void TestRunner::SetPluginsEnabled(bool enabled) {
delegate_->preferences()->plugins_enabled = enabled;
delegate_->applyPreferences();
@@ -2472,7 +2493,7 @@ void TestRunner::CloseWebInspector() {
}
bool TestRunner::IsChooserShown() {
- return proxy_->isChooserShown();
+ return proxy_->IsChooserShown();
}
void TestRunner::EvaluateInWebInspector(int call_id,
@@ -2503,7 +2524,6 @@ std::string TestRunner::PathToLocalResource(const std::string& path) {
void TestRunner::SetBackingScaleFactor(double value,
v8::Handle<v8::Function> callback) {
delegate_->setDeviceScaleFactor(value);
- proxy_->discardBackingStore();
delegate_->postTask(new InvokeCallbackTask(this, callback));
}
@@ -2525,7 +2545,7 @@ void TestRunner::SetMIDISysexPermission(bool value) {
const std::vector<WebTestProxyBase*>& windowList =
test_interfaces_->windowList();
for (unsigned i = 0; i < windowList.size(); ++i)
- windowList.at(i)->midiClientMock()->setSysexPermission(value);
+ windowList.at(i)->GetMIDIClientMock()->setSysexPermission(value);
}
void TestRunner::GrantWebNotificationPermission(const std::string& origin,
@@ -2539,18 +2559,18 @@ bool TestRunner::SimulateWebNotificationClick(const std::string& value) {
void TestRunner::AddMockSpeechRecognitionResult(const std::string& transcript,
double confidence) {
- proxy_->speechRecognizerMock()->addMockResult(
+ proxy_->GetSpeechRecognizerMock()->addMockResult(
WebString::fromUTF8(transcript), confidence);
}
void TestRunner::SetMockSpeechRecognitionError(const std::string& error,
const std::string& message) {
- proxy_->speechRecognizerMock()->setError(WebString::fromUTF8(error),
+ proxy_->GetSpeechRecognizerMock()->setError(WebString::fromUTF8(error),
WebString::fromUTF8(message));
}
bool TestRunner::WasMockSpeechRecognitionAborted() {
- return proxy_->speechRecognizerMock()->wasAborted();
+ return proxy_->GetSpeechRecognizerMock()->wasAborted();
}
void TestRunner::AddWebPageOverlay() {
@@ -2569,13 +2589,13 @@ void TestRunner::RemoveWebPageOverlay() {
}
void TestRunner::DisplayAsync() {
- proxy_->displayAsyncThen(base::Closure());
+ proxy_->DisplayAsyncThen(base::Closure());
}
void TestRunner::DisplayAsyncThen(v8::Handle<v8::Function> callback) {
scoped_ptr<InvokeCallbackTask> task(
new InvokeCallbackTask(this, callback));
- proxy_->displayAsyncThen(base::Bind(&TestRunner::InvokeCallback,
+ proxy_->DisplayAsyncThen(base::Bind(&TestRunner::InvokeCallback,
base::Unretained(this),
base::Passed(&task)));
}
diff --git a/content/shell/renderer/test_runner/test_runner.h b/content/shell/renderer/test_runner/test_runner.h
index 93f83f93ec..49206c13aa 100644
--- a/content/shell/renderer/test_runner/test_runner.h
+++ b/content/shell/renderer/test_runner/test_runner.h
@@ -12,7 +12,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "content/shell/renderer/test_runner/WebTask.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
+#include "content/shell/renderer/test_runner/web_test_runner.h"
#include "v8/include/v8.h"
namespace blink {
@@ -51,7 +51,7 @@ class TestRunner : public WebTestRunner,
void Reset();
- WebTaskList* taskList() { return &task_list_; }
+ WebTaskList* mutable_task_list() { return &task_list_; }
void SetTestIsRunning(bool);
bool TestIsRunning() const { return test_is_running_; }
@@ -61,12 +61,12 @@ class TestRunner : public WebTestRunner,
void InvokeCallback(scoped_ptr<InvokeCallbackTask> callback);
// WebTestRunner implementation.
- virtual bool shouldGeneratePixelResults() OVERRIDE;
- virtual bool shouldDumpAsAudio() const OVERRIDE;
- virtual void getAudioData(std::vector<unsigned char>* bufferView) const
- OVERRIDE;
- virtual bool shouldDumpBackForwardList() const OVERRIDE;
- virtual blink::WebPermissionClient* webPermissions() const OVERRIDE;
+ virtual bool ShouldGeneratePixelResults() OVERRIDE;
+ virtual bool ShouldDumpAsAudio() const OVERRIDE;
+ virtual void GetAudioData(
+ std::vector<unsigned char>* buffer_view) const OVERRIDE;
+ virtual bool ShouldDumpBackForwardList() const OVERRIDE;
+ virtual blink::WebPermissionClient* GetWebPermissions() const OVERRIDE;
// Methods used by WebTestProxyBase.
bool shouldDumpSelectionRect() const;
@@ -150,7 +150,7 @@ class TestRunner : public WebTestRunner,
void set_frozen(bool frozen) { frozen_ = frozen; }
bool is_empty() { return queue_.empty(); }
- WebTaskList* taskList() { return &task_list_; }
+ WebTaskList* mutable_task_list() { return &task_list_; }
private:
void ProcessWork();
@@ -318,6 +318,9 @@ class TestRunner : public WebTestRunner,
void SetAllowFileAccessFromFileURLs(bool allow);
void OverridePreference(const std::string key, v8::Handle<v8::Value> value);
+ // Modify accept_languages in RendererPreferences.
+ void SetAcceptLanguages(const std::string& accept_languages);
+
// Enable or disable plugins.
void SetPluginsEnabled(bool enabled);
diff --git a/content/shell/renderer/test_runner/web_frame_test_proxy.h b/content/shell/renderer/test_runner/web_frame_test_proxy.h
new file mode 100644
index 0000000000..ef016ef51f
--- /dev/null
+++ b/content/shell/renderer/test_runner/web_frame_test_proxy.h
@@ -0,0 +1,287 @@
+// 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.
+
+#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
+#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
+
+#include "base/basictypes.h"
+#include "content/shell/renderer/test_runner/TestInterfaces.h"
+#include "content/shell/renderer/test_runner/WebTestDelegate.h"
+#include "content/shell/renderer/test_runner/test_runner.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
+#include "content/test/test_media_stream_renderer_factory.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+
+namespace content {
+
+// Templetized wrapper around RenderFrameImpl objects, which implement
+// the WebFrameClient interface.
+template <class Base, typename P, typename R>
+class WebFrameTestProxy : public Base {
+ public:
+ WebFrameTestProxy(P p, R r) : Base(p, r), base_proxy_(NULL) {}
+
+ virtual ~WebFrameTestProxy() {}
+
+ void set_base_proxy(WebTestProxyBase* proxy) { base_proxy_ = proxy; }
+
+ // WebFrameClient implementation.
+ virtual blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame,
+ const blink::WebPluginParams& params) {
+ blink::WebPlugin* plugin = base_proxy_->CreatePlugin(frame, params);
+ if (plugin) return plugin;
+ return Base::createPlugin(frame, params);
+ }
+
+ virtual void didAddMessageToConsole(const blink::WebConsoleMessage& message,
+ const blink::WebString& sourceName,
+ unsigned sourceLine,
+ const blink::WebString& stackTrace) {
+ base_proxy_->DidAddMessageToConsole(message, sourceName, sourceLine);
+ Base::didAddMessageToConsole(message, sourceName, sourceLine, stackTrace);
+ }
+
+ virtual bool canCreatePluginWithoutRenderer(
+ const blink::WebString& mimeType) {
+ using blink::WebString;
+
+ const CR_DEFINE_STATIC_LOCAL(WebString, suffix,
+ ("-can-create-without-renderer"));
+ return mimeType.utf8().find(suffix.utf8()) != std::string::npos;
+ }
+
+ virtual void loadURLExternally(blink::WebLocalFrame* frame,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationPolicy policy,
+ const blink::WebString& suggested_name) {
+ base_proxy_->LoadURLExternally(frame, request, policy, suggested_name);
+ Base::loadURLExternally(frame, request, policy, suggested_name);
+ }
+
+ virtual void didStartProvisionalLoad(blink::WebLocalFrame* frame) {
+ base_proxy_->DidStartProvisionalLoad(frame);
+ Base::didStartProvisionalLoad(frame);
+ }
+
+ virtual void didReceiveServerRedirectForProvisionalLoad(
+ blink::WebLocalFrame* frame) {
+ base_proxy_->DidReceiveServerRedirectForProvisionalLoad(frame);
+ Base::didReceiveServerRedirectForProvisionalLoad(frame);
+ }
+
+ virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error) {
+ // If the test finished, don't notify the embedder of the failed load,
+ // as we already destroyed the document loader.
+ if (base_proxy_->DidFailProvisionalLoad(frame, error)) return;
+ Base::didFailProvisionalLoad(frame, error);
+ }
+
+ virtual void didCommitProvisionalLoad(
+ blink::WebLocalFrame* frame, const blink::WebHistoryItem& item,
+ blink::WebHistoryCommitType commit_type) {
+ base_proxy_->DidCommitProvisionalLoad(frame, item, commit_type);
+ Base::didCommitProvisionalLoad(frame, item, commit_type);
+ }
+
+ virtual void didReceiveTitle(blink::WebLocalFrame* frame,
+ const blink::WebString& title,
+ blink::WebTextDirection direction) {
+ base_proxy_->DidReceiveTitle(frame, title, direction);
+ Base::didReceiveTitle(frame, title, direction);
+ }
+
+ virtual void didChangeIcon(blink::WebLocalFrame* frame,
+ blink::WebIconURL::Type iconType) {
+ base_proxy_->DidChangeIcon(frame, iconType);
+ Base::didChangeIcon(frame, iconType);
+ }
+
+ virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame) {
+ base_proxy_->DidFinishDocumentLoad(frame);
+ Base::didFinishDocumentLoad(frame);
+ }
+
+ virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame) {
+ base_proxy_->DidHandleOnloadEvents(frame);
+ Base::didHandleOnloadEvents(frame);
+ }
+
+ virtual void didFailLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error) {
+ base_proxy_->DidFailLoad(frame, error);
+ Base::didFailLoad(frame, error);
+ }
+
+ virtual void didFinishLoad(blink::WebLocalFrame* frame) {
+ base_proxy_->DidFinishLoad(frame);
+ Base::didFinishLoad(frame);
+ }
+
+ virtual blink::WebNotificationPresenter* notificationPresenter() {
+ return base_proxy_->GetNotificationPresenter();
+ }
+
+ virtual void didChangeSelection(bool is_selection_empty) {
+ base_proxy_->DidChangeSelection(is_selection_empty);
+ Base::didChangeSelection(is_selection_empty);
+ }
+
+ virtual blink::WebColorChooser* createColorChooser(
+ blink::WebColorChooserClient* client,
+ const blink::WebColor& initial_color,
+ const blink::WebVector<blink::WebColorSuggestion>& suggestions) {
+ return base_proxy_->CreateColorChooser(client, initial_color, suggestions);
+ }
+
+ virtual void runModalAlertDialog(const blink::WebString& message) {
+ base_proxy_->delegate_->printMessage(std::string("ALERT: ") +
+ message.utf8().data() + "\n");
+ }
+
+ virtual bool runModalConfirmDialog(const blink::WebString& message) {
+ base_proxy_->delegate_->printMessage(std::string("CONFIRM: ") +
+ message.utf8().data() + "\n");
+ return true;
+ }
+
+ virtual bool runModalPromptDialog(const blink::WebString& message,
+ const blink::WebString& defaultValue,
+ blink::WebString*) {
+ base_proxy_->delegate_->printMessage(
+ std::string("PROMPT: ") + message.utf8().data() + ", default text: " +
+ defaultValue.utf8().data() + "\n");
+ return true;
+ }
+
+ virtual bool runModalBeforeUnloadDialog(bool is_reload,
+ const blink::WebString& message) {
+ base_proxy_->delegate_->printMessage(std::string("CONFIRM NAVIGATION: ") +
+ message.utf8().data() + "\n");
+ return !base_proxy_->test_interfaces_->testRunner()
+ ->shouldStayOnPageAfterHandlingBeforeUnload();
+ }
+
+ virtual void showContextMenu(
+ const blink::WebContextMenuData& contextMenuData) {
+ base_proxy_->ShowContextMenu(Base::GetWebFrame()->toWebLocalFrame(),
+ contextMenuData);
+ Base::showContextMenu(contextMenuData);
+ }
+
+ virtual void didDetectXSS(blink::WebLocalFrame* frame,
+ const blink::WebURL& insecureURL,
+ bool didBlockEntirePage) {
+ // This is not implemented in RenderFrameImpl, so need to explicitly call
+ // into the base proxy.
+ base_proxy_->DidDetectXSS(frame, insecureURL, didBlockEntirePage);
+ Base::didDetectXSS(frame, insecureURL, didBlockEntirePage);
+ }
+
+ virtual void didDispatchPingLoader(blink::WebLocalFrame* frame,
+ const blink::WebURL& url) {
+ // This is not implemented in RenderFrameImpl, so need to explicitly call
+ // into the base proxy.
+ base_proxy_->DidDispatchPingLoader(frame, url);
+ Base::didDispatchPingLoader(frame, url);
+ }
+
+ virtual void willRequestResource(blink::WebLocalFrame* frame,
+ const blink::WebCachedURLRequest& request) {
+ // This is not implemented in RenderFrameImpl, so need to explicitly call
+ // into the base proxy.
+ base_proxy_->WillRequestResource(frame, request);
+ Base::willRequestResource(frame, request);
+ }
+
+ virtual void didCreateDataSource(blink::WebLocalFrame* frame,
+ blink::WebDataSource* ds) {
+ Base::didCreateDataSource(frame, ds);
+ }
+
+ virtual void willSendRequest(blink::WebLocalFrame* frame, unsigned identifier,
+ blink::WebURLRequest& request,
+ const blink::WebURLResponse& redirectResponse) {
+ base_proxy_->WillSendRequest(frame, identifier, request, redirectResponse);
+ Base::willSendRequest(frame, identifier, request, redirectResponse);
+ }
+
+ virtual void didReceiveResponse(blink::WebLocalFrame* frame,
+ unsigned identifier,
+ const blink::WebURLResponse& response) {
+ base_proxy_->DidReceiveResponse(frame, identifier, response);
+ Base::didReceiveResponse(frame, identifier, response);
+ }
+
+ virtual void didChangeResourcePriority(
+ blink::WebLocalFrame* frame, unsigned identifier,
+ const blink::WebURLRequest::Priority& priority,
+ int intra_priority_value) {
+ // This is not implemented in RenderFrameImpl, so need to explicitly call
+ // into the base proxy.
+ base_proxy_->DidChangeResourcePriority(frame, identifier, priority,
+ intra_priority_value);
+ Base::didChangeResourcePriority(frame, identifier, priority,
+ intra_priority_value);
+ }
+
+ virtual void didFinishResourceLoad(blink::WebLocalFrame* frame,
+ unsigned identifier) {
+ base_proxy_->DidFinishResourceLoad(frame, identifier);
+ Base::didFinishResourceLoad(frame, identifier);
+ }
+
+ virtual blink::WebNavigationPolicy decidePolicyForNavigation(
+ blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* extraData,
+ const blink::WebURLRequest& request, blink::WebNavigationType type,
+ blink::WebNavigationPolicy defaultPolicy, bool isRedirect) {
+ blink::WebNavigationPolicy policy = base_proxy_->DecidePolicyForNavigation(
+ frame, extraData, request, type, defaultPolicy, isRedirect);
+ if (policy == blink::WebNavigationPolicyIgnore) return policy;
+
+ return Base::decidePolicyForNavigation(frame, extraData, request, type,
+ defaultPolicy, isRedirect);
+ }
+
+ virtual void willStartUsingPeerConnectionHandler(
+ blink::WebLocalFrame* frame,
+ blink::WebRTCPeerConnectionHandler* handler) {
+ // RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
+ // See http://crbug/363285.
+ }
+
+ virtual blink::WebUserMediaClient* userMediaClient() {
+ return base_proxy_->GetUserMediaClient();
+ }
+
+ virtual bool willCheckAndDispatchMessageEvent(
+ blink::WebLocalFrame* sourceFrame, blink::WebFrame* targetFrame,
+ blink::WebSecurityOrigin target, blink::WebDOMMessageEvent event) {
+ if (base_proxy_->WillCheckAndDispatchMessageEvent(sourceFrame, targetFrame,
+ target, event))
+ return true;
+ return Base::willCheckAndDispatchMessageEvent(sourceFrame, targetFrame,
+ target, event);
+ }
+
+ virtual void didStopLoading() {
+ base_proxy_->DidStopLoading();
+ Base::didStopLoading();
+ }
+
+ private:
+ virtual scoped_ptr<MediaStreamRendererFactory>
+ CreateRendererFactory() OVERRIDE {
+ return scoped_ptr<MediaStreamRendererFactory>(
+ new TestMediaStreamRendererFactory());
+ }
+
+ WebTestProxyBase* base_proxy_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
diff --git a/content/shell/renderer/test_runner/web_test_proxy.cc b/content/shell/renderer/test_runner/web_test_proxy.cc
new file mode 100644
index 0000000000..c5f19ca3c8
--- /dev/null
+++ b/content/shell/renderer/test_runner/web_test_proxy.cc
@@ -0,0 +1,1204 @@
+// 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 "content/shell/renderer/test_runner/web_test_proxy.h"
+
+#include <cctype>
+
+#include "base/callback_helpers.h"
+#include "base/debug/trace_event.h"
+#include "base/logging.h"
+#include "content/shell/renderer/test_runner/MockColorChooser.h"
+#include "content/shell/renderer/test_runner/MockWebSpeechRecognizer.h"
+#include "content/shell/renderer/test_runner/SpellCheckClient.h"
+#include "content/shell/renderer/test_runner/TestCommon.h"
+#include "content/shell/renderer/test_runner/TestInterfaces.h"
+#include "content/shell/renderer/test_runner/TestPlugin.h"
+#include "content/shell/renderer/test_runner/WebTestDelegate.h"
+#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
+#include "content/shell/renderer/test_runner/WebUserMediaClientMock.h"
+#include "content/shell/renderer/test_runner/accessibility_controller.h"
+#include "content/shell/renderer/test_runner/event_sender.h"
+#include "content/shell/renderer/test_runner/test_runner.h"
+#include "content/shell/renderer/test_runner/web_test_runner.h"
+// FIXME: Including platform_canvas.h here is a layering violation.
+#include "skia/ext/platform_canvas.h"
+#include "third_party/WebKit/public/platform/WebCString.h"
+#include "third_party/WebKit/public/platform/WebURLError.h"
+#include "third_party/WebKit/public/platform/WebURLRequest.h"
+#include "third_party/WebKit/public/platform/WebURLResponse.h"
+#include "third_party/WebKit/public/web/WebAXEnums.h"
+#include "third_party/WebKit/public/web/WebAXObject.h"
+#include "third_party/WebKit/public/web/WebCachedURLRequest.h"
+#include "third_party/WebKit/public/web/WebConsoleMessage.h"
+#include "third_party/WebKit/public/web/WebDataSource.h"
+#include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebElement.h"
+#include "third_party/WebKit/public/web/WebHistoryItem.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "third_party/WebKit/public/web/WebMIDIClientMock.h"
+#include "third_party/WebKit/public/web/WebNode.h"
+#include "third_party/WebKit/public/web/WebPluginParams.h"
+#include "third_party/WebKit/public/web/WebPrintParams.h"
+#include "third_party/WebKit/public/web/WebRange.h"
+#include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
+#include "third_party/WebKit/public/web/WebView.h"
+
+namespace content {
+
+namespace {
+
+class HostMethodTask : public WebMethodTask<WebTestProxyBase> {
+ public:
+ typedef void (WebTestProxyBase::*CallbackMethodType)();
+ HostMethodTask(WebTestProxyBase* object, CallbackMethodType callback)
+ : WebMethodTask<WebTestProxyBase>(object), callback_(callback) {}
+
+ virtual void runIfValid() OVERRIDE { (m_object->*callback_)(); }
+
+ private:
+ CallbackMethodType callback_;
+};
+
+void PrintFrameDescription(WebTestDelegate* delegate, blink::WebFrame* frame) {
+ std::string name8 = frame->uniqueName().utf8();
+ if (frame == frame->view()->mainFrame()) {
+ if (!name8.length()) {
+ delegate->printMessage("main frame");
+ return;
+ }
+ delegate->printMessage(std::string("main frame \"") + name8 + "\"");
+ return;
+ }
+ if (!name8.length()) {
+ delegate->printMessage("frame (anonymous)");
+ return;
+ }
+ delegate->printMessage(std::string("frame \"") + name8 + "\"");
+}
+
+void PrintFrameuserGestureStatus(WebTestDelegate* delegate,
+ blink::WebFrame* frame,
+ const char* msg) {
+ bool is_user_gesture =
+ blink::WebUserGestureIndicator::isProcessingUserGesture();
+ delegate->printMessage(std::string("Frame with user gesture \"") +
+ (is_user_gesture ? "true" : "false") + "\"" + msg);
+}
+
+// Used to write a platform neutral file:/// URL by taking the
+// filename and its directory. (e.g., converts
+// "file:///tmp/foo/bar.txt" to just "bar.txt").
+std::string DescriptionSuitableForTestResult(const std::string& url) {
+ if (url.empty() || std::string::npos == url.find("file://"))
+ return url;
+
+ size_t pos = url.rfind('/');
+ if (pos == std::string::npos || !pos)
+ return "ERROR:" + url;
+ pos = url.rfind('/', pos - 1);
+ if (pos == std::string::npos)
+ return "ERROR:" + url;
+
+ return url.substr(pos + 1);
+}
+
+void PrintResponseDescription(WebTestDelegate* delegate,
+ const blink::WebURLResponse& response) {
+ if (response.isNull()) {
+ delegate->printMessage("(null)");
+ return;
+ }
+ std::string url = response.url().spec();
+ char data[100];
+ snprintf(data, sizeof(data), "%d", response.httpStatusCode());
+ delegate->printMessage(std::string("<NSURLResponse ") +
+ DescriptionSuitableForTestResult(url) +
+ ", http status code " + data + ">");
+}
+
+std::string URLDescription(const GURL& url) {
+ if (url.SchemeIs("file"))
+ return url.ExtractFileName();
+ return url.possibly_invalid_spec();
+}
+
+std::string PriorityDescription(
+ const blink::WebURLRequest::Priority& priority) {
+ switch (priority) {
+ case blink::WebURLRequest::PriorityVeryLow:
+ return "VeryLow";
+ case blink::WebURLRequest::PriorityLow:
+ return "Low";
+ case blink::WebURLRequest::PriorityMedium:
+ return "Medium";
+ case blink::WebURLRequest::PriorityHigh:
+ return "High";
+ case blink::WebURLRequest::PriorityVeryHigh:
+ return "VeryHigh";
+ case blink::WebURLRequest::PriorityUnresolved:
+ default:
+ return "Unresolved";
+ }
+}
+
+void BlockRequest(blink::WebURLRequest& request) {
+ request.setURL(GURL("255.255.255.255"));
+}
+
+bool IsLocalHost(const std::string& host) {
+ return host == "127.0.0.1" || host == "localhost";
+}
+
+bool HostIsUsedBySomeTestsToGenerateError(const std::string& host) {
+ return host == "255.255.255.255";
+}
+
+// Used to write a platform neutral file:/// URL by only taking the filename
+// (e.g., converts "file:///tmp/foo.txt" to just "foo.txt").
+std::string URLSuitableForTestResult(const std::string& url) {
+ if (url.empty() || std::string::npos == url.find("file://"))
+ return url;
+
+ size_t pos = url.rfind('/');
+ if (pos == std::string::npos) {
+#ifdef WIN32
+ pos = url.rfind('\\');
+ if (pos == std::string::npos)
+ pos = 0;
+#else
+ pos = 0;
+#endif
+ }
+ std::string filename = url.substr(pos + 1);
+ if (filename.empty())
+ return "file:"; // A WebKit test has this in its expected output.
+ return filename;
+}
+
+// WebNavigationType debugging strings taken from PolicyDelegate.mm.
+const char* kLinkClickedString = "link clicked";
+const char* kFormSubmittedString = "form submitted";
+const char* kBackForwardString = "back/forward";
+const char* kReloadString = "reload";
+const char* kFormResubmittedString = "form resubmitted";
+const char* kOtherString = "other";
+const char* kIllegalString = "illegal value";
+
+// Get a debugging string from a WebNavigationType.
+const char* WebNavigationTypeToString(blink::WebNavigationType type) {
+ switch (type) {
+ case blink::WebNavigationTypeLinkClicked:
+ return kLinkClickedString;
+ case blink::WebNavigationTypeFormSubmitted:
+ return kFormSubmittedString;
+ case blink::WebNavigationTypeBackForward:
+ return kBackForwardString;
+ case blink::WebNavigationTypeReload:
+ return kReloadString;
+ case blink::WebNavigationTypeFormResubmitted:
+ return kFormResubmittedString;
+ case blink::WebNavigationTypeOther:
+ return kOtherString;
+ }
+ return kIllegalString;
+}
+
+std::string DumpDocumentText(blink::WebFrame* frame) {
+ // We use the document element's text instead of the body text here because
+ // not all documents have a body, such as XML documents.
+ blink::WebElement document_element = frame->document().documentElement();
+ if (document_element.isNull())
+ return std::string();
+ return document_element.innerText().utf8();
+}
+
+std::string DumpFramesAsText(blink::WebFrame* frame, bool recursive) {
+ std::string result;
+
+ // Add header for all but the main frame. Skip empty frames.
+ if (frame->parent() && !frame->document().documentElement().isNull()) {
+ result.append("\n--------\nFrame: '");
+ result.append(frame->uniqueName().utf8().data());
+ result.append("'\n--------\n");
+ }
+
+ result.append(DumpDocumentText(frame));
+ result.append("\n");
+
+ if (recursive) {
+ for (blink::WebFrame* child = frame->firstChild(); child;
+ child = child->nextSibling())
+ result.append(DumpFramesAsText(child, recursive));
+ }
+
+ return result;
+}
+
+std::string DumpFramesAsPrintedText(blink::WebFrame* frame, bool recursive) {
+ std::string result;
+
+ // Cannot do printed format for anything other than HTML
+ if (!frame->document().isHTMLDocument())
+ return std::string();
+
+ // Add header for all but the main frame. Skip empty frames.
+ if (frame->parent() && !frame->document().documentElement().isNull()) {
+ result.append("\n--------\nFrame: '");
+ result.append(frame->uniqueName().utf8().data());
+ result.append("'\n--------\n");
+ }
+
+ result.append(
+ frame->renderTreeAsText(blink::WebFrame::RenderAsTextPrinting).utf8());
+ result.append("\n");
+
+ if (recursive) {
+ for (blink::WebFrame* child = frame->firstChild(); child;
+ child = child->nextSibling())
+ result.append(DumpFramesAsPrintedText(child, recursive));
+ }
+
+ return result;
+}
+
+std::string DumpFrameScrollPosition(blink::WebFrame* frame, bool recursive) {
+ std::string result;
+ blink::WebSize offset = frame->scrollOffset();
+ if (offset.width > 0 || offset.height > 0) {
+ if (frame->parent()) {
+ result =
+ std::string("frame '") + frame->uniqueName().utf8().data() + "' ";
+ }
+ char data[100];
+ snprintf(
+ data, sizeof(data), "scrolled to %d,%d\n", offset.width, offset.height);
+ result += data;
+ }
+
+ if (!recursive)
+ return result;
+ for (blink::WebFrame* child = frame->firstChild(); child;
+ child = child->nextSibling())
+ result += DumpFrameScrollPosition(child, recursive);
+ return result;
+}
+
+std::string DumpAllBackForwardLists(TestInterfaces* interfaces,
+ WebTestDelegate* delegate) {
+ std::string result;
+ const std::vector<WebTestProxyBase*>& window_list = interfaces->windowList();
+ for (size_t i = 0; i < window_list.size(); ++i)
+ result.append(delegate->dumpHistoryForWindow(window_list.at(i)));
+ return result;
+}
+}
+
+WebTestProxyBase::WebTestProxyBase()
+ : test_interfaces_(NULL),
+ delegate_(NULL),
+ web_widget_(NULL),
+ spellcheck_(new SpellCheckClient(this)),
+ chooser_count_(0) {
+ Reset();
+}
+
+WebTestProxyBase::~WebTestProxyBase() {
+ test_interfaces_->windowClosed(this);
+}
+
+void WebTestProxyBase::SetInterfaces(WebTestInterfaces* interfaces) {
+ test_interfaces_ = interfaces->testInterfaces();
+ test_interfaces_->windowOpened(this);
+}
+
+void WebTestProxyBase::SetDelegate(WebTestDelegate* delegate) {
+ delegate_ = delegate;
+ spellcheck_->setDelegate(delegate);
+ if (speech_recognizer_.get())
+ speech_recognizer_->setDelegate(delegate);
+}
+
+blink::WebView* WebTestProxyBase::GetWebView() const {
+ DCHECK(web_widget_);
+ // TestRunner does not support popup widgets. So |web_widget|_ is always a
+ // WebView.
+ return static_cast<blink::WebView*>(web_widget_);
+}
+
+void WebTestProxyBase::Reset() {
+ animate_scheduled_ = false;
+ resource_identifier_map_.clear();
+ log_console_output_ = true;
+ if (midi_client_.get())
+ midi_client_->resetMock();
+ accept_languages_ = "";
+}
+
+blink::WebSpellCheckClient* WebTestProxyBase::GetSpellCheckClient() const {
+ return spellcheck_.get();
+}
+
+blink::WebColorChooser* WebTestProxyBase::CreateColorChooser(
+ blink::WebColorChooserClient* client,
+ const blink::WebColor& color,
+ const blink::WebVector<blink::WebColorSuggestion>& suggestions) {
+ // This instance is deleted by WebCore::ColorInputType
+ return new MockColorChooser(client, delegate_, this);
+}
+
+bool WebTestProxyBase::RunFileChooser(
+ const blink::WebFileChooserParams& params,
+ blink::WebFileChooserCompletion* completion) {
+ delegate_->printMessage("Mock: Opening a file chooser.\n");
+ // FIXME: Add ability to set file names to a file upload control.
+ return false;
+}
+
+void WebTestProxyBase::ShowValidationMessage(
+ const blink::WebRect& anchor_in_root_view,
+ const blink::WebString& message,
+ const blink::WebString& sub_message,
+ blink::WebTextDirection hint) {
+ delegate_->printMessage(
+ std::string("ValidationMessageClient: main-message=") +
+ std::string(message.utf8()) + " sub-message=" +
+ std::string(sub_message.utf8()) + "\n");
+}
+
+std::string WebTestProxyBase::CaptureTree(bool debug_render_tree) {
+ bool should_dump_custom_text =
+ test_interfaces_->testRunner()->shouldDumpAsCustomText();
+ bool should_dump_as_text = test_interfaces_->testRunner()->shouldDumpAsText();
+ bool should_dump_as_markup =
+ test_interfaces_->testRunner()->shouldDumpAsMarkup();
+ bool should_dump_as_printed = test_interfaces_->testRunner()->isPrinting();
+ blink::WebFrame* frame = GetWebView()->mainFrame();
+ std::string data_utf8;
+ if (should_dump_custom_text) {
+ // Append a newline for the test driver.
+ data_utf8 = test_interfaces_->testRunner()->customDumpText() + "\n";
+ } else if (should_dump_as_text) {
+ bool recursive =
+ test_interfaces_->testRunner()->shouldDumpChildFramesAsText();
+ data_utf8 = should_dump_as_printed
+ ? DumpFramesAsPrintedText(frame, recursive)
+ : DumpFramesAsText(frame, recursive);
+ } else if (should_dump_as_markup) {
+ // Append a newline for the test driver.
+ data_utf8 = frame->contentAsMarkup().utf8() + "\n";
+ } else {
+ bool recursive =
+ test_interfaces_->testRunner()->shouldDumpChildFrameScrollPositions();
+ blink::WebFrame::RenderAsTextControls render_text_behavior =
+ blink::WebFrame::RenderAsTextNormal;
+ if (should_dump_as_printed)
+ render_text_behavior |= blink::WebFrame::RenderAsTextPrinting;
+ if (debug_render_tree)
+ render_text_behavior |= blink::WebFrame::RenderAsTextDebug;
+ data_utf8 = frame->renderTreeAsText(render_text_behavior).utf8();
+ data_utf8 += DumpFrameScrollPosition(frame, recursive);
+ }
+
+ if (test_interfaces_->testRunner()->ShouldDumpBackForwardList())
+ data_utf8 += DumpAllBackForwardLists(test_interfaces_, delegate_);
+
+ return data_utf8;
+}
+
+void WebTestProxyBase::DrawSelectionRect(SkCanvas* canvas) {
+ // See if we need to draw the selection bounds rect. Selection bounds
+ // rect is the rect enclosing the (possibly transformed) selection.
+ // The rect should be drawn after everything is laid out and painted.
+ if (!test_interfaces_->testRunner()->shouldDumpSelectionRect())
+ return;
+ // If there is a selection rect - draw a red 1px border enclosing rect
+ blink::WebRect wr = GetWebView()->mainFrame()->selectionBoundsRect();
+ if (wr.isEmpty())
+ return;
+ // Render a red rectangle bounding selection rect
+ SkPaint paint;
+ paint.setColor(0xFFFF0000); // Fully opaque red
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setFlags(SkPaint::kAntiAlias_Flag);
+ paint.setStrokeWidth(1.0f);
+ SkIRect rect; // Bounding rect
+ rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height);
+ canvas->drawIRect(rect, paint);
+}
+
+void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) {
+ TRACE_EVENT2("shell",
+ "WebTestProxyBase::didCompositeAndReadback",
+ "x",
+ bitmap.info().fWidth,
+ "y",
+ bitmap.info().fHeight);
+ SkCanvas canvas(bitmap);
+ DrawSelectionRect(&canvas);
+ DCHECK(!composite_and_readback_callbacks_.empty());
+ composite_and_readback_callbacks_.front().Run(bitmap);
+ composite_and_readback_callbacks_.pop_front();
+}
+
+void WebTestProxyBase::SetAcceptLanguages(const std::string& accept_languages) {
+ bool notify = accept_languages_ != accept_languages;
+ accept_languages_ = accept_languages;
+
+ if (notify)
+ GetWebView()->acceptLanguagesChanged();
+}
+
+void WebTestProxyBase::CapturePixelsForPrinting(
+ const base::Callback<void(const SkBitmap&)>& callback) {
+ web_widget_->layout();
+
+ blink::WebSize page_size_in_pixels = web_widget_->size();
+ blink::WebFrame* web_frame = GetWebView()->mainFrame();
+
+ int page_count = web_frame->printBegin(page_size_in_pixels);
+ int totalHeight = page_count * (page_size_in_pixels.height + 1) - 1;
+
+ bool is_opaque = false;
+ skia::RefPtr<SkCanvas> canvas(skia::AdoptRef(skia::TryCreateBitmapCanvas(
+ page_size_in_pixels.width, totalHeight, is_opaque)));
+ if (canvas)
+ web_frame->printPagesWithBoundaries(canvas.get(), page_size_in_pixels);
+ web_frame->printEnd();
+
+ DrawSelectionRect(canvas.get());
+ SkBaseDevice* device = skia::GetTopDevice(*canvas);
+ const SkBitmap& bitmap = device->accessBitmap(false);
+ callback.Run(bitmap);
+}
+
+void WebTestProxyBase::CapturePixelsAsync(
+ const base::Callback<void(const SkBitmap&)>& callback) {
+ TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
+
+ DCHECK(web_widget_->isAcceleratedCompositingActive());
+ DCHECK(!callback.is_null());
+
+ if (test_interfaces_->testRunner()->isPrinting()) {
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&WebTestProxyBase::CapturePixelsForPrinting,
+ base::Unretained(this),
+ callback));
+ return;
+ }
+
+ composite_and_readback_callbacks_.push_back(callback);
+ web_widget_->compositeAndReadbackAsync(this);
+}
+
+void WebTestProxyBase::SetLogConsoleOutput(bool enabled) {
+ log_console_output_ = enabled;
+}
+
+void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback,
+ const SkBitmap& bitmap) {
+ // Verify we actually composited.
+ CHECK_NE(0, bitmap.info().fWidth);
+ CHECK_NE(0, bitmap.info().fHeight);
+ if (!callback.is_null())
+ callback.Run();
+}
+
+void WebTestProxyBase::DisplayAsyncThen(const base::Closure& callback) {
+ TRACE_EVENT0("shell", "WebTestProxyBase::DisplayAsyncThen");
+
+ CHECK(web_widget_->isAcceleratedCompositingActive());
+ CapturePixelsAsync(base::Bind(
+ &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback));
+}
+
+blink::WebMIDIClientMock* WebTestProxyBase::GetMIDIClientMock() {
+ if (!midi_client_.get())
+ midi_client_.reset(new blink::WebMIDIClientMock);
+ return midi_client_.get();
+}
+
+MockWebSpeechRecognizer* WebTestProxyBase::GetSpeechRecognizerMock() {
+ if (!speech_recognizer_.get()) {
+ speech_recognizer_.reset(new MockWebSpeechRecognizer());
+ speech_recognizer_->setDelegate(delegate_);
+ }
+ return speech_recognizer_.get();
+}
+
+void WebTestProxyBase::ScheduleAnimation() {
+ if (!test_interfaces_->testRunner()->TestIsRunning())
+ return;
+
+ if (!animate_scheduled_) {
+ animate_scheduled_ = true;
+ delegate_->postDelayedTask(
+ new HostMethodTask(this, &WebTestProxyBase::AnimateNow), 1);
+ }
+}
+
+void WebTestProxyBase::AnimateNow() {
+ if (animate_scheduled_) {
+ animate_scheduled_ = false;
+ web_widget_->animate(0.0);
+ web_widget_->layout();
+ }
+}
+
+void WebTestProxyBase::PostAccessibilityEvent(const blink::WebAXObject& obj,
+ blink::WebAXEvent event) {
+ // Only hook the accessibility events occured during the test run.
+ // This check prevents false positives in WebLeakDetector.
+ // The pending tasks in browser/renderer message queue may trigger
+ // accessibility events,
+ // and AccessibilityController will hold on to their target nodes if we don't
+ // ignore them here.
+ if (!test_interfaces_->testRunner()->TestIsRunning())
+ return;
+
+ if (event == blink::WebAXEventFocus)
+ test_interfaces_->accessibilityController()->SetFocusedElement(obj);
+
+ const char* event_name = NULL;
+ switch (event) {
+ case blink::WebAXEventActiveDescendantChanged:
+ event_name = "ActiveDescendantChanged";
+ break;
+ case blink::WebAXEventAlert:
+ event_name = "Alert";
+ break;
+ case blink::WebAXEventAriaAttributeChanged:
+ event_name = "AriaAttributeChanged";
+ break;
+ case blink::WebAXEventAutocorrectionOccured:
+ event_name = "AutocorrectionOccured";
+ break;
+ case blink::WebAXEventBlur:
+ event_name = "Blur";
+ break;
+ case blink::WebAXEventCheckedStateChanged:
+ event_name = "CheckedStateChanged";
+ break;
+ case blink::WebAXEventChildrenChanged:
+ event_name = "ChildrenChanged";
+ break;
+ case blink::WebAXEventFocus:
+ event_name = "Focus";
+ break;
+ case blink::WebAXEventHide:
+ event_name = "Hide";
+ break;
+ case blink::WebAXEventInvalidStatusChanged:
+ event_name = "InvalidStatusChanged";
+ break;
+ case blink::WebAXEventLayoutComplete:
+ event_name = "LayoutComplete";
+ break;
+ case blink::WebAXEventLiveRegionChanged:
+ event_name = "LiveRegionChanged";
+ break;
+ case blink::WebAXEventLoadComplete:
+ event_name = "LoadComplete";
+ break;
+ case blink::WebAXEventLocationChanged:
+ event_name = "LocationChanged";
+ break;
+ case blink::WebAXEventMenuListItemSelected:
+ event_name = "MenuListItemSelected";
+ break;
+ case blink::WebAXEventMenuListValueChanged:
+ event_name = "MenuListValueChanged";
+ break;
+ case blink::WebAXEventRowCollapsed:
+ event_name = "RowCollapsed";
+ break;
+ case blink::WebAXEventRowCountChanged:
+ event_name = "RowCountChanged";
+ break;
+ case blink::WebAXEventRowExpanded:
+ event_name = "RowExpanded";
+ break;
+ case blink::WebAXEventScrollPositionChanged:
+ event_name = "ScrollPositionChanged";
+ break;
+ case blink::WebAXEventScrolledToAnchor:
+ event_name = "ScrolledToAnchor";
+ break;
+ case blink::WebAXEventSelectedChildrenChanged:
+ event_name = "SelectedChildrenChanged";
+ break;
+ case blink::WebAXEventSelectedTextChanged:
+ event_name = "SelectedTextChanged";
+ break;
+ case blink::WebAXEventShow:
+ event_name = "Show";
+ break;
+ case blink::WebAXEventTextChanged:
+ event_name = "TextChanged";
+ break;
+ case blink::WebAXEventTextInserted:
+ event_name = "TextInserted";
+ break;
+ case blink::WebAXEventTextRemoved:
+ event_name = "TextRemoved";
+ break;
+ case blink::WebAXEventValueChanged:
+ event_name = "ValueChanged";
+ break;
+ default:
+ event_name = "Unknown";
+ break;
+ }
+
+ test_interfaces_->accessibilityController()->NotificationReceived(obj,
+ event_name);
+
+ if (test_interfaces_->accessibilityController()
+ ->ShouldLogAccessibilityEvents()) {
+ std::string message("AccessibilityNotification - ");
+ message += event_name;
+
+ blink::WebNode node = obj.node();
+ if (!node.isNull() && node.isElementNode()) {
+ blink::WebElement element = node.to<blink::WebElement>();
+ if (element.hasAttribute("id")) {
+ message += " - id:";
+ message += element.getAttribute("id").utf8().data();
+ }
+ }
+
+ delegate_->printMessage(message + "\n");
+ }
+}
+
+void WebTestProxyBase::StartDragging(blink::WebLocalFrame* frame,
+ const blink::WebDragData& data,
+ blink::WebDragOperationsMask mask,
+ const blink::WebImage& image,
+ const blink::WebPoint& point) {
+ // When running a test, we need to fake a drag drop operation otherwise
+ // Windows waits for real mouse events to know when the drag is over.
+ test_interfaces_->eventSender()->DoDragDrop(data, mask);
+}
+
+// The output from these methods in layout test mode should match that
+// expected by the layout tests. See EditingDelegate.m in DumpRenderTree.
+
+void WebTestProxyBase::DidChangeSelection(bool is_empty_callback) {
+ if (test_interfaces_->testRunner()->shouldDumpEditingCallbacks())
+ delegate_->printMessage(
+ "EDITING DELEGATE: "
+ "webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n");
+}
+
+void WebTestProxyBase::DidChangeContents() {
+ if (test_interfaces_->testRunner()->shouldDumpEditingCallbacks())
+ delegate_->printMessage(
+ "EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n");
+}
+
+bool WebTestProxyBase::CreateView(blink::WebLocalFrame* frame,
+ const blink::WebURLRequest& request,
+ const blink::WebWindowFeatures& features,
+ const blink::WebString& frame_name,
+ blink::WebNavigationPolicy policy,
+ bool suppress_opener) {
+ if (!test_interfaces_->testRunner()->canOpenWindows())
+ return false;
+ if (test_interfaces_->testRunner()->shouldDumpCreateView())
+ delegate_->printMessage(std::string("createView(") +
+ URLDescription(request.url()) + ")\n");
+ return true;
+}
+
+blink::WebPlugin* WebTestProxyBase::CreatePlugin(
+ blink::WebLocalFrame* frame,
+ const blink::WebPluginParams& params) {
+ if (TestPlugin::isSupportedMimeType(params.mimeType))
+ return TestPlugin::create(frame, params, delegate_);
+ return 0;
+}
+
+void WebTestProxyBase::SetStatusText(const blink::WebString& text) {
+ if (!test_interfaces_->testRunner()->shouldDumpStatusCallbacks())
+ return;
+ delegate_->printMessage(
+ std::string("UI DELEGATE STATUS CALLBACK: setStatusText:") +
+ text.utf8().data() + "\n");
+}
+
+void WebTestProxyBase::DidStopLoading() {
+ if (test_interfaces_->testRunner()->shouldDumpProgressFinishedCallback())
+ delegate_->printMessage("postProgressFinishedNotification\n");
+}
+
+void WebTestProxyBase::ShowContextMenu(
+ blink::WebLocalFrame* frame,
+ const blink::WebContextMenuData& context_menu_data) {
+ test_interfaces_->eventSender()->SetContextMenuData(context_menu_data);
+}
+
+blink::WebUserMediaClient* WebTestProxyBase::GetUserMediaClient() {
+ if (!user_media_client_.get())
+ user_media_client_.reset(new WebUserMediaClientMock(delegate_));
+ return user_media_client_.get();
+}
+
+// Simulate a print by going into print mode and then exit straight away.
+void WebTestProxyBase::PrintPage(blink::WebLocalFrame* frame) {
+ blink::WebSize page_size_in_pixels = web_widget_->size();
+ if (page_size_in_pixels.isEmpty())
+ return;
+ blink::WebPrintParams printParams(page_size_in_pixels);
+ frame->printBegin(printParams);
+ frame->printEnd();
+}
+
+blink::WebNotificationPresenter* WebTestProxyBase::GetNotificationPresenter() {
+ return test_interfaces_->testRunner()->notification_presenter();
+}
+
+blink::WebMIDIClient* WebTestProxyBase::GetWebMIDIClient() {
+ return GetMIDIClientMock();
+}
+
+blink::WebSpeechRecognizer* WebTestProxyBase::GetSpeechRecognizer() {
+ return GetSpeechRecognizerMock();
+}
+
+bool WebTestProxyBase::RequestPointerLock() {
+ return test_interfaces_->testRunner()->RequestPointerLock();
+}
+
+void WebTestProxyBase::RequestPointerUnlock() {
+ test_interfaces_->testRunner()->RequestPointerUnlock();
+}
+
+bool WebTestProxyBase::IsPointerLocked() {
+ return test_interfaces_->testRunner()->isPointerLocked();
+}
+
+void WebTestProxyBase::DidFocus() {
+ delegate_->setFocus(this, true);
+}
+
+void WebTestProxyBase::DidBlur() {
+ delegate_->setFocus(this, false);
+}
+
+void WebTestProxyBase::SetToolTipText(const blink::WebString& text,
+ blink::WebTextDirection direction) {
+ test_interfaces_->testRunner()->setToolTipText(text);
+}
+
+void WebTestProxyBase::DidOpenChooser() {
+ chooser_count_++;
+}
+
+void WebTestProxyBase::DidCloseChooser() {
+ chooser_count_--;
+}
+
+bool WebTestProxyBase::IsChooserShown() {
+ return 0 < chooser_count_;
+}
+
+void WebTestProxyBase::LoadURLExternally(
+ blink::WebLocalFrame* frame,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationPolicy policy,
+ const blink::WebString& suggested_name) {
+ if (test_interfaces_->testRunner()->shouldWaitUntilExternalURLLoad()) {
+ if (policy == blink::WebNavigationPolicyDownload) {
+ delegate_->printMessage(
+ std::string("Downloading URL with suggested filename \"") +
+ suggested_name.utf8() + "\"\n");
+ } else {
+ delegate_->printMessage(std::string("Loading URL externally - \"") +
+ URLDescription(request.url()) + "\"\n");
+ }
+ delegate_->testFinished();
+ }
+}
+
+void WebTestProxyBase::DidStartProvisionalLoad(blink::WebLocalFrame* frame) {
+ if (!test_interfaces_->testRunner()->topLoadingFrame())
+ test_interfaces_->testRunner()->setTopLoadingFrame(frame, false);
+
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didStartProvisionalLoadForFrame\n");
+ }
+
+ if (test_interfaces_->testRunner()
+ ->shouldDumpUserGestureInFrameLoadCallbacks()) {
+ PrintFrameuserGestureStatus(
+ delegate_, frame, " - in didStartProvisionalLoadForFrame\n");
+ }
+}
+
+void WebTestProxyBase::DidReceiveServerRedirectForProvisionalLoad(
+ blink::WebLocalFrame* frame) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(
+ " - didReceiveServerRedirectForProvisionalLoadForFrame\n");
+ }
+}
+
+bool WebTestProxyBase::DidFailProvisionalLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didFailProvisionalLoadWithError\n");
+ }
+ LocationChangeDone(frame);
+ return !frame->provisionalDataSource();
+}
+
+void WebTestProxyBase::DidCommitProvisionalLoad(
+ blink::WebLocalFrame* frame,
+ const blink::WebHistoryItem& history_item,
+ blink::WebHistoryCommitType history_type) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didCommitLoadForFrame\n");
+ }
+}
+
+void WebTestProxyBase::DidReceiveTitle(blink::WebLocalFrame* frame,
+ const blink::WebString& title,
+ blink::WebTextDirection direction) {
+ blink::WebCString title8 = title.utf8();
+
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(std::string(" - didReceiveTitle: ") +
+ title8.data() + "\n");
+ }
+
+ if (test_interfaces_->testRunner()->shouldDumpTitleChanges())
+ delegate_->printMessage(std::string("TITLE CHANGED: '") + title8.data() +
+ "'\n");
+}
+
+void WebTestProxyBase::DidChangeIcon(blink::WebLocalFrame* frame,
+ blink::WebIconURL::Type icon_type) {
+ if (test_interfaces_->testRunner()->shouldDumpIconChanges()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(std::string(" - didChangeIcons\n"));
+ }
+}
+
+void WebTestProxyBase::DidFinishDocumentLoad(blink::WebLocalFrame* frame) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didFinishDocumentLoadForFrame\n");
+ } else {
+ unsigned pendingUnloadEvents = frame->unloadListenerCount();
+ if (pendingUnloadEvents) {
+ PrintFrameDescription(delegate_, frame);
+ char buffer[100];
+ snprintf(buffer,
+ sizeof(buffer),
+ " - has %u onunload handler(s)\n",
+ pendingUnloadEvents);
+ delegate_->printMessage(buffer);
+ }
+ }
+}
+
+void WebTestProxyBase::DidHandleOnloadEvents(blink::WebLocalFrame* frame) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didHandleOnloadEventsForFrame\n");
+ }
+}
+
+void WebTestProxyBase::DidFailLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didFailLoadWithError\n");
+ }
+ LocationChangeDone(frame);
+}
+
+void WebTestProxyBase::DidFinishLoad(blink::WebLocalFrame* frame) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(" - didFinishLoadForFrame\n");
+ }
+ LocationChangeDone(frame);
+}
+
+void WebTestProxyBase::DidDetectXSS(blink::WebLocalFrame* frame,
+ const blink::WebURL& insecure_url,
+ bool did_block_entire_page) {
+ if (test_interfaces_->testRunner()->shouldDumpFrameLoadCallbacks())
+ delegate_->printMessage("didDetectXSS\n");
+}
+
+void WebTestProxyBase::DidDispatchPingLoader(blink::WebLocalFrame* frame,
+ const blink::WebURL& url) {
+ if (test_interfaces_->testRunner()->shouldDumpPingLoaderCallbacks())
+ delegate_->printMessage(std::string("PingLoader dispatched to '") +
+ URLDescription(url).c_str() + "'.\n");
+}
+
+void WebTestProxyBase::WillRequestResource(
+ blink::WebLocalFrame* frame,
+ const blink::WebCachedURLRequest& request) {
+ if (test_interfaces_->testRunner()->shouldDumpResourceRequestCallbacks()) {
+ PrintFrameDescription(delegate_, frame);
+ delegate_->printMessage(std::string(" - ") +
+ request.initiatorName().utf8().data());
+ delegate_->printMessage(std::string(" requested '") +
+ URLDescription(request.urlRequest().url()).c_str() +
+ "'\n");
+ }
+}
+
+void WebTestProxyBase::WillSendRequest(
+ blink::WebLocalFrame* frame,
+ unsigned identifier,
+ blink::WebURLRequest& request,
+ const blink::WebURLResponse& redirect_response) {
+ // Need to use GURL for host() and SchemeIs()
+ GURL url = request.url();
+ std::string request_url = url.possibly_invalid_spec();
+
+ GURL main_document_url = request.firstPartyForCookies();
+
+ if (redirect_response.isNull() &&
+ (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks() ||
+ test_interfaces_->testRunner()->shouldDumpResourcePriorities())) {
+ DCHECK(resource_identifier_map_.find(identifier) ==
+ resource_identifier_map_.end());
+ resource_identifier_map_[identifier] =
+ DescriptionSuitableForTestResult(request_url);
+ }
+
+ if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) {
+ if (resource_identifier_map_.find(identifier) ==
+ resource_identifier_map_.end())
+ delegate_->printMessage("<unknown>");
+ else
+ delegate_->printMessage(resource_identifier_map_[identifier]);
+ delegate_->printMessage(" - willSendRequest <NSURLRequest URL ");
+ delegate_->printMessage(
+ DescriptionSuitableForTestResult(request_url).c_str());
+ delegate_->printMessage(", main document URL ");
+ delegate_->printMessage(URLDescription(main_document_url).c_str());
+ delegate_->printMessage(", http method ");
+ delegate_->printMessage(request.httpMethod().utf8().data());
+ delegate_->printMessage("> redirectResponse ");
+ PrintResponseDescription(delegate_, redirect_response);
+ delegate_->printMessage("\n");
+ }
+
+ if (test_interfaces_->testRunner()->shouldDumpResourcePriorities()) {
+ delegate_->printMessage(
+ DescriptionSuitableForTestResult(request_url).c_str());
+ delegate_->printMessage(" has priority ");
+ delegate_->printMessage(PriorityDescription(request.priority()));
+ delegate_->printMessage("\n");
+ }
+
+ if (test_interfaces_->testRunner()->httpHeadersToClear()) {
+ const std::set<std::string>* clearHeaders =
+ test_interfaces_->testRunner()->httpHeadersToClear();
+ for (std::set<std::string>::const_iterator header = clearHeaders->begin();
+ header != clearHeaders->end();
+ ++header)
+ request.clearHTTPHeaderField(blink::WebString::fromUTF8(*header));
+ }
+
+ std::string host = url.host();
+ if (!host.empty() && (url.SchemeIs("http") || url.SchemeIs("https"))) {
+ if (!IsLocalHost(host) && !HostIsUsedBySomeTestsToGenerateError(host) &&
+ ((!main_document_url.SchemeIs("http") &&
+ !main_document_url.SchemeIs("https")) ||
+ IsLocalHost(main_document_url.host())) &&
+ !delegate_->allowExternalPages()) {
+ delegate_->printMessage(std::string("Blocked access to external URL ") +
+ request_url + "\n");
+ BlockRequest(request);
+ return;
+ }
+ }
+
+ // Set the new substituted URL.
+ request.setURL(delegate_->rewriteLayoutTestsURL(request.url().spec()));
+}
+
+void WebTestProxyBase::DidReceiveResponse(
+ blink::WebLocalFrame* frame,
+ unsigned identifier,
+ const blink::WebURLResponse& response) {
+ if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) {
+ if (resource_identifier_map_.find(identifier) ==
+ resource_identifier_map_.end())
+ delegate_->printMessage("<unknown>");
+ else
+ delegate_->printMessage(resource_identifier_map_[identifier]);
+ delegate_->printMessage(" - didReceiveResponse ");
+ PrintResponseDescription(delegate_, response);
+ delegate_->printMessage("\n");
+ }
+ if (test_interfaces_->testRunner()->shouldDumpResourceResponseMIMETypes()) {
+ GURL url = response.url();
+ blink::WebString mime_type = response.mimeType();
+ delegate_->printMessage(url.ExtractFileName());
+ delegate_->printMessage(" has MIME type ");
+ // Simulate NSURLResponse's mapping of empty/unknown MIME types to
+ // application/octet-stream
+ delegate_->printMessage(mime_type.isEmpty() ? "application/octet-stream"
+ : mime_type.utf8().data());
+ delegate_->printMessage("\n");
+ }
+}
+
+void WebTestProxyBase::DidChangeResourcePriority(
+ blink::WebLocalFrame* frame,
+ unsigned identifier,
+ const blink::WebURLRequest::Priority& priority,
+ int intra_priority_value) {
+ if (test_interfaces_->testRunner()->shouldDumpResourcePriorities()) {
+ if (resource_identifier_map_.find(identifier) ==
+ resource_identifier_map_.end())
+ delegate_->printMessage("<unknown>");
+ else
+ delegate_->printMessage(resource_identifier_map_[identifier]);
+ delegate_->printMessage(" changed priority to ");
+ delegate_->printMessage(PriorityDescription(priority));
+ char buffer[64];
+ snprintf(
+ buffer, sizeof(buffer), ", intra_priority %d", intra_priority_value);
+ delegate_->printMessage(buffer);
+ delegate_->printMessage("\n");
+ }
+}
+
+void WebTestProxyBase::DidFinishResourceLoad(blink::WebLocalFrame* frame,
+ unsigned identifier) {
+ if (test_interfaces_->testRunner()->shouldDumpResourceLoadCallbacks()) {
+ if (resource_identifier_map_.find(identifier) ==
+ resource_identifier_map_.end())
+ delegate_->printMessage("<unknown>");
+ else
+ delegate_->printMessage(resource_identifier_map_[identifier]);
+ delegate_->printMessage(" - didFinishLoading\n");
+ }
+ resource_identifier_map_.erase(identifier);
+}
+
+void WebTestProxyBase::DidAddMessageToConsole(
+ const blink::WebConsoleMessage& message,
+ const blink::WebString& source_name,
+ unsigned source_line) {
+ // This matches win DumpRenderTree's UIDelegate.cpp.
+ if (!log_console_output_)
+ return;
+ std::string level;
+ switch (message.level) {
+ case blink::WebConsoleMessage::LevelDebug:
+ level = "DEBUG";
+ break;
+ case blink::WebConsoleMessage::LevelLog:
+ level = "MESSAGE";
+ break;
+ case blink::WebConsoleMessage::LevelInfo:
+ level = "INFO";
+ break;
+ case blink::WebConsoleMessage::LevelWarning:
+ level = "WARNING";
+ break;
+ case blink::WebConsoleMessage::LevelError:
+ level = "ERROR";
+ break;
+ }
+ delegate_->printMessage(std::string("CONSOLE ") + level + ": ");
+ if (source_line) {
+ char buffer[40];
+ snprintf(buffer, sizeof(buffer), "line %d: ", source_line);
+ delegate_->printMessage(buffer);
+ }
+ if (!message.text.isEmpty()) {
+ std::string new_message;
+ new_message = message.text.utf8();
+ size_t file_protocol = new_message.find("file://");
+ if (file_protocol != std::string::npos) {
+ new_message = new_message.substr(0, file_protocol) +
+ URLSuitableForTestResult(new_message.substr(file_protocol));
+ }
+ delegate_->printMessage(new_message);
+ }
+ delegate_->printMessage(std::string("\n"));
+}
+
+void WebTestProxyBase::LocationChangeDone(blink::WebFrame* frame) {
+ if (frame != test_interfaces_->testRunner()->topLoadingFrame())
+ return;
+ test_interfaces_->testRunner()->setTopLoadingFrame(frame, true);
+}
+
+blink::WebNavigationPolicy WebTestProxyBase::DecidePolicyForNavigation(
+ blink::WebLocalFrame* frame,
+ blink::WebDataSource::ExtraData* data,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationType type,
+ blink::WebNavigationPolicy default_policy,
+ bool is_redirect) {
+ blink::WebNavigationPolicy result;
+ if (!test_interfaces_->testRunner()->policyDelegateEnabled())
+ return default_policy;
+
+ delegate_->printMessage(std::string("Policy delegate: attempt to load ") +
+ URLDescription(request.url()) +
+ " with navigation type '" +
+ WebNavigationTypeToString(type) + "'\n");
+ if (test_interfaces_->testRunner()->policyDelegateIsPermissive())
+ result = blink::WebNavigationPolicyCurrentTab;
+ else
+ result = blink::WebNavigationPolicyIgnore;
+
+ if (test_interfaces_->testRunner()->policyDelegateShouldNotifyDone())
+ test_interfaces_->testRunner()->policyDelegateDone();
+ return result;
+}
+
+bool WebTestProxyBase::WillCheckAndDispatchMessageEvent(
+ blink::WebLocalFrame* source_frame,
+ blink::WebFrame* target_frame,
+ blink::WebSecurityOrigin target,
+ blink::WebDOMMessageEvent event) {
+ if (test_interfaces_->testRunner()->shouldInterceptPostMessage()) {
+ delegate_->printMessage("intercepted postMessage\n");
+ return true;
+ }
+
+ return false;
+}
+
+void WebTestProxyBase::PostSpellCheckEvent(const blink::WebString& event_name) {
+ if (test_interfaces_->testRunner()->shouldDumpSpellCheckCallbacks()) {
+ delegate_->printMessage(std::string("SpellCheckEvent: ") +
+ event_name.utf8().data() + "\n");
+ }
+}
+
+void WebTestProxyBase::ResetInputMethod() {
+ // If a composition text exists, then we need to let the browser process
+ // to cancel the input method's ongoing composition session.
+ if (web_widget_)
+ web_widget_->confirmComposition();
+}
+
+blink::WebString WebTestProxyBase::acceptLanguages() {
+ return blink::WebString::fromUTF8(accept_languages_);
+}
+
+} // namespace content
diff --git a/content/shell/renderer/test_runner/web_test_proxy.h b/content/shell/renderer/test_runner/web_test_proxy.h
new file mode 100644
index 0000000000..605362ae83
--- /dev/null
+++ b/content/shell/renderer/test_runner/web_test_proxy.h
@@ -0,0 +1,389 @@
+// 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.
+
+#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_TEST_PROXY_H_
+#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_TEST_PROXY_H_
+
+#include <deque>
+#include <map>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/shell/renderer/test_runner/WebTask.h"
+#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h"
+#include "third_party/WebKit/public/platform/WebRect.h"
+#include "third_party/WebKit/public/platform/WebURLError.h"
+#include "third_party/WebKit/public/platform/WebURLRequest.h"
+#include "third_party/WebKit/public/web/WebAXEnums.h"
+#include "third_party/WebKit/public/web/WebDOMMessageEvent.h"
+#include "third_party/WebKit/public/web/WebDataSource.h"
+#include "third_party/WebKit/public/web/WebDragOperation.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebHistoryCommitType.h"
+#include "third_party/WebKit/public/web/WebIconURL.h"
+#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
+#include "third_party/WebKit/public/web/WebNavigationType.h"
+#include "third_party/WebKit/public/web/WebSecurityOrigin.h"
+#include "third_party/WebKit/public/web/WebTextAffinity.h"
+#include "third_party/WebKit/public/web/WebTextDirection.h"
+
+class SkCanvas;
+
+namespace blink {
+class WebAXObject;
+class WebAudioDevice;
+class WebCachedURLRequest;
+class WebColorChooser;
+class WebColorChooserClient;
+class WebDataSource;
+class WebDragData;
+class WebFileChooserCompletion;
+class WebFrame;
+class WebImage;
+class WebLocalFrame;
+class WebMIDIAccessor;
+class WebMIDIAccessorClient;
+class WebMIDIClient;
+class WebMIDIClientMock;
+class WebNode;
+class WebNotificationPresenter;
+class WebPlugin;
+class WebRange;
+class WebSerializedScriptValue;
+class WebSpeechRecognizer;
+class WebSpellCheckClient;
+class WebString;
+class WebURL;
+class WebURLResponse;
+class WebUserMediaClient;
+class WebView;
+class WebWidget;
+struct WebColorSuggestion;
+struct WebConsoleMessage;
+struct WebContextMenuData;
+struct WebFileChooserParams;
+struct WebPluginParams;
+struct WebPoint;
+struct WebSize;
+struct WebWindowFeatures;
+typedef unsigned WebColor;
+}
+
+namespace content {
+
+class MockWebSpeechRecognizer;
+class RenderFrame;
+class SpellCheckClient;
+class TestInterfaces;
+class WebTestDelegate;
+class WebTestInterfaces;
+class WebUserMediaClientMock;
+
+// WebTestProxyBase is the "brain" of WebTestProxy in the sense that
+// WebTestProxy does the bridge between RenderViewImpl and WebTestProxyBase and
+// when it requires a behavior to be different from the usual, it will call
+// WebTestProxyBase that implements the expected behavior.
+// See WebTestProxy class comments for more information.
+class WebTestProxyBase : public blink::WebCompositeAndReadbackAsyncCallback {
+ public:
+ void SetInterfaces(WebTestInterfaces* interfaces);
+ void SetDelegate(WebTestDelegate* delegate);
+ void set_widget(blink::WebWidget* widget) { web_widget_ = widget; }
+
+ void Reset();
+
+ blink::WebSpellCheckClient* GetSpellCheckClient() const;
+ blink::WebColorChooser* CreateColorChooser(
+ blink::WebColorChooserClient* client,
+ const blink::WebColor& color,
+ const blink::WebVector<blink::WebColorSuggestion>& suggestions);
+ bool RunFileChooser(const blink::WebFileChooserParams& params,
+ blink::WebFileChooserCompletion* completion);
+ void ShowValidationMessage(const blink::WebRect& anchor_in_root_view,
+ const blink::WebString& message,
+ const blink::WebString& sub_message,
+ blink::WebTextDirection hint);
+ void HideValidationMessage();
+ void MoveValidationMessage(const blink::WebRect& anchor_in_root_view);
+
+ std::string CaptureTree(bool debug_render_tree);
+ void CapturePixelsForPrinting(
+ const base::Callback<void(const SkBitmap&)>& callback);
+ void CapturePixelsAsync(
+ const base::Callback<void(const SkBitmap&)>& callback);
+
+ void SetLogConsoleOutput(bool enabled);
+
+ void DidOpenChooser();
+ void DidCloseChooser();
+ bool IsChooserShown();
+
+ void DisplayAsyncThen(const base::Closure& callback);
+
+ blink::WebMIDIClientMock* GetMIDIClientMock();
+ MockWebSpeechRecognizer* GetSpeechRecognizerMock();
+
+ WebTaskList* mutable_task_list() { return &task_list_; }
+
+ blink::WebView* GetWebView() const;
+
+ void PostSpellCheckEvent(const blink::WebString& event_name);
+
+ // WebCompositeAndReadbackAsyncCallback implementation.
+ virtual void didCompositeAndReadback(const SkBitmap& bitmap);
+
+ void SetAcceptLanguages(const std::string& accept_languages);
+
+ protected:
+ WebTestProxyBase();
+ ~WebTestProxyBase();
+
+ void ScheduleAnimation();
+ void PostAccessibilityEvent(const blink::WebAXObject&, blink::WebAXEvent);
+ void StartDragging(blink::WebLocalFrame* frame,
+ const blink::WebDragData& data,
+ blink::WebDragOperationsMask mask,
+ const blink::WebImage& image,
+ const blink::WebPoint& point);
+ void DidChangeSelection(bool isEmptySelection);
+ void DidChangeContents();
+ void DidEndEditing();
+ bool CreateView(blink::WebLocalFrame* creator,
+ const blink::WebURLRequest& request,
+ const blink::WebWindowFeatures& features,
+ const blink::WebString& frame_name,
+ blink::WebNavigationPolicy policy,
+ bool suppress_opener);
+ blink::WebPlugin* CreatePlugin(blink::WebLocalFrame* frame,
+ const blink::WebPluginParams& params);
+ void SetStatusText(const blink::WebString& text);
+ void DidStopLoading();
+ void ShowContextMenu(blink::WebLocalFrame* frame,
+ const blink::WebContextMenuData& data);
+ blink::WebUserMediaClient* GetUserMediaClient();
+ void PrintPage(blink::WebLocalFrame* frame);
+ blink::WebNotificationPresenter* GetNotificationPresenter();
+ blink::WebMIDIClient* GetWebMIDIClient();
+ blink::WebSpeechRecognizer* GetSpeechRecognizer();
+ bool RequestPointerLock();
+ void RequestPointerUnlock();
+ bool IsPointerLocked();
+ void DidFocus();
+ void DidBlur();
+ void SetToolTipText(const blink::WebString& text,
+ blink::WebTextDirection direction);
+ void DidAddMessageToConsole(const blink::WebConsoleMessage& text,
+ const blink::WebString& source_name,
+ unsigned source_line);
+ void LoadURLExternally(blink::WebLocalFrame* frame,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationPolicy policy,
+ const blink::WebString& suggested_name);
+ void DidStartProvisionalLoad(blink::WebLocalFrame*);
+ void DidReceiveServerRedirectForProvisionalLoad(blink::WebLocalFrame* frame);
+ bool DidFailProvisionalLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error);
+ void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
+ const blink::WebHistoryItem& history_item,
+ blink::WebHistoryCommitType history_type);
+ void DidReceiveTitle(blink::WebLocalFrame* frame,
+ const blink::WebString& title,
+ blink::WebTextDirection text_direction);
+ void DidChangeIcon(blink::WebLocalFrame* frame,
+ blink::WebIconURL::Type icon_type);
+ void DidFinishDocumentLoad(blink::WebLocalFrame* frame);
+ void DidHandleOnloadEvents(blink::WebLocalFrame* frame);
+ void DidFailLoad(blink::WebLocalFrame* frame,
+ const blink::WebURLError& error);
+ void DidFinishLoad(blink::WebLocalFrame* frame);
+ void DidChangeLocationWithinPage(blink::WebLocalFrame* frame);
+ void DidDetectXSS(blink::WebLocalFrame* frame,
+ const blink::WebURL& insecure_url,
+ bool did_block_entire_page);
+ void DidDispatchPingLoader(blink::WebLocalFrame* frame,
+ const blink::WebURL& url);
+ void WillRequestResource(blink::WebLocalFrame* frame,
+ const blink::WebCachedURLRequest& url_request);
+ void WillSendRequest(blink::WebLocalFrame* frame,
+ unsigned identifier,
+ blink::WebURLRequest& request,
+ const blink::WebURLResponse& redirect_response);
+ void DidReceiveResponse(blink::WebLocalFrame* frame,
+ unsigned identifier,
+ const blink::WebURLResponse& response);
+ void DidChangeResourcePriority(blink::WebLocalFrame* frame,
+ unsigned identifier,
+ const blink::WebURLRequest::Priority& priority,
+ int intra_priority_value);
+ void DidFinishResourceLoad(blink::WebLocalFrame* frame, unsigned identifier);
+ blink::WebNavigationPolicy DecidePolicyForNavigation(
+ blink::WebLocalFrame* frame,
+ blink::WebDataSource::ExtraData* data,
+ const blink::WebURLRequest& request,
+ blink::WebNavigationType navigation_type,
+ blink::WebNavigationPolicy default_policy,
+ bool is_redirect);
+ bool WillCheckAndDispatchMessageEvent(blink::WebLocalFrame* source_frame,
+ blink::WebFrame* target_frame,
+ blink::WebSecurityOrigin target,
+ blink::WebDOMMessageEvent event);
+ void ResetInputMethod();
+
+ blink::WebString acceptLanguages();
+
+ private:
+ template <class, typename, typename>
+ friend class WebFrameTestProxy;
+ void LocationChangeDone(blink::WebFrame* frame);
+ void AnimateNow();
+ void DrawSelectionRect(SkCanvas* canvas);
+ void DidDisplayAsync(const base::Closure& callback, const SkBitmap& bitmap);
+
+ blink::WebWidget* web_widget() const { return web_widget_; }
+
+ TestInterfaces* test_interfaces_;
+ WebTestDelegate* delegate_;
+ blink::WebWidget* web_widget_;
+
+ WebTaskList task_list_;
+
+ scoped_ptr<SpellCheckClient> spellcheck_;
+ scoped_ptr<WebUserMediaClientMock> user_media_client_;
+
+ bool animate_scheduled_;
+ std::map<unsigned, std::string> resource_identifier_map_;
+ std::deque<base::Callback<void(const SkBitmap&)> >
+ composite_and_readback_callbacks_;
+
+ bool log_console_output_;
+ int chooser_count_;
+
+ scoped_ptr<blink::WebMIDIClientMock> midi_client_;
+ scoped_ptr<MockWebSpeechRecognizer> speech_recognizer_;
+
+ std::string accept_languages_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WebTestProxyBase);
+};
+
+// WebTestProxy is used during LayoutTests and always instantiated, at time of
+// writing with Base=RenderViewImpl. It does not directly inherit from it for
+// layering purposes.
+// The intent of that class is to wrap RenderViewImpl for tests purposes in
+// order to reduce the amount of test specific code in the production code.
+// WebTestProxy is only doing the glue between RenderViewImpl and
+// WebTestProxyBase, that means that there is no logic living in this class
+// except deciding which base class should be called (could be both).
+//
+// Examples of usage:
+// * when a fooClient has a mock implementation, WebTestProxy can override the
+// fooClient() call and have WebTestProxyBase return the mock implementation.
+// * when a value needs to be overridden by LayoutTests, WebTestProxy can
+// override RenderViewImpl's getter and call a getter from WebTestProxyBase
+// instead. In addition, WebTestProxyBase will have a public setter that
+// could be called from the TestRunner.
+template <class Base, typename T>
+class WebTestProxy : public Base, public WebTestProxyBase {
+ public:
+ explicit WebTestProxy(T t) : Base(t) {}
+
+ virtual ~WebTestProxy() {}
+
+ // WebViewClient implementation.
+ virtual void scheduleAnimation() { WebTestProxyBase::ScheduleAnimation(); }
+ virtual void postAccessibilityEvent(const blink::WebAXObject& object,
+ blink::WebAXEvent event) {
+ WebTestProxyBase::PostAccessibilityEvent(object, event);
+ Base::postAccessibilityEvent(object, event);
+ }
+ virtual void startDragging(blink::WebLocalFrame* frame,
+ const blink::WebDragData& data,
+ blink::WebDragOperationsMask mask,
+ const blink::WebImage& image,
+ const blink::WebPoint& point) {
+ WebTestProxyBase::StartDragging(frame, data, mask, image, point);
+ // Don't forward this call to Base because we don't want to do a real
+ // drag-and-drop.
+ }
+ virtual void didChangeContents() {
+ WebTestProxyBase::DidChangeContents();
+ Base::didChangeContents();
+ }
+ virtual blink::WebView* createView(blink::WebLocalFrame* creator,
+ const blink::WebURLRequest& request,
+ const blink::WebWindowFeatures& features,
+ const blink::WebString& frame_name,
+ blink::WebNavigationPolicy policy,
+ bool suppress_opener) {
+ if (!WebTestProxyBase::CreateView(
+ creator, request, features, frame_name, policy, suppress_opener))
+ return 0;
+ return Base::createView(
+ creator, request, features, frame_name, policy, suppress_opener);
+ }
+ virtual void setStatusText(const blink::WebString& text) {
+ WebTestProxyBase::SetStatusText(text);
+ Base::setStatusText(text);
+ }
+ virtual blink::WebUserMediaClient* userMediaClient() {
+ return WebTestProxyBase::GetUserMediaClient();
+ }
+ virtual void printPage(blink::WebLocalFrame* frame) {
+ WebTestProxyBase::PrintPage(frame);
+ }
+ virtual blink::WebMIDIClient* webMIDIClient() {
+ return WebTestProxyBase::GetWebMIDIClient();
+ }
+ virtual blink::WebSpeechRecognizer* speechRecognizer() {
+ return WebTestProxyBase::GetSpeechRecognizer();
+ }
+ virtual bool requestPointerLock() {
+ return WebTestProxyBase::RequestPointerLock();
+ }
+ virtual void requestPointerUnlock() {
+ WebTestProxyBase::RequestPointerUnlock();
+ }
+ virtual bool isPointerLocked() { return WebTestProxyBase::IsPointerLocked(); }
+ virtual void didFocus() {
+ WebTestProxyBase::DidFocus();
+ Base::didFocus();
+ }
+ virtual void didBlur() {
+ WebTestProxyBase::DidBlur();
+ Base::didBlur();
+ }
+ virtual void setToolTipText(const blink::WebString& text,
+ blink::WebTextDirection hint) {
+ WebTestProxyBase::SetToolTipText(text, hint);
+ Base::setToolTipText(text, hint);
+ }
+ virtual void resetInputMethod() { WebTestProxyBase::ResetInputMethod(); }
+ virtual bool runFileChooser(const blink::WebFileChooserParams& params,
+ blink::WebFileChooserCompletion* completion) {
+ return WebTestProxyBase::RunFileChooser(params, completion);
+ }
+ virtual void showValidationMessage(const blink::WebRect& anchor_in_root_view,
+ const blink::WebString& message,
+ const blink::WebString& sub_message,
+ blink::WebTextDirection hint) {
+ WebTestProxyBase::ShowValidationMessage(
+ anchor_in_root_view, message, sub_message, hint);
+ }
+ virtual void postSpellCheckEvent(const blink::WebString& event_name) {
+ WebTestProxyBase::PostSpellCheckEvent(event_name);
+ }
+ virtual blink::WebString acceptLanguages() {
+ return WebTestProxyBase::acceptLanguages();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WebTestProxy);
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEB_TEST_PROXY_H_
diff --git a/content/shell/renderer/test_runner/web_test_runner.h b/content/shell/renderer/test_runner/web_test_runner.h
new file mode 100644
index 0000000000..b15c056a90
--- /dev/null
+++ b/content/shell/renderer/test_runner/web_test_runner.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
+#define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
+
+#include <vector>
+
+namespace blink {
+class WebPermissionClient;
+}
+
+namespace content {
+
+class WebTestRunner {
+ public:
+ // Returns a mock WebPermissionClient that is used for layout tests. An
+ // embedder should use this for all WebViews it creates.
+ virtual blink::WebPermissionClient* GetWebPermissions() const = 0;
+
+ // After WebTestDelegate::testFinished was invoked, the following methods
+ // can be used to determine what kind of dump the main WebTestProxy can
+ // provide.
+
+ // If true, WebTestDelegate::audioData returns an audio dump and no text
+ // or pixel results are available.
+ virtual bool ShouldDumpAsAudio() const = 0;
+ virtual void GetAudioData(std::vector<unsigned char>* buffer_view) const = 0;
+
+ // Returns true if the call to WebTestProxy::captureTree will invoke
+ // WebTestDelegate::captureHistoryForWindow.
+ virtual bool ShouldDumpBackForwardList() const = 0;
+
+ // Returns true if WebTestProxy::capturePixels should be invoked after
+ // capturing text results.
+ virtual bool ShouldGeneratePixelResults() = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTRUNNER_H_
diff --git a/content/shell/renderer/webkit_test_runner.cc b/content/shell/renderer/webkit_test_runner.cc
index e82c4234e5..ea9946558b 100644
--- a/content/shell/renderer/webkit_test_runner.cc
+++ b/content/shell/renderer/webkit_test_runner.cc
@@ -33,8 +33,8 @@
#include "content/shell/renderer/shell_render_process_observer.h"
#include "content/shell/renderer/test_runner/WebTask.h"
#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
-#include "content/shell/renderer/test_runner/WebTestRunner.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
+#include "content/shell/renderer/test_runner/web_test_runner.h"
#include "net/base/filename_util.h"
#include "net/base/net_errors.h"
#include "skia/ext/platform_canvas.h"
@@ -98,32 +98,6 @@ void InvokeTaskHelper(void* context) {
delete task;
}
-#if !defined(OS_MACOSX)
-void MakeBitmapOpaque(SkBitmap* bitmap) {
- SkAutoLockPixels lock(*bitmap);
- DCHECK_EQ(bitmap->config(), SkBitmap::kARGB_8888_Config);
- for (int y = 0; y < bitmap->height(); ++y) {
- uint32_t* row = bitmap->getAddr32(0, y);
- for (int x = 0; x < bitmap->width(); ++x)
- row[x] |= 0xFF000000; // Set alpha bits to 1.
- }
-}
-#endif
-
-void CopyCanvasToBitmap(SkCanvas* canvas, SkBitmap* snapshot) {
- SkBaseDevice* device = skia::GetTopDevice(*canvas);
- const SkBitmap& bitmap = device->accessBitmap(false);
- const bool success = bitmap.copyTo(snapshot, kPMColor_SkColorType);
- DCHECK(success);
-
-#if !defined(OS_MACOSX)
- // Only the expected PNGs for Mac have a valid alpha channel.
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableOverlayFullscreenVideo))
- MakeBitmapOpaque(snapshot);
-#endif
-}
-
class SyncNavigationStateVisitor : public RenderViewVisitor {
public:
SyncNavigationStateVisitor() {}
@@ -254,7 +228,11 @@ void WebKitTestRunner::setDeviceOrientationData(
void WebKitTestRunner::setScreenOrientation(
const WebScreenOrientationType& orientation) {
- SetMockScreenOrientation(orientation);
+ SetMockScreenOrientation(render_view(), orientation);
+}
+
+void WebKitTestRunner::resetScreenOrientation() {
+ ResetMockScreenOrientation();
}
void WebKitTestRunner::printMessage(const std::string& message) {
@@ -498,7 +476,7 @@ void WebKitTestRunner::testFinished() {
WebTestInterfaces* interfaces =
ShellRenderProcessObserver::GetInstance()->test_interfaces();
interfaces->setTestIsRunning(false);
- if (interfaces->testRunner()->shouldDumpBackForwardList()) {
+ if (interfaces->testRunner()->ShouldDumpBackForwardList()) {
SyncNavigationStateVisitor visitor;
RenderView::ForEach(&visitor);
Send(new ShellViewHostMsg_CaptureSessionHistory(routing_id()));
@@ -562,13 +540,10 @@ std::string WebKitTestRunner::dumpHistoryForWindow(WebTestProxyBase* proxy) {
// RenderViewObserver --------------------------------------------------------
-void WebKitTestRunner::DidClearWindowObject(WebLocalFrame* frame,
- int world_id) {
+void WebKitTestRunner::DidClearWindowObject(WebLocalFrame* frame) {
WebTestingSupport::injectInternalsObject(frame);
- if (world_id == 0) {
- ShellRenderProcessObserver::GetInstance()->test_interfaces()->bindTo(frame);
- GCController::Install(frame);
- }
+ ShellRenderProcessObserver::GetInstance()->test_interfaces()->bindTo(frame);
+ GCController::Install(frame);
}
bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) {
@@ -615,8 +590,8 @@ void WebKitTestRunner::DidFailProvisionalLoad(WebLocalFrame* frame,
void WebKitTestRunner::Reset() {
// The proxy_ is always non-NULL, it is set right after construction.
- proxy_->setWidget(render_view()->GetWebView());
- proxy_->reset();
+ proxy_->set_widget(render_view()->GetWebView());
+ proxy_->Reset();
prefs_.Reset();
routing_ids_.clear();
session_histories_.clear();
@@ -642,25 +617,19 @@ void WebKitTestRunner::CaptureDump() {
ShellRenderProcessObserver::GetInstance()->test_interfaces();
TRACE_EVENT0("shell", "WebKitTestRunner::CaptureDump");
- if (interfaces->testRunner()->shouldDumpAsAudio()) {
+ if (interfaces->testRunner()->ShouldDumpAsAudio()) {
std::vector<unsigned char> vector_data;
- interfaces->testRunner()->getAudioData(&vector_data);
+ interfaces->testRunner()->GetAudioData(&vector_data);
Send(new ShellViewHostMsg_AudioDump(routing_id(), vector_data));
} else {
Send(new ShellViewHostMsg_TextDump(routing_id(),
- proxy()->captureTree(false)));
+ proxy()->CaptureTree(false)));
if (test_config_.enable_pixel_dumping &&
- interfaces->testRunner()->shouldGeneratePixelResults()) {
- // TODO(danakj): Remove when kForceCompositingMode is everywhere.
- if (!render_view()->GetWebView()->isAcceleratedCompositingActive()) {
- SkBitmap snapshot;
- CopyCanvasToBitmap(proxy()->capturePixels(), &snapshot);
- CaptureDumpPixels(snapshot);
- } else {
- proxy()->CapturePixelsAsync(base::Bind(
- &WebKitTestRunner::CaptureDumpPixels, base::Unretained(this)));
- }
+ interfaces->testRunner()->ShouldGeneratePixelResults()) {
+ CHECK(render_view()->GetWebView()->isAcceleratedCompositingActive());
+ proxy()->CapturePixelsAsync(base::Bind(
+ &WebKitTestRunner::CaptureDumpPixels, base::Unretained(this)));
return;
}
}
diff --git a/content/shell/renderer/webkit_test_runner.h b/content/shell/renderer/webkit_test_runner.h
index 55471bc05e..2ea15e47cb 100644
--- a/content/shell/renderer/webkit_test_runner.h
+++ b/content/shell/renderer/webkit_test_runner.h
@@ -43,8 +43,7 @@ class WebKitTestRunner : public RenderViewObserver,
// RenderViewObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- virtual void DidClearWindowObject(blink::WebLocalFrame* frame,
- int world_id) OVERRIDE;
+ virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE;
virtual void Navigate(const GURL& url) OVERRIDE;
virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
bool is_new_navigation) OVERRIDE;
@@ -66,6 +65,7 @@ class WebKitTestRunner : public RenderViewObserver,
const blink::WebDeviceOrientationData& data) OVERRIDE;
virtual void setScreenOrientation(
const blink::WebScreenOrientationType& orientation) OVERRIDE;
+ virtual void resetScreenOrientation() OVERRIDE;
virtual void printMessage(const std::string& message) OVERRIDE;
virtual void postTask(WebTask* task) OVERRIDE;
virtual void postDelayedTask(WebTask* task, long long ms) OVERRIDE;
diff --git a/content/shell/tools/breakpad_integration_test.py b/content/shell/tools/breakpad_integration_test.py
new file mode 100755
index 0000000000..c9742fe589
--- /dev/null
+++ b/content/shell/tools/breakpad_integration_test.py
@@ -0,0 +1,147 @@
+#!/usr/bin/env python
+#
+# 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.
+
+"""Integration test for breakpad in content shell.
+
+This test checks that content shell and breakpad are correctly hooked up, as
+well as that the tools can symbolize a stack trace."""
+
+
+import glob
+import optparse
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+
+CONCURRENT_TASKS=4
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option('', '--build-dir', default='',
+ help='The build output directory.')
+ parser.add_option('', '--binary', default='',
+ help='The path of the binary to generate symbols for.')
+ parser.add_option('', '--no-symbols', default=False, action='store_true',
+ help='Symbols are not expected to work.')
+ parser.add_option('-j', '--jobs', default=CONCURRENT_TASKS, action='store',
+ type='int', help='Number of parallel tasks to run.')
+ parser.add_option('-v', '--verbose', action='store_true',
+ help='Print verbose status output.')
+
+ (options, _) = parser.parse_args()
+
+ if not options.build_dir:
+ print "Required option --build-dir missing."
+ return 1
+
+ if not options.binary:
+ print "Required option --binary missing."
+ return 1
+
+ if not os.access(options.binary, os.X_OK):
+ print "Cannot find %s." % options.binary
+ return 1
+
+ failure = ''
+
+ # Create a temporary directory to store the crash dumps and symbols in.
+ crash_dir = tempfile.mkdtemp()
+
+ try:
+ print "# Generate symbols."
+ breakpad_tools_dir = os.path.join(
+ os.path.dirname(__file__), '..', '..', '..',
+ 'components', 'breakpad', 'tools')
+ generate_symbols = os.path.join(
+ breakpad_tools_dir, 'generate_breakpad_symbols.py')
+ symbols_dir = os.path.join(crash_dir, 'symbols')
+ cmd = [generate_symbols,
+ '--build-dir=%s' % options.build_dir,
+ '--binary=%s' % options.binary,
+ '--symbols-dir=%s' % symbols_dir,
+ '--jobs=%d' % options.jobs]
+ if options.verbose:
+ cmd.append('--verbose')
+ print ' '.join(cmd)
+ failure = 'Failed to run generate_breakpad_symbols.py.'
+ subprocess.check_call(cmd)
+
+ print "# Run content_shell and make it crash."
+ cmd = [options.binary,
+ '--dump-render-tree',
+ 'chrome://crash',
+ '--enable-crash-reporter',
+ '--crash-dumps-dir=%s' % crash_dir]
+ if options.verbose:
+ print ' '.join(cmd)
+ failure = 'Failed to run content_shell.'
+ if options.verbose:
+ subprocess.check_call(cmd)
+ else:
+ with open(os.devnull, 'w') as devnull:
+ subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
+
+ print "# Retrieve crash dump."
+ dmp_files = glob.glob(os.path.join(crash_dir, '*.dmp'))
+ failure = 'Expected 1 crash dump, found %d.' % len(dmp_files)
+ if len(dmp_files) != 1:
+ raise Exception(failure)
+ dmp_file = dmp_files[0]
+ minidump = os.path.join(crash_dir, 'minidump')
+
+ dmp_to_minidump = os.path.join(breakpad_tools_dir, 'dmp2minidump.py')
+ cmd = [dmp_to_minidump, dmp_file, minidump]
+ if options.verbose:
+ print ' '.join(cmd)
+ failure = 'Failed to run dmp_to_minidump.'
+ subprocess.check_call(cmd)
+
+ print "# Symbolize crash dump."
+ minidump_stackwalk = os.path.join(options.build_dir, 'minidump_stackwalk')
+ cmd = [minidump_stackwalk, minidump, symbols_dir]
+ if options.verbose:
+ print ' '.join(cmd)
+ failure = 'Failed to run minidump_stackwalk.'
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stack = proc.communicate()[0]
+
+ # Check whether the stack contains a CrashIntentionally symbol.
+ found_symbol = 'CrashIntentionally' in stack
+
+ if options.no_symbols:
+ if found_symbol:
+ if options.verbose:
+ print stack
+ failure = 'Found unexpected reference to CrashIntentionally in stack'
+ raise Exception(failure)
+ else:
+ if not found_symbol:
+ if options.verbose:
+ print stack
+ failure = 'Could not find reference to CrashIntentionally in stack.'
+ raise Exception(failure)
+
+ except:
+ print "FAIL: %s" % failure
+ return 1
+
+ else:
+ print "PASS: Breakpad integration test ran successfully."
+ return 0
+
+ finally:
+ try:
+ shutil.rmtree(crash_dir)
+ except:
+ print 'Failed to delete temp directory "%s".' % crash_dir
+
+
+if '__main__' == __name__:
+ sys.exit(main())
diff --git a/content/speech_recognition_error_java.target.darwin-arm.mk b/content/speech_recognition_error_java.target.darwin-arm.mk
index 4f0bbaf7e4..92a3fd2c46 100644
--- a/content/speech_recognition_error_java.target.darwin-arm.mk
+++ b/content/speech_recognition_error_java.target.darwin-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.darwin-arm64.mk b/content/speech_recognition_error_java.target.darwin-arm64.mk
index de843f21ca..702f789981 100644
--- a/content/speech_recognition_error_java.target.darwin-arm64.mk
+++ b/content/speech_recognition_error_java.target.darwin-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.darwin-mips.mk b/content/speech_recognition_error_java.target.darwin-mips.mk
index afe9b6b782..7270eb92f2 100644
--- a/content/speech_recognition_error_java.target.darwin-mips.mk
+++ b/content/speech_recognition_error_java.target.darwin-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.darwin-x86.mk b/content/speech_recognition_error_java.target.darwin-x86.mk
index 1b8207c8cf..13ec180e50 100644
--- a/content/speech_recognition_error_java.target.darwin-x86.mk
+++ b/content/speech_recognition_error_java.target.darwin-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.darwin-x86_64.mk b/content/speech_recognition_error_java.target.darwin-x86_64.mk
index b0a1299a80..f0948c3ba3 100644
--- a/content/speech_recognition_error_java.target.darwin-x86_64.mk
+++ b/content/speech_recognition_error_java.target.darwin-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.linux-arm.mk b/content/speech_recognition_error_java.target.linux-arm.mk
index 4f0bbaf7e4..92a3fd2c46 100644
--- a/content/speech_recognition_error_java.target.linux-arm.mk
+++ b/content/speech_recognition_error_java.target.linux-arm.mk
@@ -53,7 +53,14 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -86,12 +93,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,7 +150,14 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-fno-tree-sra \
+ -fno-partial-inlining \
+ -fno-early-inlining \
+ -fno-tree-copy-prop \
+ -fno-tree-loop-optimize \
+ -fno-move-loop-invariants \
+ -fno-caller-saves \
-Wno-psabi \
-ffunction-sections \
-funwind-tables \
@@ -171,12 +190,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.linux-arm64.mk b/content/speech_recognition_error_java.target.linux-arm64.mk
index de843f21ca..702f789981 100644
--- a/content/speech_recognition_error_java.target.linux-arm64.mk
+++ b/content/speech_recognition_error_java.target.linux-arm64.mk
@@ -83,12 +83,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -164,12 +169,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.linux-mips.mk b/content/speech_recognition_error_java.target.linux-mips.mk
index afe9b6b782..7270eb92f2 100644
--- a/content/speech_recognition_error_java.target.linux-mips.mk
+++ b/content/speech_recognition_error_java.target.linux-mips.mk
@@ -53,6 +53,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -86,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -138,6 +144,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-EL \
-mhard-float \
-ffunction-sections \
@@ -171,12 +178,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.linux-x86.mk b/content/speech_recognition_error_java.target.linux-x86.mk
index 1b8207c8cf..13ec180e50 100644
--- a/content/speech_recognition_error_java.target.linux-x86.mk
+++ b/content/speech_recognition_error_java.target.linux-x86.mk
@@ -52,6 +52,7 @@ MY_CFLAGS_Debug := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -87,12 +88,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -137,6 +143,7 @@ MY_CFLAGS_Release := \
-fvisibility=hidden \
-pipe \
-fPIC \
+ -Wno-unused-local-typedefs \
-msse2 \
-mfpmath=sse \
-mmmx \
@@ -172,12 +179,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/speech_recognition_error_java.target.linux-x86_64.mk b/content/speech_recognition_error_java.target.linux-x86_64.mk
index b0a1299a80..f0948c3ba3 100644
--- a/content/speech_recognition_error_java.target.linux-x86_64.mk
+++ b/content/speech_recognition_error_java.target.linux-x86_64.mk
@@ -87,12 +87,17 @@ MY_DEFS_Debug := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
@@ -172,12 +177,17 @@ MY_DEFS_Release := \
'-DENABLE_WEBRTC=1' \
'-DUSE_PROPRIETARY_CODECS' \
'-DENABLE_CONFIGURATION_POLICY' \
+ '-DENABLE_NEW_GAMEPAD_API=1' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
'-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
+ '-DDATA_REDUCTION_FALLBACK_HOST="http://compress.googlezip.net:80/"' \
+ '-DDATA_REDUCTION_DEV_HOST="http://proxy-dev.googlezip.net:80/"' \
+ '-DSPDY_PROXY_AUTH_ORIGIN="https://proxy.googlezip.net:443/"' \
+ '-DDATA_REDUCTION_PROXY_PROBE_URL="http://check.googlezip.net/connect"' \
'-DVIDEO_HOLE=1' \
'-DUSE_OPENSSL=1' \
'-DUSE_OPENSSL_CERTS=1' \
diff --git a/content/test/accessibility_browser_test_utils.cc b/content/test/accessibility_browser_test_utils.cc
index e8ba40f4b1..dc7a7f853f 100644
--- a/content/test/accessibility_browser_test_utils.cc
+++ b/content/test/accessibility_browser_test_utils.cc
@@ -23,7 +23,8 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter(Shell* shell)
: shell_(shell),
event_to_wait_for_(ui::AX_EVENT_NONE),
loop_runner_(new MessageLoopRunner()),
- weak_factory_(this) {
+ weak_factory_(this),
+ event_target_id_(0) {
WebContents* web_contents = shell_->web_contents();
view_host_ = static_cast<RenderViewHostImpl*>(
web_contents->GetRenderViewHost());
@@ -39,7 +40,8 @@ AccessibilityNotificationWaiter::AccessibilityNotificationWaiter(
: shell_(shell),
event_to_wait_for_(event_type),
loop_runner_(new MessageLoopRunner()),
- weak_factory_(this) {
+ weak_factory_(this),
+ event_target_id_(0) {
WebContents* web_contents = shell_->web_contents();
view_host_ = static_cast<RenderViewHostImpl*>(
web_contents->GetRenderViewHost());
@@ -61,9 +63,10 @@ const ui::AXTree& AccessibilityNotificationWaiter::GetAXTree() const {
}
void AccessibilityNotificationWaiter::OnAccessibilityEvent(
- ui::AXEvent event_type) {
+ ui::AXEvent event_type, int event_target_id) {
if (!IsAboutBlank() && (event_to_wait_for_ == ui::AX_EVENT_NONE ||
event_to_wait_for_ == event_type)) {
+ event_target_id_ = event_target_id;
loop_runner_->Quit();
}
}
diff --git a/content/test/accessibility_browser_test_utils.h b/content/test/accessibility_browser_test_utils.h
index 4cffa08435..5111e3c613 100644
--- a/content/test/accessibility_browser_test_utils.h
+++ b/content/test/accessibility_browser_test_utils.h
@@ -40,9 +40,13 @@ class AccessibilityNotificationWaiter {
// the tree of accessibility nodes received from the renderer process.
const ui::AXTree& GetAXTree() const;
+ // After WaitForNotification returns, use this to retrieve the id of the
+ // node that was the target of the event.
+ int event_target_id() { return event_target_id_; }
+
private:
// Callback from RenderViewHostImpl.
- void OnAccessibilityEvent(ui::AXEvent event);
+ void OnAccessibilityEvent(ui::AXEvent event, int event_target_id);
// Helper function to determine if the accessibility tree in
// GetAXTree() is about the page with the url "about:blank".
@@ -53,6 +57,7 @@ class AccessibilityNotificationWaiter {
ui::AXEvent event_to_wait_for_;
scoped_refptr<MessageLoopRunner> loop_runner_;
base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_;
+ int event_target_id_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityNotificationWaiter);
};
diff --git a/content/test/content_test_launcher.cc b/content/test/content_test_launcher.cc
index d351e9172d..64e91f8d28 100644
--- a/content/test/content_test_launcher.cc
+++ b/content/test/content_test_launcher.cc
@@ -17,6 +17,7 @@
#include "content/public/test/content_test_suite_base.h"
#include "content/shell/app/shell_main_delegate.h"
#include "content/shell/common/shell_switches.h"
+#include "media/base/media_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_ANDROID)
diff --git a/content/test/data/accessibility/aria-labelledby-heading-expected-android.txt b/content/test/data/accessibility/aria-labelledby-heading-expected-android.txt
new file mode 100644
index 0000000000..e929435d48
--- /dev/null
+++ b/content/test/data/accessibility/aria-labelledby-heading-expected-android.txt
@@ -0,0 +1 @@
+#<skip -- need to validate/generate>
diff --git a/content/test/data/accessibility/aria-labelledby-heading-expected-mac.txt b/content/test/data/accessibility/aria-labelledby-heading-expected-mac.txt
new file mode 100644
index 0000000000..da6c21d66a
--- /dev/null
+++ b/content/test/data/accessibility/aria-labelledby-heading-expected-mac.txt
@@ -0,0 +1,5 @@
+AXWebArea
+ AXGroup
+ AXTextField AXTitleUIElement='AXHeading 2'
+ AXHeading AXTitle='h2' AXValue='2'
+ AXStaticText AXValue='h2'
diff --git a/content/test/data/accessibility/aria-labelledby-heading-expected-win.txt b/content/test/data/accessibility/aria-labelledby-heading-expected-win.txt
new file mode 100644
index 0000000000..e929435d48
--- /dev/null
+++ b/content/test/data/accessibility/aria-labelledby-heading-expected-win.txt
@@ -0,0 +1 @@
+#<skip -- need to validate/generate>
diff --git a/content/test/data/accessibility/aria-labelledby-heading.html b/content/test/data/accessibility/aria-labelledby-heading.html
new file mode 100644
index 0000000000..7eb6462dc7
--- /dev/null
+++ b/content/test/data/accessibility/aria-labelledby-heading.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<!--
+@MAC-ALLOW:AXTitleUIElement*
+-->
+<html>
+<body>
+ <input aria-labelledby="h2">
+ <h2 id="h2">h2</h1>
+</body>
+</html>
diff --git a/content/test/data/accessibility/aria-list-expected-android.txt b/content/test/data/accessibility/aria-list-expected-android.txt
new file mode 100644
index 0000000000..e929435d48
--- /dev/null
+++ b/content/test/data/accessibility/aria-list-expected-android.txt
@@ -0,0 +1 @@
+#<skip -- need to validate/generate>
diff --git a/content/test/data/accessibility/aria-list-expected-mac.txt b/content/test/data/accessibility/aria-list-expected-mac.txt
new file mode 100644
index 0000000000..8ae9e03301
--- /dev/null
+++ b/content/test/data/accessibility/aria-list-expected-mac.txt
@@ -0,0 +1,8 @@
+AXWebArea
+ AXList AXSubrole=AXContentList
+ AXGroup
+ AXStaticText AXValue='Item 1'
+ AXGroup
+ AXStaticText AXValue='Item 2'
+ AXGroup
+ AXStaticText AXValue='Item 3'
diff --git a/content/test/data/accessibility/aria-list-expected-win.txt b/content/test/data/accessibility/aria-list-expected-win.txt
new file mode 100644
index 0000000000..e929435d48
--- /dev/null
+++ b/content/test/data/accessibility/aria-list-expected-win.txt
@@ -0,0 +1 @@
+#<skip -- need to validate/generate>
diff --git a/content/test/data/accessibility/aria-list.html b/content/test/data/accessibility/aria-list.html
new file mode 100644
index 0000000000..2e69bee321
--- /dev/null
+++ b/content/test/data/accessibility/aria-list.html
@@ -0,0 +1,12 @@
+<!--
+@MAC-ALLOW:AXSubrole*
+-->
+<html>
+<body>
+<div role="list">
+ <div role="listitem">Item 1</div>
+ <div role="listitem">Item 2</div>
+ <div role="listitem">Item 3</div>
+</div>
+</body>
+</html>
diff --git a/content/test/data/browser_plugin_embedder.html b/content/test/data/browser_plugin_embedder.html
index ea142c7f70..13f6493f90 100644
--- a/content/test/data/browser_plugin_embedder.html
+++ b/content/test/data/browser_plugin_embedder.html
@@ -8,16 +8,6 @@ function SetSize(w, h) {
plugin.width = w;
plugin.height = h;
}
-function PostMessage(data, shouldTargetIframe) {
- plugin = document.getElementById('plugin');
- // TODO(fsamuel): contentWindow can be accessed directly once
- // http://wkbug.com/85679 lands.
- if (shouldTargetIframe) {
- plugin.contentWindow.frames[0].postMessage('testing123', '*');
- } else {
- plugin.contentWindow.frames.postMessage('testing123', '*');
- }
-}
function SetTitle(str) {
document.title = str;
}
@@ -31,27 +21,7 @@ document.title = 'embedder';
height="480"
border="0px"></object>
<script type="text/javascript">
-var msg;
-function receiveMessage(event) {
- msg = event.data;
- if (msg == 'ready') {
- document.title = 'ready';
- return;
- }
- if (msg.indexOf('stop_ack') == -1) {
- event.source.postMessage('stop', '*');
- } else {
- var name = msg.replace("stop_ack", "").trim();
- if (name !== '') {
- window.document.title = name;
- } else {
- window.document.title = 'main guest';
- }
- }
-}
-
var plugin = document.getElementById('plugin');
-window.addEventListener('message', receiveMessage, false);
plugin.addEventListener('-internal-instanceid-allocated', function(e) {
var detail = e.detail ? JSON.parse(e.detail) : {};
plugin['-internal-attach'](detail.windowId, {});
diff --git a/content/test/data/browser_plugin_focus.html b/content/test/data/browser_plugin_focus.html
deleted file mode 100644
index 697213ac3c..0000000000
--- a/content/test/data/browser_plugin_focus.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html>
-<head>
-<script type="text/javascript">
- function SetSrc(src) {
- plugin = document.getElementById('plugin');
- plugin.src = src;
- }
-</script>
-</head>
-
-<body>
- <button id="before" tabindex="0">Before</button>
- <object id="plugin"
- tabindex="0"
- type="application/browser-plugin"
- width="640"
- height="480"
- border="0px"></object>
- <button id="after" tabindex="0">After</button>
-<script type="text/javascript">
-var plugin = document.getElementById('plugin');
-plugin.addEventListener('-internal-instanceid-allocated', function(e) {
- var detail = e.detail ? JSON.parse(e.detail) : {};
- plugin['-internal-attach'](detail.windowId, {});
-});
-</script>
-</body>
-</html>
diff --git a/content/test/data/browser_plugin_focus_child.html b/content/test/data/browser_plugin_focus_child.html
deleted file mode 100644
index 133fc0d2c5..0000000000
--- a/content/test/data/browser_plugin_focus_child.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
- <body>
- <button id="before" tabindex="0">Before</button>
- <button id="after" tabindex="0">After</button>
- </body>
-</html>
diff --git a/content/test/data/browser_plugin_post_message_guest.html b/content/test/data/browser_plugin_post_message_guest.html
deleted file mode 100644
index 57c1c3c452..0000000000
--- a/content/test/data/browser_plugin_post_message_guest.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<script>
- var embedder;
- function receiveMessage(event) {
- embedder = event.source;
- if (event.data !== 'stop') {
- event.source.postMessage('foobar', '*');
- } else {
- if (event.data !== '') {
- event.source.postMessage('stop_ack ' + window.name, '*');
- }
- }
- }
- window.addEventListener('message', receiveMessage, false);
- function CreateChildFrame(src) {
- var ifrm = document.createElement("IFRAME");
- ifrm.style.width = "640px";
- ifrm.style.height = "480px";
- ifrm.src = src;
- ifrm.name = 'iframe';
- document.body.appendChild(ifrm);
- embedder.postMessage('ready', '*');
- }
-</script>
diff --git a/content/test/data/download/empty.bin b/content/test/data/download/empty.bin
new file mode 100644
index 0000000000..229151a5a2
--- /dev/null
+++ b/content/test/data/download/empty.bin
Binary files differ
diff --git a/content/test/data/download/empty.bin.mock-http-headers b/content/test/data/download/empty.bin.mock-http-headers
new file mode 100644
index 0000000000..bbf9371723
--- /dev/null
+++ b/content/test/data/download/empty.bin.mock-http-headers
@@ -0,0 +1,11 @@
+HTTP/1.1 200 OK
+Date: Tue, 19 Nov 2013 02:16:10 GMT
+Accept-Ranges: bytes
+Last-Modified: Wed, 13 Nov 2013 04:27:07 GMT
+ETag: "COW-SAYS-MOO"
+Cache-Control: private
+Expires: -1
+Content-Type: application/octet-stream
+Vary: Accept-Encoding,User-Agent
+Content-Encoding: gzip
+Content-Length: 20
diff --git a/content/test/data/gpu/pixel_css3d.html b/content/test/data/gpu/pixel_css3d.html
index ebbad4c87d..5821db3a63 100644
--- a/content/test/data/gpu/pixel_css3d.html
+++ b/content/test/data/gpu/pixel_css3d.html
@@ -8,12 +8,9 @@ that the baseline images are regenerated on the next run.
<html>
<head>
+<meta name="viewport" content="initial-scale=1">
<title>CSS 3D Test: Projected Blue Box over Black Background</title>
<style type="text/css">
-.nomargin {
- margin: 0px auto;
-}
-
#container {
-webkit-perspective: 500;
}
diff --git a/content/test/data/media/blackwhite.html b/content/test/data/media/blackwhite.html
index 514aa55b1b..51cdf625aa 100644
--- a/content/test/data/media/blackwhite.html
+++ b/content/test/data/media/blackwhite.html
@@ -136,11 +136,20 @@
// Check one pixel in each quadrant (in the upper left, away from
// boundaries and the text, to avoid compression artifacts).
- // Also allow an error of 1, for the same reason.
- return checkColor(videoData, 30, 30, videoElem.videoWidth, 0xff, 1) &&
- checkColor(videoData, 150, 30, videoElem.videoWidth, 0x00, 1) &&
- checkColor(videoData, 30, 150, videoElem.videoWidth, 0x10, 1) &&
- checkColor(videoData, 150, 150, videoElem.videoWidth, 0xef, 1);
+ // Also allow a small error, for the same reason.
+
+ // TODO(mtomasz): Once code.google.com/p/libyuv/issues/detail?id=324 is
+ // fixed, the allowedError should be decreased to 1.
+ var allowedError = 2;
+
+ return checkColor(videoData, 30, 30, videoElem.videoWidth, 0xff,
+ allowedError) &&
+ checkColor(videoData, 150, 30, videoElem.videoWidth, 0x00,
+ allowedError) &&
+ checkColor(videoData, 30, 150, videoElem.videoWidth, 0x10,
+ allowedError) &&
+ checkColor(videoData, 150, 150, videoElem.videoWidth, 0xef,
+ allowedError);
}
// Compute a standard diff image, plus a high-contrast mask that shows
diff --git a/content/test/data/media/getusermedia.html b/content/test/data/media/getusermedia.html
index 1ee7b0d7b2..0855cf256e 100644
--- a/content/test/data/media/getusermedia.html
+++ b/content/test/data/media/getusermedia.html
@@ -189,6 +189,37 @@
};
}
+ function twoGetUserMedia(constraints1, constraints2) {
+ console.log('Calling Two GetUserMedia');
+ var result="";
+ navigator.webkitGetUserMedia(
+ constraints1,
+ function(stream) {
+ displayDetectAndAnalyzeVideoInElement(
+ stream,
+ function(aspectRatio) {
+ result = aspectRatio;
+ requestSecondGetUserMedia();
+ },
+ 'local-view');
+ },
+ failedCallback);
+ var requestSecondGetUserMedia = function() {
+ navigator.webkitGetUserMedia(
+ constraints2,
+ function(stream) {
+ displayDetectAndAnalyzeVideoInElement(
+ stream,
+ function(aspectRatio) {
+ result = result + '-' + aspectRatio;
+ sendValueToTest(result);
+ },
+ 'local-view-2');
+ },
+ failedCallback);
+ }
+ }
+
function failedCallback(error) {
failTest('GetUserMedia call failed with code ' + error.code);
}
@@ -209,8 +240,17 @@
}
function displayDetectAndAnalyzeVideo(stream) {
- plugStreamIntoVideoElement(stream, 'local-view');
- analyzeVideo();
+ displayDetectAndAnalyzeVideoInElement(stream,
+ function(aspectRatio) {
+ sendValueToTest(aspectRatio);
+ },
+ 'local-view');
+ }
+
+ function displayDetectAndAnalyzeVideoInElement(
+ stream, callback, videoElement) {
+ plugStreamIntoVideoElement(stream, videoElement);
+ detectAspectRatio(callback, videoElement);
}
function createAndRenderClone(stream) {
@@ -241,12 +281,6 @@
setTimeout(stopVideoTrack, waitTimeInSeconds * 1000);
}
- function analyzeVideo() {
- detectAspectRatio(function(aspectRatio) {
- sendValueToTest(aspectRatio);
- });
- }
-
// This test make sure multiple video renderers can be created for the same
// local video track and make sure a renderer can still render if other
// renderers are paused. See http://crbug/352619.
@@ -304,9 +338,9 @@
// pixels are not the same along the X and Y axis.
// The result of the analysis is sent back to the test as a string on the
// format "w=xxx:h=yyy".
- function detectAspectRatio(callback) {
- var videoElement = $('local-view');
- var canvas = $('local-view-canvas');
+ function detectAspectRatio(callback, videoElementName) {
+ var videoElement = $(videoElementName);
+ var canvas = $(videoElementName + '-canvas');
var maxLightGreenPixelsX = 0;
var maxLightGreenPixelsY = 0;
diff --git a/content/test/data/media/peerconnection-call.html b/content/test/data/media/peerconnection-call.html
index 1c7b5bf8ac..caf61741fa 100644
--- a/content/test/data/media/peerconnection-call.html
+++ b/content/test/data/media/peerconnection-call.html
@@ -96,8 +96,9 @@
}
// First makes a call between pc1 and pc2, and then makes a call between pc3
- // and pc4 where the remote streams from pc1 and pc2 will be used as the local
- // streams of pc3 and pc4.
+ // and pc4. The stream sent from pc3 to pc4 is the stream received on pc1.
+ // The stream sent from pc4 to pc3 is cloned from the stream received on pc2
+ // to test that cloning of remote video tracks works as intended.
function callAndForwardRemoteStream(constraints) {
createConnections(null);
navigator.webkitGetUserMedia(constraints,
@@ -127,7 +128,7 @@
thirdConnection.addStream(gRemoteStreams['remote-view-1']);
fourthConnection = createConnection(null, 'remote-view-4');
- fourthConnection.addStream(gRemoteStreams['remote-view-2']);
+ fourthConnection.addStream(gRemoteStreams['remote-view-2'].clone());
negotiateBetween(thirdConnection, fourthConnection);
diff --git a/content/test/data/service_worker/fetch_event.js b/content/test/data/service_worker/fetch_event.js
index 67408ddd80..503806b208 100644
--- a/content/test/data/service_worker/fetch_event.js
+++ b/content/test/data/service_worker/fetch_event.js
@@ -3,14 +3,13 @@
// found in the LICENSE file.
this.onfetch = function(event) {
- response = new Response({
- statusCode: 200,
- statusText: 'OK',
- method: 'GET',
- headers: {
- 'Content-Language': 'fi',
- 'Content-Type': 'text/html; charset=UTF-8'
- }
+ var headers = new HeaderMap;
+ headers.set('Content-Language', 'fi');
+ headers.set('Content-Type', 'text/html; charset=UTF-8');
+ var response = new Response({
+ status: 301,
+ statusText: 'Moved Permanently',
+ headers: headers
});
event.respondWith(new Promise(function(r) {
diff --git a/content/test/data/service_worker/sync.js b/content/test/data/service_worker/sync.js
index 993e771778..02da273ab3 100644
--- a/content/test/data/service_worker/sync.js
+++ b/content/test/data/service_worker/sync.js
@@ -6,13 +6,8 @@ var code = 404;
this.onfetch = function(event) {
response = new Response({
- statusCode: code,
- statusText: 'OK',
- method: 'GET',
- headers: {
- 'Content-Language': 'fi',
- 'Content-Type': 'text/html; charset=UTF-8'
- }
+ status: code,
+ statusText: 'OK'
});
event.respondWith(new Promise(function(r) {
@@ -22,4 +17,4 @@ this.onfetch = function(event) {
this.onsync = function(event) {
code = 200;
-}; \ No newline at end of file
+};
diff --git a/content/test/data/webcrypto/rsa_es.json b/content/test/data/webcrypto/rsa_es.json
deleted file mode 100644
index 0309c7f81b..0000000000
--- a/content/test/data/webcrypto/rsa_es.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- // The RSA public and private keys used for this test are produced by the
- // openssl command line:
- // % openssl genrsa -out pair.pem 1024
- // % openssl rsa -in pair.pem -out spki.der -outform DER -pubout
- // % openssl pkcs8 -topk8 -inform PEM -outform DER -in pair.pem -out
- // pkcs8.der -nocrypt
- // % xxd -p spki.der
- // % xxd -p pkcs8.der
- "rsa_spki_der": "30819f300d06092a864886f70d010101050003818d0030818902818100a8d30894b93f376f7822229bfd2483e50da944c4ab803ca31979e0f47e70bf683c687c6b3e80f280a237cea3643fd1f7f10f7cc664dbc2ecd45be53e1c9b15a53c37dbdad846c0f8340c472abc7821e4aa7df185867bf38228ac3ecc1d97d3c8b57e21ea6ba57b2bc3814a436e910ee8ab64a0b7743a927e944d3420401f7dd50203010001",
- "rsa_pkcs8_der": "30820276020100300d06092a864886f70d0101010500048202603082025c02010002818100a8d30894b93f376f7822229bfd2483e50da944c4ab803ca31979e0f47e70bf683c687c6b3e80f280a237cea3643fd1f7f10f7cc664dbc2ecd45be53e1c9b15a53c37dbdad846c0f8340c472abc7821e4aa7df185867bf38228ac3ecc1d97d3c8b57e21ea6ba57b2bc3814a436e910ee8ab64a0b7743a927e944d3420401f7dd5020301000102818100896cdffb50a0691bd00ad9696933243a7c5861a64684e8d74b91aed0d76c28234da9303e8c6ea2f89b141a9d5ea9a4ddd3d8eb9503dcf05ba0b1fd76060b281e3ae4b9d497fb5519bdf1127db8ad412d6a722686c78df3e3002acca960c6b2a242a83ace5410693c03ce3d74cb9c9a7bacc8e271812920d1f53fee9312ef4eb1024100d09c14418ce92af7cc62f7cdc79836d8c6e3d0d33e7229cc11d732cbac75aa4c56c92e409a3ccbe75d4ce63ac5adca33080690782c6371e3628134c3534ca603024100cf2d3206f6deea2f39b70351c51f854362005aa8f643e49e22486736d536e040dc30a2b4f9be3ab212a88d1891280874b9a170cdeb22eaf61c27c4b082c7d1470240638411a5b3b307ec6e744802c2d4ba556f8bfe72c7b76e790b89bd91ac13f5c9b51d04138d80b3450c1d4337865601bf96748b36c8f627be719f71ac3c70b441024065ce92cfe34ea58bf173a2b8f3024b4d5282540ac581957db3e11a7f528535ec098808dca0013ffcb3b88a25716757c86c540e07d2ad8502cdd129118822c30f0240420a4983040e9db46eb29f1315a0d7b41cf60428f7460fce748e9a1a7d22d7390fa328948e7e9d1724401374e99d45eb41474781201378a4330e8e808ce63551",
-
- // Similarly, the cleartext and public key encrypted ciphertext for this test
- // are also produced by openssl. Note that since we are using a 1024-bit key,
- // the cleartext size must be less than or equal to 117 bytes (modulusLength /
- // 8 - 11).
- // % openssl rand -out cleartext.bin 64
- // % openssl rsautl -encrypt -inkey spki.der -keyform DER -pubin -in
- // cleartext.bin -out ciphertext.bin
- // % xxd -p cleartext.bin
- // % xxd -p ciphertext.bin
- "cleartext": "ec358ed141c45d7e03d4c6338aebad718e8bcbbf8f8ee6f8d9f4b9ef06d884739a398c6bcbc688418b2ff64761dc0ccd40e7d52bed03e06946d0957aeef9e822",
- "ciphertext": "6106441c2b7a4b1a16260ed1ae4fe6135247345dc8e674754bbda6588c6c0d95a3d4d26bb34cdbcbe327723e80343bd7a15cd4c91c3a44e6cb9c6cd67ad2e8bf41523188d9b36dc364a838642dcbc2c25e85dfb2106ba47578ca3bbf8915055aea4fa7c3cbfdfbcc163f04c234fb6d847f39bab9612ecbee04626e945c3ccf42"
-}
diff --git a/content/test/data/webcrypto/rsa_oaep.json b/content/test/data/webcrypto/rsa_oaep.json
new file mode 100644
index 0000000000..6a86348983
--- /dev/null
+++ b/content/test/data/webcrypto/rsa_oaep.json
@@ -0,0 +1,71 @@
+[
+ // Format for tests:
+ // public_key - the hex encoding of an RSA key as SubjectPublicKeyInfo
+ // private_key - the hex encoding of an RSA key as PKCS#8 PrivateKeyInfo
+ // hash - the hash name (same as in the digest tests) to use as both the
+ // seed function and the MGF-1 digest function
+ // label - the hex encoding of the label, or an empty string to indicate
+ // that the empty string should be used
+ // ciphertext / plaintext - hex encoded
+ // Tests for RSA-OAEP Encrypt/Decrypt without a label (the empty string).
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-1",
+ "label": "",
+ "ciphertext": "443FA1354F1DBC5C007A019CACCF18A3E6F986D7513D787F13DED463239F1833D6E33BFA8AF034C198B0D903F202F543FEF38FAF54018EB7794B4FE638CA4D87C564B845C0695D7E70C5D4464BEFF05225E747A6CA096A5E5E634002836D3CCE35713F082B20DCE7BB51324E4C89E202E3568E9F403ED864DE751BBE63E09680",
+ "plaintext": "666F6F64"
+ },
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-256",
+ "label": "",
+ "ciphertext": "4EBEBCA7297864FDEA44B3BF0E4D5AC26A8478E63642CED06182597DF247EC9883E72DFDC4507EE5058C52F6B929FBC34CE1FCF7C4A914D5B0C5C94638BDB0C70618E3F4FE79D291585DFD3197C4C16B57213337D12E59FC7A38617A1BE3DD2B09DA518E568712D2E6523F079C16EFCE540CAA829C5E39D62D64902A4E9D0BB3",
+ "plaintext": "666F6F64"
+ },
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-384",
+ "label": "",
+ "ciphertext": "67B83119BA513947000F3D7F144408FCBD6B22F93C01671C1E40607972BB991716EAA79B96FF8DEF95D8E673697E279096D035BA9ED79B9FCAC933A26FB003941CC8E8749511CEDFFACA653769AB5209E414B80D30A0DC44BE72E49A7FE732819C0DA4142FA0810FFF19E56EFB14EAA5649398E4C7D920B254CAE54F8019B25A",
+ "plaintext": "666F6F64"
+ },
+
+ // Tests for RSA-OAEP with an optional label specified.
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-1",
+ "label": "66656564206D65207365796D6F7572",
+ "ciphertext": "A27427C7CB3CD5B7D3C432B3F4BE98577B1FFBF302EDEFF0B219CABAB3E42DF7E8E24F9A89B387D314B199219F91B7F2CDE8E8D6F461A9495C3B5A398E0F670919EF62CCFF96CCF0FCAF178E5D898C332AAD342F4C42B3209B10CE04B0D004A3ED2514A707D617A321206C225084C1446BF17208C6D278B0EA3F5968D1D44590",
+ "plaintext": "666F6F64"
+ },
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-256",
+ "label": "66656564206D65207365796D6F7572",
+ "ciphertext": "333777A27C14C6186D2E90024507D7BD01D2A23FD462E9DBA6E9E96759A7025F29ABAA40DF6B3355648AE8FD90CD08D9D92529CAD337A6BED806D19B998E472EC0704205A6B83BDB4D4F5DB03FFE8BC68B44CA7F723A032161BD5B6D4517D58FAD8F1859676BC15A3BE9D20D78B11D73F79B23372CF4793F6301F612E820D67A",
+ "plaintext": "666F6F64"
+ },
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-384",
+ "label": "66656564206D65207365796D6F7572",
+ "ciphertext": "686D4B27EBD14F4745FB947459DE0D349E53C115F466245268E5C6B8C48FFFDAFB9C7737360D850A6865883ADD516E4AFE71AACE2A73083A4D991293D59199639CF27F6DC0799F785653C3B1E4213EC277A6FA121F6CD2F81E29F1A35A4604B473983CFEDACB00AA9786E92999DC9FA9AFDBDBB3F0EB3F49B301C5BFE14974BE",
+ "plaintext": "666F6F64"
+ },
+
+ // With RSA-OAEP, an empty message is valid.
+ {
+ "public_key": "30819f300d06092a864886f70d010101050003818d0030818902818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a21370203010001",
+ "private_key": "30820275020100300d06092a864886f70d01010105000482025f3082025b02010002818100a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137020301000102818033a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325024100e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443024100b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd024028fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa02786197902401a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729024027156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
+ "hash": "sha-1",
+ "label": "",
+ "ciphertext": "5E35C080E4A0EBBB5AC8EE44888A6DB6B8C4D05A6427BE0ECBF245A23BCFC4A4A7D9E5466123511399F5D01A3CF910DD6FEBCA969B23C753A0574163D847E70E7EFBFBBF6CC01545560D620F00CFA33AE318AF6090B76E4ADC5FE1686165786F8B7E559156E8AF690D6EF050133AB5620FAF91B17CF52FED0B57FAC0924F2CC4",
+ "plaintext": ""
+ }
+]
diff --git a/content/test/gpu/gpu_tests/context_lost.py b/content/test/gpu/gpu_tests/context_lost.py
index 3e5840d9fd..5a05d83d08 100644
--- a/content/test/gpu/gpu_tests/context_lost.py
+++ b/content/test/gpu/gpu_tests/context_lost.py
@@ -137,7 +137,7 @@ class WebGLContextLostFromGPUProcessExitPage(page.Page):
self.force_garbage_collection = False
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{'javascript': 'window.domAutomationController._loaded'}))
@@ -154,7 +154,7 @@ class WebGLContextLostFromLoseContextExtensionPage(page.Page):
self.force_garbage_collection = False
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{'javascript': 'window.domAutomationController._finished'}))
@@ -170,7 +170,7 @@ class WebGLContextLostFromQuantityPage(page.Page):
self.force_garbage_collection = True
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{'javascript': 'window.domAutomationController._loaded'}))
diff --git a/content/test/gpu/gpu_tests/maps.py b/content/test/gpu/gpu_tests/maps.py
index bb431fb55f..aeafe4f86a 100644
--- a/content/test/gpu/gpu_tests/maps.py
+++ b/content/test/gpu/gpu_tests/maps.py
@@ -83,7 +83,7 @@ class MapsPage(page.Page):
self.pixel_expectations = 'data/maps_002_expectations.json'
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction({'javascript': 'window.testDone'}))
diff --git a/content/test/gpu/gpu_tests/memory.py b/content/test/gpu/gpu_tests/memory.py
index b56f7375ea..84eb5118f3 100644
--- a/content/test/gpu/gpu_tests/memory.py
+++ b/content/test/gpu/gpu_tests/memory.py
@@ -33,7 +33,15 @@ test_harness_script = r"""
// of iterations to settle).
var rafCount = 0;
- var totalRafCount = 8;
+
+ // Impl-side painting has changed the behavior of this test.
+ // Currently the background of the page shows up checkerboarded
+ // initially, causing the test to fail because the memory
+ // allocation is too low (no root layer). Temporarily increase the
+ // rAF count to 32 in order to make the test work reliably again.
+ // crbug.com/373098
+ // TODO(kbr): revert this change and put it back to 8 iterations.
+ var totalRafCount = 32;
function pumpRAF() {
if (rafCount == totalRafCount) {
@@ -63,10 +71,10 @@ class _MemoryValidator(page_test.PageTest):
mb_used = counter.samples[-1] / 1048576
if mb_used + WIGGLE_ROOM_MB < SINGLE_TAB_LIMIT_MB:
- raise page_test.Failure('Memory allocation too low')
+ raise page_test.Failure(self._FormatException('low', mb_used))
if mb_used - WIGGLE_ROOM_MB > MEMORY_LIMIT_MB:
- raise page_test.Failure('Memory allocation too high')
+ raise page_test.Failure(self._FormatException('high', mb_used))
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-logging')
@@ -77,6 +85,10 @@ class _MemoryValidator(page_test.PageTest):
custom_categories = ['webkit.console', 'gpu']
tab.browser.StartTracing(','.join(custom_categories), 60)
+ def _FormatException(self, low_or_high, mb_used):
+ return 'Memory allocation too %s (was %d MB, should be %d MB +/- %d MB)' % (
+ low_or_high, mb_used, SINGLE_TAB_LIMIT_MB, WIGGLE_ROOM_MB)
+
class Memory(test.Test):
"""Tests GPU memory limits"""
test = _MemoryValidator
diff --git a/content/test/gpu/gpu_tests/memory_expectations.py b/content/test/gpu/gpu_tests/memory_expectations.py
index 27384eb3df..0b2cce0a12 100644
--- a/content/test/gpu/gpu_tests/memory_expectations.py
+++ b/content/test/gpu/gpu_tests/memory_expectations.py
@@ -25,3 +25,11 @@ class MemoryExpectations(test_expectations.TestExpectations):
# ['mac', 'amd', ('nvidia', 0x1234)], bug=123)
self.Fail('Memory.CSS3D', ['mac', ('nvidia', 0x0fd5)], bug=368037)
+
+ # TODO(vmpstr): Memory drops and increases again, and this
+ # particular bot happens to catch it when its low. Remove
+ # once the bug is fixed.
+ self.Fail('Memory.CSS3D', ['win'], bug=373098)
+
+ # Test has turned flaky on Linux also. Remove once the bug is fixed.
+ self.Fail('Memory.CSS3D', ['linux'], bug=373098)
diff --git a/content/test/gpu/gpu_tests/pixel.py b/content/test/gpu/gpu_tests/pixel.py
index 7a1e33f18c..b9de793beb 100644
--- a/content/test/gpu/gpu_tests/pixel.py
+++ b/content/test/gpu/gpu_tests/pixel.py
@@ -12,6 +12,7 @@ import pixel_expectations
from telemetry import test
from telemetry.core import bitmap
+from telemetry.page import cloud_storage
from telemetry.page import page_test
test_data_dir = os.path.abspath(os.path.join(
@@ -81,7 +82,20 @@ class _PixelValidator(cloud_storage_test_base.ValidatorBase):
elif self.options.download_refimg_from_cloud_storage:
# This bot doesn't have the ability to properly generate a
# reference image, so download it from cloud storage.
- ref_png = self._DownloadFromCloudStorage(image_name, page, tab)
+ try:
+ ref_png = self._DownloadFromCloudStorage(image_name, page, tab)
+ except cloud_storage.NotFoundError as e:
+ # There is no reference image yet in cloud storage. This
+ # happens when the revision of the test is incremented or when
+ # a new test is added, because the trybots are not allowed to
+ # produce reference images, only the bots on the main
+ # waterfalls. Report this as a failure so the developer has to
+ # take action by explicitly suppressing the failure and
+ # removing the suppression once the reference images have been
+ # generated. Otherwise silent failures could happen for long
+ # periods of time.
+ raise page_test.Failure('Could not find image %s in cloud storage' %
+ image_name)
else:
# Legacy path using on-disk results.
ref_png = self._GetReferenceImage(self.options.reference_dir,
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py
index 1d9594a9df..0490e89b50 100644
--- a/content/test/gpu/gpu_tests/pixel_expectations.py
+++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -24,4 +24,6 @@ class PixelExpectations(test_expectations.TestExpectations):
# self.Fail('Pixel.Canvas2DRedBox',
# ['mac', 'amd', ('nvidia', 0x1234)], bug=123)
+ self.Fail('Pixel.CSS3DBlueBox', bug=368495)
+
pass
diff --git a/content/test/gpu/gpu_tests/screenshot_sync.py b/content/test/gpu/gpu_tests/screenshot_sync.py
index 03ca5951c8..a2d8abb540 100644
--- a/content/test/gpu/gpu_tests/screenshot_sync.py
+++ b/content/test/gpu/gpu_tests/screenshot_sync.py
@@ -37,7 +37,7 @@ class ScreenshotSyncPage(page.Page):
self.user_agent_type = 'desktop'
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction({
'javascript': 'window.__testComplete',
'timeout': 120}))
diff --git a/content/test/gpu/gpu_tests/webgl_conformance.py b/content/test/gpu/gpu_tests/webgl_conformance.py
index 2aa8ab437c..965ea9f4c5 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance.py
@@ -88,7 +88,7 @@ class WebglConformancePage(page_module.Page):
self.script_to_evaluate_on_commit = conformance_harness_script
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{'javascript': 'webglTestHarness._finished', 'timeout': 120}))
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
index ceb5606658..de6918e235 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -29,12 +29,14 @@ class WebGLConformanceExpectations(test_expectations.TestExpectations):
bug=351396)
self.Fail('conformance/glsl/misc/boolean_precision.html',
bug=368874)
- self.Fail('conformance/glsl/bugs/nested-structs-with-same-name.html',
+ self.Fail('conformance/glsl/misc/shader-struct-scope.html',
bug=368910)
# Flaky on Win
self.Fail('conformance/extensions/webgl-draw-buffers.html',
['win'], bug=369349)
+ self.Fail('conformance/context/context-lost-restored.html',
+ ['win'], bug=374378)
# Win7 / Intel failures
self.Fail('conformance/rendering/gl-scissor-test.html',
@@ -43,6 +45,10 @@ class WebGLConformanceExpectations(test_expectations.TestExpectations):
['win7', 'intel'])
self.Fail('conformance/textures/copy-tex-image-and-sub-image-2d.html',
['win7', 'intel'])
+ self.Fail('conformance/rendering/gl-viewport-test.html',
+ ['win7', 'intel'], bug=372511)
+ self.Fail('conformance/glsl/misc/shader-with-array-of-structs-uniform.html',
+ ['win7', 'intel', 'nvidia'], bug=373972)
# Mac / Intel failures
# Radar 13499466
@@ -132,3 +138,122 @@ class WebGLConformanceExpectations(test_expectations.TestExpectations):
self.Fail('conformance/textures/texture-npot-video.html',
['android'], bug=334204)
+ # ChromeOS: all Intel except for pinetrail (stumpy, parrot, peppy,...)
+ # We will just include pinetrail here for now as we don't want to list
+ # every single Intel device ID.
+ self.Fail('conformance/extensions/webgl-depth-texture.html',
+ ['chromeos', 'intel'], bug=375556)
+ self.Fail('conformance/glsl/misc/empty_main.vert.html',
+ ['chromeos', 'intel'], bug=375556)
+ self.Fail('conformance/glsl/misc/gl_position_unset.vert.html',
+ ['chromeos', 'intel'], bug=375556)
+ self.Fail('conformance/glsl/misc/shaders-with-varyings.html',
+ ['chromeos', 'intel'], bug=375556)
+ self.Fail('conformance/renderbuffers/framebuffer-object-attachment.html',
+ ['chromeos', 'intel'], bug=375556)
+
+ # ChromeOS: pinetrail (alex, mario, zgb).
+ self.Fail('conformance/attribs/gl-vertex-attrib-render.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/functions/glsl-function-atan-xy.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/functions/glsl-function-cos.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/functions/glsl-function-sin.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/misc/empty_main.vert.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/misc/gl_position_unset.vert.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/misc/shaders-with-varyings.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/glsl/variables/gl-frontfacing.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/limits/gl-max-texture-dimensions.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/acos/acos_001_to_006.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/asin/asin_001_to_006.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/atan/atan_001_to_008.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/build/build_009_to_016.html',
+ ['chromeos', ('intel', 0xa011)], bug=378938)
+ self.Fail('conformance/ogles/GL/control_flow/control_flow_001_to_008.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/cos/cos_001_to_006.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/discard/discard_001_to_002.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_001_to_008.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_065_to_072.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_081_to_088.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_097_to_104.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_105_to_112.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_113_to_120.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/functions/functions_121_to_126.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail(
+ 'conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/log/log_001_to_008.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/log2/log2_001_to_008.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/normalize/normalize_001_to_006.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/ogles/GL/sin/sin_001_to_006.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/rendering/point-size.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/rendering/polygon-offset.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/textures/texture-mips.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/textures/texture-npot.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/textures/texture-npot-video.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/textures/texture-size.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/textures/texture-size-limit.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Fail('conformance/uniforms/gl-uniform-arrays.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+ self.Skip('conformance/uniforms/uniform-default-values.html',
+ ['chromeos', ('intel', 0xa011)], bug=375554)
+
+ # ChromeOS ARM Mali (peach_pit).
+ # The bug refers to the partner tracker crbug.com/p/29017.
+ # TODO(ihf): Restrict fail to ('arm', 'mali') once this GPU is detected.
+ self.Fail('conformance/canvas/to-data-url-test.html',
+ ['chromeos'], bug=29017)
+ self.Fail('conformance/state/state-uneffected-after-compositing.html',
+ ['chromeos'], bug=29017)
+
+ # ChromeOS ARM Tegra.
+ # The bug refers to the partner tracker crbug.com/p/28982.
+ # TODO(ihf): Restrict fail to ('nvidia', '...') once this GPU is detected.
+ self.Fail('conformance/extensions/oes-texture-float-with-video.html',
+ ['chromeos'], bug=28982)
+ self.Fail('conformance/extensions/oes-texture-half-float-with-video.html',
+ ['chromeos'], bug=28982)
+ self.Fail('conformance/textures/tex-image-and-sub-image-2d-with-video.html',
+ ['chromeos'], bug=28982)
+ self.Fail(
+ 'conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html',
+ ['chromeos'], bug=28982)
+ self.Fail(
+ 'conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html',
+ ['chromeos'], bug=28982)
+ self.Fail(
+ 'conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html',
+ ['chromeos'], bug=28982)
+ self.Fail('conformance/textures/texture-npot-video.html',
+ ['chromeos'], bug=28982)
diff --git a/content/test/gpu/gpu_tests/webgl_robustness.py b/content/test/gpu/gpu_tests/webgl_robustness.py
index a68467c2d3..497cacbc64 100644
--- a/content/test/gpu/gpu_tests/webgl_robustness.py
+++ b/content/test/gpu/gpu_tests/webgl_robustness.py
@@ -57,7 +57,7 @@ class WebglRobustnessPage(page.Page):
self.script_to_evaluate_on_commit = robustness_harness_script
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(
WaitAction({'javascript': 'webglTestHarness._finished'}))
diff --git a/content/test/gpu/page_sets/gpu_process_tests.py b/content/test/gpu/page_sets/gpu_process_tests.py
index 0089743c84..c9abeb0c7c 100644
--- a/content/test/gpu/page_sets/gpu_process_tests.py
+++ b/content/test/gpu/page_sets/gpu_process_tests.py
@@ -15,7 +15,7 @@ class GpuProcessTestsPage(page_module.Page):
self.user_agent_type = 'desktop'
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
class FunctionalVideoPage(GpuProcessTestsPage):
@@ -26,7 +26,7 @@ class FunctionalVideoPage(GpuProcessTestsPage):
page_set=page_set)
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{
'javascript': 'domAutomationController._finished',
diff --git a/content/test/gpu/page_sets/gpu_rasterization_tests.py b/content/test/gpu/page_sets/gpu_rasterization_tests.py
index c908a88510..6c23e6cb4e 100644
--- a/content/test/gpu/page_sets/gpu_rasterization_tests.py
+++ b/content/test/gpu/page_sets/gpu_rasterization_tests.py
@@ -69,7 +69,7 @@ class GpuRasterizationTestsPage(page_module.Page):
self.test_rect = [0, 0, 250, 250]
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{
'javascript': 'domAutomationController._finished',
diff --git a/content/test/gpu/page_sets/memory_tests.py b/content/test/gpu/page_sets/memory_tests.py
index 2492d22f50..dee9c15ace 100644
--- a/content/test/gpu/page_sets/memory_tests.py
+++ b/content/test/gpu/page_sets/memory_tests.py
@@ -16,7 +16,7 @@ class MemoryTestsPage(page_module.Page):
self.user_agent_type = 'desktop'
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{
'javascript': 'domAutomationController._finished',
diff --git a/content/test/gpu/page_sets/page_set_unittest.py b/content/test/gpu/page_sets/page_set_unittest.py
index 8f57972ff7..f55e95d09c 100644
--- a/content/test/gpu/page_sets/page_set_unittest.py
+++ b/content/test/gpu/page_sets/page_set_unittest.py
@@ -7,7 +7,7 @@ import os
from telemetry.core import discover
from telemetry.page import page_set as page_set_module
from telemetry.page import page_set_archive_info
-from telemetry.test_util import page_set_smoke_test
+from telemetry.unittest import page_set_smoke_test
class PageSetUnitTest(page_set_smoke_test.PageSetSmokeTest):
diff --git a/content/test/gpu/page_sets/pixel_tests.py b/content/test/gpu/page_sets/pixel_tests.py
index ea75ee0612..5baebf7468 100644
--- a/content/test/gpu/page_sets/pixel_tests.py
+++ b/content/test/gpu/page_sets/pixel_tests.py
@@ -16,7 +16,7 @@ class PixelTestsPage(page_module.Page):
self.revision = revision
def RunNavigateSteps(self, action_runner):
- action_runner.RunAction(NavigateAction())
+ action_runner.NavigateToPage(self)
action_runner.RunAction(WaitAction(
{
'javascript': 'domAutomationController._finished',
@@ -34,20 +34,20 @@ class PixelTestsPageSet(page_set_module.PageSet):
self.AddPage(PixelTestsPage(
url='file://../../data/gpu/pixel_canvas2d.html',
name='Pixel.Canvas2DRedBox',
- test_rect=[0, 0, 400, 300],
- revision=2,
+ test_rect=[0, 0, 300, 300],
+ revision=3,
page_set=self))
self.AddPage(PixelTestsPage(
url='file://../../data/gpu/pixel_css3d.html',
name='Pixel.CSS3DBlueBox',
- test_rect=[0, 0, 400, 300],
- revision=4,
+ test_rect=[0, 0, 300, 300],
+ revision=7,
page_set=self))
self.AddPage(PixelTestsPage(
url='file://../../data/gpu/pixel_webgl.html',
name='Pixel.WebGLGreenTriangle',
- test_rect=[0, 0, 400, 300],
- revision=5,
+ test_rect=[0, 0, 300, 300],
+ revision=7,
page_set=self))
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index 8f57dee350..b045da9a3d 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -16,9 +16,8 @@
#include "content/renderer/render_view_impl.h"
#include "content/renderer/renderer_webkitplatformsupport_impl.h"
#include "content/shell/renderer/test_runner/TestCommon.h"
-#include "content/shell/renderer/test_runner/WebFrameTestProxy.h"
-#include "content/shell/renderer/test_runner/WebTestProxy.h"
-#include "content/test/test_media_stream_client.h"
+#include "content/shell/renderer/test_runner/web_frame_test_proxy.h"
+#include "content/shell/renderer/test_runner/web_test_proxy.h"
#include "third_party/WebKit/public/platform/WebDeviceMotionData.h"
#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
#include "third_party/WebKit/public/platform/WebGamepads.h"
@@ -64,9 +63,7 @@ RenderFrameImpl* CreateWebFrameTestProxy(
typedef WebFrameTestProxy<RenderFrameImpl, RenderViewImpl*, int32> FrameProxy;
FrameProxy* render_frame_proxy = new FrameProxy(render_view, routing_id);
- render_frame_proxy->setBaseProxy(GetWebTestProxyBase(render_view));
-
- UseMockMediaStreams(render_frame_proxy);
+ render_frame_proxy->set_base_proxy(GetWebTestProxyBase(render_view));
return render_frame_proxy;
}
@@ -103,11 +100,20 @@ void SetMockDeviceOrientationData(const WebDeviceOrientationData& data) {
}
void SetMockScreenOrientation(
+ RenderView* render_view,
const blink::WebScreenOrientationType& orientation) {
+ static_cast<RenderViewImpl*>(render_view)
+ ->SetScreenOrientationForTesting(orientation);
+ // FIXME(ostap): Remove this when blink side gets updated.
RendererWebKitPlatformSupportImpl::
SetMockScreenOrientationForTesting(orientation);
}
+void ResetMockScreenOrientation()
+{
+ RendererWebKitPlatformSupportImpl::ResetMockScreenOrientationForTesting();
+}
+
void EnableRendererLayoutTestMode() {
RenderThreadImpl::current()->set_layout_test_mode(true);
}
@@ -138,7 +144,6 @@ void ForceResizeRenderView(RenderView* render_view,
const WebSize& new_size) {
RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view);
render_view_impl->ForceResizeForTesting(new_size);
- GetWebTestProxyBase(render_view_impl)->didForceResize();
}
void SetDeviceScaleFactor(RenderView* render_view, float factor) {
@@ -232,13 +237,6 @@ void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) {
DisableAutoResizeForTesting(new_size);
}
-void UseMockMediaStreams(RenderFrame* render_frame) {
- RenderFrameImpl* render_frame_impl = static_cast<RenderFrameImpl*>(
- render_frame);
- render_frame_impl->SetMediaStreamClientForTesting(
- new TestMediaStreamClient(render_frame_impl));
-}
-
struct ToLower {
base::char16 operator()(base::char16 c) { return tolower(c); }
};
diff --git a/content/test/ppapi/OWNERS b/content/test/ppapi/OWNERS
new file mode 100644
index 0000000000..5b6134dd67
--- /dev/null
+++ b/content/test/ppapi/OWNERS
@@ -0,0 +1,5 @@
+dmichael@chromium.org
+bbudge@chromium.org
+raymes@chromium.org
+teravest@chromium.org
+yzshen@chromium.org
diff --git a/content/test/ppapi/ppapi_browsertest.cc b/content/test/ppapi/ppapi_browsertest.cc
new file mode 100644
index 0000000000..d684043506
--- /dev/null
+++ b/content/test/ppapi/ppapi_browsertest.cc
@@ -0,0 +1,122 @@
+// 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 "content/test/ppapi/ppapi_test.h"
+#include "ppapi/shared_impl/test_harness_utils.h"
+
+// This file lists tests for Pepper APIs (without NaCl) against content_shell.
+// TODO(teravest): Move more tests here. http://crbug.com/371873
+
+// See chrome/test/ppapi/ppapi_browsertests.cc for Pepper testing that's
+// covered in browser_tests.
+
+namespace content {
+namespace {
+
+// This macro finesses macro expansion to do what we want.
+#define STRIP_PREFIXES(test_name) ppapi::StripTestPrefixes(#test_name)
+
+#define TEST_PPAPI_IN_PROCESS(test_name) \
+ IN_PROC_BROWSER_TEST_F(PPAPITest, test_name) { \
+ RunTest(STRIP_PREFIXES(test_name)); \
+ }
+
+#define TEST_PPAPI_OUT_OF_PROCESS(test_name) \
+ IN_PROC_BROWSER_TEST_F(OutOfProcessPPAPITest, test_name) { \
+ RunTest(STRIP_PREFIXES(test_name)); \
+ }
+
+TEST_PPAPI_IN_PROCESS(BrowserFont)
+// crbug.com/308949
+#if defined(OS_WIN)
+#define MAYBE_OUT_BrowserFont DISABLED_BrowserFont
+#else
+#define MAYBE_OUT_BrowserFont BrowserFont
+#endif
+TEST_PPAPI_OUT_OF_PROCESS(MAYBE_OUT_BrowserFont)
+
+TEST_PPAPI_IN_PROCESS(Buffer)
+TEST_PPAPI_OUT_OF_PROCESS(Buffer)
+
+TEST_PPAPI_IN_PROCESS(CharSet)
+TEST_PPAPI_OUT_OF_PROCESS(CharSet)
+
+TEST_PPAPI_IN_PROCESS(Console)
+TEST_PPAPI_OUT_OF_PROCESS(Console)
+
+TEST_PPAPI_IN_PROCESS(Crypto)
+TEST_PPAPI_OUT_OF_PROCESS(Crypto)
+
+TEST_PPAPI_IN_PROCESS(Graphics2D)
+TEST_PPAPI_OUT_OF_PROCESS(Graphics2D)
+
+TEST_PPAPI_IN_PROCESS(ImageData)
+TEST_PPAPI_OUT_OF_PROCESS(ImageData)
+
+TEST_PPAPI_OUT_OF_PROCESS(InputEvent)
+
+// "Instance" tests are really InstancePrivate tests. InstancePrivate is not
+// supported in NaCl, so these tests are only run trusted.
+// Also note that these tests are run separately on purpose (versus collapsed
+// in to one IN_PROC_BROWSER_TEST_F macro), because some of them have leaks
+// on purpose that will look like failures to tests that are run later.
+TEST_PPAPI_IN_PROCESS(Instance_ExecuteScript)
+TEST_PPAPI_OUT_OF_PROCESS(Instance_ExecuteScript)
+
+IN_PROC_BROWSER_TEST_F(PPAPITest,
+ Instance_ExecuteScriptAtInstanceShutdown) {
+ // In other tests, we use one call to RunTest so that the tests can all run
+ // in one plugin instance. This saves time on loading the plugin (especially
+ // for NaCl). Here, we actually want to destroy the Instance, to test whether
+ // the destructor can run ExecuteScript successfully. That's why we have two
+ // separate calls to RunTest; the second one forces a navigation which
+ // destroys the instance from the prior RunTest.
+ // See test_instance_deprecated.cc for more information.
+ RunTest("Instance_SetupExecuteScriptAtInstanceShutdown");
+ RunTest("Instance_ExecuteScriptAtInstanceShutdown");
+}
+IN_PROC_BROWSER_TEST_F(OutOfProcessPPAPITest,
+ Instance_ExecuteScriptAtInstanceShutdown) {
+ // (See the comment for the in-process version of this test above)
+ RunTest("Instance_SetupExecuteScriptAtInstanceShutdown");
+ RunTest("Instance_ExecuteScriptAtInstanceShutdown");
+}
+
+TEST_PPAPI_IN_PROCESS(Instance_LeakedObjectDestructors)
+TEST_PPAPI_OUT_OF_PROCESS(Instance_LeakedObjectDestructors)
+
+TEST_PPAPI_IN_PROCESS(Memory)
+TEST_PPAPI_OUT_OF_PROCESS(Memory)
+
+// TODO(danakj): http://crbug.com/115286
+TEST_PPAPI_IN_PROCESS(DISABLED_Scrollbar)
+// http://crbug.com/89961
+TEST_PPAPI_OUT_OF_PROCESS(DISABLED_Scrollbar)
+
+TEST_PPAPI_IN_PROCESS(TraceEvent)
+TEST_PPAPI_OUT_OF_PROCESS(TraceEvent)
+
+TEST_PPAPI_IN_PROCESS(URLUtil)
+TEST_PPAPI_OUT_OF_PROCESS(URLUtil)
+
+TEST_PPAPI_IN_PROCESS(Var)
+TEST_PPAPI_OUT_OF_PROCESS(Var)
+
+// Flaky on mac, http://crbug.com/121107
+#if defined(OS_MACOSX)
+#define MAYBE_VarDeprecated DISABLED_VarDeprecated
+#else
+#define MAYBE_VarDeprecated VarDeprecated
+#endif
+TEST_PPAPI_IN_PROCESS(VarDeprecated)
+TEST_PPAPI_OUT_OF_PROCESS(MAYBE_VarDeprecated)
+
+TEST_PPAPI_IN_PROCESS(VarResource)
+TEST_PPAPI_OUT_OF_PROCESS(VarResource)
+
+TEST_PPAPI_IN_PROCESS(VideoDecoderDev)
+TEST_PPAPI_OUT_OF_PROCESS(VideoDecoderDev)
+
+} // namespace
+} // namespace content
diff --git a/content/test/ppapi/ppapi_test.cc b/content/test/ppapi/ppapi_test.cc
new file mode 100644
index 0000000000..0c3e529440
--- /dev/null
+++ b/content/test/ppapi/ppapi_test.cc
@@ -0,0 +1,122 @@
+// 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 "content/test/ppapi/ppapi_test.h"
+
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/files/file_path.h"
+#include "base/path_service.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_switches.h"
+#include "content/shell/browser/shell.h"
+#include "net/base/filename_util.h"
+#include "ppapi/shared_impl/ppapi_switches.h"
+#include "ppapi/shared_impl/test_harness_utils.h"
+
+namespace content {
+
+PPAPITestMessageHandler::PPAPITestMessageHandler() {
+}
+
+TestMessageHandler::MessageResponse PPAPITestMessageHandler::HandleMessage(
+ const std::string& json) {
+ std::string trimmed;
+ base::TrimString(json, "\"", &trimmed);
+ if (trimmed == "...")
+ return CONTINUE;
+ message_ = trimmed;
+ return DONE;
+}
+
+void PPAPITestMessageHandler::Reset() {
+ TestMessageHandler::Reset();
+ message_.clear();
+}
+
+PPAPITestBase::PPAPITestBase() { }
+
+void PPAPITestBase::SetUpCommandLine(base::CommandLine* command_line) {
+ // The test sends us the result via a cookie.
+ command_line->AppendSwitch(switches::kEnableFileCookies);
+
+ // Some stuff is hung off of the testing interface which is not enabled
+ // by default.
+ command_line->AppendSwitch(switches::kEnablePepperTesting);
+
+ // Smooth scrolling confuses the scrollbar test.
+ command_line->AppendSwitch(switches::kDisableSmoothScrolling);
+}
+
+GURL PPAPITestBase::GetTestFileUrl(const std::string& test_case) {
+ base::FilePath test_path;
+ EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_path));
+ test_path = test_path.Append(FILE_PATH_LITERAL("ppapi"));
+ test_path = test_path.Append(FILE_PATH_LITERAL("tests"));
+ test_path = test_path.Append(FILE_PATH_LITERAL("test_case.html"));
+
+ // Sanity check the file name.
+ EXPECT_TRUE(base::PathExists(test_path));
+ GURL test_url = net::FilePathToFileURL(test_path);
+
+ GURL::Replacements replacements;
+ std::string query = BuildQuery(std::string(), test_case);
+ replacements.SetQuery(query.c_str(), url::Component(0, query.size()));
+ return test_url.ReplaceComponents(replacements);
+}
+
+void PPAPITestBase::RunTest(const std::string& test_case) {
+ GURL url = GetTestFileUrl(test_case);
+ RunTestURL(url);
+}
+
+void PPAPITestBase::RunTestURL(const GURL& test_url) {
+ // See comment above TestingInstance in ppapi/test/testing_instance.h.
+ // Basically it sends messages using the DOM automation controller. The
+ // value of "..." means it's still working and we should continue to wait,
+ // any other value indicates completion (in this case it will start with
+ // "PASS" or "FAIL"). This keeps us from timing out on waits for long tests.
+ PPAPITestMessageHandler handler;
+ JavascriptTestObserver observer(shell()->web_contents(), &handler);
+ shell()->LoadURL(test_url);
+
+ ASSERT_TRUE(observer.Run()) << handler.error_message();
+ EXPECT_STREQ("PASS", handler.message().c_str());
+}
+
+PPAPITest::PPAPITest() : in_process_(true) {
+}
+
+void PPAPITest::SetUpCommandLine(base::CommandLine* command_line) {
+ PPAPITestBase::SetUpCommandLine(command_line);
+
+ // Append the switch to register the pepper plugin.
+ // library name = <out dir>/<test_name>.<library_extension>
+ // MIME type = application/x-ppapi-<test_name>
+ base::FilePath plugin_dir;
+ EXPECT_TRUE(PathService::Get(base::DIR_MODULE, &plugin_dir));
+
+ base::FilePath plugin_lib = plugin_dir.Append(ppapi::GetTestLibraryName());
+ EXPECT_TRUE(base::PathExists(plugin_lib));
+ base::FilePath::StringType pepper_plugin = plugin_lib.value();
+ pepper_plugin.append(FILE_PATH_LITERAL(";application/x-ppapi-tests"));
+ command_line->AppendSwitchNative(switches::kRegisterPepperPlugins,
+ pepper_plugin);
+
+ if (in_process_)
+ command_line->AppendSwitch(switches::kPpapiInProcess);
+}
+
+std::string PPAPITest::BuildQuery(const std::string& base,
+ const std::string& test_case){
+ return base::StringPrintf("%stestcase=%s", base.c_str(), test_case.c_str());
+}
+
+OutOfProcessPPAPITest::OutOfProcessPPAPITest() {
+ in_process_ = false;
+}
+
+} // namespace content
diff --git a/content/test/ppapi/ppapi_test.h b/content/test/ppapi/ppapi_test.h
new file mode 100644
index 0000000000..d9e9f71c1a
--- /dev/null
+++ b/content/test/ppapi/ppapi_test.h
@@ -0,0 +1,87 @@
+// 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.
+
+#ifndef CONTENT_TEST_PPAPI_PPAPI_TEST_H_
+#define CONTENT_TEST_PPAPI_PPAPI_TEST_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/javascript_test_observer.h"
+#include "net/test/spawned_test_server/spawned_test_server.h"
+#include "url/gurl.h"
+
+// This file provides test classes for writing Pepper tests for
+// content_browsertests. The interfaces provided here should look similar to
+// what's available in chrome/test/ppapi.
+
+namespace base {
+class CommandLine;
+}
+
+namespace content {
+
+class PPAPITestMessageHandler : public content::TestMessageHandler {
+ public:
+ PPAPITestMessageHandler();
+
+ virtual MessageResponse HandleMessage(const std::string& json) OVERRIDE;
+ virtual void Reset() OVERRIDE;
+
+ const std::string& message() const {
+ return message_;
+ }
+
+ private:
+ std::string message_;
+
+ DISALLOW_COPY_AND_ASSIGN(PPAPITestMessageHandler);
+};
+
+class PPAPITestBase : public ContentBrowserTest {
+ public:
+ PPAPITestBase();
+
+ // ContentBrowserTest overrides.
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
+
+ virtual std::string BuildQuery(const std::string& base,
+ const std::string& test_case) = 0;
+
+ // Returns the URL to load for file: tests.
+ GURL GetTestFileUrl(const std::string& test_case);
+ virtual void RunTest(const std::string& test_case);
+
+ protected:
+ // Runs the test for a tab given the tab that's already navigated to the
+ // given URL.
+ void RunTestURL(const GURL& test_url);
+};
+
+// In-process plugin test runner. See OutOfProcessPPAPITest below for the
+// out-of-process version.
+class PPAPITest : public PPAPITestBase {
+ public:
+ PPAPITest();
+
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
+
+ virtual std::string BuildQuery(const std::string& base,
+ const std::string& test_case) OVERRIDE;
+ protected:
+ bool in_process_; // Controls the --ppapi-in-process switch.
+};
+
+// Variant of PPAPITest that runs plugins out-of-process to test proxy
+// codepaths.
+class OutOfProcessPPAPITest : public PPAPITest {
+ public:
+ OutOfProcessPPAPITest();
+};
+
+} // namespace
+
+#endif // CONTENT_TEST_PPAPI_PPAPI_TEST_H_
diff --git a/content/test/test_media_stream_client.h b/content/test/test_media_stream_client.h
deleted file mode 100644
index 9f1e6d56b4..0000000000
--- a/content/test/test_media_stream_client.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_TEST_TEST_MEDIA_STREAM_CLIENT_H_
-#define CONTENT_TEST_TEST_MEDIA_STREAM_CLIENT_H_
-
-#include "base/callback_forward.h"
-#include "content/public/renderer/render_frame_observer.h"
-#include "content/renderer/media/media_stream_client.h"
-#include "third_party/WebKit/public/platform/WebURL.h"
-
-namespace content {
-
-// TestMediaStreamClient is a mock implementation of MediaStreamClient used when
-// running layout tests.
-class TestMediaStreamClient : public RenderFrameObserver,
- public MediaStreamClient {
- public:
- explicit TestMediaStreamClient(RenderFrame* render_frame);
- virtual ~TestMediaStreamClient();
-
- // MediaStreamClient implementation.
- virtual bool IsMediaStream(const GURL& url) OVERRIDE;
- virtual scoped_refptr<VideoFrameProvider> GetVideoFrameProvider(
- const GURL& url,
- const base::Closure& error_cb,
- const VideoFrameProvider::RepaintCB& repaint_cb) OVERRIDE;
- virtual scoped_refptr<MediaStreamAudioRenderer> GetAudioRenderer(
- const GURL& url, int render_frame_id) OVERRIDE;
-};
-
-} // namespace content
-
-#endif // CONTENT_TEST_TEST_MEDIA_STREAM_CLIENT_H_
diff --git a/content/test/test_media_stream_client.cc b/content/test/test_media_stream_renderer_factory.cc
index b0bab2be9f..49ccd45b1a 100644
--- a/content/test/test_media_stream_client.cc
+++ b/content/test/test_media_stream_renderer_factory.cc
@@ -1,8 +1,8 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// 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 "content/test/test_media_stream_client.h"
+#include "content/test/test_media_stream_renderer_factory.h"
#include "content/renderer/media/media_stream_audio_renderer.h"
#include "content/test/test_video_frame_provider.h"
@@ -37,16 +37,12 @@ bool IsMockMediaStreamWithVideo(const WebURL& url) {
namespace content {
-TestMediaStreamClient::TestMediaStreamClient(RenderFrame* render_frame)
- : RenderFrameObserver(render_frame) {}
+TestMediaStreamRendererFactory::TestMediaStreamRendererFactory() {}
-TestMediaStreamClient::~TestMediaStreamClient() {}
+TestMediaStreamRendererFactory::~TestMediaStreamRendererFactory() {}
-bool TestMediaStreamClient::IsMediaStream(const GURL& url) {
- return IsMockMediaStreamWithVideo(url);
-}
-
-scoped_refptr<VideoFrameProvider> TestMediaStreamClient::GetVideoFrameProvider(
+scoped_refptr<VideoFrameProvider>
+TestMediaStreamRendererFactory::GetVideoFrameProvider(
const GURL& url,
const base::Closure& error_cb,
const VideoFrameProvider::RepaintCB& repaint_cb) {
@@ -60,8 +56,9 @@ scoped_refptr<VideoFrameProvider> TestMediaStreamClient::GetVideoFrameProvider(
repaint_cb);
}
-scoped_refptr<MediaStreamAudioRenderer> TestMediaStreamClient::GetAudioRenderer(
- const GURL& url, int render_frame_id) {
+scoped_refptr<MediaStreamAudioRenderer>
+TestMediaStreamRendererFactory::GetAudioRenderer(
+ const GURL& url, int render_view_id, int render_frame_id) {
return NULL;
}
diff --git a/content/test/test_media_stream_renderer_factory.h b/content/test/test_media_stream_renderer_factory.h
new file mode 100644
index 0000000000..cf0aa7e1bd
--- /dev/null
+++ b/content/test/test_media_stream_renderer_factory.h
@@ -0,0 +1,35 @@
+// 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.
+
+#ifndef CONTENT_TEST_TEST_MEDIA_STREAM_RENDERER_FACTORY_H_
+#define CONTENT_TEST_TEST_MEDIA_STREAM_RENDERER_FACTORY_H_
+
+#include "base/callback_forward.h"
+#include "content/renderer/media/media_stream_renderer_factory.h"
+#include "third_party/WebKit/public/platform/WebURL.h"
+
+namespace content {
+
+// TestMediaStreamClient is a mock implementation of MediaStreamClient used when
+// running layout tests.
+class TestMediaStreamRendererFactory : public MediaStreamRendererFactory {
+ public:
+ TestMediaStreamRendererFactory();
+ virtual ~TestMediaStreamRendererFactory();
+
+ // MediaStreamRendererFactory implementation.
+ virtual scoped_refptr<VideoFrameProvider> GetVideoFrameProvider(
+ const GURL& url,
+ const base::Closure& error_cb,
+ const VideoFrameProvider::RepaintCB& repaint_cb) OVERRIDE;
+
+ virtual scoped_refptr<MediaStreamAudioRenderer> GetAudioRenderer(
+ const GURL& url,
+ int render_view_id,
+ int render_frame_id) OVERRIDE;
+};
+
+} // namespace content
+
+#endif // CONTENT_TEST_TEST_MEDIA_STREAM_RENDERER_FACTORY_H_
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 63ca1bb923..975c174e99 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -122,9 +122,6 @@ bool TestRenderWidgetHostView::CanCopyToVideoFrame() const {
return false;
}
-void TestRenderWidgetHostView::OnAcceleratedCompositingStateChange() {
-}
-
void TestRenderWidgetHostView::AcceleratedSurfaceInitialized(int host_id,
int route_id) {
}
@@ -242,6 +239,7 @@ TestRenderViewHost::~TestRenderViewHost() {
bool TestRenderViewHost::CreateRenderView(
const base::string16& frame_name,
int opener_route_id,
+ int proxy_route_id,
int32 max_page_id,
bool window_was_created_with_opener) {
DCHECK(!render_view_created_);
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 3b82382634..91ab49b9bb 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -125,7 +125,6 @@ class TestRenderWidgetHostView : public RenderWidgetHostViewBase {
const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) OVERRIDE;
virtual bool CanCopyToVideoFrame() const OVERRIDE;
- virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
virtual void AcceleratedSurfaceInitialized(int host_id,
int route_id) OVERRIDE;
virtual void AcceleratedSurfaceBuffersSwapped(
@@ -141,7 +140,6 @@ class TestRenderWidgetHostView : public RenderWidgetHostViewBase {
virtual bool PostProcessEventForPluginIme(
const NativeWebKeyboardEvent& event) OVERRIDE;
#elif defined(OS_ANDROID)
- virtual void SelectionRootBoundsChanged(const gfx::Rect&) OVERRIDE {}
virtual void ShowDisambiguationPopup(
const gfx::Rect& target_rect,
const SkBitmap& zoomed_bitmap) OVERRIDE {}
@@ -310,6 +308,7 @@ class TestRenderViewHost
virtual bool CreateRenderView(const base::string16& frame_name,
int opener_route_id,
+ int proxy_route_id,
int32 max_page_id,
bool window_was_created_with_opener) OVERRIDE;
virtual bool IsRenderViewLive() const OVERRIDE;
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc
index b1bb7e99c9..a9c239e2d3 100644
--- a/content/test/test_web_contents.cc
+++ b/content/test/test_web_contents.cc
@@ -99,12 +99,14 @@ WebPreferences TestWebContents::TestGetWebkitPrefs() {
bool TestWebContents::CreateRenderViewForRenderManager(
RenderViewHost* render_view_host,
int opener_route_id,
- CrossProcessFrameConnector* frame_connector) {
+ int proxy_routing_id,
+ bool for_main_frame) {
UpdateMaxPageIDIfNecessary(render_view_host);
// This will go to a TestRenderViewHost.
static_cast<RenderViewHostImpl*>(
render_view_host)->CreateRenderView(base::string16(),
opener_route_id,
+ proxy_routing_id,
-1, false);
return true;
}
diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h
index a0d682562c..e42abfef21 100644
--- a/content/test/test_web_contents.h
+++ b/content/test/test_web_contents.h
@@ -59,7 +59,8 @@ class TestWebContents : public WebContentsImpl, public WebContentsTester {
virtual bool CreateRenderViewForRenderManager(
RenderViewHost* render_view_host,
int opener_route_id,
- CrossProcessFrameConnector* frame_connector) OVERRIDE;
+ int proxy_routing_id,
+ bool for_main_frame) OVERRIDE;
virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE {}
// Returns a clone of this TestWebContents. The returned object is also a
diff --git a/content/test/web_layer_tree_view_impl_for_testing.cc b/content/test/web_layer_tree_view_impl_for_testing.cc
index 28bd7c84a3..11d00ee9a8 100644
--- a/content/test/web_layer_tree_view_impl_for_testing.cc
+++ b/content/test/web_layer_tree_view_impl_for_testing.cc
@@ -68,6 +68,11 @@ void WebLayerTreeViewImplForTesting::setViewportSize(
layer_tree_host_->SetViewportSize(device_viewport_size);
}
+void WebLayerTreeViewImplForTesting::setViewportSize(
+ const WebSize& device_viewport_size) {
+ layer_tree_host_->SetViewportSize(device_viewport_size);
+}
+
WebSize WebLayerTreeViewImplForTesting::layoutViewportSize() const {
return layer_tree_host_->device_viewport_size();
}
@@ -122,12 +127,6 @@ bool WebLayerTreeViewImplForTesting::commitRequested() const {
void WebLayerTreeViewImplForTesting::didStopFlinging() {}
-bool WebLayerTreeViewImplForTesting::compositeAndReadback(
- void* pixels, const WebRect& rect_in_device_viewport) {
- return layer_tree_host_->CompositeAndReadback(pixels,
- rect_in_device_viewport);
-}
-
void WebLayerTreeViewImplForTesting::finishAllRendering() {
layer_tree_host_->FinishAllRendering();
}
diff --git a/content/test/web_layer_tree_view_impl_for_testing.h b/content/test/web_layer_tree_view_impl_for_testing.h
index da04bb4330..c2b60c5e78 100644
--- a/content/test/web_layer_tree_view_impl_for_testing.h
+++ b/content/test/web_layer_tree_view_impl_for_testing.h
@@ -34,6 +34,7 @@ class WebLayerTreeViewImplForTesting
virtual void clearRootLayer();
virtual void setViewportSize(const blink::WebSize& unused_deprecated,
const blink::WebSize& device_viewport_size);
+ virtual void setViewportSize(const blink::WebSize& device_viewport_size);
virtual blink::WebSize layoutViewportSize() const;
virtual blink::WebSize deviceViewportSize() const;
virtual void setDeviceScaleFactor(float scale_factor);
@@ -51,7 +52,6 @@ class WebLayerTreeViewImplForTesting
virtual void setNeedsAnimate();
virtual bool commitRequested() const;
virtual void didStopFlinging();
- virtual bool compositeAndReadback(void* pixels, const blink::WebRect& rect);
virtual void finishAllRendering();
virtual void setDeferCommits(bool defer_commits);
virtual void registerViewportLayers(
diff --git a/content/test/webrtc_content_browsertest_base.cc b/content/test/webrtc_content_browsertest_base.cc
index e3f71910d1..5b0df6f59e 100644
--- a/content/test/webrtc_content_browsertest_base.cc
+++ b/content/test/webrtc_content_browsertest_base.cc
@@ -11,6 +11,7 @@
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
+#include "media/base/media_switches.h"
namespace content {
diff --git a/content/webkit_version.target.darwin-arm.mk b/content/webkit_version.target.darwin-arm.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.darwin-arm.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.darwin-arm64.mk b/content/webkit_version.target.darwin-arm64.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.darwin-arm64.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.darwin-mips.mk b/content/webkit_version.target.darwin-mips.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.darwin-mips.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.darwin-x86.mk b/content/webkit_version.target.darwin-x86.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.darwin-x86.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.darwin-x86_64.mk b/content/webkit_version.target.darwin-x86_64.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.darwin-x86_64.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.linux-arm.mk b/content/webkit_version.target.linux-arm.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.linux-arm.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.linux-arm64.mk b/content/webkit_version.target.linux-arm64.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.linux-arm64.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.linux-mips.mk b/content/webkit_version.target.linux-mips.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.linux-mips.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.linux-x86.mk b/content/webkit_version.target.linux-x86.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.linux-x86.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/webkit_version.target.linux-x86_64.mk b/content/webkit_version.target.linux-x86_64.mk
deleted file mode 100644
index d51647266b..0000000000
--- a/content/webkit_version.target.linux-x86_64.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := GYP
-LOCAL_MODULE := content_webkit_version_gyp
-LOCAL_MODULE_STEM := webkit_version
-LOCAL_MODULE_SUFFIX := .stamp
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-### Rules for action "generate_webkit_version":
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/webkit_version.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit_version.h: $(LOCAL_PATH)/build/util/version.py $(LOCAL_PATH)/build/util/LASTCHANGE.blink $(LOCAL_PATH)/content/webkit_version.h.in $(GYP_TARGET_DEPENDENCIES)
- @echo "Gyp action: content_content_gyp_webkit_version_target_generate_webkit_version ($@)"
- $(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir); python ../build/util/version.py -f ../build/util/LASTCHANGE.blink webkit_version.h.in "$(gyp_shared_intermediate_dir)/webkit_version.h"
-
-
-
-GYP_GENERATED_OUTPUTS := \
- $(gyp_shared_intermediate_dir)/webkit_version.h
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-### Rules for final target.
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: content_webkit_version_gyp
-
-# Alias gyp target name.
-.PHONY: webkit_version
-webkit_version: content_webkit_version_gyp
-
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)
-
-include $(BUILD_SYSTEM)/base_rules.mk
-
-$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
- $(hide) echo "Gyp timestamp: $@"
- $(hide) mkdir -p $(dir $@)
- $(hide) touch $@
-
-LOCAL_2ND_ARCH_VAR_PREFIX :=
diff --git a/content/worker/shared_worker_permission_client_proxy.cc b/content/worker/shared_worker_permission_client_proxy.cc
index eb187c252d..a7e0671bda 100644
--- a/content/worker/shared_worker_permission_client_proxy.cc
+++ b/content/worker/shared_worker_permission_client_proxy.cc
@@ -38,11 +38,12 @@ bool SharedWorkerPermissionClientProxy::allowDatabase(
return result;
}
-bool SharedWorkerPermissionClientProxy::allowFileSystem() {
+bool SharedWorkerPermissionClientProxy::requestFileSystemAccessSync() {
if (is_unique_origin_)
return false;
bool result = false;
- thread_safe_sender_->Send(new WorkerProcessHostMsg_AllowFileSystem(
+ thread_safe_sender_->Send(
+ new WorkerProcessHostMsg_RequestFileSystemAccessSync(
routing_id_, origin_url_, &result));
return result;
}
diff --git a/content/worker/shared_worker_permission_client_proxy.h b/content/worker/shared_worker_permission_client_proxy.h
index 61f58c9518..0240738347 100644
--- a/content/worker/shared_worker_permission_client_proxy.h
+++ b/content/worker/shared_worker_permission_client_proxy.h
@@ -30,7 +30,7 @@ class SharedWorkerPermissionClientProxy
virtual bool allowDatabase(const blink::WebString& name,
const blink::WebString& display_name,
unsigned long estimated_size);
- virtual bool allowFileSystem();
+ virtual bool requestFileSystemAccessSync();
virtual bool allowIndexedDB(const blink::WebString& name);
private:
diff --git a/content/worker/worker_webkitplatformsupport_impl.cc b/content/worker/worker_webkitplatformsupport_impl.cc
index 3a57f9486d..2f1a988104 100644
--- a/content/worker/worker_webkitplatformsupport_impl.cc
+++ b/content/worker/worker_webkitplatformsupport_impl.cc
@@ -7,7 +7,6 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/message_loop/message_loop_proxy.h"
-#include "base/platform_file.h"
#include "base/strings/utf_string_conversions.h"
#include "content/child/blink_glue.h"
#include "content/child/database_util.h"
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc
index 5f922a4d66..b5186734de 100644
--- a/content/zygote/zygote_linux.cc
+++ b/content/zygote/zygote_linux.cc
@@ -16,6 +16,7 @@
#include "base/linux_util.h"
#include "base/logging.h"
#include "base/macros.h"
+#include "base/memory/scoped_vector.h"
#include "base/pickle.h"
#include "base/posix/eintr_wrapper.h"
#include "base/posix/global_descriptors.h"
@@ -57,8 +58,8 @@ void CreatePipe(base::ScopedFD* read_pipe, base::ScopedFD* write_pipe) {
write_pipe->reset(raw_pipe[1]);
}
-void KillAndReap(pid_t pid, bool use_helper) {
- if (use_helper) {
+void KillAndReap(pid_t pid, ZygoteForkDelegate* helper) {
+ if (helper) {
// Helper children may be forked in another PID namespace, so |pid| might
// be meaningless to us; or we just might not be able to directly send it
// signals. So we can't kill it.
@@ -76,17 +77,10 @@ void KillAndReap(pid_t pid, bool use_helper) {
} // namespace
-Zygote::Zygote(int sandbox_flags,
- ZygoteForkDelegate* helper)
+Zygote::Zygote(int sandbox_flags, ScopedVector<ZygoteForkDelegate> helpers)
: sandbox_flags_(sandbox_flags),
- helper_(helper),
- initial_uma_sample_(0),
- initial_uma_boundary_value_(0) {
- if (helper_) {
- helper_->InitialUMA(&initial_uma_name_,
- &initial_uma_sample_,
- &initial_uma_boundary_value_);
- }
+ helpers_(helpers.Pass()),
+ initial_uma_index_(0) {
}
Zygote::~Zygote() {
@@ -265,9 +259,8 @@ bool Zygote::GetTerminationStatus(base::ProcessHandle real_pid,
// We know about |real_pid|.
const base::ProcessHandle child = child_info.internal_pid;
if (child_info.started_from_helper) {
- // Let the helper handle the request.
- DCHECK(helper_);
- if (!helper_->GetTerminationStatus(child, known_dead, status, exit_code)) {
+ if (!child_info.started_from_helper->GetTerminationStatus(
+ child, known_dead, status, exit_code)) {
return false;
}
} else {
@@ -330,14 +323,19 @@ int Zygote::ForkWithRealPid(const std::string& process_type,
std::string* uma_name,
int* uma_sample,
int* uma_boundary_value) {
- const bool use_helper = (helper_ && helper_->CanHelp(process_type,
- uma_name,
- uma_sample,
- uma_boundary_value));
+ ZygoteForkDelegate* helper = NULL;
+ for (ScopedVector<ZygoteForkDelegate>::iterator i = helpers_.begin();
+ i != helpers_.end();
+ ++i) {
+ if ((*i)->CanHelp(process_type, uma_name, uma_sample, uma_boundary_value)) {
+ helper = *i;
+ break;
+ }
+ }
base::ScopedFD read_pipe, write_pipe;
base::ProcessId pid = 0;
- if (use_helper) {
+ if (helper) {
int ipc_channel_fd = LookUpFd(fd_mapping, kPrimaryIPCChannel);
if (ipc_channel_fd < 0) {
DLOG(ERROR) << "Failed to find kPrimaryIPCChannel in FD mapping";
@@ -346,7 +344,7 @@ int Zygote::ForkWithRealPid(const std::string& process_type,
std::vector<int> fds;
fds.push_back(ipc_channel_fd); // kBrowserFDIndex
fds.push_back(pid_oracle.get()); // kPIDOracleFDIndex
- pid = helper_->Fork(process_type, fds, channel_id);
+ pid = helper->Fork(process_type, fds, channel_id);
// Helpers should never return in the child process.
CHECK_NE(pid, 0);
@@ -416,16 +414,16 @@ int Zygote::ForkWithRealPid(const std::string& process_type,
// If we successfully forked a child, but it crashed without sending
// a message to the browser, the browser won't have found its PID.
if (real_pid < 0) {
- KillAndReap(pid, use_helper);
+ KillAndReap(pid, helper);
return -1;
}
// If we're not using a helper, send the PID back to the child process.
- if (!use_helper) {
+ if (!helper) {
ssize_t written =
HANDLE_EINTR(write(write_pipe.get(), &real_pid, sizeof(real_pid)));
if (written != sizeof(real_pid)) {
- KillAndReap(pid, use_helper);
+ KillAndReap(pid, helper);
return -1;
}
}
@@ -436,7 +434,7 @@ int Zygote::ForkWithRealPid(const std::string& process_type,
NOTREACHED();
}
process_info_map_[real_pid].internal_pid = pid;
- process_info_map_[real_pid].started_from_helper = use_helper;
+ process_info_map_[real_pid].started_from_helper = helper;
return real_pid;
}
@@ -538,14 +536,11 @@ bool Zygote::HandleForkRequest(int fd,
pickle, iter, fds.Pass(), &uma_name, &uma_sample, &uma_boundary_value);
if (child_pid == 0)
return true;
- if (uma_name.empty()) {
- // There is no UMA report from this particular fork.
- // Use the initial UMA report if any, and clear that record for next time.
- // Note the swap method here is the efficient way to do this, since
- // we know uma_name is empty.
- uma_name.swap(initial_uma_name_);
- uma_sample = initial_uma_sample_;
- uma_boundary_value = initial_uma_boundary_value_;
+ // If there's no UMA report for this particular fork, then check if any
+ // helpers have an initial UMA report for us to send instead.
+ while (uma_name.empty() && initial_uma_index_ < helpers_.size()) {
+ helpers_[initial_uma_index_++]->InitialUMA(
+ &uma_name, &uma_sample, &uma_boundary_value);
}
// Must always send reply, as ZygoteHost blocks while waiting for it.
Pickle reply_pickle;
diff --git a/content/zygote/zygote_linux.h b/content/zygote/zygote_linux.h
index 8e1996cb87..ef7e071c9f 100644
--- a/content/zygote/zygote_linux.h
+++ b/content/zygote/zygote_linux.h
@@ -5,6 +5,8 @@
#ifndef CONTENT_ZYGOTE_ZYGOTE_H_
#define CONTENT_ZYGOTE_ZYGOTE_H_
+#include <stddef.h>
+
#include <string>
#include "base/containers/small_map.h"
@@ -26,8 +28,7 @@ class ZygoteForkDelegate;
// runs it.
class Zygote {
public:
- Zygote(int sandbox_flags,
- ZygoteForkDelegate* helper);
+ Zygote(int sandbox_flags, ScopedVector<ZygoteForkDelegate> helpers);
~Zygote();
bool ProcessRequests();
@@ -36,9 +37,8 @@ class Zygote {
struct ZygoteProcessInfo {
// Pid from inside the Zygote's PID namespace.
base::ProcessHandle internal_pid;
- // Keeps track of whether or not a process was started from a fork
- // delegate helper.
- bool started_from_helper;
+ // Keeps track of which fork delegate helper the process was started from.
+ ZygoteForkDelegate* started_from_helper;
};
typedef base::SmallMap< std::map<base::ProcessHandle, ZygoteProcessInfo> >
ZygoteProcessMap;
@@ -119,13 +119,10 @@ class Zygote {
ZygoteProcessMap process_info_map_;
const int sandbox_flags_;
- ZygoteForkDelegate* helper_;
+ ScopedVector<ZygoteForkDelegate> helpers_;
- // These might be set by helper_->InitialUMA. They supply a UMA enumeration
- // sample we should report on the first fork.
- std::string initial_uma_name_;
- int initial_uma_sample_;
- int initial_uma_boundary_value_;
+ // Count of how many fork delegates for which we've invoked InitialUMA().
+ size_t initial_uma_index_;
};
} // namespace content
diff --git a/content/zygote/zygote_main.h b/content/zygote/zygote_main.h
index 6470232343..119210f14d 100644
--- a/content/zygote/zygote_main.h
+++ b/content/zygote/zygote_main.h
@@ -5,13 +5,16 @@
#ifndef CONTENT_ZYGOTE_ZYGOTE_MAIN_H_
#define CONTENT_ZYGOTE_ZYGOTE_MAIN_H_
+template <typename>
+class ScopedVector;
+
namespace content {
struct MainFunctionParams;
class ZygoteForkDelegate;
bool ZygoteMain(const MainFunctionParams& params,
- ZygoteForkDelegate* forkdelegate);
+ ScopedVector<ZygoteForkDelegate> fork_delegates);
} // namespace content
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc
index 11f06022d1..b4da14eee8 100644
--- a/content/zygote/zygote_main_linux.cc
+++ b/content/zygote/zygote_main_linux.cc
@@ -5,25 +5,18 @@
#include "content/zygote/zygote_main.h"
#include <dlfcn.h>
-#include <errno.h>
-#include <fcntl.h>
#include <pthread.h>
-#include <stdio.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
+#include <string.h>
#include <sys/types.h>
-#include <sys/wait.h>
#include <unistd.h>
#include "base/basictypes.h"
#include "base/bind.h"
-#include "base/callback.h"
#include "base/command_line.h"
#include "base/compiler_specific.h"
-#include "base/linux_util.h"
+#include "base/memory/scoped_vector.h"
#include "base/native_library.h"
#include "base/pickle.h"
-#include "base/posix/eintr_wrapper.h"
#include "base/posix/unix_domain_socket_linux.h"
#include "base/rand_util.h"
#include "base/sys_info.h"
@@ -47,11 +40,7 @@
#include "third_party/skia/include/ports/SkFontConfigInterface.h"
#if defined(OS_LINUX)
-#include <sys/epoll.h>
#include <sys/prctl.h>
-#include <sys/signal.h>
-#else
-#include <signal.h>
#endif
#if defined(ENABLE_WEBRTC)
@@ -180,17 +169,6 @@ static void InitLibcLocaltimeFunctions() {
g_libc_localtime64_r = g_libc_localtime_r;
}
-#if defined(MEMORY_SANITIZER)
-void msan_unpoison_string(const char *s) {
- if (!s) return;
- // Can't call strlen() on an uninitialized string. Instead, unpoison byte by
- // byte until the string is over.
- do {
- __msan_unpoison(s, sizeof(*s));
- } while(*(s++));
-}
-#endif
-
// Define localtime_override() function with asm name "localtime", so that all
// references to localtime() will resolve to this function. Notice that we need
// to set visibility attribute to "default" to export the symbol, as it is set
@@ -212,7 +190,7 @@ struct tm* localtime_override(const time_t* timep) {
struct tm* res = g_libc_localtime(timep);
#if defined(MEMORY_SANITIZER)
if (res) __msan_unpoison(res, sizeof(*res));
- if (res->tm_zone) msan_unpoison_string(res->tm_zone);
+ if (res->tm_zone) __msan_unpoison_string(res->tm_zone);
#endif
return res;
}
@@ -236,7 +214,7 @@ struct tm* localtime64_override(const time_t* timep) {
struct tm* res = g_libc_localtime64(timep);
#if defined(MEMORY_SANITIZER)
if (res) __msan_unpoison(res, sizeof(*res));
- if (res->tm_zone) msan_unpoison_string(res->tm_zone);
+ if (res->tm_zone) __msan_unpoison_string(res->tm_zone);
#endif
return res;
}
@@ -257,7 +235,7 @@ struct tm* localtime_r_override(const time_t* timep, struct tm* result) {
struct tm* res = g_libc_localtime_r(timep, result);
#if defined(MEMORY_SANITIZER)
if (res) __msan_unpoison(res, sizeof(*res));
- if (res->tm_zone) msan_unpoison_string(res->tm_zone);
+ if (res->tm_zone) __msan_unpoison_string(res->tm_zone);
#endif
return res;
}
@@ -278,7 +256,7 @@ struct tm* localtime64_r_override(const time_t* timep, struct tm* result) {
struct tm* res = g_libc_localtime64_r(timep, result);
#if defined(MEMORY_SANITIZER)
if (res) __msan_unpoison(res, sizeof(*res));
- if (res->tm_zone) msan_unpoison_string(res->tm_zone);
+ if (res->tm_zone) __msan_unpoison_string(res->tm_zone);
#endif
return res;
}
@@ -442,7 +420,7 @@ static void EnterLayerOneSandbox(LinuxSandbox* linux_sandbox,
}
bool ZygoteMain(const MainFunctionParams& params,
- ZygoteForkDelegate* forkdelegate) {
+ ScopedVector<ZygoteForkDelegate> fork_delegates) {
g_am_zygote_or_renderer = true;
sandbox::InitLibcUrandomOverrides();
@@ -462,11 +440,12 @@ bool ZygoteMain(const MainFunctionParams& params,
std::vector<int>()));
}
- if (forkdelegate != NULL) {
- VLOG(1) << "ZygoteMain: initializing fork delegate";
- forkdelegate->Init(GetSandboxFD(), must_enable_setuid_sandbox);
- } else {
- VLOG(1) << "ZygoteMain: fork delegate is NULL";
+ VLOG(1) << "ZygoteMain: initializing " << fork_delegates.size()
+ << " fork delegates";
+ for (ScopedVector<ZygoteForkDelegate>::iterator i = fork_delegates.begin();
+ i != fork_delegates.end();
+ ++i) {
+ (*i)->Init(GetSandboxFD(), must_enable_setuid_sandbox);
}
// Turn on the first layer of the sandbox if the configuration warrants it.
@@ -476,7 +455,7 @@ bool ZygoteMain(const MainFunctionParams& params,
bool setuid_sandbox_engaged = sandbox_flags & kSandboxLinuxSUID;
CHECK_EQ(must_enable_setuid_sandbox, setuid_sandbox_engaged);
- Zygote zygote(sandbox_flags, forkdelegate);
+ Zygote zygote(sandbox_flags, fork_delegates.Pass());
// This function call can return multiple times, once per fork().
return zygote.ProcessRequests();
}