summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-05-05 15:22:25 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-05-05 15:22:44 +0200
commit4f62685dfa09d64a8fcd2de9ed0adb7fe5747b78 (patch)
tree9dc9c3ba8ab461f7ee3d444222246be5ed55ae3f
parent19de26b7efd6b993f2af26cf435f04c716d3f5bc (diff)
parentbb09965444b5bb20b096a291445170876225268d (diff)
downloadqtwebengine-chromium-4f62685dfa09d64a8fcd2de9ed0adb7fe5747b78.tar.gz
Merge branch 'upstream-master' into 58-based
Change-Id: I8c280ca9068fdda9cf6276725bfb8608eccb497a
-rw-r--r--chromium/DEPS22
-rw-r--r--chromium/base/process/launch_win.cc9
-rw-r--r--chromium/build/util/LASTCHANGE2
-rw-r--r--chromium/build/util/LASTCHANGE.blink2
-rw-r--r--chromium/cc/output/direct_renderer.cc17
-rw-r--r--chromium/cc/output/gl_renderer.cc5
-rw-r--r--chromium/cc/output/overlay_unittest.cc4
-rw-r--r--chromium/chrome/BUILD.gn21
-rw-r--r--chromium/chrome/VERSION2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_ar.xtb2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_id.xtb2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_pl.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_am.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_ar.xtb12
-rw-r--r--chromium/chrome/app/resources/generated_resources_bg.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_ca.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_da.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_en-GB.xtb44
-rw-r--r--chromium/chrome/app/resources/generated_resources_es.xtb16
-rw-r--r--chromium/chrome/app/resources/generated_resources_et.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_fa.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_fr.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_hi.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_hr.xtb36
-rw-r--r--chromium/chrome/app/resources/generated_resources_hu.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_id.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_it.xtb14
-rw-r--r--chromium/chrome/app/resources/generated_resources_iw.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_ja.xtb30
-rw-r--r--chromium/chrome/app/resources/generated_resources_kn.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_ko.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_mr.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_nl.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_pl.xtb22
-rw-r--r--chromium/chrome/app/resources/generated_resources_pt-PT.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_ro.xtb12
-rw-r--r--chromium/chrome/app/resources/generated_resources_ru.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_sk.xtb32
-rw-r--r--chromium/chrome/app/resources/generated_resources_sl.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_sw.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_te.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_th.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_tr.xtb10
-rw-r--r--chromium/chrome/app/resources/generated_resources_uk.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_vi.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_id.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_pl.xtb2
-rw-r--r--chromium/chrome/browser/BUILD.gn2
-rw-r--r--chromium/chrome/browser/chromeos/BUILD.gn2
-rw-r--r--chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc7
-rw-r--r--chromium/chrome/browser/extensions/api/identity/identity_api.cc4
-rw-r--r--chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc2
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json6
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json6
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_win.json6
-rw-r--r--chromium/chrome/browser/resources/welcome/welcome.css4
-rw-r--r--chromium/components/arc/common/notifications.mojom12
-rw-r--r--chromium/components/autofill/content/browser/BUILD.gn3
-rw-r--r--chromium/components/autofill/content/browser/content_autofill_driver.cc27
-rw-r--r--chromium/components/autofill/content/browser/content_autofill_driver.h17
-rw-r--r--chromium/components/autofill/content/browser/key_press_handler_manager.cc37
-rw-r--r--chromium/components/autofill/content/browser/key_press_handler_manager.h47
-rw-r--r--chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc113
-rw-r--r--chromium/components/autofill/core/browser/autofill_external_delegate.cc4
-rw-r--r--chromium/components/autofill/core/browser/autofill_external_delegate.h1
-rw-r--r--chromium/components/autofill/core/browser/autofill_popup_delegate.h5
-rw-r--r--chromium/components/display_compositor/buffer_queue.cc21
-rw-r--r--chromium/components/display_compositor/buffer_queue.h5
-rw-r--r--chromium/components/exo/pointer.cc6
-rw-r--r--chromium/components/exo/shell_surface.cc83
-rw-r--r--chromium/components/exo/shell_surface.h14
-rw-r--r--chromium/components/exo/shell_surface_unittest.cc50
-rw-r--r--chromium/components/exo/touch.cc9
-rw-r--r--chromium/components/exo/touch_unittest.cc9
-rw-r--r--chromium/components/exo/wayland/server.cc20
-rw-r--r--chromium/components/offline_pages/core/downloads/download_notifying_observer.cc5
-rw-r--r--chromium/components/password_manager/content/browser/content_password_manager_driver.cc5
-rw-r--r--chromium/components/password_manager/content/browser/content_password_manager_driver.h1
-rw-r--r--chromium/components/password_manager/core/browser/password_autofill_manager.cc9
-rw-r--r--chromium/components/password_manager/core/browser/password_autofill_manager.h1
-rw-r--r--chromium/components/password_manager/core/browser/password_manager_driver.h4
-rw-r--r--chromium/components/password_manager/core/browser/stub_password_manager_driver.cc4
-rw-r--r--chromium/components/password_manager/core/browser/stub_password_manager_driver.h1
-rw-r--r--chromium/components/ssl_errors/error_classification.cc57
-rw-r--r--chromium/components/ssl_errors/error_classification.h38
-rw-r--r--chromium/components/ssl_errors/error_classification_unittest.cc140
-rw-r--r--chromium/components/ssl_errors/error_info.cc34
-rw-r--r--chromium/components/strings/components_strings_es.xtb8
-rw-r--r--chromium/components/url_formatter/url_formatter.cc79
-rw-r--r--chromium/components/url_formatter/url_formatter_unittest.cc30
-rw-r--r--chromium/components/user_manager/user_manager_base.cc17
-rw-r--r--chromium/components/user_manager/user_manager_base.h7
-rw-r--r--chromium/content/app/strings/translations/content_strings_es.xtb2
-rw-r--r--chromium/content/browser/android/date_time_chooser_android.cc10
-rw-r--r--chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc13
-rw-r--r--chromium/content/browser/find_request_manager.cc6
-rw-r--r--chromium/content/browser/frame_host/navigation_handle_impl.cc6
-rw-r--r--chromium/content/browser/frame_host/render_frame_host_manager.cc35
-rw-r--r--chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc49
-rw-r--r--chromium/content/browser/gpu/gpu_process_host.cc66
-rw-r--r--chromium/content/browser/gpu/gpu_process_host.h17
-rw-r--r--chromium/content/browser/loader/resource_dispatcher_host_impl.cc14
-rw-r--r--chromium/content/browser/loader/resource_dispatcher_host_impl.h8
-rw-r--r--chromium/content/browser/media/android/media_player_renderer.cc1
-rw-r--r--chromium/content/browser/pointer_lock_browsertest.cc111
-rw-r--r--chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc22
-rw-r--r--chromium/content/browser/renderer_host/render_widget_host_view_mac.mm3
-rw-r--r--chromium/content/browser/security_exploit_browsertest.cc2
-rw-r--r--chromium/content/browser/service_worker/service_worker_browsertest.cc2
-rw-r--r--chromium/content/common/drag_traits.h1
-rw-r--r--chromium/content/common/gpu_host_messages.h21
-rw-r--r--chromium/content/common/sandbox_win.cc2
-rw-r--r--chromium/content/gpu/gpu_child_thread.cc12
-rw-r--r--chromium/content/gpu/gpu_child_thread.h2
-rw-r--r--chromium/content/public/browser/resource_dispatcher_host.h20
-rw-r--r--chromium/content/public/common/common_param_traits_macros.h1
-rw-r--r--chromium/content/public/common/web_preferences.cc3
-rw-r--r--chromium/content/public/common/web_preferences.h6
-rw-r--r--chromium/content/renderer/media/webmediaplayer_ms.cc5
-rw-r--r--chromium/content/renderer/media/webmediaplayer_ms.h2
-rw-r--r--chromium/content/renderer/media_recorder/video_track_recorder.cc45
-rw-r--r--chromium/content/renderer/media_recorder/video_track_recorder.h6
-rw-r--r--chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc31
-rw-r--r--chromium/content/renderer/render_view_impl.cc2
-rw-r--r--chromium/content/renderer/render_widget.cc3
-rw-r--r--chromium/device/usb/webusb_descriptors.cc10
-rw-r--r--chromium/device/usb/webusb_descriptors.h8
-rw-r--r--chromium/extensions/browser/app_window/app_window.cc7
-rw-r--r--chromium/extensions/browser/app_window/app_window.h4
-rw-r--r--chromium/extensions/browser/extension_icon_image.h3
-rw-r--r--chromium/extensions/common/api/_permission_features.json2
-rw-r--r--chromium/extensions/renderer/i18n_custom_bindings.cc17
-rw-r--r--chromium/extensions/renderer/resources/guest_view/guest_view.js2
-rw-r--r--chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js6
-rw-r--r--chromium/extensions/renderer/resources/guest_view/guest_view_container.js2
-rw-r--r--chromium/extensions/renderer/resources/guest_view/guest_view_events.js6
-rw-r--r--chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js6
-rw-r--r--chromium/extensions/strings/extensions_strings_ca.xtb2
-rw-r--r--chromium/gpu/command_buffer/common/capabilities.h3
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc4
-rw-r--r--chromium/gpu/config/gpu_driver_bug_list_json.cc18
-rw-r--r--chromium/gpu/config/gpu_driver_bug_workaround_type.h2
-rw-r--r--chromium/gpu/config/software_rendering_list_json.cc7
-rw-r--r--chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h1
-rw-r--r--chromium/ios/chrome/browser/ui/history/BUILD.gn3
-rw-r--r--chromium/media/base/container_names.cc44
-rw-r--r--chromium/media/base/container_names_unittest.cc2
-rw-r--r--chromium/media/blink/webmediaplayer_impl.cc23
-rw-r--r--chromium/media/blink/webmediaplayer_impl.h4
-rw-r--r--chromium/media/renderers/skcanvas_video_renderer.cc38
-rw-r--r--chromium/media/renderers/skcanvas_video_renderer.h10
-rw-r--r--chromium/net/BUILD.gn1
-rw-r--r--chromium/net/base/registry_controlled_domains/effective_tld_names.dat85
-rw-r--r--chromium/net/base/registry_controlled_domains/effective_tld_names.gperf30
-rw-r--r--chromium/net/cert/x509_certificate.h5
-rw-r--r--chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem75
-rw-r--r--chromium/net/data/ssl/scripts/ee.cnf7
-rwxr-xr-xchromium/net/data/ssl/scripts/generate-test-certs.sh5
-rw-r--r--chromium/net/test/test_certificate_data.h10
-rw-r--r--chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc13
-rw-r--r--chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc9
-rw-r--r--chromium/services/ui/gpu/interfaces/gpu_service.mojom2
-rw-r--r--chromium/services/ui/surfaces/display_output_surface_ozone.cc12
-rw-r--r--chromium/skia/ext/skia_commit_hash.h2
-rw-r--r--chromium/testing/variations/fieldtrial_testing_config.json15
-rw-r--r--chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp4
-rw-r--r--chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/Document.cpp14
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp14
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h3
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/Range.cpp10
-rw-r--r--chromium/third_party/WebKit/Source/core/frame/Settings.json57
-rw-r--r--chromium/third_party/WebKit/Source/core/frame/UseCounter.h47
-rw-r--r--chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp6
-rw-r--r--chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h3
-rw-r--r--chromium/third_party/WebKit/Source/core/input/EventHandler.cpp10
-rw-r--r--chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp18
-rw-r--r--chromium/third_party/WebKit/Source/core/input/MouseEventManager.h3
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp18
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp3
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp63
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp44
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h2
-rw-r--r--chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp13
-rw-r--r--chromium/third_party/WebKit/Source/core/page/PageAnimator.h7
-rw-r--r--chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp7
-rw-r--r--chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp2
-rw-r--r--chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp19
-rw-r--r--chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h7
-rw-r--r--chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp10
-rw-r--r--chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp57
-rw-r--r--chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h18
-rw-r--r--chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp21
-rw-r--r--chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h13
-rw-r--r--chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp16
-rw-r--r--chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h4
-rw-r--r--chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp13
-rw-r--r--chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h1
-rw-r--r--chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp12
-rw-r--r--chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp7
-rw-r--r--chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h1
-rw-r--r--chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp22
-rw-r--r--chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp5
-rw-r--r--chromium/third_party/WebKit/Source/web/WebSettingsImpl.h1
-rw-r--r--chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp5
-rw-r--r--chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h1
-rw-r--r--chromium/third_party/WebKit/Source/web/WebViewImpl.cpp5
-rw-r--r--chromium/third_party/WebKit/Source/web/WebViewImpl.h1
-rw-r--r--chromium/third_party/WebKit/public/platform/WebMediaPlayer.h11
-rw-r--r--chromium/third_party/WebKit/public/web/WebSettings.h1
-rw-r--r--chromium/third_party/WebKit/public/web/WebWidget.h3
-rw-r--r--chromium/third_party/catapult/tracing/trace_viewer.gypi37
-rw-r--r--chromium/third_party/icu/android/icudtl.datbin6610128 -> 6573872 bytes
-rw-r--r--chromium/third_party/icu/common/icudtb.datbin10166816 -> 10130560 bytes
-rw-r--r--chromium/third_party/icu/common/icudtl.datbin10166816 -> 10130560 bytes
-rw-r--r--chromium/third_party/icu/patches/linebrk.patch12
-rw-r--r--chromium/third_party/icu/scripts/data_files_to_preserve.txt4
-rwxr-xr-xchromium/third_party/icu/scripts/trim_data.sh9
-rwxr-xr-xchromium/third_party/icu/scripts/update.sh2
-rw-r--r--chromium/third_party/icu/source/data/misc/metaZones.txt15
-rw-r--r--chromium/third_party/icu/source/data/misc/timezoneTypes.txt19
-rw-r--r--chromium/third_party/icu/source/data/misc/windowsZones.txt7
-rw-r--r--chromium/third_party/icu/source/data/misc/zoneinfo64.txt2322
-rw-r--r--chromium/third_party/icu/source/data/translit/root_subset.txt23
-rw-r--r--chromium/third_party/icu/source/data/translit/trnslocal.mk2
-rw-r--r--chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp5
-rw-r--r--chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc63
-rw-r--r--chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h21
-rw-r--r--chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc8
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc14
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc19
-rw-r--r--chromium/tools/mb/mb_config.pyl9
-rw-r--r--chromium/ui/arc/notification/arc_custom_notification_item.cc1
-rw-r--r--chromium/ui/arc/notification/arc_custom_notification_item.h5
-rw-r--r--chromium/ui/arc/notification/arc_custom_notification_view.cc142
-rw-r--r--chromium/ui/arc/notification/arc_custom_notification_view.h20
-rw-r--r--chromium/ui/events/ozone/evdev/touch_evdev_types.h2
-rw-r--r--chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc24
-rw-r--r--chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h6
-rw-r--r--chromium/ui/message_center/message_center_impl.cc7
-rw-r--r--chromium/ui/message_center/message_center_observer.h5
-rw-r--r--chromium/ui/message_center/message_center_style.h3
-rw-r--r--chromium/ui/message_center/message_center_tray.cc5
-rw-r--r--chromium/ui/message_center/message_center_tray.h1
-rw-r--r--chromium/ui/message_center/notification_delegate.cc4
-rw-r--r--chromium/ui/message_center/notification_delegate.h3
-rw-r--r--chromium/ui/message_center/popup_timer.h3
-rw-r--r--chromium/ui/message_center/popup_timers_controller.cc12
-rw-r--r--chromium/ui/message_center/views/message_center_view.cc78
-rw-r--r--chromium/ui/message_center/views/message_center_view.h3
-rw-r--r--chromium/ui/message_center/views/message_center_view_unittest.cc26
-rw-r--r--chromium/ui/message_center/views/message_list_view.cc123
-rw-r--r--chromium/ui/message_center/views/message_list_view.h15
-rw-r--r--chromium/ui/message_center/views/message_list_view_unittest.cc140
-rw-r--r--chromium/ui/message_center/views/message_popup_collection.cc26
-rw-r--r--chromium/ui/message_center/views/message_popup_collection.h9
-rw-r--r--chromium/ui/message_center/views/padded_button.cc4
-rw-r--r--chromium/ui/message_center/views/toast_contents_view.cc9
-rw-r--r--chromium/ui/message_center/views/toast_contents_view.h5
-rw-r--r--chromium/ui/ozone/platform/drm/gpu/screen_manager.cc13
-rw-r--r--chromium/ui/strings/translations/ui_strings_ca.xtb4
-rw-r--r--chromium/ui/views/bubble/bubble_frame_view.cc3
-rw-r--r--chromium/ui/views/bubble/bubble_frame_view_unittest.cc12
-rw-r--r--chromium/ui/views/controls/native/native_view_host.cc3
-rw-r--r--chromium/ui/views/window/dialog_delegate_unittest.cc81
-rw-r--r--chromium/v8/gypfiles/toolchain.gypi2
-rw-r--r--chromium/v8/include/v8-version.h2
-rw-r--r--chromium/v8/src/arm/code-stubs-arm.cc1
-rw-r--r--chromium/v8/src/arm/macro-assembler-arm.cc23
-rw-r--r--chromium/v8/src/arm/macro-assembler-arm.h9
-rw-r--r--chromium/v8/src/ast/scopes.cc6
-rw-r--r--chromium/v8/src/bootstrapper.cc9
-rw-r--r--chromium/v8/src/builtins/builtins-regexp.cc211
-rw-r--r--chromium/v8/src/builtins/builtins-regexp.h11
-rw-r--r--chromium/v8/src/builtins/builtins-string.cc2
-rw-r--r--chromium/v8/src/compiler/js-builtin-reducer.cc28
-rw-r--r--chromium/v8/src/compiler/js-call-reducer.cc4
-rw-r--r--chromium/v8/src/compiler/js-inlining.cc6
-rw-r--r--chromium/v8/src/compiler/js-native-context-specialization.cc14
-rw-r--r--chromium/v8/src/compiler/node-properties.cc29
-rw-r--r--chromium/v8/src/compiler/node-properties.h11
-rw-r--r--chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc3
-rw-r--r--chromium/v8/src/full-codegen/arm/full-codegen-arm.cc4
-rw-r--r--chromium/v8/src/heap/array-buffer-tracker-inl.h4
-rw-r--r--chromium/v8/src/heap/array-buffer-tracker.cc2
-rw-r--r--chromium/v8/src/heap/heap.cc10
-rw-r--r--chromium/v8/src/heap/mark-compact.cc11
-rw-r--r--chromium/v8/src/heap/remembered-set.h18
-rw-r--r--chromium/v8/src/heap/spaces.cc2
-rw-r--r--chromium/v8/src/heap/spaces.h6
-rw-r--r--chromium/v8/src/i18n.cc12
-rw-r--r--chromium/v8/src/inspector/inspector.gyp28
-rw-r--r--chromium/v8/src/interpreter/bytecode-array-builder.cc6
-rw-r--r--chromium/v8/src/interpreter/bytecode-array-builder.h1
-rw-r--r--chromium/v8/src/interpreter/bytecode-generator.cc8
-rw-r--r--chromium/v8/src/parsing/parser-base.h35
-rw-r--r--chromium/v8/src/parsing/parser.cc9
-rw-r--r--chromium/v8/src/regexp/regexp-utils.cc9
-rw-r--r--chromium/v8/src/runtime/runtime-i18n.cc10
-rw-r--r--chromium/v8/src/wasm/wasm-debug.cc1
-rw-r--r--chromium/v8/src/wasm/wasm-js.cc1
-rw-r--r--chromium/v8/src/wasm/wasm-module.cc51
-rw-r--r--chromium/v8/src/wasm/wasm-module.h3
-rw-r--r--chromium/v8/src/wasm/wasm-objects.cc10
-rw-r--r--chromium/v8/src/wasm/wasm-objects.h28
305 files changed, 4600 insertions, 2426 deletions
diff --git a/chromium/DEPS b/chromium/DEPS
index ed8160ca2de..9427921e32d 100644
--- a/chromium/DEPS
+++ b/chromium/DEPS
@@ -10,7 +10,7 @@ vars = {
'buildtools_revision':
'b3771b1935ea74c388b6fb1750e83f5d83b39dec',
'catapult_revision':
- '7ef761733d291aabe77a456fe91083a966aa3caa',
+ '49eb11f63eb4d552d634833a01d2710208ba0523',
'chromium_git':
'https://chromium.googlesource.com',
'devtools_node_modules_revision':
@@ -88,7 +88,7 @@ deps = {
'src/third_party/boringssl/src':
(Var("boringssl_git")) + '/boringssl.git@be2ee342d3781ddb954f91f8a7e660c6f59e87e5',
'src/third_party/catapult':
- (Var("chromium_git")) + '/external/github.com/catapult-project/catapult.git@7ef761733d291aabe77a456fe91083a966aa3caa',
+ (Var("chromium_git")) + '/external/github.com/catapult-project/catapult.git@49eb11f63eb4d552d634833a01d2710208ba0523',
'src/third_party/ced/src':
(Var("chromium_git")) + '/external/github.com/google/compact_enc_det.git@368a9cc09ad868a3d28f0b5ad4a733f263c46409',
'src/third_party/cld_2/src':
@@ -110,7 +110,7 @@ deps = {
'src/third_party/hunspell_dictionaries':
(Var("chromium_git")) + '/chromium/deps/hunspell_dictionaries.git@dc6e7c25bf47cbfb466e0701fd2728b4a12e79d5',
'src/third_party/icu':
- (Var("chromium_git")) + '/chromium/deps/icu.git@450be73c9ee8ae29d43d4fdc82febb2a5f62bfb5',
+ (Var("chromium_git")) + '/chromium/deps/icu.git@b34251f8b762f8e2112a89c587855ca4297fed96',
'src/third_party/jsoncpp/source':
(Var("chromium_git")) + '/external/github.com/open-source-parsers/jsoncpp.git@f572e8e42e22cfcf5ab0aea26574f408943edfa4',
'src/third_party/leveldatabase/src':
@@ -138,7 +138,7 @@ deps = {
'src/third_party/openmax_dl':
(Var("chromium_git")) + '/external/webrtc/deps/third_party/openmax.git@7acede9c039ea5d14cf326f44aad1245b9e674a7',
'src/third_party/pdfium':
- (Var("pdfium_git")) + '/pdfium.git@35e70fb57f9e4093e759d0d35b6d9b8e7800a1a3',
+ (Var("pdfium_git")) + '/pdfium.git@84213b529908d2b9095ad4c33ecc9fdf5d881df5',
'src/third_party/py_trace_event/src':
(Var("chromium_git")) + '/external/py_trace_event.git@dd463ea9e2c430de2b9e53dea57a77b4c3ac9b30',
'src/third_party/pyftpdlib/src':
@@ -156,7 +156,7 @@ deps = {
'src/third_party/shaderc/src':
(Var("chromium_git")) + '/external/github.com/google/shaderc.git@cd8793c34907073025af2622c28bcee64e9879a4',
'src/third_party/skia':
- (Var("skia_git")) + '/skia.git@4a9b4143baed7ab31d426be12c31cb4082014bd5',
+ (Var("skia_git")) + '/skia.git@4c81ba6ba3a3270db809bf7d4c3bc782694a56a4',
'src/third_party/smhasher/src':
(Var("chromium_git")) + '/external/smhasher.git@e87738e57558e0ec472b2fc3a643b838e5b6e88f',
'src/third_party/snappy/src':
@@ -174,7 +174,7 @@ deps = {
'src/third_party/webpagereplay':
(Var("chromium_git")) + '/external/github.com/chromium/web-page-replay.git@3cd3a3f6f06a1b87b14b9162c7eb16d23d141241',
'src/third_party/webrtc':
- (Var("chromium_git")) + '/external/webrtc/trunk/webrtc.git@4c2c314a187d720cfe97e90a1ba22aa1b7073722',
+ (Var("chromium_git")) + '/external/webrtc/trunk/webrtc.git@05455abfd973173de9f6d8ee9f68d84e6adfaf04',
'src/third_party/yasm/source/patched-yasm':
(Var("chromium_git")) + '/chromium/deps/yasm/patched-yasm.git@7da28c6c7c6a1387217352ce02b31754deb54d2a',
'src/tools/gyp':
@@ -184,7 +184,7 @@ deps = {
'src/tools/swarming_client':
(Var("chromium_git")) + '/external/swarming.client.git@11e31afa5d330756ff87aa12064bb5d032896cb5',
'src/v8':
- (Var("chromium_git")) + '/v8/v8.git@3b1d692f748c372fc6655cc673111a70aaaa2a1b'
+ (Var("chromium_git")) + '/v8/v8.git@2f06375912a79b55603cc75306738101921ce80a'
}
deps_os = {
@@ -1166,12 +1166,12 @@ recursedeps = [
'src/buildtools',
'src/third_party/android_tools',
[
- 'DEPS.chromium',
- 'src/third_party/angle'
+ 'src/third_party/angle',
+ 'DEPS.chromium'
],
[
- 'DEPS',
- 'src/third_party/swiftshader'
+ 'src/third_party/swiftshader',
+ 'DEPS'
]
]
diff --git a/chromium/base/process/launch_win.cc b/chromium/base/process/launch_win.cc
index 1349b3e4af3..97b59a5bfe4 100644
--- a/chromium/base/process/launch_win.cc
+++ b/chromium/base/process/launch_win.cc
@@ -142,7 +142,14 @@ void RouteStdioToConsole(bool create_console_if_not_found) {
// _fileno(stdout) will return -2 (_NO_CONSOLE_FILENO) if stdout was
// invalid.
if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0) {
- return;
+ // _fileno was broken for SUBSYSTEM:WINDOWS from VS2010 to VS2012/2013.
+ // http://crbug.com/358267. Confirm that the underlying HANDLE is valid
+ // before aborting.
+
+ intptr_t stdout_handle = _get_osfhandle(_fileno(stdout));
+ intptr_t stderr_handle = _get_osfhandle(_fileno(stderr));
+ if (stdout_handle >= 0 || stderr_handle >= 0)
+ return;
}
if (!AttachConsole(ATTACH_PARENT_PROCESS)) {
diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE
index 66d33bd05d2..e87f75f4976 100644
--- a/chromium/build/util/LASTCHANGE
+++ b/chromium/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=b6d0d62f847dfee64ad286fb135a974a1d3f9491
+LASTCHANGE=c58c69e965fb9b338f7c9417371744b8f6147e83
diff --git a/chromium/build/util/LASTCHANGE.blink b/chromium/build/util/LASTCHANGE.blink
index 66d33bd05d2..e87f75f4976 100644
--- a/chromium/build/util/LASTCHANGE.blink
+++ b/chromium/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=b6d0d62f847dfee64ad286fb135a974a1d3f9491
+LASTCHANGE=c58c69e965fb9b338f7c9417371744b8f6147e83
diff --git a/chromium/cc/output/direct_renderer.cc b/chromium/cc/output/direct_renderer.cc
index 77ff41f4027..e4fcf68ca0a 100644
--- a/chromium/cc/output/direct_renderer.cc
+++ b/chromium/cc/output/direct_renderer.cc
@@ -89,6 +89,10 @@ void DirectRenderer::Initialize() {
allow_empty_swap_ = true;
if (context_provider->ContextCapabilities().set_draw_rectangle)
use_set_draw_rectangle_ = true;
+ if (context_provider->ContextCapabilities()
+ .disable_non_empty_post_sub_buffers) {
+ use_partial_swap_ = false;
+ }
}
initialized_ = true;
@@ -323,19 +327,8 @@ void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order,
if (!skip_drawing_root_render_pass && !use_partial_swap_)
current_frame()->root_damage_rect = root_render_pass->output_rect;
- if (skip_drawing_root_render_pass) {
- // If any of the overlays is the output surface, then ensure that the
- // backbuffer be allocated (allocation of the backbuffer is a side-effect
- // of BindFramebufferToOutputSurface).
- for (auto& overlay : current_frame()->overlay_list) {
- if (overlay.use_output_surface_for_resource) {
- BindFramebufferToOutputSurface();
- break;
- }
- }
- } else {
+ if (!skip_drawing_root_render_pass)
DrawRenderPassAndExecuteCopyRequests(root_render_pass);
- }
FinishDrawingFrame();
render_passes_in_draw_order->clear();
diff --git a/chromium/cc/output/gl_renderer.cc b/chromium/cc/output/gl_renderer.cc
index 2a2ffff1638..cdbde1a9c74 100644
--- a/chromium/cc/output/gl_renderer.cc
+++ b/chromium/cc/output/gl_renderer.cc
@@ -1001,6 +1001,11 @@ const TileDrawQuad* GLRenderer::CanPassBeDrawnDirectly(const RenderPass* pass) {
if (quad->material != DrawQuad::TILED_CONTENT)
return nullptr;
+ // TODO(chrishtr): support could be added for opacity, but care needs
+ // to be taken to make sure it is correct w.r.t. non-commutative filters etc.
+ if (quad->shared_quad_state->opacity != 1.0f)
+ return nullptr;
+
const TileDrawQuad* tile_quad = TileDrawQuad::MaterialCast(quad);
// Hack: this could be supported by passing in a subrectangle to draw
// render pass, although in practice if there is only one quad there
diff --git a/chromium/cc/output/overlay_unittest.cc b/chromium/cc/output/overlay_unittest.cc
index d36d1db3ab9..aa4102d0ceb 100644
--- a/chromium/cc/output/overlay_unittest.cc
+++ b/chromium/cc/output/overlay_unittest.cc
@@ -1882,7 +1882,7 @@ TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) {
EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(0);
EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2);
DrawFrame(&pass_list, viewport_size);
- EXPECT_EQ(1U, output_surface_->bind_framebuffer_count());
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
SwapBuffers();
Mock::VerifyAndClearExpectations(renderer_.get());
Mock::VerifyAndClearExpectations(&scheduler_);
@@ -1914,7 +1914,7 @@ TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) {
EXPECT_CALL(*renderer_, DoDrawQuad(_, _)).Times(0);
EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2);
DrawFrame(&pass_list, viewport_size);
- EXPECT_EQ(1U, output_surface_->bind_framebuffer_count());
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
SwapBuffers();
Mock::VerifyAndClearExpectations(renderer_.get());
Mock::VerifyAndClearExpectations(&scheduler_);
diff --git a/chromium/chrome/BUILD.gn b/chromium/chrome/BUILD.gn
index ce198275894..9c0e2c5cde7 100644
--- a/chromium/chrome/BUILD.gn
+++ b/chromium/chrome/BUILD.gn
@@ -213,6 +213,11 @@ if (!is_android && !is_mac) {
"/DELAYLOAD:ole32.dll",
"/DELAYLOAD:oleaut32.dll",
]
+
+ if (current_cpu == "x64") {
+ # Increase the initial stack size. The default is 1MB, this is 2MB.
+ ldflags += [ "/STACK:2097152" ]
+ }
} else if (use_aura) {
# Non-Windows aura entrypoint.
sources += [ "app/chrome_exe_main_aura.cc" ]
@@ -531,6 +536,10 @@ if (is_win) {
"//chrome/common:version_header",
]
+ if (is_chrome_branded) {
+ deps += [ ":chrome_helpers" ]
+ }
+
# Remove the default strip configuration (which strips all symbols) so that
# a saves file can be specified.
if (enable_stripping) {
@@ -625,6 +634,18 @@ if (is_win) {
]
}
+ if (is_chrome_branded) {
+ bundle_data("chrome_helpers") {
+ sources = [
+ "installer/mac/internal/keychain_reauthorizers/$chrome_mac_bundle_id",
+ ]
+
+ outputs = [
+ "{{bundle_root_dir}}/Helpers/{{source_file_part}}",
+ ]
+ }
+ }
+
bundle_data("chrome_versioned_bundle_data") {
sources = [
"$root_out_dir/$chrome_framework_name.framework",
diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION
index 115ac75fed9..22f9518004f 100644
--- a/chromium/chrome/VERSION
+++ b/chromium/chrome/VERSION
@@ -1,4 +1,4 @@
MAJOR=58
MINOR=0
BUILD=3029
-PATCH=54
+PATCH=98
diff --git a/chromium/chrome/app/resources/chromium_strings_ar.xtb b/chromium/chrome/app/resources/chromium_strings_ar.xtb
index fe08640e2e6..8921d80a0f4 100644
--- a/chromium/chrome/app/resources/chromium_strings_ar.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_ar.xtb
@@ -162,7 +162,7 @@
<translation id="6248213926982192922">‏جعل Chromium المتصفح الافتراضي</translation>
<translation id="6295779123002464101">‏قد يكون ملف <ph name="FILE_NAME" /> ضارًا، لذلك فقد حظره Chromium.</translation>
<translation id="6309712487085796862">‏يستخدم Chromium الكاميرا.</translation>
-<translation id="6333502561965082103">‏عملية أخرى على Chromium قيد التقدم. الرجاء إعادة المحاولة لاحقًا.</translation>
+<translation id="6333502561965082103">‏عملية أخرى على Chromium قيد التقدم. يُرجى إعادة المحاولة لاحقًا.</translation>
<translation id="6334986366598267305">‏الآن أصبح استخدام Chromium مع حسابك في Google وفي أجهزة الكمبيوتر المشتركة أكثر سهولة.</translation>
<translation id="6373523479360886564">‏هل تريد فعلًا إزالة Chromium؟</translation>
<translation id="6394232988457703198">‏يجب إعادة تشغيل Chromium الآن.</translation>
diff --git a/chromium/chrome/app/resources/chromium_strings_id.xtb b/chromium/chrome/app/resources/chromium_strings_id.xtb
index a3f4a187b21..6c065bc9c36 100644
--- a/chromium/chrome/app/resources/chromium_strings_id.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_id.xtb
@@ -31,7 +31,7 @@
<translation id="1967743265616885482">Modul dengan nama yang sama biasanya konflik dengan Chromium.</translation>
<translation id="2008474315282236005">Tindakan ini akan menghapus 1 item dari perangkat. Untuk mengambil data nanti, login ke Chromium sebagai <ph name="USER_EMAIL" />.</translation>
<translation id="2061399003623151192">{NUM_ITEMS,plural, =1{Tindakan ini akan menghapus setidaknya $1 item dari perangkat ini secara permanen. Untuk mengambil data Anda nanti, masuk ke Chromium sebagai $2.}other{Tindakan ini akan menghapus setidaknya $1 item dari perangkat ini secara permanen. Untuk mengambil data Anda nanti, masuk ke Chromium sebagai $2.}}</translation>
-<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation>
+<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation>
<translation id="2119636228670142020">Tentang &amp;Chromium OS</translation>
<translation id="2158734852934720349">Lisensi sumber terbuka Chromium OS</translation>
<translation id="2241627712206172106">Jika Anda berbagi komputer, teman dan keluarga bisa menjelajah secara terpisah dan menyiapkan Chromium sesuai keinginannya.</translation>
diff --git a/chromium/chrome/app/resources/chromium_strings_pl.xtb b/chromium/chrome/app/resources/chromium_strings_pl.xtb
index b0606263bda..13c581b2dd8 100644
--- a/chromium/chrome/app/resources/chromium_strings_pl.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_pl.xtb
@@ -95,7 +95,7 @@
<translation id="4207043877577553402"><ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> Chromium nie może uniemożliwić rozszerzeniom zapisywania historii przeglądania. Aby wyłączyć to rozszerzenie w trybie incognito, usuń zaznaczenie tej opcji.</translation>
<translation id="421369550622382712">Odkryj znakomite aplikacje, gry, rozszerzenia i motywy do Chromium.</translation>
<translation id="4222580632002216401">Jesteś zalogowany w Chromium. Administrator wyłączył synchronizację.</translation>
-<translation id="4224199872375172890">Chromium jest aktualny.</translation>
+<translation id="4224199872375172890">Masz aktualną wersję Chromium.</translation>
<translation id="4230135487732243613">Połączyć Twoje dane Chromium z tym kontem?</translation>
<translation id="4246125976471362530">{SECONDS,plural, =1{Chromium uruchomi się ponownie za sekundę.}few{Chromium uruchomi się ponownie za # sekundy.}many{Chromium uruchomi się ponownie za # sekund.}other{Chromium uruchomi się ponownie za # sekundy.}}</translation>
<translation id="4271805377592243930">Pomoc do Chromium</translation>
@@ -110,7 +110,7 @@
<translation id="459535195905078186">Aplikacje Chromium</translation>
<translation id="4621240073146040695">Już prawie gotowe. Uruchom ponownie Chromium, by zakończyć aktualizację.</translation>
<translation id="4677944499843243528">Wygląda na to, że profil jest używany przez inny proces Chromium (<ph name="PROCESS_ID" />) na innym komputerze (<ph name="HOST_NAME" />). Chromium zablokowało profil, by zapobiec jego uszkodzeniu. Jeśli masz pewność, że żadne inne procesy nie używają tego profilu, możesz go odblokować i ponownie uruchomić Chromium.</translation>
-<translation id="469338717132742108">Skorzystaj z pomocy dotyczącej Chromium OS</translation>
+<translation id="469338717132742108">Skorzystaj z pomocy dotyczącej systemu operacyjnego Chromium</translation>
<translation id="4708774505295300557">Ktoś zalogował się wcześniej w Chromium na tym komputerze jako <ph name="ACCOUNT_EMAIL_LAST" />. Utwórz nowego użytkownika Chromium, by Twoje informacje były przechowywane oddzielnie.</translation>
<translation id="4714956846925717402">Szybciej uruchamiaj Chromium</translation>
<translation id="4743926867934016338">Zaakceptuj i szukaj</translation>
@@ -138,7 +138,7 @@
<translation id="5684733627009686897">Chromium jest domyślną przeglądarką. Hurra!</translation>
<translation id="5698481217667032250">Wyświetlaj Chromium w tym języku</translation>
<translation id="5726838626470692954">Twój menedżer musi Cię usunąć i ponownie dodać w Chromium.</translation>
-<translation id="5768914737813585044">Wyświetlaj Chromium OS w tym języku</translation>
+<translation id="5768914737813585044">Wyświetlaj system operacyjny Chromium w tym języku</translation>
<translation id="5772805321386874569">(wymaga <ph name="BEGIN_BUTTON" />ponownego uruchomienia<ph name="END_BUTTON" /> Chromium)</translation>
<translation id="5796460469508169315">Chromium jest prawie gotowy.</translation>
<translation id="5820394555380036790">System operacyjny Chromium</translation>
@@ -247,7 +247,7 @@ Więcej instrukcji znajdziesz w e-mailu wysłanym na adres <ph name="ACCOUNT_EM
<translation id="8697124171261953979">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chromium lub wyszukiwaniu w omniboksie.</translation>
<translation id="8704119203788522458">Oto Twoja przeglądarka Chromium</translation>
<translation id="872034308864968620">Zezwól Chromium na działanie w tle</translation>
-<translation id="8803635938069941624">Warunki korzystania z Chromium OS</translation>
+<translation id="8803635938069941624">Warunki korzystania z systemu operacyjnego Chromium</translation>
<translation id="8821041990367117597">Chromium nie może zsynchronizować danych, ponieważ dane logowania na Twoje konto są nieaktualne.</translation>
<translation id="8851136666856101339">główny</translation>
<translation id="8862326446509486874">Nie masz odpowiednich uprawnień do przeprowadzenia instalacji na poziomie systemowym. Uruchom ponownie program instalacyjny jako administrator.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_am.xtb b/chromium/chrome/app/resources/generated_resources_am.xtb
index 089333119c2..2c0f3c85bb6 100644
--- a/chromium/chrome/app/resources/generated_resources_am.xtb
+++ b/chromium/chrome/app/resources/generated_resources_am.xtb
@@ -1761,7 +1761,7 @@
<translation id="3251759466064201842">‹የሰርቲፊኬቱ አካል አይደለም›</translation>
<translation id="3252266817569339921">ፈረንሳይኛ</translation>
<translation id="3254434849914415189">ለ<ph name="FILE_TYPE" /> ፋይሎች ነባሪውን መተግበሪያ ይምረጡ፦</translation>
-<translation id="3255228561559750854">ይፈልጉ፣ ወይም ደግሞ «Ok, Google» ይበሉ</translation>
+<translation id="3255228561559750854">ይፈልጉ፣ ወይም ደግሞ «Ok Google» ይበሉ</translation>
<translation id="3257011895468050906">የማስመሰያ ማሰር ድጋፍን ያንቁ።</translation>
<translation id="3260892921936048802">&amp;አውርድ...</translation>
<translation id="326356299252142602">Windows Runtime MIDI ኤፒአይን ይጠቀሙ</translation>
@@ -2208,7 +2208,7 @@
<translation id="3812525830114410218">መጥፎ የእውቅና ማረጋገጫ</translation>
<translation id="3812568885510197014">የድር ቅጾችን በራስ-ሙላ ፊርማዎች እንደ የኤችቲኤምኤል ዓይነታዎች አድርጎ ያብራራቸዋል።</translation>
<translation id="3813296892522778813">የሚፈልጉትን ነገር ማግኘት ካልቻሉ ወደ <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome እገዛ<ph name="END_LINK_CHROMIUM" /> ይሂዱ</translation>
-<translation id="3813984289128269159">እሺ Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">የዡዪን ግቤት ስልት</translation>
<translation id="3815571115159309122"><ph name="FILE_COUNT" /> አዲስ ፎቶዎች ተገኝቷል
<ph name="LINE_BREAK1" />
diff --git a/chromium/chrome/app/resources/generated_resources_ar.xtb b/chromium/chrome/app/resources/generated_resources_ar.xtb
index 295807a62b5..afb7b19c162 100644
--- a/chromium/chrome/app/resources/generated_resources_ar.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ar.xtb
@@ -624,7 +624,7 @@
<translation id="1779766957982586368">إغلاق النافذة</translation>
<translation id="1781502536226964113">فتح صفحة علامة التبويب الجديدة</translation>
<translation id="1782196717298160133">العثور على هاتفك</translation>
-<translation id="1782924894173027610">خادم المزامنة مشغول، الرجاء إعادة المحاولة لاحقًا.</translation>
+<translation id="1782924894173027610">خادم المزامنة مشغول، يُرجى إعادة المحاولة لاحقًا.</translation>
<translation id="1784849162047402014">مساحة القرص الموجودة على الجهاز منخفضة.</translation>
<translation id="1788636309517085411">استخدام الموقع الافتراضي</translation>
<translation id="1789575671122666129">النوافذ المنبثقة</translation>
@@ -1244,7 +1244,7 @@
<translation id="2620436844016719705">النظام</translation>
<translation id="26224892172169984">عدم السماح لأي موقع ويب بمعالجة البروتوكولات</translation>
<translation id="2624142942574147739">هذه الصفحة تدخل إلى الكاميرا والميكروفون التابعين لك.</translation>
-<translation id="2626799779920242286">الرجاء إعادة المحاولة لاحقًا.</translation>
+<translation id="2626799779920242286">يُرجى إعادة المحاولة لاحقًا.</translation>
<translation id="2630681426381349926">‏الاتصال بشبكة Wi-Fi للبدء</translation>
<translation id="2631006050119455616">تم الحفظ</translation>
<translation id="2631498379019108537">إظهار خيارات الإدخال في الرف</translation>
@@ -3696,7 +3696,7 @@
<ph name="BEGIN_LINK_HELP" />مزيد من المعلومات<ph name="END_LINK_HELP" /></translation>
<translation id="5851063901794976166">لا يوجد شئ هنا...</translation>
<translation id="5851868085455377790">جهة الإصدار</translation>
-<translation id="5852112051279473187">عفوًا، حدث خطأ جسيم أثناء تسجيل هذه الخدمة. الرجاء إعادة المحاولة أو الاتصال بممثل الدعم.</translation>
+<translation id="5852112051279473187">عفوًا، حدث خطأ جسيم أثناء تسجيل هذه الخدمة. يُرجى إعادة المحاولة أو الاتصال بممثل الدعم.</translation>
<translation id="5852137567692933493">‏إعادة التشغيل وإجراء Powerwash</translation>
<translation id="5854409662653665676">إذا كنت تواجه مشكلات متكررة، يمكنك تجربة ما يلي لحل المشكلة في هذه الوحدة:</translation>
<translation id="5854912040170951372">الشريحة</translation>
@@ -3956,7 +3956,7 @@
<translation id="6226777517901268232">ملف مفتاح خاص (اختياري)</translation>
<translation id="6227235786875481728">يتعذر تشغيل هذا الملف.</translation>
<translation id="6228691855869374890">‏يتضمن هذا الموقع إمكانية تحكم شامل في أجهزة MIDI.</translation>
-<translation id="6229890768313448549">‏لا يمكن تحميل بنود خدمة Google Play. الرجاء إعادة المحاولة.</translation>
+<translation id="6229890768313448549">‏لا يمكن تحميل بنود خدمة Google Play. يُرجى إعادة المحاولة.</translation>
<translation id="6231881193380278751">‏أضف معلمة طلب بحث في عنوان URL لإجراء تحديث تلقائي لصفحة: chrome://device-log/?refresh=&lt;sec&gt;</translation>
<translation id="6232017090690406397">البطارية</translation>
<translation id="6232116551750539448">انقطع الاتصال بـ <ph name="NAME" /></translation>
@@ -4987,7 +4987,7 @@
<translation id="7629827748548208700">علامة التبويب: <ph name="TAB_NAME" /></translation>
<translation id="7631887513477658702">فت&amp;ح هذا النوع من الملفات دومًا</translation>
<translation id="7632948528260659758">‏فشل تحديث تطبيقات kiosk التالية:</translation>
-<translation id="7634566076839829401">حدث خطأ ما. الرجاء إعادة المحاولة.</translation>
+<translation id="7634566076839829401">حدث خطأ ما. يُرجى إعادة المحاولة.</translation>
<translation id="7639178625568735185">تم إنشاء الحساب!</translation>
<translation id="764017888128728">يعمل <ph name="PASSWORD_MANAGER_BRAND" /> على تسجيل دخولك تلقائيًا إلى المواقع المؤهلة باستخدام كلمات المرور التي حفظتها.</translation>
<translation id="7644029910725868934">تمكين مجلد الإشارات المرجعية المُدارة للمستخدمين تحت الإشراف</translation>
@@ -5152,7 +5152,7 @@
<translation id="7870790288828963061">‏لا توجد إصدارات أحدث لتطبيق Kiosk. لا يوجد شيء لتحديثه. يُرجى إزالة جهاز USB.</translation>
<translation id="7874357055309047713">تشغيل على جميع المواقع دائمًا</translation>
<translation id="7876243839304621966">إزالة الكل</translation>
-<translation id="7877451762676714207">خطأ غير معروف في الخادم. الرجاء إعادة المحاولة أو الاتصال بمشرف الخادم.</translation>
+<translation id="7877451762676714207">خطأ غير معروف في الخادم. يُرجى إعادة المحاولة أو الاتصال بمشرف الخادم.</translation>
<translation id="7881483672146086348">عرض حساب</translation>
<translation id="7881969471599061635">تعطيل الترجمات المصاحبة</translation>
<translation id="7882358943899516840">نوع مقدم الخدمة</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_bg.xtb b/chromium/chrome/app/resources/generated_resources_bg.xtb
index 3f3be97e9ce..96f08b37d27 100644
--- a/chromium/chrome/app/resources/generated_resources_bg.xtb
+++ b/chromium/chrome/app/resources/generated_resources_bg.xtb
@@ -1533,7 +1533,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="2964193600955408481">Деактивиране на Wi-Fi</translation>
<translation id="2966449113954629791">Възможно е да сте изразходвали отпуснатите ви мобилни данни. Посетете портала за активиране „<ph name="NAME" />“, за да купите още данни.</translation>
<translation id="2966459079597787514">Шведска клавиатура</translation>
-<translation id="2966598748518102999">Подобряване на гласовото търсене чрез изпращане до Google на запис на произнасянето на „OK Google“ и няколко секунди от предхождащия звук.</translation>
+<translation id="2966598748518102999">Подобряване на гласовото търсене чрез изпращане до Google на запис на произнасянето на „Ok Google“ и няколко секунди от предхождащия звук.</translation>
<translation id="2967544384642772068">Затваряне</translation>
<translation id="2971033837577180453">&lt;span&gt;Идент. №:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">намаляване на яркостта</translation>
@@ -1757,7 +1757,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="3251759466064201842">&lt;Не е част от сертификата&gt;</translation>
<translation id="3252266817569339921">френски</translation>
<translation id="3254434849914415189">Избиране на приложението по подразбиране за файлове от тип <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Потърсете нещо или кажете „OK Google“</translation>
+<translation id="3255228561559750854">Потърсете нещо или кажете „Ok Google“</translation>
<translation id="3257011895468050906">Активиране на поддръжката за Token Binding.</translation>
<translation id="3260892921936048802">&amp;Изтегляне...</translation>
<translation id="326356299252142602">Използване на приложния програмен интерфейс (API) за MIDI по време на изпълнение за Windows</translation>
@@ -2203,7 +2203,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="3812525830114410218">Невалиден сертификат</translation>
<translation id="3812568885510197014">Добавя към уеб формулярите пояснения за подписите за автоматично попълване под формата на HTML атрибути.</translation>
<translation id="3813296892522778813">Прегледайте <ph name="BEGIN_LINK_CHROMIUM" />помощното съдържание за Google Chrome<ph name="END_LINK_CHROMIUM" />, ако не можете да намерите търсеното</translation>
-<translation id="3813984289128269159">OK Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">Метод на въвеждане за джуин</translation>
<translation id="3815571115159309122">Намерени са <ph name="FILE_COUNT" /> нови снимки
<ph name="LINE_BREAK1" />
@@ -5617,7 +5617,7 @@ PDF файл или в Google Диск.</translation>
<translation id="8487700953926739672">Налице офлайн</translation>
<translation id="8490896350101740396">Следните павилионни приложения са актуализирани: <ph name="UPDATED_APPS" />. Моля, рестартирайте устройството, за да завършите процеса.</translation>
<translation id="8493236660459102203">Микрофон:</translation>
-<translation id="8495193314787127784">Активиране на „OK Google“</translation>
+<translation id="8495193314787127784">Активиране на „Ok Google“</translation>
<translation id="8496717697661868878">Стартиране на тази приставка</translation>
<translation id="8497392509610708671">Можете да промените това по всяко време от <ph name="BEGIN_LINK" />настройките на Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Добавяне на устройство с Bluetooth</translation>
@@ -5666,7 +5666,7 @@ PDF файл или в Google Диск.</translation>
<translation id="8565650234829130278">Бе направен опит за понижаване на приложението.</translation>
<translation id="8569682776816196752">Няма намерени местоназначения</translation>
<translation id="8569764466147087991">Изберете файл за отваряне</translation>
-<translation id="8571032220281885258">Когато кажете „OK Google“, Chrome ще потърси следващото нещо, което произнесете.</translation>
+<translation id="8571032220281885258">Когато кажете „Ok Google“, Chrome ще потърси следващото нещо, което произнесете.</translation>
<translation id="8571108619753148184">Сървър 4</translation>
<translation id="8574234089711453001">Разрешете показването на бутон за изтегляне при отваряне на страница с URL адрес на мултимедийно съдържание.</translation>
<translation id="857779305329188634">Активиране на експериментална поддръжка на протокола QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ca.xtb b/chromium/chrome/app/resources/generated_resources_ca.xtb
index e06630108d9..aeef7dd4b7d 100644
--- a/chromium/chrome/app/resources/generated_resources_ca.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ca.xtb
@@ -2213,7 +2213,7 @@ Del domini <ph name="DOWNLOAD_DOMAIN" /></translation>
Ja es pot crear la còpia de seguretat a <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" /></translation>
<translation id="3816789583333631750">Per utilitzar aquesta funció, s'ha d'activar el connector Native Client.</translation>
<translation id="3819007103695653773">Permet que tots els llocs enviïn missatges de tramesa automàtica en segon pla</translation>
-<translation id="3819752733757735746">Accés amb commutador (controleu l'ordinador amb només un o dos commutadors)</translation>
+<translation id="3819752733757735746">Accés amb interruptors (controleu l'ordinador amb només un o dos interruptors)</translation>
<translation id="3819800052061700452">&amp;Pantalla completa</translation>
<translation id="3820172043799983114">El PIN no és vàlid.</translation>
<translation id="3820749202859700794">Corba el·líptica secp521r1 d'SECG (també coneguda com a NIST P-521)</translation>
@@ -4142,7 +4142,7 @@ Assegureu-vos que no es pugui accedir a informació confidencial.</translation>
<translation id="645705751491738698">Continua bloquejant JavaScript</translation>
<translation id="6458308652667395253">Gestiona el bloqueig de JavaScript...</translation>
<translation id="6459488832681039634">Utilitza la selecció per a la cerca</translation>
-<translation id="6460082740058890133">Activa una IU de comentaris personalitzats en enviar comentaris amb Google Feedback. Funciona amb la versió 10.2 dels Serveis de Google Play i amb versions posteriors</translation>
+<translation id="6460082740058890133">Activa una IU de comentaris personalitzats en enviar comentaris amb Google Feedback. Funciona amb la versió 10.2 de Serveis de Google Play i amb versions posteriors</translation>
<translation id="6460423884798879930">Activa l'opció per enviar informació d'autenticació addicional al paquet SYN inicial per a un client ja connectat, de manera que permet que s'iniciï l'enviament de dades més ràpidament.</translation>
<translation id="6460474910028274178">Millora de la lògica d'activació i de l'aspecte a la interfície d'usuari per al quadre del Traductor</translation>
<translation id="6460601847208524483">Cerca el següent</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_da.xtb b/chromium/chrome/app/resources/generated_resources_da.xtb
index f360b77a350..35ac7f63b84 100644
--- a/chromium/chrome/app/resources/generated_resources_da.xtb
+++ b/chromium/chrome/app/resources/generated_resources_da.xtb
@@ -1474,7 +1474,7 @@ Jeg synes ikke, dette website skal blokeres.</translation>
<translation id="2890678560483811744">Sidereferencen er ugyldig</translation>
<translation id="2893168226686371498">Standardbrowser</translation>
<translation id="289426338439836048">Andet mobilnetværk...</translation>
-<translation id="2894745200702272315">Aktiverer en eksperimentel version af funktioner for registrering af kommandoer ved hjælp af "OK Google", som afhænger af hardwaren.</translation>
+<translation id="2894745200702272315">Aktiverer en eksperimentel version af funktioner for registrering af kommandoer ved hjælp af "Ok Google", som afhænger af hardwaren.</translation>
<translation id="289644616180464099">SIM-kortet er låst.</translation>
<translation id="289695669188700754">Nøgle-id: <ph name="KEY_ID" /></translation>
<translation id="2897878306272793870">Er du sikker på, at du vil åbne <ph name="TAB_COUNT" /> faner?</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_en-GB.xtb b/chromium/chrome/app/resources/generated_resources_en-GB.xtb
index d8c2b605de6..cb959d14bb4 100644
--- a/chromium/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chromium/chrome/app/resources/generated_resources_en-GB.xtb
@@ -611,7 +611,7 @@
<translation id="1763108912552529023">Keep exploring</translation>
<translation id="1764226536771329714">beta</translation>
<translation id="176587472219019965">&amp;New Window</translation>
-<translation id="1766352429832934452">Enabled (required to use "OK Google")</translation>
+<translation id="1766352429832934452">Enabled (required to use 'Ok Google')</translation>
<translation id="1769104665586091481">Open Link in New &amp;Window</translation>
<translation id="1772267994638363865">To make this happen, you'll need to enable Voice &amp; Audio Activity and train your <ph name="DEVICE_TYPE" /> in the following steps.</translation>
<translation id="1773212559869067373">Authentication certificate rejected locally</translation>
@@ -736,7 +736,7 @@
<translation id="1934636348456381428">Enable the experimental overlay scrollbars implementation. You must also enable threaded compositing to have the scrollbars animate.</translation>
<translation id="1936157145127842922">Show in Folder</translation>
<translation id="1936717151811561466">Finnish</translation>
-<translation id="1937256809970138538">Say "OK Google" when your screen is on and unlocked</translation>
+<translation id="1937256809970138538">Say 'Ok Google' when your screen is on and unlocked</translation>
<translation id="1942765061641586207">Image resolution</translation>
<translation id="1944921356641260203">Update found</translation>
<translation id="1947424002851288782">German keyboard</translation>
@@ -1477,7 +1477,7 @@ I don't think this site should be blocked!</translation>
<translation id="2890678560483811744">Out of bounds page reference</translation>
<translation id="2893168226686371498">Default browser</translation>
<translation id="289426338439836048">Other mobile network...</translation>
-<translation id="2894745200702272315">Enables an experimental version of 'OK Google' hotword detection features that have a hardware dependency.</translation>
+<translation id="2894745200702272315">Enables an experimental version of 'Ok Google' hotword detection features that have a hardware dependency.</translation>
<translation id="289644616180464099">SIM Card is locked</translation>
<translation id="289695669188700754">Key ID: <ph name="KEY_ID" /></translation>
<translation id="2897878306272793870">Are you sure that you want to open <ph name="TAB_COUNT" /> tabs?</translation>
@@ -1537,7 +1537,7 @@ I don't think this site should be blocked!</translation>
<translation id="2964193600955408481">Disable Wi-Fi</translation>
<translation id="2966449113954629791">You may have used up your mobile data allowance. Visit the <ph name="NAME" /> activation portal to buy more data.</translation>
<translation id="2966459079597787514">Swedish keyboard</translation>
-<translation id="2966598748518102999">Improve voice search by sending the sound of "Ok Google", and a few seconds before, to Google.</translation>
+<translation id="2966598748518102999">Improve voice search by sending the sound of 'Ok Google', and a few seconds before, to Google.</translation>
<translation id="2967544384642772068">Kill</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">bright down</translation>
@@ -1705,7 +1705,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL" /> for these and further ins
<translation id="3162559335345991374">The Wi-Fi that you are using may require you to visit its login page.</translation>
<translation id="316307797510303346">Control and view the websites which this person visits from <ph name="CUSTODIAN_EMAIL" />.
Your account sign-in details are out of date.</translation>
-<translation id="3166571619128686629">Click, or say "OK Google" to start voice search</translation>
+<translation id="3166571619128686629">Click, or say 'Ok Google' to start voice search</translation>
<translation id="3170072451822350649">You may also skip signing in and <ph name="LINK_START" />browse as Guest<ph name="LINK_END" />.</translation>
<translation id="3170544058711792988">Keep magnifier focus centred on screen</translation>
<translation id="317583078218509884">New site permissions settings will take effect after reloading the page.</translation>
@@ -1754,14 +1754,14 @@ Please check your email at <ph name="ACCOUNT_EMAIL" /> for these and further ins
<translation id="3241720467332021590">Irish Gaelic</translation>
<translation id="3242118113727675434">Show HUD for touch points</translation>
<translation id="3242765319725186192">Preshared key:</translation>
-<translation id="3244621381664913240">Enable "OK Google" to start a voice search.</translation>
+<translation id="3244621381664913240">Enable 'Ok Google' to start a voice search.</translation>
<translation id="3245321423178950146">Unknown Artist</translation>
<translation id="324533084080637716">With article structured mark-up</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – Network error</translation>
<translation id="3251759466064201842">&lt;Not Part Of Certificate&gt;</translation>
<translation id="3252266817569339921">French</translation>
<translation id="3254434849914415189">Choose the default app for <ph name="FILE_TYPE" /> files:</translation>
-<translation id="3255228561559750854">Search, or say "OK Google"</translation>
+<translation id="3255228561559750854">Search, or say 'Ok Google'</translation>
<translation id="3257011895468050906">Enable Token Binding support.</translation>
<translation id="3260892921936048802">&amp;Download...</translation>
<translation id="326356299252142602">Use Windows Runtime MIDI API</translation>
@@ -2697,7 +2697,7 @@ Press any key to continue exploring.</translation>
<translation id="4533259260976001693">Shrink/Expand</translation>
<translation id="4533985347672295764">CPU Time</translation>
<translation id="4534166495582787863">Enables touchpad three-finger-click as middle button.</translation>
-<translation id="4534799089889278411">Say "OK Google" in a new tab, google.com and the App Launcher</translation>
+<translation id="4534799089889278411">Say 'Ok Google' in a new tab, google.com and the App Launcher</translation>
<translation id="4535127706710932914">Default Profile</translation>
<translation id="4538417792467843292">Delete word</translation>
<translation id="4538684596480161368">Always block unsandboxed plug-ins on <ph name="HOST" /></translation>
@@ -3217,7 +3217,7 @@ Press any key to continue exploring.</translation>
<translation id="5229189185761556138">Manage input methods</translation>
<translation id="5229622432348746578">Disable Audio For Desktop Sharing</translation>
<translation id="5230516054153933099">Window</translation>
-<translation id="5232178406098309195">When you use audio activation commands, such as "OK Google" or touching a microphone icon, your private Voice &amp; Audio Activity stores some voice and other audio to your account. A recording of the following speech/audio, plus a few seconds before, will be stored.</translation>
+<translation id="5232178406098309195">When you use audio activation commands, such as 'Ok Google' or touching a microphone icon, your private Voice &amp; Audio Activity stores some voice and other audio to your account. A recording of the following speech/audio, plus a few seconds before, will be stored.</translation>
<translation id="523299859570409035">Notifications exceptions</translation>
<translation id="5233019165164992427">NaCl debug port</translation>
<translation id="5233231016133573565">Process ID</translation>
@@ -3236,7 +3236,7 @@ Press any key to continue exploring.</translation>
<translation id="5249624017678798539">The browser crashed before the download completed.</translation>
<translation id="5252456968953390977">Roaming</translation>
<translation id="5252653240322147470">PIN must be less than <ph name="MAXIMUM" /> digits</translation>
-<translation id="5253753933804516447">Enable "OK Google" to voice search when your screen is on and unlocked</translation>
+<translation id="5253753933804516447">Enable 'Ok Google' to voice search when your screen is on and unlocked</translation>
<translation id="52550593576409946">Kiosk application could not be launched.</translation>
<translation id="5255315797444241226">The passphrase that you've entered is incorrect.</translation>
<translation id="5260508466980570042">Sorry, your email or password could not be verified. Please try again.</translation>
@@ -3811,7 +3811,7 @@ Press any key to continue exploring.</translation>
<translation id="6011449291337289699">Clear site data</translation>
<translation id="6015796118275082299">Year</translation>
<translation id="6016551720757758985">Confirm Powerwash with return to previous version</translation>
-<translation id="6016809788585079594">Say "OK Google" one last time</translation>
+<translation id="6016809788585079594">Say 'Ok Google' one last time</translation>
<translation id="6016972670657536680">Select language and keyboard button. Currently selected language is <ph name="LANGUAGE" />.</translation>
<translation id="6017225534417889107">Change...</translation>
<translation id="6017981840202692187">Add to Applications</translation>
@@ -3879,7 +3879,7 @@ Press any key to continue exploring.</translation>
<translation id="6105158702728922449">Use your camera and microphone</translation>
<translation id="6105877918873366097">Last accessed</translation>
<translation id="6107012941649240045">Issued To</translation>
-<translation id="6107079717483424262">Recognize your voice when you say "OK Google"</translation>
+<translation id="6107079717483424262">Recognise your voice when you say 'Ok Google'</translation>
<translation id="6109228527970300988">Emoji, handwriting and voice input on opt-in IME menu</translation>
<translation id="6111770213269631447">Transliteration (namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">Edit person, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
@@ -3922,7 +3922,7 @@ Press any key to continue exploring.</translation>
<translation id="6165508094623778733">Learn more</translation>
<translation id="6166185671393271715">Import Passwords To Chrome</translation>
<translation id="6169666352732958425">Unable to cast desktop.</translation>
-<translation id="6171550060231646388">Simulated hardware 'OK Google' features</translation>
+<translation id="6171550060231646388">Simulated hardware 'Ok Google' features</translation>
<translation id="6171948306033499786">Pause printing</translation>
<translation id="6175314957787328458">Microsoft Domain GUID</translation>
<translation id="6178664161104547336">Select a certificate</translation>
@@ -4550,7 +4550,7 @@ Only use this feature with accounts that you trust.</translation>
<translation id="7012372675181957985">Your Google account may have other forms of browsing history at <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation>
<translation id="7013485839273047434">Get more extensions</translation>
<translation id="7014174261166285193">Installation failed.</translation>
-<translation id="7017004637493394352">Say "OK Google" again</translation>
+<translation id="7017004637493394352">Say 'Ok Google' again</translation>
<translation id="7017219178341817193">Add a new page</translation>
<translation id="7017354871202642555">Cannot set mode after window is set.</translation>
<translation id="7017480957358237747">allow or prohibit certain websites,</translation>
@@ -4707,7 +4707,7 @@ Only use this feature with accounts that you trust.</translation>
<translation id="7238585580608191973">SHA-256 Fingerprint</translation>
<translation id="7240120331469437312">Certificate Subject Alternative Name</translation>
<translation id="7241389281993241388">Please sign in to <ph name="TOKEN_NAME" /> to import the client certificate.</translation>
-<translation id="7243055093079293866">Say "OK Google" in a new tab and google.com</translation>
+<translation id="7243055093079293866">Say 'Ok Google' in a new tab and google.com</translation>
<translation id="7243632151880336635">Clear and Sign Out</translation>
<translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (Best)</translation>
<translation id="7246947237293279874">FTP Proxy</translation>
@@ -4788,7 +4788,7 @@ Only use this feature with accounts that you trust.</translation>
<translation id="7361824946268431273">The faster, simpler and more secure computer</translation>
<translation id="7364796246159120393">Choose file</translation>
<translation id="736515969993332243">Scanning for networks.</translation>
-<translation id="7366762109661450129">Say "OK Google" when the screen is on and unlocked.</translation>
+<translation id="7366762109661450129">Say 'Ok Google' when the screen is on and unlocked.</translation>
<translation id="7366909168761621528">Browsing data</translation>
<translation id="7369521049655330548">The following plug-ins were blocked on this page:</translation>
<translation id="7371490661692457119">Default tile width</translation>
@@ -4912,10 +4912,10 @@ Only use this feature with accounts that you trust.</translation>
<translation id="7517569744831774757">Restore settings to their original defaults.</translation>
<translation id="7517786267097410259">Create a password -</translation>
<translation id="7518150891539970662">WebRTC logs (<ph name="WEBRTC_LOG_COUNT" />)</translation>
-<translation id="7518657099163789435">Voice &amp; Audio Activity is required to use "OK Google"</translation>
+<translation id="7518657099163789435">Voice &amp; Audio Activity is required to use 'Ok Google'</translation>
<translation id="7520821146909122639">This Page Is Being Translated...</translation>
<translation id="7521387064766892559">JavaScript</translation>
-<translation id="7522255036471229694">Say “OK Google”</translation>
+<translation id="7522255036471229694">Say 'Ok Google'</translation>
<translation id="7525067979554623046">Create</translation>
<translation id="7529471622666797993"><ph name="BEGIN_LINK" />Advanced font settings<ph name="END_LINK" /> (requires extension)</translation>
<translation id="7530016656428373557">Discharge Rate in Watts</translation>
@@ -5162,7 +5162,7 @@ Only use this feature with accounts that you trust.</translation>
<translation id="7881969471599061635">Disable subtitles</translation>
<translation id="7882358943899516840">Provider type</translation>
<translation id="7885253890047913815">Recent destinations</translation>
-<translation id="7887192723714330082">Respond to "OK Google" when the screen is on and unlocked</translation>
+<translation id="7887192723714330082">Respond to 'Ok Google' when the screen is on and unlocked</translation>
<translation id="7887334752153342268">Duplicate</translation>
<translation id="7887864092952184874">Bluetooth mouse paired</translation>
<translation id="7892100671754994880">Next user</translation>
@@ -5312,7 +5312,7 @@ Keep your key file in a safe place. You will need it to create new versions of y
<translation id="806812017500012252">Reorder by title</translation>
<translation id="8069615408251337349">Google Cloud Print</translation>
<translation id="8071432093239591881">Print as image</translation>
-<translation id="8071942001314758122">Just say "OK Google" three times</translation>
+<translation id="8071942001314758122">Just say 'Ok Google' three times</translation>
<translation id="8072988827236813198">Pin Tabs</translation>
<translation id="8074127646604999664">Allow recently closed sites to finish sending and receiving data</translation>
<translation id="8075191520954018715">Memory state</translation>
@@ -5622,7 +5622,7 @@ Calculating time until full</translation>
<translation id="8487700953926739672">Available offline</translation>
<translation id="8490896350101740396">The following kiosk apps "<ph name="UPDATED_APPS" />" have been updated. Please reboot the device to complete the update process.</translation>
<translation id="8493236660459102203">Microphone:</translation>
-<translation id="8495193314787127784">Enable "OK Google"</translation>
+<translation id="8495193314787127784">Enable 'Ok Google'</translation>
<translation id="8496717697661868878">Run This Plug-in</translation>
<translation id="8497392509610708671">You can change this at any time in <ph name="BEGIN_LINK" />Chrome Settings<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Add a Bluetooth device</translation>
@@ -5671,7 +5671,7 @@ Calculating time until full</translation>
<translation id="8565650234829130278">Attempted to downgrade app.</translation>
<translation id="8569682776816196752">No destinations found</translation>
<translation id="8569764466147087991">Select a file to open</translation>
-<translation id="8571032220281885258">When you say "Ok Google", Chrome will search for what you say next.</translation>
+<translation id="8571032220281885258">When you say 'Ok Google', Chrome will search for what you say next.</translation>
<translation id="8571108619753148184">Server 4</translation>
<translation id="8574234089711453001">Allow a download button to show up when opening a page with media URL.</translation>
<translation id="857779305329188634">Enable experimental QUIC protocol support.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_es.xtb b/chromium/chrome/app/resources/generated_resources_es.xtb
index 7e72040dad7..c3f8d56d118 100644
--- a/chromium/chrome/app/resources/generated_resources_es.xtb
+++ b/chromium/chrome/app/resources/generated_resources_es.xtb
@@ -126,7 +126,7 @@
<translation id="1175364870820465910">Im&amp;primir...</translation>
<translation id="117624967391683467">Copiando <ph name="FILE_NAME" />...</translation>
<translation id="1177863135347784049">Personalizado</translation>
-<translation id="1178581264944972037">Detener</translation>
+<translation id="1178581264944972037">Pausar</translation>
<translation id="1179803038870941185"><ph name="URL" /> quiere obtener un control absoluto de tus dispositivos MIDI.</translation>
<translation id="1181037720776840403">Eliminar</translation>
<translation id="1183237619868651138">No se puede instalar <ph name="EXTERNAL_CRX_FILE" /> en la memoria caché local.</translation>
@@ -1198,7 +1198,7 @@ No creo que este sitio deba bloquearse</translation>
<translation id="2565670301826831948">Velocidad del panel táctil:</translation>
<translation id="2566124945717127842">Haz un Powerwash y restablece los datos de fábrica de tu dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" /> para que quede como nuevo.</translation>
<translation id="2568774940984945469">Contenedor de barra de información</translation>
-<translation id="2570000010887652771">Se han guardado los datos.</translation>
+<translation id="2570000010887652771">Consumo de datos reducido.</translation>
<translation id="2570648609346224037">Se ha producido un error durante la descarga de la imagen de recuperación.</translation>
<translation id="257088987046510401">Temas</translation>
<translation id="2572032849266859634">Se ha concedido acceso de solo lectura a <ph name="VOLUME_NAME" />.</translation>
@@ -1360,7 +1360,7 @@ y su configuración no se sincronizan en otros dispositivos con la función de s
<translation id="2776441542064982094">Parece que no hay dispositivos disponibles para registrarse en la red. Si tu dispositivo está activado y conectado a Internet, prueba a registrarlo siguiendo las instrucciones que se incluyen en su manual.</translation>
<translation id="2778459533137481732">Lista negra de permisos</translation>
<translation id="2781645665747935084">Belga</translation>
-<translation id="2782459523842525953">Habilita los informes sobre las acciones de los permisos en los servidores de navegación segura para los usuarios que hayan habilitado esta opción.</translation>
+<translation id="2782459523842525953">Habilita los informes sobre las acciones de los permisos en los servidores de Navegación Segura para los usuarios que hayan habilitado esta opción.</translation>
<translation id="2782688068604007519">Iframes de proceso insuficiente</translation>
<translation id="2783298271312924866">Descargado</translation>
<translation id="2783321960289401138">Crear acceso directo...</translation>
@@ -1580,7 +1580,7 @@ sistema operativo desde una unidad USB
<translation id="3015992588037997514">¿Aparece este código en la pantalla de Chromebox?</translation>
<translation id="3016641847947582299">Componente actualizado</translation>
<translation id="3016780570757425217">Conocer tu ubicación</translation>
-<translation id="3018346972744622514">Añadir otra red de telefonía móvil</translation>
+<translation id="3018346972744622514">Añadir otra red móvil</translation>
<translation id="302014277942214887">Introduce el identificador de la aplicación o la URL de Chrome Web Store.</translation>
<translation id="3020990233660977256">Número de serie: <ph name="SERIAL_NUMBER" /></translation>
<translation id="3021678814754966447">&amp;Ver fuente del marco</translation>
@@ -1911,7 +1911,7 @@ Si no cambias la configuración predeterminada, <ph name="USER_DISPLAY_NAME" />
<translation id="3436038974659740746">Ortografía personalizada</translation>
<translation id="3438633801274389918">Ninja</translation>
<translation id="3439153939049640737">Permitir siempre que <ph name="HOST" /> acceda al micrófono</translation>
-<translation id="3439282137581679399">Habilita la lista negra de permisos que bloquea los permisos de sitios incluidos en lista negra para usuarios del servicio de navegación segura.</translation>
+<translation id="3439282137581679399">Habilita la lista negra de permisos que bloquea los permisos de sitios incluidos en lista negra para usuarios del servicio de Navegación Segura.</translation>
<translation id="3439970425423980614">Abriendo archivo PDF en la vista previa</translation>
<translation id="3440761377721825626">Preguntar cuando un sitio web quiera utilizar un complemento para acceder a tu ordenador</translation>
<translation id="3441653493275994384">Pantalla</translation>
@@ -2880,7 +2880,7 @@ Pulsa cualquier tecla para seguir con la exploración.</translation>
<translation id="4791148004876134991">Cambia el comportamiento de Cmd+ cuando se activa una aplicación de Chrome. Cuando se habilita, las aplicaciones de Chrome no rotan cuando se pulsa Cmd+ desde una ventana del navegador y las ventanas del navegador no rotan cuando una aplicación de Chrome está activa.</translation>
<translation id="4792711294155034829">&amp;Notificar un error...</translation>
<translation id="479280082949089240">Cookies almacenadas por esta página</translation>
-<translation id="4793866834012505469">Volver a entrenar el modelo de voz</translation>
+<translation id="4793866834012505469">Volver a configurar el modelo de voz</translation>
<translation id="479536056609751218">Página web (solo HTML)</translation>
<translation id="479989351350248267">buscar</translation>
<translation id="480036413855787547">Accede a tus contraseñas en la página <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> con cualquier dispositivo. En los ordenadores Mac, se pueden guardar las contraseñas en el llavero y otros usuarios de Chrome que compartan esta cuenta de OS X pueden acceder a ellas o sincronizarlas.</translation>
@@ -4878,7 +4878,7 @@ Solo debes usar esta función con las cuentas de confianza.</translation>
<translation id="7484964289312150019">Abrir todos los marcadores en una &amp;ventana nueva</translation>
<translation id="7485236722522518129">F4</translation>
<translation id="7487067081878637334">Tecnología</translation>
-<translation id="7487099628810939106">Retraso antes del clic:</translation>
+<translation id="7487099628810939106">Pausa antes del clic:</translation>
<translation id="7487969577036436319">No hay componentes instalados</translation>
<translation id="7489605380874780575">Comprobar elegibilidad</translation>
<translation id="749028671485790643">Persona <ph name="VALUE" /></translation>
@@ -6107,7 +6107,7 @@ Puede que las notificaciones, las ventanas y los cuadros de diálogo que aparezc
<translation id="9148126808321036104">Volver a iniciar sesión</translation>
<translation id="9149866541089851383">Editar...</translation>
<translation id="9150045010208374699">Utilizar la cámara</translation>
-<translation id="9152722471788855605">Analizador de archivos .zip para la navegación segura</translation>
+<translation id="9152722471788855605">Analizador de archivos .zip para la Navegación Segura</translation>
<translation id="9153341767479566106">Otras extensiones que no se han podido cargar:</translation>
<translation id="9153744823707037316">Método de entrada de conjunto</translation>
<translation id="9153934054460603056">Guardar la identidad y la contraseña</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_et.xtb b/chromium/chrome/app/resources/generated_resources_et.xtb
index fa433b29848..0b910b34eae 100644
--- a/chromium/chrome/app/resources/generated_resources_et.xtb
+++ b/chromium/chrome/app/resources/generated_resources_et.xtb
@@ -1537,7 +1537,7 @@ Ma arvan, et see sait ei tohiks olla blokeeritud.</translation>
<translation id="2964193600955408481">Keela WiFi</translation>
<translation id="2966449113954629791">Võimalik, et olete oma mobiilse andmeside ära kasutanud. Andmesidet saate juurde osta aktiveerimisportaalis <ph name="NAME" />.</translation>
<translation id="2966459079597787514">Rootsi klaviatuur</translation>
-<translation id="2966598748518102999">Paranda häälotsingut, saates Google'ile otsetee sõna „OK Google” ja sellele eelneva mõne sekundi heli.</translation>
+<translation id="2966598748518102999">Paranda häälotsingut, saates Google'ile otsetee sõna „Ok Google” ja sellele eelneva mõne sekundi heli.</translation>
<translation id="2967544384642772068">Peata</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">vähenda heledust</translation>
@@ -1754,14 +1754,14 @@ Nende ja edasiste juhiste nägemiseks vaadake meile aadressil <ph name="ACCOUNT_
<translation id="3241720467332021590">iiri keel</translation>
<translation id="3242118113727675434">Näita puutepunktide pseudokuvarit</translation>
<translation id="3242765319725186192">Eeljagatud võti:</translation>
-<translation id="3244621381664913240">Luba otsetee sõna „OK Google” häälotsingu alustamiseks.</translation>
+<translation id="3244621381664913240">Luba otsetee sõna „Ok Google” häälotsingu alustamiseks.</translation>
<translation id="3245321423178950146">Tundmatu esitaja</translation>
<translation id="324533084080637716">Artiklite märgistus on struktureeritud</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – võrguviga</translation>
<translation id="3251759466064201842">&lt;Ei sisaldu sertifikaadis&gt;</translation>
<translation id="3252266817569339921">prantsuse keel</translation>
<translation id="3254434849914415189">Valige vaikerakendus <ph name="FILE_TYPE" />-failide jaoks:</translation>
-<translation id="3255228561559750854">Otsige või öelge otsetee sõna „OK Google”</translation>
+<translation id="3255228561559750854">Otsige või öelge otsetee sõna „Ok Google”</translation>
<translation id="3257011895468050906">Märgi sidumise toe lubamine.</translation>
<translation id="3260892921936048802">&amp;Laadi alla …</translation>
<translation id="326356299252142602">Windows Runtime MIDI API kasutamine</translation>
@@ -2208,7 +2208,7 @@ Asukohast <ph name="DOWNLOAD_DOMAIN" /></translation>
<translation id="3812525830114410218">Halb sertifikaat</translation>
<translation id="3812568885510197014">Märgib automaattäitega allkirjadega veebivormid HTML-atribuutidena.</translation>
<translation id="3813296892522778813">Kui te ei leia otsitavat, avage <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome'i abi<ph name="END_LINK_CHROMIUM" /></translation>
-<translation id="3813984289128269159">OK Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">Zhuyini sisestusmeetod</translation>
<translation id="3815571115159309122">Leiti <ph name="FILE_COUNT" /> uut fotot
<ph name="LINE_BREAK1" />
@@ -2696,7 +2696,7 @@ Jätkamiseks peavad kõik kasutajad välja logima.</translation>
<translation id="4533259260976001693">Ahendamine/laiendamine</translation>
<translation id="4533985347672295764">Protsessoriaeg</translation>
<translation id="4534166495582787863">Lubab puuteplaadil kolme sõrmega klõpsamise, mis toimib kui hiire keskmine nupp.</translation>
-<translation id="4534799089889278411">Öelge uuel vahelehel, saidil google.ee ja rakenduste käivitajas „Ok Google”</translation>
+<translation id="4534799089889278411">Öelge uuel vahelehel, saidil google.com ja rakenduste käivitajas „Ok Google”</translation>
<translation id="4535127706710932914">Vaikeprofiil</translation>
<translation id="4538417792467843292">Kustutab sõna</translation>
<translation id="4538684596480161368">Blokeeri alati saidil <ph name="HOST" /> pistikprogrammid, mis ei ole liivakastirežiimis</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fa.xtb b/chromium/chrome/app/resources/generated_resources_fa.xtb
index fbea778368c..3f5d785a776 100644
--- a/chromium/chrome/app/resources/generated_resources_fa.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fa.xtb
@@ -1534,7 +1534,7 @@
<translation id="2964193600955408481">‏غیرفعال کردن Wi-Fi</translation>
<translation id="2966449113954629791">ممکن است کلیه میزان مجاز داده‌‌های دستگاه همراهتان را مصرف کرده باشید. برای خرید داده بیشتر از پورتال فعال‌سازی <ph name="NAME" /> بازدید کنید.</translation>
<translation id="2966459079597787514">صفحه‌کلید سوئدی</translation>
-<translation id="2966598748518102999">‏با ارسال صدای «Ok Google» و چند دقیقه قبل به Google، جستجوی صدا را بهبود بخشید.</translation>
+<translation id="2966598748518102999">‏با ارسال صدای «Ok Google» و چند دقیقه قبل از آن به Google، جستجوی گفتاری را بهبود دهید.</translation>
<translation id="2967544384642772068">بستن</translation>
<translation id="2971033837577180453">‏&lt;span&gt;شناسه:&lt;/span&gt;‏<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">کاهش روشنایی</translation>
@@ -3213,7 +3213,7 @@
<translation id="5229189185761556138">مدیریت روش‌های ورودی</translation>
<translation id="5229622432348746578">غیرفعال کردن صوت برای اشتراک‌گذاری میزکار</translation>
<translation id="5230516054153933099">پنجره</translation>
-<translation id="5232178406098309195">‏وقتی از فرمان‌های فعال‌سازی صوتی مانند «Ok Google» یا لمس نماد میکروفون استفاده می‌کنید، فعالیت صوتی و گفتاری خصوصی شما برخی از گفتارها و شنیدارهای دیگر را در حسابتان ذخیره می‌کند. مورد ضبط شده‌ای از گفتار/صدای بعد از آن به علاوه چند ثانیه قبل از آن، ذخیره می‌شود.</translation>
+<translation id="5232178406098309195">‏وقتی از فرمان‌های فعال‌سازی صوتی مانند «Ok Google» یا لمس نماد میکروفون استفاده می‌کنید، فعالیت صوتی و گفتاری خصوصی شما برخی از گفتارها و شنیدارهای دیگر را در حسابتان ذخیره می‌کند. گفتار/صوت ضبط‌شده بعد از آن به‌علاوه چند ثانیه قبل از آن ذخیره می‌شود.</translation>
<translation id="523299859570409035">موارد استثنای اعلام</translation>
<translation id="5233019165164992427">‏درگاه اشکال‌زدایی NaCl</translation>
<translation id="5233231016133573565">شناسه فرایند</translation>
@@ -5666,7 +5666,7 @@
<translation id="8565650234829130278">برای پایین‌تر آوردن نسخه برنامه تلاش کرد.</translation>
<translation id="8569682776816196752">مقصدی یافت نشد</translation>
<translation id="8569764466147087991">انتخاب فایلی برای باز کردن</translation>
-<translation id="8571032220281885258">‏وقتی می‌گویید «Ok Google»، ‏Chrome کلمه بعدی را که بازگو می‌کنید، جستجو می‌کند.</translation>
+<translation id="8571032220281885258">‏وقتی می‌گویید «Ok Google»، ‏Chrome کلمه بعدی‌ای را که بگویید جستجو می‌کند.</translation>
<translation id="8571108619753148184">سرور ۴</translation>
<translation id="8574234089711453001">نمایش دکمه بارگیری را هنگام باز‌ کردن صفحه‌ای با نشانی‌وب رسانه مجاز می‌کند.</translation>
<translation id="857779305329188634">‏پشتیبانی پروتکل QUIC آزمایشی را به کار بیندازید.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fr.xtb b/chromium/chrome/app/resources/generated_resources_fr.xtb
index 0187c1c21eb..cb92fed23e3 100644
--- a/chromium/chrome/app/resources/generated_resources_fr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fr.xtb
@@ -1536,7 +1536,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation>
<translation id="2964193600955408481">Désactiver le réseau Wi-Fi</translation>
<translation id="2966449113954629791">Il semble que vous ayez utilisé l'intégralité de votre quota de données mobiles. Accédez au portail d'activation <ph name="NAME" /> pour acheter des données supplémentaires.</translation>
<translation id="2966459079597787514">Clavier suédois</translation>
-<translation id="2966598748518102999">Améliorer la recherche vocale en envoyant à Google l'enregistrement "OK Google", et les quelques secondes précédentes</translation>
+<translation id="2966598748518102999">Améliorer la recherche vocale en envoyant à Google l'enregistrement "Ok Google", et les quelques secondes précédentes</translation>
<translation id="2967544384642772068">Fermer</translation>
<translation id="2971033837577180453">&lt;span&gt;ID :&lt;/span&gt; <ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">baisser la luminosité</translation>
@@ -1760,7 +1760,7 @@ Pour vérifier ce point et en savoir plus, veuillez consulter votre compte de me
<translation id="3251759466064201842">&lt;Ne fait pas partie du certificat&gt;</translation>
<translation id="3252266817569339921">Français</translation>
<translation id="3254434849914415189">Sélectionnez l'application par défaut pour les fichiers <ph name="FILE_TYPE" /> :</translation>
-<translation id="3255228561559750854">Effectuez une recherche ou dites "OK Google"</translation>
+<translation id="3255228561559750854">Effectuez une recherche ou dites "Ok Google"</translation>
<translation id="3257011895468050906">Activer Token Binding</translation>
<translation id="3260892921936048802">&amp;Télécharger…</translation>
<translation id="326356299252142602">Utiliser l'API Windows Runtime MIDI</translation>
@@ -5621,7 +5621,7 @@ Calcul de la durée restante</translation>
<translation id="8487700953926739672">Disponible hors connexion</translation>
<translation id="8490896350101740396">Les applications kiosque "<ph name="UPDATED_APPS" />" ont bien été mises à jour. Veuillez redémarrer l'appareil afin de terminer la procédure.</translation>
<translation id="8493236660459102203">Micro :</translation>
-<translation id="8495193314787127784">Activer "OK Google"</translation>
+<translation id="8495193314787127784">Activer "Ok Google"</translation>
<translation id="8496717697661868878">Exécuter ce plug-in</translation>
<translation id="8497392509610708671">Vous pouvez modifier cette option à tout moment dans les <ph name="BEGIN_LINK" />Paramètres de Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Ajouter un appareil Bluetooth</translation>
@@ -5670,7 +5670,7 @@ Calcul de la durée restante</translation>
<translation id="8565650234829130278">Tentative de passage à une version antérieure de l'application.</translation>
<translation id="8569682776816196752">Aucun emplacement de destination trouvé.</translation>
<translation id="8569764466147087991">Sélectionnez le fichier à ouvrir</translation>
-<translation id="8571032220281885258">Lorsque vous dites "OK Google", les termes que vous énoncez ensuite font l'objet d'une recherche dans Chrome.</translation>
+<translation id="8571032220281885258">Lorsque vous dites "Ok Google", les termes que vous énoncez ensuite font l'objet d'une recherche dans Chrome.</translation>
<translation id="8571108619753148184">Serveur 4</translation>
<translation id="8574234089711453001">Affiche un bouton de téléchargement lors de l'ouverture d'une page associée à une URL de média.</translation>
<translation id="857779305329188634">Permet d'activer la compatibilité du protocole expérimental QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hi.xtb b/chromium/chrome/app/resources/generated_resources_hi.xtb
index 53916fa412f..24208b30a46 100644
--- a/chromium/chrome/app/resources/generated_resources_hi.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hi.xtb
@@ -5161,7 +5161,7 @@
<translation id="7881969471599061635">उपशीर्षक अक्षम करें</translation>
<translation id="7882358943899516840">प्रदाता का प्रकार</translation>
<translation id="7885253890047913815">हाल ही के गंतव्य</translation>
-<translation id="7887192723714330082">स्‍क्रीन के चालू होने तथा अनलॉक होने पर "Ok Google" को प्रतिसाद दें</translation>
+<translation id="7887192723714330082">स्‍क्रीन के चालू होने तथा अनलॉक होने पर "Ok Google" को प्रतिक्रिया दें</translation>
<translation id="7887334752153342268">डुप्लिकेट</translation>
<translation id="7887864092952184874">ब्लूटूथ माउस युग्मित किया गया</translation>
<translation id="7892100671754994880">अगला उपयोगकर्ता</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hr.xtb b/chromium/chrome/app/resources/generated_resources_hr.xtb
index 64a6b6f3e1c..e58259d4cc7 100644
--- a/chromium/chrome/app/resources/generated_resources_hr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hr.xtb
@@ -610,7 +610,7 @@
<translation id="1763108912552529023">Nastavi istraživati</translation>
<translation id="1764226536771329714">beta</translation>
<translation id="176587472219019965">&amp;Novi prozor</translation>
-<translation id="1766352429832934452">Omogućeno (potrebno za upotrebu značajke "OK Google")</translation>
+<translation id="1766352429832934452">Omogućeno (potrebno za upotrebu značajke "Ok Google")</translation>
<translation id="1769104665586091481">Otvori vezu u novom &amp;prozoru</translation>
<translation id="1772267994638363865">Da biste to postigli, morat ćete omogućiti Glasovnu i audioaktivnost i obučiti svoj uređaj <ph name="DEVICE_TYPE" /> na sljedeći način.</translation>
<translation id="1773212559869067373">Certifikat za autentifikaciju odbijen je lokalno</translation>
@@ -735,7 +735,7 @@
<translation id="1934636348456381428">Omogućuje se primjena eksperimentalnih klizača preklapanja. Također morate omogućiti slaganje nitima kako bi se klizači animirali.</translation>
<translation id="1936157145127842922">Prikaži u mapi</translation>
<translation id="1936717151811561466">Finski</translation>
-<translation id="1937256809970138538">Recite "OK Google" kada zaslon bude uključen i otključan</translation>
+<translation id="1937256809970138538">Recite "Ok Google" kada zaslon bude uključen i otključan</translation>
<translation id="1942765061641586207">Razlučivost slike</translation>
<translation id="1944921356641260203">Pronađeno je ažuriranje</translation>
<translation id="1947424002851288782">Njemačka tipkovnica</translation>
@@ -1476,7 +1476,7 @@ Mislim da ta web-lokacija ne bi trebala biti blokirana!</translation>
<translation id="2890678560483811744">Referenca na stranicu izvan je granica</translation>
<translation id="2893168226686371498">Zadani preglednik</translation>
<translation id="289426338439836048">Druga mobilna mreža...</translation>
-<translation id="2894745200702272315">Omogućuje eksperimentalnu verziju značajki otkrivanja pokretača značajke "OK Google" ovisnih o hardveru.</translation>
+<translation id="2894745200702272315">Omogućuje eksperimentalnu verziju značajki otkrivanja pokretača značajke "Ok Google" ovisnih o hardveru.</translation>
<translation id="289644616180464099">SIM kartica je zaključana</translation>
<translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation>
<translation id="2897878306272793870">Jeste li sigurni da želite otvoriti <ph name="TAB_COUNT" /> kartica?</translation>
@@ -1704,7 +1704,7 @@ Više informacija potražite u našem <ph name="BEGIN_LINK" />centru za pomoć<p
<translation id="3162559335345991374">Za Wi-Fi koji upotrebljavate možda ćete morati posjetiti stranicu za prijavu.</translation>
<translation id="316307797510303346">Upravljajte web-lokacijama koje ova osoba posjeti i prikazujte ih putem računa <ph name="CUSTODIAN_EMAIL" />.
Vaši su podaci za prijavu zastarjeli.</translation>
-<translation id="3166571619128686629">Kliknite ili recite "OK Google" da biste pokrenuli glasovno pretraživanje</translation>
+<translation id="3166571619128686629">Kliknite ili recite "Ok Google" da biste pokrenuli glasovno pretraživanje</translation>
<translation id="3170072451822350649">Možete također preskočiti prijavu i <ph name="LINK_START" />pregledavati kao gost<ph name="LINK_END" />.</translation>
<translation id="3170544058711792988">Zadrži fokus povećala na sredini zaslona</translation>
<translation id="317583078218509884">Nove postavke dozvola za web-lokacije postat će aktivne nakon ponovnog učitavanja stranice.</translation>
@@ -1753,7 +1753,7 @@ Više informacija potražite u našem <ph name="BEGIN_LINK" />centru za pomoć<p
<translation id="3241720467332021590">Irski</translation>
<translation id="3242118113727675434">Prikaži naglavni zaslon za dodirne točke</translation>
<translation id="3242765319725186192">Unaprijed podijeljen ključ:</translation>
-<translation id="3244621381664913240">Omogući "OK Google" za pokretanje glasovnog pretraživanja</translation>
+<translation id="3244621381664913240">Omogući "Ok Google" za pokretanje glasovnog pretraživanja</translation>
<translation id="3245321423178950146">Nepoznati izvođač</translation>
<translation id="324533084080637716">S oznakama strukturiranim kao članak</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – mrežna pogreška</translation>
@@ -2696,7 +2696,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="4533259260976001693">Smanji/proširi</translation>
<translation id="4533985347672295764">Vrijeme CPU-a</translation>
<translation id="4534166495582787863">Omogućuje klik s tri prsta na dodirnoj podlozi kao srednji gumb.</translation>
-<translation id="4534799089889278411">Recite "OK Google" na novoj kartici, web-lokaciji google.com i u Pokretaču aplikacija</translation>
+<translation id="4534799089889278411">Recite "Ok Google" na novoj kartici, web-lokaciji google.com i u Pokretaču aplikacija</translation>
<translation id="4535127706710932914">Zadani profil</translation>
<translation id="4538417792467843292">Izbriši riječ</translation>
<translation id="4538684596480161368">Uvijek blokiraj dodatke izvan testnog okruženja na <ph name="HOST" /></translation>
@@ -3216,7 +3216,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="5229189185761556138">Upravljaj načinima unosa</translation>
<translation id="5229622432348746578">Onemogući audio za dijeljenje radne površine</translation>
<translation id="5230516054153933099">Prozor</translation>
-<translation id="5232178406098309195">Kada upotrebljavate zvučne aktivacijske naredbe kao što je "OK Google" ili dodirivanje ikone mikrofona, vaša privatna Glasovna i audioaktivnost pohranjuje neke glasovne i ostale zvučne podatke na vaš račun. Pohranit će se snimka govora i zvuka koji će uslijediti i nekoliko sekundi prije toga.</translation>
+<translation id="5232178406098309195">Kada upotrebljavate zvučne aktivacijske naredbe kao što je "Ok Google" ili dodirivanje ikone mikrofona, vaša privatna Glasovna i audioaktivnost pohranjuje neke glasovne i ostale zvučne podatke na vaš račun. Pohranit će se snimka govora i zvuka koji će uslijediti i nekoliko sekundi prije toga.</translation>
<translation id="523299859570409035">Iznimke za obavijesti</translation>
<translation id="5233019165164992427">Priključak za otklanjanje pogrešaka lokalnog klijenta</translation>
<translation id="5233231016133573565">ID procesa</translation>
@@ -3235,7 +3235,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="5249624017678798539">Preglednik se srušio prije nego što je preuzimanje dovršeno.</translation>
<translation id="5252456968953390977">Roaming</translation>
<translation id="5252653240322147470">Broj znamenki u PIN-u mora biti manji od <ph name="MAXIMUM" /></translation>
-<translation id="5253753933804516447">Omogući "OK Google" za glasovno pretraživanje kada je zaslon uključen i otključan</translation>
+<translation id="5253753933804516447">Omogući "Ok Google" za glasovno pretraživanje kada je zaslon uključen i otključan</translation>
<translation id="52550593576409946">Aplikacija kioska nije pokrenuta.</translation>
<translation id="5255315797444241226">Zaporka koju ste unijeli nije točna.</translation>
<translation id="5260508466980570042">Žao nam je, nije bilo moguće potvrditi e-adresu ili zaporku. Pokušajte ponovo.</translation>
@@ -3811,7 +3811,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="6011449291337289699">Brisanje podataka web-lokacija</translation>
<translation id="6015796118275082299">Godina</translation>
<translation id="6016551720757758985">Potvrda Powerwasha uz povratak na prethodnu verziju</translation>
-<translation id="6016809788585079594">Recite "OK Google" još samo jedanput</translation>
+<translation id="6016809788585079594">Recite "Ok Google" još samo jedanput</translation>
<translation id="6016972670657536680">Gumb za odabir jezika i tipkovnice. Trenutačno je odabran <ph name="LANGUAGE" />.</translation>
<translation id="6017225534417889107">Promijeni...</translation>
<translation id="6017981840202692187">Dodavanje u Aplikacije</translation>
@@ -3879,7 +3879,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="6105158702728922449">upotrijebiti vašu kameru i mikrofon</translation>
<translation id="6105877918873366097">Zadnji pristup</translation>
<translation id="6107012941649240045">Izdano za</translation>
-<translation id="6107079717483424262">prepoznati vaš glas kada kažete "OK Google"</translation>
+<translation id="6107079717483424262">prepoznati vaš glas kada kažete "Ok Google"</translation>
<translation id="6109228527970300988">Emojiji, unos rukopisom i glasovni unos na dodatnom IME izborniku</translation>
<translation id="6111770213269631447">transliteracija (namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">Uređivanje osobe, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
@@ -3922,7 +3922,7 @@ Pritisnite bilo koju tipku da biste nastavili istraživati.</translation>
<translation id="6165508094623778733">Saznajte više</translation>
<translation id="6166185671393271715">Uvoz zaporki u Chrome</translation>
<translation id="6169666352732958425">Emitiranje radne površine nije moguće.</translation>
-<translation id="6171550060231646388">Simulirane hardverske značajke za "OK Google"</translation>
+<translation id="6171550060231646388">Simulirane hardverske značajke za "Ok Google"</translation>
<translation id="6171948306033499786">Pauziraj ispis</translation>
<translation id="6175314957787328458">Microsoft Domain GUID</translation>
<translation id="6178664161104547336">Odabir certifikata</translation>
@@ -4549,7 +4549,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
<translation id="7012372675181957985">Na Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation>
<translation id="7013485839273047434">Nabavi više proširenja</translation>
<translation id="7014174261166285193">Instalacija nije uspjela.</translation>
-<translation id="7017004637493394352">Ponovo recite "OK Google"</translation>
+<translation id="7017004637493394352">Ponovo recite "Ok Google"</translation>
<translation id="7017219178341817193">Dodaj novu stranicu</translation>
<translation id="7017354871202642555">Nakon postavljanja prozora nije moguće postaviti način.</translation>
<translation id="7017480957358237747">dopustiti ili zabraniti određene web-lokacije</translation>
@@ -4706,7 +4706,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
<translation id="7238585580608191973">SHA-256 otisak prsta</translation>
<translation id="7240120331469437312">Zamjenski naziv predmeta certifikata</translation>
<translation id="7241389281993241388">Prijavite se na uređaj <ph name="TOKEN_NAME" /> kako biste uvezli certifikat klijenta.</translation>
-<translation id="7243055093079293866">Recite "OK Google" u novoj kartici i na google.com</translation>
+<translation id="7243055093079293866">Recite "Ok Google" u novoj kartici i na google.com</translation>
<translation id="7243632151880336635">Izbriši i odjavi se</translation>
<translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (najbolje)</translation>
<translation id="7246947237293279874">FTP proxy</translation>
@@ -4787,7 +4787,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
<translation id="7361824946268431273">Brže, jednostavnije i sigurnije računalo</translation>
<translation id="7364796246159120393">Odaberi datoteku</translation>
<translation id="736515969993332243">Skeniranje mreža.</translation>
-<translation id="7366762109661450129">Recite "OK Google" kad je zaslon uključen i otključan.</translation>
+<translation id="7366762109661450129">Recite "Ok Google" kad je zaslon uključen i otključan.</translation>
<translation id="7366909168761621528">Podaci o pregledavanju</translation>
<translation id="7369521049655330548">Na toj su stranici blokirani sljedeći dodaci:</translation>
<translation id="7371490661692457119">Zadana širina razlomljenog elementa</translation>
@@ -4910,10 +4910,10 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
<translation id="7517569744831774757">Vraćanje postavki na njihove izvorne zadane vrijednosti.</translation>
<translation id="7517786267097410259">Izrada zaporke –</translation>
<translation id="7518150891539970662">WebRTC zapisnici (<ph name="WEBRTC_LOG_COUNT" />)</translation>
-<translation id="7518657099163789435">Za upotrebu značajke "OK Google" potrebna je Glasovna i audioaktivnost</translation>
+<translation id="7518657099163789435">Za upotrebu značajke "Ok Google" potrebna je Glasovna i audioaktivnost</translation>
<translation id="7520821146909122639">Stranica se prevodi...</translation>
<translation id="7521387064766892559">JavaScript</translation>
-<translation id="7522255036471229694">Recite "OK Google"</translation>
+<translation id="7522255036471229694">Recite "Ok Google"</translation>
<translation id="7525067979554623046">Stvori</translation>
<translation id="7529471622666797993"><ph name="BEGIN_LINK" />Napredne postavke fonta<ph name="END_LINK" /> (potrebno je proširenje)</translation>
<translation id="7530016656428373557">Stopa pražnjenja u vatima</translation>
@@ -5160,7 +5160,7 @@ Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
<translation id="7881969471599061635">Onemogući titlove</translation>
<translation id="7882358943899516840">Vrsta davatelja usluge</translation>
<translation id="7885253890047913815">Nedavna odredišta</translation>
-<translation id="7887192723714330082">Odgovoriti na "OK Google" kada je zaslon uključen i otključan</translation>
+<translation id="7887192723714330082">Odgovoriti na "Ok Google" kada je zaslon uključen i otključan</translation>
<translation id="7887334752153342268">Udvostruči</translation>
<translation id="7887864092952184874">Bluetooth miš uparen</translation>
<translation id="7892100671754994880">Sljedeći korisnik</translation>
@@ -5310,7 +5310,7 @@ Ključnu datoteku čuvajte na sigurnom mjestu. Trebat će vam za stvaranje novih
<translation id="806812017500012252">Poredaj po naslovu</translation>
<translation id="8069615408251337349">Google Cloud Print</translation>
<translation id="8071432093239591881">Ispiši kao sliku</translation>
-<translation id="8071942001314758122">Samo recite "OK Google" tri puta</translation>
+<translation id="8071942001314758122">Samo recite "Ok Google" tri puta</translation>
<translation id="8072988827236813198">Prikvači kartice</translation>
<translation id="8074127646604999664">Dopusti nedavno zatvorenim web-lokacijama dovršetak slanja i primanja podataka</translation>
<translation id="8075191520954018715">Stanje memorije</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hu.xtb b/chromium/chrome/app/resources/generated_resources_hu.xtb
index d7ba01100ca..df6d9269d04 100644
--- a/chromium/chrome/app/resources/generated_resources_hu.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hu.xtb
@@ -610,7 +610,7 @@
<translation id="1763108912552529023">A felfedezés folytatása</translation>
<translation id="1764226536771329714">béta</translation>
<translation id="176587472219019965">Új &amp;ablak</translation>
-<translation id="1766352429832934452">Engedélyezve (szükséges az „OK Google” használatához)</translation>
+<translation id="1766352429832934452">Engedélyezve (szükséges az „Ok Google” használatához)</translation>
<translation id="1769104665586091481">Link megnyitása új &amp;ablakban</translation>
<translation id="1772267994638363865">Ennek eléréséhez a következő lépésekben be kell kapcsolnia a Hang- és audiotevékenységeket, valamint be kell tanítania <ph name="DEVICE_TYPE" /> eszközét.</translation>
<translation id="1773212559869067373">A hitelesítési tanúsítvány helyileg elutasítva</translation>
@@ -1537,7 +1537,7 @@ Miután létrehozott egy új felügyelt felhasználót, bármikor és bármilyen
<translation id="2964193600955408481">Wi-Fi letiltása</translation>
<translation id="2966449113954629791">Valószínűleg elérte a mobiladat-használatra vonatkozó korlátozást. További adatforgalom vásárlásához keresse fel a(z) <ph name="NAME" /> aktiválási portált.</translation>
<translation id="2966459079597787514">Svéd billentyűzet</translation>
-<translation id="2966598748518102999">A Hangalapú keresés javítása azáltal, hogy elküldi az „OK Google” kifejezést néhány megelőző másodperccel együtt a Google számára.</translation>
+<translation id="2966598748518102999">A Hangalapú keresés javítása azáltal, hogy elküldi az „Ok Google” kifejezést néhány megelőző másodperccel együtt a Google számára.</translation>
<translation id="2967544384642772068">Bezárás</translation>
<translation id="2971033837577180453">&lt;span&gt;Azonosító:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">sötétítés</translation>
@@ -1761,7 +1761,7 @@ Ha további információt szeretne, látogasson el a <ph name="BEGIN_LINK" />Sú
<translation id="3251759466064201842">&lt;Nem része a tanúsítványnak&gt;</translation>
<translation id="3252266817569339921">francia</translation>
<translation id="3254434849914415189">Válassza ki az alapértelmezett alkalmazást <ph name="FILE_TYPE" />-fájlokhoz:</translation>
-<translation id="3255228561559750854">Végezzen keresést, vagy mondja azt, hogy „Oké, Google!”</translation>
+<translation id="3255228561559750854">Végezzen keresést, vagy mondja azt, hogy „Ok Google!”</translation>
<translation id="3257011895468050906">A Token Binding támogatásának engedélyezése.</translation>
<translation id="3260892921936048802">&amp;Letöltés…</translation>
<translation id="326356299252142602">A Windows Runtime MIDI API használata</translation>
@@ -2208,7 +2208,7 @@ Innen: <ph name="DOWNLOAD_DOMAIN" /></translation>
<translation id="3812525830114410218">Helytelen tanúsítvány</translation>
<translation id="3812568885510197014">Az internetes űrlapokat automatikus kitöltési aláírásokkal mint HTML-attribútumokkal látja el.</translation>
<translation id="3813296892522778813">Ha nem találja, amit keres, próbálkozzon a <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome súgójában<ph name="END_LINK_CHROMIUM" /></translation>
-<translation id="3813984289128269159">OK Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">Zujin beviteli mód</translation>
<translation id="3815571115159309122"><ph name="FILE_COUNT" /> új fotó észlelve
<ph name="LINE_BREAK1" />
@@ -5669,7 +5669,7 @@ letiltásához nyomja le a Ctrl+Alt+Z billentyűkombinációt.</translation>
<translation id="8565650234829130278">Megpróbálta alacsonyabb verzióra váltani az alkalmazást.</translation>
<translation id="8569682776816196752">Nem található célhely</translation>
<translation id="8569764466147087991">Válassza ki a megnyitni kívánt fájlt</translation>
-<translation id="8571032220281885258">Amikor kimondja azt, hogy „OK Google”, a Chrome elindítja az Ön által ezt követően kimondott szavak keresését.</translation>
+<translation id="8571032220281885258">Amikor kimondja azt, hogy „Ok Google”, a Chrome elindítja az Ön által ezt követően kimondott szavak keresését.</translation>
<translation id="8571108619753148184">4. szerver</translation>
<translation id="8574234089711453001">Letöltés gomb megjelenésének engedélyezése média URL-lel rendelkező oldal megnyitása esetén.</translation>
<translation id="857779305329188634">A kísérleti QUIC protokolltámogatás engedélyezése.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_id.xtb b/chromium/chrome/app/resources/generated_resources_id.xtb
index 19baf29cd33..cab9604ea06 100644
--- a/chromium/chrome/app/resources/generated_resources_id.xtb
+++ b/chromium/chrome/app/resources/generated_resources_id.xtb
@@ -811,7 +811,7 @@
<translation id="2074527029802029717">Lepas sematan tab</translation>
<translation id="2075594581020578008">Browser <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
<translation id="2076269580855484719">Sembunyikan plugin ini</translation>
-<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation>
+<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation>
<translation id="2078019350989722914">Peringatan Sebelum Berhenti (<ph name="KEY_EQUIVALENT" />)</translation>
<translation id="2079053412993822885">Jika salah satu sertifikat dihapus, Anda tidak akan dapat lagi menggunakannya untuk mengidentifikasi diri Anda.</translation>
<translation id="2079545284768500474">Urungkan</translation>
@@ -5074,7 +5074,7 @@ Hanya gunakan fitur ini dengan akun yang Anda percayai.</translation>
<translation id="7765158879357617694">Pindahkan</translation>
<translation id="7766807826975222231">Ikuti tur</translation>
<translation id="7767646430896201896">Opsi:</translation>
-<translation id="7768784765476638775">Pilih untuk berbicara</translation>
+<translation id="7768784765476638775">Klik untuk diucapkan</translation>
<translation id="7769353642898261262">Cara mengamankan ponsel</translation>
<translation id="7769672763586021400">ID Model</translation>
<translation id="7771452384635174008">Tata letak</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_it.xtb b/chromium/chrome/app/resources/generated_resources_it.xtb
index c55a0db5fa9..d7ae0a4f818 100644
--- a/chromium/chrome/app/resources/generated_resources_it.xtb
+++ b/chromium/chrome/app/resources/generated_resources_it.xtb
@@ -121,7 +121,7 @@
<translation id="1166212789817575481">Chiudi schede a destra</translation>
<translation id="1168020859489941584"><ph name="TIME_REMAINING" /> all'apertura del file...</translation>
<translation id="1171000732235946541">Questo metodo di immissione potrebbe essere in grado di memorizzare tutto il testo digitato, inclusi dati personali quali password e numeri di carte di credito. Proviene dall'estensione "<ph name="EXTENSION_NAME" />". Utilizzare questo metodo di immissione?</translation>
-<translation id="1171135284592304528">Evidenzia l'oggetto con l'elemento attivo della tastiera quando cambia</translation>
+<translation id="1171135284592304528">Evidenzia l'oggetto con lo stato attivo della tastiera quando cambia</translation>
<translation id="1173894706177603556">Rinomina</translation>
<translation id="1175364870820465910">&amp;Stampa...</translation>
<translation id="117624967391683467">Copia di <ph name="FILE_NAME" />...</translation>
@@ -1535,7 +1535,7 @@ Non credo che questo sito debba essere bloccato.</translation>
<translation id="2964193600955408481">Disattiva Wi-Fi</translation>
<translation id="2966449113954629791">Potresti avere esaurito la tua quota di dati mobili. Visita il portale di attivazione <ph name="NAME" /> per acquistare altri dati.</translation>
<translation id="2966459079597787514">Tastiera svedese</translation>
-<translation id="2966598748518102999">Migliora la ricerca vocale inviando a Google l'audio di "OK Google" e di alcuni secondi precedenti.</translation>
+<translation id="2966598748518102999">Migliora la ricerca vocale inviando a Google l'audio di "Ok Google" e di alcuni secondi precedenti.</translation>
<translation id="2967544384642772068">Termina</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">riduci luminosità</translation>
@@ -1759,7 +1759,7 @@ I dati di accesso del tuo account sono obsoleti.</translation>
<translation id="3251759466064201842">&lt;Non parte del certificato&gt;</translation>
<translation id="3252266817569339921">Francese</translation>
<translation id="3254434849914415189">Seleziona l'applicazione predefinita per i file <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Effettua una ricerca o dì "OK Google"</translation>
+<translation id="3255228561559750854">Effettua una ricerca o dì "Ok Google"</translation>
<translation id="3257011895468050906">Consente di attivare il supporto di Token Binding.</translation>
<translation id="3260892921936048802">&amp;Scarica...</translation>
<translation id="326356299252142602">Utilizza API Windows Runtime MIDI</translation>
@@ -3872,7 +3872,7 @@ Premi un tasto qualsiasi per continuare a esplorare.</translation>
<translation id="6105158702728922449">Utilizzare la videocamera e il microfono</translation>
<translation id="6105877918873366097">Ultimo accesso</translation>
<translation id="6107012941649240045">Rilasciato a</translation>
-<translation id="6107079717483424262">Riconoscere la tua voce quando pronunci "Ok Google"</translation>
+<translation id="6107079717483424262">Riconoscere la tua voce quando dici "Ok Google"</translation>
<translation id="6109228527970300988">Emoji, scrittura a mano libera e input vocale nel menu IME</translation>
<translation id="6111770213269631447">Traslitterazione (namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">Modifica persona, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
@@ -4895,7 +4895,7 @@ Utilizza questa funzione solo con gli account che consideri attendibili.</transl
<translation id="7512768521598401899">Consenti alle pagine web di utilizzare la clonazione strutturata di WebAssembly.</translation>
<translation id="7514722502805496245">Consente il download in background delle pagine se la pagina non è stata ancora caricata nella scheda corrente.</translation>
<translation id="751507702149411736">Bielorusso</translation>
-<translation id="7517569744831774757">Ripristina le impostazioni con i valori originali predefiniti.</translation>
+<translation id="7517569744831774757">Ripristina le impostazioni predefinite originali.</translation>
<translation id="7517786267097410259">Crea una password -</translation>
<translation id="7518150891539970662">Log WebRTC (<ph name="WEBRTC_LOG_COUNT" />)</translation>
<translation id="7518657099163789435">Per poter utilizzare "Ok Google" è necessario attivare l'Attività vocale e audio</translation>
@@ -5604,7 +5604,7 @@ Conserva il file di chiave in un luogo sicuro. Ti servirà per creare nuove vers
<translation id="8487700953926739672">Disponibile offline</translation>
<translation id="8490896350101740396">Le seguenti app kiosk "<ph name="UPDATED_APPS" />" sono state aggiornate. Riavvia il dispositivo per completare la procedura di aggiornamento.</translation>
<translation id="8493236660459102203">Microfono:</translation>
-<translation id="8495193314787127784">Attiva "OK Google"</translation>
+<translation id="8495193314787127784">Attiva "Ok Google"</translation>
<translation id="8496717697661868878">Esegui questo plug-in</translation>
<translation id="8497392509610708671">Puoi modificare questa impostazione in qualsiasi momento nelle <ph name="BEGIN_LINK" />Impostazioni Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Aggiungi dispositivo Bluetooth</translation>
@@ -5653,7 +5653,7 @@ Conserva il file di chiave in un luogo sicuro. Ti servirà per creare nuove vers
<translation id="8565650234829130278">Hai tentato di eseguire il downgrade dell'applicazione.</translation>
<translation id="8569682776816196752">Nessuna destinazione trovata</translation>
<translation id="8569764466147087991">Seleziona un file da aprire</translation>
-<translation id="8571032220281885258">Quando pronunci "OK Google", Chrome cercherà le parole che pronunci subito dopo.</translation>
+<translation id="8571032220281885258">Quando dici "Ok Google", Chrome cercherà le parole che dici subito dopo.</translation>
<translation id="8571108619753148184">Server 4</translation>
<translation id="8574234089711453001">Consenti la visualizzazione di un pulsante Scarica all'apertura di una pagina con URL file multimediale.</translation>
<translation id="857779305329188634">Consente di attivare il supporto del protocollo sperimentale QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_iw.xtb b/chromium/chrome/app/resources/generated_resources_iw.xtb
index 615cdc8610e..d1ba7c8f8a9 100644
--- a/chromium/chrome/app/resources/generated_resources_iw.xtb
+++ b/chromium/chrome/app/resources/generated_resources_iw.xtb
@@ -1471,7 +1471,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="2890678560483811744">התייחסות לדף מחוץ לטווח</translation>
<translation id="2893168226686371498">דפדפן ברירת מחדל</translation>
<translation id="289426338439836048">רשת אחרת לנייד...</translation>
-<translation id="2894745200702272315">‏מאפשר גרסה ניסיונית של תכונות זיהוי מילות הפעלה ב-Ok Google בהתאם לחומרה.</translation>
+<translation id="2894745200702272315">‏מאפשר גרסה ניסיונית של תכונות זיהוי מילות הפעלה ב-"Ok Google" בהתאם לחומרה.</translation>
<translation id="289644616180464099">‏כרטיס ה-SIM נעול</translation>
<translation id="289695669188700754">מזהה מפתח: <ph name="KEY_ID" /></translation>
<translation id="2897878306272793870">האם אתה בטוח שברצונך לפתוח כרטיסיות <ph name="TAB_COUNT" />?</translation>
@@ -1531,7 +1531,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="2964193600955408481">‏השבת Wi-Fi</translation>
<translation id="2966449113954629791">ייתכן שהשתמשת בכל מכסת הנתונים לנייד שלך. בקר בפורטל ההפעלה של <ph name="NAME" /> לרכישת נתונים נוספים.</translation>
<translation id="2966459079597787514">מקלדת שוודית</translation>
-<translation id="2966598748518102999">‏שפר את החיפוש הקולי על ידי שליחת הצליל "Ok Google," והקלטה של מספר שניות לפני כן, אל Google.</translation>
+<translation id="2966598748518102999">‏שפר את החיפוש הקולי על ידי שליחת הצליל "Ok Google" והקלטה של מספר שניות לפני כן, אל Google.</translation>
<translation id="2967544384642772068">חסל</translation>
<translation id="2971033837577180453">‏&lt;span&gt;מזהה:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">הפחתת בהירות</translation>
@@ -1754,7 +1754,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="3251759466064201842">&lt;לא חלק מהאישור&gt;</translation>
<translation id="3252266817569339921">צרפתית</translation>
<translation id="3254434849914415189">בחר את יישום ברירת המחדל עבור קובצי <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">‏חפש, או אמור "Ok, Google"</translation>
+<translation id="3255228561559750854">‏חפש, או אמור "Ok Google"</translation>
<translation id="3257011895468050906">‏אפשר תמיכת Token Binding.</translation>
<translation id="3260892921936048802">&amp;הורד...</translation>
<translation id="326356299252142602">‏שימוש ב-Windows Runtime MIDI API</translation>
@@ -3917,7 +3917,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="6165508094623778733">למידע נוסף</translation>
<translation id="6166185671393271715">‏ייבוא סיסמאות אל Chrome</translation>
<translation id="6169666352732958425">לא ניתן להעביר מהמחשב השולחני.</translation>
-<translation id="6171550060231646388">‏הדמיית תכונות החומרה של Ok Google</translation>
+<translation id="6171550060231646388">‏הדמיית תכונות החומרה של "Ok Google"</translation>
<translation id="6171948306033499786">השהה הדפסה</translation>
<translation id="6175314957787328458">Microsoft Domain GUID</translation>
<translation id="6178664161104547336">בחר אישור</translation>
@@ -5654,7 +5654,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="8565650234829130278">בוצע ניסיון לשדרג יישום לאחור.</translation>
<translation id="8569682776816196752">לא נמצאו יעדים</translation>
<translation id="8569764466147087991">בחר קובץ לפתיחה</translation>
-<translation id="8571032220281885258">‏כשתאמר "Ok Google," דפדפן Chrome יחפש את מה שתאמר לאחר מכן.</translation>
+<translation id="8571032220281885258">‏כשתאמר ",Ok Google" דפדפן Chrome יחפש את מה שתאמר לאחר מכן.</translation>
<translation id="8571108619753148184">שרת 4</translation>
<translation id="8574234089711453001">התר הצגה של לחצן הורדה בפתיחת דף עם כתובת אתר של מדיה.</translation>
<translation id="857779305329188634">‏הפעל תמיכה בפרוטוקול QUIC ניסיוני.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ja.xtb b/chromium/chrome/app/resources/generated_resources_ja.xtb
index 5be38623be9..a6648d48fda 100644
--- a/chromium/chrome/app/resources/generated_resources_ja.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ja.xtb
@@ -736,7 +736,7 @@
<translation id="1934636348456381428">試験運用版オーバーレイ スクロールバーの実装を有効にします。スクロールバーをアニメーション化するにはスレッド合成も有効にする必要があります。</translation>
<translation id="1936157145127842922">フォルダで表示</translation>
<translation id="1936717151811561466">フィンランド語</translation>
-<translation id="1937256809970138538">画面がオンでロック解除された状態で「OK Google」と話します</translation>
+<translation id="1937256809970138538">画面がオンでロック解除された状態で「OK Google」と言います</translation>
<translation id="1942765061641586207">画像解像度</translation>
<translation id="1944921356641260203">アップデートが見つかりました</translation>
<translation id="1947424002851288782">ドイツ語のキーボード</translation>
@@ -1117,7 +1117,7 @@
<translation id="2470702053775288986">サポートされていない拡張機能が無効</translation>
<translation id="2473195200299095979">このページを翻訳</translation>
<translation id="2475982808118771221">エラーが発生しました</translation>
-<translation id="2476578072172137802">サイト設定</translation>
+<translation id="2476578072172137802">サイトの設定</translation>
<translation id="247772113373397749">カナダ多言語キーボード</translation>
<translation id="2478176599153288112">「<ph name="EXTENSION" />」のメディアファイル権限</translation>
<translation id="2478830106132467213">手の届く範囲にスマートフォンがある場合のみ、この <ph name="DEVICE_TYPE" /> のロックを解除します。</translation>
@@ -1705,7 +1705,7 @@
<translation id="3162559335345991374">ご利用の Wi-Fi ネットワークでは、ログインページへのアクセスが必要な可能性があります。</translation>
<translation id="316307797510303346">このユーザーが <ph name="CUSTODIAN_EMAIL" /> からアクセスするウェブサイトを制御、閲覧する。
アカウントのログイン情報が古くなっています。</translation>
-<translation id="3166571619128686629">クリックするか「OK Google」と発声して、音声検索を開始します</translation>
+<translation id="3166571619128686629">クリックするか「OK Google」と言って、音声検索を開始します</translation>
<translation id="3170072451822350649">ログインせずに<ph name="LINK_START" />ゲストとしてブラウジング<ph name="LINK_END" />することもできます。</translation>
<translation id="3170544058711792988">拡大鏡のフォーカスを画面中央に固定</translation>
<translation id="317583078218509884">サイトの新しい権限設定はページの再読み込み後に有効になります。</translation>
@@ -1761,7 +1761,7 @@
<translation id="3251759466064201842">&lt;証明書に含まれていません&gt;</translation>
<translation id="3252266817569339921">フランス語</translation>
<translation id="3254434849914415189"><ph name="FILE_TYPE" /> ファイルのデフォルト アプリを選択:</translation>
-<translation id="3255228561559750854">検索するかOK Googleと発声</translation>
+<translation id="3255228561559750854">検索するか OK Google と発声</translation>
<translation id="3257011895468050906">Token Binding のサポートを有効にする。</translation>
<translation id="3260892921936048802">ダウンロード(&amp;D)...</translation>
<translation id="326356299252142602">Windows Runtime MIDI API を使用する</translation>
@@ -2697,7 +2697,7 @@
<translation id="4533259260976001693">折りたたむ/展開する</translation>
<translation id="4533985347672295764">CPU 時間</translation>
<translation id="4534166495582787863">タッチパッドの 3 本指タップをミドル ボタン(ホイール クリック)として認識する機能を有効にします。</translation>
-<translation id="4534799089889278411">新しいタブ、google.co.jp、アプリ ランチャーで「OK Google」と発声します。</translation>
+<translation id="4534799089889278411">新しいタブ、google.co.jp、アプリ ランチャーで「OK Google」と言います。</translation>
<translation id="4535127706710932914">デフォルトのプロフィール</translation>
<translation id="4538417792467843292">1 語削除する</translation>
<translation id="4538684596480161368"><ph name="HOST" /> でサンドボックスの無効化プラグインを常にブロックする</translation>
@@ -2881,7 +2881,7 @@
<translation id="4791148004876134991">Chrome アプリがアクティブになったときに Cmd+` の動作を変更します。有効な場合、ブラウザ ウィンドウから Cmd+` を押したときに Chrome アプリは切り替えられず、Chrome アプリがアクティブなときにブラウザ ウィンドウは切り替えられません。</translation>
<translation id="4792711294155034829">問題の報告(&amp;R)...</translation>
<translation id="479280082949089240">このページで設定した Cookie</translation>
-<translation id="4793866834012505469">音声モデルを再トレーニング</translation>
+<translation id="4793866834012505469">音声モデルを再認識</translation>
<translation id="479536056609751218">ウェブページ、HTML のみ</translation>
<translation id="479989351350248267">検索</translation>
<translation id="480036413855787547">どの端末からでも <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> でパスワードにアクセスできます。Mac では、パスワードをキーチェーンに保存して、この OS X アカウントを共有する別の Chrome ユーザーがアクセスしたり同期したりできます。</translation>
@@ -3236,7 +3236,7 @@
<translation id="5249624017678798539">ダウンロードの完了前にブラウザで問題が発生しました。</translation>
<translation id="5252456968953390977">ローミング</translation>
<translation id="5252653240322147470">PIN は <ph name="MAXIMUM" /> 桁未満で指定してください</translation>
-<translation id="5253753933804516447">画面がオンでロック解除された状態のときに、「OK Google」と話して音声検索ができるようにします</translation>
+<translation id="5253753933804516447">画面がオンでロック解除された状態のときに、「OK Google」と言って音声検索ができるようにします</translation>
<translation id="52550593576409946">キオスク アプリケーションを起動できませんでした。</translation>
<translation id="5255315797444241226">入力したパスフレーズが正しくありません。</translation>
<translation id="5260508466980570042">メールまたはパスワードを確認できませんでした。もう一度お試しください。</translation>
@@ -3812,7 +3812,7 @@
<translation id="6011449291337289699">サイトデータの削除</translation>
<translation id="6015796118275082299">年</translation>
<translation id="6016551720757758985">Powerwash を実行して以前のバージョンに戻すことを確認</translation>
-<translation id="6016809788585079594">最後にもう一度「OK Google」とお話しください</translation>
+<translation id="6016809788585079594">最後にもう一度「OK Google」と言ってください</translation>
<translation id="6016972670657536680">言語とキーボードのボタンを選択します。現在選択している言語は <ph name="LANGUAGE" /> です。</translation>
<translation id="6017225534417889107">変更...</translation>
<translation id="6017981840202692187">アプリケーションに追加</translation>
@@ -3880,7 +3880,7 @@
<translation id="6105158702728922449">カメラとマイクを使用する</translation>
<translation id="6105877918873366097">最終アクセス日</translation>
<translation id="6107012941649240045">発行先</translation>
-<translation id="6107079717483424262">「OK Google」と話したときにユーザーの声が認識されるようになりました</translation>
+<translation id="6107079717483424262">「OK Google」と言ったときにユーザーの声が認識されるようになりました</translation>
<translation id="6109228527970300988">IME メニューで絵文字、手書き、音声による入力を選択できるようにする</translation>
<translation id="6111770213269631447">文字変換(namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">ユーザー(<ph name="PROFILE_NAME" />、<ph name="USERNAME" />)を編集</translation>
@@ -4551,7 +4551,7 @@
<translation id="7012372675181957985">Google アカウントでの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります</translation>
<translation id="7013485839273047434">他の拡張機能を見る</translation>
<translation id="7014174261166285193">インストールできませんでした。</translation>
-<translation id="7017004637493394352">もう一度「OK Google」とお話しください</translation>
+<translation id="7017004637493394352">もう一度「OK Google」と言ってください</translation>
<translation id="7017219178341817193">新しいページを追加</translation>
<translation id="7017354871202642555">ウィンドウが設定されている場合はモードを設定できません。</translation>
<translation id="7017480957358237747">特定のウェブサイトへのアクセスを許可または禁止する</translation>
@@ -4708,7 +4708,7 @@
<translation id="7238585580608191973">SHA-256 指紋</translation>
<translation id="7240120331469437312">証明書のサブジェクトの代替名</translation>
<translation id="7241389281993241388">クライアント証明書をインポートするには <ph name="TOKEN_NAME" /> にログインしてください。</translation>
-<translation id="7243055093079293866">新しいタブで google.com を開き、「OK Google」と発声します</translation>
+<translation id="7243055093079293866">新しいタブで google.com を開き、「OK Google」と言います</translation>
<translation id="7243632151880336635">削除してログアウト</translation>
<translation id="7245628041916450754"><ph name="WIDTH" />x<ph name="HEIGHT" />(最適)</translation>
<translation id="7246947237293279874">FTP プロキシ</translation>
@@ -4789,7 +4789,7 @@
<translation id="7361824946268431273">速く、シンプルで、安全なパソコン</translation>
<translation id="7364796246159120393">ファイルを選択</translation>
<translation id="736515969993332243">ネットワークをスキャンしています。</translation>
-<translation id="7366762109661450129">画面がオンでロック解除されている状態で、「OK Google」と発声します。</translation>
+<translation id="7366762109661450129">画面がオンでロック解除されている状態で、「OK Google」と言います。</translation>
<translation id="7366909168761621528">閲覧履歴データ</translation>
<translation id="7369521049655330548">このページの次のプラグインがブロックされました。</translation>
<translation id="7371490661692457119">デフォルトのタイル幅</translation>
@@ -4918,7 +4918,7 @@
<translation id="7518657099163789435">「OK Google」を使用するには音声アクティビティを有効にする必要があります</translation>
<translation id="7520821146909122639">このページを翻訳しています...</translation>
<translation id="7521387064766892559">Javascript</translation>
-<translation id="7522255036471229694">「OK Google」とお話しください</translation>
+<translation id="7522255036471229694">「OK Google」と言ってください</translation>
<translation id="7525067979554623046">作成</translation>
<translation id="7529471622666797993"><ph name="BEGIN_LINK" />フォントの詳細設定<ph name="END_LINK" />(拡張機能が必要です)</translation>
<translation id="7530016656428373557">放電率(ワット)</translation>
@@ -5315,7 +5315,7 @@
<translation id="806812017500012252">タイトルで並べ替え</translation>
<translation id="8069615408251337349">Google クラウド プリント</translation>
<translation id="8071432093239591881">画像として印刷する</translation>
-<translation id="8071942001314758122">「OK Google」と 3 回話すだけです</translation>
+<translation id="8071942001314758122">「OK Google」と 3 回言うだけです</translation>
<translation id="8072988827236813198">複数のタブを固定</translation>
<translation id="8074127646604999664">最近閉じたサイトがデータの送受信を完了できるようにする</translation>
<translation id="8075191520954018715">メモリの状態</translation>
@@ -5672,7 +5672,7 @@
<translation id="8565650234829130278">アプリのダウングレードが試行されました。</translation>
<translation id="8569682776816196752">送信先が見つかりません</translation>
<translation id="8569764466147087991">ファイルを選択して開く</translation>
-<translation id="8571032220281885258">「OK Google」と話しかけると、その後に話す内容が Chrome で検索されます。</translation>
+<translation id="8571032220281885258">「OK Google」と言うと、その後に話す内容が Chrome で検索されます。</translation>
<translation id="8571108619753148184">サーバー 4</translation>
<translation id="8574234089711453001">メディア URL のページを開くときにダウンロード ボタンが表示されるようにします。</translation>
<translation id="857779305329188634">QUIC プロトコルのサポート(試験運用中)を有効にします。</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_kn.xtb b/chromium/chrome/app/resources/generated_resources_kn.xtb
index 32a4182c38f..be1f9fb214b 100644
--- a/chromium/chrome/app/resources/generated_resources_kn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_kn.xtb
@@ -1537,7 +1537,7 @@
<translation id="2964193600955408481">ವೈ-ಫೈ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation>
<translation id="2966449113954629791">ನಿಮ್ಮ ಮೊಬೈಲ್ ಡೇಟಾ ಭತ್ಯೆಯನ್ನು ನೀವು ಬಳಸಿರಬಹುದು. ಹೆಚ್ಚಿನ ಡೇಟಾವನ್ನು ಖರೀದಿಸಲು <ph name="NAME" /> ಸಕ್ರಿಯೀಕರಣ ಪೋರ್ಟಲ್‌ಗೆ ಭೇಟಿ ನೀಡಿ.</translation>
<translation id="2966459079597787514">ಸ್ವೀಡಿಶ್ ಕೀಬೋರ್ಡ್</translation>
-<translation id="2966598748518102999">Google ಗೆ "ಸರಿ Google" ಎಂಬ ಶಬ್ದ ಕಳುಹಿಸಿ, ಆ ಮೂಲಕ ಕೆಲವು ನಿಮಿಷಗಳ ನಂತರ ಧ್ವನಿ ಹುಡುಕಾಟವನ್ನು ಸುಧಾರಿಸಿ.</translation>
+<translation id="2966598748518102999">Google ಗೆ "Ok Google," ಎಂಬ ಶಬ್ದ ಕಳುಹಿಸಿ. ಆ ಮೂಲಕ ಕೆಲವು ನಿಮಿಷಗಳ ನಂತರ ಧ್ವನಿ ಹುಡುಕಾಟವನ್ನು ಸುಧಾರಿಸಿ.</translation>
<translation id="2967544384642772068">ಸ್ಥಗಿತಗೊಳಿಸು</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">ಪ್ರಖರತೆ ಕಡಿಮೆ ಮಾಡಿ</translation>
@@ -2206,7 +2206,7 @@
<translation id="3812525830114410218">ತಪ್ಪು ಪ್ರಮಾಣಪತ್ರ</translation>
<translation id="3812568885510197014">ಸ್ವಯಂತುಂಬುವಿಕೆಯ ಸಹಿಗಳನ್ನು HTML ಆಟ್ರಿಬ್ಯೂಟ್‌ಗಳಂತೆ ವೆಬ್‌ ಫಾರ್ಮ್‌ಗಳನ್ನು ಟಿಪ್ಪಣಿಮಾಡುತ್ತದೆ.</translation>
<translation id="3813296892522778813">ನೀವು ಹುಡುಕುತ್ತಿರುವುದು ದೊರೆಯದೇ ಇದ್ದರೆ <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome ಸಹಾಯ<ph name="END_LINK_CHROMIUM" />ಕ್ಕೆ ಹೋಗಿ</translation>
-<translation id="3813984289128269159">ಸರಿ Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">ಝುಯಿನ್ ಇನ್‌ಪುಟ್ ವಿಧಾನ</translation>
<translation id="3815571115159309122"><ph name="FILE_COUNT" /> ಹೊಸ ಫೋಟೋಗಳು ಕಂಡುಬಂದಿವೆ
<ph name="LINE_BREAK1" />
@@ -5675,7 +5675,7 @@
<translation id="8565650234829130278">ಅಪ್ಲಿಕೇಶನ್ ಕೆಳಮಟ್ಟಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗಿದೆ.</translation>
<translation id="8569682776816196752">ಯಾವುದೇ ಗಮ್ಯಸ್ಥಾನಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation>
<translation id="8569764466147087991">ತೆರೆಯಲು ಫೈಲ್‌ವೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation>
-<translation id="8571032220281885258">ನೀವು "ಸರಿ Google" ಎಂದು ಹೇಳಿದಾಗ, ನೀವು ನಂತರ ಹೇಳಬಹುದಾದ್ದನ್ನು Chrome ಹುಡುಕುತ್ತದೆ.</translation>
+<translation id="8571032220281885258">ನೀವು "Ok Google" ಎಂದು ಹೇಳಿದರೆ ಸಾಕು, ಮುಂದೆ ನೀವು ಹೇಳುವುದನ್ನು Chrome ತಾನಾಗಿಯೇ ಹುಡುಕಿಕೊಳ್ಳುತ್ತದೆ.</translation>
<translation id="8571108619753148184">ಸರ್ವರ್ 4</translation>
<translation id="8574234089711453001">ಮಾಧ್ಯಮ url ಜೊತೆಗೆ ಪುಟ ತೆರೆಯುವಾಗ ಡೌನ್‌ಲೋಡ್ ಬಟನ್ ಕಾಣಿಸಿಕೊಳ್ಳಲು ಅನುಮತಿಸಿ.</translation>
<translation id="857779305329188634">ಪ್ರಾಯೋಗಿಕ QUIC ಪ್ರೋಟೋಕಾಲ್ ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ko.xtb b/chromium/chrome/app/resources/generated_resources_ko.xtb
index ed18c8a4af9..2fcca1e5456 100644
--- a/chromium/chrome/app/resources/generated_resources_ko.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ko.xtb
@@ -1199,7 +1199,7 @@
<translation id="2565670301826831948">터치패드 속도:</translation>
<translation id="2566124945717127842">Powerwash는 <ph name="IDS_SHORT_PRODUCT_NAME" /> 기기를 재설정하여 새것처럼 만듭니다.</translation>
<translation id="2568774940984945469">정보 표시줄 컨테이너</translation>
-<translation id="2570000010887652771">데이터가 저장되었습니다.</translation>
+<translation id="2570000010887652771">데이터를 절약했습니다.</translation>
<translation id="2570648609346224037">복구 이미지를 다운로드하는 중에 문제가 발생했습니다.</translation>
<translation id="257088987046510401">테마</translation>
<translation id="2572032849266859634"><ph name="VOLUME_NAME" />에 대한 읽기 전용 액세스가 허용되었습니다.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_mr.xtb b/chromium/chrome/app/resources/generated_resources_mr.xtb
index b0abc458f19..eca6cd8a6d7 100644
--- a/chromium/chrome/app/resources/generated_resources_mr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_mr.xtb
@@ -1755,7 +1755,7 @@
<translation id="3251759466064201842">&lt;प्रमाणपत्राचा भाग नाही&gt;</translation>
<translation id="3252266817569339921">फ्रेंच</translation>
<translation id="3254434849914415189"><ph name="FILE_TYPE" /> फायलींसाठी डीफॉल्ट अनुप्रयोग निवडा:</translation>
-<translation id="3255228561559750854">शोधा किंवा "ओके, Google" म्हणा</translation>
+<translation id="3255228561559750854">शोधा किंवा "Ok Google" म्हणा</translation>
<translation id="3257011895468050906">Token Binding समर्थन सक्षम करा.</translation>
<translation id="3260892921936048802">&amp;डाउनलोड करा...</translation>
<translation id="326356299252142602">Windows Runtime MIDI API वापरा</translation>
@@ -5610,7 +5610,7 @@
<translation id="8487700953926739672">ऑफलाइन उपलब्ध</translation>
<translation id="8490896350101740396">खालील कियोस्क अॅप्स "<ph name="UPDATED_APPS" />" अद्यतनित करण्यात आले आहेत. कृपया अद्यतन प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation>
<translation id="8493236660459102203">मायक्रोफोन:</translation>
-<translation id="8495193314787127784">"ओके Google" सक्षम करा</translation>
+<translation id="8495193314787127784">"Ok Google" सक्षम करा</translation>
<translation id="8496717697661868878">हे प्लगइन चालवा</translation>
<translation id="8497392509610708671">आपण हे <ph name="BEGIN_LINK" />Chrome सेटिंग्ज<ph name="END_LINK" /> मध्ये कधीही बदलू शकता.</translation>
<translation id="8498716162437226120">Bluetooth डिव्हाइस जोडा</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_nl.xtb b/chromium/chrome/app/resources/generated_resources_nl.xtb
index 59e4333f848..9eea3662d39 100644
--- a/chromium/chrome/app/resources/generated_resources_nl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_nl.xtb
@@ -4911,7 +4911,7 @@ Gebruik deze functie alleen met accounts die je vertrouwt.</translation>
<translation id="7517569744831774757">Instellingen terugzetten naar de oorspronkelijke standaardwaarden.</translation>
<translation id="7517786267097410259">Een wachtwoord maken –</translation>
<translation id="7518150891539970662">WebRTC-logboeken (<ph name="WEBRTC_LOG_COUNT" />)</translation>
-<translation id="7518657099163789435">Spraak- en audioactiviteit moet worden ingeschakeld om "Ok Google te gebruiken"</translation>
+<translation id="7518657099163789435">Spraak- en audioactiviteit moet worden ingeschakeld om "Ok Google" te gebruiken</translation>
<translation id="7520821146909122639">Deze pagina wordt vertaald…</translation>
<translation id="7521387064766892559">JavaScript</translation>
<translation id="7522255036471229694">Zeg "Ok Google"</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_pl.xtb b/chromium/chrome/app/resources/generated_resources_pl.xtb
index 398d1dd2eb1..671a8d1ce08 100644
--- a/chromium/chrome/app/resources/generated_resources_pl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pl.xtb
@@ -220,7 +220,7 @@
<translation id="1313405956111467313">Automatyczna konfiguracja serwera proxy</translation>
<translation id="131364520783682672">Caps Lock</translation>
<translation id="1313705515580255288">Zakładki, historia i ustawienia są synchronizowane z Twoim kontem Google.</translation>
-<translation id="1313832887664610176">Połączenie z Chromeboksem zostało utracone</translation>
+<translation id="1313832887664610176">Połączenie z Chromeboxem zostało utracone</translation>
<translation id="131461803491198646">Sieć macierzysta, nie w roamingu</translation>
<translation id="1316136264406804862">Trwa wyszukiwanie...</translation>
<translation id="1317502925920562130">Czy to oczekiwana strona startowa?</translation>
@@ -1574,7 +1574,7 @@ Ta strona nie powinna być zablokowana.</translation>
<translation id="3012917896646559015">Jak najszybciej skontaktuj się z producentem sprzętu, aby wysłać komputer do serwisu.</translation>
<translation id="3013291976881901233">Urządzenia MIDI</translation>
<translation id="3014095112974898292">Oczekuję na ukończenie innych żądań…</translation>
-<translation id="3015992588037997514">Widzisz ten kod na ekranie Chromeboksa?</translation>
+<translation id="3015992588037997514">Widzisz ten kod na ekranie Chromeboxa?</translation>
<translation id="3016641847947582299">Składnik został zaktualizowany</translation>
<translation id="3016780570757425217">Sprawdzać Twoją lokalizację</translation>
<translation id="3018346972744622514">Dodaj inną sieć komórkową</translation>
@@ -1765,7 +1765,7 @@ Dalsze instrukcje znajdziesz w e-mailu przesłanym na adres <ph name="ACCOUNT_EM
<translation id="3260892921936048802">&amp;Pobierz…</translation>
<translation id="326356299252142602">Używaj interfejsu Windows Runtime MIDI API</translation>
<translation id="3264544094376351444">Czcionka bezszeryfowa</translation>
-<translation id="3264547943200567728">Nie udało się skonfigurować sieci Chromeboksa</translation>
+<translation id="3264547943200567728">Nie udało się skonfigurować sieci na Chromeboxie</translation>
<translation id="3265459715026181080">Zamknij okno</translation>
<translation id="3267726687589094446">Dalej zezwalaj na automatyczne pobieranie wielu plików</translation>
<translation id="3267998849713137817">Czas modyfikacji</translation>
@@ -2235,7 +2235,7 @@ Dalsze instrukcje znajdziesz w e-mailu przesłanym na adres <ph name="ACCOUNT_EM
<translation id="383652340667548381">Serbski</translation>
<translation id="3838486795898716504">Więcej o <ph name="PAGE_TITLE" /></translation>
<translation id="3838543471119263078">Pliki cookie oraz inne dane stron i wtyczek</translation>
-<translation id="3840053866656739575">Połączenie z Chromeboksem zostało utracone. Przysuń się bliżej lub sprawdź urządzenie – spróbujemy połączyć się ponownie.</translation>
+<translation id="3840053866656739575">Połączenie z Chromeboxem zostało utracone. Przysuń się bliżej lub sprawdź urządzenie – spróbujemy połączyć się ponownie.</translation>
<translation id="3840055807562919428">Nie pozwala na pobieranie skryptów firm zewnętrznych do blokowania parserów umieszczonych w głównej ramce przez instrukcję document.write.</translation>
<translation id="3842552989725514455">Czcionka szeryfowa</translation>
<translation id="3846593650622216128">Te ustawienia są wymuszone przez rozszerzenie.</translation>
@@ -2480,7 +2480,7 @@ Aby kontynuować, wszyscy użytkownicy muszą się wylogować.</translation>
<translation id="4195643157523330669">Otwórz w nowej karcie</translation>
<translation id="4195814663415092787">Kontynuuj tam, gdzie skończyłem</translation>
<translation id="4197674956721858839">Spakuj wybrane do pliku ZIP</translation>
-<translation id="4200689466366162458">Własne słowa</translation>
+<translation id="4200689466366162458">Słowa niestandardowe</translation>
<translation id="4200983522494130825">Nowa &amp;karta</translation>
<translation id="4206144641569145248">Kosmita</translation>
<translation id="4206323443866416204">Przesyłanie opinii</translation>
@@ -2953,7 +2953,7 @@ Naciśnij dowolny klawisz, by kontynuować przeglądanie.</translation>
<translation id="4874539263382920044">Tytuł musi zawierać co najmniej jeden znak</translation>
<translation id="4875622588773761625">Czy <ph name="PASSWORD_MANAGER_BRAND" /> ma zaktualizować hasło do tej strony?</translation>
<translation id="4876895919560854374">Blokowanie i odblokowywanie ekranu</translation>
-<translation id="4877017884043316611">Sparuj z Chromeboksem</translation>
+<translation id="4877017884043316611">Sparuj z Chromeboxem</translation>
<translation id="4880214202172289027">Suwak głośności</translation>
<translation id="4880328057631981605">Nazwa punktu dostępu</translation>
<translation id="4880520557730313061">Autokorekta</translation>
@@ -4673,7 +4673,7 @@ Używaj jej tylko w przypadku kont, którym ufasz.</translation>
<translation id="7191454237977785534">Zapisz plik jako</translation>
<translation id="7193047015510747410">Autouzupełnianie danych uwierzytelniających synchronizacji</translation>
<translation id="7195103043027893114">Animacja podczas rozruchu</translation>
-<translation id="7196835305346730603">Szukam Chromeboksów w pobliżu...</translation>
+<translation id="7196835305346730603">Szukam Chromeboxów w pobliżu...</translation>
<translation id="7198197644913728186">Bluetooth jest wyłączony na urządzeniu <ph name="DEVICE_TYPE" />. Wpisz hasło, by je odblokować, a następnie włącz Bluetooth.</translation>
<translation id="7199158086730159431">Uzyskaj p&amp;omoc</translation>
<translation id="7201354769043018523">Prawy nawias</translation>
@@ -5219,7 +5219,7 @@ Używaj jej tylko w przypadku kont, którym ufasz.</translation>
<translation id="7974566588408714340">Ponów za pomocą rozszerzenia <ph name="EXTENSIONNAME" /></translation>
<translation id="7974936243149753750">Nadmiarowość obrazu</translation>
<translation id="797610151583999923">Włącz mus, mash itp.</translation>
-<translation id="7977551819349545646">Aktualizuję Chromeboksa...</translation>
+<translation id="7977551819349545646">Aktualizuję Chromeboxa...</translation>
<translation id="7978412674231730200">Klucz prywatny</translation>
<translation id="7979036127916589816">Błąd synchronizacji</translation>
<translation id="7980084013673500153">Identyfikator zasobu: <ph name="ASSET_ID" /></translation>
@@ -5354,7 +5354,7 @@ Przechowuj plik klucza w bezpiecznym miejscu. Będzie on potrzebny do utworzenia
<translation id="8141725884565838206">Zarządzaj hasłami</translation>
<translation id="8142699993796781067">Sieć prywatna</translation>
<translation id="8142732521333266922">OK, synchronizuj wszystko</translation>
-<translation id="8144022414479088182">Na pewno chcesz skonfigurować to urządzenie jako Chromeboksa wideokonferencje?</translation>
+<translation id="8144022414479088182">Na pewno chcesz skonfigurować to urządzenie jako Chromeboxa wideokonferencje?</translation>
<translation id="8145409227593688472">Metoda wprowadzania Wubi</translation>
<translation id="8146177459103116374">Jeśli zarejestrowałeś się już na tym urządzeniu, możesz <ph name="LINK2_START" />zalogować się jako istniejący użytkownik<ph name="LINK2_END" />.</translation>
<translation id="8146793085009540321">Nie udało się zalogować. Skontaktuj się z administratorem lub spróbuj ponownie.</translation>
@@ -5804,7 +5804,7 @@ Przechowuj plik klucza w bezpiecznym miejscu. Będzie on potrzebny do utworzenia
<translation id="8755376271068075440">&amp;Większy</translation>
<translation id="8757090071857742562">Nie udało się przesłać pulpitu. Sprawdź, czy potwierdzono prośbę o rozpoczęcie udostępniania ekranu.</translation>
<translation id="8757640015637159332">Rozpocznij sesję publiczną</translation>
-<translation id="8757742102600829832">Wybierz Chromeboksa, z którym chcesz się połączyć</translation>
+<translation id="8757742102600829832">Wybierz Chromeboxa, z którym chcesz się połączyć</translation>
<translation id="8757803915342932642">Urządzenie w chmurze Google</translation>
<translation id="8758895886513993540">Ta flaga określa, czy użytkownicy mogą wybrać kartę przy udostępnianiu pulpitu.</translation>
<translation id="8759408218731716181">Nie można skonfigurować wielokrotnego logowania</translation>
@@ -6026,7 +6026,7 @@ Kolejne powiadomienia, okna i okna dialogowe mogą być dzielone między pulpita
<translation id="9050666287014529139">Hasło</translation>
<translation id="9052208328806230490">Zarejestrowano drukarki w usłudze <ph name="CLOUD_PRINT_NAME" /> przy użyciu konta <ph name="EMAIL" /></translation>
<translation id="9052234664411715138">Pomoc przy wypełnianiu danych karty kredytowej</translation>
-<translation id="9056034633062863292">Aktualizuję Chromeboksa</translation>
+<translation id="9056034633062863292">Aktualizuję Chromeboxa</translation>
<translation id="9056810968620647706">Nie znaleziono żadnych dopasowań.</translation>
<translation id="9057119625587205566">Brak drukarek w pobliżu</translation>
<translation id="9059868303873565140">Menu stanu</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
index 37c0cea704d..bd698d10721 100644
--- a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1538,7 +1538,7 @@ Pretende pará-lo?</translation>
<translation id="2964193600955408481">Desativar Wi-Fi</translation>
<translation id="2966449113954629791">Poderá ter atingido o limite de utilização dos dados móveis. Visite o portal de ativação <ph name="NAME" /> para comprar mais dados.</translation>
<translation id="2966459079597787514">Teclado sueco</translation>
-<translation id="2966598748518102999">Melhore a pesquisa por voz através do envio do som de "OK Google" precedido por alguns segundos para o Google.</translation>
+<translation id="2966598748518102999">Melhore a pesquisa por voz através do envio do som de "Ok Google" precedido por alguns segundos para o Google.</translation>
<translation id="2967544384642772068">Desativar</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">diminuir brilho</translation>
@@ -1762,7 +1762,7 @@ Verifique o seu email em <ph name="ACCOUNT_EMAIL" /> para obter estas e outras i
<translation id="3251759466064201842">&lt;Não faz parte do certificado&gt;</translation>
<translation id="3252266817569339921">Francês</translation>
<translation id="3254434849914415189">Escolha a aplicação predefinida para ficheiros <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Pesquise ou diga "OK Google"</translation>
+<translation id="3255228561559750854">Pesquise ou diga "Ok Google"</translation>
<translation id="3257011895468050906">Ativar suporte para Token Binding.</translation>
<translation id="3260892921936048802">&amp;Transferir...</translation>
<translation id="326356299252142602">Utilizar a API Windows Runtime MIDI</translation>
@@ -2209,7 +2209,7 @@ De <ph name="DOWNLOAD_DOMAIN" /></translation>
<translation id="3812525830114410218">Certificado incorreto</translation>
<translation id="3812568885510197014">Anota formulários Web com assinaturas de preenchimento automático como atributos HTML.</translation>
<translation id="3813296892522778813">Aceda à <ph name="BEGIN_LINK_CHROMIUM" />ajuda do Google Chrome<ph name="END_LINK_CHROMIUM" /> se não conseguir encontrar aquilo que procura.</translation>
-<translation id="3813984289128269159">OK Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">Método de introdução zhuyin</translation>
<translation id="3815571115159309122"><ph name="FILE_COUNT" /> novas fotos encontradas
<ph name="LINE_BREAK1" />
@@ -5622,7 +5622,7 @@ Mantenha o seu ficheiro de chave num local seguro, pois irá precisar dele para
<translation id="8487700953926739672">Disponível off-line</translation>
<translation id="8490896350101740396">As seguintes aplicações de quiosque "<ph name="UPDATED_APPS" />" foram atualizadas. Reinicie o dispositivo para concluir o processo de atualização.</translation>
<translation id="8493236660459102203">Microfone:</translation>
-<translation id="8495193314787127784">Ativar "OK Google"</translation>
+<translation id="8495193314787127784">Ativar "Ok Google"</translation>
<translation id="8496717697661868878">Executar este plug-in</translation>
<translation id="8497392509610708671">Pode alterar esta definição a qualquer momento nas <ph name="BEGIN_LINK" />Definições do Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Adicionar dispositivo Bluetooth</translation>
@@ -5671,7 +5671,7 @@ Mantenha o seu ficheiro de chave num local seguro, pois irá precisar dele para
<translation id="8565650234829130278">Tentativa de alterar a aplicação para a versão anterior</translation>
<translation id="8569682776816196752">Não foram encontrados destinos</translation>
<translation id="8569764466147087991">Selecione um ficheiro para abrir</translation>
-<translation id="8571032220281885258">Quando disser "OK Google", o Chrome pesquisará o que disser a seguir.</translation>
+<translation id="8571032220281885258">Quando disser "Ok Google", o Chrome pesquisará o que disser a seguir.</translation>
<translation id="8571108619753148184">Servidor 4</translation>
<translation id="8574234089711453001">Permitir a apresentação de um botão de transferência ao abrir uma página com um URL de multimédia.</translation>
<translation id="857779305329188634">Ativar suporte de protocolo QUIC experimental.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ro.xtb b/chromium/chrome/app/resources/generated_resources_ro.xtb
index b2560716db9..6f62f63dc39 100644
--- a/chromium/chrome/app/resources/generated_resources_ro.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ro.xtb
@@ -1704,7 +1704,7 @@ Pentru instrucțiuni suplimentare, verifică e-mailurile la adresa <ph name="ACC
<translation id="3162559335345991374">Rețeaua Wi-Fi pe care o folosești poate solicita accesarea paginii de conectare.</translation>
<translation id="316307797510303346">Controlează și vezi site-urile pe care această persoană le accesează din <ph name="CUSTODIAN_EMAIL" />.
Detaliile de conectare la cont sunt învechite.</translation>
-<translation id="3166571619128686629">Dă clic pe sau rostește „Ok, Google” pentru a începe căutarea vocală</translation>
+<translation id="3166571619128686629">Dă clic sau rostește „Ok Google” pentru a începe căutarea vocală</translation>
<translation id="3170072451822350649">De asemenea, puteți să omiteți conectarea și să <ph name="LINK_START" />navigați ca invitat<ph name="LINK_END" />.</translation>
<translation id="3170544058711792988">Menține focalizarea lupei în centrul ecranului</translation>
<translation id="317583078218509884">Setările noi pentru permisiuni legate de site-uri se vor aplica după ce reîncărcați pagina.</translation>
@@ -1760,7 +1760,7 @@ Pentru instrucțiuni suplimentare, verifică e-mailurile la adresa <ph name="ACC
<translation id="3251759466064201842">&lt;Nu face parte dintr-un certificat&gt;</translation>
<translation id="3252266817569339921">Franceză</translation>
<translation id="3254434849914415189">Alegeți aplicația prestabilită pentru fișierele <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Căutați sau rostiți „Ok Google”</translation>
+<translation id="3255228561559750854">Caută sau rostește „Ok Google”</translation>
<translation id="3257011895468050906">Activează compatibilitatea cu Token Binding.</translation>
<translation id="3260892921936048802">&amp;Descarcă…</translation>
<translation id="326356299252142602">Folosește API-ul Windows Runtime MIDI</translation>
@@ -2696,7 +2696,7 @@ Apăsați pe orice tastă pentru a continua explorarea.</translation>
<translation id="4533259260976001693">Restrângeți/Extindeți</translation>
<translation id="4533985347672295764">Timp CPU</translation>
<translation id="4534166495582787863">Activează clicul cu al treilea deget pe touchpad pentru butonul din mijloc.</translation>
-<translation id="4534799089889278411">Rostește „OK Google” într-o filă nouă, pe google.com și în Lansatorul de aplicații</translation>
+<translation id="4534799089889278411">Rostește „Ok Google” într-o filă nouă, pe google.com și în Lansatorul de aplicații</translation>
<translation id="4535127706710932914">Profil prestabilit</translation>
<translation id="4538417792467843292">Șterge cuvântul</translation>
<translation id="4538684596480161368">Blochează întotdeauna pluginurile scoase din mediul de testare pe <ph name="HOST" /></translation>
@@ -4786,7 +4786,7 @@ Folosește funcția numai pentru conturile în care ai încredere.</translation>
<translation id="7361824946268431273">Cel mai rapid, mai simplu și mai sigur computer</translation>
<translation id="7364796246159120393">Alege fișierul</translation>
<translation id="736515969993332243">Se scanează rețelele.</translation>
-<translation id="7366762109661450129">Rostește „OK Google” când ecranul este pornit și deblocat.</translation>
+<translation id="7366762109661450129">Rostește „Ok Google” când ecranul e pornit și deblocat.</translation>
<translation id="7366909168761621528">Date de navigare</translation>
<translation id="7369521049655330548">Următoarele pluginuri au fost blocate pe această pagină:</translation>
<translation id="7371490661692457119">Lățime prestabilită a panourilor</translation>
@@ -5618,7 +5618,7 @@ Păstrează fișierul cu cheia într-un loc sigur. Acesta va fi necesar la crear
<translation id="8487700953926739672">Disponibil offline</translation>
<translation id="8490896350101740396">Următoarele aplicații de tip chioșc „<ph name="UPDATED_APPS" />” au fost actualizate. Repornește dispozitivul pentru a finaliza procesul de actualizare.</translation>
<translation id="8493236660459102203">Microfon:</translation>
-<translation id="8495193314787127784">Activați „Ok Google”</translation>
+<translation id="8495193314787127784">Activează „Ok Google”</translation>
<translation id="8496717697661868878">Rulează acest plugin</translation>
<translation id="8497392509610708671">Poți schimba oricând setarea din <ph name="BEGIN_LINK" />Setările Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Adăugați un dispozitiv Bluetooth</translation>
@@ -5667,7 +5667,7 @@ Păstrează fișierul cu cheia într-un loc sigur. Acesta va fi necesar la crear
<translation id="8565650234829130278">S-a încercat trecerea aplicației la o versiune inferioară.</translation>
<translation id="8569682776816196752">Nu au fost găsite destinații</translation>
<translation id="8569764466147087991">Selectează un fișier pentru a-l deschide</translation>
-<translation id="8571032220281885258">Când rostiți „Ok Google”, Chrome va căuta ceea ce rostiți în continuare.</translation>
+<translation id="8571032220281885258">Când rostești „Ok Google”, Chrome va căuta ceea ce rostești în continuare.</translation>
<translation id="8571108619753148184">Server 4</translation>
<translation id="8574234089711453001">Permite afișarea unui buton de descărcare când deschizi o pagină cu o adresă URL media.</translation>
<translation id="857779305329188634">Activați compatibilitatea cu protocolul experimental QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ru.xtb b/chromium/chrome/app/resources/generated_resources_ru.xtb
index feef85490ea..0bc08ce5e0f 100644
--- a/chromium/chrome/app/resources/generated_resources_ru.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ru.xtb
@@ -5622,7 +5622,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="8487700953926739672">Доступно в автономном режиме</translation>
<translation id="8490896350101740396">Были обновлены следующие киоск-приложения: <ph name="UPDATED_APPS" />. Чтобы завершить установку обновлений, перезагрузите устройство.</translation>
<translation id="8493236660459102203">Микрофон:</translation>
-<translation id="8495193314787127784">Включить команду "ОК Google"</translation>
+<translation id="8495193314787127784">Включить команду "О'кей, Google"</translation>
<translation id="8496717697661868878">Запустить подключаемый модуль</translation>
<translation id="8497392509610708671">Вы можете в любое время изменить этот параметр в <ph name="BEGIN_LINK" />настройках Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Добавить устройство Bluetooth</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sk.xtb b/chromium/chrome/app/resources/generated_resources_sk.xtb
index 969d52654bd..49c856ecd93 100644
--- a/chromium/chrome/app/resources/generated_resources_sk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sk.xtb
@@ -610,7 +610,7 @@
<translation id="1763108912552529023">Skúmať</translation>
<translation id="1764226536771329714">beta</translation>
<translation id="176587472219019965">&amp;Nové okno</translation>
-<translation id="1766352429832934452">Povolené (vyžaduje sa na používanie funkcie „Ok Google“)</translation>
+<translation id="1766352429832934452">Zapnuté (nutné na používanie príkazu „Ok Google“)</translation>
<translation id="1769104665586091481">Otvoriť odkaz v novom &amp;okne</translation>
<translation id="1772267994638363865">Ak chcete používať túto funkciu, musíte povoliť Hlasovú a zvukovú aktivitu a natrénovať svoje zariadenie <ph name="DEVICE_TYPE" /> v nasledujúcich krokoch.</translation>
<translation id="1773212559869067373">Certifikát na overenie totožnosti bol zamietnutý miestne</translation>
@@ -735,7 +735,7 @@
<translation id="1934636348456381428">Povoliť implementáciu experimentálnych prekryvných posúvačov. Aby sa dali posúvače animovať, musíte tiež povoliť vláknovú kompozíciu.</translation>
<translation id="1936157145127842922">Zobraziť v priečinku</translation>
<translation id="1936717151811561466">Fínčina</translation>
-<translation id="1937256809970138538">Vyslovte „Ok Google“, keď je obrazovka zapnutá a odomknutá</translation>
+<translation id="1937256809970138538">Povedzte „Ok Google“, keď je obrazovka zapnutá a odomknutá</translation>
<translation id="1942765061641586207">Rozlíšenie obrázka</translation>
<translation id="1944921356641260203">Je k dispozícii aktualizácia</translation>
<translation id="1947424002851288782">nemecká klávesnica</translation>
@@ -1538,7 +1538,7 @@ Tieto webové stránky by podľa mňa nemali byť blokované.</translation>
<translation id="2964193600955408481">Zakázať sieť Wi-Fi</translation>
<translation id="2966449113954629791">Možno ste dosiahli povolený limit mobilných dát. Ďalšie údaje si môžete zakúpiť na aktivačnom portáli <ph name="NAME" />.</translation>
<translation id="2966459079597787514">švédska klávesnica</translation>
-<translation id="2966598748518102999">Zlepšite hlasové vyhľadávanie odoslaním záznamu vyslovenia slov „Ok Google“ a niekoľkých sekúnd predtým spoločnosti Google.</translation>
+<translation id="2966598748518102999">Zlepšiť hlasové vyhľadávanie odoslaním záznamu „Ok Google“ a niekoľkých predošlých sekúnd do Googlu</translation>
<translation id="2967544384642772068">Ukončiť</translation>
<translation id="2971033837577180453">&lt;span&gt;ID:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">znížiť jas</translation>
@@ -1706,7 +1706,7 @@ Pri vytvorení kontrolovaného používateľa sa nevytvorí účet Google a jeh
<translation id="3162559335345991374">Sieť Wi-Fi, ktorú používate, môže vyžadovať, aby ste navštívili jej prihlasovaciu stránku</translation>
<translation id="316307797510303346">Ovládať a zobrazovať stránky, ktoré táto osoba navštevuje v rámci účtu <ph name="CUSTODIAN_EMAIL" />.
Vaše prihlasovacie údaje do účtu sú zastarané.</translation>
-<translation id="3166571619128686629">Hlasové vyhľadávanie spustíte kliknutím alebo vyslovením kľúčového výrazu „Ok Google“</translation>
+<translation id="3166571619128686629">Hlasové vyhľadávanie spustíte kliknutím alebo vyslovením príkazu „Ok Google“</translation>
<translation id="3170072451822350649">Môžete tiež preskočiť prihlásenie a <ph name="LINK_START" />prehliadať ako hosť<ph name="LINK_END" />.</translation>
<translation id="3170544058711792988">Ponechať zameranie lupy v strede obrazovky</translation>
<translation id="317583078218509884">Nové nastavenia povolení webových stránok sa prejavia po opätovnom načítaní stránky.</translation>
@@ -1755,14 +1755,14 @@ Pri vytvorení kontrolovaného používateľa sa nevytvorí účet Google a jeh
<translation id="3241720467332021590">Írčina</translation>
<translation id="3242118113727675434">Zobraziť zobrazenie HUD pre dotykové body</translation>
<translation id="3242765319725186192">Predzdieľaný kľúč:</translation>
-<translation id="3244621381664913240">Umožňovať aktiváciu hlasového vyhľadávania vyslovením frázy „Ok Google“</translation>
+<translation id="3244621381664913240">Povoliť aktiváciu hlasového vyhľadávania príkazom „Ok Google“</translation>
<translation id="3245321423178950146">Neznámy interpret</translation>
<translation id="324533084080637716">So značkovaním vyjadrujúcim prítomnosť štruktúrovaných článkov</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – Chyba siete</translation>
<translation id="3251759466064201842">&lt;Nie je súčasťou certifikátu&gt;</translation>
<translation id="3252266817569339921">Francúzština</translation>
<translation id="3254434849914415189">Zvoľte pre súbory <ph name="FILE_TYPE" /> predvolenú aplikáciu:</translation>
-<translation id="3255228561559750854">Vyhľadávajte alebo vyslovte „Ok Google“</translation>
+<translation id="3255228561559750854">Vyhľadávajte alebo povedzte „Ok Google“</translation>
<translation id="3257011895468050906">Povolenie podpory viazania tokenov.</translation>
<translation id="3260892921936048802">&amp;Stiahnuť…</translation>
<translation id="326356299252142602">Použitie rozhrania Windows Runtime MIDI API</translation>
@@ -2698,7 +2698,7 @@ Ak chcete pokračovať v práci, stlačte ľubovoľný kláves.</translation>
<translation id="4533259260976001693">Zmenšiť/zväčšiť</translation>
<translation id="4533985347672295764">Čas využitia procesora</translation>
<translation id="4534166495582787863">Povolí klepnutie na touchpad troma prstami namiesto prostredného tlačidla.</translation>
-<translation id="4534799089889278411">Vyslovte výraz „Ok Google“ na novej karte, stránke google.com a v Spúšťači aplikácií</translation>
+<translation id="4534799089889278411">Povedzte „Ok Google“ na novej karte, na webe google.com alebo v Spúšťači aplikácií</translation>
<translation id="4535127706710932914">Predvolený profil</translation>
<translation id="4538417792467843292">Odstrániť slovo</translation>
<translation id="4538684596480161368">Na stránkach <ph name="HOST" /> vždy blokovať doplnky, ktoré nie sú v karanténe</translation>
@@ -3237,7 +3237,7 @@ Ak chcete pokračovať v práci, stlačte ľubovoľný kláves.</translation>
<translation id="5249624017678798539">Prehliadač zlyhal pred dokončením sťahovania.</translation>
<translation id="5252456968953390977">Roaming</translation>
<translation id="5252653240322147470">Maximálny počet číslic kódu PIN: <ph name="MAXIMUM" /></translation>
-<translation id="5253753933804516447">Aktivovať hlasové vyhľadávanie pomocou kľúčového slova „Ok Google“, keď je zapnutá a odomknutá obrazovka.</translation>
+<translation id="5253753933804516447">Aktivovať hlasové vyhľadávanie príkazom „Ok Google“, keď je zapnutá a odomknutá obrazovka.</translation>
<translation id="52550593576409946">Aplikáciu Kiosk sa nepodarilo spustiť</translation>
<translation id="5255315797444241226">Zadaná prístupová fráza je nesprávna.</translation>
<translation id="5260508466980570042">Vašu e-mailovú adresu alebo vaše heslo sa nepodarilo overiť. Skúste to znova.</translation>
@@ -3813,7 +3813,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio
<translation id="6011449291337289699">Vymazanie dát webu</translation>
<translation id="6015796118275082299">Rok</translation>
<translation id="6016551720757758985">Potvrdenie obnovenia Powerwash s návratom k predchádzajúcej verzii</translation>
-<translation id="6016809788585079594">Ešte raz a naposledy vyslovte „Ok Google“</translation>
+<translation id="6016809788585079594">Ešte raz a naposledy povedzte „Ok Google“</translation>
<translation id="6016972670657536680">Tlačidlo pre výber jazyka a klávesnice. Aktuálne je vybratý jazyk <ph name="LANGUAGE" />.</translation>
<translation id="6017225534417889107">Zmeniť...</translation>
<translation id="6017981840202692187">Pridať do priečinka Aplikácie</translation>
@@ -3881,7 +3881,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio
<translation id="6105158702728922449">Používať fotoaparát a mikrofón</translation>
<translation id="6105877918873366097">Dátum posledného prístupu</translation>
<translation id="6107012941649240045">Vydané pre</translation>
-<translation id="6107079717483424262">Rozpoznať hlas, keď vyslovíte „Ok Google“</translation>
+<translation id="6107079717483424262">Rozpoznať váš hlas, keď poviete „Ok Google“</translation>
<translation id="6109228527970300988">Emodži, ručné písanie a hlasový vstup v aktivačnej ponuke editora metód vstupu</translation>
<translation id="6111770213269631447">Prepis (namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">Upraviť osobu <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
@@ -3924,7 +3924,7 @@ s ostatnými, a to všetko na jednom mieste.<ph name="MARKUP_9" /></translatio
<translation id="6165508094623778733">Viac informácií</translation>
<translation id="6166185671393271715">Import hesiel do Chromu</translation>
<translation id="6169666352732958425">Plochu sa nepodarilo prenášať.</translation>
-<translation id="6171550060231646388">Simulované hardvérové funkcie Ok Google</translation>
+<translation id="6171550060231646388">Simulované hardvérové funkcie „Ok Google“</translation>
<translation id="6171948306033499786">Pozastaviť tlač</translation>
<translation id="6175314957787328458">Identifikátor GUID domény spoločnosti Microsoft</translation>
<translation id="6178664161104547336">Vybrať certifikát</translation>
@@ -4551,7 +4551,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation>
<translation id="7012372675181957985">Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation>
<translation id="7013485839273047434">Získať ďalšie rozšírenia</translation>
<translation id="7014174261166285193">Inštalácia zlyhala.</translation>
-<translation id="7017004637493394352">Vyslovte „Ok Google“ ešte raz</translation>
+<translation id="7017004637493394352">Povedzte „Ok Google“ ešte raz</translation>
<translation id="7017219178341817193">Pridať novú stránku</translation>
<translation id="7017354871202642555">Po nastavení okna nie je možné nastaviť režim.</translation>
<translation id="7017480957358237747">povoliť alebo zakázať konkrétne webové stránky,</translation>
@@ -4708,7 +4708,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation>
<translation id="7238585580608191973">Odtlačok SHA-256</translation>
<translation id="7240120331469437312">Alternatívny názov subjektu certifikátu</translation>
<translation id="7241389281993241388">Ak chcete importovať certifikát klienta, prihláste sa do <ph name="TOKEN_NAME" />.</translation>
-<translation id="7243055093079293866">Vyslovte na novej karte alebo webe google.com výraz „Ok Google“</translation>
+<translation id="7243055093079293866">Povedzte na novej karte alebo webe google.com príkaz „Ok Google“</translation>
<translation id="7243632151880336635">Vymazať a odhlásiť sa</translation>
<translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
<translation id="7246947237293279874">Proxy server FTP</translation>
@@ -4789,7 +4789,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation>
<translation id="7361824946268431273">Rýchlejší, jednoduchší a bezpečnejší počítač</translation>
<translation id="7364796246159120393">Vybrať súbor</translation>
<translation id="736515969993332243">Hľadanie sietí.</translation>
-<translation id="7366762109661450129">Vyslovte výraz „Ok Google“, keď je obrazovka zapnutá a odomknutá.</translation>
+<translation id="7366762109661450129">Povedzte „Ok Google“, keď je obrazovka zapnutá a odomknutá.</translation>
<translation id="7366909168761621528">Údaje prehliadania</translation>
<translation id="7369521049655330548">Na tejto stránke boli zablokované nasledujúce doplnky:</translation>
<translation id="7371490661692457119">Predvolená hodnota šírky dlaždice</translation>
@@ -4916,7 +4916,7 @@ Túto funkciu používajte iba s dôveryhodnými účtami.</translation>
<translation id="7518657099163789435">Na používanie kľúčového slova „Ok Google“ je potrebná Hlasová a zvuková aktivita.</translation>
<translation id="7520821146909122639">Prebieha preklad tejto stránky…</translation>
<translation id="7521387064766892559">JavaScript</translation>
-<translation id="7522255036471229694">Vyslovte „Ok Google“</translation>
+<translation id="7522255036471229694">Povedzte „Ok Google“</translation>
<translation id="7525067979554623046">Vytvoriť</translation>
<translation id="7529471622666797993"><ph name="BEGIN_LINK" />Rozšírené nastavenia písma<ph name="END_LINK" /> (vyžaduje sa rozšírenie)</translation>
<translation id="7530016656428373557">Vybíjanie batérie (W)</translation>
@@ -5313,7 +5313,7 @@ Súbor kľúča uložte na bezpečné miesto. Budete ho potrebovať na vytvoreni
<translation id="806812017500012252">Zoradiť podľa názvu</translation>
<translation id="8069615408251337349">Google Cloud Print</translation>
<translation id="8071432093239591881">Vytlačiť ako obrázok</translation>
-<translation id="8071942001314758122">Stačí trikrát vysloviť výraz „Ok Google“</translation>
+<translation id="8071942001314758122">Stačí trikrát povedať „Ok Google“</translation>
<translation id="8072988827236813198">Pripnúť karty</translation>
<translation id="8074127646604999664">Povoliť nedávno zatvoreným webom dokončiť posielanie a prijímanie údajov</translation>
<translation id="8075191520954018715">Stav pamäte</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sl.xtb b/chromium/chrome/app/resources/generated_resources_sl.xtb
index 0d3e4b84ba9..d67fd01a1b4 100644
--- a/chromium/chrome/app/resources/generated_resources_sl.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sl.xtb
@@ -1755,7 +1755,7 @@ Za ta in dodatna navodila preverite e-pošto za račun <ph name="ACCOUNT_EMAIL"
<translation id="3241720467332021590">irščina</translation>
<translation id="3242118113727675434">Prikaži opozorilni zaslon za točke dotika</translation>
<translation id="3242765319725186192">Ključ v predhodni skupni rabi:</translation>
-<translation id="3244621381664913240">Omogočanje »OK Google« za začetek glasovnega iskanja</translation>
+<translation id="3244621381664913240">Omogočanje »Ok Google« za začetek glasovnega iskanja</translation>
<translation id="3245321423178950146">Neznan izvajalec</translation>
<translation id="324533084080637716">S strukturiranim označevalnim jezikom za članke</translation>
<translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – napaka omrežja</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sw.xtb b/chromium/chrome/app/resources/generated_resources_sw.xtb
index 85dfdd411ef..06b47059b90 100644
--- a/chromium/chrome/app/resources/generated_resources_sw.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sw.xtb
@@ -1534,7 +1534,7 @@ Sidhani ikiwa tovuti hii inapaswa kuzuiwa!</translation>
<translation id="2964193600955408481">Lemaza Wi-Fi</translation>
<translation id="2966449113954629791">Huenda ulitumia kiwango chako chote cha data. Tembelea <ph name="NAME" /> kituo cha uwezeshaji ili ununue data zaidi.</translation>
<translation id="2966459079597787514">Kibodi ya Kiswidi</translation>
-<translation id="2966598748518102999">Boresha kutafuta kwa kutamka kwa kutuma sauti ya "Ok Google," pamoja na sekunde chache kabla ya tamko hilo, kwa Google.</translation>
+<translation id="2966598748518102999">Tuma sauti ya "Ok Google," na ulichosema sekunde chache kabla, kwa Google, ili kuboresha utafutaji kwa kutamka.</translation>
<translation id="2967544384642772068">Angamiza</translation>
<translation id="2971033837577180453">&lt;span&gt;Kitambulisho:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">elekeza mwangaza chini</translation>
@@ -3870,7 +3870,7 @@ Bonyeza kitufe chochote ili kuendelea kuchunguza.</translation>
<translation id="6105158702728922449">Kutumia kamera na maikrofoni yako</translation>
<translation id="6105877918873366097">Ilifikiwa mwisho</translation>
<translation id="6107012941649240045">Kimetolewa Kwa</translation>
-<translation id="6107079717483424262">Tambua sauti yako unaposema "Ok Google"</translation>
+<translation id="6107079717483424262">Kutambua sauti yako unaposema "Ok Google"</translation>
<translation id="6109228527970300988">Emoji, mwandiko na kuweka data kwa kutamka kwenye menyu ya IME ya kuchagua kuingia</translation>
<translation id="6111770213269631447">Unukuzi wa mfumo wa kuandika (namaskar → নমস্কার)</translation>
<translation id="6112952769866305444">Badilisha wasifu, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
@@ -3913,7 +3913,7 @@ Bonyeza kitufe chochote ili kuendelea kuchunguza.</translation>
<translation id="6165508094623778733">Pata maelezo zaidi</translation>
<translation id="6166185671393271715">Leta Manenosiri Kwenye Chrome</translation>
<translation id="6169666352732958425">Imeshindwa kutuma eneo-kazi.</translation>
-<translation id="6171550060231646388">Vipengele vya maunzi vilivyobuniwa vya 'OK Google'</translation>
+<translation id="6171550060231646388">Vipengele vya maunzi vilivyobuniwa vya 'Ok Google'</translation>
<translation id="6171948306033499786">Sitisha kuchapisha</translation>
<translation id="6175314957787328458">GUID ya Vikoa kutoka Microsoft</translation>
<translation id="6178664161104547336">Chagua cheti</translation>
@@ -5663,7 +5663,7 @@ Inakokotoa muda wa kujaa</translation>
<translation id="8565650234829130278">Ulijaribu kushusha programu kiwango</translation>
<translation id="8569682776816196752">Hakuna hatima zilizopatikana</translation>
<translation id="8569764466147087991">Chagua faili ya kufungua</translation>
-<translation id="8571032220281885258">Unaposema "Ok Google," Chrome itatafuta unachosema baada ya hapo.</translation>
+<translation id="8571032220281885258">Unaposema "Ok Google," Chrome itatafuta unachosema baada ya maneno hayo.</translation>
<translation id="8571108619753148184">Seva 4</translation>
<translation id="8574234089711453001">Ruhusu kitufe cha kupakua kionekane unapofungua ukurasa wenye url ya maudhui.</translation>
<translation id="857779305329188634">Washa matumizi ya itifaki ya majaribio ya QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb
index 1de6f748ca6..e8b529caa95 100644
--- a/chromium/chrome/app/resources/generated_resources_te.xtb
+++ b/chromium/chrome/app/resources/generated_resources_te.xtb
@@ -5616,7 +5616,7 @@
<translation id="8487700953926739672">ఆఫ్‌లైన్‌లో అందుబాటు</translation>
<translation id="8490896350101740396">క్రింది కియోస్క్ అనువర్తనాలు "<ph name="UPDATED_APPS" />" నవీకరించబడ్డాయి. దయచేసి నవీకరణ ప్రాసెస్‌ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి.</translation>
<translation id="8493236660459102203">మైక్రోఫోన్:</translation>
-<translation id="8495193314787127784">"సరే Google"ని ప్రారంభించండి</translation>
+<translation id="8495193314787127784">"Ok Google"ని ప్రారంభించండి</translation>
<translation id="8496717697661868878">ఈ ప్లగ్ఇన్‌ని అమలు చెయ్యి</translation>
<translation id="8497392509610708671">మీరు దీన్ని ఎప్పుడైనా <ph name="BEGIN_LINK" />Chrome సెట్టింగ్‌లు<ph name="END_LINK" />లో మార్చవచ్చు.</translation>
<translation id="8498716162437226120">బ్లూటూత్ పరికరాన్ని జోడించు</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_th.xtb b/chromium/chrome/app/resources/generated_resources_th.xtb
index dc57a4adc9e..a3b7e10d99f 100644
--- a/chromium/chrome/app/resources/generated_resources_th.xtb
+++ b/chromium/chrome/app/resources/generated_resources_th.xtb
@@ -1197,7 +1197,7 @@
<translation id="2565670301826831948">ความเร็วทัชแพด:</translation>
<translation id="2566124945717127842">Powerwash เพื่อรีเซ็ตอุปกรณ์ <ph name="IDS_SHORT_PRODUCT_NAME" /> ให้เหมือนใหม่</translation>
<translation id="2568774940984945469">ที่เก็บแถบข้อมูล</translation>
-<translation id="2570000010887652771">ข้อมูลที่บันทึกไว้</translation>
+<translation id="2570000010887652771">ประหยัดเน็ต</translation>
<translation id="2570648609346224037">เกิดปัญหาขณะดาวน์โหลดอิมเมจการกู้คืน</translation>
<translation id="257088987046510401">ธีม</translation>
<translation id="2572032849266859634">ได้รับสิทธิ์ในการอ่าน <ph name="VOLUME_NAME" /> เท่านั้นแล้ว</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_tr.xtb b/chromium/chrome/app/resources/generated_resources_tr.xtb
index d5e8fe3da41..cc15eaf92c5 100644
--- a/chromium/chrome/app/resources/generated_resources_tr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_tr.xtb
@@ -1537,7 +1537,7 @@ Sunucunun mesajı: <ph name="SERVER_MSG" /></translation>
<translation id="2964193600955408481">Kablosuz bağlantıyı devre dışı bırak</translation>
<translation id="2966449113954629791">Mobil veri kullanım hakkınızı doldurmuş olabilirsiniz. Daha fazla veri satın almak için <ph name="NAME" /> etkinleştirme portalını ziyaret edin.</translation>
<translation id="2966459079597787514">İsveççe klavye</translation>
-<translation id="2966598748518102999">Öncesinde birkaç saniye boşlukla "OK Google" sesini Google'a göndererek sesli arama özelliğini iyileştirin.</translation>
+<translation id="2966598748518102999">Öncesinde birkaç saniye boşlukla "Ok Google" sesini Google'a göndererek sesli arama özelliğini iyileştirin.</translation>
<translation id="2967544384642772068">Sonlandır</translation>
<translation id="2971033837577180453">&lt;span&gt;Kimlik:&lt;/span&gt;<ph name="EXTENSION_ID" /></translation>
<translation id="2971213274238188218">parlaklığı azalt</translation>
@@ -1761,7 +1761,7 @@ Bunlar ve diğer talimatlar için lütfen <ph name="ACCOUNT_EMAIL" /> e-postanı
<translation id="3251759466064201842">&lt;Sertifikanın Parçası Değil&gt;</translation>
<translation id="3252266817569339921">Fransızca</translation>
<translation id="3254434849914415189"><ph name="FILE_TYPE" /> dosyaları için varsayılan uygulamayı seç:</translation>
-<translation id="3255228561559750854">Arama yapın veya "OK Google" deyin</translation>
+<translation id="3255228561559750854">Arama yapın veya "Ok Google" deyin</translation>
<translation id="3257011895468050906">Token Binding desteğini etkinleştirin.</translation>
<translation id="3260892921936048802">&amp;İndir...</translation>
<translation id="326356299252142602">Windows Runtime MIDI API'yi kullan</translation>
@@ -2208,7 +2208,7 @@ Bunlar ve diğer talimatlar için lütfen <ph name="ACCOUNT_EMAIL" /> e-postanı
<translation id="3812525830114410218">Bozuk sertifika</translation>
<translation id="3812568885510197014">Otomatik Doldurma imzaları olan web formlarına HTML özelliği olarak ek açıklama koyar</translation>
<translation id="3813296892522778813">Aradığınız bilgiyi bulamazsanız <ph name="BEGIN_LINK_CHROMIUM" />Google Chrome yardımına<ph name="END_LINK_CHROMIUM" /> gidin</translation>
-<translation id="3813984289128269159">OK Google</translation>
+<translation id="3813984289128269159">Ok Google</translation>
<translation id="3815016854028376614">Zhuyin giriş yöntemi</translation>
<translation id="3815571115159309122"><ph name="FILE_COUNT" /> yeni fotoğraf bulundu
<ph name="LINE_BREAK1" />
@@ -5623,7 +5623,7 @@ Dolana kadar geçecek süre hesaplanıyor</translation>
<translation id="8487700953926739672">Çevrimdışı kullanılabilir</translation>
<translation id="8490896350101740396">Takip eden kiosk uygulamaları "<ph name="UPDATED_APPS" />" güncellendi. Lütfen güncelleme işlemini tamamlamak için cihazınızı yeniden başlatın.</translation>
<translation id="8493236660459102203">Mikrofon:</translation>
-<translation id="8495193314787127784">"OK Google" özelliğini etkinleştir</translation>
+<translation id="8495193314787127784">"Ok Google" özelliğini etkinleştir</translation>
<translation id="8496717697661868878">Bu Eklentiyi Çalıştır</translation>
<translation id="8497392509610708671">Bu ayarı istediğiniz zaman <ph name="BEGIN_LINK" />Chrome Ayarları<ph name="END_LINK" />'ndan değiştirebilirsiniz.</translation>
<translation id="8498716162437226120">Bluetooth cihazı ekle</translation>
@@ -5672,7 +5672,7 @@ Dolana kadar geçecek süre hesaplanıyor</translation>
<translation id="8565650234829130278">Uygulamanın eski sürümüne geçilmeye çalışıldı.</translation>
<translation id="8569682776816196752">Hiçbir hedef bulunamadı</translation>
<translation id="8569764466147087991">Açılacak dosyayı seçin</translation>
-<translation id="8571032220281885258">"OK Google" dediğinizde, Chrome söyleyeceğiniz bir sonraki ifadeyi arar.</translation>
+<translation id="8571032220281885258">"Ok Google" dediğinizde, Chrome söyleyeceğiniz bir sonraki ifadeyi arar.</translation>
<translation id="8571108619753148184">Sunucu 4</translation>
<translation id="8574234089711453001">Bir sayfayı medya URL'si ile açarken indir düğmesinin gösterilmesine izin verin.</translation>
<translation id="857779305329188634">Deneysel QUIC protokol desteğini etkinleştir.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_uk.xtb b/chromium/chrome/app/resources/generated_resources_uk.xtb
index 37d0da84844..f4d1413c5c5 100644
--- a/chromium/chrome/app/resources/generated_resources_uk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_uk.xtb
@@ -1760,7 +1760,7 @@
<translation id="3251759466064201842">&lt;Не є частиною сертифіката&gt;</translation>
<translation id="3252266817569339921">Французька</translation>
<translation id="3254434849914415189">Вибрати програму за умовчанням для файлів <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Виконайте пошук або скажіть "OK Google"</translation>
+<translation id="3255228561559750854">Введіть запит або скажіть "Ok Google"</translation>
<translation id="3257011895468050906">Увімкнути підтримку Token Binding.</translation>
<translation id="3260892921936048802">Завантажити…</translation>
<translation id="326356299252142602">Використовувати API Windows Runtime MIDI</translation>
@@ -4550,7 +4550,7 @@
<translation id="7012372675181957985">Історія веб-перегляду також може зберігатися у вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation>
<translation id="7013485839273047434">Інші розширення</translation>
<translation id="7014174261166285193">Помилка встановлення.</translation>
-<translation id="7017004637493394352">Ще раз скажіть "OK Google"</translation>
+<translation id="7017004637493394352">Ще раз скажіть "Ok Google"</translation>
<translation id="7017219178341817193">Додати нову сторінку</translation>
<translation id="7017354871202642555">Неможливо вибрати режим після налаштування вікна.</translation>
<translation id="7017480957358237747">дозволяти чи забороняти певні веб-сайти;</translation>
@@ -5620,7 +5620,7 @@
<translation id="8487700953926739672">Доступ у режимі офлайн</translation>
<translation id="8490896350101740396">Оновлено такі додатки-термінали: <ph name="UPDATED_APPS" />. Перезавантажте пристрій, щоб завершити оновлення.</translation>
<translation id="8493236660459102203">Мікрофон:</translation>
-<translation id="8495193314787127784">Увімкнути "OK Google"</translation>
+<translation id="8495193314787127784">Увімкнути команду "Ok Google"</translation>
<translation id="8496717697661868878">Запустити цей плагін</translation>
<translation id="8497392509610708671">Це можна будь-коли змінити в <ph name="BEGIN_LINK" />налаштуваннях Chrome<ph name="END_LINK" />.</translation>
<translation id="8498716162437226120">Додати пристрій Bluetooth</translation>
@@ -5669,7 +5669,7 @@
<translation id="8565650234829130278">Спроба встановити програму нижчої версії.</translation>
<translation id="8569682776816196752">Не знайдено жодного місця призначення</translation>
<translation id="8569764466147087991">Виберіть файл, який потрібно відкрити</translation>
-<translation id="8571032220281885258">Коли ви скажете "OK Google", Chrome шукатиме те, що ви скажете далі.</translation>
+<translation id="8571032220281885258">Коли ви кажете "Ok Google", Chrome виконує пошук за фразою, яку ви кажете після цього.</translation>
<translation id="8571108619753148184">Сервер 4</translation>
<translation id="8574234089711453001">Показувати кнопку "Завантажити", коли відкривається сторінка з URL-адресою медіафайлу.</translation>
<translation id="857779305329188634">Увімкнути підтримку експериментального протоколу QUIC.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_vi.xtb b/chromium/chrome/app/resources/generated_resources_vi.xtb
index 19fb5e1085b..e047c8834c8 100644
--- a/chromium/chrome/app/resources/generated_resources_vi.xtb
+++ b/chromium/chrome/app/resources/generated_resources_vi.xtb
@@ -1762,7 +1762,7 @@ Vui lòng kiểm tra email của bạn tại <ph name="ACCOUNT_EMAIL" /> để b
<translation id="3251759466064201842">&lt;Không Thuộc Chứng chỉ&gt;</translation>
<translation id="3252266817569339921">Tiếng Pháp</translation>
<translation id="3254434849914415189">Chọn ứng dụng mặc định cho các tệp <ph name="FILE_TYPE" />:</translation>
-<translation id="3255228561559750854">Tìm kiếm hoặc nói "Ok, Google"</translation>
+<translation id="3255228561559750854">Tìm kiếm hoặc nói "Ok Google"</translation>
<translation id="3257011895468050906">Kích hoạt hỗ trợ Token Binding.</translation>
<translation id="3260892921936048802">&amp;Tải xuống...</translation>
<translation id="326356299252142602">Sử dụng API MIDI trong Windows Runtime</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_id.xtb b/chromium/chrome/app/resources/google_chrome_strings_id.xtb
index 428ac084a8a..de248d2b750 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_id.xtb
@@ -37,7 +37,7 @@
<translation id="1818142563254268765">Chrome tidak dapat memperbarui dirinya sendiri ke versi terbaru, jadi Anda ketinggalan perbaikan keamanan dan fitur baru yang keren. Anda perlu memperbarui Chrome.</translation>
<translation id="1877026089748256423">Chrome terlalu lawas</translation>
<translation id="2063848847527508675">Chrome OS harus dimulai ulang untuk menerapkan pembaruan.</translation>
-<translation id="2077129598763517140">Gunakan percepatan perangkat keras saat tersedia</translation>
+<translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation>
<translation id="2084710999043359739">Tambahkan ke Chrome</translation>
<translation id="2120620239521071941">Tindakan ini akan menghapus <ph name="ITEMS_COUNT" /> item dari perangkat ini. Untuk mengambil data nanti, login ke Chrome sebagai <ph name="USER_EMAIL" />.</translation>
<translation id="2147651015520127414">Chrome memverifikasi bahwa <ph name="ISSUER" /> menerbitkan sertifikat situs web ini.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_pl.xtb b/chromium/chrome/app/resources/google_chrome_strings_pl.xtb
index d81a501a07c..4b740667742 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_pl.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -191,7 +191,7 @@ Więcej instrukcji znajdziesz w e-mailu wysłanym na adres <ph name="ACCOUNT_EM
<translation id="6598387184982954187">Używasz adresu <ph name="PROFILE_EMAIL" /> do synchronizowania danych w Chrome. Aby zaktualizować ustawienia synchronizacji lub używać Chrome bez konta Google, wejdź na stronę <ph name="SETTINGS_LINK" />.</translation>
<translation id="6600954340915313787">Skopiowana do Chrome</translation>
<translation id="6626317981028933585">Niestety ustawienia przeglądarki Firefox są niedostępne, gdy aplikacja jest uruchomiona. Aby importować ustawienia do Google Chrome, zapisz bieżącą pracę i zamknij wszystkie okna Firefoxa. Następnie kliknij przycisk Kontynuj.</translation>
-<translation id="6634887557811630702">Google Chrome jest aktualny.</translation>
+<translation id="6634887557811630702">Masz aktualną wersję Google Chrome</translation>
<translation id="6676384891291319759">Skorzystaj z internetu</translation>
<translation id="6757767188268205357">Nie proponuj więcej</translation>
<translation id="683440813066116847">Reguła dla ruchu przychodzącego w Google Chrome Canary zezwalająca na ruch mDNS.</translation>
diff --git a/chromium/chrome/browser/BUILD.gn b/chromium/chrome/browser/BUILD.gn
index 503729aa06c..a79831556c1 100644
--- a/chromium/chrome/browser/BUILD.gn
+++ b/chromium/chrome/browser/BUILD.gn
@@ -795,6 +795,8 @@ split_static_library("browser") {
"page_load_metrics/observers/https_engagement_metrics/https_engagement_service_factory.h",
"page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.cc",
"page_load_metrics/observers/no_state_prefetch_page_load_metrics_observer.h",
+ "page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc",
+ "page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.h",
"page_load_metrics/observers/prerender_page_load_metrics_observer.cc",
"page_load_metrics/observers/prerender_page_load_metrics_observer.h",
"page_load_metrics/observers/previews_page_load_metrics_observer.cc",
diff --git a/chromium/chrome/browser/chromeos/BUILD.gn b/chromium/chrome/browser/chromeos/BUILD.gn
index 5fe6e425e5c..02a4b6bac36 100644
--- a/chromium/chrome/browser/chromeos/BUILD.gn
+++ b/chromium/chrome/browser/chromeos/BUILD.gn
@@ -222,6 +222,8 @@ source_set("chromeos") {
"arc/arc_auth_notification.h",
"arc/arc_auth_service.cc",
"arc/arc_auth_service.h",
+ "arc/arc_migration_guide_notification.cc",
+ "arc/arc_migration_guide_notification.h",
"arc/arc_optin_uma.cc",
"arc/arc_optin_uma.h",
"arc/arc_play_store_enabled_preference_handler.cc",
diff --git a/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc b/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc
index b24472228d5..615ee3a7276 100644
--- a/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc
+++ b/chromium/chrome/browser/extensions/api/debugger/debugger_apitest.cc
@@ -262,8 +262,13 @@ IN_PROC_BROWSER_TEST_F(DebuggerApiTest, InfoBar) {
EXPECT_EQ(1u, service2->infobar_count());
EXPECT_EQ(1u, service3->infobar_count());
- // Closing infobar should cause detach and remove all infobars.
+ // Calling delegate()->InfoBarDismissed() on a global infobar should
+ // cause detach and removal of all infobars, except the one used to
+ // fetch the delegate (i.e., service2->infobar_at(0) itself).
+ // Afterwards, service2->infobar_at(0) must be explicitly removed.
+ // See InfoBarView::ButtonPressed for an example.
service2->infobar_at(0)->delegate()->InfoBarDismissed();
+ service2->infobar_at(0)->RemoveSelf();
EXPECT_EQ(0u, service1->infobar_count());
EXPECT_EQ(0u, service2->infobar_count());
EXPECT_EQ(0u, service3->infobar_count());
diff --git a/chromium/chrome/browser/extensions/api/identity/identity_api.cc b/chromium/chrome/browser/extensions/api/identity/identity_api.cc
index 7de43edec2b..90e95c7b1f8 100644
--- a/chromium/chrome/browser/extensions/api/identity/identity_api.cc
+++ b/chromium/chrome/browser/extensions/api/identity/identity_api.cc
@@ -221,7 +221,11 @@ void IdentityAPI::SetAccountStateForTest(gaia::AccountIds ids,
template <>
void BrowserContextKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies() {
DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
+
+ DependsOn(ChromeSigninClientFactory::GetInstance());
+ DependsOn(LoginUIServiceFactory::GetInstance());
DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
+ DependsOn(SigninManagerFactory::GetInstance());
}
} // namespace extensions
diff --git a/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc b/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc
index a9870015a86..be249c91898 100644
--- a/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc
+++ b/chromium/chrome/browser/renderer_host/pepper/pepper_flash_drm_host.cc
@@ -80,6 +80,8 @@ class MonitorFinder : public base::RefCountedThreadSafe<MonitorFinder> {
if (!rfh)
return;
gfx::NativeView native_view = rfh->GetNativeView();
+ if (!native_view)
+ return;
#if defined(USE_AURA)
aura::WindowTreeHost* host = native_view->GetHost();
if (!host)
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
index 37a64d5eccc..29310477b32 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
@@ -1,5 +1,5 @@
{
- "x-version": 20,
+ "x-version": 21,
"google-talk": {
"mime_types": [
],
@@ -80,9 +80,9 @@
],
"versions": [
{
- "version": "24.0.0.221",
+ "version": "25.0.0.148",
"status": "up_to_date",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
index 2543b4eac26..a07eb278763 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
@@ -1,5 +1,5 @@
{
- "x-version": 26,
+ "x-version": 27,
"google-talk": {
"mime_types": [
],
@@ -115,9 +115,9 @@
],
"versions": [
{
- "version": "24.0.0.221",
+ "version": "25.0.0.148",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
index c005be245e4..0f4a9286e83 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
@@ -1,5 +1,5 @@
{
- "x-version": 35,
+ "x-version": 36,
"google-talk": {
"mime_types": [
],
@@ -137,9 +137,9 @@
],
"versions": [
{
- "version": "24.0.0.221",
+ "version": "25.0.0.148",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-04.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb17-10.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/welcome/welcome.css b/chromium/chrome/browser/resources/welcome/welcome.css
index 54556bc4586..78c743be800 100644
--- a/chromium/chrome/browser/resources/welcome/welcome.css
+++ b/chromium/chrome/browser/resources/welcome/welcome.css
@@ -60,7 +60,7 @@ body {
@keyframes colorize {
from {
- -webkit-filter: grayscale(100%);
+ filter: grayscale(100%) brightness(128%) contrast(20%) brightness(161%);
opacity: .6;
}
}
@@ -148,10 +148,10 @@ body {
}
.logo-shadow {
- -webkit-filter: blur(16px);
animation: fadeInAndSlideDownShadow 300ms 600ms both;
background: rgba(0, 0, 0, .2);
border-radius: 50%;
+ filter: blur(16px);
height: 96px;
position: absolute;
top: 16px;
diff --git a/chromium/components/arc/common/notifications.mojom b/chromium/components/arc/common/notifications.mojom
index 563ee775d83..50621f101b0 100644
--- a/chromium/components/arc/common/notifications.mojom
+++ b/chromium/components/arc/common/notifications.mojom
@@ -45,6 +45,15 @@ enum ArcNotificationExpandState {
EXPANDED = 2,
};
+// These values represent what shows in an ARC custom notification.
+[Extensible, MinVersion=11]
+enum ArcNotificationShownContents {
+ // The normal notification contents are shown.
+ CONTENTS_SHOWN = 0,
+ // The notification settings view is shown.
+ SETTINGS_SHOWN = 1,
+};
+
struct ArcNotificationData {
// Identifier of notification
string key;
@@ -98,6 +107,9 @@ struct ArcNotificationData {
// Flag if the notification is expandable
[MinVersion=10]
ArcNotificationExpandState expand_state;
+ // Flag for what shows in a notification.
+ [MinVersion=11]
+ ArcNotificationShownContents shown_contents;
};
[MinVersion=2]
diff --git a/chromium/components/autofill/content/browser/BUILD.gn b/chromium/components/autofill/content/browser/BUILD.gn
index 88576886284..5fa6ea67efd 100644
--- a/chromium/components/autofill/content/browser/BUILD.gn
+++ b/chromium/components/autofill/content/browser/BUILD.gn
@@ -10,6 +10,8 @@ static_library("browser") {
"content_autofill_driver.h",
"content_autofill_driver_factory.cc",
"content_autofill_driver_factory.h",
+ "key_press_handler_manager.cc",
+ "key_press_handler_manager.h",
"risk/fingerprint.cc",
"risk/fingerprint.h",
]
@@ -61,6 +63,7 @@ source_set("unit_tests") {
testonly = true
sources = [
"content_autofill_driver_unittest.cc",
+ "key_press_handler_manager_unittest.cc",
"payments/payments_client_unittest.cc",
]
diff --git a/chromium/components/autofill/content/browser/content_autofill_driver.cc b/chromium/components/autofill/content/browser/content_autofill_driver.cc
index 710a1e74c9a..38bf3070fd2 100644
--- a/chromium/components/autofill/content/browser/content_autofill_driver.cc
+++ b/chromium/components/autofill/content/browser/content_autofill_driver.cc
@@ -20,6 +20,7 @@
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/storage_partition.h"
@@ -41,6 +42,7 @@ ContentAutofillDriver::ContentAutofillDriver(
app_locale,
enable_download_manager)),
autofill_external_delegate_(autofill_manager_.get(), this),
+ key_press_handler_manager_(this),
binding_(this) {
autofill_manager_->SetExternalDelegate(&autofill_external_delegate_);
}
@@ -265,4 +267,29 @@ const mojom::AutofillAgentPtr& ContentAutofillDriver::GetAutofillAgent() {
return autofill_agent_;
}
+void ContentAutofillDriver::RegisterKeyPressHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) {
+ key_press_handler_manager_.RegisterKeyPressHandler(handler);
+}
+
+void ContentAutofillDriver::RemoveKeyPressHandler() {
+ key_press_handler_manager_.RemoveKeyPressHandler();
+}
+
+void ContentAutofillDriver::AddHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) {
+ content::RenderWidgetHostView* view = render_frame_host_->GetView();
+ if (!view)
+ return;
+ view->GetRenderWidgetHost()->AddKeyPressEventCallback(handler);
+}
+
+void ContentAutofillDriver::RemoveHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) {
+ content::RenderWidgetHostView* view = render_frame_host_->GetView();
+ if (!view)
+ return;
+ view->GetRenderWidgetHost()->RemoveKeyPressEventCallback(handler);
+}
+
} // namespace autofill
diff --git a/chromium/components/autofill/content/browser/content_autofill_driver.h b/chromium/components/autofill/content/browser/content_autofill_driver.h
index 0f6fb084027..f038f76f89c 100644
--- a/chromium/components/autofill/content/browser/content_autofill_driver.h
+++ b/chromium/components/autofill/content/browser/content_autofill_driver.h
@@ -9,6 +9,7 @@
#include <string>
#include "base/supports_user_data.h"
+#include "components/autofill/content/browser/key_press_handler_manager.h"
#include "components/autofill/content/common/autofill_agent.mojom.h"
#include "components/autofill/content/common/autofill_driver.mojom.h"
#include "components/autofill/core/browser/autofill_driver.h"
@@ -29,7 +30,8 @@ class AutofillClient;
// communication from the renderer and from the external world. There is one
// instance per RenderFrameHost.
class ContentAutofillDriver : public AutofillDriver,
- public mojom::AutofillDriver {
+ public mojom::AutofillDriver,
+ public KeyPressHandlerManager::Delegate {
public:
ContentAutofillDriver(
content::RenderFrameHost* render_frame_host,
@@ -103,12 +105,23 @@ class ContentAutofillDriver : public AutofillDriver,
const mojom::AutofillAgentPtr& GetAutofillAgent();
+ // Methods forwarded to key_press_handler_manager_.
+ void RegisterKeyPressHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler);
+ void RemoveKeyPressHandler();
+
protected:
// Sets the manager to |manager| and sets |manager|'s external delegate
// to |autofill_external_delegate_|. Takes ownership of |manager|.
void SetAutofillManager(std::unique_ptr<AutofillManager> manager);
private:
+ // KeyPressHandlerManager::Delegate:
+ void AddHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) override;
+ void RemoveHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) override;
+
// Weak ref to the RenderFrameHost the driver is associated with. Should
// always be non-NULL and valid for lifetime of |this|.
content::RenderFrameHost* const render_frame_host_;
@@ -124,6 +137,8 @@ class ContentAutofillDriver : public AutofillDriver,
// case where the Autofill native UI is enabled.
AutofillExternalDelegate autofill_external_delegate_;
+ KeyPressHandlerManager key_press_handler_manager_;
+
mojo::Binding<mojom::AutofillDriver> binding_;
mojom::AutofillAgentPtr autofill_agent_;
diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager.cc b/chromium/components/autofill/content/browser/key_press_handler_manager.cc
new file mode 100644
index 00000000000..96b463bc5d4
--- /dev/null
+++ b/chromium/components/autofill/content/browser/key_press_handler_manager.cc
@@ -0,0 +1,37 @@
+// Copyright 2017 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 "components/autofill/content/browser/key_press_handler_manager.h"
+
+namespace autofill {
+
+KeyPressHandlerManager::KeyPressHandlerManager(Delegate* delegate)
+ : delegate_(delegate) {}
+
+KeyPressHandlerManager::~KeyPressHandlerManager() = default;
+
+void KeyPressHandlerManager::RegisterKeyPressHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) {
+ // It would have been nice to be able to tell if two callbacks are just the
+ // same function with the same bound arguments. That's not what Equals() does
+ // (they have to have the same BindState), but it's the closest approximation
+ // available.
+ if (handler.is_null() || handler.Equals(handler_))
+ return;
+
+ if (!handler_.is_null())
+ delegate_->RemoveHandler(handler_);
+ handler_ = handler;
+ delegate_->AddHandler(handler_);
+}
+
+void KeyPressHandlerManager::RemoveKeyPressHandler() {
+ if (handler_.is_null())
+ return;
+
+ delegate_->RemoveHandler(handler_);
+ handler_.Reset();
+}
+
+} // namespace autofill
diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager.h b/chromium/components/autofill/content/browser/key_press_handler_manager.h
new file mode 100644
index 00000000000..916ca9df3bb
--- /dev/null
+++ b/chromium/components/autofill/content/browser/key_press_handler_manager.h
@@ -0,0 +1,47 @@
+// Copyright 2017 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 COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_
+#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_
+
+#include "base/macros.h"
+#include "content/public/browser/render_widget_host.h"
+
+namespace autofill {
+
+// KeyPressHandlerManager allows registering a key press handler and ensuring
+// its unregistering in case of destruction of the manager or request for
+// registration of another handler. It still needs a Delegate implementation to
+// use the low-level handler registration API.
+
+class KeyPressHandlerManager {
+ public:
+ class Delegate {
+ public:
+ virtual void AddHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) = 0;
+ virtual void RemoveHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler) = 0;
+ };
+
+ explicit KeyPressHandlerManager(Delegate* delegate);
+
+ virtual ~KeyPressHandlerManager();
+
+ void RegisterKeyPressHandler(
+ const content::RenderWidgetHost::KeyPressEventCallback& handler);
+
+ void RemoveKeyPressHandler(); // Unregisters previous handler.
+
+ private:
+ Delegate* const delegate_;
+
+ content::RenderWidgetHost::KeyPressEventCallback handler_;
+
+ DISALLOW_COPY_AND_ASSIGN(KeyPressHandlerManager);
+};
+
+} // namespace autofill
+
+#endif // COMPONENTS_AUTOFILL_CONTENT_BROWSER_KEY_PRESS_HANDLER_MANAGER_H_
diff --git a/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc b/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc
new file mode 100644
index 00000000000..e839b3d2b2e
--- /dev/null
+++ b/chromium/components/autofill/content/browser/key_press_handler_manager_unittest.cc
@@ -0,0 +1,113 @@
+// Copyright 2017 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 "components/autofill/content/browser/key_press_handler_manager.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "content/public/browser/native_web_keyboard_event.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace autofill {
+
+namespace {
+
+const content::NativeWebKeyboardEvent
+ kDummyEvent(blink::WebInputEvent::Undefined, 0, 0);
+
+// Dummy keyboard event handler: ignores the event, but appends the given |name|
+// to a logging |target|.
+bool DummyHandler(const char* name,
+ std::string* target,
+ const content::NativeWebKeyboardEvent& /*event*/) {
+ target->append(name);
+ return false;
+}
+
+// A delegate which logs the handlers instead of adding and removing them.
+class LoggingDelegate : public KeyPressHandlerManager::Delegate {
+ public:
+ explicit LoggingDelegate(std::string* target) : target_(target) {}
+
+ // KeyPressHandlerManager::Delegate:
+ void AddHandler(const content::RenderWidgetHost::KeyPressEventCallback&
+ handler) override {
+ target_->append("A");
+ handler.Run(kDummyEvent);
+ }
+ void RemoveHandler(const content::RenderWidgetHost::KeyPressEventCallback&
+ handler) override {
+ target_->append("R");
+ handler.Run(kDummyEvent);
+ }
+
+ private:
+ std::string* const target_;
+};
+
+} // namespace
+
+class KeyPressHandlerManagerTest : public testing::Test {
+ public:
+ KeyPressHandlerManagerTest() : delegate_(&callback_trace_) {}
+
+ protected:
+ content::RenderWidgetHost::KeyPressEventCallback CallbackForName(
+ const char* name) {
+ return base::Bind(DummyHandler, name, &callback_trace_);
+ }
+
+ // String encoding the events related to adding and removing callbacks. For
+ // example, "A1R1A2R2" means that callback "1" was added, then removed, and
+ // then callback "2" was added and removed.
+ std::string callback_trace_;
+
+ LoggingDelegate delegate_;
+};
+
+// Removing should remove the previously added callback.
+TEST_F(KeyPressHandlerManagerTest, AddRemove) {
+ KeyPressHandlerManager manager(&delegate_);
+ manager.RegisterKeyPressHandler(CallbackForName("1"));
+ manager.RemoveKeyPressHandler();
+ EXPECT_EQ("A1R1", callback_trace_);
+}
+
+// Registering a new callback should remove the old one.
+TEST_F(KeyPressHandlerManagerTest, AddReplace) {
+ KeyPressHandlerManager manager(&delegate_);
+ manager.RegisterKeyPressHandler(CallbackForName("1"));
+ manager.RegisterKeyPressHandler(CallbackForName("2"));
+ manager.RemoveKeyPressHandler();
+ EXPECT_EQ("A1R1A2R2", callback_trace_);
+}
+
+// Without registering a callback first, none should be removed.
+TEST_F(KeyPressHandlerManagerTest, NoRemove) {
+ KeyPressHandlerManager manager(&delegate_);
+ manager.RemoveKeyPressHandler();
+ EXPECT_EQ(std::string(), callback_trace_);
+}
+
+// Adding one callback twice should be a no-op.
+TEST_F(KeyPressHandlerManagerTest, AddTwice) {
+ KeyPressHandlerManager manager(&delegate_);
+ auto callback = CallbackForName("1");
+ manager.RegisterKeyPressHandler(callback);
+ manager.RegisterKeyPressHandler(callback);
+ manager.RemoveKeyPressHandler();
+ EXPECT_EQ("A1R1", callback_trace_);
+}
+
+// Removing one callback twice should be a no-op.
+TEST_F(KeyPressHandlerManagerTest, RemoveTwice) {
+ KeyPressHandlerManager manager(&delegate_);
+ manager.RegisterKeyPressHandler(CallbackForName("1"));
+ manager.RemoveKeyPressHandler();
+ manager.RemoveKeyPressHandler();
+ EXPECT_EQ("A1R1", callback_trace_);
+}
+
+} // namespace autofill
diff --git a/chromium/components/autofill/core/browser/autofill_external_delegate.cc b/chromium/components/autofill/core/browser/autofill_external_delegate.cc
index 5853a8de1d7..3db7f0fd00b 100644
--- a/chromium/components/autofill/core/browser/autofill_external_delegate.cc
+++ b/chromium/components/autofill/core/browser/autofill_external_delegate.cc
@@ -285,6 +285,10 @@ bool AutofillExternalDelegate::IsCreditCardPopup() {
return is_credit_card_popup_;
}
+AutofillDriver* AutofillExternalDelegate::GetAutofillDriver() {
+ return driver_;
+}
+
void AutofillExternalDelegate::Reset() {
manager_->client()->HideAutofillPopup();
}
diff --git a/chromium/components/autofill/core/browser/autofill_external_delegate.h b/chromium/components/autofill/core/browser/autofill_external_delegate.h
index 6a9807a0505..a5984209fa9 100644
--- a/chromium/components/autofill/core/browser/autofill_external_delegate.h
+++ b/chromium/components/autofill/core/browser/autofill_external_delegate.h
@@ -54,6 +54,7 @@ class AutofillExternalDelegate : public AutofillPopupDelegate {
// Returns false for all popups prior to |onQuery|, true for credit card
// popups after call to |onQuery|.
bool IsCreditCardPopup() override;
+ AutofillDriver* GetAutofillDriver() override;
// Records and associates a query_id with web form data. Called
// when the renderer posts an Autofill query to the browser. |bounds|
diff --git a/chromium/components/autofill/core/browser/autofill_popup_delegate.h b/chromium/components/autofill/core/browser/autofill_popup_delegate.h
index 5a864242755..6febbf91cfc 100644
--- a/chromium/components/autofill/core/browser/autofill_popup_delegate.h
+++ b/chromium/components/autofill/core/browser/autofill_popup_delegate.h
@@ -9,6 +9,8 @@
namespace autofill {
+class AutofillDriver;
+
// An interface for interaction with AutofillPopupController. Will be notified
// of events by the controller.
class AutofillPopupDelegate {
@@ -46,6 +48,9 @@ class AutofillPopupDelegate {
// Returns true if popup is for credit card.
virtual bool IsCreditCardPopup() = 0;
+
+ // Returns the associated AutofillDriver.
+ virtual AutofillDriver* GetAutofillDriver() = 0;
};
} // namespace autofill
diff --git a/chromium/components/display_compositor/buffer_queue.cc b/chromium/components/display_compositor/buffer_queue.cc
index afb40e1a491..60b50d7a8bb 100644
--- a/chromium/components/display_compositor/buffer_queue.cc
+++ b/chromium/components/display_compositor/buffer_queue.cc
@@ -183,13 +183,32 @@ std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::RecreateBuffer(
}
void BufferQueue::PageFlipComplete() {
- DCHECK(!in_flight_surfaces_.empty());
+ // Early out when no surface is in-flight. This can happen when using
+ // overlays and page flipping without changing the primary plane.
+ if (in_flight_surfaces_.empty())
+ return;
if (displayed_surface_)
available_surfaces_.push_back(std::move(displayed_surface_));
displayed_surface_ = std::move(in_flight_surfaces_.front());
in_flight_surfaces_.pop_front();
}
+uint32_t BufferQueue::GetCurrentTextureId() const {
+ // Return current surface texture if bound.
+ if (current_surface_)
+ return current_surface_->texture;
+
+ // Return in-flight or displayed surface texture if no surface is
+ // currently bound. This can happen when using overlays and surface
+ // damage is empty.
+ if (!in_flight_surfaces_.empty())
+ return in_flight_surfaces_.back()->texture;
+ if (displayed_surface_)
+ return displayed_surface_->texture;
+
+ return 0;
+}
+
void BufferQueue::FreeAllSurfaces() {
displayed_surface_.reset();
current_surface_.reset();
diff --git a/chromium/components/display_compositor/buffer_queue.h b/chromium/components/display_compositor/buffer_queue.h
index 7ac212e1be7..c6bedbb1757 100644
--- a/chromium/components/display_compositor/buffer_queue.h
+++ b/chromium/components/display_compositor/buffer_queue.h
@@ -60,12 +60,9 @@ class DISPLAY_COMPOSITOR_EXPORT BufferQueue {
float scale_factor,
const gfx::ColorSpace& color_space,
bool use_stencil);
-
void RecreateBuffers();
+ uint32_t GetCurrentTextureId() const;
- uint32_t current_texture_id() const {
- return current_surface_ ? current_surface_->texture : 0;
- }
uint32_t fbo() const { return fbo_; }
uint32_t internal_format() const { return internal_format_; }
diff --git a/chromium/components/exo/pointer.cc b/chromium/components/exo/pointer.cc
index 61442ed0608..1697f5c34dc 100644
--- a/chromium/components/exo/pointer.cc
+++ b/chromium/components/exo/pointer.cc
@@ -380,8 +380,12 @@ void Pointer::OnCursorCaptured(const gfx::Point& hotspot,
void Pointer::UpdateCursor() {
DCHECK(focus_);
+ aura::Window* root_window = focus_->window()->GetRootWindow();
+ if (!root_window)
+ return;
+
aura::client::CursorClient* cursor_client =
- aura::client::GetCursorClient(focus_->window()->GetRootWindow());
+ aura::client::GetCursorClient(root_window);
if (cursor_client)
cursor_client->SetCursor(cursor_);
}
diff --git a/chromium/components/exo/shell_surface.cc b/chromium/components/exo/shell_surface.cc
index 97c18fee52e..57460ab9654 100644
--- a/chromium/components/exo/shell_surface.cc
+++ b/chromium/components/exo/shell_surface.cc
@@ -596,7 +596,7 @@ void ShellSurface::SetGeometry(const gfx::Rect& geometry) {
void ShellSurface::SetRectangularShadowEnabled(bool enabled) {
TRACE_EVENT1("exo", "ShellSurface::SetRectangularShadowEnabled", "enabled",
enabled);
- shadow_underlay_in_surface_ = false;
+ pending_shadow_underlay_in_surface_ = false;
shadow_enabled_ = enabled;
}
@@ -604,7 +604,7 @@ void ShellSurface::SetRectangularShadow_DEPRECATED(
const gfx::Rect& content_bounds) {
TRACE_EVENT1("exo", "ShellSurface::SetRectangularShadow_DEPRECATED",
"content_bounds", content_bounds.ToString());
- shadow_underlay_in_surface_ = false;
+ pending_shadow_underlay_in_surface_ = false;
shadow_content_bounds_ = content_bounds;
shadow_enabled_ = !content_bounds.IsEmpty();
}
@@ -613,7 +613,7 @@ void ShellSurface::SetRectangularSurfaceShadow(
const gfx::Rect& content_bounds) {
TRACE_EVENT1("exo", "ShellSurface::SetRectangularSurfaceShadow",
"content_bounds", content_bounds.ToString());
- shadow_underlay_in_surface_ = true;
+ pending_shadow_underlay_in_surface_ = true;
shadow_content_bounds_ = content_bounds;
shadow_enabled_ = !content_bounds.IsEmpty();
}
@@ -847,13 +847,26 @@ base::string16 ShellSurface::GetWindowTitle() const {
return title_;
}
+void ShellSurface::SaveWindowPlacement(const gfx::Rect& bounds,
+ ui::WindowShowState show_state) {
+ if (bounds_mode_ != BoundsMode::CLIENT)
+ WidgetDelegate::SaveWindowPlacement(bounds, show_state);
+}
+
+bool ShellSurface::GetSavedWindowPlacement(
+ const views::Widget* widget,
+ gfx::Rect* bounds,
+ ui::WindowShowState* show_state) const {
+ if (bounds_mode_ != BoundsMode::CLIENT)
+ return WidgetDelegate::GetSavedWindowPlacement(widget, bounds, show_state);
+ return false;
+}
+
void ShellSurface::WindowClosing() {
if (resizer_)
EndDrag(true /* revert */);
SetEnabled(false);
widget_ = nullptr;
- shadow_overlay_ = nullptr;
- shadow_underlay_ = nullptr;
}
views::Widget* ShellSurface::GetWidget() {
@@ -1143,8 +1156,7 @@ void ShellSurface::CreateShellSurfaceWidget(ui::WindowShowState show_state) {
// Allow the client to request bounds that do not fill the entire work area
// when maximized, or the entire display when fullscreen.
- window_state->set_allow_set_bounds_in_maximized(
- bounds_mode_ == BoundsMode::CLIENT);
+ window_state->set_allow_set_bounds_direct(bounds_mode_ == BoundsMode::CLIENT);
// Notify client of initial state if different than normal.
if (window_state->GetStateType() != ash::wm::WINDOW_STATE_TYPE_NORMAL &&
@@ -1388,7 +1400,7 @@ void ShellSurface::UpdateWidgetBounds() {
ash::wm::WindowState* window_state =
ash::wm::GetWindowState(widget_->GetNativeWindow());
if (window_state->IsMaximizedOrFullscreenOrPinned() &&
- !window_state->allow_set_bounds_in_maximized()) {
+ !window_state->allow_set_bounds_direct()) {
return;
}
@@ -1449,8 +1461,23 @@ void ShellSurface::UpdateSurfaceBounds() {
void ShellSurface::UpdateShadow() {
if (!widget_ || !surface_)
return;
+ if (shadow_underlay_in_surface_ != pending_shadow_underlay_in_surface_) {
+ shadow_underlay_in_surface_ = pending_shadow_underlay_in_surface_;
+ shadow_overlay_.reset();
+ shadow_underlay_.reset();
+ }
+
aura::Window* window = widget_->GetNativeWindow();
- if (!shadow_enabled_) {
+
+ bool underlay_capture_events =
+ WMHelper::GetInstance()->IsSpokenFeedbackEnabled() && widget_->IsActive();
+ bool black_background_enabled =
+ ((widget_->IsFullscreen() || widget_->IsMaximized()) ||
+ underlay_capture_events) &&
+ ash::wm::GetWindowState(window)->allow_set_bounds_direct() &&
+ window->layer()->GetTargetTransform().IsIdentity();
+
+ if (!shadow_enabled_ && !black_background_enabled) {
wm::SetShadowElevation(window, wm::ShadowElevation::NONE);
if (shadow_underlay_)
shadow_underlay_->Hide();
@@ -1497,11 +1524,12 @@ void ShellSurface::UpdateShadow() {
// Always create and show the underlay, even in maximized/fullscreen.
if (!shadow_underlay_) {
- shadow_underlay_ = new aura::Window(nullptr);
+ shadow_underlay_ = base::MakeUnique<aura::Window>(nullptr);
+ shadow_underlay_->set_owned_by_parent(false);
shadow_underlay_event_handler_ =
base::MakeUnique<ShadowUnderlayEventHandler>();
shadow_underlay_->SetTargetHandler(shadow_underlay_event_handler_.get());
- DCHECK(shadow_underlay_->owned_by_parent());
+ DCHECK(!shadow_underlay_->owned_by_parent());
// Ensure the background area inside the shadow is solid black.
// Clients that provide translucent contents should not be using
// rectangular shadows as this method requires opaque contents to
@@ -1510,18 +1538,14 @@ void ShellSurface::UpdateShadow() {
shadow_underlay_->layer()->SetColor(SK_ColorBLACK);
DCHECK(shadow_underlay_->layer()->fills_bounds_opaquely());
if (shadow_underlay_in_surface_) {
- surface_->window()->AddChild(shadow_underlay_);
- surface_->window()->StackChildAtBottom(shadow_underlay_);
+ surface_->window()->AddChild(shadow_underlay());
+ surface_->window()->StackChildAtBottom(shadow_underlay());
} else {
- window->AddChild(shadow_underlay_);
- window->StackChildAtBottom(shadow_underlay_);
+ window->AddChild(shadow_underlay());
+ window->StackChildAtBottom(shadow_underlay());
}
}
- bool underlay_capture_events =
- WMHelper::GetInstance()->IsSpokenFeedbackEnabled() &&
- widget_->IsActive();
-
float shadow_underlay_opacity = shadow_background_opacity_;
// Put the black background layer behind the window if
@@ -1531,10 +1555,7 @@ void ShellSurface::UpdateShadow() {
// thus the background can be visible).
// 3) the window has no transform (the transformed background may
// not cover the entire background, e.g. overview mode).
- if ((widget_->IsFullscreen() || widget_->IsMaximized() ||
- underlay_capture_events) &&
- ash::wm::GetWindowState(window)->allow_set_bounds_in_maximized() &&
- window->layer()->GetTargetTransform().IsIdentity()) {
+ if (black_background_enabled) {
if (shadow_underlay_in_surface_) {
shadow_underlay_bounds = gfx::Rect(surface_->window()->bounds().size());
} else {
@@ -1558,6 +1579,9 @@ void ShellSurface::UpdateShadow() {
shadow_underlay_->SetBounds(shadow_underlay_bounds);
+ if (!shadow_underlay_->IsVisible())
+ shadow_underlay_->Show();
+
// TODO(oshima): Setting to the same value should be no-op.
// crbug.com/642223.
if (shadow_underlay_opacity !=
@@ -1565,25 +1589,24 @@ void ShellSurface::UpdateShadow() {
shadow_underlay_->layer()->SetOpacity(shadow_underlay_opacity);
}
- shadow_underlay_->Show();
-
wm::Shadow* shadow = wm::ShadowController::GetShadowForWindow(window);
// Maximized/Fullscreen window does not create a shadow.
if (!shadow)
return;
if (!shadow_overlay_) {
- shadow_overlay_ = new aura::Window(nullptr);
- DCHECK(shadow_overlay_->owned_by_parent());
+ shadow_overlay_ = base::MakeUnique<aura::Window>(nullptr);
+ shadow_overlay_->set_owned_by_parent(false);
+ DCHECK(!shadow_overlay_->owned_by_parent());
shadow_overlay_->set_ignore_events(true);
shadow_overlay_->Init(ui::LAYER_NOT_DRAWN);
shadow_overlay_->layer()->Add(shadow->layer());
- window->AddChild(shadow_overlay_);
+ window->AddChild(shadow_overlay());
if (shadow_underlay_in_surface_) {
- window->StackChildBelow(shadow_overlay_, surface_->window());
+ window->StackChildBelow(shadow_overlay(), surface_->window());
} else {
- window->StackChildAbove(shadow_overlay_, shadow_underlay_);
+ window->StackChildAbove(shadow_overlay(), shadow_underlay());
}
shadow_overlay_->Show();
}
diff --git a/chromium/components/exo/shell_surface.h b/chromium/components/exo/shell_surface.h
index d621a988607..0bf2b7e916f 100644
--- a/chromium/components/exo/shell_surface.h
+++ b/chromium/components/exo/shell_surface.h
@@ -220,6 +220,11 @@ class ShellSurface : public SurfaceDelegate,
bool CanMaximize() const override;
bool CanMinimize() const override;
base::string16 GetWindowTitle() const override;
+ void SaveWindowPlacement(const gfx::Rect& bounds,
+ ui::WindowShowState show_state) override;
+ bool GetSavedWindowPlacement(const views::Widget* widget,
+ gfx::Rect* bounds,
+ ui::WindowShowState* show_state) const override;
void WindowClosing() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
@@ -260,8 +265,8 @@ class ShellSurface : public SurfaceDelegate,
// Overridden from ui::AcceleratorTarget:
bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
- aura::Window* shadow_overlay() { return shadow_overlay_; }
- aura::Window* shadow_underlay() { return shadow_underlay_; }
+ aura::Window* shadow_overlay() { return shadow_overlay_.get(); }
+ aura::Window* shadow_underlay() { return shadow_underlay_.get(); }
Surface* surface_for_testing() { return surface_; }
@@ -342,8 +347,8 @@ class ShellSurface : public SurfaceDelegate,
gfx::Vector2d pending_origin_offset_accumulator_;
int resize_component_ = HTCAPTION; // HT constant (see ui/base/hit_test.h)
int pending_resize_component_ = HTCAPTION;
- aura::Window* shadow_overlay_ = nullptr;
- aura::Window* shadow_underlay_ = nullptr;
+ std::unique_ptr<aura::Window> shadow_overlay_;
+ std::unique_ptr<aura::Window> shadow_underlay_;
std::unique_ptr<ui::EventHandler> shadow_underlay_event_handler_;
gfx::Rect shadow_content_bounds_;
float shadow_background_opacity_ = 1.0;
@@ -353,6 +358,7 @@ class ShellSurface : public SurfaceDelegate,
int top_inset_height_ = 0;
int pending_top_inset_height_ = 0;
bool shadow_underlay_in_surface_ = true;
+ bool pending_shadow_underlay_in_surface_ = true;
bool system_modal_ = false;
DISALLOW_COPY_AND_ASSIGN(ShellSurface);
diff --git a/chromium/components/exo/shell_surface_unittest.cc b/chromium/components/exo/shell_surface_unittest.cc
index 5e300222acb..b8dbca007cd 100644
--- a/chromium/components/exo/shell_surface_unittest.cc
+++ b/chromium/components/exo/shell_surface_unittest.cc
@@ -829,6 +829,20 @@ TEST_F(ShellSurfaceTest, ShadowStartMaximized) {
ASSERT_TRUE(shell_surface->shadow_underlay());
EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible());
+ shell_surface->SetRectangularSurfaceShadow(gfx::Rect(0, 0, 0, 0));
+ // Underlay should be created even without shadow.
+ ASSERT_TRUE(shell_surface->shadow_underlay());
+ EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible());
+ shell_surface->SetRectangularShadowEnabled(false);
+ surface->Commit();
+ // Underlay should be created even without shadow.
+ ASSERT_TRUE(shell_surface->shadow_underlay());
+ EXPECT_TRUE(shell_surface->shadow_underlay()->IsVisible());
+
+ shell_surface->SetRectangularShadowEnabled(true);
+ shell_surface->SetRectangularSurfaceShadow(gfx::Rect(10, 10, 100, 100));
+ surface->Commit();
+
// Restore the window and make sure the shadow is created, visible and
// has the latest bounds.
widget->Restore();
@@ -1011,5 +1025,41 @@ TEST_F(ShellSurfaceTest, SpokenFeedbackFullscreenBackground) {
EXPECT_EQ(shadow_bounds, shell_surface2.shadow_underlay()->bounds());
}
+// Make sure that a surface shell started in maximize creates deprecated
+// shadow correctly.
+TEST_F(ShellSurfaceTest,
+ StartMaximizedThenMinimizeWithSetRectangularShadow_DEPRECATED) {
+ const gfx::Size display_size =
+ display::Screen::GetScreen()->GetPrimaryDisplay().size();
+ const gfx::Size buffer_size(display_size);
+ std::unique_ptr<Buffer> buffer(
+ new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
+ std::unique_ptr<Surface> surface(new Surface);
+ std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(
+ surface.get(), nullptr, ShellSurface::BoundsMode::CLIENT, gfx::Point(),
+ true, false, ash::kShellWindowId_DefaultContainer));
+
+ // Start in maximized.
+ shell_surface->Maximize();
+ surface->Attach(buffer.get());
+ surface->Commit();
+
+ gfx::Rect shadow_bounds =
+ display::Screen::GetScreen()->GetPrimaryDisplay().bounds();
+ shell_surface->SetGeometry(shadow_bounds);
+ shell_surface->SetRectangularShadow_DEPRECATED(shadow_bounds);
+ surface->Commit();
+ EXPECT_EQ(shadow_bounds,
+ shell_surface->GetWidget()->GetWindowBoundsInScreen());
+ ASSERT_EQ(shadow_bounds, shell_surface->shadow_underlay()->bounds());
+ EXPECT_EQ(display::Screen::GetScreen()->GetPrimaryDisplay().size(),
+ shell_surface->surface_for_testing()->window()->bounds().size());
+
+ ash::wm::WMEvent minimize_event(ash::wm::WM_EVENT_MINIMIZE);
+ ash::WmWindow* window =
+ ash::WmWindow::Get(shell_surface->GetWidget()->GetNativeWindow());
+ window->GetWindowState()->OnWMEvent(&minimize_event);
+}
+
} // namespace
} // namespace exo
diff --git a/chromium/components/exo/touch.cc b/chromium/components/exo/touch.cc
index fa2de6dd507..2ebdbb5950d 100644
--- a/chromium/components/exo/touch.cc
+++ b/chromium/components/exo/touch.cc
@@ -147,8 +147,13 @@ void Touch::OnTouchEvent(ui::TouchEvent* event) {
return;
}
if (send_details) {
- delegate_->OnTouchShape(touch_pointer_id, event->pointer_details().radius_x,
- event->pointer_details().radius_y);
+ // Some devices do not report radius_y/minor. We assume a circular shape
+ // in that case.
+ float major = event->pointer_details().radius_x * 2.0f;
+ float minor = event->pointer_details().radius_y * 2.0f;
+ if (!minor)
+ minor = major;
+ delegate_->OnTouchShape(touch_pointer_id, major, minor);
if (stylus_delegate_ &&
event->pointer_details().pointer_type !=
diff --git a/chromium/components/exo/touch_unittest.cc b/chromium/components/exo/touch_unittest.cc
index 18917fb7544..1384229ac62 100644
--- a/chromium/components/exo/touch_unittest.cc
+++ b/chromium/components/exo/touch_unittest.cc
@@ -164,23 +164,24 @@ TEST_F(TouchTest, OnTouchShape) {
testing::InSequence sequence;
EXPECT_CALL(delegate, OnTouchDown(window.surface(), testing::_, testing::_,
gfx::PointF()));
- EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1));
+ EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10));
EXPECT_CALL(delegate, OnTouchFrame());
EXPECT_CALL(delegate,
OnTouchMotion(testing::_, testing::_, gfx::PointF(5, 5)));
- EXPECT_CALL(delegate, OnTouchShape(testing::_, 1, 1));
+ EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10));
EXPECT_CALL(delegate, OnTouchFrame());
EXPECT_CALL(delegate,
OnTouchMotion(testing::_, testing::_, gfx::PointF(10, 10)));
- EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 10));
+ EXPECT_CALL(delegate, OnTouchShape(testing::_, 20, 20));
EXPECT_CALL(delegate, OnTouchFrame());
EXPECT_CALL(delegate, OnTouchUp(testing::_, testing::_));
EXPECT_CALL(delegate, OnTouchFrame());
}
generator.set_current_location(window.origin());
+ generator.SetTouchRadius(10, 5);
generator.PressTouch();
generator.MoveTouchBy(5, 5);
- generator.SetTouchRadius(20, 10);
+ generator.SetTouchRadius(10, 0); // Minor not supported
generator.MoveTouchBy(5, 5);
generator.ReleaseTouch();
EXPECT_CALL(delegate, OnTouchDestroying(touch.get()));
diff --git a/chromium/components/exo/wayland/server.cc b/chromium/components/exo/wayland/server.cc
index 0abc727db2a..0faf554a77f 100644
--- a/chromium/components/exo/wayland/server.cc
+++ b/chromium/components/exo/wayland/server.cc
@@ -157,6 +157,10 @@ DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasSecurityKey, false);
// associated with window.
DEFINE_UI_CLASS_PROPERTY_KEY(bool, kSurfaceHasBlendingKey, false);
+// A property key containing a boolean set to true whether the current
+// OnWindowActivated invocation should be ignored.
+DEFINE_UI_CLASS_PROPERTY_KEY(bool, kIgnoreWindowActivated, false);
+
wl_resource* GetSurfaceResource(Surface* surface) {
return surface->GetProperty(kSurfaceResourceKey);
}
@@ -1925,7 +1929,14 @@ void remote_surface_set_top_inset(wl_client* client,
void remote_surface_activate(wl_client* client,
wl_resource* resource,
uint32_t serial) {
+ ShellSurface* shell_surface = GetUserDataAs<ShellSurface>(resource);
+ aura::Window* window = shell_surface->GetWidget()->GetNativeWindow();
+
+ // Activation on Aura is synchronous, so activation callbacks will be called
+ // before the flag is reset.
+ window->SetProperty(kIgnoreWindowActivated, true);
GetUserDataAs<ShellSurface>(resource)->Activate();
+ window->ClearProperty(kIgnoreWindowActivated);
}
void remote_surface_maximize(wl_client* client, wl_resource* resource) {
@@ -2106,6 +2117,13 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver,
// Overridden from WMHelper::ActivationObserver:
void OnWindowActivated(aura::Window* gained_active,
aura::Window* lost_active) override {
+ // If the origin of activation is Wayland client, then assume it's been
+ // already activated on the client side, so do not notify about the
+ // activation. It means that zcr_remote_shell_v1_send_activated is used
+ // only to notify about activations originating in Aura.
+ if (gained_active && gained_active->GetProperty(kIgnoreWindowActivated))
+ return;
+
SendActivated(gained_active, lost_active);
}
@@ -2934,7 +2952,7 @@ void seat_release(wl_client* client, wl_resource* resource) {
const struct wl_seat_interface seat_implementation = {
seat_get_pointer, seat_get_keyboard, seat_get_touch, seat_release};
-const uint32_t seat_version = 5;
+const uint32_t seat_version = 6;
void bind_seat(wl_client* client, void* data, uint32_t version, uint32_t id) {
wl_resource* resource = wl_resource_create(
diff --git a/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc b/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc
index 37836088129..00cc67daf40 100644
--- a/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc
+++ b/chromium/components/offline_pages/core/downloads/download_notifying_observer.cc
@@ -67,9 +67,8 @@ void DownloadNotifyingObserver::OnChanged(const SavePageRequest& request) {
void DownloadNotifyingObserver::OnNetworkProgress(
const SavePageRequest& request,
int64_t received_bytes) {
- DownloadUIItem item(request);
- item.download_progress_bytes = received_bytes;
- notifier_->NotifyDownloadProgress(item);
+ // TODO(dimich): Enable this back in M59. See bug 704049 for more info and
+ // what was temporarily (for M58) reverted.
}
void DownloadNotifyingObserver::OnCompleted(
diff --git a/chromium/components/password_manager/content/browser/content_password_manager_driver.cc b/chromium/components/password_manager/content/browser/content_password_manager_driver.cc
index 0c26839db26..26695612a11 100644
--- a/chromium/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/chromium/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -155,6 +155,11 @@ void ContentPasswordManagerDriver::AllowToRunFormClassifier() {
GetPasswordGenerationAgent()->AllowToRunFormClassifier();
}
+autofill::AutofillDriver* ContentPasswordManagerDriver::GetAutofillDriver() {
+ return autofill::ContentAutofillDriver::GetForRenderFrameHost(
+ render_frame_host_);
+}
+
PasswordGenerationManager*
ContentPasswordManagerDriver::GetPasswordGenerationManager() {
return &password_generation_manager_;
diff --git a/chromium/components/password_manager/content/browser/content_password_manager_driver.h b/chromium/components/password_manager/content/browser/content_password_manager_driver.h
index eb6d2881dcf..a1c2168995b 100644
--- a/chromium/components/password_manager/content/browser/content_password_manager_driver.h
+++ b/chromium/components/password_manager/content/browser/content_password_manager_driver.h
@@ -77,6 +77,7 @@ class ContentPasswordManagerDriver
void GeneratePassword() override;
void SendLoggingAvailability() override;
void AllowToRunFormClassifier() override;
+ autofill::AutofillDriver* GetAutofillDriver() override;
PasswordGenerationManager* GetPasswordGenerationManager() override;
PasswordManager* GetPasswordManager() override;
diff --git a/chromium/components/password_manager/core/browser/password_autofill_manager.cc b/chromium/components/password_manager/core/browser/password_autofill_manager.cc
index 091b2062c2e..a242d655fc0 100644
--- a/chromium/components/password_manager/core/browser/password_autofill_manager.cc
+++ b/chromium/components/password_manager/core/browser/password_autofill_manager.cc
@@ -17,7 +17,7 @@
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
-#include "components/autofill/core/browser/autofill_driver.h"
+#include "components/autofill/core/browser/autofill_client.h"
#include "components/autofill/core/browser/autofill_experiments.h"
#include "components/autofill/core/browser/popup_item_ids.h"
#include "components/autofill/core/browser/suggestion.h"
@@ -138,8 +138,7 @@ PasswordAutofillManager::PasswordAutofillManager(
autofill::AutofillClient* autofill_client)
: password_manager_driver_(password_manager_driver),
autofill_client_(autofill_client),
- weak_ptr_factory_(this) {
-}
+ weak_ptr_factory_(this) {}
PasswordAutofillManager::~PasswordAutofillManager() {
}
@@ -353,6 +352,10 @@ bool PasswordAutofillManager::IsCreditCardPopup() {
return false;
}
+autofill::AutofillDriver* PasswordAutofillManager::GetAutofillDriver() {
+ return password_manager_driver_->GetAutofillDriver();
+}
+
////////////////////////////////////////////////////////////////////////////////
// PasswordAutofillManager, private:
diff --git a/chromium/components/password_manager/core/browser/password_autofill_manager.h b/chromium/components/password_manager/core/browser/password_autofill_manager.h
index 56a5b5c62ba..737bc926e3a 100644
--- a/chromium/components/password_manager/core/browser/password_autofill_manager.h
+++ b/chromium/components/password_manager/core/browser/password_autofill_manager.h
@@ -43,6 +43,7 @@ class PasswordAutofillManager : public autofill::AutofillPopupDelegate {
bool RemoveSuggestion(const base::string16& value, int identifier) override;
void ClearPreviewedForm() override;
bool IsCreditCardPopup() override;
+ autofill::AutofillDriver* GetAutofillDriver() override;
// Invoked when a password mapping is added.
void OnAddPasswordFormMapping(
diff --git a/chromium/components/password_manager/core/browser/password_manager_driver.h b/chromium/components/password_manager/core/browser/password_manager_driver.h
index 8ec6b5e8261..028bf7273ac 100644
--- a/chromium/components/password_manager/core/browser/password_manager_driver.h
+++ b/chromium/components/password_manager/core/browser/password_manager_driver.h
@@ -14,6 +14,7 @@
#include "components/autofill/core/common/password_form_field_prediction_map.h"
namespace autofill {
+class AutofillDriver;
struct FormData;
struct PasswordForm;
struct PasswordFormGenerationData;
@@ -97,6 +98,9 @@ class PasswordManagerDriver
// Allows the form classifier to find generation fields.
virtual void AllowToRunFormClassifier() {}
+ // Return the associated AutofillDriver.
+ virtual autofill::AutofillDriver* GetAutofillDriver() = 0;
+
private:
DISALLOW_COPY_AND_ASSIGN(PasswordManagerDriver);
};
diff --git a/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc b/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc
index ba19e68c086..18b7dc56a7c 100644
--- a/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc
+++ b/chromium/components/password_manager/core/browser/stub_password_manager_driver.cc
@@ -56,4 +56,8 @@ StubPasswordManagerDriver::GetPasswordAutofillManager() {
return nullptr;
}
+autofill::AutofillDriver* StubPasswordManagerDriver::GetAutofillDriver() {
+ return nullptr;
+}
+
} // namespace password_manager
diff --git a/chromium/components/password_manager/core/browser/stub_password_manager_driver.h b/chromium/components/password_manager/core/browser/stub_password_manager_driver.h
index 88d1ff38b28..f7a1703d1d9 100644
--- a/chromium/components/password_manager/core/browser/stub_password_manager_driver.h
+++ b/chromium/components/password_manager/core/browser/stub_password_manager_driver.h
@@ -36,6 +36,7 @@ class StubPasswordManagerDriver : public PasswordManagerDriver {
PasswordGenerationManager* GetPasswordGenerationManager() override;
PasswordManager* GetPasswordManager() override;
PasswordAutofillManager* GetPasswordAutofillManager() override;
+ autofill::AutofillDriver* GetAutofillDriver() override;
private:
DISALLOW_COPY_AND_ASSIGN(StubPasswordManagerDriver);
diff --git a/chromium/components/ssl_errors/error_classification.cc b/chromium/components/ssl_errors/error_classification.cc
index 572b5729528..52827fe1565 100644
--- a/chromium/components/ssl_errors/error_classification.cc
+++ b/chromium/components/ssl_errors/error_classification.cc
@@ -38,32 +38,13 @@ using base::TimeDelta;
namespace ssl_errors {
namespace {
-// Events for UMA. Do not reorder or change!
-enum SSLInterstitialCause {
- CLOCK_PAST,
- CLOCK_FUTURE,
- WWW_SUBDOMAIN_MATCH,
- SUBDOMAIN_MATCH,
- SUBDOMAIN_INVERSE_MATCH,
- SUBDOMAIN_OUTSIDE_WILDCARD,
- HOST_NAME_NOT_KNOWN_TLD,
- LIKELY_MULTI_TENANT_HOSTING,
- LOCALHOST,
- PRIVATE_URL,
- AUTHORITY_ERROR_CAPTIVE_PORTAL, // Deprecated in M47.
- SELF_SIGNED,
- EXPIRED_RECENTLY,
- LIKELY_SAME_DOMAIN,
- UNUSED_INTERSTITIAL_CAUSE_ENTRY,
-};
-
void RecordSSLInterstitialCause(bool overridable, SSLInterstitialCause event) {
if (overridable) {
UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.cause.overridable", event,
- UNUSED_INTERSTITIAL_CAUSE_ENTRY);
+ SSL_INTERSTITIAL_CAUSE_MAX);
} else {
UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.cause.nonoverridable", event,
- UNUSED_INTERSTITIAL_CAUSE_ENTRY);
+ SSL_INTERSTITIAL_CAUSE_MAX);
}
}
@@ -109,7 +90,7 @@ bool IsWWWSubDomainMatch(const GURL& request_url,
const net::X509Certificate& cert) {
std::string www_host;
std::vector<std::string> dns_names;
- cert.GetDNSNames(&dns_names);
+ cert.GetSubjectAltName(&dns_names, nullptr);
return GetWWWSubDomainMatch(request_url, dns_names, &www_host);
}
@@ -148,24 +129,28 @@ void RecordUMAStatistics(bool overridable,
}
case ssl_errors::ErrorInfo::CERT_COMMON_NAME_INVALID: {
std::string host_name = request_url.host();
+ std::vector<std::string> dns_names;
+ cert.GetSubjectAltName(&dns_names, nullptr);
+ std::vector<HostnameTokens> dns_name_tokens =
+ GetTokenizedDNSNames(dns_names);
+
+ if (dns_names.empty())
+ RecordSSLInterstitialCause(overridable, NO_SUBJECT_ALT_NAME);
+
if (HostNameHasKnownTLD(host_name)) {
HostnameTokens host_name_tokens = Tokenize(host_name);
if (IsWWWSubDomainMatch(request_url, cert))
- RecordSSLInterstitialCause(overridable, WWW_SUBDOMAIN_MATCH);
+ RecordSSLInterstitialCause(overridable, WWW_SUBDOMAIN_MATCH2);
if (IsSubDomainOutsideWildcard(request_url, cert))
- RecordSSLInterstitialCause(overridable, SUBDOMAIN_OUTSIDE_WILDCARD);
- std::vector<std::string> dns_names;
- cert.GetDNSNames(&dns_names);
- std::vector<HostnameTokens> dns_name_tokens =
- GetTokenizedDNSNames(dns_names);
+ RecordSSLInterstitialCause(overridable, SUBDOMAIN_OUTSIDE_WILDCARD2);
if (NameUnderAnyNames(host_name_tokens, dns_name_tokens))
- RecordSSLInterstitialCause(overridable, SUBDOMAIN_MATCH);
+ RecordSSLInterstitialCause(overridable, SUBDOMAIN_MATCH2);
if (AnyNamesUnderName(dns_name_tokens, host_name_tokens))
- RecordSSLInterstitialCause(overridable, SUBDOMAIN_INVERSE_MATCH);
+ RecordSSLInterstitialCause(overridable, SUBDOMAIN_INVERSE_MATCH2);
if (IsCertLikelyFromMultiTenantHosting(request_url, cert))
- RecordSSLInterstitialCause(overridable, LIKELY_MULTI_TENANT_HOSTING);
+ RecordSSLInterstitialCause(overridable, LIKELY_MULTI_TENANT_HOSTING2);
if (IsCertLikelyFromSameDomain(request_url, cert))
- RecordSSLInterstitialCause(overridable, LIKELY_SAME_DOMAIN);
+ RecordSSLInterstitialCause(overridable, LIKELY_SAME_DOMAIN2);
} else {
RecordSSLInterstitialCause(overridable, HOST_NAME_NOT_KNOWN_TLD);
}
@@ -382,7 +367,7 @@ bool IsSubDomainOutsideWildcard(const GURL& request_url,
std::string host_name = request_url.host();
HostnameTokens host_name_tokens = Tokenize(host_name);
std::vector<std::string> dns_names;
- cert.GetDNSNames(&dns_names);
+ cert.GetSubjectAltName(&dns_names, nullptr);
bool result = false;
// This method requires that the host name be longer than the dns name on
@@ -410,7 +395,7 @@ bool IsCertLikelyFromMultiTenantHosting(const GURL& request_url,
std::string host_name = request_url.host();
std::vector<std::string> dns_names;
std::vector<std::string> dns_names_domain;
- cert.GetDNSNames(&dns_names);
+ cert.GetSubjectAltName(&dns_names, nullptr);
size_t dns_names_size = dns_names.size();
// If there is only 1 DNS name then it is definitely not a shared certificate.
@@ -457,7 +442,9 @@ bool IsCertLikelyFromSameDomain(const GURL& request_url,
const net::X509Certificate& cert) {
std::string host_name = request_url.host();
std::vector<std::string> dns_names;
- cert.GetDNSNames(&dns_names);
+ cert.GetSubjectAltName(&dns_names, nullptr);
+ if (dns_names.empty())
+ return false;
dns_names.push_back(host_name);
std::vector<std::string> dns_names_domain;
diff --git a/chromium/components/ssl_errors/error_classification.h b/chromium/components/ssl_errors/error_classification.h
index b8c472df669..0dea46560cc 100644
--- a/chromium/components/ssl_errors/error_classification.h
+++ b/chromium/components/ssl_errors/error_classification.h
@@ -28,6 +28,33 @@ typedef std::vector<std::string> HostnameTokens;
// Methods for identifying specific error causes. ------------------------------
+// These values are written to logs. New enum values can be added, but existing
+// enums must never be renumbered or deleted and reused.
+enum SSLInterstitialCause {
+ CLOCK_PAST = 0,
+ CLOCK_FUTURE = 1,
+ WWW_SUBDOMAIN_MATCH = 2, // Deprecated in M59.
+ SUBDOMAIN_MATCH = 3, // Deprecated in M59.
+ SUBDOMAIN_INVERSE_MATCH = 4, // Deprecated in M59.
+ SUBDOMAIN_OUTSIDE_WILDCARD = 5, // Deprecated in M59.
+ HOST_NAME_NOT_KNOWN_TLD = 6,
+ LIKELY_MULTI_TENANT_HOSTING = 7, // Deprecated in M59.
+ LOCALHOST = 8,
+ PRIVATE_URL = 9,
+ AUTHORITY_ERROR_CAPTIVE_PORTAL = 10, // Deprecated in M47.
+ SELF_SIGNED = 11,
+ EXPIRED_RECENTLY = 12,
+ LIKELY_SAME_DOMAIN = 13, // Deprecated in M59.
+ NO_SUBJECT_ALT_NAME = 14,
+ WWW_SUBDOMAIN_MATCH2 = 15,
+ SUBDOMAIN_MATCH2 = 16,
+ SUBDOMAIN_INVERSE_MATCH2 = 17,
+ SUBDOMAIN_OUTSIDE_WILDCARD2 = 18,
+ LIKELY_MULTI_TENANT_HOSTING2 = 19,
+ LIKELY_SAME_DOMAIN2 = 20,
+ SSL_INTERSTITIAL_CAUSE_MAX
+};
+
// What is known about the accuracy of system clock. Do not change or
// reorder; these values are used in an UMA histogram.
enum ClockState {
@@ -110,14 +137,9 @@ bool IsCertLikelyFromMultiTenantHosting(const GURL& request_url,
bool IsCertLikelyFromSameDomain(const GURL& request_url,
const net::X509Certificate& cert);
-// Returns true if the site's hostname differs from one of the DNS
-// names in the certificate (CN or SANs) only by the presence or
-// absence of the single-label prefix "www". E.g.: (The first domain
-// is hostname and the second domain is a DNS name in the certificate)
-// www.example.com ~ example.com -> true
-// example.com ~ www.example.com -> true
-// www.food.example.com ~ example.com -> false
-// mail.example.com ~ example.com -> false
+// Returns true if the site's hostname differs from one of the DNS names in
+// |dns_names| only by the presence or absence of the single-label prefix "www".
+// The matching name from the certificate is returned in |www_match_host_name|.
bool GetWWWSubDomainMatch(const GURL& request_url,
const std::vector<std::string>& dns_names,
std::string* www_match_host_name);
diff --git a/chromium/components/ssl_errors/error_classification_unittest.cc b/chromium/components/ssl_errors/error_classification_unittest.cc
index 1099181a6f4..c4c2c45e9ef 100644
--- a/chromium/components/ssl_errors/error_classification_unittest.cc
+++ b/chromium/components/ssl_errors/error_classification_unittest.cc
@@ -26,11 +26,15 @@
#include "net/test/test_certificate_data.h"
#include "net/test/test_data_directory.h"
#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
+using testing::ElementsAre;
+
namespace {
const char kNetworkTimeHistogram[] = "interstitial.ssl.clockstate.network3";
+const char kSslErrorCauseHistogram[] = "interstitial.ssl.cause.overridable";
static std::unique_ptr<net::test_server::HttpResponse>
NetworkErrorResponseHandler(const net::test_server::HttpRequest& request) {
@@ -53,112 +57,132 @@ class SSLErrorClassificationTest : public ::testing::Test {
};
TEST_F(SSLErrorClassificationTest, TestNameMismatch) {
- scoped_refptr<net::X509Certificate> google_cert(
- net::X509Certificate::CreateFromBytes(
- reinterpret_cast<const char*>(google_der), sizeof(google_der)));
- ASSERT_TRUE(google_cert.get());
- std::vector<std::string> dns_names_google;
- google_cert->GetDNSNames(&dns_names_google);
- ASSERT_EQ(1u, dns_names_google.size()); // ["www.google.com"]
- std::vector<std::string> hostname_tokens_google =
- ssl_errors::Tokenize(dns_names_google[0]);
- ASSERT_EQ(3u, hostname_tokens_google.size()); // ["www","google","com"]
- std::vector<std::vector<std::string>> dns_name_tokens_google;
- dns_name_tokens_google.push_back(hostname_tokens_google);
- ASSERT_EQ(1u, dns_name_tokens_google.size()); // [["www","google","com"]]
+ scoped_refptr<net::X509Certificate> example_cert = net::ImportCertFromFile(
+ net::GetTestCertsDirectory(), "subjectAltName_www_example_com.pem");
+ ASSERT_TRUE(example_cert);
+ std::vector<std::string> dns_names_example;
+ example_cert->GetSubjectAltName(&dns_names_example, nullptr);
+ ASSERT_THAT(dns_names_example, ElementsAre("www.example.com"));
+ std::vector<std::string> hostname_tokens_example =
+ ssl_errors::Tokenize(dns_names_example[0]);
+ ASSERT_THAT(hostname_tokens_example, ElementsAre("www", "example", "com"));
+ std::vector<std::vector<std::string>> dns_name_tokens_example;
+ dns_name_tokens_example.push_back(hostname_tokens_example);
+ ASSERT_EQ(1u, dns_name_tokens_example.size()); // [["www","example","com"]]
+ ASSERT_THAT(dns_name_tokens_example[0], ElementsAre("www", "example", "com"));
{
- GURL origin("https://google.com");
+ GURL origin("https://example.com");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
EXPECT_TRUE(
- ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host));
- EXPECT_EQ("www.google.com", www_host);
+ ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host));
+ EXPECT_EQ("www.example.com", www_host);
EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens,
- dns_name_tokens_google));
- EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google,
+ dns_name_tokens_example));
+ EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example,
host_name_tokens));
- EXPECT_FALSE(ssl_errors::IsSubDomainOutsideWildcard(origin, *google_cert));
+ EXPECT_FALSE(ssl_errors::IsSubDomainOutsideWildcard(origin, *example_cert));
EXPECT_FALSE(
- ssl_errors::IsCertLikelyFromMultiTenantHosting(origin, *google_cert));
- EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert));
+ ssl_errors::IsCertLikelyFromMultiTenantHosting(origin, *example_cert));
+ EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert));
}
{
- GURL origin("https://foo.blah.google.com");
+ GURL origin("https://foo.blah.example.com");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
EXPECT_FALSE(
- ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host));
+ ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host));
EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens,
- dns_name_tokens_google));
- EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google,
+ dns_name_tokens_example));
+ EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example,
host_name_tokens));
- EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert));
+ EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert));
}
{
- GURL origin("https://foo.www.google.com");
+ GURL origin("https://foo.www.example.com");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
EXPECT_FALSE(
- ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host));
+ ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host));
EXPECT_TRUE(ssl_errors::NameUnderAnyNames(host_name_tokens,
- dns_name_tokens_google));
- EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google,
+ dns_name_tokens_example));
+ EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example,
host_name_tokens));
- EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert));
+ EXPECT_TRUE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert));
}
{
- GURL origin("https://www.google.com.foo");
+ GURL origin("https://www.example.com.foo");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
EXPECT_FALSE(
- ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host));
+ ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host));
EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens,
- dns_name_tokens_google));
- EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google,
+ dns_name_tokens_example));
+ EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example,
host_name_tokens));
- EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert));
+ EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert));
}
{
- GURL origin("https://www.foogoogle.com.");
+ GURL origin("https://www.fooexample.com.");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
origin.host(), ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
EXPECT_FALSE(
- ssl_errors::GetWWWSubDomainMatch(origin, dns_names_google, &www_host));
+ ssl_errors::GetWWWSubDomainMatch(origin, dns_names_example, &www_host));
EXPECT_FALSE(ssl_errors::NameUnderAnyNames(host_name_tokens,
- dns_name_tokens_google));
- EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_google,
+ dns_name_tokens_example));
+ EXPECT_FALSE(ssl_errors::AnyNamesUnderName(dns_name_tokens_example,
host_name_tokens));
- EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *google_cert));
+ EXPECT_FALSE(ssl_errors::IsCertLikelyFromSameDomain(origin, *example_cert));
+ }
+
+ // Ensure that a certificate with no SubjectAltName does not fall back to
+ // the Subject CN when evaluating hostnames.
+ {
+ scoped_refptr<net::X509Certificate> google_cert(
+ net::X509Certificate::CreateFromBytes(
+ reinterpret_cast<const char*>(google_der), sizeof(google_der)));
+ ASSERT_TRUE(google_cert);
+
+ GURL origin("https://google.com");
+
+ base::HistogramTester histograms;
+ ssl_errors::RecordUMAStatistics(true, base::Time::NowFromSystemTime(),
+ origin, net::ERR_CERT_COMMON_NAME_INVALID,
+ *google_cert);
+
+ // Verify that we recorded only NO_SUBJECT_ALT_NAME and no other causes.
+ histograms.ExpectUniqueSample(kSslErrorCauseHistogram,
+ ssl_errors::NO_SUBJECT_ALT_NAME, 1);
}
- scoped_refptr<net::X509Certificate> webkit_cert(
- net::X509Certificate::CreateFromBytes(
- reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)));
- ASSERT_TRUE(webkit_cert.get());
- std::vector<std::string> dns_names_webkit;
- webkit_cert->GetDNSNames(&dns_names_webkit);
- ASSERT_EQ(2u, dns_names_webkit.size()); // ["*.webkit.org", "webkit.org"]
- std::vector<std::string> hostname_tokens_webkit_0 =
- ssl_errors::Tokenize(dns_names_webkit[0]);
- ASSERT_EQ(3u, hostname_tokens_webkit_0.size()); // ["*", "webkit","org"]
- std::vector<std::string> hostname_tokens_webkit_1 =
- ssl_errors::Tokenize(dns_names_webkit[1]);
- ASSERT_EQ(2u, hostname_tokens_webkit_1.size()); // ["webkit","org"]
- std::vector<std::vector<std::string>> dns_name_tokens_webkit;
- dns_name_tokens_webkit.push_back(hostname_tokens_webkit_0);
- dns_name_tokens_webkit.push_back(hostname_tokens_webkit_1);
- ASSERT_EQ(2u, dns_name_tokens_webkit.size());
{
+ scoped_refptr<net::X509Certificate> webkit_cert(
+ net::X509Certificate::CreateFromBytes(
+ reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)));
+ ASSERT_TRUE(webkit_cert);
+ std::vector<std::string> dns_names_webkit;
+ webkit_cert->GetSubjectAltName(&dns_names_webkit, nullptr);
+ ASSERT_THAT(dns_names_webkit, ElementsAre("*.webkit.org", "webkit.org"));
+ std::vector<std::string> hostname_tokens_webkit_0 =
+ ssl_errors::Tokenize(dns_names_webkit[0]);
+ ASSERT_THAT(hostname_tokens_webkit_0, ElementsAre("*", "webkit", "org"));
+ std::vector<std::string> hostname_tokens_webkit_1 =
+ ssl_errors::Tokenize(dns_names_webkit[1]);
+ ASSERT_THAT(hostname_tokens_webkit_1, ElementsAre("webkit", "org"));
+ std::vector<std::vector<std::string>> dns_name_tokens_webkit;
+ dns_name_tokens_webkit.push_back(hostname_tokens_webkit_0);
+ dns_name_tokens_webkit.push_back(hostname_tokens_webkit_1);
+ ASSERT_EQ(2u, dns_name_tokens_webkit.size());
GURL origin("https://a.b.webkit.org");
std::string www_host;
std::vector<std::string> host_name_tokens = base::SplitString(
diff --git a/chromium/components/ssl_errors/error_info.cc b/chromium/components/ssl_errors/error_info.cc
index 7ef291ebe4b..ab7afccb05c 100644
--- a/chromium/components/ssl_errors/error_info.cc
+++ b/chromium/components/ssl_errors/error_info.cc
@@ -32,22 +32,30 @@ ErrorInfo ErrorInfo::CreateError(ErrorType error_type,
base::string16 details, short_description;
switch (error_type) {
case CERT_COMMON_NAME_INVALID: {
- // If the certificate contains multiple DNS names, we choose the most
- // representative one -- either the DNS name that's also in the subject
- // field, or the first one. If this heuristic turns out to be
- // inadequate, we can consider choosing the DNS name that is the
- // "closest match" to the host name in the request URL, or listing all
- // the DNS names with an HTML <ul>.
std::vector<std::string> dns_names;
- cert->GetDNSNames(&dns_names);
- DCHECK(!dns_names.empty());
+ cert->GetSubjectAltName(&dns_names, nullptr);
+
size_t i = 0;
- for (; i < dns_names.size(); ++i) {
- if (dns_names[i] == cert->subject().common_name)
- break;
+ if (dns_names.empty()) {
+ // The certificate had no DNS names, display an explanatory string.
+ // TODO(elawrence): Change the error messsage instead of just the
+ // placeholder string; see https://crbug.com/708268
+ dns_names.push_back("[missing_subjectAltName]");
+ } else {
+ // If the certificate contains multiple DNS names, we choose the most
+ // representative one -- either the DNS name that's also in the subject
+ // field, or the first one. If this heuristic turns out to be
+ // inadequate, we can consider choosing the DNS name that is the
+ // "closest match" to the host name in the request URL, or listing all
+ // the DNS names with an HTML <ul>.
+ for (; i < dns_names.size(); ++i) {
+ if (dns_names[i] == cert->subject().common_name)
+ break;
+ }
+ if (i == dns_names.size())
+ i = 0;
}
- if (i == dns_names.size())
- i = 0;
+
details = l10n_util::GetStringFUTF16(
IDS_CERT_ERROR_COMMON_NAME_INVALID_DETAILS,
UTF8ToUTF16(request_url.host()),
diff --git a/chromium/components/strings/components_strings_es.xtb b/chromium/components/strings/components_strings_es.xtb
index 2096a445d92..262ea2fa385 100644
--- a/chromium/components/strings/components_strings_es.xtb
+++ b/chromium/components/strings/components_strings_es.xtb
@@ -89,7 +89,7 @@
<translation id="1787142507584202372">Las pestañas abiertas aparecen aquí</translation>
<translation id="1791429645902722292">Google Smart Lock</translation>
<translation id="1797835274315207060">Selecciona una dirección de envío para consultar los métodos de envío y los requisitos.</translation>
-<translation id="1803678881841855883">La función de navegación segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. Este contenido procede de <ph name="SUBRESOURCE_HOST" />, un conocido distribuidor de este tipo de software. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="1803678881841855883">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. Este contenido procede de <ph name="SUBRESOURCE_HOST" />, un conocido distribuidor de este tipo de software. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="1806541873155184440">Añadida el <ph name="ADDED_TO_AUTOFILL_MONTH" /></translation>
<translation id="1821930232296380041">Parámetros de solicitud o solicitud no válidos</translation>
<translation id="1826516787628120939">Comprobando</translation>
@@ -157,7 +157,7 @@
<translation id="2386255080630008482">Se ha revocado el certificado de servidor.</translation>
<translation id="2392959068659972793">Mostrar políticas sin valores establecidos</translation>
<translation id="2396249848217231973">&amp;Deshacer eliminación</translation>
-<translation id="2460160116472764928">La función de navegación segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2460160116472764928">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />detectó software malicioso<ph name="END_LINK" /> recientemente en <ph name="SITE" />. En ocasiones, los sitios web que suelen ser seguros contienen software malicioso. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="2463739503403862330">Rellenar</translation>
<translation id="2467694685043708798"><ph name="BEGIN_LINK" />Ejecutar Diagnósticos de red<ph name="END_LINK" /></translation>
<translation id="2479410451996844060">La URL de búsqueda no es válida.</translation>
@@ -369,7 +369,7 @@
<translation id="4269787794583293679">(Ningún nombre de usuario)</translation>
<translation id="4275830172053184480">Reiniciar tu dispositivo</translation>
<translation id="4280429058323657511">Vcto. <ph name="EXPIRATION_DATE_ABBR" /></translation>
-<translation id="4295944351946828969">La función de navegación segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en <ph name="SITE" />. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="4295944351946828969">La función de Navegación Segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en <ph name="SITE" />. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="4300246636397505754">Sugerencias de padres</translation>
<translation id="4304224509867189079">Iniciar sesión</translation>
<translation id="432290197980158659">El servidor ha mostrado un certificado que no coincide con lo que se esperaba. Algunos sitios web tienen un alto nivel de seguridad para garantizar tu protección y esperan ciertas características de los certificados. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -745,7 +745,7 @@
<translation id="800218591365569300">Prueba a cerrar otros programas o pestañas para liberar memoria.</translation>
<translation id="8012647001091218357">No hemos podido contactar con tus padres. Vuelve a intentarlo.</translation>
<translation id="8025119109950072390">Es posible que los atacantes que se encuentren en este sitio web intenten engañarte para que realices una acción peligrosa, como instalar software o revelar tu información personal (por ejemplo, contraseñas, números de teléfono o tarjetas de crédito).</translation>
-<translation id="803030522067524905">La función de navegación segura de Google detectó phishing recientemente en <ph name="SITE" />. Los sitios web de phishing imitan el aspecto de otros sitios web para engañarte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="803030522067524905">La función de Navegación Segura de Google detectó phishing recientemente en <ph name="SITE" />. Los sitios web de phishing imitan el aspecto de otros sitios web para engañarte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="8034522405403831421">Esta página está escrita en <ph name="SOURCE_LANGUAGE" />. ¿Quieres traducirla al <ph name="TARGET_LANGUAGE" />?</translation>
<translation id="8041089156583427627">Enviar</translation>
<translation id="8088680233425245692">Se ha producido un error al ver el artículo.</translation>
diff --git a/chromium/components/url_formatter/url_formatter.cc b/chromium/components/url_formatter/url_formatter.cc
index a93bf1154c3..3d5740fd377 100644
--- a/chromium/components/url_formatter/url_formatter.cc
+++ b/chromium/components/url_formatter/url_formatter.cc
@@ -15,6 +15,7 @@
#include "base/strings/utf_offset_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_local_storage.h"
+#include "third_party/icu/source/common/unicode/schriter.h"
#include "third_party/icu/source/common/unicode/uidna.h"
#include "third_party/icu/source/common/unicode/uniset.h"
#include "third_party/icu/source/common/unicode/uscript.h"
@@ -33,6 +34,7 @@ base::string16 IDNToUnicodeWithAdjustments(
base::OffsetAdjuster::Adjustments* adjustments);
bool IDNToUnicodeOneComponent(const base::char16* comp,
size_t comp_len,
+ bool is_tld_ascii,
base::string16* out);
class AppendComponentTransform {
@@ -200,6 +202,13 @@ base::string16 IDNToUnicodeWithAdjustments(
input16.reserve(host.length());
input16.insert(input16.end(), host.begin(), host.end());
+ bool is_tld_ascii = true;
+ size_t last_dot = host.rfind('.');
+ if (last_dot != base::StringPiece::npos &&
+ host.substr(last_dot).starts_with(".xn--")) {
+ is_tld_ascii = false;
+ }
+
// Do each component of the host separately, since we enforce script matching
// on a per-component basis.
base::string16 out16;
@@ -217,7 +226,7 @@ base::string16 IDNToUnicodeWithAdjustments(
// Add the substring that we just found.
converted_idn =
IDNToUnicodeOneComponent(input16.data() + component_start,
- component_length, &out16);
+ component_length, is_tld_ascii, &out16);
}
size_t new_component_length = out16.length() - new_component_start;
@@ -241,17 +250,22 @@ class IDNSpoofChecker {
public:
IDNSpoofChecker();
- // Returns true if |label| is safe to display as Unicode. In the event of
- // library failure, all IDN inputs will be treated as unsafe.
- bool Check(base::StringPiece16 label);
+ // Returns true if |label| is safe to display as Unicode. When the TLD is
+ // ASCII, check if a label is entirely made of Cyrillic letters that look like
+ // Latin letters. In the event of library failure, all IDN inputs will be
+ // treated as unsafe.
+ bool Check(base::StringPiece16 label, bool is_tld_ascii);
private:
void SetAllowedUnicodeSet(UErrorCode* status);
+ bool IsMadeOfLatinAlikeCyrillic(const icu::UnicodeString& label_string);
USpoofChecker* checker_;
icu::UnicodeSet deviation_characters_;
icu::UnicodeSet non_ascii_latin_letters_;
icu::UnicodeSet kana_letters_exceptions_;
+ icu::UnicodeSet cyrillic_letters_;
+ icu::UnicodeSet cyrillic_letters_latin_alike_;
DISALLOW_COPY_AND_ASSIGN(IDNSpoofChecker);
};
@@ -314,10 +328,20 @@ IDNSpoofChecker::IDNSpoofChecker() {
"[\\u3078-\\u307a\\u30d8-\\u30da\\u30fb\\u30fc]"), status);
kana_letters_exceptions_.freeze();
+ // These Cyrillic letters look like Latin. A domain label entirely made of
+ // these letters is blocked as a simpliified whole-script-spoofable.
+ cyrillic_letters_latin_alike_ =
+ icu::UnicodeSet(icu::UnicodeString("[асԁеһіјӏорԛѕԝхуъЬҽпгѵѡ]"), status);
+ cyrillic_letters_latin_alike_.freeze();
+
+ cyrillic_letters_ =
+ icu::UnicodeSet(UNICODE_STRING_SIMPLE("[[:Cyrl:]]"), status);
+ cyrillic_letters_.freeze();
+
DCHECK(U_SUCCESS(status));
}
-bool IDNSpoofChecker::Check(base::StringPiece16 label) {
+bool IDNSpoofChecker::Check(base::StringPiece16 label, bool is_tld_ascii) {
UErrorCode status = U_ZERO_ERROR;
int32_t result = uspoof_check(checker_, label.data(),
base::checked_cast<int32_t>(label.size()),
@@ -345,17 +369,19 @@ bool IDNSpoofChecker::Check(base::StringPiece16 label) {
return false;
// If there's no script mixing, the input is regarded as safe without any
- // extra check unless it contains Kana letter exceptions. Note that
- // the following combinations of scripts are treated as a 'logical' single
- // script.
+ // extra check unless it contains Kana letter exceptions or it's made entirely
+ // of Cyrillic letters that look like Latin letters. Note that the following
+ // combinations of scripts are treated as a 'logical' single script.
// - Chinese: Han, Bopomofo, Common
// - Japanese: Han, Hiragana, Katakana, Common
// - Korean: Hangul, Han, Common
result &= USPOOF_RESTRICTION_LEVEL_MASK;
- if (result == USPOOF_ASCII ||
- (result == USPOOF_SINGLE_SCRIPT_RESTRICTIVE &&
- kana_letters_exceptions_.containsNone(label_string)))
- return true;
+ if (result == USPOOF_ASCII) return true;
+ if (result == USPOOF_SINGLE_SCRIPT_RESTRICTIVE &&
+ kana_letters_exceptions_.containsNone(label_string)) {
+ // Check Cyrillic confusable only for ASCII TLDs.
+ return !is_tld_ascii || !IsMadeOfLatinAlikeCyrillic(label_string);
+ }
// Additional checks for |label| with multiple scripts, one of which is Latin.
// Disallow non-ASCII Latin letters to mix with a non-Latin script.
@@ -407,6 +433,25 @@ bool IDNSpoofChecker::Check(base::StringPiece16 label) {
return !dangerous_pattern->find();
}
+bool IDNSpoofChecker::IsMadeOfLatinAlikeCyrillic(
+ const icu::UnicodeString& label_string) {
+ // Collect all the Cyrillic letters in |label_string| and see if they're
+ // a subset of |cyrillic_letters_latin_alike_|.
+ // A shortcut of defining cyrillic_letters_latin_alike_ to include [0-9] and
+ // [_-] and checking if the set contains all letters of |label_string|
+ // would work in most cases, but not if a label has non-letters outside
+ // ASCII.
+ icu::UnicodeSet cyrillic_in_label;
+ icu::StringCharacterIterator it(label_string);
+ for (it.setToStart(); it.hasNext();) {
+ const UChar32 c = it.next32PostInc();
+ if (cyrillic_letters_.contains(c))
+ cyrillic_in_label.add(c);
+ }
+ return !cyrillic_in_label.isEmpty() &&
+ cyrillic_letters_latin_alike_.containsAll(cyrillic_in_label);
+}
+
void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) {
if (U_FAILURE(*status))
return;
@@ -481,8 +526,8 @@ void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) {
// user. Note that this function does not deal with pure ASCII domain labels at
// all even though it's possible to make up look-alike labels with ASCII
// characters alone.
-bool IsIDNComponentSafe(base::StringPiece16 label) {
- return g_idn_spoof_checker.Get().Check(label);
+bool IsIDNComponentSafe(base::StringPiece16 label, bool is_tld_ascii) {
+ return g_idn_spoof_checker.Get().Check(label, is_tld_ascii);
}
// A wrapper to use LazyInstance<>::Leaky with ICU's UIDNA, a C pointer to
@@ -527,6 +572,7 @@ base::LazyInstance<UIDNAWrapper>::Leaky g_uidna = LAZY_INSTANCE_INITIALIZER;
// Returns whether any conversion was performed.
bool IDNToUnicodeOneComponent(const base::char16* comp,
size_t comp_len,
+ bool is_tld_ascii,
base::string16* out) {
DCHECK(out);
if (comp_len == 0)
@@ -558,8 +604,9 @@ bool IDNToUnicodeOneComponent(const base::char16* comp,
// can be safely displayed to the user.
out->resize(original_length + output_length);
if (IsIDNComponentSafe(
- base::StringPiece16(out->data() + original_length,
- base::checked_cast<size_t>(output_length))))
+ base::StringPiece16(out->data() + original_length,
+ base::checked_cast<size_t>(output_length)),
+ is_tld_ascii))
return true;
}
diff --git a/chromium/components/url_formatter/url_formatter_unittest.cc b/chromium/components/url_formatter/url_formatter_unittest.cc
index c0fe9509a6d..5b2646ce09c 100644
--- a/chromium/components/url_formatter/url_formatter_unittest.cc
+++ b/chromium/components/url_formatter/url_formatter_unittest.cc
@@ -32,6 +32,7 @@ struct IDNTestCase {
const bool unicode_allowed;
};
+// TODO(jshin): Replace L"..." with "..." in UTF-8 when it's easier to read.
const IDNTestCase idn_cases[] = {
// No IDN
{"www.google.com", L"www.google.com", true},
@@ -209,6 +210,35 @@ const IDNTestCase idn_cases[] = {
// U+30FB + Latin
{"xn--abc-os4b.jp", L"\x30fb" L"abc.jp", false},
+ // Cyrillic labels made of Latin-look-alike Cyrillic letters.
+ // ѕсоре.com with ѕсоре in Cyrillic
+ {"xn--e1argc3h.com", L"\x0455\x0441\x043e\x0440\x0435.com", false},
+ // ѕсоре123.com with ѕсоре in Cyrillic.
+ {"xn--123-qdd8bmf3n.com",
+ L"\x0455\x0441\x043e\x0440\x0435" L"123.com", false},
+ // ѕсоре-рау.com with ѕсоре and рау in Cyrillic.
+ {"xn----8sbn9akccw8m.com",
+ L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.com", false},
+ // ѕсоре·рау.com with scope and pay in Cyrillic and U+00B7 between them.
+ {"xn--uba29ona9akccw8m.com",
+ L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.com", false},
+
+ // The same as above three, but in IDN TLD.
+ {"xn--e1argc3h.xn--p1ai",
+ L"\x0455\x0441\x043e\x0440\x0435.\x0440\x0444", true},
+ {"xn--123-qdd8bmf3n.xn--p1ai",
+ L"\x0455\x0441\x043e\x0440\x0435" L"123.\x0440\x0444", true},
+ {"xn--uba29ona9akccw8m.xn--p1ai",
+ L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.\x0440\x0444",
+ true},
+
+ // ѕсоре-рау.한국 with ѕсоре and рау in Cyrillic.
+ {"xn----8sbn9akccw8m.xn--3e0b707e",
+ L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.\xd55c\xad6d", true},
+
+ // музей (museum in Russian) has characters without a Latin-look-alike.
+ {"xn--e1adhj9a.com", L"\x043c\x0443\x0437\x0435\x0439.com", true},
+
// Mixed digits: the first two will also fail mixed script test
// Latin + ASCII digit + Deva digit
{"xn--asc1deva-j0q.co.in", L"asc1deva\x0967.co.in", false},
diff --git a/chromium/components/user_manager/user_manager_base.cc b/chromium/components/user_manager/user_manager_base.cc
index 054949fff92..5805a9ca35b 100644
--- a/chromium/components/user_manager/user_manager_base.cc
+++ b/chromium/components/user_manager/user_manager_base.cc
@@ -242,6 +242,7 @@ void UserManagerBase::SwitchActiveUser(const AccountId& account_id) {
NotifyActiveUserHashChanged(active_user_->username_hash());
NotifyActiveUserChanged(active_user_);
+ CallUpdateLoginState();
}
void UserManagerBase::SwitchToLastActiveUser() {
@@ -508,17 +509,8 @@ void UserManagerBase::ParseUserList(const base::ListValue& users_list,
bool UserManagerBase::IsCurrentUserOwner() const {
DCHECK(task_runner_->RunsTasksOnCurrentThread());
- base::AutoLock lk(is_current_user_owner_lock_);
- return is_current_user_owner_;
-}
-
-void UserManagerBase::SetCurrentUserIsOwner(bool is_current_user_owner) {
- DCHECK(task_runner_->RunsTasksOnCurrentThread());
- {
- base::AutoLock lk(is_current_user_owner_lock_);
- is_current_user_owner_ = is_current_user_owner;
- }
- CallUpdateLoginState();
+ return !owner_account_id_.empty() && active_user_ &&
+ active_user_->GetAccountId() == owner_account_id_;
}
bool UserManagerBase::IsCurrentUserNew() const {
@@ -739,6 +731,7 @@ bool UserManagerBase::HasPendingBootstrap(const AccountId& account_id) const {
void UserManagerBase::SetOwnerId(const AccountId& owner_account_id) {
owner_account_id_ = owner_account_id;
+ CallUpdateLoginState();
}
const AccountId& UserManagerBase::GetPendingUserSwitchID() const {
@@ -1028,7 +1021,7 @@ void UserManagerBase::Initialize() {
}
void UserManagerBase::CallUpdateLoginState() {
- UpdateLoginState(active_user_, primary_user_, is_current_user_owner_);
+ UpdateLoginState(active_user_, primary_user_, IsCurrentUserOwner());
}
void UserManagerBase::SetLRUUser(User* user) {
diff --git a/chromium/components/user_manager/user_manager_base.h b/chromium/components/user_manager/user_manager_base.h
index b30015f0ecc..9e9fec63919 100644
--- a/chromium/components/user_manager/user_manager_base.h
+++ b/chromium/components/user_manager/user_manager_base.h
@@ -250,8 +250,6 @@ class USER_MANAGER_EXPORT UserManagerBase : public UserManager {
// Getters/setters for private members.
- virtual void SetCurrentUserIsOwner(bool is_current_user_owner);
-
virtual bool GetEphemeralUsersEnabled() const;
virtual void SetEphemeralUsersEnabled(bool enabled);
@@ -340,11 +338,6 @@ class USER_MANAGER_EXPORT UserManagerBase : public UserManager {
// Indicates stage of loading user from prefs.
UserLoadStage user_loading_stage_ = STAGE_NOT_LOADED;
- // Cached flag of whether currently logged-in user is owner or not.
- // May be accessed on different threads, requires locking.
- bool is_current_user_owner_ = false;
- mutable base::Lock is_current_user_owner_lock_;
-
// Cached flag of whether the currently logged-in user existed before this
// login.
bool is_current_user_new_ = false;
diff --git a/chromium/content/app/strings/translations/content_strings_es.xtb b/chromium/content/app/strings/translations/content_strings_es.xtb
index cff295b99e0..a5abfcf8ac7 100644
--- a/chromium/content/app/strings/translations/content_strings_es.xtb
+++ b/chromium/content/app/strings/translations/content_strings_es.xtb
@@ -6,7 +6,7 @@
<translation id="10623998915015855">botón de activación</translation>
<translation id="1088086359088493902">Segundos</translation>
<translation id="1171774979989969504">Introduce una dirección de correo electrónico</translation>
-<translation id="1178581264944972037">Detener</translation>
+<translation id="1178581264944972037">Pausar</translation>
<translation id="1188858454923323853">complementario</translation>
<translation id="1206619573307042055">marquee</translation>
<translation id="1206693055195146388">control deslizante</translation>
diff --git a/chromium/content/browser/android/date_time_chooser_android.cc b/chromium/content/browser/android/date_time_chooser_android.cc
index ba20ad53bd5..2ea331c5502 100644
--- a/chromium/content/browser/android/date_time_chooser_android.cc
+++ b/chromium/content/browser/android/date_time_chooser_android.cc
@@ -92,9 +92,13 @@ void DateTimeChooserAndroid::ShowDialog(
}
}
- j_date_time_chooser_.Reset(Java_DateTimeChooserAndroid_createDateTimeChooser(
- env, native_window->GetJavaObject(), reinterpret_cast<intptr_t>(this),
- dialog_type, dialog_value, min, max, step, suggestions_array));
+ if (native_window && !(native_window->GetJavaObject()).is_null()) {
+ j_date_time_chooser_.Reset(
+ Java_DateTimeChooserAndroid_createDateTimeChooser(
+ env, native_window->GetJavaObject(),
+ reinterpret_cast<intptr_t>(this), dialog_type, dialog_value, min,
+ max, step, suggestions_array));
+ }
if (j_date_time_chooser_.is_null())
ReplaceDateTime(env, j_date_time_chooser_, dialog_value);
}
diff --git a/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc b/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc
index e0464b67354..3a0e0915ad7 100644
--- a/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc
+++ b/chromium/content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.cc
@@ -63,7 +63,7 @@ bool GpuSurfacelessBrowserCompositorOutputSurface::IsDisplayedAsOverlayPlane()
unsigned GpuSurfacelessBrowserCompositorOutputSurface::GetOverlayTextureId()
const {
- return buffer_queue_->current_texture_id();
+ return buffer_queue_->GetCurrentTextureId();
}
void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers(
@@ -73,8 +73,15 @@ void GpuSurfacelessBrowserCompositorOutputSurface::SwapBuffers(
// TODO(ccameron): What if a swap comes again before OnGpuSwapBuffersCompleted
// happens, we'd see the wrong swap size there?
swap_size_ = reshape_size_;
- buffer_queue_->SwapBuffers(frame.sub_buffer_rect ? *frame.sub_buffer_rect
- : gfx::Rect(swap_size_));
+
+ gfx::Rect damage_rect =
+ frame.sub_buffer_rect ? *frame.sub_buffer_rect : gfx::Rect(swap_size_);
+ // Use previous buffer when damage rect is empty. This avoids unnecessary
+ // partial swap work and makes it possible to support empty swaps on devices
+ // where partial swaps are disabled.
+ if (!damage_rect.IsEmpty())
+ buffer_queue_->SwapBuffers(damage_rect);
+
GpuBrowserCompositorOutputSurface::SwapBuffers(std::move(frame));
}
diff --git a/chromium/content/browser/find_request_manager.cc b/chromium/content/browser/find_request_manager.cc
index 5c2eeb2df37..7713bc3a5b9 100644
--- a/chromium/content/browser/find_request_manager.cc
+++ b/chromium/content/browser/find_request_manager.cc
@@ -158,9 +158,13 @@ void FindRequestManager::OnFindReply(RenderFrameHost* rfh,
number_of_matches_ += matches_delta;
matches_per_frame_it->second = number_of_matches;
+ // All matches may have been removed since the last find reply.
+ if (rfh == active_frame_ && !number_of_matches)
+ relative_active_match_ordinal_ = 0;
+
// The active match ordinal may need updating since the number of matches
// before the active match may have changed.
- if (rfh != active_frame_)
+ if (rfh != active_frame_ || !number_of_matches)
UpdateActiveMatchOrdinal();
}
}
diff --git a/chromium/content/browser/frame_host/navigation_handle_impl.cc b/chromium/content/browser/frame_host/navigation_handle_impl.cc
index 380b80a125a..4ebe13f190b 100644
--- a/chromium/content/browser/frame_host/navigation_handle_impl.cc
+++ b/chromium/content/browser/frame_host/navigation_handle_impl.cc
@@ -947,6 +947,12 @@ bool NavigationHandleImpl::IsSelfReferentialURL() {
if (!is_renderer_initiated_)
return false;
+ // Some sites rely on constructing frame hierarchies where frames are loaded
+ // via POSTs with the same URLs, so exempt POST requests. See
+ // https://crbug.com/710008.
+ if (method_ == "POST")
+ return false;
+
// We allow one level of self-reference because some sites depend on that,
// but we don't allow more than one.
bool found_self_reference = false;
diff --git a/chromium/content/browser/frame_host/render_frame_host_manager.cc b/chromium/content/browser/frame_host/render_frame_host_manager.cc
index 120595fdc6b..1bbf60fac4e 100644
--- a/chromium/content/browser/frame_host/render_frame_host_manager.cc
+++ b/chromium/content/browser/frame_host/render_frame_host_manager.cc
@@ -2327,6 +2327,13 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
dest_url, source_instance, dest_instance, nullptr, transition,
dest_is_restore, dest_is_view_source_mode, was_server_redirect);
+ // Note: Do not add code here to determine whether the subframe should swap
+ // or not. Add it to CanSubframeSwapProcess instead.
+ bool allowed_to_swap_process =
+ frame_tree_node_->IsMainFrame() ||
+ CanSubframeSwapProcess(dest_url, source_instance, dest_instance,
+ was_server_redirect);
+
// Inform the transferring NavigationHandle of a transfer to a different
// SiteInstance. It is important do so now, in order to mark the request as
// transferring on the IO thread before attempting to destroy the pending RFH.
@@ -2334,11 +2341,22 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
// RFH but will persist until it is picked up by the new RFH.
if (transfer_navigation_handle_.get() &&
transfer_navigation_handle_->GetGlobalRequestID() ==
- transferred_request_id &&
- new_instance.get() !=
- transfer_navigation_handle_->GetRenderFrameHost()
- ->GetSiteInstance()) {
- transfer_navigation_handle_->Transfer();
+ transferred_request_id) {
+ // The transfer is needed when switching to a new SiteInstance. One
+ // exception is if the process swap is not allowed and the transfer started
+ // in the current RFH, the navigation will stay in the current RFH (even
+ // when there is a new SiteInstance), so avoid calling Transfer() on it.
+ // This matters for some renderer-initiated data URLs navigations, see
+ // https://crbug.com/697513.
+ RenderFrameHostImpl* transferring_rfh =
+ transfer_navigation_handle_->GetRenderFrameHost();
+ bool transfer_started_from_current_rfh =
+ transferring_rfh == render_frame_host_.get();
+ bool should_transfer =
+ new_instance.get() != transferring_rfh->GetSiteInstance() &&
+ (!transfer_started_from_current_rfh || allowed_to_swap_process);
+ if (should_transfer)
+ transfer_navigation_handle_->Transfer();
}
// If we are currently navigating cross-process to a pending RFH for a
@@ -2355,13 +2373,6 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
}
}
- // Note: Do not add code here to determine whether the subframe should swap
- // or not. Add it to CanSubframeSwapProcess instead.
- bool allowed_to_swap_process =
- frame_tree_node_->IsMainFrame() ||
- CanSubframeSwapProcess(dest_url, source_instance, dest_instance,
- was_server_redirect);
-
if (new_instance.get() != current_instance && allowed_to_swap_process) {
TRACE_EVENT_INSTANT2(
"navigation",
diff --git a/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index 02027b0ee6d..74bb5be539a 100644
--- a/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/chromium/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -3272,4 +3272,53 @@ IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest,
EXPECT_EQ(child->current_url(), first_url);
}
+// Ensures that POST requests bypass self-referential URL checks. See
+// https://crbug.com/710008.
+IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest,
+ SelfReferencingFramesWithPOST) {
+ StartEmbeddedServer();
+ GURL url(embedded_test_server()->GetURL("a.com", "/page_with_iframe.html"));
+ EXPECT_TRUE(NavigateToURL(shell(), url));
+
+ WebContentsImpl* web_contents =
+ static_cast<WebContentsImpl*>(shell()->web_contents());
+
+ FrameTreeNode* root = web_contents->GetFrameTree()->root();
+ FrameTreeNode* child = root->child_at(0);
+
+ GURL child_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
+ EXPECT_EQ(url, root->current_url());
+ EXPECT_EQ(child_url, child->current_url());
+
+ // Navigate the child frame to the same URL as parent via POST.
+ std::string script =
+ "var f = document.createElement('form');\n"
+ "f.method = 'POST';\n"
+ "f.action = '/page_with_iframe.html';\n"
+ "document.body.appendChild(f);\n"
+ "f.submit();";
+ {
+ TestFrameNavigationObserver observer(child);
+ EXPECT_TRUE(ExecuteScript(child, script));
+ observer.Wait();
+ }
+
+ FrameTreeNode* grandchild = child->child_at(0);
+ EXPECT_EQ(url, child->current_url());
+ EXPECT_EQ(child_url, grandchild->current_url());
+
+ // Now navigate the grandchild to the same URL as its two ancestors. This
+ // should be allowed since it uses POST; it was blocked prior to
+ // fixing https://crbug.com/710008.
+ {
+ TestFrameNavigationObserver observer(grandchild);
+ EXPECT_TRUE(ExecuteScript(grandchild, script));
+ observer.Wait();
+ }
+
+ EXPECT_EQ(url, grandchild->current_url());
+ ASSERT_EQ(1U, grandchild->child_count());
+ EXPECT_EQ(child_url, grandchild->child_at(0)->current_url());
+}
+
} // namespace content
diff --git a/chromium/content/browser/gpu/gpu_process_host.cc b/chromium/content/browser/gpu/gpu_process_host.cc
index 4f9f69fb0f9..6b1df02f7fe 100644
--- a/chromium/content/browser/gpu/gpu_process_host.cc
+++ b/chromium/content/browser/gpu/gpu_process_host.cc
@@ -445,6 +445,14 @@ void GpuProcessHost::CallOnIO(
base::Bind(&RunCallbackOnIO, kind, force_create, callback));
}
+GpuProcessHost::EstablishChannelRequest::EstablishChannelRequest()
+ : client_id(0) {}
+
+GpuProcessHost::EstablishChannelRequest::EstablishChannelRequest(
+ const EstablishChannelRequest& other) = default;
+
+GpuProcessHost::EstablishChannelRequest::~EstablishChannelRequest() {}
+
service_manager::InterfaceProvider* GpuProcessHost::GetRemoteInterfaces() {
return process_->child_connection()->GetRemoteInterfaces();
}
@@ -470,8 +478,7 @@ GpuProcessHost::GpuProcessHost(int host_id, GpuProcessKind kind)
kind_(kind),
process_launched_(false),
initialized_(false),
- gpu_host_binding_(this),
- weak_ptr_factory_(this) {
+ gpu_host_binding_(this) {
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kSingleProcess) ||
base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -680,6 +687,7 @@ bool GpuProcessHost::OnMessageReceived(const IPC::Message& message) {
DCHECK(CalledOnValidThread());
IPC_BEGIN_MESSAGE_MAP(GpuProcessHost, message)
IPC_MESSAGE_HANDLER(GpuHostMsg_Initialized, OnInitialized)
+ IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished, OnChannelEstablished)
IPC_MESSAGE_HANDLER(GpuHostMsg_GpuMemoryBufferCreated,
OnGpuMemoryBufferCreated)
#if defined(OS_ANDROID)
@@ -719,15 +727,21 @@ void GpuProcessHost::EstablishGpuChannel(
return;
}
- DCHECK_EQ(preempts, allow_view_command_buffers);
- DCHECK_EQ(preempts, allow_real_time_streams);
- bool is_gpu_host = preempts;
-
- channel_requests_.push(callback);
- gpu_service_ptr_->EstablishGpuChannel(
- client_id, client_tracing_id, is_gpu_host,
- base::Bind(&GpuProcessHost::OnChannelEstablished,
- weak_ptr_factory_.GetWeakPtr(), client_id, callback));
+ EstablishChannelParams params;
+ params.client_id = client_id;
+ params.client_tracing_id = client_tracing_id;
+ params.preempts = preempts;
+ params.allow_view_command_buffers = allow_view_command_buffers;
+ params.allow_real_time_streams = allow_real_time_streams;
+ if (Send(new GpuMsg_EstablishChannel(params))) {
+ EstablishChannelRequest request;
+ request.client_id = client_id;
+ request.callback = callback;
+ channel_requests_.push(request);
+ } else {
+ DVLOG(1) << "Failed to send GpuMsg_EstablishChannel.";
+ callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+ }
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableGpuShaderDiskCache)) {
@@ -802,27 +816,32 @@ void GpuProcessHost::OnInitialized(
}
void GpuProcessHost::OnChannelEstablished(
- int client_id,
- const EstablishChannelCallback& callback,
- mojo::ScopedMessagePipeHandle channel_handle) {
+ const IPC::ChannelHandle& channel_handle) {
TRACE_EVENT0("gpu", "GpuProcessHost::OnChannelEstablished");
- DCHECK(!channel_requests_.empty());
- DCHECK(channel_requests_.front().Equals(callback));
+
+ if (channel_requests_.empty()) {
+ // This happens when GPU process is compromised.
+ RouteOnUIThread(GpuHostMsg_OnLogMessage(
+ logging::LOG_WARNING, "WARNING",
+ "Received a ChannelEstablished message but no requests in queue."));
+ return;
+ }
+ EstablishChannelRequest request = channel_requests_.front();
channel_requests_.pop();
// Currently if any of the GPU features are blacklisted, we don't establish a
// GPU channel.
- if (channel_handle.is_valid() &&
- !GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(nullptr)) {
- Send(new GpuMsg_CloseChannel(client_id));
- callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+ if (channel_handle.mojo_handle.is_valid() &&
+ !GpuDataManagerImpl::GetInstance()->GpuAccessAllowed(NULL)) {
+ Send(new GpuMsg_CloseChannel(request.client_id));
+ request.callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
RouteOnUIThread(
GpuHostMsg_OnLogMessage(logging::LOG_WARNING, "WARNING",
"Hardware acceleration is unavailable."));
return;
}
- callback.Run(IPC::ChannelHandle(channel_handle.release()), gpu_info_);
+ request.callback.Run(channel_handle, gpu_info_);
}
void GpuProcessHost::OnGpuMemoryBufferCreated(
@@ -1082,12 +1101,11 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) {
void GpuProcessHost::SendOutstandingReplies() {
valid_ = false;
-
// First send empty channel handles for all EstablishChannel requests.
while (!channel_requests_.empty()) {
- auto callback = channel_requests_.front();
+ EstablishChannelRequest request = channel_requests_.front();
channel_requests_.pop();
- callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
+ request.callback.Run(IPC::ChannelHandle(), gpu::GPUInfo());
}
while (!create_gpu_memory_buffer_requests_.empty()) {
diff --git a/chromium/content/browser/gpu/gpu_process_host.h b/chromium/content/browser/gpu/gpu_process_host.h
index 101b8d4ed85..9cb6f5831f0 100644
--- a/chromium/content/browser/gpu/gpu_process_host.h
+++ b/chromium/content/browser/gpu/gpu_process_host.h
@@ -72,6 +72,14 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate,
typedef base::Callback<void(const IPC::ChannelHandle&, const gpu::GPUInfo&)>
EstablishChannelCallback;
+ struct EstablishChannelRequest {
+ EstablishChannelRequest();
+ EstablishChannelRequest(const EstablishChannelRequest& other);
+ ~EstablishChannelRequest();
+ int32_t client_id;
+ EstablishChannelCallback callback;
+ };
+
typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)>
CreateGpuMemoryBufferCallback;
@@ -197,14 +205,11 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate,
const std::string& key,
const std::string& shader) override;
- void OnChannelEstablished(int client_id,
- const EstablishChannelCallback& callback,
- mojo::ScopedMessagePipeHandle channel_handle);
-
// Message handlers.
void OnInitialized(bool result,
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info);
+ void OnChannelEstablished(const IPC::ChannelHandle& channel_handle);
void OnGpuMemoryBufferCreated(const gfx::GpuMemoryBufferHandle& handle);
#if defined(OS_ANDROID)
void OnDestroyingVideoSurfaceAck(int surface_id);
@@ -229,7 +234,7 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate,
// These are the channel requests that we have already sent to
// the GPU process, but haven't heard back about yet.
- std::queue<EstablishChannelCallback> channel_requests_;
+ std::queue<EstablishChannelRequest> channel_requests_;
// The pending create gpu memory buffer requests we need to reply to.
std::queue<CreateGpuMemoryBufferCallback> create_gpu_memory_buffer_requests_;
@@ -296,8 +301,6 @@ class GpuProcessHost : public BrowserChildProcessHostDelegate,
ui::mojom::GpuServicePtr gpu_service_ptr_;
mojo::Binding<ui::mojom::GpuHost> gpu_host_binding_;
- base::WeakPtrFactory<GpuProcessHost> weak_ptr_factory_;
-
DISALLOW_COPY_AND_ASSIGN(GpuProcessHost);
};
diff --git a/chromium/content/browser/loader/resource_dispatcher_host_impl.cc b/chromium/content/browser/loader/resource_dispatcher_host_impl.cc
index 3e200a25cd7..7dff16b1a90 100644
--- a/chromium/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/chromium/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -1329,7 +1329,8 @@ void ResourceDispatcherHostImpl::BeginRequest(
}
ContinuePendingBeginRequest(
requester_info, request_id, request_data, sync_result_handler, route_id,
- headers, std::move(mojo_request), std::move(url_loader_client), true, 0);
+ headers, std::move(mojo_request), std::move(url_loader_client),
+ HeaderInterceptorResult::CONTINUE);
}
void ResourceDispatcherHostImpl::ContinuePendingBeginRequest(
@@ -1341,13 +1342,14 @@ void ResourceDispatcherHostImpl::ContinuePendingBeginRequest(
const net::HttpRequestHeaders& headers,
mojom::URLLoaderAssociatedRequest mojo_request,
mojom::URLLoaderClientPtr url_loader_client,
- bool continue_request,
- int error_code) {
+ HeaderInterceptorResult interceptor_result) {
DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload());
- if (!continue_request) {
- if (requester_info->IsRenderer()) {
+ if (interceptor_result != HeaderInterceptorResult::CONTINUE) {
+ if (requester_info->IsRenderer() &&
+ interceptor_result == HeaderInterceptorResult::KILL) {
// TODO(ananta): Find a way to specify the right error code here. Passing
- // in a non-content error code is not safe.
+ // in a non-content error code is not safe, but future header interceptors
+ // might say to kill for reasons other than illegal origins.
bad_message::ReceivedBadMessage(requester_info->filter(),
bad_message::RDH_ILLEGAL_ORIGIN);
}
diff --git a/chromium/content/browser/loader/resource_dispatcher_host_impl.h b/chromium/content/browser/loader/resource_dispatcher_host_impl.h
index c30b304c738..13b0378ad65 100644
--- a/chromium/content/browser/loader/resource_dispatcher_host_impl.h
+++ b/chromium/content/browser/loader/resource_dispatcher_host_impl.h
@@ -583,9 +583,8 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
// decisions which could be time consuming. We allow for these decisions
// to be made asynchronously. The request proceeds when we hear back from
// the interceptors about whether to continue or not.
- // The |continue_request| parameter in the function indicates whether the
- // request should be continued or aborted. The |error_code| parameter is set
- // if |continue_request| is false.
+ // The |interceptor_result| indicates whether the request should be continued
+ // or aborted, and in the latter case whether the renderer should be killed.
void ContinuePendingBeginRequest(
scoped_refptr<ResourceRequesterInfo> requester_info,
int request_id,
@@ -595,8 +594,7 @@ class CONTENT_EXPORT ResourceDispatcherHostImpl
const net::HttpRequestHeaders& headers,
mojom::URLLoaderAssociatedRequest mojo_request,
mojom::URLLoaderClientPtr url_loader_client,
- bool continue_request,
- int error_code);
+ HeaderInterceptorResult interceptor_result);
// Creates a ResourceHandler to be used by BeginRequest() for normal resource
// loading.
diff --git a/chromium/content/browser/media/android/media_player_renderer.cc b/chromium/content/browser/media/android/media_player_renderer.cc
index 7e5874aedd2..9c129c6cba3 100644
--- a/chromium/content/browser/media/android/media_player_renderer.cc
+++ b/chromium/content/browser/media/android/media_player_renderer.cc
@@ -32,7 +32,6 @@ media::MediaUrlInterceptor* g_media_url_interceptor = nullptr;
MediaPlayerRenderer::MediaPlayerRenderer(RenderFrameHost* render_frame_host)
: render_frame_host_(render_frame_host),
- duration_(media::kInfiniteDuration),
has_error_(false),
weak_factory_(this) {}
diff --git a/chromium/content/browser/pointer_lock_browsertest.cc b/chromium/content/browser/pointer_lock_browsertest.cc
index 46fde73b719..ad5e90c7b3a 100644
--- a/chromium/content/browser/pointer_lock_browsertest.cc
+++ b/chromium/content/browser/pointer_lock_browsertest.cc
@@ -307,4 +307,115 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockChildFrameDetached) {
web_contents()->GetMouseLockWidget());
}
+IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockWheelEventRouting) {
+ GURL main_url(embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?a(b)"));
+ EXPECT_TRUE(NavigateToURL(shell(), main_url));
+
+ FrameTreeNode* root = web_contents()->GetFrameTree()->root();
+ FrameTreeNode* child = root->child_at(0);
+ RenderWidgetHostInputEventRouter* router =
+ web_contents()->GetInputEventRouter();
+ RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
+ root->current_frame_host()->GetView());
+ RenderWidgetHostViewBase* child_view = static_cast<RenderWidgetHostViewBase*>(
+ child->current_frame_host()->GetView());
+
+ // Request a pointer lock on the root frame's body.
+ EXPECT_TRUE(ExecuteScript(root, "document.body.requestPointerLock()"));
+
+ // Root frame should have been granted pointer lock.
+ bool locked = false;
+ EXPECT_TRUE(ExecuteScriptAndExtractBool(root,
+ "window.domAutomationController.send("
+ "document.pointerLockElement == "
+ "document.body);",
+ &locked));
+ EXPECT_TRUE(locked);
+
+ // Add a mouse move wheel event listener to the root frame.
+ EXPECT_TRUE(ExecuteScript(
+ root,
+ "var x; var y; var mX; var mY; document.addEventListener('mousewheel', "
+ "function(e) {x = e.x; y = e.y; dX = e.deltaX; dY = e.deltaY;});"));
+ MainThreadFrameObserver root_observer(root_view->GetRenderWidgetHost());
+ root_observer.Wait();
+
+ blink::WebMouseWheelEvent wheel_event(
+ blink::WebInputEvent::MouseWheel, blink::WebInputEvent::NoModifiers,
+ blink::WebInputEvent::TimeStampForTesting);
+ wheel_event.x = 10;
+ wheel_event.y = 11;
+ wheel_event.deltaX = -12;
+ wheel_event.deltaY = -13;
+ router->RouteMouseWheelEvent(root_view, &wheel_event, ui::LatencyInfo());
+
+ // Make sure that the renderer handled the input event.
+ root_observer.Wait();
+
+ int x, y, deltaX, deltaY;
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ root, "window.domAutomationController.send(x);", &x));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ root, "window.domAutomationController.send(y);", &y));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ root, "window.domAutomationController.send(dX);", &deltaX));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ root, "window.domAutomationController.send(dY);", &deltaY));
+ EXPECT_EQ(10, x);
+ EXPECT_EQ(11, y);
+ EXPECT_EQ(12, deltaX);
+ EXPECT_EQ(13, deltaY);
+
+ // Release pointer lock on root frame.
+ EXPECT_TRUE(ExecuteScript(root, "document.exitPointerLock()"));
+
+ // Request a pointer lock on the child frame's body.
+ EXPECT_TRUE(ExecuteScript(child, "document.body.requestPointerLock()"));
+
+ // Child frame should have been granted pointer lock.
+ EXPECT_TRUE(ExecuteScriptAndExtractBool(child,
+ "window.domAutomationController.send("
+ "document.pointerLockElement == "
+ "document.body);",
+ &locked));
+ EXPECT_TRUE(locked);
+
+ // Add a mouse move event listener to the child frame.
+ EXPECT_TRUE(ExecuteScript(
+ child,
+ "var x; var y; var mX; var mY; document.addEventListener('mousewheel', "
+ "function(e) {x = e.x; y = e.y; dX = e.deltaX; dY = e.deltaY;});"));
+ MainThreadFrameObserver child_observer(child_view->GetRenderWidgetHost());
+ child_observer.Wait();
+
+ gfx::Point transformed_point;
+ root_view->TransformPointToCoordSpaceForView(gfx::Point(0, 0), child_view,
+ &transformed_point);
+
+ wheel_event.x = -transformed_point.x() + 14;
+ wheel_event.y = -transformed_point.y() + 15;
+ wheel_event.deltaX = -16;
+ wheel_event.deltaY = -17;
+ // We use root_view intentionally as the RenderWidgetHostInputEventRouter is
+ // responsible for correctly routing the event to the child frame.
+ router->RouteMouseWheelEvent(root_view, &wheel_event, ui::LatencyInfo());
+
+ // Make sure that the renderer handled the input event.
+ child_observer.Wait();
+
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ child, "window.domAutomationController.send(x);", &x));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ child, "window.domAutomationController.send(y);", &y));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ child, "window.domAutomationController.send(dX);", &deltaX));
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ child, "window.domAutomationController.send(dY);", &deltaY));
+ EXPECT_EQ(14, x);
+ EXPECT_EQ(15, y);
+ EXPECT_EQ(16, deltaX);
+ EXPECT_EQ(17, deltaY);
+}
+
} // namespace content
diff --git a/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc b/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc
index 2b0afcbf377..2ff6b89c7e1 100644
--- a/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc
+++ b/chromium/content/browser/renderer_host/render_widget_host_input_event_router.cc
@@ -263,18 +263,22 @@ void RenderWidgetHostInputEventRouter::RouteMouseWheelEvent(
RenderWidgetHostViewBase* root_view,
blink::WebMouseWheelEvent* event,
const ui::LatencyInfo& latency) {
+ RenderWidgetHostViewBase* target = nullptr;
+ gfx::Point transformed_point;
+
if (root_view->IsMouseLocked()) {
- RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost())
- ->delegate()
- ->GetMouseLockWidget()
- ->GetView()
- ->ProcessMouseEvent(*event, latency);
- return;
+ target = RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost())
+ ->delegate()
+ ->GetMouseLockWidget()
+ ->GetView();
+ if (!root_view->TransformPointToCoordSpaceForView(
+ gfx::Point(event->x, event->y), target, &transformed_point))
+ return;
+ } else {
+ target = FindEventTarget(root_view, gfx::Point(event->x, event->y),
+ &transformed_point);
}
- gfx::Point transformed_point;
- RenderWidgetHostViewBase* target = FindEventTarget(
- root_view, gfx::Point(event->x, event->y), &transformed_point);
if (!target)
return;
diff --git a/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm b/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm
index 9ce93d256d4..b7f8bad5ef1 100644
--- a/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/chromium/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -568,7 +568,8 @@ RenderWidgetHostImpl* RenderWidgetHostViewMac::GetActiveWidget() {
const TextInputManager::CompositionRangeInfo*
RenderWidgetHostViewMac::GetCompositionRangeInfo() {
- return text_input_manager_->GetCompositionRangeInfo();
+ return GetTextInputManager() ? text_input_manager_->GetCompositionRangeInfo()
+ : nullptr;
}
const TextInputManager::TextSelection*
diff --git a/chromium/content/browser/security_exploit_browsertest.cc b/chromium/content/browser/security_exploit_browsertest.cc
index 3d61efb0e97..780d8223741 100644
--- a/chromium/content/browser/security_exploit_browsertest.cc
+++ b/chromium/content/browser/security_exploit_browsertest.cc
@@ -421,7 +421,7 @@ void OnHttpHeaderReceived(const std::string& header,
int child_process_id,
content::ResourceContext* resource_context,
OnHeaderProcessedCallback callback) {
- callback.Run(false, content::bad_message::RDH_ILLEGAL_ORIGIN);
+ callback.Run(HeaderInterceptorResult::KILL);
}
// Renderer processes should not be able to spoof Origin HTTP headers.
diff --git a/chromium/content/browser/service_worker/service_worker_browsertest.cc b/chromium/content/browser/service_worker/service_worker_browsertest.cc
index 9551a4878cd..6915c118ad2 100644
--- a/chromium/content/browser/service_worker/service_worker_browsertest.cc
+++ b/chromium/content/browser/service_worker/service_worker_browsertest.cc
@@ -1499,7 +1499,7 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
content::ResourceContext* resource_context,
OnHeaderProcessedCallback callback) {
DCHECK_EQ(kNavigationPreloadHeaderName, header);
- callback.Run(false, 0);
+ callback.Run(HeaderInterceptorResult::KILL);
}
void SetupForNavigationPreloadTest(const GURL& scope,
diff --git a/chromium/content/common/drag_traits.h b/chromium/content/common/drag_traits.h
index bf20e175fa0..16ea9b1e8fa 100644
--- a/chromium/content/common/drag_traits.h
+++ b/chromium/content/common/drag_traits.h
@@ -35,6 +35,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::DropData)
IPC_STRUCT_TRAITS_MEMBER(html)
IPC_STRUCT_TRAITS_MEMBER(html_base_url)
IPC_STRUCT_TRAITS_MEMBER(file_contents)
+ IPC_STRUCT_TRAITS_MEMBER(file_contents_source_url)
IPC_STRUCT_TRAITS_MEMBER(file_contents_filename_extension)
IPC_STRUCT_TRAITS_MEMBER(file_contents_content_disposition)
IPC_STRUCT_TRAITS_MEMBER(custom_data)
diff --git a/chromium/content/common/gpu_host_messages.h b/chromium/content/common/gpu_host_messages.h
index 6e76f92761f..01bf3d7f29d 100644
--- a/chromium/content/common/gpu_host_messages.h
+++ b/chromium/content/common/gpu_host_messages.h
@@ -45,6 +45,14 @@ IPC_STRUCT_BEGIN(GpuMsg_CreateGpuMemoryBuffer_Params)
IPC_STRUCT_MEMBER(gpu::SurfaceHandle, surface_handle)
IPC_STRUCT_END()
+IPC_STRUCT_TRAITS_BEGIN(content::EstablishChannelParams)
+ IPC_STRUCT_TRAITS_MEMBER(client_id)
+ IPC_STRUCT_TRAITS_MEMBER(client_tracing_id)
+ IPC_STRUCT_TRAITS_MEMBER(preempts)
+ IPC_STRUCT_TRAITS_MEMBER(allow_view_command_buffers)
+ IPC_STRUCT_TRAITS_MEMBER(allow_real_time_streams)
+IPC_STRUCT_TRAITS_END()
+
IPC_STRUCT_TRAITS_BEGIN(gpu::GpuPreferences)
IPC_STRUCT_TRAITS_MEMBER(single_process)
IPC_STRUCT_TRAITS_MEMBER(in_process_gpu)
@@ -92,6 +100,15 @@ IPC_STRUCT_TRAITS_END()
// Tells the GPU process to shutdown itself.
IPC_MESSAGE_CONTROL0(GpuMsg_Finalize)
+// Tells the GPU process to create a new channel for communication with a
+// given client. The channel name is returned in a
+// GpuHostMsg_ChannelEstablished message. The client ID is passed so
+// that the GPU process reuses an existing channel to that process if it exists.
+// This ID is a unique opaque identifier generated by the browser process.
+// The client_tracing_id is a unique ID used for the purposes of tracing.
+IPC_MESSAGE_CONTROL1(GpuMsg_EstablishChannel,
+ content::EstablishChannelParams /* params */)
+
// Tells the GPU process to close the channel identified by |client_id|.
// If no channel can be identified, do nothing.
IPC_MESSAGE_CONTROL1(GpuMsg_CloseChannel, int32_t /* client_id */)
@@ -145,6 +162,10 @@ IPC_MESSAGE_CONTROL3(GpuHostMsg_Initialized,
::gpu::GPUInfo /* gpu_info */,
::gpu::GpuFeatureInfo /* gpu_feature_info */)
+// Response from GPU to a GpuHostMsg_EstablishChannel message.
+IPC_MESSAGE_CONTROL1(GpuHostMsg_ChannelEstablished,
+ IPC::ChannelHandle /* channel_handle */)
+
// Message to the GPU that a shader was loaded from disk.
IPC_MESSAGE_CONTROL1(GpuMsg_LoadedShader, std::string /* encoded shader */)
diff --git a/chromium/content/common/sandbox_win.cc b/chromium/content/common/sandbox_win.cc
index 789a7a882d4..1b139b06f59 100644
--- a/chromium/content/common/sandbox_win.cc
+++ b/chromium/content/common/sandbox_win.cc
@@ -814,10 +814,12 @@ sandbox::ResultCode StartSandboxedProcess(
}
}
+#if !defined(OFFICIAL_BUILD)
// If stdout/stderr point to a Windows console, these calls will
// have no effect. These calls can fail with SBOX_ERROR_BAD_PARAMS.
policy->SetStdoutHandle(GetStdHandle(STD_OUTPUT_HANDLE));
policy->SetStderrHandle(GetStdHandle(STD_ERROR_HANDLE));
+#endif
if (!delegate->PreSpawnTarget(policy.get()))
return sandbox::SBOX_ERROR_DELEGATE_PRE_SPAWN;
diff --git a/chromium/content/gpu/gpu_child_thread.cc b/chromium/content/gpu/gpu_child_thread.cc
index de49633c845..6da716b9ec9 100644
--- a/chromium/content/gpu/gpu_child_thread.cc
+++ b/chromium/content/gpu/gpu_child_thread.cc
@@ -276,6 +276,7 @@ bool GpuChildThread::OnMessageReceived(const IPC::Message& msg) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(GpuChildThread, msg)
+ IPC_MESSAGE_HANDLER(GpuMsg_EstablishChannel, OnEstablishChannel)
IPC_MESSAGE_HANDLER(GpuMsg_CloseChannel, OnCloseChannel)
IPC_MESSAGE_HANDLER(GpuMsg_DestroyGpuMemoryBuffer, OnDestroyGpuMemoryBuffer)
IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader)
@@ -466,6 +467,17 @@ void GpuChildThread::OnGpuSwitched() {
ui::GpuSwitchingManager::GetInstance()->NotifyGpuSwitched();
}
+void GpuChildThread::OnEstablishChannel(const EstablishChannelParams& params) {
+ if (!gpu_channel_manager())
+ return;
+
+ IPC::ChannelHandle channel_handle = gpu_channel_manager()->EstablishChannel(
+ params.client_id, params.client_tracing_id, params.preempts,
+ params.allow_view_command_buffers, params.allow_real_time_streams);
+ gpu_service_->media_gpu_channel_manager()->AddChannel(params.client_id);
+ Send(new GpuHostMsg_ChannelEstablished(channel_handle));
+}
+
void GpuChildThread::OnCloseChannel(int32_t client_id) {
if (gpu_channel_manager())
gpu_channel_manager()->RemoveChannel(client_id);
diff --git a/chromium/content/gpu/gpu_child_thread.h b/chromium/content/gpu/gpu_child_thread.h
index bac6fac97fd..a3af520ef09 100644
--- a/chromium/content/gpu/gpu_child_thread.h
+++ b/chromium/content/gpu/gpu_child_thread.h
@@ -46,6 +46,7 @@ class TargetServices;
namespace content {
class GpuServiceFactory;
+struct EstablishChannelParams;
// The main thread of the GPU child process. There will only ever be one of
// these per process. It does process initialization and shutdown. It forwards
@@ -128,6 +129,7 @@ class GpuChildThread : public ChildThreadImpl,
#endif
void OnGpuSwitched();
+ void OnEstablishChannel(const EstablishChannelParams& params);
void OnCloseChannel(int32_t client_id);
void OnLoadedShader(const std::string& shader);
void OnDestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
diff --git a/chromium/content/public/browser/resource_dispatcher_host.h b/chromium/content/public/browser/resource_dispatcher_host.h
index a3761fbd0ef..540fa6defce 100644
--- a/chromium/content/public/browser/resource_dispatcher_host.h
+++ b/chromium/content/public/browser/resource_dispatcher_host.h
@@ -23,11 +23,25 @@ class ResourceContext;
class ResourceDispatcherHostDelegate;
class RenderFrameHost;
+// This value is returned by header interceptors below, to determine if a
+// request should proceed based on the values of HTTP headers.
+enum class HeaderInterceptorResult {
+ // Allow the request to proceed with the given headers.
+ CONTINUE,
+
+ // Force the request to fail, since the headers were not supported values.
+ FAIL,
+
+ // Force the request to fail and kill the renderer process, since it attempted
+ // to use an illegal header value that could pose a security risk.
+ KILL,
+};
+
// This callback is invoked when the interceptor finishes processing the
// header.
-// Parameter 1 is a bool indicating success or failure.
-// Parameter 2 contains the error code in case of failure, else 0.
-typedef base::Callback<void(bool, int)> OnHeaderProcessedCallback;
+// Parameter 1 indicates whether to continue the request, fail it, or kill the
+// renderer process (and fail it).
+typedef base::Callback<void(HeaderInterceptorResult)> OnHeaderProcessedCallback;
// This callback is registered by interceptors who are interested in being
// notified of certain HTTP headers in outgoing requests. For e.g. Origin.
diff --git a/chromium/content/public/common/common_param_traits_macros.h b/chromium/content/public/common/common_param_traits_macros.h
index 0b895af9d44..e3bc5511dd2 100644
--- a/chromium/content/public/common/common_param_traits_macros.h
+++ b/chromium/content/public/common/common_param_traits_macros.h
@@ -256,6 +256,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::WebPreferences)
IPC_STRUCT_TRAITS_MEMBER(enable_instant_source_buffer_gc)
IPC_STRUCT_TRAITS_MEMBER(presentation_receiver)
IPC_STRUCT_TRAITS_MEMBER(media_controls_enabled)
+ IPC_STRUCT_TRAITS_MEMBER(do_not_update_selection_on_mutating_selection_range)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(blink::mojom::WindowFeatures)
diff --git a/chromium/content/public/common/web_preferences.cc b/chromium/content/public/common/web_preferences.cc
index 6c86828ed60..79a5128b726 100644
--- a/chromium/content/public/common/web_preferences.cc
+++ b/chromium/content/public/common/web_preferences.cc
@@ -232,7 +232,8 @@ WebPreferences::WebPreferences()
base::TimeDelta::FromSeconds(10)),
enable_instant_source_buffer_gc(false),
presentation_receiver(false),
- media_controls_enabled(true) {
+ media_controls_enabled(true),
+ do_not_update_selection_on_mutating_selection_range(false) {
standard_font_family_map[kCommonScript] =
base::ASCIIToUTF16("Times New Roman");
fixed_font_family_map[kCommonScript] = base::ASCIIToUTF16("Courier New");
diff --git a/chromium/content/public/common/web_preferences.h b/chromium/content/public/common/web_preferences.h
index 03773883c7a..554c4d928a6 100644
--- a/chromium/content/public/common/web_preferences.h
+++ b/chromium/content/public/common/web_preferences.h
@@ -292,6 +292,12 @@ struct CONTENT_EXPORT WebPreferences {
// If disabled, media controls should never be used.
bool media_controls_enabled;
+ // Whether we want to disable updating selection on mutating selection range.
+ // This is to work around Samsung's email app issue. See
+ // https://crbug.com/699943 for details.
+ // TODO(changwan): remove this once we no longer support Android N.
+ bool do_not_update_selection_on_mutating_selection_range;
+
// We try to keep the default values the same as the default values in
// chrome, except for the cases where it would require lots of extra work for
// the embedder to use the same default value.
diff --git a/chromium/content/renderer/media/webmediaplayer_ms.cc b/chromium/content/renderer/media/webmediaplayer_ms.cc
index e51b5c5e1ed..0a01e58aeff 100644
--- a/chromium/content/renderer/media/webmediaplayer_ms.cc
+++ b/chromium/content/renderer/media/webmediaplayer_ms.cc
@@ -577,6 +577,8 @@ void WebMediaPlayerMS::OnBecamePersistentVideo(bool value) {
bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture(
gpu::gles2::GLES2Interface* gl,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) {
TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture");
@@ -597,7 +599,8 @@ bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture(
context_3d = media::Context3D(provider->ContextGL(), provider->GrContext());
DCHECK(context_3d.gl);
return video_renderer_.CopyVideoFrameTexturesToGLTexture(
- context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y);
+ context_3d, gl, video_frame.get(), texture, internal_format, type,
+ premultiply_alpha, flip_y);
}
bool WebMediaPlayerMS::texImageImpl(TexImageFunctionID functionID,
diff --git a/chromium/content/renderer/media/webmediaplayer_ms.h b/chromium/content/renderer/media/webmediaplayer_ms.h
index a7724c14bc9..2127a46733a 100644
--- a/chromium/content/renderer/media/webmediaplayer_ms.h
+++ b/chromium/content/renderer/media/webmediaplayer_ms.h
@@ -155,6 +155,8 @@ class CONTENT_EXPORT WebMediaPlayerMS
bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) override;
diff --git a/chromium/content/renderer/media_recorder/video_track_recorder.cc b/chromium/content/renderer/media_recorder/video_track_recorder.cc
index e53129e4dc5..6fc99336398 100644
--- a/chromium/content/renderer/media_recorder/video_track_recorder.cc
+++ b/chromium/content/renderer/media_recorder/video_track_recorder.cc
@@ -410,6 +410,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
public:
VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+ const VideoTrackRecorder::OnErrorCB& on_error_callback,
int32_t bits_per_second,
media::VideoCodecProfile codec,
const gfx::Size& size);
@@ -468,6 +469,9 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
// Frames and corresponding timestamps in encode as FIFO.
std::queue<VideoParamsAndTimestamp> frames_in_encode_;
+
+ // This callback can be exercised on any thread.
+ const VideoTrackRecorder::OnErrorCB on_error_callback_;
};
// Class encapsulating all libvpx interactions for VP8/VP9 encoding.
@@ -557,6 +561,7 @@ class H264Encoder final : public VideoTrackRecorder::Encoder {
VEAEncoder::VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
+ const VideoTrackRecorder::OnErrorCB& on_error_callback,
int32_t bits_per_second,
media::VideoCodecProfile codec,
const gfx::Size& size)
@@ -566,7 +571,8 @@ VEAEncoder::VEAEncoder(
RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()),
gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()),
codec_(codec),
- error_notified_(false) {
+ error_notified_(false),
+ on_error_callback_(on_error_callback) {
DCHECK(gpu_factories_);
DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth);
DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight);
@@ -639,8 +645,7 @@ void VEAEncoder::BitstreamBufferReady(int32_t bitstream_buffer_id,
void VEAEncoder::NotifyError(media::VideoEncodeAccelerator::Error error) {
DVLOG(3) << __func__;
DCHECK(encoding_task_runner_->BelongsToCurrentThread());
-
- // TODO(emircan): Notify the owner via a callback.
+ on_error_callback_.Run();
error_notified_ = true;
}
@@ -1156,7 +1161,10 @@ VideoTrackRecorder::VideoTrackRecorder(
// InitializeEncoder() will be called on Render Main thread.
MediaStreamVideoSink::ConnectToTrack(
- track_, media::BindToCurrentLoop(initialize_encoder_callback_), false);
+ track_,
+ media::BindToCurrentLoop(base::Bind(initialize_encoder_callback_,
+ true /* allow_vea_encoder */)),
+ false);
}
VideoTrackRecorder::~VideoTrackRecorder() {
@@ -1188,7 +1196,8 @@ void VideoTrackRecorder::OnVideoFrameForTesting(
if (!encoder_) {
DCHECK(!initialize_encoder_callback_.is_null());
- initialize_encoder_callback_.Run(frame, timestamp);
+ initialize_encoder_callback_.Run(true /* allow_vea_encoder */, frame,
+ timestamp);
}
encoder_->StartFrameEncode(frame, timestamp);
@@ -1198,6 +1207,7 @@ void VideoTrackRecorder::InitializeEncoder(
CodecId codec,
const OnEncodedVideoCB& on_encoded_video_callback,
int32_t bits_per_second,
+ bool allow_vea_encoder,
const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks capture_time) {
DVLOG(3) << __func__ << frame->visible_rect().size().ToString();
@@ -1208,11 +1218,15 @@ void VideoTrackRecorder::InitializeEncoder(
const gfx::Size& input_size = frame->visible_rect().size();
const auto& vea_supported_profile =
GetCodecEnumerator()->CodecIdToVEAProfile(codec);
- if (vea_supported_profile != media::VIDEO_CODEC_PROFILE_UNKNOWN &&
+ if (allow_vea_encoder &&
+ vea_supported_profile != media::VIDEO_CODEC_PROFILE_UNKNOWN &&
input_size.width() >= kVEAEncoderMinResolutionWidth &&
input_size.height() >= kVEAEncoderMinResolutionHeight) {
- encoder_ = new VEAEncoder(on_encoded_video_callback, bits_per_second,
- vea_supported_profile, input_size);
+ encoder_ = new VEAEncoder(
+ on_encoded_video_callback,
+ media::BindToCurrentLoop(base::Bind(&VideoTrackRecorder::OnError,
+ weak_ptr_factory_.GetWeakPtr())),
+ bits_per_second, vea_supported_profile, input_size);
} else {
switch (codec) {
#if BUILDFLAG(RTC_USE_H264)
@@ -1241,4 +1255,19 @@ void VideoTrackRecorder::InitializeEncoder(
false);
}
+void VideoTrackRecorder::OnError() {
+ DVLOG(3) << __func__;
+ DCHECK(main_render_thread_checker_.CalledOnValidThread());
+
+ // InitializeEncoder() will be called to reinitialize encoder on Render Main
+ // thread.
+ MediaStreamVideoSink::DisconnectFromTrack();
+ encoder_ = nullptr;
+ MediaStreamVideoSink::ConnectToTrack(
+ track_,
+ media::BindToCurrentLoop(base::Bind(initialize_encoder_callback_,
+ false /*allow_vea_encoder*/)),
+ false);
+}
+
} // namespace content
diff --git a/chromium/content/renderer/media_recorder/video_track_recorder.h b/chromium/content/renderer/media_recorder/video_track_recorder.h
index 895523d696e..667cb237b82 100644
--- a/chromium/content/renderer/media_recorder/video_track_recorder.h
+++ b/chromium/content/renderer/media_recorder/video_track_recorder.h
@@ -53,6 +53,7 @@ class CONTENT_EXPORT VideoTrackRecorder
std::unique_ptr<std::string> encoded_data,
base::TimeTicks capture_timestamp,
bool is_key_frame)>;
+ using OnErrorCB = base::Closure;
static CodecId GetPreferredCodecId();
@@ -73,8 +74,10 @@ class CONTENT_EXPORT VideoTrackRecorder
void InitializeEncoder(CodecId codec,
const OnEncodedVideoCB& on_encoded_video_callback,
int32_t bits_per_second,
+ bool allow_vea_encoder,
const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks capture_time);
+ void OnError();
// Used to check that we are destroyed on the same thread we were created.
base::ThreadChecker main_render_thread_checker_;
@@ -85,7 +88,8 @@ class CONTENT_EXPORT VideoTrackRecorder
// Inner class to encode using whichever codec is configured.
scoped_refptr<Encoder> encoder_;
- base::Callback<void(const scoped_refptr<media::VideoFrame>& frame,
+ base::Callback<void(bool allow_vea_encoder,
+ const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks capture_time)>
initialize_encoder_callback_;
diff --git a/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc b/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc
index 093d2cf0045..1f901a6ca8c 100644
--- a/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc
+++ b/chromium/content/renderer/media_recorder/video_track_recorder_unittest.cc
@@ -112,6 +112,12 @@ class VideoTrackRecorderTest
video_track_recorder_->OnVideoFrameForTesting(frame, capture_time);
}
+ void OnError() { video_track_recorder_->OnError(); }
+
+ bool HasEncoderInstance() {
+ return video_track_recorder_->encoder_.get() != nullptr;
+ }
+
// A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks
// and Sources below into believing they are on the right threads.
const base::MessageLoopForUI message_loop_;
@@ -211,6 +217,31 @@ TEST_P(VideoTrackRecorderTest, EncodeFrameWithPaddedCodedSize) {
Mock::VerifyAndClearExpectations(this);
}
+// Inserts an OnError() call between sent frames.
+TEST_P(VideoTrackRecorderTest, HandlesOnError) {
+ const gfx::Size& frame_size = kTrackRecorderTestSize[0];
+ const scoped_refptr<VideoFrame> video_frame =
+ VideoFrame::CreateBlackFrame(frame_size);
+
+ InSequence s;
+ EXPECT_CALL(*this, DoOnEncodedVideo(_, _, _, true)).Times(1);
+ Encode(video_frame, base::TimeTicks::Now());
+
+ EXPECT_TRUE(HasEncoderInstance());
+ OnError();
+ EXPECT_FALSE(HasEncoderInstance());
+
+ base::RunLoop run_loop;
+ base::Closure quit_closure = run_loop.QuitClosure();
+ EXPECT_CALL(*this, DoOnEncodedVideo(_, _, _, true))
+ .Times(1)
+ .WillOnce(RunClosure(quit_closure));
+ Encode(video_frame, base::TimeTicks::Now());
+ run_loop.Run();
+
+ Mock::VerifyAndClearExpectations(this);
+}
+
INSTANTIATE_TEST_CASE_P(,
VideoTrackRecorderTest,
::testing::Combine(ValuesIn(kTrackRecorderTestCodec),
diff --git a/chromium/content/renderer/render_view_impl.cc b/chromium/content/renderer/render_view_impl.cc
index 1869ab4f557..aedd7599c00 100644
--- a/chromium/content/renderer/render_view_impl.cc
+++ b/chromium/content/renderer/render_view_impl.cc
@@ -1077,6 +1077,8 @@ void RenderView::ApplyWebPreferences(const WebPreferences& prefs,
prefs.video_fullscreen_detection_enabled);
settings->setEmbeddedMediaExperienceEnabled(
prefs.embedded_media_experience_enabled);
+ settings->setDoNotUpdateSelectionOnMutatingSelectionRange(
+ prefs.do_not_update_selection_on_mutating_selection_range);
#else // defined(OS_ANDROID)
settings->setCrossOriginMediaPlaybackRequiresUserGesture(
prefs.cross_origin_media_playback_requires_user_gesture);
diff --git a/chromium/content/renderer/render_widget.cc b/chromium/content/renderer/render_widget.cc
index e0ae75e2ad4..0b23ea4dff4 100644
--- a/chromium/content/renderer/render_widget.cc
+++ b/chromium/content/renderer/render_widget.cc
@@ -941,6 +941,7 @@ void RenderWidget::RequestScheduleAnimation() {
void RenderWidget::UpdateVisualState() {
GetWebWidget()->updateAllLifecyclePhases();
+ GetWebWidget()->setSuppressFrameRequestsWorkaroundFor704763Only(false);
if (time_to_first_active_paint_recorded_)
return;
@@ -958,6 +959,8 @@ void RenderWidget::UpdateVisualState() {
void RenderWidget::WillBeginCompositorFrame() {
TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame");
+ GetWebWidget()->setSuppressFrameRequestsWorkaroundFor704763Only(true);
+
// The UpdateTextInputState can result in further layout and possibly
// enable GPU acceleration so they need to be called before any painting
// is done.
diff --git a/chromium/device/usb/webusb_descriptors.cc b/chromium/device/usb/webusb_descriptors.cc
index 57468182278..1bc243d114e 100644
--- a/chromium/device/usb/webusb_descriptors.cc
+++ b/chromium/device/usb/webusb_descriptors.cc
@@ -576,7 +576,9 @@ void ReadWebUsbDescriptors(scoped_refptr<UsbDeviceHandle> device_handle,
bool FindInWebUsbAllowedOrigins(
const device::WebUsbAllowedOrigins* allowed_origins,
- const GURL& origin) {
+ const GURL& origin,
+ base::Optional<uint8_t> config_value,
+ base::Optional<uint8_t> first_interface) {
if (!allowed_origins)
return false;
@@ -584,10 +586,16 @@ bool FindInWebUsbAllowedOrigins(
return true;
for (const auto& config : allowed_origins->configurations) {
+ if (config_value && *config_value != config.configuration_value)
+ continue;
+
if (base::ContainsValue(config.origins, origin))
return true;
for (const auto& function : config.functions) {
+ if (first_interface && *first_interface != function.first_interface)
+ continue;
+
if (base::ContainsValue(function.origins, origin))
return true;
}
diff --git a/chromium/device/usb/webusb_descriptors.h b/chromium/device/usb/webusb_descriptors.h
index c88b1f97389..34a7d614ca0 100644
--- a/chromium/device/usb/webusb_descriptors.h
+++ b/chromium/device/usb/webusb_descriptors.h
@@ -12,6 +12,7 @@
#include "base/callback_forward.h"
#include "base/memory/ref_counted.h"
+#include "base/optional.h"
#include "url/gurl.h"
namespace device {
@@ -70,10 +71,13 @@ void ReadWebUsbDescriptors(
void(std::unique_ptr<WebUsbAllowedOrigins> allowed_origins,
const GURL& landing_page)>& callback);
-// Check if the origin is allowed.
+// Check if the origin is allowed to access a given device, optionally filtering
+// by configuration and function.
bool FindInWebUsbAllowedOrigins(
const device::WebUsbAllowedOrigins* allowed_origins,
- const GURL& origin);
+ const GURL& origin,
+ base::Optional<uint8_t> configuration_value,
+ base::Optional<uint8_t> first_interface);
} // device
diff --git a/chromium/extensions/browser/app_window/app_window.cc b/chromium/extensions/browser/app_window/app_window.cc
index 69126c3436a..fe70056fd01 100644
--- a/chromium/extensions/browser/app_window/app_window.cc
+++ b/chromium/extensions/browser/app_window/app_window.cc
@@ -561,6 +561,10 @@ base::string16 AppWindow::GetTitle() const {
return title;
}
+bool AppWindow::HasCustomIcon() const {
+ return window_icon_url_.is_valid() || app_icon_url_.is_valid();
+}
+
void AppWindow::SetAppIconUrl(const GURL& url) {
// Avoid using any previous icons that were being downloaded.
image_loader_ptr_factory_.InvalidateWeakPtrs();
@@ -595,7 +599,8 @@ void AppWindow::UpdateAppIcon(const gfx::Image& image) {
// Set the showInShelf=true window icon and add the app_icon_image_
// as a badge. If the image is empty, set the default app icon placeholder
// as the base image.
- if (window_icon_url_.is_valid() && !app_icon_image_->image().IsEmpty()) {
+ if (window_icon_url_.is_valid() && app_icon_image_ &&
+ !app_icon_image_->image().IsEmpty()) {
gfx::Image base_image =
!image.IsEmpty()
? image
diff --git a/chromium/extensions/browser/app_window/app_window.h b/chromium/extensions/browser/app_window/app_window.h
index 66fdd4c1417..d89b7456513 100644
--- a/chromium/extensions/browser/app_window/app_window.h
+++ b/chromium/extensions/browser/app_window/app_window.h
@@ -360,6 +360,10 @@ class AppWindow : public content::WebContentsDelegate,
// unblock resource requests.
void NotifyRenderViewReady();
+ // Returns true if window has custom icon in case either |window_icon_url_| or
+ // |app_icon_url_| is set. Custom icon may be not loaded yet.
+ bool HasCustomIcon() const;
+
// Whether the app window wants to be alpha enabled.
bool requested_alpha_enabled() const { return requested_alpha_enabled_; }
diff --git a/chromium/extensions/browser/extension_icon_image.h b/chromium/extensions/browser/extension_icon_image.h
index 2698de2def2..2ec6c2602ce 100644
--- a/chromium/extensions/browser/extension_icon_image.h
+++ b/chromium/extensions/browser/extension_icon_image.h
@@ -77,6 +77,9 @@ class IconImage : public content::NotificationObserver {
gfx::Image image() const { return image_; }
const gfx::ImageSkia& image_skia() const { return image_skia_; }
+ // Returns true if the icon is attached to an existing extension.
+ bool is_valid() const { return extension_ ? true : false; }
+
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
diff --git a/chromium/extensions/common/api/_permission_features.json b/chromium/extensions/common/api/_permission_features.json
index de72ed47c25..cd8b963cf9b 100644
--- a/chromium/extensions/common/api/_permission_features.json
+++ b/chromium/extensions/common/api/_permission_features.json
@@ -523,7 +523,7 @@
}
],
"virtualKeyboard": {
- "channel": "dev",
+ "channel": "stable",
"extension_types": ["platform_app"],
"platforms": ["chromeos"],
"session_types": ["kiosk"]
diff --git a/chromium/extensions/renderer/i18n_custom_bindings.cc b/chromium/extensions/renderer/i18n_custom_bindings.cc
index 34dd6c89c0f..57e0e96e2e8 100644
--- a/chromium/extensions/renderer/i18n_custom_bindings.cc
+++ b/chromium/extensions/renderer/i18n_custom_bindings.cc
@@ -41,6 +41,10 @@ namespace {
// Max number of languages to detect.
const int kCldNumLangs = 3;
+// CLD3 minimum reliable byte threshold. Predictions for inputs below this size
+// in bytes will be considered unreliable.
+const int kCld3MinimumByteThreshold = 50;
+
struct DetectedLanguage {
DetectedLanguage(const std::string& language, int percentage)
: language(language), percentage(percentage) {}
@@ -310,8 +314,17 @@ void I18NCustomBindings::DetectTextLanguage(
#elif BUILDFLAG(CLD_VERSION) == 3
chrome_lang_id::NNetLanguageIdentifier nnet_lang_id(/*min_num_bytes=*/0,
/*max_num_bytes=*/512);
- const std::vector<chrome_lang_id::NNetLanguageIdentifier::Result>
- lang_results = nnet_lang_id.FindTopNMostFreqLangs(text, kCldNumLangs);
+ std::vector<chrome_lang_id::NNetLanguageIdentifier::Result> lang_results =
+ nnet_lang_id.FindTopNMostFreqLangs(text, kCldNumLangs);
+
+ // is_reliable is set to false if we believe the input is too short to be
+ // accurately identified by the current model.
+ if (text.size() < kCld3MinimumByteThreshold) {
+ for (auto& result : lang_results) {
+ result.is_reliable = false;
+ }
+ }
+
LanguageDetectionResult result;
// Populate LanguageDetectionResult with prediction reliability, languages,
diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view.js b/chromium/extensions/renderer/resources/guest_view/guest_view.js
index 28811964c18..c8ce3b98711 100644
--- a/chromium/extensions/renderer/resources/guest_view/guest_view.js
+++ b/chromium/extensions/renderer/resources/guest_view/guest_view.js
@@ -48,6 +48,8 @@ function GuestViewImpl(guestView, viewType, guestInstanceId) {
// Prevent GuestViewImpl inadvertently inheriting code from the global Object,
// allowing a pathway for executing unintended user code execution.
+// TODO(wjmaclean): Use utils.expose() here instead? Track down other issues
+// of Object inheritance. https://crbug.com/701034
GuestViewImpl.prototype.__proto__ = null;
// Possible states.
diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js b/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js
index 4f6c3fd32c3..7c9189c7230 100644
--- a/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js
+++ b/chromium/extensions/renderer/resources/guest_view/guest_view_attributes.js
@@ -17,6 +17,12 @@ function Attribute(name, view) {
this.defineProperty();
}
+// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
+// allowing a pathway for unintended execution of user code.
+// TODO(wjmaclean): Use utils.expose() here instead, track down other issues
+// of Object inheritance. https://crbug.com/701034
+Attribute.prototype.__proto__ = null;
+
// Retrieves and returns the attribute's value.
Attribute.prototype.getValue = function() {
return this.view.element.getAttribute(this.name) || '';
diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_container.js b/chromium/extensions/renderer/resources/guest_view/guest_view_container.js
index 2cf1584c5df..2ef77f4f635 100644
--- a/chromium/extensions/renderer/resources/guest_view/guest_view_container.js
+++ b/chromium/extensions/renderer/resources/guest_view/guest_view_container.js
@@ -33,6 +33,8 @@ function GuestViewContainer(element, viewType) {
// Prevent GuestViewContainer inadvertently inheriting code from the global
// Object, allowing a pathway for executing unintended user code execution.
+// TODO(wjmaclean): Use utils.expose() here instead? Track down other issues
+// of Object inheritance. https://crbug.com/701034
GuestViewContainer.prototype.__proto__ = null;
// Forward public API methods from |proto| to their internal implementations.
diff --git a/chromium/extensions/renderer/resources/guest_view/guest_view_events.js b/chromium/extensions/renderer/resources/guest_view/guest_view_events.js
index d3c64746233..4381c39c20c 100644
--- a/chromium/extensions/renderer/resources/guest_view/guest_view_events.js
+++ b/chromium/extensions/renderer/resources/guest_view/guest_view_events.js
@@ -27,6 +27,12 @@ function GuestViewEvents(view) {
this.setupEvents();
}
+// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
+// allowing a pathway for unintended execution of user code.
+// TODO(wjmaclean): Use utils.expose() here instead, track down other issues
+// of Object inheritance. https://crbug.com/701034
+GuestViewEvents.prototype.__proto__ = null;
+
// |GuestViewEvents.EVENTS| is a dictionary of extension events to be listened
// for, which specifies how each event should be handled. The events are
// organized by name, and by default will be dispatched as DOM events with
diff --git a/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js
index 3dc177e198f..4333398adce 100644
--- a/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js
+++ b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_action_requests.js
@@ -37,6 +37,12 @@ function WebViewActionRequest(webViewImpl, event, webViewEvent, interfaceName) {
}
}
+// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
+// allowing a pathway for unintended execution of user code.
+// TODO(wjmaclean): Use utils.expose() here instead, track down other issues
+// of Object inheritance. https://crbug.com/701034
+WebViewActionRequest.prototype.__proto__ = null;
+
// Performs the default action for the request.
WebViewActionRequest.prototype.defaultAction = function() {
// Do nothing if the action has already been taken or the requester is
diff --git a/chromium/extensions/strings/extensions_strings_ca.xtb b/chromium/extensions/strings/extensions_strings_ca.xtb
index b266bb3d613..1d249ce5534 100644
--- a/chromium/extensions/strings/extensions_strings_ca.xtb
+++ b/chromium/extensions/strings/extensions_strings_ca.xtb
@@ -2,7 +2,7 @@
<!DOCTYPE translationbundle>
<translationbundle lang="ca">
<translation id="1135328998467923690">El paquet no és vàlid: "<ph name="ERROR_CODE" />".</translation>
-<translation id="1256619696651732561">Analitzador per a manifests d'extensions</translation>
+<translation id="1256619696651732561">Analitzador per a fitxers de manifest d'extensions</translation>
<translation id="1445572445564823378">Aquesta extensió està alentint <ph name="PRODUCT_NAME" />. L'heu de desactivar per restaurar el rendiment de: <ph name="PRODUCT_NAME" />.</translation>
<translation id="149347756975725155">No s'ha pogut carregar la icona d'extensió "<ph name="ICON" />".</translation>
<translation id="1803557475693955505">No s'ha pogut carregar la pàgina en segon pla "<ph name="BACKGROUND_PAGE" />".</translation>
diff --git a/chromium/gpu/command_buffer/common/capabilities.h b/chromium/gpu/command_buffer/common/capabilities.h
index b6445c376d3..826d0b4479e 100644
--- a/chromium/gpu/command_buffer/common/capabilities.h
+++ b/chromium/gpu/command_buffer/common/capabilities.h
@@ -167,6 +167,9 @@ struct GPU_EXPORT Capabilities {
// work around this. See https://crbug.com/449150 for an example.
bool emulate_rgb_buffer_with_rgba = false;
+ // When true, non-empty post sub buffer calls are unsupported.
+ bool disable_non_empty_post_sub_buffers = false;
+
int major_version = 2;
int minor_version = 0;
};
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 9295ee0eb3b..5b50a3125c7 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3780,6 +3780,10 @@ Capabilities GLES2DecoderImpl::GetCapabilities() {
workarounds().disable_webgl_rgb_multisampling_usage;
caps.emulate_rgb_buffer_with_rgba =
workarounds().disable_gl_rgb_format;
+ if (workarounds().disable_non_empty_post_sub_buffers_for_onscreen_surfaces &&
+ !surface_->IsOffscreen()) {
+ caps.disable_non_empty_post_sub_buffers = true;
+ }
return caps;
}
diff --git a/chromium/gpu/config/gpu_driver_bug_list_json.cc b/chromium/gpu/config/gpu_driver_bug_list_json.cc
index 9f361cf9ee7..ac67cf4d53c 100644
--- a/chromium/gpu/config/gpu_driver_bug_list_json.cc
+++ b/chromium/gpu/config/gpu_driver_bug_list_json.cc
@@ -19,7 +19,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
{
"name": "gpu driver bug list",
// Please update the version number whenever you change this file.
- "version": "9.35",
+ "version": "9.36",
"entries": [
{
"id": 1,
@@ -85,14 +85,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
"id": 19,
"description": "Disable depth textures on Android with Qualcomm GPUs",
"cr_bugs": [682075],
- "os": {
- "type": "android",
- "version": {
- "op": "<",
- "value": "6.0"
- }
- },
- "gl_vendor": "Qualcomm.*",
+ "gl_renderer": "Adreno \\(TM\\) [23].*",
"features": [
"disable_depth_texture"
],
@@ -433,7 +426,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
"value": "6.0"
}
},
- "gl_vendor": "Qualcomm.*",
+ "gl_renderer": "Adreno \\(TM\\) 4.*",
"features": [
"disable_chromium_framebuffer_multisample"
]
@@ -525,7 +518,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
"gl_type": "gl",
"gl_renderer": ".*Mesa.*",
"features": [
- "disable_post_sub_buffers_for_onscreen_surfaces"
+ "disable_non_empty_post_sub_buffers_for_onscreen_surfaces"
]
},
{
@@ -2325,8 +2318,7 @@ LONG_STRING_CONST(
"id": 214,
"description": "Certain versions of Qualcomm driver don't setup scissor state correctly when FBO0 is bound.",
"cr_bugs": [670607, 696627, 698197],
- "gl_vendor": "Qualcomm.*",
- "machine_model_name": ["Nexus 7", "KFTHWI", "KFSAWI", "KFAPWI", "KFTHWA", "KFSAWA", "KFAPWA"],
+ "gl_renderer": "Adreno \\(TM\\) 3.*",
"features": [
"force_update_scissor_state_when_binding_fbo0",
// Somehow the main workaround above won't work without the one below.
diff --git a/chromium/gpu/config/gpu_driver_bug_workaround_type.h b/chromium/gpu/config/gpu_driver_bug_workaround_type.h
index fecb82c19a4..3e68fd3b472 100644
--- a/chromium/gpu/config/gpu_driver_bug_workaround_type.h
+++ b/chromium/gpu/config/gpu_driver_bug_workaround_type.h
@@ -207,6 +207,8 @@
wake_up_gpu_before_drawing) \
GPU_OP(USE_TESTING_GPU_DRIVER_WORKAROUND, \
use_gpu_driver_workaround_for_testing) \
+ GPU_OP(DISABLE_NON_EMPTY_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES, \
+ disable_non_empty_post_sub_buffers_for_onscreen_surfaces) \
// clang-format on
namespace gpu {
diff --git a/chromium/gpu/config/software_rendering_list_json.cc b/chromium/gpu/config/software_rendering_list_json.cc
index 6f54fd47967..be002ceae2e 100644
--- a/chromium/gpu/config/software_rendering_list_json.cc
+++ b/chromium/gpu/config/software_rendering_list_json.cc
@@ -18,7 +18,7 @@ const char kSoftwareRenderingListJson[] = LONG_STRING_CONST(
{
"name": "software rendering list",
// Please update the version number whenever you change this file.
- "version": "12.19",
+ "version": "12.20",
"entries": [
{
"id": 1,
@@ -1469,7 +1469,7 @@ LONG_STRING_CONST(
"value": "6.0"
}
},
- "gl_vendor": "Qualcomm.*",
+ "gl_renderer": "Adreno \\(TM\\) 4.*",
"features": [
"webgl2"
]
@@ -1510,8 +1510,7 @@ LONG_STRING_CONST(
"id": 140,
"description": "Some old Qualcomm scissor bug workaround needs disabling MSAA to work, which is a core part of WebGL 2.",
"cr_bugs": [670607, 696627, 698197],
- "gl_vendor": "Qualcomm.*",
- "machine_model_name": ["Nexus 7", "KFTHWI", "KFSAWI", "KFAPWI", "KFTHWA", "KFSAWA", "KFAPWA"],
+ "gl_renderer": "Adreno \\(TM\\) 3.*",
"features": [
"webgl2"
]
diff --git a/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h b/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h
index 4dc28d16fb5..dacd67809fe 100644
--- a/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h
+++ b/chromium/gpu/ipc/common/gpu_command_buffer_traits_multi.h
@@ -128,6 +128,7 @@ IPC_STRUCT_TRAITS_BEGIN(gpu::Capabilities)
IPC_STRUCT_TRAITS_MEMBER(chromium_image_rgb_emulation)
IPC_STRUCT_TRAITS_MEMBER(emulate_rgb_buffer_with_rgba)
IPC_STRUCT_TRAITS_MEMBER(set_draw_rectangle)
+ IPC_STRUCT_TRAITS_MEMBER(disable_non_empty_post_sub_buffers)
IPC_STRUCT_TRAITS_MEMBER(major_version)
IPC_STRUCT_TRAITS_MEMBER(minor_version)
diff --git a/chromium/ios/chrome/browser/ui/history/BUILD.gn b/chromium/ios/chrome/browser/ui/history/BUILD.gn
index 892643980a0..d25410a3252 100644
--- a/chromium/ios/chrome/browser/ui/history/BUILD.gn
+++ b/chromium/ios/chrome/browser/ui/history/BUILD.gn
@@ -166,6 +166,8 @@ source_set("unit_tests_arc") {
"//ios/chrome/browser/history",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/signin:test_support",
+ "//ios/chrome/browser/sync:sync",
+ "//ios/chrome/browser/sync:test_support",
"//ios/chrome/browser/ui",
"//ios/chrome/browser/ui/collection_view",
"//ios/chrome/browser/ui/util",
@@ -174,6 +176,7 @@ source_set("unit_tests_arc") {
"//ios/web",
"//ios/web:test_support",
"//skia",
+ "//testing/gmock",
"//testing/gtest",
"//third_party/ocmock",
"//ui/base",
diff --git a/chromium/media/base/container_names.cc b/chromium/media/base/container_names.cc
index 24d8ea953ff..4eb91d82d58 100644
--- a/chromium/media/base/container_names.cc
+++ b/chromium/media/base/container_names.cc
@@ -956,29 +956,35 @@ static bool CheckMov(const uint8_t* buffer, int buffer_size) {
RCHECK(buffer_size > 8);
int offset = 0;
+ int valid_top_level_boxes = 0;
while (offset + 8 < buffer_size) {
uint32_t atomsize = Read32(buffer + offset);
uint32_t atomtype = Read32(buffer + offset + 4);
- // Only need to check for ones that are valid at the top level.
+
+ // Only need to check for atoms that are valid at the top level. However,
+ // "Boxes with an unrecognized type shall be ignored and skipped." So
+ // simply make sure that at least two recognized top level boxes are found.
+ // This list matches BoxReader::IsValidTopLevelBox().
switch (atomtype) {
- case TAG('f','t','y','p'):
- case TAG('p','d','i','n'):
- case TAG('m','o','o','v'):
- case TAG('m','o','o','f'):
- case TAG('m','f','r','a'):
- case TAG('m','d','a','t'):
- case TAG('f','r','e','e'):
- case TAG('s','k','i','p'):
- case TAG('m','e','t','a'):
- case TAG('m','e','c','o'):
- case TAG('s','t','y','p'):
- case TAG('s','i','d','x'):
- case TAG('s','s','i','x'):
- case TAG('p','r','f','t'):
- case TAG('b','l','o','c'):
+ case TAG('f', 't', 'y', 'p'):
+ case TAG('p', 'd', 'i', 'n'):
+ case TAG('b', 'l', 'o', 'c'):
+ case TAG('m', 'o', 'o', 'v'):
+ case TAG('m', 'o', 'o', 'f'):
+ case TAG('m', 'f', 'r', 'a'):
+ case TAG('m', 'd', 'a', 't'):
+ case TAG('f', 'r', 'e', 'e'):
+ case TAG('s', 'k', 'i', 'p'):
+ case TAG('m', 'e', 't', 'a'):
+ case TAG('m', 'e', 'c', 'o'):
+ case TAG('s', 't', 'y', 'p'):
+ case TAG('s', 'i', 'd', 'x'):
+ case TAG('s', 's', 'i', 'x'):
+ case TAG('p', 'r', 'f', 't'):
+ case TAG('u', 'u', 'i', 'd'):
+ case TAG('e', 'm', 's', 'g'):
+ ++valid_top_level_boxes;
break;
- default:
- return false;
}
if (atomsize == 1) {
// Indicates that the length is the next 64bits.
@@ -992,7 +998,7 @@ static bool CheckMov(const uint8_t* buffer, int buffer_size) {
break; // Indicates the last atom or length too big.
offset += atomsize;
}
- return true;
+ return valid_top_level_boxes >= 2;
}
enum MPEGVersion {
diff --git a/chromium/media/base/container_names_unittest.cc b/chromium/media/base/container_names_unittest.cc
index b05632acb63..cb70a2f1e3d 100644
--- a/chromium/media/base/container_names_unittest.cc
+++ b/chromium/media/base/container_names_unittest.cc
@@ -160,7 +160,9 @@ TEST(ContainerNamesTest, FileCheckWAV) {
}
TEST(ContainerNamesTest, FileCheckMOV) {
+ TestFile(CONTAINER_MOV, GetTestDataFilePath("bear_rotate_90.mp4"));
TestFile(CONTAINER_MOV, GetTestDataFilePath("bear-1280x720.mp4"));
+ TestFile(CONTAINER_MOV, GetTestDataFilePath("crbug657437.mp4"));
TestFile(CONTAINER_MOV, GetTestDataFilePath("sfx.m4a"));
}
diff --git a/chromium/media/blink/webmediaplayer_impl.cc b/chromium/media/blink/webmediaplayer_impl.cc
index d558fdef403..94adf818ab2 100644
--- a/chromium/media/blink/webmediaplayer_impl.cc
+++ b/chromium/media/blink/webmediaplayer_impl.cc
@@ -552,6 +552,10 @@ void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) {
if (watch_time_reporter_)
watch_time_reporter_->OnSeeking();
+ // Clear any new frame processed callbacks on seek; otherwise we'll end up
+ // logging a time long after the seek completes.
+ frame_time_report_cb_.Cancel();
+
// TODO(sandersd): Move |seeking_| to PipelineController.
// TODO(sandersd): Do we want to reset the idle timer here?
delegate_->SetIdle(delegate_id_, false);
@@ -954,6 +958,8 @@ size_t WebMediaPlayerImpl::videoDecodedByteCount() const {
bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
gpu::gles2::GLES2Interface* gl,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) {
DCHECK(main_task_runner_->BelongsToCurrentThread());
@@ -974,7 +980,8 @@ bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
if (!context_3d_cb_.is_null())
context_3d = context_3d_cb_.Run();
return skcanvas_video_renderer_.CopyVideoFrameTexturesToGLTexture(
- context_3d, gl, video_frame.get(), texture, premultiply_alpha, flip_y);
+ context_3d, gl, video_frame.get(), texture, internal_format, type,
+ premultiply_alpha, flip_y);
}
void WebMediaPlayerImpl::setContentDecryptionModule(
@@ -1250,6 +1257,10 @@ void WebMediaPlayerImpl::OnEnded() {
ended_ = true;
client_->timeChanged();
+ // Clear any new frame processed callbacks on end; otherwise we'll end up
+ // logging a time long after playback ends.
+ frame_time_report_cb_.Cancel();
+
// We don't actually want this to run until |client_| calls seek() or pause(),
// but that should have already happened in timeChanged() and so this is
// expected to be a no-op.
@@ -1480,14 +1491,14 @@ void WebMediaPlayerImpl::OnFrameShown() {
// for.
if ((!paused_ && IsBackgroundOptimizationCandidate()) ||
paused_when_hidden_) {
- VideoFrameCompositor::OnNewProcessedFrameCB new_processed_frame_cb =
- BindToCurrentLoop(base::Bind(
- &WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame,
- AsWeakPtr(), base::TimeTicks::Now()));
+ frame_time_report_cb_.Reset(
+ base::Bind(&WebMediaPlayerImpl::ReportTimeFromForegroundToFirstFrame,
+ AsWeakPtr(), base::TimeTicks::Now()));
compositor_task_runner_->PostTask(
FROM_HERE,
base::Bind(&VideoFrameCompositor::SetOnNewProcessedFrameCallback,
- base::Unretained(compositor_), new_processed_frame_cb));
+ base::Unretained(compositor_),
+ BindToCurrentLoop(frame_time_report_cb_.callback())));
}
EnableVideoTrackIfNeeded();
diff --git a/chromium/media/blink/webmediaplayer_impl.h b/chromium/media/blink/webmediaplayer_impl.h
index 8a5cfd9e82d..3bf0e32ae07 100644
--- a/chromium/media/blink/webmediaplayer_impl.h
+++ b/chromium/media/blink/webmediaplayer_impl.h
@@ -171,6 +171,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface* gl,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) override;
@@ -708,6 +710,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
// the background. Affects the value of ShouldPauseVideoWhenHidden().
bool video_locked_when_paused_when_hidden_ = false;
+ base::CancelableCallback<void(base::TimeTicks)> frame_time_report_cb_;
+
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
};
diff --git a/chromium/media/renderers/skcanvas_video_renderer.cc b/chromium/media/renderers/skcanvas_video_renderer.cc
index 418c8be1f23..1c8848b87c2 100644
--- a/chromium/media/renderers/skcanvas_video_renderer.cc
+++ b/chromium/media/renderers/skcanvas_video_renderer.cc
@@ -186,12 +186,9 @@ sk_sp<SkImage> NewSkImageFromVideoFrameNative(VideoFrame* video_frame,
gl->GenTextures(1, &source_texture);
DCHECK(source_texture);
gl->BindTexture(GL_TEXTURE_2D, source_texture);
- const gfx::Size& natural_size = video_frame->natural_size();
- gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, natural_size.width(),
- natural_size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
- nullptr);
SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
- gl, video_frame, source_texture, true, false);
+ gl, video_frame, source_texture, GL_RGBA, GL_UNSIGNED_BYTE, true,
+ false);
} else {
gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData());
source_texture = gl->CreateAndConsumeTextureCHROMIUM(
@@ -756,6 +753,8 @@ void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
gpu::gles2::GLES2Interface* gl,
VideoFrame* video_frame,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) {
DCHECK(video_frame);
@@ -777,15 +776,9 @@ void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture(
// value down to get the expected result.
// "flip_y == true" means to reverse the video orientation while
// "flip_y == false" means to keep the intrinsic orientation.
-
- // The video's texture might be larger than the natural size because
- // the encoder might have had to round up to the size of a macroblock.
- // Make sure to only copy the natural size to avoid putting garbage
- // into the bottom of the destination texture.
- const gfx::Size& natural_size = video_frame->natural_size();
- gl->CopySubTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0,
- 0, 0, natural_size.width(), natural_size.height(),
- flip_y, premultiply_alpha, false);
+ gl->CopyTextureCHROMIUM(source_texture, 0, GL_TEXTURE_2D, texture, 0,
+ internal_format, type, flip_y, premultiply_alpha,
+ false);
gl->DeleteTextures(1, &source_texture);
gl->Flush();
@@ -798,6 +791,8 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture(
gpu::gles2::GLES2Interface* destination_gl,
const scoped_refptr<VideoFrame>& video_frame,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -834,15 +829,9 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture(
destination_gl->CreateAndConsumeTextureCHROMIUM(
mailbox_holder.texture_target, mailbox_holder.mailbox.name);
- // The video's texture might be larger than the natural size because
- // the encoder might have had to round up to the size of a macroblock.
- // Make sure to only copy the natural size to avoid putting garbage
- // into the bottom of the destination texture.
- const gfx::Size& natural_size = video_frame->natural_size();
- destination_gl->CopySubTextureCHROMIUM(
- intermediate_texture, 0, GL_TEXTURE_2D, texture, 0, 0, 0, 0, 0,
- natural_size.width(), natural_size.height(), flip_y, premultiply_alpha,
- false);
+ destination_gl->CopyTextureCHROMIUM(intermediate_texture, 0, GL_TEXTURE_2D,
+ texture, 0, internal_format, type,
+ flip_y, premultiply_alpha, false);
destination_gl->DeleteTextures(1, &intermediate_texture);
// Wait for destination context to consume mailbox before deleting it in
@@ -858,7 +847,8 @@ bool SkCanvasVideoRenderer::CopyVideoFrameTexturesToGLTexture(
video_frame->UpdateReleaseSyncToken(&client);
} else {
CopyVideoFrameSingleTextureToGLTexture(destination_gl, video_frame.get(),
- texture, premultiply_alpha, flip_y);
+ texture, internal_format, type,
+ premultiply_alpha, flip_y);
}
return true;
diff --git a/chromium/media/renderers/skcanvas_video_renderer.h b/chromium/media/renderers/skcanvas_video_renderer.h
index 3831139c03c..dbbf2aed074 100644
--- a/chromium/media/renderers/skcanvas_video_renderer.h
+++ b/chromium/media/renderers/skcanvas_video_renderer.h
@@ -67,13 +67,12 @@ class MEDIA_EXPORT SkCanvasVideoRenderer {
// Copy the contents of texture of |video_frame| to texture |texture|.
// |level|, |internal_format|, |type| specify target texture |texture|.
// The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE.
- // Assumes |texture| has already been allocated with the appropriate
- // size and a compatible format, internal format and type; this is
- // effectively a "TexSubImage" operation.
static void CopyVideoFrameSingleTextureToGLTexture(
gpu::gles2::GLES2Interface* gl,
VideoFrame* video_frame,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y);
@@ -82,15 +81,14 @@ class MEDIA_EXPORT SkCanvasVideoRenderer {
// |level|, |internal_format|, |type| specify target texture |texture|.
// The format of |video_frame| must be VideoFrame::NATIVE_TEXTURE.
// |context_3d| has a GrContext that may be used during the copy.
- // Assumes |texture| has already been allocated with the appropriate
- // size and a compatible format, internal format and type; this is
- // effectively a "TexSubImage" operation.
// Returns true on success.
bool CopyVideoFrameTexturesToGLTexture(
const Context3D& context_3d,
gpu::gles2::GLES2Interface* destination_gl,
const scoped_refptr<VideoFrame>& video_frame,
unsigned int texture,
+ unsigned int internal_format,
+ unsigned int type,
bool premultiply_alpha,
bool flip_y);
diff --git a/chromium/net/BUILD.gn b/chromium/net/BUILD.gn
index 12de0001bf9..af14d0fbd7d 100644
--- a/chromium/net/BUILD.gn
+++ b/chromium/net/BUILD.gn
@@ -2283,6 +2283,7 @@ bundle_data("test_support_bundle_data") {
"data/ssl/certificates/spdy_pooling.pem",
"data/ssl/certificates/start_after_expiry.pem",
"data/ssl/certificates/subjectAltName_sanity_check.pem",
+ "data/ssl/certificates/subjectAltName_www_example_com.pem",
"data/ssl/certificates/test_mail_google_com.pem",
"data/ssl/certificates/thawte.single.pem",
"data/ssl/certificates/tls_feature_extension.pem",
diff --git a/chromium/net/base/registry_controlled_domains/effective_tld_names.dat b/chromium/net/base/registry_controlled_domains/effective_tld_names.dat
index bba925debcd..75983559b78 100644
--- a/chromium/net/base/registry_controlled_domains/effective_tld_names.dat
+++ b/chromium/net/base/registry_controlled_domains/effective_tld_names.dat
@@ -6793,11 +6793,16 @@ net.zm
org.zm
sch.zm
-// zw : https://en.wikipedia.org/wiki/.zw
-*.zw
+// zw : https://www.potraz.gov.zw/
+// Confirmed by registry <bmtengwa@potraz.gov.zw> 2017-01-25
+zw
+ac.zw
+co.zw
+gov.zw
+mil.zw
+org.zw
-
-// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-11-29T01:06:51Z
+// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2017-02-23T00:46:09Z
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
@@ -7729,9 +7734,6 @@ dvag
// dvr : 2016-05-26 Hughes Satellite Systems Corporation
dvr
-// dwg : 2015-07-23 Autodesk, Inc.
-dwg
-
// earth : 2014-12-04 Interlink Co., Ltd.
earth
@@ -8299,9 +8301,6 @@ ieee
// ifm : 2014-01-30 ifm electronic gmbh
ifm
-// iinet : 2014-07-03 Connect West Pty. Ltd.
-iinet
-
// ikano : 2015-07-09 Ikano S.A.
ikano
@@ -8869,9 +8868,6 @@ mtr
// mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC
mutual
-// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française
-mutuelle
-
// nab : 2015-08-20 National Australia Bank Limited
nab
@@ -9370,6 +9366,9 @@ room
// rsvp : 2014-05-08 Charleston Road Registry Inc.
rsvp
+// rugby : 2016-12-15 World Rugby Strategic Developments Limited
+rugby
+
// ruhr : 2013-10-02 regiodot GmbH & Co. KG
ruhr
@@ -9796,9 +9795,6 @@ theater
// theatre : 2015-05-07
theatre
-// theguardian : 2015-04-30 Guardian News and Media Limited
-theguardian
-
// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America
tiaa
@@ -9946,7 +9942,7 @@ ventures
// verisign : 2015-08-13 VeriSign, Inc.
verisign
-// versicherung : 2014-03-20 dotversicherung-registry GmbH
+// versicherung : 2014-03-20
versicherung
// vet : 2014-03-06
@@ -10171,9 +10167,6 @@ xin
// xn--4gbrim : 2013-10-04 Suhub Electronic Establishment
موقع
-// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc.
-一号店
-
// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center
公益
@@ -10234,7 +10227,7 @@ xin
// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
삼성
-// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limted
+// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limited
商标
// xn--czrs0t : 2013-12-19 Wild Island, LLC
@@ -10291,7 +10284,7 @@ xin
// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
संगठन
-// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limted
+// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limited
餐厅
// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
@@ -10600,6 +10593,11 @@ myasustor.com
// Submitted by Andreas Weise <a.weise@avm.de>
myfritz.net
+// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com
+// Submitted by James Kennedy <domains@advisorwebsites.com>
+*.awdev.ca
+*.advisor.ws
+
// backplane : https://www.backplane.io
// Submitted by Anthony Voutas <anthony@backplane.io>
backplaneapp.io
@@ -10690,6 +10688,10 @@ xenapponazure.com
// Submitted by Leon Rowland <leon@clearvox.nl>
virtueeldomein.nl
+// Cloud66 : https://www.cloud66.com/
+// Submitted by Khash Sajadi <khash@cloud66.com>
+c66.me
+
// cloudControl : https://www.cloudcontrol.com/
// Submitted by Tobias Wilken <tw@cloudcontrol.com>
cloudcontrolled.com
@@ -10765,6 +10767,7 @@ cyon.site
// Daplie, Inc : https://daplie.com
// Submitted by AJ ONeal <aj@daplie.com>
daplie.me
+localhost.daplie.me
// Dansk.net : http://www.dansk.net/
// Submitted by Anani Voule <digital@digital.co.dk>
@@ -11173,8 +11176,10 @@ us.eu.org
// Submitted by Michal Kralik <support@evennode.com>
eu-1.evennode.com
eu-2.evennode.com
+eu-3.evennode.com
us-1.evennode.com
us-2.evennode.com
+us-3.evennode.com
// Facebook, Inc.
// Submitted by Peter Ruibal <public-suffix@fb.com>
@@ -11258,19 +11263,26 @@ vologda.su
// Fastly Inc. : http://www.fastly.com/
// Submitted by Fastly Security <security@fastly.com>
+fastlylb.net
+map.fastlylb.net
+freetls.fastly.net
map.fastly.net
a.prod.fastly.net
global.prod.fastly.net
a.ssl.fastly.net
b.ssl.fastly.net
global.ssl.fastly.net
-fastlylb.net
-map.fastlylb.net
// Featherhead : https://featherhead.xyz/
// Submitted by Simon Menke <simon@featherhead.xyz>
fhapp.xyz
+// Fedora : https://fedoraproject.org/
+// submitted by Patrick Uiterwijk <puiterwijk@fedoraproject.org>
+fedorainfracloud.org
+fedorapeople.org
+cloud.fedoraproject.org
+
// Firebase, Inc.
// Submitted by Chris Raynor <chris@firebase.com>
firebaseapp.com
@@ -11434,6 +11446,10 @@ hepforge.org
herokuapp.com
herokussl.com
+// Ici la Lune : http://www.icilalune.com/
+// Submitted by Simon Morvan <simon@icilalune.com>
+moonscale.net
+
// iki.fi
// Submitted by Hannu Aronsson <haa@iki.fi>
iki.fi
@@ -11472,6 +11488,10 @@ se.leg.br
sp.leg.br
to.leg.br
+// IPiFony Systems, Inc. : https://www.ipifony.com/
+// Submitted by Matthew Hardeman <mhardeman@ipifony.com>
+ipifony.net
+
// Joyent : https://www.joyent.com/
// Submitted by Brian Bennett <brian.bennett@joyent.com>
*.triton.zone
@@ -11624,6 +11644,10 @@ zapto.org
// Submitted by Matthew Brown <mattbrown@nyc.mn>
nyc.mn
+// Octopodal Solutions, LLC. : https://ulterius.io/
+// Submitted by Andrew Sampson <andrew@ulterius.io>
+cya.gg
+
// One Fold Media : http://www.onefoldmedia.com/
// Submitted by Eddie Jones <eddie@onefoldmedia.com>
nid.io
@@ -11791,6 +11815,10 @@ spacekit.io
// Submitted by Lina He <info@stackspace.io>
stackspace.space
+// Storj Labs Inc. : https://storj.io/
+// Submitted by Philip Hutchins <hostmaster@storj.io>
+storj.farm
+
// Synology, Inc. : https://www.synology.com/
// Submitted by Rony Weng <ronyweng@synology.com>
diskstation.me
@@ -11806,6 +11834,7 @@ familyds.org
i234.me
myds.me
synology.me
+vpnplus.to
// TAIFUN Software AG : http://taifun-software.de
// Submitted by Bjoern Henke <dev-server@taifun-software.de>
@@ -11849,6 +11878,10 @@ syno-ds.de
synology-diskstation.de
synology-ds.de
+// Uberspace : https://uberspace.de
+// Submitted by Moritz Werner <mwerner@jonaspasche.com>
+uber.space
+
// UDR Limited : http://www.udr.hk.com
// Submitted by registry <hostmaster@udr.hk.com>
hk.com
@@ -11872,6 +11905,10 @@ remotewd.com
// Submitted by Yuvi Panda <yuvipanda@wikimedia.org>
wmflabs.org
+// XS4ALL Internet bv: https://www.xs4all.nl/
+// Submitted by Daniel Mostertman <unixbeheer+publicsuffix@xs4all.net>
+xs4all.space
+
// Yola : https://www.yola.com/
// Submitted by Stefano Rivera <stefano@yola.com>
yolasite.com
diff --git a/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf b/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf
index 5d152382a64..ba49a41d4e3 100644
--- a/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf
+++ b/chromium/net/base/registry_controlled_domains/effective_tld_names.gperf
@@ -93,6 +93,7 @@ ac.uk, 0
ac.vn, 0
ac.za, 0
ac.zm, 0
+ac.zw, 0
aca.pro, 0
academy, 0
academy.museum, 0
@@ -118,6 +119,7 @@ adult, 0
adult.ht, 0
adv.br, 0
adv.mz, 0
+advisor.ws, 6
adygeya.ru, 4
adygeya.su, 4
ae, 0
@@ -465,6 +467,7 @@ avocat.pro, 0
avoues.fr, 0
aw, 0
awaji.hyogo.jp, 0
+awdev.ca, 6
aws, 0
ax, 0
axa, 0
@@ -859,6 +862,7 @@ c.bg, 0
c.cdn77.org, 4
c.la, 4
c.se, 0
+c66.me, 4
ca, 0
ca.eu.org, 4
ca.it, 0
@@ -1123,6 +1127,7 @@ clinton.museum, 0
clock.museum, 0
clothing, 0
cloud, 0
+cloud.fedoraproject.org, 4
cloudapp.net, 4
cloudcontrolapp.com, 4
cloudcontrolled.com, 4
@@ -1217,6 +1222,7 @@ co.ve, 0
co.vi, 0
co.za, 0
co.zm, 0
+co.zw, 0
coach, 0
coal.museum, 0
coastaldefence.museum, 0
@@ -1462,6 +1468,7 @@ cw, 0
cx, 0
cy, 0
cy.eu.org, 4
+cya.gg, 4
cyber.museum, 0
cymru, 0
cymru.museum, 0
@@ -1642,7 +1649,6 @@ dvag, 0
dvr, 0
dvrcam.info, 4
dvrdns.org, 4
-dwg, 0
dy.fi, 4
dyn-ip24.de, 4
dyn-o-saur.com, 4
@@ -1932,6 +1938,7 @@ etnedal.no, 0
eu, 0
eu-1.evennode.com, 4
eu-2.evennode.com, 4
+eu-3.evennode.com, 4
eu.com, 4
eu.int, 0
eu.meteorapp.com, 4
@@ -1992,6 +1999,8 @@ fed.us, 0
federation.aero, 0
fedex, 0
fedje.no, 0
+fedorainfracloud.org, 4
+fedorapeople.org, 4
feedback, 0
fermo.it, 0
ferrara.it, 0
@@ -2125,6 +2134,7 @@ freebox-os.fr, 4
freeboxos.com, 4
freeboxos.fr, 4
freemasonry.museum, 0
+freetls.fastly.net, 4
frei.no, 0
freiburg.museum, 0
freight.aero, 0
@@ -2585,6 +2595,7 @@ gov.vn, 0
gov.ws, 0
gov.za, 0
gov.zm, 0
+gov.zw, 0
government.aero, 0
govt.nz, 0
gp, 0
@@ -3021,7 +3032,6 @@ iheya.okinawa.jp, 0
iida.nagano.jp, 0
iide.yamagata.jp, 0
iijima.nagano.jp, 0
-iinet, 0
iitate.fukushima.jp, 0
iiyama.nagano.jp, 0
iizuka.fukuoka.jp, 0
@@ -3169,6 +3179,7 @@ investments, 0
inzai.chiba.jp, 0
io, 0
ip6.arpa, 0
+ipifony.net, 4
ipiranga, 0
iq, 0
ir, 0
@@ -4055,6 +4066,7 @@ loabat.no, 0
loan, 0
loans, 0
localhistory.museum, 0
+localhost.daplie.me, 4
locker, 0
locus, 0
lodi.it, 0
@@ -4379,6 +4391,7 @@ mil.vc, 0
mil.ve, 0
mil.za, 0
mil.zm, 0
+mil.zw, 0
milan.it, 0
milano.it, 0
military.museum, 0
@@ -4530,6 +4543,7 @@ monza.it, 0
monzabrianza.it, 0
monzaebrianza.it, 0
monzaedellabrianza.it, 0
+moonscale.net, 4
mopar, 0
mordovia.ru, 4
mordovia.su, 4
@@ -4617,7 +4631,6 @@ music.museum, 0
mutsu.aomori.jp, 0
mutsuzawa.chiba.jp, 0
mutual, 0
-mutuelle, 0
mv, 0
mw, 0
mw.gov.pl, 0
@@ -5462,6 +5475,7 @@ org.vu, 0
org.ws, 0
org.za, 0
org.zm, 0
+org.zw, 0
organic, 0
orientexpress, 0
origins, 0
@@ -5984,6 +5998,7 @@ ru, 0
ru.com, 4
ru.eu.org, 4
ru.net, 4
+rugby, 0
ruhr, 0
run, 0
ruovat.no, 0
@@ -6630,6 +6645,7 @@ store.ro, 0
store.st, 0
store.ve, 0
storfjord.no, 0
+storj.farm, 4
stpetersburg.museum, 0
strand.no, 0
stranda.no, 0
@@ -6871,7 +6887,6 @@ thd, 0
theater, 0
theater.museum, 0
theatre, 0
-theguardian, 0
thruhere.net, 4
tiaa, 0
tickets, 0
@@ -7159,6 +7174,7 @@ u.se, 0
ua, 0
ubank, 0
ube.yamaguchi.jp, 0
+uber.space, 4
ubs, 0
uchihara.ibaraki.jp, 0
uchiko.ehime.jp, 0
@@ -7230,6 +7246,7 @@ uryu.hokkaido.jp, 0
us, 0
us-1.evennode.com, 4
us-2.evennode.com, 4
+us-3.evennode.com, 4
us-east-1.amazonaws.com, 4
us.com, 4
us.eu.org, 4
@@ -7404,6 +7421,7 @@ vote, 0
voting, 0
voto, 0
voyage, 0
+vpnplus.to, 4
vr.it, 0
vs.it, 0
vt.it, 0
@@ -7566,7 +7584,6 @@ xn--42c2d9a, 0
xn--45brj9c, 0
xn--45q11c, 0
xn--4gbrim, 0
-xn--4gq48lf9j, 0
xn--4it168d.jp, 0
xn--4it797k.jp, 0
xn--4pvxs.jp, 0
@@ -7954,6 +7971,7 @@ xn--zf0ao64a.tw, 0
xn--zf0avx.hk, 0
xn--zfr164b, 0
xperia, 0
+xs4all.space, 4
xxx, 0
xyz, 0
xz.cn, 0
@@ -8120,5 +8138,5 @@ zp.ua, 0
zt.ua, 0
zuerich, 0
zushi.kanagawa.jp, 0
-zw, 2
+zw, 0
%%
diff --git a/chromium/net/cert/x509_certificate.h b/chromium/net/cert/x509_certificate.h
index 2c6fb4d071b..e11f1042b12 100644
--- a/chromium/net/cert/x509_certificate.h
+++ b/chromium/net/cert/x509_certificate.h
@@ -188,10 +188,13 @@ class NET_EXPORT X509Certificate
const base::Time& valid_start() const { return valid_start_; }
const base::Time& valid_expiry() const { return valid_expiry_; }
- // Gets the DNS names in the certificate. Pursuant to RFC 2818, Section 3.1
+ // Gets the DNS names in the certificate. Pursuant to RFC 2818, Section 3.1
// Server Identity, if the certificate has a subjectAltName extension of
// type dNSName, this method gets the DNS names in that extension.
// Otherwise, it gets the common name in the subject field.
+ //
+ // Note: Chrome has deprecated fallback to the subject field, see
+ // https://crbug.com/308330; prefer GetSubjectAltName() instead.
void GetDNSNames(std::vector<std::string>* dns_names) const;
// Gets the subjectAltName extension field from the certificate, if any.
diff --git a/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem b/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem
new file mode 100644
index 00000000000..88a338eee20
--- /dev/null
+++ b/chromium/net/data/ssl/certificates/subjectAltName_www_example_com.pem
@@ -0,0 +1,75 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 15837232328995864193 (0xdbc926e4db217e81)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost
+ Validity
+ Not Before: Mar 28 22:42:07 2017 GMT
+ Not After : Mar 26 22:42:07 2027 GMT
+ Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:b5:12:3c:e3:76:25:c4:e5:9f:ac:69:3a:dd:40:
+ 78:95:ef:1e:f2:b6:c2:74:14:e7:ba:cc:f3:a6:46:
+ 6c:51:1f:2e:4e:9c:99:7a:82:1f:43:bc:28:8a:74:
+ 8e:52:73:59:24:ac:0a:71:c9:b5:30:a9:d3:85:f9:
+ 8c:76:d0:19:43:fe:cb:c0:d6:4b:9e:9b:76:63:84:
+ ae:99:4d:14:a2:be:ae:81:5d:05:22:b9:46:39:66:
+ 4e:42:10:57:64:26:27:f2:88:7f:55:10:38:83:7a:
+ dd:6c:09:ae:f1:09:33:04:84:ab:48:53:1c:9c:42:
+ b4:f7:ee:c5:21:7a:65:56:91:64:99:9b:f4:2c:22:
+ 50:dc:36:35:ac:04:22:eb:5c:2d:4c:6c:4b:16:70:
+ f7:13:36:f9:32:ec:6d:e8:f7:2e:f2:b9:b8:0c:e2:
+ 99:de:ed:61:7d:66:17:33:67:0e:6e:87:5d:05:65:
+ e1:98:46:2c:e7:8e:6d:a7:20:ab:87:5b:f3:32:55:
+ cb:2d:df:76:9b:cf:06:71:5c:06:77:3b:20:49:6b:
+ 47:5e:6e:ae:42:99:8b:8f:9e:c4:ba:4c:50:ec:14:
+ a1:43:8f:24:e9:9a:c8:ca:ec:b3:e2:26:d4:a5:ba:
+ c3:f8:90:b1:03:2a:05:72:a4:3f:17:bd:9c:af:68:
+ e4:17
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Alternative Name:
+ DNS:www.example.com
+ Signature Algorithm: sha256WithRSAEncryption
+ 38:41:86:d5:01:6b:00:3d:61:1e:ad:f1:82:1d:01:fc:c1:98:
+ 8e:d7:ea:46:2d:e3:7c:22:3c:ce:f2:64:f0:73:0c:e5:ea:21:
+ 3a:8f:63:e1:c0:27:3d:84:ed:0f:aa:0e:d3:ca:76:67:ba:b9:
+ f4:da:fc:d5:ec:07:f4:97:08:2c:55:e4:be:5f:0c:e7:c9:7f:
+ be:81:b5:76:d2:47:6b:be:01:82:8c:75:27:df:78:99:62:55:
+ 74:91:d9:c7:37:a3:62:1f:36:0b:ed:9f:54:01:be:87:9a:3d:
+ d5:90:1e:98:13:29:cd:23:9b:d4:a8:d0:c0:18:04:d5:05:55:
+ 97:8d:6b:89:14:0a:1b:b4:2b:bd:7d:05:68:87:72:64:9e:b9:
+ 66:a2:89:21:2a:ae:a1:b3:ef:22:0d:e1:80:46:52:11:20:3a:
+ a8:7e:18:1e:e1:19:2d:f5:de:cc:b9:f2:ff:6a:88:db:c1:31:
+ dc:34:25:e2:c0:4c:a7:6e:28:6e:b1:10:7b:04:ed:a4:82:3a:
+ 81:55:44:1a:87:25:14:69:de:2d:c0:7d:3b:e3:21:c4:21:e5:
+ ca:f6:7c:11:12:d8:7f:c1:b7:f5:45:ca:6b:e5:41:91:5d:d8:
+ db:64:48:01:64:a5:df:85:51:4b:c4:ed:27:e3:2f:b4:71:f4:
+ c6:a1:a2:ad
+-----BEGIN CERTIFICATE-----
+MIIDcjCCAlqgAwIBAgIJANvJJuTbIX6BMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW
+aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTcw
+MzI4MjI0MjA3WhcNMjcwMzI2MjI0MjA3WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE
+CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH
+VGVzdCBDQTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAtRI843YlxOWfrGk63UB4le8e8rbCdBTnuszzpkZsUR8uTpyZ
+eoIfQ7woinSOUnNZJKwKccm1MKnThfmMdtAZQ/7LwNZLnpt2Y4SumU0Uor6ugV0F
+IrlGOWZOQhBXZCYn8oh/VRA4g3rdbAmu8QkzBISrSFMcnEK09+7FIXplVpFkmZv0
+LCJQ3DY1rAQi61wtTGxLFnD3Ezb5Muxt6Pcu8rm4DOKZ3u1hfWYXM2cOboddBWXh
+mEYs545tpyCrh1vzMlXLLd92m88GcVwGdzsgSWtHXm6uQpmLj57EukxQ7BShQ48k
+6ZrIyuyz4ibUpbrD+JCxAyoFcqQ/F72cr2jkFwIDAQABoy8wLTAPBgNVHRMBAf8E
+BTADAQH/MBoGA1UdEQQTMBGCD3d3dy5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsF
+AAOCAQEAOEGG1QFrAD1hHq3xgh0B/MGYjtfqRi3jfCI8zvJk8HMM5eohOo9j4cAn
+PYTtD6oO08p2Z7q59Nr81ewH9JcILFXkvl8M58l/voG1dtJHa74Bgox1J994mWJV
+dJHZxzejYh82C+2fVAG+h5o91ZAemBMpzSOb1KjQwBgE1QVVl41riRQKG7QrvX0F
+aIdyZJ65ZqKJISquobPvIg3hgEZSESA6qH4YHuEZLfXezLny/2qI28Ex3DQl4sBM
+p24obrEQewTtpII6gVVEGoclFGneLcB9O+MhxCHlyvZ8ERLYf8G39UXKa+VBkV3Y
+22RIAWSl34VRS8TtJ+MvtHH0xqGirQ==
+-----END CERTIFICATE-----
diff --git a/chromium/net/data/ssl/scripts/ee.cnf b/chromium/net/data/ssl/scripts/ee.cnf
index 7d91d75cf63..3d42df1b65b 100644
--- a/chromium/net/data/ssl/scripts/ee.cnf
+++ b/chromium/net/data/ssl/scripts/ee.cnf
@@ -81,6 +81,13 @@ email = test@test.example
otherName = 1.2.3.4;UTF8:ignore me
dirName = more_san_sanity
+[req_san_example]
+basicConstraints = critical, CA:true
+subjectAltName = @san_example
+
+[san_example]
+DNS = www.example.com
+
[req_spdy_pooling]
subjectAltName = @spdy_pooling
diff --git a/chromium/net/data/ssl/scripts/generate-test-certs.sh b/chromium/net/data/ssl/scripts/generate-test-certs.sh
index f5395e4cf4d..abb9bd1a430 100755
--- a/chromium/net/data/ssl/scripts/generate-test-certs.sh
+++ b/chromium/net/data/ssl/scripts/generate-test-certs.sh
@@ -201,6 +201,11 @@ try openssl req -x509 -days 3650 -extensions req_san_sanity \
-config ../scripts/ee.cnf -newkey rsa:2048 -text \
-out ../certificates/subjectAltName_sanity_check.pem
+## SubjectAltName containing www.example.com
+try openssl req -x509 -days 3650 -extensions req_san_example \
+ -config ../scripts/ee.cnf -newkey rsa:2048 -text \
+ -out ../certificates/subjectAltName_www_example_com.pem
+
## Punycode handling
SUBJECT_NAME="req_punycode_dn" \
try openssl req -x509 -days 3650 -extensions req_punycode \
diff --git a/chromium/net/test/test_certificate_data.h b/chromium/net/test/test_certificate_data.h
index c8fa950786a..fbeaca748fa 100644
--- a/chromium/net/test/test_certificate_data.h
+++ b/chromium/net/test/test_certificate_data.h
@@ -33,7 +33,8 @@ static const char kNistSPKIHash[] =
#define VARIABLE_IS_NOT_USED
#endif
-// Google's cert.
+// Google's 2009 cert. Lacks a SubjectAltName, but contains www.google.com in
+// the Subject CN field.
unsigned char VARIABLE_IS_NOT_USED google_der[] = {
0x30, 0x82, 0x03, 0x21, 0x30, 0x82, 0x02, 0x8a, 0xa0, 0x03, 0x02, 0x01,
@@ -106,7 +107,8 @@ unsigned char VARIABLE_IS_NOT_USED google_der[] = {
0xdf
};
-// webkit.org's cert.
+// webkit.org's 2008 cert. Contains a SubjectAltName field with *.webkit.org and
+// webkit.org. The Subject CN field contains *.webkit.org.
unsigned char VARIABLE_IS_NOT_USED webkit_der[] = {
0x30, 0x82, 0x05, 0x0d, 0x30, 0x82, 0x03, 0xf5, 0xa0, 0x03, 0x02, 0x01,
@@ -220,7 +222,9 @@ unsigned char VARIABLE_IS_NOT_USED webkit_der[] = {
0x8a
};
-// thawte.com's cert (it's EV-licious!).
+// thawte.com 2008 Extended Validation cert. Lacks a SubjectAltName, but
+// contains www.thawte.com in the Subject CN field.
+
unsigned char VARIABLE_IS_NOT_USED thawte_der[] = {
0x30, 0x82, 0x04, 0xa5, 0x30, 0x82, 0x03, 0x8d, 0xa0, 0x03, 0x02, 0x01,
0x02, 0x02, 0x10, 0x17, 0x76, 0x05, 0x88, 0x95, 0x58, 0xee, 0xbb, 0x00,
diff --git a/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc b/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc
index fc0ecf2e326..404168ac9f2 100644
--- a/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc
+++ b/chromium/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc
@@ -2192,19 +2192,6 @@ SANDBOX_DEATH_TEST(
BPF_ASSERT(!sandbox.StartSandbox(SandboxBPF::SeccompLevel::SINGLE_THREADED));
}
-// http://crbug.com/407357
-#if !defined(THREAD_SANITIZER)
-SANDBOX_DEATH_TEST(
- SandboxBPF,
- StartSingleThreadedAsMultiThreaded,
- DEATH_MESSAGE(
- "Cannot start sandbox; process may be single-threaded when "
- "reported as not")) {
- SandboxBPF sandbox(new AllowAllPolicy());
- BPF_ASSERT(!sandbox.StartSandbox(SandboxBPF::SeccompLevel::MULTI_THREADED));
-}
-#endif // !defined(THREAD_SANITIZER)
-
// A stub handler for the UnsafeTrap. Never called.
intptr_t NoOpHandler(const struct arch_seccomp_data& args, void*) {
return -1;
diff --git a/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc b/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
index 4d8d4367130..3ab366a8e38 100644
--- a/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
+++ b/chromium/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
@@ -38,10 +38,6 @@ namespace {
bool IsRunningOnValgrind() { return RUNNING_ON_VALGRIND; }
-bool IsSingleThreaded(int proc_fd) {
- return ThreadHelpers::IsSingleThreaded(proc_fd);
-}
-
// Check if the kernel supports seccomp-filter (a.k.a. seccomp mode 2) via
// prctl().
bool KernelSupportsSeccompBPF() {
@@ -168,11 +164,6 @@ bool SandboxBPF::StartSandbox(SeccompLevel seccomp_level) {
// process is single threaded.
ThreadHelpers::AssertSingleThreaded(proc_fd_.get());
} else if (seccomp_level == SeccompLevel::MULTI_THREADED) {
- if (IsSingleThreaded(proc_fd_.get())) {
- SANDBOX_DIE("Cannot start sandbox; "
- "process may be single-threaded when reported as not");
- return false;
- }
if (!supports_tsync) {
SANDBOX_DIE("Cannot start sandbox; kernel does not support synchronizing "
"filters for a threadgroup");
diff --git a/chromium/services/ui/gpu/interfaces/gpu_service.mojom b/chromium/services/ui/gpu/interfaces/gpu_service.mojom
index 56080ad748c..6f420bd62b4 100644
--- a/chromium/services/ui/gpu/interfaces/gpu_service.mojom
+++ b/chromium/services/ui/gpu/interfaces/gpu_service.mojom
@@ -18,7 +18,7 @@ interface GpuService {
EstablishGpuChannel(int32 client_id,
uint64 client_tracing_id,
bool is_gpu_host)
- => (handle<message_pipe>? channel_handle);
+ => (handle<message_pipe> channel_handle);
[Sync]
CreateGpuMemoryBuffer(gfx.mojom.GpuMemoryBufferId id,
diff --git a/chromium/services/ui/surfaces/display_output_surface_ozone.cc b/chromium/services/ui/surfaces/display_output_surface_ozone.cc
index e63a2e88941..da565dd3db6 100644
--- a/chromium/services/ui/surfaces/display_output_surface_ozone.cc
+++ b/chromium/services/ui/surfaces/display_output_surface_ozone.cc
@@ -83,8 +83,14 @@ void DisplayOutputSurfaceOzone::SwapBuffers(cc::OutputSurfaceFrame frame) {
DCHECK(reshape_size_ == frame.size);
swap_size_ = reshape_size_;
- buffer_queue_->SwapBuffers(frame.sub_buffer_rect ? *frame.sub_buffer_rect
- : gfx::Rect(swap_size_));
+ gfx::Rect damage_rect =
+ frame.sub_buffer_rect ? *frame.sub_buffer_rect : gfx::Rect(swap_size_);
+ // Use previous buffer when damage rect is empty. This avoids unnecessary
+ // partial swap work and makes it possible to support empty swaps on devices
+ // where partial swaps are disabled.
+ if (!damage_rect.IsEmpty())
+ buffer_queue_->SwapBuffers(damage_rect);
+
DisplayOutputSurface::SwapBuffers(std::move(frame));
}
@@ -98,7 +104,7 @@ bool DisplayOutputSurfaceOzone::IsDisplayedAsOverlayPlane() const {
}
unsigned DisplayOutputSurfaceOzone::GetOverlayTextureId() const {
- return buffer_queue_->current_texture_id();
+ return buffer_queue_->GetCurrentTextureId();
}
void DisplayOutputSurfaceOzone::DidReceiveSwapBuffersAck(
diff --git a/chromium/skia/ext/skia_commit_hash.h b/chromium/skia/ext/skia_commit_hash.h
index f29b9cb28c6..b7a2d7100a3 100644
--- a/chromium/skia/ext/skia_commit_hash.h
+++ b/chromium/skia/ext/skia_commit_hash.h
@@ -3,6 +3,6 @@
#ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_
#define SKIA_EXT_SKIA_COMMIT_HASH_H_
-#define SKIA_COMMIT_HASH "954a6986d5f0136775ea469c3522dda3251af4e9"
+#define SKIA_COMMIT_HASH "8d57fc379a72d11f7ffbd2e4c78397ae71dba720"
#endif // SKIA_EXT_SKIA_COMMIT_HASH_H_
diff --git a/chromium/testing/variations/fieldtrial_testing_config.json b/chromium/testing/variations/fieldtrial_testing_config.json
index 6df5880b82f..74e9b53b74a 100644
--- a/chromium/testing/variations/fieldtrial_testing_config.json
+++ b/chromium/testing/variations/fieldtrial_testing_config.json
@@ -52,6 +52,21 @@
]
}
],
+ "AppleScriptExecuteJavaScript": [
+ {
+ "platforms": [
+ "mac"
+ ],
+ "experiments": [
+ {
+ "name": "Disabled",
+ "disable_features": [
+ "AppleScriptExecuteJavaScript"
+ ]
+ }
+ ]
+ }
+ ],
"AsyncDNS": [
{
"platforms": [
diff --git a/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp b/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp
index 00e937709f5..afd86dfca56 100644
--- a/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp
+++ b/chromium/third_party/WebKit/Source/core/css/CSSMatrix.cpp
@@ -46,6 +46,10 @@ CSSMatrix* CSSMatrix::create(ExecutionContext* executionContext,
const String& s,
ExceptionState& exceptionState) {
UseCounter::count(executionContext, UseCounter::WebKitCSSMatrix);
+ if (!s.isEmpty()) {
+ UseCounter::count(executionContext,
+ UseCounter::WebkitCSSMatrixConstructFromString);
+ }
return new CSSMatrix(s, exceptionState);
}
diff --git a/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl b/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl
index 361076611fc..d9227cf0e59 100644
--- a/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl
+++ b/chromium/third_party/WebKit/Source/core/css/WebKitCSSMatrix.idl
@@ -56,7 +56,7 @@
attribute unrestricted double m43;
attribute unrestricted double m44;
- [RaisesException] void setMatrixValue([Default=Undefined] optional DOMString string);
+ [RaisesException, MeasureAs=WebkitCSSMatrixSetMatrixValue] void setMatrixValue([Default=Undefined] optional DOMString string);
// Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix)
[LegacyInterfaceTypeChecking] WebKitCSSMatrix multiply([Default=Undefined] optional WebKitCSSMatrix secondMatrix);
diff --git a/chromium/third_party/WebKit/Source/core/dom/Document.cpp b/chromium/third_party/WebKit/Source/core/dom/Document.cpp
index b2f7a238285..1d3d38d7065 100644
--- a/chromium/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/chromium/third_party/WebKit/Source/core/dom/Document.cpp
@@ -6626,21 +6626,13 @@ void Document::recordDeferredLoadReason(WouldLoadReason reason) {
}
DEFINE_TRACE_WRAPPERS(Document) {
+ // m_nodeLists are traced in their corresponding NodeListsNodeData, keeping
+ // them only alive for live nodes. Otherwise we would keep lists of dead
+ // nodes alive that have not yet been invalidated.
visitor->traceWrappers(m_importsController);
visitor->traceWrappers(m_implementation);
visitor->traceWrappers(m_styleSheetList);
visitor->traceWrappers(m_styleEngine);
- for (int i = 0; i < numNodeListInvalidationTypes; ++i) {
- for (auto list : m_nodeLists[i]) {
- if (isHTMLCollectionType(list->type())) {
- visitor->traceWrappersWithManualWriteBarrier(
- static_cast<const HTMLCollection*>(list.get()));
- } else {
- visitor->traceWrappersWithManualWriteBarrier(
- static_cast<const LiveNodeList*>(list.get()));
- }
- }
- }
// Cannot trace in Supplementable<Document> as it is part of platform/ and
// thus cannot refer to ScriptWrappableVisitor.
visitor->traceWrappers(
diff --git a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp
index 44b990ed159..582eba68122 100644
--- a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp
+++ b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.cpp
@@ -30,6 +30,8 @@
#include "core/dom/NodeListsNodeData.h"
+#include "core/dom/LiveNodeList.h"
+
namespace blink {
void NodeListsNodeData::invalidateCaches(const QualifiedName* attrName) {
@@ -51,6 +53,18 @@ DEFINE_TRACE(NodeListsNodeData) {
DEFINE_TRACE_WRAPPERS(NodeListsNodeData) {
visitor->traceWrappersWithManualWriteBarrier(m_childNodeList);
+ for (const auto list : m_atomicNameCaches.values()) {
+ if (isHTMLCollectionType(list->type())) {
+ visitor->traceWrappersWithManualWriteBarrier(
+ static_cast<const HTMLCollection*>(list.get()));
+ } else {
+ visitor->traceWrappersWithManualWriteBarrier(
+ static_cast<const LiveNodeList*>(list.get()));
+ }
+ }
+ for (const auto list : m_tagCollectionCacheNS.values()) {
+ visitor->traceWrappersWithManualWriteBarrier(list.get());
+ }
}
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
index 85c5180aa87..a7a5eb0ae01 100644
--- a/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
+++ b/chromium/third_party/WebKit/Source/core/dom/NodeListsNodeData.h
@@ -96,6 +96,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> {
}
T* list = T::create(node, collectionType, name);
+ ScriptWrappableVisitor::writeBarrier(this, list);
result.storedValue->value = list;
return list;
}
@@ -111,6 +112,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> {
T* list = T::create(node, collectionType);
result.storedValue->value = list;
+ ScriptWrappableVisitor::writeBarrier(this, list);
return list;
}
@@ -132,6 +134,7 @@ class NodeListsNodeData final : public GarbageCollected<NodeListsNodeData> {
TagCollection* list = TagCollection::create(node, namespaceURI, localName);
result.storedValue->value = list;
+ ScriptWrappableVisitor::writeBarrier(this, list);
return list;
}
diff --git a/chromium/third_party/WebKit/Source/core/dom/Range.cpp b/chromium/third_party/WebKit/Source/core/dom/Range.cpp
index 6dcbf0c142f..4611c749cc8 100644
--- a/chromium/third_party/WebKit/Source/core/dom/Range.cpp
+++ b/chromium/third_party/WebKit/Source/core/dom/Range.cpp
@@ -43,6 +43,7 @@
#include "core/editing/iterators/TextIterator.h"
#include "core/editing/serializers/Serialization.h"
#include "core/events/ScopedEventQueue.h"
+#include "core/frame/Settings.h"
#include "core/html/HTMLBodyElement.h"
#include "core/html/HTMLElement.h"
#include "core/layout/LayoutObject.h"
@@ -77,8 +78,13 @@ class RangeUpdateScope {
DCHECK_GE(s_scopeCount, 1);
if (--s_scopeCount > 0)
return;
- m_range->removeFromSelectionIfInDifferentRoot(*m_oldDocument);
- m_range->updateSelectionIfAddedToSelection();
+ Settings* settings =
+ m_oldDocument->frame() ? m_oldDocument->frame()->settings() : nullptr;
+ if (!settings ||
+ !settings->getDoNotUpdateSelectionOnMutatingSelectionRange()) {
+ m_range->removeFromSelectionIfInDifferentRoot(*m_oldDocument);
+ m_range->updateSelectionIfAddedToSelection();
+ }
#if DCHECK_IS_ON()
s_range = nullptr;
#endif
diff --git a/chromium/third_party/WebKit/Source/core/frame/Settings.json5 b/chromium/third_party/WebKit/Source/core/frame/Settings.json5
index c32d7ef1cac..ce11393c072 100644
--- a/chromium/third_party/WebKit/Source/core/frame/Settings.json5
+++ b/chromium/third_party/WebKit/Source/core/frame/Settings.json5
@@ -928,5 +928,12 @@
initial: true,
invalidate: "MediaControls",
},
+
+ // Whether we should not update selection attributes when mutating selection range.
+ // TODO(changwan): remove this flag when we no longer support Android M.
+ {
+ name: "doNotUpdateSelectionOnMutatingSelectionRange",
+ initial: false,
+ },
],
}
diff --git a/chromium/third_party/WebKit/Source/core/frame/UseCounter.h b/chromium/third_party/WebKit/Source/core/frame/UseCounter.h
index 398b441cb58..acea33fa4dd 100644
--- a/chromium/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/chromium/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1494,6 +1494,53 @@ class CORE_EXPORT UseCounter {
VRPoseLinearAcceleration = 1864,
VRPoseAngularVelocity = 1865,
VRPoseAngularAcceleration = 1866,
+ CSSOverflowPaged = 1867,
+ ChildSrcAllowedWorkerThatScriptSrcBlocked = 1868,
+ HTMLTableElementPresentationAttributeBackground = 1869,
+ V8Navigator_GetInstalledRelatedApps_Method = 1870,
+ NamedAccessOnWindow_ChildBrowsingContext = 1871,
+ NamedAccessOnWindow_ChildBrowsingContext_CrossOriginNameMismatch = 1872,
+ V0CustomElementsRegisterHTMLCustomTag = 1873,
+ V0CustomElementsRegisterHTMLTypeExtension = 1874,
+ V0CustomElementsRegisterSVGElement = 1875,
+ V0CustomElementsRegisterEmbedderElement = 1876,
+ V0CustomElementsCreateCustomTagElement = 1877,
+ V0CustomElementsCreateTypeExtensionElement = 1878,
+ V0CustomElementsConstruct = 1879,
+ V8IDBObserver_Observe_Method = 1880,
+ V8IDBObserver_Unobserve_Method = 1881,
+ WebBluetoothRemoteCharacteristicGetDescriptor = 1882,
+ WebBluetoothRemoteCharacteristicGetDescriptors = 1883,
+ WebBluetoothRemoteCharacteristicReadValue = 1884,
+ WebBluetoothRemoteCharacteristicWriteValue = 1885,
+ WebBluetoothRemoteCharacteristicStartNotifications = 1886,
+ WebBluetoothRemoteCharacteristicStopNotifications = 1887,
+ WebBluetoothRemoteDescriptorReadValue = 1888,
+ WebBluetoothRemoteDescriptorWriteValue = 1889,
+ WebBluetoothRemoteServerConnect = 1890,
+ WebBluetoothRemoteServerDisconnect = 1891,
+ WebBluetoothRemoteServerGetPrimaryService = 1892,
+ WebBluetoothRemoteServerGetPrimaryServices = 1893,
+ WebBluetoothRemoteServiceGetCharacteristic = 1894,
+ WebBluetoothRemoteServiceGetCharacteristics = 1895,
+ HTMLContentElement = 1896,
+ HTMLShadowElement = 1897,
+ HTMLSlotElement = 1898,
+ AccelerometerConstructor = 1899,
+ AbsoluteOrientationSensorConstructor = 1900,
+ AmbientLightSensorConstructor = 1901,
+ GenericSensorOnActivate = 1902,
+ GenericSensorOnChange = 1903,
+ GenericSensorOnError = 1904,
+ GenericSensorActivated = 1905,
+ GyroscopeConstructor = 1906,
+ MagnetometerConstructor = 1907,
+ OrientationSensorPopulateMatrix = 1908,
+ WindowOpenWithInvalidURL = 1909,
+ CrossOriginMainFrameNulledNameAccessed = 1910,
+ MenuItemElementIconAttribute = 1911,
+ WebkitCSSMatrixSetMatrixValue = 1912,
+ WebkitCSSMatrixConstructFromString = 1913,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
diff --git a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
index af78208009f..d4dad0839ce 100644
--- a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -310,13 +310,17 @@ void HTMLVideoElement::paintCurrentFrame(PaintCanvas* canvas,
bool HTMLVideoElement::copyVideoTextureToPlatformTexture(
gpu::gles2::GLES2Interface* gl,
GLuint texture,
+ GLenum internalFormat,
+ GLenum type,
bool premultiplyAlpha,
bool flipY) {
if (!webMediaPlayer())
return false;
+ DCHECK(Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D,
+ internalFormat, type, 0));
return webMediaPlayer()->copyVideoTextureToPlatformTexture(
- gl, texture, premultiplyAlpha, flipY);
+ gl, texture, internalFormat, type, premultiplyAlpha, flipY);
}
bool HTMLVideoElement::texImageImpl(
diff --git a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h
index 385cc3a62fc..8e3b11a7630 100644
--- a/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/HTMLVideoElement.h
@@ -75,9 +75,10 @@ class CORE_EXPORT HTMLVideoElement final : public HTMLMediaElement,
void paintCurrentFrame(PaintCanvas*, const IntRect&, const PaintFlags*) const;
// Used by WebGL to do GPU-GPU textures copy if possible.
- // The caller is responsible for allocating the destination texture.
bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
GLuint texture,
+ GLenum internalFormat,
+ GLenum type,
bool premultiplyAlpha,
bool flipY);
diff --git a/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp b/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp
index 14fa616ebe3..68cd78a2ba1 100644
--- a/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/chromium/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -949,6 +949,9 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent(
HitTestRequest request(hitType);
MouseEventWithHitTestResults mev =
EventHandlingUtil::performMouseEventHitTest(m_frame, request, mouseEvent);
+ Node* releaseNode = (mev.innerNode() && mev.innerNode()->isTextNode())
+ ? FlatTreeTraversal::parent(*mev.innerNode())
+ : mev.innerNode();
LocalFrame* subframe =
m_capturingMouseEventsNode.get()
? subframeForTargetNode(m_capturingMouseEventsNode.get())
@@ -981,7 +984,7 @@ WebInputEventResult EventHandler::handleMouseReleaseEvent(
mev.event(), Vector<WebMouseEvent>());
WebInputEventResult clickEventResult =
- m_mouseEventManager->dispatchMouseClickIfNeeded(mev);
+ m_mouseEventManager->dispatchMouseClickIfNeeded(mev, releaseNode);
m_scrollManager->clearResizeScrollableArea(false);
@@ -1690,8 +1693,9 @@ GestureEventWithHitTestResults EventHandler::hitTestResultForGestureEvent(
if (!hitFrame)
hitFrame = m_frame;
hitTestResult = EventHandlingUtil::hitTestResultInFrame(
- hitFrame, hitFrame->view()->rootFrameToContents(
- flooredIntPoint(adjustedEvent.positionInRootFrame())),
+ hitFrame,
+ hitFrame->view()->rootFrameToContents(
+ flooredIntPoint(adjustedEvent.positionInRootFrame())),
(hitType | HitTestRequest::ReadOnly) & ~HitTestRequest::ListBased);
}
diff --git a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp
index 8f40ad03be6..70ebeac64b5 100644
--- a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp
+++ b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.cpp
@@ -230,7 +230,8 @@ WebInputEventResult MouseEventManager::setMousePositionAndDispatchMouseEvent(
}
WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded(
- const MouseEventWithHitTestResults& mev) {
+ const MouseEventWithHitTestResults& mev,
+ Node* releaseNode) {
// We only prevent click event when the click may cause contextmenu to popup.
// However, we always send auxclick.
bool contextMenuEvent =
@@ -247,23 +248,22 @@ WebInputEventResult MouseEventManager::dispatchMouseClickIfNeeded(
WebInputEventResult clickEventResult = WebInputEventResult::NotHandled;
const bool shouldDispatchClickEvent =
- m_clickCount > 0 && !contextMenuEvent && mev.innerNode() && m_clickNode &&
- mev.innerNode()->canParticipateInFlatTree() &&
+ m_clickCount > 0 && !contextMenuEvent && releaseNode && m_clickNode &&
+ releaseNode->canParticipateInFlatTree() &&
m_clickNode->canParticipateInFlatTree() &&
!(m_frame->eventHandler().selectionController().hasExtendedSelection() &&
isLinkSelection(mev));
if (shouldDispatchClickEvent) {
Node* clickTargetNode = nullptr;
- // Updates distribution because a 'mouseup' event listener can make the
- // tree dirty at dispatchMouseEvent() invocation above.
- // Unless distribution is updated, commonAncestor would hit ASSERT.
- if (m_clickNode == mev.innerNode()) {
+ if (m_clickNode == releaseNode) {
clickTargetNode = m_clickNode;
- clickTargetNode->updateDistribution();
} else if (m_clickNode->document() == mev.innerNode()->document()) {
+ // Updates distribution because a 'mouseup' event listener can make the
+ // tree dirty at dispatchMouseEvent() invocation above.
+ // Unless distribution is updated, commonAncestor would hit ASSERT.
m_clickNode->updateDistribution();
mev.innerNode()->updateDistribution();
- clickTargetNode = mev.innerNode()->commonAncestor(
+ clickTargetNode = releaseNode->commonAncestor(
*m_clickNode, EventHandlingUtil::parentForClickEvent);
}
if (clickTargetNode) {
diff --git a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h
index f144769f7c8..fb49ba92e0d 100644
--- a/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h
+++ b/chromium/third_party/WebKit/Source/core/input/MouseEventManager.h
@@ -57,7 +57,8 @@ class CORE_EXPORT MouseEventManager final
const WebMouseEvent&);
WebInputEventResult dispatchMouseClickIfNeeded(
- const MouseEventWithHitTestResults&);
+ const MouseEventWithHitTestResults&,
+ Node* releaseNode);
WebInputEventResult dispatchDragSrcEvent(const AtomicString& eventType,
const WebMouseEvent&);
diff --git a/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp b/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp
index 045f3370d9a..f7f610dbe4a 100644
--- a/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -1919,6 +1919,24 @@ LayoutRect LayoutText::visualOverflowRect() const {
LayoutUnit logicalHeight =
lastTextBox()->logicalBottomVisualOverflow() - logicalTop;
+ // Inflate visual overflow if we have adjusted ascent/descent causing the
+ // painted glyphs to overflow the layout geometries based on the adjusted
+ // ascent/descent.
+ unsigned inflation_for_ascent = 0;
+ unsigned inflation_for_descent = 0;
+ const auto* font_data =
+ styleRef(firstTextBox()->isFirstLineStyle()).font().primaryFont();
+ if (font_data)
+ inflation_for_ascent = font_data->VisualOverflowInflationForAscent();
+ if (lastTextBox()->isFirstLineStyle() != firstTextBox()->isFirstLineStyle()) {
+ font_data =
+ styleRef(lastTextBox()->isFirstLineStyle()).font().primaryFont();
+ }
+ if (font_data)
+ inflation_for_descent = font_data->VisualOverflowInflationForDescent();
+ logicalTop -= LayoutUnit(inflation_for_ascent);
+ logicalHeight += LayoutUnit(inflation_for_ascent + inflation_for_descent);
+
LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight);
if (!style()->isHorizontalWritingMode())
rect = rect.transposedRect();
diff --git a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
index 2b11d48670b..d613174fed0 100644
--- a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -318,7 +318,8 @@ void CompositedLayerMapping::updateStickyConstraints(
LayoutPoint enclosingLayerOffset;
compositingContainer->convertToLayerCoords(ancestorOverflowLayer,
enclosingLayerOffset);
- if (compositingContainer != ancestorOverflowLayer) {
+ DCHECK(!scrollParent() || scrollParent() == ancestorOverflowLayer);
+ if (!scrollParent() && compositingContainer != ancestorOverflowLayer) {
enclosingLayerOffset += LayoutSize(
ancestorOverflowLayer->getScrollableArea()->getScrollOffset());
}
diff --git a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
index 2153a44709a..cf5d3b176da 100644
--- a/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp
@@ -1689,6 +1689,63 @@ TEST_P(CompositedLayerMappingTest, StickyPositionTableCellContentOffset) {
}
TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) {
+ // Using backface-visibility: hidden causes the scroller to become composited
+ // without creating a stacking context. This is important as enclosing layer
+ // scroll correction works differently depending on whether you are in a
+ // stacking context or not.
+ setBodyInnerHTML(
+ "<style>.composited { backface-visibility: hidden; }"
+ "#scroller { overflow: auto; height: 200px; width: 200px; }"
+ ".container { height: 500px; }"
+ ".innerPadding { height: 10px; }"
+ "#sticky { position: sticky; top: 25px; height: 50px; }</style>"
+ "<div id='scroller' class='composited'>"
+ " <div class='composited container'>"
+ " <div class='composited container'>"
+ " <div class='innerPadding'></div>"
+ " <div id='sticky' class='composited'></div>"
+ " </div></div></div>");
+
+ PaintLayer* stickyLayer =
+ toLayoutBox(getLayoutObjectByElementId("sticky"))->layer();
+ CompositedLayerMapping* stickyMapping = stickyLayer->compositedLayerMapping();
+ ASSERT_TRUE(stickyMapping);
+
+ WebLayerStickyPositionConstraint constraint =
+ stickyMapping->mainGraphicsLayer()
+ ->contentLayer()
+ ->layer()
+ ->stickyPositionConstraint();
+ EXPECT_EQ(IntPoint(0, 10),
+ IntPoint(constraint.parentRelativeStickyBoxOffset));
+
+ // Now scroll the page - this should not affect the parent-relative offset.
+ LayoutBoxModelObject* scroller =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("scroller"));
+ PaintLayerScrollableArea* scrollableArea = scroller->getScrollableArea();
+ scrollableArea->scrollToAbsolutePosition(
+ FloatPoint(scrollableArea->scrollPosition().x(), 100));
+ ASSERT_EQ(100.0, scrollableArea->scrollPosition().y());
+
+ stickyLayer->setNeedsCompositingInputsUpdate();
+ EXPECT_TRUE(stickyLayer->needsCompositingInputsUpdate());
+ document().view()->updateLifecycleToCompositingCleanPlusScrolling();
+ EXPECT_FALSE(stickyLayer->needsCompositingInputsUpdate());
+
+ constraint = stickyMapping->mainGraphicsLayer()
+ ->contentLayer()
+ ->layer()
+ ->stickyPositionConstraint();
+ EXPECT_EQ(IntPoint(0, 10),
+ IntPoint(constraint.parentRelativeStickyBoxOffset));
+}
+
+TEST_P(CompositedLayerMappingTest,
+ StickyPositionEnclosingLayersWithStackingContextContentOffset) {
+ // Using will-change: transform causes the scroller to become a stacking
+ // context. This changes how its descendant layers interact with it; they no
+ // longer have a scrollParent and instead just refer to it only as their
+ // ancestorOverflowLayer.
setBodyInnerHTML(
"<style>.composited { will-change: transform; }"
"#scroller { overflow: auto; height: 200px; width: 200px; }"
@@ -1696,10 +1753,10 @@ TEST_P(CompositedLayerMappingTest, StickyPositionEnclosingLayersContentOffset) {
".innerPadding { height: 10px; }"
"#sticky { position: sticky; top: 25px; height: 50px; }</style>"
"<div id='scroller' class='composited'>"
- "<div class='composited container'>"
" <div class='composited container'>"
- " <div class='innerPadding'></div>"
- " <div id='sticky' class='composited'></div>"
+ " <div class='composited container'>"
+ " <div class='innerPadding'></div>"
+ " <div id='sticky' class='composited'></div>"
" </div></div></div>");
PaintLayer* stickyLayer =
diff --git a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
index b8891670090..929f6763744 100644
--- a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
@@ -38,6 +38,7 @@
#include "core/layout/svg/LayoutSVGViewportContainer.h"
#include "core/layout/svg/SVGResources.h"
#include "core/layout/svg/SVGResourcesCache.h"
+#include "core/page/Page.h"
#include "core/paint/PaintLayer.h"
#include "core/svg/SVGElement.h"
#include "platform/geometry/TransformState.h"
@@ -520,7 +521,7 @@ SubtreeContentTransformScope::~SubtreeContentTransformScope() {
m_savedContentTransformation.copyTransformTo(s_currentContentTransformation);
}
-float SVGLayoutSupport::calculateScreenFontSizeScalingFactor(
+AffineTransform SVGLayoutSupport::deprecatedCalculateTransformToLayer(
const LayoutObject* layoutObject) {
AffineTransform transform;
while (layoutObject) {
@@ -529,10 +530,43 @@ float SVGLayoutSupport::calculateScreenFontSizeScalingFactor(
break;
layoutObject = layoutObject->parent();
}
- transform.multiply(
- SubtreeContentTransformScope::currentContentTransformation());
- return clampTo<float>(
- sqrt((transform.xScaleSquared() + transform.yScaleSquared()) / 2));
+
+ // Continue walking up the layer tree, accumulating CSS transforms.
+ // FIXME: this queries layer compositing state - which is not
+ // supported during layout. Hence, the result may not include all CSS
+ // transforms.
+ PaintLayer* layer = layoutObject ? layoutObject->enclosingLayer() : 0;
+ while (layer && layer->isAllowedToQueryCompositingState()) {
+ // We can stop at compositing layers, to match the backing resolution.
+ // FIXME: should we be computing the transform to the nearest composited
+ // layer, or the nearest composited layer that does not paint into its
+ // ancestor? I think this is the nearest composited ancestor since we will
+ // inherit its transforms in the composited layer tree.
+ if (layer->compositingState() != NotComposited)
+ break;
+
+ if (TransformationMatrix* layerTransform = layer->transform())
+ transform = layerTransform->toAffineTransform() * transform;
+
+ layer = layer->parent();
+ }
+
+ return transform;
+}
+
+float SVGLayoutSupport::calculateScreenFontSizeScalingFactor(
+ const LayoutObject* layoutObject) {
+ DCHECK(layoutObject);
+
+ // FIXME: trying to compute a device space transform at record time is wrong.
+ // All clients should be updated to avoid relying on this information, and the
+ // method should be removed.
+ AffineTransform ctm =
+ deprecatedCalculateTransformToLayer(layoutObject) *
+ SubtreeContentTransformScope::currentContentTransformation();
+ ctm.scale(layoutObject->document().page()->deviceScaleFactorDeprecated());
+
+ return clampTo<float>(sqrt((ctm.xScaleSquared() + ctm.yScaleSquared()) / 2));
}
static inline bool compareCandidateDistance(const SearchCandidate& r1,
diff --git a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h
index c73d826db96..1d2b6717cee 100644
--- a/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h
+++ b/chromium/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.h
@@ -145,6 +145,8 @@ class CORE_EXPORT SVGLayoutSupport {
static bool computeHasNonIsolatedBlendingDescendants(const LayoutObjectType*);
static bool isIsolationRequired(const LayoutObject*);
+ static AffineTransform deprecatedCalculateTransformToLayer(
+ const LayoutObject*);
static float calculateScreenFontSizeScalingFactor(const LayoutObject*);
static LayoutObject* findClosestLayoutSVGText(LayoutObject*,
diff --git a/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp b/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp
index b1a1f1daa2f..d2adf5f0117 100644
--- a/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp
+++ b/chromium/third_party/WebKit/Source/core/page/PageAnimator.cpp
@@ -73,10 +73,21 @@ void PageAnimator::serviceScriptedAnimations(
}
}
+void PageAnimator::setSuppressFrameRequestsWorkaroundFor704763Only(
+ bool suppressFrameRequests) {
+ // If we are enabling the suppression and it was already enabled then we must
+ // have missed disabling it at the end of a previous frame.
+ DCHECK(!m_suppressFrameRequestsWorkaroundFor704763Only ||
+ !suppressFrameRequests);
+ m_suppressFrameRequestsWorkaroundFor704763Only = suppressFrameRequests;
+}
+
DISABLE_CFI_PERF
void PageAnimator::scheduleVisualUpdate(LocalFrame* frame) {
- if (m_servicingAnimations || m_updatingLayoutAndStyleForPainting)
+ if (m_servicingAnimations || m_updatingLayoutAndStyleForPainting ||
+ m_suppressFrameRequestsWorkaroundFor704763Only) {
return;
+ }
m_page->chromeClient().scheduleAnimation(frame->view());
}
diff --git a/chromium/third_party/WebKit/Source/core/page/PageAnimator.h b/chromium/third_party/WebKit/Source/core/page/PageAnimator.h
index c2e62ae89d9..96843efe817 100644
--- a/chromium/third_party/WebKit/Source/core/page/PageAnimator.h
+++ b/chromium/third_party/WebKit/Source/core/page/PageAnimator.h
@@ -23,6 +23,12 @@ class CORE_EXPORT PageAnimator final : public GarbageCollected<PageAnimator> {
bool isServicingAnimations() const { return m_servicingAnimations; }
+ // TODO(alancutter): Remove the need for this by implementing frame request
+ // suppression logic at the BeginMainFrame level. This is a temporary
+ // workaround to fix a perf regression.
+ // DO NOT use this outside of crbug.com/704763.
+ void setSuppressFrameRequestsWorkaroundFor704763Only(bool);
+
// See documents of methods with the same names in FrameView class.
void updateAllLifecyclePhases(LocalFrame& rootFrame);
AnimationClock& clock() { return m_animationClock; }
@@ -33,6 +39,7 @@ class CORE_EXPORT PageAnimator final : public GarbageCollected<PageAnimator> {
Member<Page> m_page;
bool m_servicingAnimations;
bool m_updatingLayoutAndStyleForPainting;
+ bool m_suppressFrameRequestsWorkaroundFor704763Only = false;
AnimationClock m_animationClock;
};
diff --git a/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
index a9aaa381dca..1105df408a1 100644
--- a/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
+++ b/chromium/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -953,6 +953,13 @@ void PaintLayerPainter::paintFragmentWithPhase(
case PaintPhaseMask: // Mask painting will handle clipping to self.
clippingRule = LayerClipRecorder::DoNotIncludeSelfForBorderRadius;
break;
+ case PaintPhaseClippingMask:
+ if (paintFlags & PaintLayerPaintingAncestorClippingMaskPhase) {
+ // The ancestor is the thing that needs to clip, so do not include
+ // this layer's clips.
+ clippingRule = LayerClipRecorder::DoNotIncludeSelfForBorderRadius;
+ break;
+ }
default:
clippingRule = LayerClipRecorder::IncludeSelfForBorderRadius;
break;
diff --git a/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp b/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
index 5c8c403dcda..db8383d778c 100644
--- a/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
+++ b/chromium/third_party/WebKit/Source/modules/vibration/NavigatorVibration.cpp
@@ -105,7 +105,7 @@ bool NavigatorVibration::vibrate(Navigator& navigator,
// static
void NavigatorVibration::collectHistogramMetrics(const LocalFrame& frame) {
NavigatorVibrationType type;
- bool userGesture = UserGestureIndicator::processingUserGesture();
+ bool userGesture = frame.hasReceivedUserGesture();
UseCounter::count(&frame, UseCounter::NavigatorVibrate);
if (!frame.isMainFrame()) {
UseCounter::count(&frame, UseCounter::NavigatorVibrateSubFrame);
diff --git a/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index aa46ba2ab78..c594194d9be 100644
--- a/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/chromium/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -5277,17 +5277,9 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
// Go through the fast path doing a GPU-GPU textures copy without a readback
// to system memory if possible. Otherwise, it will fall back to the normal
// SW path.
-
- // Note that neither
- // HTMLVideoElement::copyVideoTextureToPlatformTexture nor
- // ImageBuffer::copyToPlatformTexture allocate the destination texture
- // any more.
- texImage2DBase(target, level, internalformat, video->videoWidth(),
- video->videoHeight(), 0, format, type, nullptr);
-
- if (video->copyVideoTextureToPlatformTexture(contextGL(), texture->object(),
- m_unpackPremultiplyAlpha,
- m_unpackFlipY)) {
+ if (video->copyVideoTextureToPlatformTexture(
+ contextGL(), texture->object(), internalformat, type,
+ m_unpackPremultiplyAlpha, m_unpackFlipY)) {
return;
}
@@ -5311,6 +5303,11 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
// This is a straight GPU-GPU copy, any necessary color space conversion
// was handled in the paintCurrentFrameInContext() call.
+ // Note that copyToPlatformTexture no longer allocates the destination
+ // texture.
+ texImage2DBase(target, level, internalformat, video->videoWidth(),
+ video->videoHeight(), 0, format, type, nullptr);
+
if (imageBuffer->copyToPlatformTexture(
functionIDToSnapshotReason(functionID), contextGL(),
texture->object(), internalformat, type, level,
diff --git a/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h b/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h
index 99c2b5fe823..849fef2d9cc 100644
--- a/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h
+++ b/chromium/third_party/WebKit/Source/platform/audio/AudioDestinationConsumer.h
@@ -31,20 +31,17 @@
#ifndef AudioDestinationConsumer_h
#define AudioDestinationConsumer_h
+#include <memory>
#include "platform/PlatformExport.h"
-#include "platform/heap/Handle.h"
namespace blink {
class AudioBus;
-class PLATFORM_EXPORT AudioDestinationConsumer
- : public GarbageCollected<AudioDestinationConsumer> {
+class PLATFORM_EXPORT AudioDestinationConsumer {
public:
virtual void setFormat(size_t numberOfChannels, float sampleRate) = 0;
virtual void consumeAudio(AudioBus*, size_t numberOfFrames) = 0;
-
- DEFINE_INLINE_VIRTUAL_TRACE() {}
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp b/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
index 65681024471..527762a5553 100644
--- a/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
+++ b/chromium/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
@@ -161,6 +161,8 @@ bool WebMediaStreamSource::requiresAudioConsumer() const {
}
class ConsumerWrapper final : public AudioDestinationConsumer {
+ USING_FAST_MALLOC(ConsumerWrapper);
+
public:
static ConsumerWrapper* create(WebAudioDestinationConsumer* consumer) {
return new ConsumerWrapper(consumer);
@@ -209,12 +211,10 @@ bool WebMediaStreamSource::removeAudioConsumer(
ASSERT(isMainThread());
ASSERT(!m_private.isNull() && consumer);
- const HeapHashSet<Member<AudioDestinationConsumer>>& consumers =
+ const HashSet<AudioDestinationConsumer*>& consumers =
m_private->audioConsumers();
- for (HeapHashSet<Member<AudioDestinationConsumer>>::const_iterator it =
- consumers.begin();
- it != consumers.end(); ++it) {
- ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it->get());
+ for (AudioDestinationConsumer* it : consumers) {
+ ConsumerWrapper* wrapper = static_cast<ConsumerWrapper*>(it);
if (wrapper->consumer() == consumer) {
m_private->removeAudioConsumer(wrapper);
return true;
diff --git a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
index 33c66ce31cf..c7540898759 100644
--- a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
+++ b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
@@ -62,10 +62,12 @@ SimpleFontData::SimpleFontData(const FontPlatformData& platformData,
: m_maxCharWidth(-1),
m_avgCharWidth(-1),
m_platformData(platformData),
- m_isTextOrientationFallback(isTextOrientationFallback),
m_verticalData(nullptr),
+ m_customFontData(customData),
+ m_isTextOrientationFallback(isTextOrientationFallback),
m_hasVerticalGlyphs(false),
- m_customFontData(customData) {
+ visual_overflow_inflation_for_ascent_(0),
+ visual_overflow_inflation_for_descent_(0) {
platformInit(subpixelAscentDescent);
platformGlyphInit();
if (platformData.isVerticalAnyUpright() && !isTextOrientationFallback) {
@@ -81,10 +83,12 @@ SimpleFontData::SimpleFontData(PassRefPtr<CustomFontData> customData,
bool syntheticItalic)
: m_platformData(
FontPlatformData(fontSize, syntheticBold, syntheticItalic)),
- m_isTextOrientationFallback(false),
m_verticalData(nullptr),
+ m_customFontData(customData),
+ m_isTextOrientationFallback(false),
m_hasVerticalGlyphs(false),
- m_customFontData(customData) {}
+ visual_overflow_inflation_for_ascent_(0),
+ visual_overflow_inflation_for_descent_(0) {}
void SimpleFontData::platformInit(bool subpixelAscentDescent) {
if (!m_platformData.size()) {
@@ -137,30 +141,37 @@ void SimpleFontData::platformInit(bool subpixelAscentDescent) {
if (isVDMXValid) {
ascent = vdmxAscent;
descent = -vdmxDescent;
- } else {
+ } else if (subpixelAscentDescent &&
+ (-metrics.fAscent < 3 ||
+ -metrics.fAscent + metrics.fDescent < 2)) {
// For tiny fonts, the rounding of fAscent and fDescent results in equal
// baseline for different types of text baselines (crbug.com/338908).
// Please see CanvasRenderingContext2D::getFontBaseline for the heuristic.
- if (subpixelAscentDescent &&
- (-metrics.fAscent < 3 || -metrics.fAscent + metrics.fDescent < 2)) {
- ascent = -metrics.fAscent;
- descent = metrics.fDescent;
- } else {
- ascent = SkScalarRoundToScalar(-metrics.fAscent);
- descent = SkScalarRoundToScalar(metrics.fDescent);
- }
+ ascent = -metrics.fAscent;
+ descent = metrics.fDescent;
+ } else {
+ ascent = SkScalarRoundToScalar(-metrics.fAscent);
+ descent = SkScalarRoundToScalar(metrics.fDescent);
+
+ if (ascent < -metrics.fAscent)
+ visual_overflow_inflation_for_ascent_ = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent_ = 1;
#if OS(LINUX) || OS(ANDROID)
- // When subpixel positioning is enabled, if the descent is rounded down, the
- // descent part of the glyph may be truncated when displayed in a 'overflow:
- // hidden' container. To avoid that, borrow 1 unit from the ascent when
- // possible.
- // FIXME: This can be removed if sub-pixel ascent/descent is supported.
- if (platformData().getFontRenderStyle().useSubpixelPositioning &&
- descent < SkScalarToFloat(metrics.fDescent) && ascent >= 1) {
- ++descent;
- --ascent;
- }
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
+ // ascent when possible.
+ if (platformData().getFontRenderStyle().useSubpixelPositioning &&
+ ascent >= 1) {
+ ++descent;
+ --ascent;
+ // We should inflate overflow 1 more pixel for ascent instead.
+ visual_overflow_inflation_for_descent_ = 0;
+ ++visual_overflow_inflation_for_ascent_;
+ }
#endif
+ }
}
#if OS(MACOSX)
diff --git a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
index 73f6a3ead90..ce0cd74251c 100644
--- a/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
+++ b/chromium/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
@@ -157,6 +157,13 @@ class PLATFORM_EXPORT SimpleFontData : public FontData {
CustomFontData* customFontData() const { return m_customFontData.get(); }
+ unsigned VisualOverflowInflationForAscent() const {
+ return visual_overflow_inflation_for_ascent_;
+ }
+ unsigned VisualOverflowInflationForDescent() const {
+ return visual_overflow_inflation_for_descent_;
+ }
+
protected:
SimpleFontData(const FontPlatformData&,
PassRefPtr<CustomFontData> customData,
@@ -182,9 +189,7 @@ class PLATFORM_EXPORT SimpleFontData : public FontData {
FontPlatformData m_platformData;
SkPaint m_paint;
- bool m_isTextOrientationFallback;
RefPtr<OpenTypeVerticalData> m_verticalData;
- bool m_hasVerticalGlyphs;
Glyph m_spaceGlyph;
float m_spaceWidth;
@@ -212,6 +217,15 @@ class PLATFORM_EXPORT SimpleFontData : public FontData {
RefPtr<CustomFontData> m_customFontData;
+ unsigned m_isTextOrientationFallback : 1;
+ unsigned m_hasVerticalGlyphs : 1;
+
+ // These are set to non-zero when ascent or descent is rounded or shifted
+ // to be smaller than the actual ascent or descent. When calculating visual
+ // overflows, we should add the inflations.
+ unsigned visual_overflow_inflation_for_ascent_ : 2;
+ unsigned visual_overflow_inflation_for_descent_ : 2;
+
// See discussion on crbug.com/631032 and Skiaissue
// https://bugs.chromium.org/p/skia/issues/detail?id=5328 :
// On Mac we're still using path based glyph metrics, and they seem to be
diff --git a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
index 7be1e65ab51..f6a68cdbff3 100644
--- a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
@@ -168,8 +168,8 @@ DrawingBuffer::~DrawingBuffer() {
}
bool DrawingBuffer::markContentsChanged() {
- if (m_contentsChangeCommitted || !m_contentsChanged) {
- m_contentsChangeCommitted = false;
+ if (m_contentsChangeResolved || !m_contentsChanged) {
+ m_contentsChangeResolved = false;
m_contentsChanged = true;
return true;
}
@@ -284,8 +284,7 @@ bool DrawingBuffer::prepareTextureMailboxInternal(
(*m_newMailboxCallback)();
// Resolve the multisampled buffer into m_backColorBuffer texture.
- if (m_antiAliasingMode != None)
- resolveMultisampleFramebufferInternal();
+ resolveIfNeeded();
if (m_softwareRendering && !forceGpuResult) {
return finishPrepareTextureMailboxSoftware(outMailbox, outReleaseCallback);
@@ -695,8 +694,7 @@ bool DrawingBuffer::copyToPlatformTexture(gpu::gles2::GLES2Interface* gl,
ScopedStateRestorer scopedStateRestorer(this);
if (m_contentsChanged) {
- if (m_antiAliasingMode != None)
- resolveMultisampleFramebufferInternal();
+ resolveIfNeeded();
m_gl->Flush();
}
@@ -971,7 +969,7 @@ bool DrawingBuffer::resizeFramebufferInternal(const IntSize& newSize) {
void DrawingBuffer::resolveAndBindForReadAndDraw() {
{
ScopedStateRestorer scopedStateRestorer(this);
- resolveMultisampleFramebufferInternal();
+ resolveIfNeeded();
}
m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_fbo);
}
@@ -979,7 +977,7 @@ void DrawingBuffer::resolveAndBindForReadAndDraw() {
void DrawingBuffer::resolveMultisampleFramebufferInternal() {
DCHECK(m_stateRestorer);
m_stateRestorer->setFramebufferBindingDirty();
- if (wantExplicitResolve() && !m_contentsChangeCommitted) {
+ if (wantExplicitResolve() && !m_contentsChangeResolved) {
m_stateRestorer->setClearStateDirty();
m_gl->BindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, m_multisampleFBO);
m_gl->BindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, m_fbo);
@@ -1009,7 +1007,12 @@ void DrawingBuffer::resolveMultisampleFramebufferInternal() {
m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_fbo);
if (m_antiAliasingMode == ScreenSpaceAntialiasing)
m_gl->ApplyScreenSpaceAntialiasingCHROMIUM();
- m_contentsChangeCommitted = true;
+}
+
+void DrawingBuffer::resolveIfNeeded() {
+ if (m_antiAliasingMode != None)
+ resolveMultisampleFramebufferInternal();
+ m_contentsChangeResolved = true;
}
void DrawingBuffer::restoreFramebufferBindings() {
diff --git a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
index fe1c8b329f3..dbf89a5ac45 100644
--- a/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
+++ b/chromium/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
@@ -168,7 +168,7 @@ class PLATFORM_EXPORT DrawingBuffer
}
// Returns false if the contents had previously been marked as changed and
- // have not yet been committed.
+ // have not yet been resolved.
bool markContentsChanged();
void setBufferClearNeeded(bool);
bool bufferClearNeeded() const;
@@ -342,9 +342,12 @@ class PLATFORM_EXPORT DrawingBuffer
// The same as reset(), but leaves GL state dirty.
bool resizeFramebufferInternal(const IntSize&);
- // The same as commit(), but leaves GL state dirty.
+ // The same as resolveAndBindForReadAndDraw(), but leaves GL state dirty.
void resolveMultisampleFramebufferInternal();
+ // Resolves m_multisampleFBO into m_fbo, if multisampling.
+ void resolveIfNeeded();
+
bool prepareTextureMailboxInternal(
cc::TextureMailbox* outMailbox,
std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback,
@@ -481,9 +484,9 @@ class PLATFORM_EXPORT DrawingBuffer
// buffer.
bool m_contentsChanged = true;
- // True if commit() has been called since the last time markContentsChanged()
- // had been called.
- bool m_contentsChangeCommitted = false;
+ // True if resolveIfNeeded() has been called since the last time
+ // markContentsChanged() had been called.
+ bool m_contentsChangeResolved = false;
bool m_bufferClearNeeded = false;
// Whether the client wants a depth or stencil buffer.
diff --git a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp
index 98a314d3c75..acc83312d97 100644
--- a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp
+++ b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.cpp
@@ -82,8 +82,7 @@ bool MediaStreamSource::removeAudioConsumer(
AudioDestinationConsumer* consumer) {
ASSERT(m_requiresConsumer);
MutexLocker locker(m_audioConsumersLock);
- HeapHashSet<Member<AudioDestinationConsumer>>::iterator it =
- m_audioConsumers.find(consumer);
+ auto it = m_audioConsumers.find(consumer);
if (it == m_audioConsumers.end())
return false;
m_audioConsumers.erase(it);
@@ -98,24 +97,19 @@ void MediaStreamSource::setAudioFormat(size_t numberOfChannels,
float sampleRate) {
ASSERT(m_requiresConsumer);
MutexLocker locker(m_audioConsumersLock);
- for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it =
- m_audioConsumers.begin();
- it != m_audioConsumers.end(); ++it)
- (*it)->setFormat(numberOfChannels, sampleRate);
+ for (AudioDestinationConsumer* consumer : m_audioConsumers)
+ consumer->setFormat(numberOfChannels, sampleRate);
}
void MediaStreamSource::consumeAudio(AudioBus* bus, size_t numberOfFrames) {
ASSERT(m_requiresConsumer);
MutexLocker locker(m_audioConsumersLock);
- for (HeapHashSet<Member<AudioDestinationConsumer>>::iterator it =
- m_audioConsumers.begin();
- it != m_audioConsumers.end(); ++it)
- (*it)->consumeAudio(bus, numberOfFrames);
+ for (AudioDestinationConsumer* consumer : m_audioConsumers)
+ consumer->consumeAudio(bus, numberOfFrames);
}
DEFINE_TRACE(MediaStreamSource) {
visitor->trace(m_observers);
- visitor->trace(m_audioConsumers);
}
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
index 8b7586051e1..d3480c9cf3d 100644
--- a/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
+++ b/chromium/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
@@ -102,7 +102,7 @@ class PLATFORM_EXPORT MediaStreamSource final
bool requiresAudioConsumer() const { return m_requiresConsumer; }
void addAudioConsumer(AudioDestinationConsumer*);
bool removeAudioConsumer(AudioDestinationConsumer*);
- const HeapHashSet<Member<AudioDestinationConsumer>>& audioConsumers() {
+ const HashSet<AudioDestinationConsumer*>& audioConsumers() {
return m_audioConsumers;
}
@@ -128,7 +128,7 @@ class PLATFORM_EXPORT MediaStreamSource final
bool m_requiresConsumer;
HeapHashSet<WeakMember<Observer>> m_observers;
Mutex m_audioConsumersLock;
- HeapHashSet<Member<AudioDestinationConsumer>> m_audioConsumers;
+ HashSet<AudioDestinationConsumer*> m_audioConsumers;
std::unique_ptr<ExtraData> m_extraData;
WebMediaConstraints m_constraints;
};
diff --git a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index 8a1e33f315a..ebce92cd103 100644
--- a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -197,9 +197,11 @@ void WebFrameWidgetImpl::sendResizeEventAndRepaint() {
void WebFrameWidgetImpl::resizeVisualViewport(const WebSize& newSize) {
// TODO(alexmos, kenrb): resizing behavior such as this should be changed
- // to use Page messages. https://crbug.com/599688.
- page()->frameHost().visualViewport().setSize(newSize);
- page()->frameHost().visualViewport().clampToBoundaries();
+ // to use Page messages. This uses the visual viewport size to set size on
+ // both the WebViewImpl size and the Page's VisualViewport. If there are
+ // multiple OOPIFs on a page, this will currently be set redundantly by
+ // each of them. See https://crbug.com/599688.
+ view()->resize(newSize);
view()->didUpdateFullscreenSize();
}
@@ -226,6 +228,11 @@ void WebFrameWidgetImpl::didExitFullscreen() {
view()->didExitFullscreen();
}
+void WebFrameWidgetImpl::setSuppressFrameRequestsWorkaroundFor704763Only(
+ bool suppressFrameRequests) {
+ page()->animator().setSuppressFrameRequestsWorkaroundFor704763Only(
+ suppressFrameRequests);
+}
void WebFrameWidgetImpl::beginFrame(double lastFrameTimeMonotonic) {
TRACE_EVENT1("blink", "WebFrameWidgetImpl::beginFrame", "frameTime",
lastFrameTimeMonotonic);
diff --git a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
index cd6bf97c7bc..05eb41d717d 100644
--- a/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
+++ b/chromium/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
@@ -80,6 +80,7 @@ class WebFrameWidgetImpl final
void resizeVisualViewport(const WebSize&) override;
void didEnterFullscreen() override;
void didExitFullscreen() override;
+ void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final;
void beginFrame(double lastFrameTimeMonotonic) override;
void updateAllLifecyclePhases() override;
void paint(WebCanvas*, const WebRect&) override;
diff --git a/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp b/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp
index 819d6961170..140af9d4cb7 100644
--- a/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebInputEventConversion.cpp
@@ -201,9 +201,17 @@ WebMouseEventBuilder::WebMouseEventBuilder(const FrameViewBase* frameViewBase,
if (event.nativeEvent()) {
*static_cast<WebMouseEvent*>(this) =
event.nativeEvent()->flattenTransform();
- WebFloatPoint absoluteRootFrameLocation = positionInRootFrame();
+ WebFloatPoint absoluteLocation = positionInRootFrame();
+
+ FrameView* view = frameViewBase ? toFrameView(frameViewBase->parent()) : 0;
+
+ // Translate the root frame position to content coordinates.
+ if (view) {
+ absoluteLocation = view->rootFrameToContents(absoluteLocation);
+ }
+
IntPoint localPoint = roundedIntPoint(
- layoutItem.absoluteToLocal(absoluteRootFrameLocation, UseTransforms));
+ layoutItem.absoluteToLocal(absoluteLocation, UseTransforms));
x = localPoint.x();
y = localPoint.y();
return;
diff --git a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
index 2751595e18a..a8f5c09f724 100644
--- a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
@@ -406,6 +406,13 @@ void WebPagePopupImpl::setIsAcceleratedCompositingActive(bool enter) {
}
}
+void WebPagePopupImpl::setSuppressFrameRequestsWorkaroundFor704763Only(
+ bool suppressFrameRequests) {
+ if (!m_page)
+ return;
+ m_page->animator().setSuppressFrameRequestsWorkaroundFor704763Only(
+ suppressFrameRequests);
+}
void WebPagePopupImpl::beginFrame(double lastFrameTimeMonotonic) {
if (!m_page)
return;
diff --git a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h
index 1d89868f0dc..011fb9f43df 100644
--- a/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h
+++ b/chromium/third_party/WebKit/Source/web/WebPagePopupImpl.h
@@ -76,6 +76,7 @@ class WebPagePopupImpl final : public WebPagePopup,
private:
// WebWidget functions
+ void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final;
void beginFrame(double lastFrameTimeMonotonic) override;
void updateAllLifecyclePhases() override;
void willCloseLayerTreeView() override;
diff --git a/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp b/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
index dfce5182a81..ad9aa19e129 100644
--- a/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
@@ -761,11 +761,16 @@ void WebPluginContainerImpl::handleDragEvent(MouseEvent* event) {
}
void WebPluginContainerImpl::handleWheelEvent(WheelEvent* event) {
- WebFloatPoint absoluteRootFrameLocation =
- event->nativeEvent().positionInRootFrame();
+ WebFloatPoint absoluteLocation = event->nativeEvent().positionInRootFrame();
+ FrameView* view = toFrameView(parent());
+ // Translate the root frame position to content coordinates.
+ if (view) {
+ absoluteLocation = view->rootFrameToContents(absoluteLocation);
+ }
+
IntPoint localPoint =
roundedIntPoint(m_element->layoutObject()->absoluteToLocal(
- absoluteRootFrameLocation, UseTransforms));
+ absoluteLocation, UseTransforms));
WebMouseWheelEvent translatedEvent = event->nativeEvent().flattenTransform();
translatedEvent.x = localPoint.x();
translatedEvent.y = localPoint.y();
@@ -826,12 +831,17 @@ void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) {
WebTouchEvent transformedEvent = event->nativeEvent()->flattenTransform();
+ FrameView* view = toFrameView(parent());
+
for (unsigned i = 0; i < transformedEvent.touchesLength; ++i) {
- WebFloatPoint absoluteRootFrameLocation =
- transformedEvent.touches[i].position;
+ WebFloatPoint absoluteLocation = transformedEvent.touches[i].position;
+ // Translate the root frame position to content coordinates.
+ if (view) {
+ absoluteLocation = view->rootFrameToContents(absoluteLocation);
+ }
IntPoint localPoint =
roundedIntPoint(m_element->layoutObject()->absoluteToLocal(
- absoluteRootFrameLocation, UseTransforms));
+ absoluteLocation, UseTransforms));
transformedEvent.touches[i].position.x = localPoint.x();
transformedEvent.touches[i].position.y = localPoint.y();
}
diff --git a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp
index ff5ac4d25bd..e081ba3e58e 100644
--- a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.cpp
@@ -732,4 +732,9 @@ void WebSettingsImpl::setMediaControlsEnabled(bool enabled) {
m_settings->setMediaControlsEnabled(enabled);
}
+void WebSettingsImpl::setDoNotUpdateSelectionOnMutatingSelectionRange(
+ bool enabled) {
+ m_settings->setDoNotUpdateSelectionOnMutatingSelectionRange(enabled);
+}
+
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h
index 95178e0900a..5d3c858c2ec 100644
--- a/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h
+++ b/chromium/third_party/WebKit/Source/web/WebSettingsImpl.h
@@ -210,6 +210,7 @@ class WEB_EXPORT WebSettingsImpl final : NON_EXPORTED_BASE(public WebSettings) {
void setExpensiveBackgroundThrottlingMaxBudget(float) override;
void setExpensiveBackgroundThrottlingMaxDelay(float) override;
void setMediaControlsEnabled(bool) override;
+ void setDoNotUpdateSelectionOnMutatingSelectionRange(bool) override;
bool showFPSCounter() const { return m_showFPSCounter; }
bool showPaintRects() const { return m_showPaintRects; }
diff --git a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
index 7b662eba0c9..3cbcc5a2d99 100644
--- a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.cpp
@@ -57,6 +57,11 @@ void WebViewFrameWidget::didExitFullscreen() {
return m_webView->didExitFullscreen();
}
+void WebViewFrameWidget::setSuppressFrameRequestsWorkaroundFor704763Only(
+ bool suppressFrameRequests) {
+ return m_webView->setSuppressFrameRequestsWorkaroundFor704763Only(
+ suppressFrameRequests);
+}
void WebViewFrameWidget::beginFrame(double lastFrameTimeMonotonic) {
return m_webView->beginFrame(lastFrameTimeMonotonic);
}
diff --git a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h
index 381931493de..86c91ad69fb 100644
--- a/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h
+++ b/chromium/third_party/WebKit/Source/web/WebViewFrameWidget.h
@@ -48,6 +48,7 @@ class WebViewFrameWidget : public WebFrameWidgetBase {
void resizeVisualViewport(const WebSize&) override;
void didEnterFullscreen() override;
void didExitFullscreen() override;
+ void setSuppressFrameRequestsWorkaroundFor704763Only(bool) final;
void beginFrame(double lastFrameTimeMonotonic) override;
void updateAllLifecyclePhases() override;
void paint(WebCanvas*, const WebRect& viewPort) override;
diff --git a/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp b/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp
index 365a716b55f..5b5fef6fd89 100644
--- a/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -1949,6 +1949,11 @@ void WebViewImpl::didUpdateFullscreenSize() {
m_fullscreenController->updateSize();
}
+void WebViewImpl::setSuppressFrameRequestsWorkaroundFor704763Only(
+ bool suppressFrameRequests) {
+ m_page->animator().setSuppressFrameRequestsWorkaroundFor704763Only(
+ suppressFrameRequests);
+}
void WebViewImpl::beginFrame(double lastFrameTimeMonotonic) {
TRACE_EVENT1("blink", "WebViewImpl::beginFrame", "frameTime",
lastFrameTimeMonotonic);
diff --git a/chromium/third_party/WebKit/Source/web/WebViewImpl.h b/chromium/third_party/WebKit/Source/web/WebViewImpl.h
index f94b6956b3e..354e52ec2f5 100644
--- a/chromium/third_party/WebKit/Source/web/WebViewImpl.h
+++ b/chromium/third_party/WebKit/Source/web/WebViewImpl.h
@@ -129,6 +129,7 @@ class WEB_EXPORT WebViewImpl final
void didEnterFullscreen() override;
void didExitFullscreen() override;
+ void setSuppressFrameRequestsWorkaroundFor704763Only(bool) override;
void beginFrame(double lastFrameTimeMonotonic) override;
void updateAllLifecyclePhases() override;
diff --git a/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h b/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h
index 85a95762e06..745a53888a2 100644
--- a/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h
+++ b/chromium/third_party/WebKit/public/platform/WebMediaPlayer.h
@@ -181,21 +181,16 @@ class WebMediaPlayer {
virtual void paint(WebCanvas*, const WebRect&, cc::PaintFlags&) = 0;
- // TODO(kbr): remove non-|target| version. crbug.com/349871
- //
- // Do a GPU-GPU texture copy of the natural size of the current
- // video frame to |texture|. Caller is responsible for allocating
- // |texture| with the appropriate size. If the copy is impossible or
- // fails, it returns false.
+ // TODO(dshwang): remove non-|target| version. crbug.com/349871
virtual bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
unsigned texture,
+ unsigned internalFormat,
+ unsigned type,
bool premultiplyAlpha,
bool flipY) {
return false;
}
- // TODO(kbr): when updating calling code to use this, remove the
- // |internalFormat| and |type| parameters. crbug.com/349871
// Do a GPU-GPU textures copy. If the copy is impossible or fails, it returns
// false.
virtual bool copyVideoTextureToPlatformTexture(gpu::gles2::GLES2Interface*,
diff --git a/chromium/third_party/WebKit/public/web/WebSettings.h b/chromium/third_party/WebKit/public/web/WebSettings.h
index 70fe7252051..adb6ede2d53 100644
--- a/chromium/third_party/WebKit/public/web/WebSettings.h
+++ b/chromium/third_party/WebKit/public/web/WebSettings.h
@@ -297,6 +297,7 @@ class WebSettings {
virtual void setExpensiveBackgroundThrottlingMaxBudget(float) = 0;
virtual void setExpensiveBackgroundThrottlingMaxDelay(float) = 0;
virtual void setMediaControlsEnabled(bool) = 0;
+ virtual void setDoNotUpdateSelectionOnMutatingSelectionRange(bool) = 0;
protected:
~WebSettings() {}
diff --git a/chromium/third_party/WebKit/public/web/WebWidget.h b/chromium/third_party/WebKit/public/web/WebWidget.h
index 0fba421e9a3..50ca56f51c0 100644
--- a/chromium/third_party/WebKit/public/web/WebWidget.h
+++ b/chromium/third_party/WebKit/public/web/WebWidget.h
@@ -76,6 +76,9 @@ class WebWidget {
virtual void didEnterFullscreen() {}
virtual void didExitFullscreen() {}
+ // TODO(crbug.com/704763): Remove the need for this.
+ virtual void setSuppressFrameRequestsWorkaroundFor704763Only(bool) {}
+
// Called to update imperative animation state. This should be called before
// paint, although the client can rate-limit these calls.
// |lastFrameTimeMonotonic| is in seconds.
diff --git a/chromium/third_party/catapult/tracing/trace_viewer.gypi b/chromium/third_party/catapult/tracing/trace_viewer.gypi
index a90fc3ca76d..28f05eacc47 100644
--- a/chromium/third_party/catapult/tracing/trace_viewer.gypi
+++ b/chromium/third_party/catapult/tracing/trace_viewer.gypi
@@ -32,7 +32,6 @@
'../third_party/polymer/components/polymer/polymer.html',
'tracing/base/base.html',
'tracing/base/base64.html',
- 'tracing/base/bbox2.html',
'tracing/base/category_util.html',
'tracing/base/color.html',
'tracing/base/color_scheme.html',
@@ -46,26 +45,29 @@
'tracing/base/guid.html',
'tracing/base/interval_tree.html',
'tracing/base/iteration_helpers.html',
- 'tracing/base/math.html',
+ 'tracing/base/math/bbox2.html',
+ 'tracing/base/math/math.html',
+ 'tracing/base/math/piecewise_linear_function.html',
+ 'tracing/base/math/quad.html',
+ 'tracing/base/math/range.html',
+ 'tracing/base/math/range_utils.html',
+ 'tracing/base/math/rect.html',
+ 'tracing/base/math/running_statistics.html',
+ 'tracing/base/math/sorted_array_utils.html',
+ 'tracing/base/math/statistics.html',
'tracing/base/multi_dimensional_view.html',
- 'tracing/base/piecewise_linear_function.html',
- 'tracing/base/quad.html',
'tracing/base/raf.html',
- 'tracing/base/range.html',
- 'tracing/base/range_utils.html',
- 'tracing/base/rect.html',
- 'tracing/base/running_statistics.html',
'tracing/base/scalar.html',
+ 'tracing/base/serializable.html',
'tracing/base/settings.html',
'tracing/base/sinebow_color_generator.html',
- 'tracing/base/sorted_array_utils.html',
- 'tracing/base/statistics.html',
'tracing/base/task.html',
'tracing/base/time_display_modes.html',
'tracing/base/timing.html',
'tracing/base/unit.html',
'tracing/base/unit_scale.html',
'tracing/base/utils.html',
+ 'tracing/base/view_state.html',
'tracing/core/auditor.html',
'tracing/core/filter.html',
'tracing/core/scripting_controller.html',
@@ -92,6 +94,7 @@
'tracing/extras/chrome/cc/tile_coverage_rect.html',
'tracing/extras/chrome/cc/util.html',
'tracing/extras/chrome/chrome_auditor.html',
+ 'tracing/extras/chrome/chrome_processes.html',
'tracing/extras/chrome/chrome_user_friendly_category_driver.html',
'tracing/extras/chrome/estimated_input_latency.html',
'tracing/extras/chrome/gpu/gpu_async_slice.html',
@@ -178,12 +181,17 @@
'tracing/importer/proto_expectation.html',
'tracing/importer/simple_line_reader.html',
'tracing/importer/user_model_builder.html',
+ 'tracing/metrics/all_fixed_color_schemes.html',
'tracing/metrics/all_metrics.html',
+ 'tracing/metrics/android_systrace_metric.html',
'tracing/metrics/blink/gc_metric.html',
'tracing/metrics/cpu_process_metric.html',
'tracing/metrics/metric_map_function.html',
'tracing/metrics/metric_registry.html',
'tracing/metrics/sample_metric.html',
+ 'tracing/metrics/spa_navigation_helper.html',
+ 'tracing/metrics/spa_navigation_metric.html',
+ 'tracing/metrics/system_health/breakdown_tree_helpers.html',
'tracing/metrics/system_health/clock_sync_latency_metric.html',
'tracing/metrics/system_health/cpu_time_metric.html',
'tracing/metrics/system_health/expected_queueing_time_metric.html',
@@ -200,6 +208,7 @@
'tracing/metrics/v8/runtime_stats_metric.html',
'tracing/metrics/v8/utils.html',
'tracing/metrics/v8/v8_metrics.html',
+ 'tracing/metrics/webrtc/webrtc_rendering_metric.html',
'tracing/model/activity.html',
'tracing/model/alert.html',
'tracing/model/annotation.html',
@@ -233,6 +242,7 @@
'tracing/model/helpers/chrome_model_helper.html',
'tracing/model/helpers/chrome_process_helper.html',
'tracing/model/helpers/chrome_renderer_helper.html',
+ 'tracing/model/helpers/chrome_thread_helper.html',
'tracing/model/instant_event.html',
'tracing/model/ir_coverage.html',
'tracing/model/kernel.html',
@@ -447,6 +457,7 @@
'tracing/ui/extras/v8_config.html',
'tracing/ui/find_control.html',
'tracing/ui/find_controller.html',
+ 'tracing/ui/null_brushing_state_controller.html',
'tracing/ui/scripting_control.html',
'tracing/ui/side_panel/file_size_stats_side_panel.html',
'tracing/ui/side_panel/metrics_side_panel.html',
@@ -528,8 +539,9 @@
'tracing/value/diagnostics/telemetry_info.html',
'tracing/value/diagnostics/unmergeable_diagnostic_set.html',
'tracing/value/histogram.html',
+ 'tracing/value/histogram_parameter_collector.html',
'tracing/value/histogram_set.html',
- 'tracing/value/ui/array_of_numbers_span.html',
+ 'tracing/value/histogram_set_hierarchy.html',
'tracing/value/ui/breakdown_span.html',
'tracing/value/ui/buildbot_info_span.html',
'tracing/value/ui/collected_related_event_set_span.html',
@@ -537,12 +549,13 @@
'tracing/value/ui/diagnostic_map_table.html',
'tracing/value/ui/diagnostic_span.html',
'tracing/value/ui/generic_diagnostic_span.html',
- 'tracing/value/ui/generic_table_view.html',
+ 'tracing/value/ui/histogram_set_controls.html',
'tracing/value/ui/histogram_set_table.html',
'tracing/value/ui/histogram_set_table_cell.html',
'tracing/value/ui/histogram_set_table_name_cell.html',
'tracing/value/ui/histogram_set_table_row.html',
'tracing/value/ui/histogram_set_view.html',
+ 'tracing/value/ui/histogram_set_view_state.html',
'tracing/value/ui/histogram_span.html',
'tracing/value/ui/merged_buildbot_info_span.html',
'tracing/value/ui/merged_device_info_span.html',
diff --git a/chromium/third_party/icu/android/icudtl.dat b/chromium/third_party/icu/android/icudtl.dat
index 83a7b734af0..a3331800173 100644
--- a/chromium/third_party/icu/android/icudtl.dat
+++ b/chromium/third_party/icu/android/icudtl.dat
Binary files differ
diff --git a/chromium/third_party/icu/common/icudtb.dat b/chromium/third_party/icu/common/icudtb.dat
index ad94e512aab..230e61f7b95 100644
--- a/chromium/third_party/icu/common/icudtb.dat
+++ b/chromium/third_party/icu/common/icudtb.dat
Binary files differ
diff --git a/chromium/third_party/icu/common/icudtl.dat b/chromium/third_party/icu/common/icudtl.dat
index 6f579afc58c..f8c4741cb75 100644
--- a/chromium/third_party/icu/common/icudtl.dat
+++ b/chromium/third_party/icu/common/icudtl.dat
Binary files differ
diff --git a/chromium/third_party/icu/patches/linebrk.patch b/chromium/third_party/icu/patches/linebrk.patch
index e38ba4cec07..4229ee47fad 100644
--- a/chromium/third_party/icu/patches/linebrk.patch
+++ b/chromium/third_party/icu/patches/linebrk.patch
@@ -1,15 +1,3 @@
-diff --git a/source/data/brkitr/brklocal.mk b/source/data/brkitr/brklocal.mk
-index 204458c..b5eca75 100644
---- a/source/data/brkitr/brklocal.mk
-+++ b/source/data/brkitr/brklocal.mk
-@@ -41,6 +41,7 @@ BRK_DICT_SOURCE = burmesedict.txt cjdict.txt khmerdict.txt laodict.txt\
- # List of break iterator files (brk).
- BRK_SOURCE = char.txt line.txt\
- line_normal.txt line_normal_cj.txt line_normal_fi.txt\
-+ line_loose_cj.txt\
- sent.txt sent_el.txt title.txt word.txt
-
-
diff --git a/source/data/brkitr/fi.txt b/source/data/brkitr/fi.txt
index 3c07f15..72029ee 100644
--- a/source/data/brkitr/fi.txt
diff --git a/chromium/third_party/icu/scripts/data_files_to_preserve.txt b/chromium/third_party/icu/scripts/data_files_to_preserve.txt
index 235f35331b2..a116da8c130 100644
--- a/chromium/third_party/icu/scripts/data_files_to_preserve.txt
+++ b/chromium/third_party/icu/scripts/data_files_to_preserve.txt
@@ -14,8 +14,8 @@ region/reslocal.mk
locales/reslocal.mk
unit/reslocal.mk
sprep/spreplocal.mk
-brkitr/khmerdict.txt
-brkitr/word_ja.txt
+brkitr/dictionaries/khmerdict.txt
+brkitr/rules/word_ja.txt
locales/an.txt
locales/ku.txt
locales/tg.txt
diff --git a/chromium/third_party/icu/scripts/trim_data.sh b/chromium/third_party/icu/scripts/trim_data.sh
index 46be26c88ac..a60bd46bd89 100755
--- a/chromium/third_party/icu/scripts/trim_data.sh
+++ b/chromium/third_party/icu/scripts/trim_data.sh
@@ -3,6 +3,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+set -e
# Remove entries currently not used in Chromium/V8.
function filter_locale_data {
@@ -184,6 +185,14 @@ function filter_unit_data {
/^ \}$/ p
d
}' ${i}
+
+ # Delete empty units,units{Narrow|Short} block. Otherwise, locale fallback
+ # fails. See crbug.com/707515.
+ sed -r -i \
+ '/^ units(|Narrow|Short)\{$/ {
+ N
+ /^ units(|Narrow|Short)\{\n \}/ d
+ }' ${i}
done
}
diff --git a/chromium/third_party/icu/scripts/update.sh b/chromium/third_party/icu/scripts/update.sh
index ee1f90f6638..a6f2399fc6e 100755
--- a/chromium/third_party/icu/scripts/update.sh
+++ b/chromium/third_party/icu/scripts/update.sh
@@ -14,7 +14,7 @@ fi
version="$1"
repoprefix="http://source.icu-project.org/repos/icu/icu/tags/release-"
-repo="${repoprefix}${version}"
+repo="${repoprefix}${version}/icu4c"
treeroot="$(dirname "$0")/.."
# Check if the repo for $version is available.
diff --git a/chromium/third_party/icu/source/data/misc/metaZones.txt b/chromium/third_party/icu/source/data/misc/metaZones.txt
index e63ae3cefa4..5af96ba9152 100644
--- a/chromium/third_party/icu/source/data/misc/metaZones.txt
+++ b/chromium/third_party/icu/source/data/misc/metaZones.txt
@@ -212,7 +212,6 @@ metaZones:table(nofallback){
}
Chile{
001{"America/Santiago"}
- AQ{"Antarctica/Palmer"}
}
China{
001{"Asia/Shanghai"}
@@ -2245,6 +2244,13 @@ metaZones:table(nofallback){
"Atlantic",
}
}
+ "America:Punta_Arenas"{
+ {
+ "Chile",
+ "1970-01-01 00:00",
+ "2016-12-03 23:00",
+ }
+ }
"America:Rainy_River"{
{
"America_Central",
@@ -2576,7 +2582,7 @@ metaZones:table(nofallback){
{
"Chile",
"1982-05-01 03:00",
- "9999-12-31 23:59",
+ "2016-12-03 23:00",
}
}
"Antarctica:Rothera"{
@@ -3454,6 +3460,11 @@ metaZones:table(nofallback){
"America_Eastern",
}
}
+ "Etc:GMT"{
+ {
+ "GMT",
+ }
+ }
"Europe:Amsterdam"{
{
"Europe_Central",
diff --git a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
index 07a4ac4b5c4..92be78c5db3 100644
--- a/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
+++ b/chromium/third_party/icu/source/data/misc/timezoneTypes.txt
@@ -80,10 +80,9 @@ timezoneTypes:table(nofallback){
"Etc:GMT-0"{"Etc/GMT"}
"Etc:GMT0"{"Etc/GMT"}
"Etc:Greenwich"{"Etc/GMT"}
- "Etc:UCT"{"Etc/GMT"}
- "Etc:UTC"{"Etc/GMT"}
- "Etc:Universal"{"Etc/GMT"}
- "Etc:Zulu"{"Etc/GMT"}
+ "Etc:UCT"{"Etc/UTC"}
+ "Etc:Universal"{"Etc/UTC"}
+ "Etc:Zulu"{"Etc/UTC"}
"Europe:Belfast"{"Europe/London"}
"Europe:Nicosia"{"Asia/Nicosia"}
"Europe:Tiraspol"{"Europe/Chisinau"}
@@ -138,11 +137,11 @@ timezoneTypes:table(nofallback){
ROK{"Asia/Seoul"}
Singapore{"Asia/Singapore"}
Turkey{"Europe/Istanbul"}
- UCT{"Etc/GMT"}
- UTC{"Etc/GMT"}
- Universal{"Etc/GMT"}
+ UCT{"Etc/UTC"}
+ UTC{"Etc/UTC"}
+ Universal{"Etc/UTC"}
W-SU{"Europe/Moscow"}
- Zulu{"Etc/GMT"}
+ Zulu{"Etc/UTC"}
}
}
typeMap{
@@ -316,6 +315,7 @@ timezoneTypes:table(nofallback){
"America:Port_of_Spain"{"ttpos"}
"America:Porto_Velho"{"brpvh"}
"America:Puerto_Rico"{"prsju"}
+ "America:Punta_Arenas"{"clpuq"}
"America:Rainy_River"{"caffs"}
"America:Rankin_Inlet"{"cayek"}
"America:Recife"{"brrec"}
@@ -463,7 +463,7 @@ timezoneTypes:table(nofallback){
"Australia:Melbourne"{"aumel"}
"Australia:Perth"{"auper"}
"Australia:Sydney"{"ausyd"}
- "Etc:GMT"{"utc"}
+ "Etc:GMT"{"gmt"}
"Etc:GMT+1"{"utcw01"}
"Etc:GMT+10"{"utcw10"}
"Etc:GMT+11"{"utcw11"}
@@ -490,6 +490,7 @@ timezoneTypes:table(nofallback){
"Etc:GMT-7"{"utce07"}
"Etc:GMT-8"{"utce08"}
"Etc:GMT-9"{"utce09"}
+ "Etc:UTC"{"utc"}
"Etc:Unknown"{"unk"}
"Europe:Amsterdam"{"nlams"}
"Europe:Andorra"{"adalv"}
diff --git a/chromium/third_party/icu/source/data/misc/windowsZones.txt b/chromium/third_party/icu/source/data/misc/windowsZones.txt
index 4606b168fb7..fdad2a665c8 100644
--- a/chromium/third_party/icu/source/data/misc/windowsZones.txt
+++ b/chromium/third_party/icu/source/data/misc/windowsZones.txt
@@ -457,7 +457,6 @@ windowsZones:table(nofallback){
}
"Pacific SA Standard Time"{
001{"America/Santiago"}
- AQ{"Antarctica/Palmer"}
CL{"America/Santiago"}
}
"Pacific Standard Time (Mexico)"{
@@ -504,11 +503,12 @@ windowsZones:table(nofallback){
}
"SA Eastern Standard Time"{
001{"America/Cayenne"}
- AQ{"Antarctica/Rothera"}
+ AQ{"Antarctica/Rothera Antarctica/Palmer"}
BR{
"America/Fortaleza America/Belem America/Maceio America/Recife Americ"
"a/Santarem"
}
+ CL{"America/Punta_Arenas"}
FK{"Atlantic/Stanley"}
GF{"America/Cayenne"}
SR{"America/Paramaribo"}
@@ -648,6 +648,7 @@ windowsZones:table(nofallback){
}
"Turkey Standard Time"{
001{"Europe/Istanbul"}
+ CY{"Asia/Famagusta"}
TR{"Europe/Istanbul"}
}
"Turks And Caicos Standard Time"{
@@ -668,7 +669,7 @@ windowsZones:table(nofallback){
"UTC"{
001{"Etc/GMT"}
GL{"America/Danmarkshavn"}
- ZZ{"Etc/GMT"}
+ ZZ{"Etc/GMT Etc/UTC"}
}
"UTC+12"{
001{"Etc/GMT-12"}
diff --git a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
index ed5bc311ad2..872958f9017 100644
--- a/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
+++ b/chromium/third_party/icu/source/data/misc/zoneinfo64.txt
@@ -3,20 +3,20 @@
// License & terms of use: http://www.unicode.org/copyright.html#License
//---------------------------------------------------------
// Build tool: tz2icu
-// Build date: Tue Nov 29 01:50:23 2016
+// Build date: Mon Mar 20 17:49:58 2017
// tz database: ftp://ftp.iana.org/tz/
-// tz version: 2016j
-// ICU version: 58.1
+// tz version: 2017b
+// ICU version: 59.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
//---------------------------------------------------------
zoneinfo64:table(nofallback) {
- TZVersion { "2016j" }
+ TZVersion { "2017b" }
Zones:array {
- /* ACT */ :int { 353 } //Z#0
- /* AET */ :int { 365 } //Z#1
+ /* ACT */ :int { 354 } //Z#0
+ /* AET */ :int { 366 } //Z#1
/* AGT */ :int { 64 } //Z#2
/* ART */ :int { 18 } //Z#3
/* AST */ :int { 60 } //Z#4
@@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1830383032 }
typeOffsets:intvector { -968, 0, 0, 0 }
typeMap:bin { "01" }
- links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 345 }
+ links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 346 }
} //Z#5
/* Africa/Accra */ :table {
trans:intvector { -1640995148, -1556841600, -1546388400, -1525305600, -1514852400, -1493769600, -1483316400, -1462233600, -1451780400, -1430611200, -1420158000, -1399075200, -1388622000, -1367539200, -1357086000, -1336003200, -1325550000, -1304380800, -1293927600, -1272844800, -1262391600, -1241308800, -1230855600, -1209772800, -1199319600, -1178150400, -1167697200, -1146614400, -1136161200, -1115078400, -1104625200, -1083542400, -1073089200, -1051920000, -1041466800, -1020384000, -1009930800, -988848000, -978394800, -957312000, -946858800, -925689600, -915236400, -894153600, -883700400, -862617600, -852164400 }
@@ -56,7 +56,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400, 1209074400, 1219957200, 1240524000, 1250802000, 1272578400, 1281474000, 1284069600, 1285880400, 1400191200, 1403816400, 1406844000, 1411678800 }
typeOffsets:intvector { 7509, 0, 7200, 0, 7200, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 3, 18, 399 }
+ links:intvector { 3, 18, 400 }
} //Z#18
/* Africa/Casablanca */ :table {
trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 }
@@ -68,8 +68,8 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2039 }
} //Z#19
/* Africa/Ceuta */ :table {
- transPre32:intvector { -1, 2117515772 }
- trans:intvector { -1630112400, -1616810400, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ transPre32:intvector { -1, 2117514496 }
+ trans:intvector { -1630112400, -1616810400, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -1276, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010304030403040304030403040304030403040304030403" }
finalRule { "EU" }
@@ -126,13 +126,13 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2109291020 }
typeOffsets:intvector { 7820, 0, 7200, 0 }
typeMap:bin { "01" }
- links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 376 }
+ links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 377 }
} //Z#43
/* Africa/Maseru */ :int { 30 } //Z#44
/* Africa/Mbabane */ :int { 30 } //Z#45
/* Africa/Mogadishu */ :int { 48 } //Z#46
/* Africa/Monrovia */ :table {
- trans:intvector { -1604359012, 73529070 }
+ trans:intvector { -1604359012, 63593070 }
typeOffsets:intvector { -2588, 0, -2670, 0, 0, 0 }
typeMap:bin { "0102" }
} //Z#47
@@ -140,7 +140,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1309746436, -1262314800, -946780200, -315629100 }
typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 }
typeMap:bin { "03010203" }
- links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 394, 513, 517, 522 }
+ links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 395, 514, 518, 523 }
} //Z#48
/* Africa/Ndjamena */ :table {
trans:intvector { -1830387612, 308703600, 321314400 }
@@ -157,7 +157,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 }
typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 }
typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" }
- links:intvector { 56, 530 }
+ links:intvector { 56, 531 }
} //Z#56
/* Africa/Tunis */ :table {
transPre32:intvector { -1, 1497764852 }
@@ -182,7 +182,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -36000 }
finalYear:int { 2008 }
- links:intvector { 59, 80, 614 }
+ links:intvector { 59, 80, 615 }
} //Z#59
/* America/Anchorage */ :table {
transPre32:intvector { -1, 1069604872, -1, 2106016072 }
@@ -192,7 +192,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- links:intvector { 4, 60, 613 }
+ links:intvector { 4, 60, 614 }
} //Z#60
/* America/Anguilla */ :int { 186 } //Z#61
/* America/Antigua */ :int { 186 } //Z#62
@@ -220,7 +220,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200, 1237082400 }
typeOffsets:intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040104030403020304030403" }
- links:intvector { 67, 101, 196 }
+ links:intvector { 67, 101, 197 }
} //Z#67
/* America/Argentina/Jujuy */ :table {
transPre32:intvector { -1, 1922870968 }
@@ -392,7 +392,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 98, 379, 616 }
+ links:intvector { 98, 380, 617 }
} //Z#98
/* America/Chihuahua */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
@@ -458,7 +458,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 109, 203, 542, 622 }
+ links:intvector { 109, 204, 543, 623 }
} //Z#109
/* America/Detroit */ :table {
trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -467,7 +467,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 110, 621 }
+ links:intvector { 110, 622 }
} //Z#110
/* America/Dominica */ :int { 186 } //Z#111
/* America/Edmonton */ :table {
@@ -477,7 +477,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 112, 386 }
+ links:intvector { 112, 387 }
} //Z#112
/* America/Eirunepe */ :table {
trans:intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600, 1384056000 }
@@ -489,7 +489,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -21408, 0, -21600, 0, -21600, 3600 }
typeMap:bin { "0102010201" }
} //Z#114
- /* America/Ensenada */ :int { 215 } //Z#115
+ /* America/Ensenada */ :int { 216 } //Z#115
/* America/Fort_Nelson */ :table {
transPre32:intvector { -1, 1581086343 }
trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800 }
@@ -542,9 +542,9 @@ zoneinfo64:table(nofallback) {
} //Z#125
/* America/Guayaquil */ :table {
transPre32:intvector { -1, 1770464856 }
- trans:intvector { -1230749160 }
- typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0 }
- typeMap:bin { "0102" }
+ trans:intvector { -1230749160, 722926800, 728884800 }
+ typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0, -18000, 3600 }
+ typeMap:bin { "01020302" }
} //Z#126
/* America/Guyana */ :table {
trans:intvector { -1730578040, 176010300, 662698800 }
@@ -558,7 +558,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- links:intvector { 128, 382 }
+ links:intvector { 128, 383 }
} //Z#128
/* America/Havana */ :table {
transPre32:intvector { -1, 1770465464 }
@@ -568,7 +568,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Cuba" }
finalRaw:int { -18000 }
finalYear:int { 2014 }
- links:intvector { 129, 393 }
+ links:intvector { 129, 394 }
} //Z#129
/* America/Hermosillo */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 }
@@ -583,7 +583,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 117, 131, 139, 510, 617 }
+ links:intvector { 117, 131, 139, 511, 618 }
} //Z#131
/* America/Indiana/Knox */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -593,7 +593,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 132, 147, 620 }
+ links:intvector { 132, 147, 621 }
} //Z#132
/* America/Indiana/Marengo */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -670,7 +670,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1827687169, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
typeOffsets:intvector { -18431, 0, -18000, 0, -18000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- links:intvector { 142, 527 }
+ links:intvector { 142, 528 }
} //Z#142
/* America/Jujuy */ :int { 68 } //Z#143
/* America/Juneau */ :table {
@@ -722,7 +722,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 151, 547, 623, 624 }
+ links:intvector { 151, 548, 624, 625 }
} //Z#151
/* America/Louisville */ :int { 145 } //Z#152
/* America/Lower_Princes */ :int { 105 } //Z#153
@@ -741,7 +741,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 }
typeOffsets:intvector { -14404, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 156, 375 }
+ links:intvector { 156, 376 }
} //Z#156
/* America/Marigot */ :int { 186 } //Z#157
/* America/Martinique */ :table {
@@ -764,7 +764,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -25200 }
finalYear:int { 2003 }
- links:intvector { 160, 536 }
+ links:intvector { 160, 537 }
} //Z#160
/* America/Mendoza */ :int { 70 } //Z#161
/* America/Menominee */ :table {
@@ -800,7 +800,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -21600 }
finalYear:int { 2003 }
- links:intvector { 165, 537 }
+ links:intvector { 165, 538 }
} //Z#165
/* America/Miquelon */ :table {
trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 }
@@ -832,7 +832,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -13484, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201020105030503050305030503050304030403040305030405030503050305030503050305030503050305030503050305030503050305030503050305030503" }
} //Z#169
- /* America/Montreal */ :int { 216 } //Z#170
+ /* America/Montreal */ :int { 217 } //Z#170
/* America/Montserrat */ :int { 186 } //Z#171
/* America/Nassau */ :table {
trans:intvector { -1825095030, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -850,7 +850,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 173, 618 }
+ links:intvector { 173, 619 }
} //Z#173
/* America/Nipigon */ :table {
transPre32:intvector { -1, 1928233280 }
@@ -874,7 +874,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 }
typeOffsets:intvector { -7780, 0, -7200, 0, -7200, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 176, 373 }
+ links:intvector { 176, 374 }
} //Z#176
/* America/North_Dakota/Beulah */ :table {
transPre32:intvector { -1, 1577323696 }
@@ -936,21 +936,24 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 }
typeMap:bin { "0102010201020102010201" }
- links:intvector { 184, 544, 615 }
+ links:intvector { 184, 545, 616 }
} //Z#184
/* America/Port-au-Prince */ :table {
transPre32:intvector { -1, 1770463056 }
- trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 }
+ trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1489302000, 1509861600 }
typeOffsets:intvector { -17360, 0, -18000, 0, -18000, 3600, -17340, 0 }
- typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ finalRule { "Haiti" }
+ finalRaw:int { -18000 }
+ finalYear:int { 2018 }
} //Z#185
/* America/Port_of_Spain */ :table {
trans:intvector { -1825098836 }
typeOffsets:intvector { -14764, 0, -14400, 0 }
typeMap:bin { "01" }
- links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 205, 207, 208, 209, 210, 217, 219 }
+ links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 206, 208, 209, 210, 211, 218, 220 }
} //Z#186
- /* America/Porto_Acre */ :int { 195 } //Z#187
+ /* America/Porto_Acre */ :int { 196 } //Z#187
/* America/Porto_Velho */ :table {
trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 }
typeOffsets:intvector { -15336, 0, -14400, 0, -14400, 3600 }
@@ -961,8 +964,14 @@ zoneinfo64:table(nofallback) {
trans:intvector { -873057600, -765399600 }
typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "010201" }
- links:intvector { 189, 546 }
+ links:intvector { 189, 547 }
} //Z#189
+ /* America/Punta_Arenas */ :table {
+ transPre32:intvector { -1, 1770462716 }
+ trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
+ typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 }
+ typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" }
+ } //Z#190
/* America/Rainy_River */ :table {
transPre32:intvector { -1, 1928234792 }
trans:intvector { -1632067200, -1615136400, -923248800, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
@@ -971,7 +980,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#190
+ } //Z#191
/* America/Rankin_Inlet */ :table {
trans:intvector { -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 }
@@ -979,18 +988,18 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#191
+ } //Z#192
/* America/Recife */ :table {
trans:intvector { -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 }
typeOffsets:intvector { -8376, 0, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- } //Z#192
+ } //Z#193
/* America/Regina */ :table {
trans:intvector { -2030202084, -1632063600, -1615132800, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 }
typeOffsets:intvector { -25116, 0, -25200, 0, -25200, 3600, -21600, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 193, 384, 389 }
- } //Z#193
+ links:intvector { 194, 385, 390 }
+ } //Z#194
/* America/Resolute */ :table {
trans:intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 }
@@ -998,20 +1007,20 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#194
+ } //Z#195
/* America/Rio_Branco */ :table {
trans:intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600, 1384056000 }
typeOffsets:intvector { -16272, 0, -18000, 0, -18000, 3600, -14400, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010301" }
- links:intvector { 187, 195, 372 }
- } //Z#195
- /* America/Rosario */ :int { 67 } //Z#196
- /* America/Santa_Isabel */ :int { 215 } //Z#197
+ links:intvector { 187, 196, 373 }
+ } //Z#196
+ /* America/Rosario */ :int { 67 } //Z#197
+ /* America/Santa_Isabel */ :int { 216 } //Z#198
/* America/Santarem */ :table {
trans:intvector { -1767212472, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 1214280000 }
typeOffsets:intvector { -13128, 0, -14400, 0, -14400, 3600, -10800, 0 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" }
- } //Z#198
+ } //Z#199
/* America/Santiago */ :table {
trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
@@ -1019,14 +1028,14 @@ zoneinfo64:table(nofallback) {
finalRule { "Chile" }
finalRaw:int { -14400 }
finalYear:int { 2017 }
- links:intvector { 199, 391 }
- } //Z#199
+ links:intvector { 200, 392 }
+ } //Z#200
/* America/Santo_Domingo */ :table {
transPre32:intvector { -1, 1770462472 }
trans:intvector { -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 }
typeOffsets:intvector { -16776, 0, -18000, 0, -18000, 1800, -18000, 3600, -16800, 0, -14400, 0 }
typeMap:bin { "0401030102010201020102010201050105" }
- } //Z#200
+ } //Z#201
/* America/Sao_Paulo */ :table {
trans:intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1540090800, 1550368800, 1571540400, 1581818400, 1602990000, 1613872800, 1634439600, 1645322400, 1665889200, 1677376800, 1697338800, 1708221600, 1729393200, 1739671200, 1760842800, 1771725600, 1792292400, 1803175200, 1823742000, 1834624800, 1855191600, 1866074400, 1887246000, 1897524000, 1918695600, 1928973600, 1950145200, 1960423200, 1981594800, 1992477600, 2013044400, 2024532000, 2044494000, 2055376800, 2076548400, 2086826400, 2107998000, 2118880800, 2139447600 }
transPost32:intvector { 0, -2144636896, 0, -2124070096 }
@@ -1035,8 +1044,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Brazil" }
finalRaw:int { -10800 }
finalYear:int { 2039 }
- links:intvector { 201, 370, 374 }
- } //Z#201
+ links:intvector { 202, 371, 375 }
+ } //Z#202
/* America/Scoresbysund */ :table {
trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -5272, 0, -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 }
@@ -1044,8 +1053,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { -3600 }
finalYear:int { 1997 }
- } //Z#202
- /* America/Shiprock */ :int { 109 } //Z#203
+ } //Z#203
+ /* America/Shiprock */ :int { 109 } //Z#204
/* America/Sitka */ :table {
transPre32:intvector { -1, 1069601369, -1, 2106012569 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
@@ -1054,8 +1063,8 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- } //Z#204
- /* America/St_Barthelemy */ :int { 186 } //Z#205
+ } //Z#205
+ /* America/St_Barthelemy */ :int { 186 } //Z#206
/* America/St_Johns */ :table {
trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 }
typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 }
@@ -1063,22 +1072,22 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -12600 }
finalYear:int { 2013 }
- links:intvector { 206, 378, 387 }
- } //Z#206
- /* America/St_Kitts */ :int { 186 } //Z#207
- /* America/St_Lucia */ :int { 186 } //Z#208
- /* America/St_Thomas */ :int { 186 } //Z#209
- /* America/St_Vincent */ :int { 186 } //Z#210
+ links:intvector { 207, 379, 388 }
+ } //Z#207
+ /* America/St_Kitts */ :int { 186 } //Z#208
+ /* America/St_Lucia */ :int { 186 } //Z#209
+ /* America/St_Thomas */ :int { 186 } //Z#210
+ /* America/St_Vincent */ :int { 186 } //Z#211
/* America/Swift_Current */ :table {
trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 }
typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 }
typeMap:bin { "01020102010201020102010201020102010201020103" }
- } //Z#211
+ } //Z#212
/* America/Tegucigalpa */ :table {
trans:intvector { -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 }
typeOffsets:intvector { -20932, 0, -21600, 0, -21600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#212
+ } //Z#213
/* America/Thule */ :table {
trans:intvector { -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
typeOffsets:intvector { -16508, 0, -14400, 0, -14400, 3600 }
@@ -1086,7 +1095,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Thule" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- } //Z#213
+ } //Z#214
/* America/Thunder_Bay */ :table {
transPre32:intvector { -1, 1928233516 }
trans:intvector { -1893434400, -880218000, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -1095,7 +1104,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- } //Z#214
+ } //Z#215
/* America/Tijuana */ :table {
trans:intvector { -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -761677200, -686073600, -661539600, -495039600, -481734000, -463590000, -450284400, -431535600, -418230000, -400086000, -386780400, -368636400, -355330800, -337186800, -323881200, -305737200, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1175421600, 1193562000, 1207476000, 1225011600, 1238925600, 1256461200, 1268560800, 1289120400 }
typeOffsets:intvector { -28084, 0, -28800, 0, -28800, 3600, -25200, 0 }
@@ -1103,8 +1112,8 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2011 }
- links:intvector { 115, 197, 215, 535 }
- } //Z#215
+ links:intvector { 115, 198, 216, 536 }
+ } //Z#216
/* America/Toronto */ :table {
transPre32:intvector { -1, 1928231148 }
trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -1113,9 +1122,9 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 170, 216, 385 }
- } //Z#216
- /* America/Tortola */ :int { 186 } //Z#217
+ links:intvector { 170, 217, 386 }
+ } //Z#217
+ /* America/Tortola */ :int { 186 } //Z#218
/* America/Vancouver */ :table {
transPre32:intvector { -1, 1581086444 }
trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1124,9 +1133,9 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 218, 388 }
- } //Z#218
- /* America/Virgin */ :int { 186 } //Z#219
+ links:intvector { 219, 389 }
+ } //Z#219
+ /* America/Virgin */ :int { 186 } //Z#220
/* America/Whitehorse */ :table {
transPre32:intvector { -1, 2105969308 }
trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1135,8 +1144,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 220, 390 }
- } //Z#220
+ links:intvector { 221, 391 }
+ } //Z#221
/* America/Winnipeg */ :table {
transPre32:intvector { -1, 1692709012 }
trans:intvector { -1694368800, -1681671600, -1632067200, -1615136400, -1029686400, -1018198800, -880214400, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1143964800, 1162105200, 1173600000, 1194159600 }
@@ -1145,8 +1154,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 221, 383 }
- } //Z#221
+ links:intvector { 222, 384 }
+ } //Z#222
/* America/Yakutat */ :table {
transPre32:intvector { -1, 1069602431, -1, 2106013631 }
trans:intvector { -880203600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
@@ -1155,7 +1164,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- } //Z#222
+ } //Z#223
/* America/Yellowknife */ :table {
trans:intvector { -1104537600, -880210800, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { 0, 0, -25200, 0, -25200, 3600, -25200, 7200 }
@@ -1163,53 +1172,50 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#223
+ } //Z#224
/* Antarctica/Casey */ :table {
trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600 }
typeOffsets:intvector { 0, 0, 28800, 0, 39600, 0 }
typeMap:bin { "010201020102" }
- } //Z#224
+ } //Z#225
/* Antarctica/Davis */ :table {
trans:intvector { -409190400, -163062000, -28857600, 1255806000, 1268251200, 1319742000, 1329854400 }
typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 }
typeMap:bin { "02000201020102" }
- } //Z#225
+ } //Z#226
/* Antarctica/DumontDUrville */ :table {
trans:intvector { -725846400, -566992800, -415497600 }
typeOffsets:intvector { 0, 0, 36000, 0 }
typeMap:bin { "010001" }
- } //Z#226
+ } //Z#227
/* Antarctica/Macquarie */ :table {
transPre32:intvector { -1, 2080708096 }
trans:intvector { -1680508800, -1665392400, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1270310400 }
typeOffsets:intvector { 0, 0, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "01020100010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
- } //Z#227
+ } //Z#228
/* Antarctica/Mawson */ :table {
trans:intvector { -501206400, 1255809600 }
typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0201" }
- } //Z#228
- /* Antarctica/McMurdo */ :int { 550 } //Z#229
+ } //Z#229
+ /* Antarctica/McMurdo */ :int { 551 } //Z#230
/* Antarctica/Palmer */ :table {
- trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
- typeMap:bin { "020102010201020102010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
- finalRule { "Chile" }
- finalRaw:int { -14400 }
- finalYear:int { 2017 }
- } //Z#230
+ typeMap:bin { "02010201020102010201030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
+ } //Z#231
/* Antarctica/Rothera */ :table {
trans:intvector { 218246400 }
typeOffsets:intvector { 0, 0, -10800, 0 }
typeMap:bin { "01" }
- } //Z#231
- /* Antarctica/South_Pole */ :int { 550 } //Z#232
+ } //Z#232
+ /* Antarctica/South_Pole */ :int { 551 } //Z#233
/* Antarctica/Syowa */ :table {
trans:intvector { -407808000 }
typeOffsets:intvector { 0, 0, 10800, 0 }
typeMap:bin { "01" }
- } //Z#233
+ } //Z#234
/* Antarctica/Troll */ :table {
trans:intvector { 1111885200, 1130634000 }
typeOffsets:intvector { 0, 0, 0, 7200 }
@@ -1217,19 +1223,19 @@ zoneinfo64:table(nofallback) {
finalRule { "Troll" }
finalRaw:int { 0 }
finalYear:int { 2006 }
- } //Z#234
+ } //Z#235
/* Antarctica/Vostok */ :table {
trans:intvector { -380073600 }
typeOffsets:intvector { 0, 0, 21600, 0 }
typeMap:bin { "01" }
- } //Z#235
- /* Arctic/Longyearbyen */ :int { 472 } //Z#236
- /* Asia/Aden */ :int { 307 } //Z#237
+ } //Z#236
+ /* Arctic/Longyearbyen */ :int { 473 } //Z#237
+ /* Asia/Aden */ :int { 308 } //Z#238
/* Asia/Almaty */ :table {
trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 }
typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" }
- } //Z#238
+ } //Z#239
/* Asia/Amman */ :table {
trans:intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938124000, 954367200, 970178400, 985816800, 1001628000, 1017352800, 1033077600, 1048802400, 1066946400, 1080252000, 1097791200, 1112306400, 1128031200, 1143756000, 1161900000, 1175205600, 1193349600, 1206655200, 1225404000, 1238104800, 1256853600, 1269554400, 1288303200, 1301608800, 1319752800, 1333058400, 1387486800, 1395957600, 1414706400 }
typeOffsets:intvector { 8624, 0, 7200, 0, 7200, 3600 }
@@ -1237,57 +1243,57 @@ zoneinfo64:table(nofallback) {
finalRule { "Jordan" }
finalRaw:int { 7200 }
finalYear:int { 2015 }
- } //Z#239
+ } //Z#240
/* Asia/Anadyr */ :table {
trans:intvector { -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 }
typeOffsets:intvector { 42596, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 }
typeMap:bin { "03050605040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#240
+ } //Z#241
/* Asia/Aqtau */ :table {
trans:intvector { -1441164064, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
typeOffsets:intvector { 12064, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "0103050403040304030403040304030403040304030201030403040304010201020102010201020102010201020102010203" }
- } //Z#241
+ } //Z#242
/* Asia/Aqtobe */ :table {
trans:intvector { -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
typeOffsets:intvector { 13720, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" }
- } //Z#242
+ } //Z#243
/* Asia/Ashgabat */ :table {
trans:intvector { -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000 }
typeOffsets:intvector { 14012, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103" }
- links:intvector { 243, 244 }
- } //Z#243
- /* Asia/Ashkhabad */ :int { 243 } //Z#244
+ links:intvector { 244, 245 }
+ } //Z#244
+ /* Asia/Ashkhabad */ :int { 244 } //Z#245
/* Asia/Atyrau */ :table {
- trans:intvector { -1441164464, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
- typeOffsets:intvector { 12464, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "0103050403040304030403040304030403040304030201030403040304030403040304030403020102010201020102010203" }
- } //Z#245
+ trans:intvector { -1441164464, -1247540400, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
+ typeOffsets:intvector { 12464, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "0104060504050405040504050405040504050405040302040504050405040504050405040504030203020302030203020304" }
+ } //Z#246
/* Asia/Baghdad */ :table {
transPre32:intvector { -1, 1770435036 }
trans:intvector { -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670464000, 686275200, 702086400, 717897600, 733622400, 749433600, 765158400, 780969600, 796694400, 812505600, 828316800, 844128000, 859852800, 875664000, 891388800, 907200000, 922924800, 938736000, 954547200, 970358400, 986083200, 1001894400, 1017619200, 1033430400, 1049155200, 1064966400, 1080777600, 1096588800, 1112313600, 1128124800, 1143849600, 1159660800, 1175385600, 1191196800 }
typeOffsets:intvector { 10660, 0, 10656, 0, 10800, 0, 10800, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- } //Z#246
- /* Asia/Bahrain */ :int { 304 } //Z#247
+ } //Z#247
+ /* Asia/Bahrain */ :int { 305 } //Z#248
/* Asia/Baku */ :table {
trans:intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 828234000, 846378000, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1319932800, 1332633600, 1351382400, 1364688000, 1382832000, 1396137600, 1414281600, 1427587200, 1445731200 }
typeOffsets:intvector { 11964, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
- } //Z#248
+ } //Z#249
/* Asia/Bangkok */ :table {
trans:intvector { -1570084924 }
typeOffsets:intvector { 24124, 0, 25200, 0 }
typeMap:bin { "01" }
- links:intvector { 249, 301, 329 }
- } //Z#249
+ links:intvector { 250, 302, 330 }
+ } //Z#250
/* Asia/Barnaul */ :table {
trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 }
typeOffsets:intvector { 20100, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#250
+ } //Z#251
/* Asia/Beirut */ :table {
transPre32:intvector { -1, 1454817976 }
trans:intvector { -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600, 922572000, 941317200 }
@@ -1296,40 +1302,37 @@ zoneinfo64:table(nofallback) {
finalRule { "Lebanon" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- } //Z#251
+ } //Z#252
/* Asia/Bishkek */ :table {
trans:intvector { -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 }
typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" }
- } //Z#252
+ } //Z#253
/* Asia/Brunei */ :table {
trans:intvector { -1383464380, -1167636600 }
typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 }
typeMap:bin { "0102" }
- } //Z#253
- /* Asia/Calcutta */ :int { 285 } //Z#254
+ } //Z#254
+ /* Asia/Calcutta */ :int { 286 } //Z#255
/* Asia/Chita */ :table {
trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800, 1459015200 }
typeOffsets:intvector { 27232, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" }
- } //Z#255
+ } //Z#256
/* Asia/Choibalsan */ :table {
- trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200 }
+ trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200, 1458928800, 1474642800 }
typeOffsets:intvector { 27480, 0, 25200, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 }
- typeMap:bin { "01020504050405040504050405040504050405040504050405040504050405040504050405040504050405040504020302" }
- finalRule { "Mongol" }
- finalRaw:int { 28800 }
- finalYear:int { 2016 }
- } //Z#256
- /* Asia/Chongqing */ :int { 312 } //Z#257
- /* Asia/Chungking */ :int { 312 } //Z#258
+ typeMap:bin { "010205040504050405040504050405040504050405040504050405040504050405040504050405040504050405040203020302" }
+ } //Z#257
+ /* Asia/Chongqing */ :int { 313 } //Z#258
+ /* Asia/Chungking */ :int { 313 } //Z#259
/* Asia/Colombo */ :table {
transPre32:intvector { -1, 1454807332 }
trans:intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 }
typeOffsets:intvector { 19164, 0, 19172, 0, 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 }
typeMap:bin { "0102030402060502" }
- } //Z#259
- /* Asia/Dacca */ :int { 262 } //Z#260
+ } //Z#260
+ /* Asia/Dacca */ :int { 263 } //Z#261
/* Asia/Damascus */ :table {
trans:intvector { -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1225486800, 1238104800, 1256850000, 1270159200, 1288299600, 1301608800, 1319749200, 1333058400, 1351198800 }
typeOffsets:intvector { 8712, 0, 7200, 0, 7200, 3600 }
@@ -1337,35 +1340,35 @@ zoneinfo64:table(nofallback) {
finalRule { "Syria" }
finalRaw:int { 7200 }
finalYear:int { 2013 }
- } //Z#261
+ } //Z#262
/* Asia/Dhaka */ :table {
transPre32:intvector { -1, 1770423996 }
trans:intvector { -891582800, -872058600, -862637400, -576138600, 1245430800, 1262278800 }
typeOffsets:intvector { 21700, 0, 19800, 0, 21200, 0, 21600, 0, 21600, 3600, 23400, 0 }
typeMap:bin { "02050105030403" }
- links:intvector { 260, 262, 371 }
- } //Z#262
+ links:intvector { 261, 263, 372 }
+ } //Z#263
/* Asia/Dili */ :table {
trans:intvector { -1830414140, -879152400, 199897200, 969120000 }
typeOffsets:intvector { 30140, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020102" }
- } //Z#263
+ } //Z#264
/* Asia/Dubai */ :table {
trans:intvector { -1577936472 }
typeOffsets:intvector { 13272, 0, 14400, 0 }
typeMap:bin { "01" }
- links:intvector { 264, 295 }
- } //Z#264
+ links:intvector { 265, 296 }
+ } //Z#265
/* Asia/Dushanbe */ :table {
trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 }
typeOffsets:intvector { 16512, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201" }
- } //Z#265
+ } //Z#266
/* Asia/Famagusta */ :table {
trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000 }
typeOffsets:intvector { 8148, 0, 7200, 0, 7200, 3600, 10800, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
- } //Z#266
+ } //Z#267
/* Asia/Gaza */ :table {
transPre32:intvector { -1, 2109557424 }
trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
@@ -1374,8 +1377,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
- } //Z#267
- /* Asia/Harbin */ :int { 312 } //Z#268
+ } //Z#268
+ /* Asia/Harbin */ :int { 313 } //Z#269
/* Asia/Hebron */ :table {
transPre32:intvector { -1, 2109557273 }
trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
@@ -1384,43 +1387,40 @@ zoneinfo64:table(nofallback) {
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
- } //Z#269
+ } //Z#270
/* Asia/Ho_Chi_Minh */ :table {
trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 }
typeMap:bin { "020103040103010301" }
- links:intvector { 270, 308, 628 }
- } //Z#270
+ links:intvector { 271, 309, 629 }
+ } //Z#271
/* Asia/Hong_Kong */ :table {
trans:intvector { -2056693002, -907389000, -891667800, -884246400, -766746000, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542352600, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 271, 509 }
- } //Z#271
+ links:intvector { 272, 510 }
+ } //Z#272
/* Asia/Hovd */ :table {
- trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800 }
+ trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 }
typeOffsets:intvector { 21996, 0, 21600, 0, 25200, 0, 25200, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Mongol" }
- finalRaw:int { 25200 }
- finalYear:int { 2016 }
- } //Z#272
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
+ } //Z#273
/* Asia/Irkutsk */ :table {
trans:intvector { -1575874625, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701805600, 717530400, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200, 828208800, 846352800, 859658400, 877802400, 891108000, 909252000, 922557600, 941306400, 954007200, 972756000, 985456800, 1004205600, 1017511200, 1035655200, 1048960800, 1067104800, 1080410400, 1099159200, 1111860000, 1130608800, 1143309600, 1162058400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200, 1256407200, 1269712800, 1288461600, 1301162400, 1414256400 }
typeOffsets:intvector { 25025, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#273
- /* Asia/Istanbul */ :int { 456 } //Z#274
+ } //Z#274
+ /* Asia/Istanbul */ :int { 457 } //Z#275
/* Asia/Jakarta */ :table {
trans:intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 }
typeOffsets:intvector { 25632, 0, 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "02030503040301" }
- } //Z#275
+ } //Z#276
/* Asia/Jayapura */ :table {
trans:intvector { -1172913768, -799491600, -189423000 }
typeOffsets:intvector { 33768, 0, 32400, 0, 34200, 0 }
typeMap:bin { "010201" }
- } //Z#276
+ } //Z#277
/* Asia/Jerusalem */ :table {
transPre32:intvector { -1, 1454818042 }
trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 }
@@ -1429,87 +1429,87 @@ zoneinfo64:table(nofallback) {
finalRule { "Zion" }
finalRaw:int { 7200 }
finalYear:int { 2014 }
- links:intvector { 277, 319, 525 }
- } //Z#277
+ links:intvector { 278, 320, 526 }
+ } //Z#278
/* Asia/Kabul */ :table {
transPre32:intvector { -1, 1770429088 }
trans:intvector { -788932800 }
typeOffsets:intvector { 16608, 0, 14400, 0, 16200, 0 }
typeMap:bin { "0102" }
- } //Z#278
+ } //Z#279
/* Asia/Kamchatka */ :table {
trans:intvector { -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 }
typeOffsets:intvector { 38076, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#279
+ } //Z#280
/* Asia/Karachi */ :table {
trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 }
typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 }
typeMap:bin { "03040301020102010201" }
- links:intvector { 280, 543 }
- } //Z#280
- /* Asia/Kashgar */ :int { 327 } //Z#281
+ links:intvector { 281, 544 }
+ } //Z#281
+ /* Asia/Kashgar */ :int { 328 } //Z#282
/* Asia/Kathmandu */ :table {
trans:intvector { -1577943676, 504901800 }
typeOffsets:intvector { 20476, 0, 19800, 0, 20700, 0 }
typeMap:bin { "0102" }
- links:intvector { 282, 283 }
- } //Z#282
- /* Asia/Katmandu */ :int { 282 } //Z#283
+ links:intvector { 283, 284 }
+ } //Z#283
+ /* Asia/Katmandu */ :int { 283 } //Z#284
/* Asia/Khandyga */ :table {
trans:intvector { -1579424533, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1072882800, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1315832400, 1414252800 }
typeOffsets:intvector { 32533, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403050605060506050605060506050605070503" }
- } //Z#284
+ } //Z#285
/* Asia/Kolkata */ :table {
transPre32:intvector { -1, 1454805288 }
trans:intvector { -891582800, -872058600, -862637400, -764145000 }
typeOffsets:intvector { 21208, 0, 19800, 0, 19800, 3600, 21200, 0, 23400, 0 }
typeMap:bin { "0304010201" }
- links:intvector { 254, 285, 511 }
- } //Z#285
+ links:intvector { 255, 286, 512 }
+ } //Z#286
/* Asia/Krasnoyarsk */ :table {
trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 }
typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#286
+ } //Z#287
/* Asia/Kuala_Lumpur */ :table {
transPre32:intvector { -1, 2117490090 }
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "0102030405070506" }
- } //Z#287
+ } //Z#288
/* Asia/Kuching */ :table {
trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 }
typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 }
typeMap:bin { "010203020302030203020302030203020402" }
- } //Z#288
- /* Asia/Kuwait */ :int { 307 } //Z#289
- /* Asia/Macao */ :int { 291 } //Z#290
+ } //Z#289
+ /* Asia/Kuwait */ :int { 308 } //Z#290
+ /* Asia/Macao */ :int { 292 } //Z#291
/* Asia/Macau */ :table {
trans:intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 }
typeOffsets:intvector { 27260, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 290, 291 }
- } //Z#291
+ links:intvector { 291, 292 }
+ } //Z#292
/* Asia/Magadan */ :table {
trans:intvector { -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600, 1461427200 }
typeOffsets:intvector { 36192, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" }
- } //Z#292
+ } //Z#293
/* Asia/Makassar */ :table {
trans:intvector { -1172908656, -880272000, -766054800 }
typeOffsets:intvector { 28656, 0, 28800, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 293, 324 }
- } //Z#293
+ links:intvector { 294, 325 }
+ } //Z#294
/* Asia/Manila */ :table {
transPre32:intvector { -1, 350346256, -1, 2065645456 }
trans:intvector { -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 }
typeOffsets:intvector { -57360, 0, 28800, 0, 28800, 3600, 29040, 0, 32400, 0 }
typeMap:bin { "03010201040102010201" }
- } //Z#294
- /* Asia/Muscat */ :int { 264 } //Z#295
+ } //Z#295
+ /* Asia/Muscat */ :int { 265 } //Z#296
/* Asia/Nicosia */ :table {
trans:intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 }
typeOffsets:intvector { 8008, 0, 7200, 0, 7200, 3600 }
@@ -1517,109 +1517,109 @@ zoneinfo64:table(nofallback) {
finalRule { "EUAsia" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- links:intvector { 296, 471 }
- } //Z#296
+ links:intvector { 297, 472 }
+ } //Z#297
/* Asia/Novokuznetsk */ :table {
trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 }
typeOffsets:intvector { 20928, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#297
+ } //Z#298
/* Asia/Novosibirsk */ :table {
trans:intvector { -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1469304000 }
typeOffsets:intvector { 19900, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#298
+ } //Z#299
/* Asia/Omsk */ :table {
trans:intvector { -1582088010, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600 }
typeOffsets:intvector { 17610, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600, 25200, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#299
- /* Asia/Oral */ :table {
- trans:intvector { -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
- typeOffsets:intvector { 12324, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "010304050403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010203" }
} //Z#300
- /* Asia/Phnom_Penh */ :int { 249 } //Z#301
+ /* Asia/Oral */ :table {
+ trans:intvector { -1441164324, -1247540400, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
+ typeOffsets:intvector { 12324, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "010405060504050405040504050405040504030203020302040302030203020302030203020302030203020302030203020304" }
+ } //Z#301
+ /* Asia/Phnom_Penh */ :int { 250 } //Z#302
/* Asia/Pontianak */ :table {
trans:intvector { -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 }
typeOffsets:intvector { 26240, 0, 25200, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "02040203020301" }
- } //Z#302
+ } //Z#303
/* Asia/Pyongyang */ :table {
trans:intvector { -1948782180, -1830414600, 1439564400 }
typeOffsets:intvector { 30180, 0, 30600, 0, 32400, 0 }
typeMap:bin { "010201" }
- } //Z#303
+ } //Z#304
/* Asia/Qatar */ :table {
trans:intvector { -1577935568, 76190400 }
typeOffsets:intvector { 12368, 0, 10800, 0, 14400, 0 }
typeMap:bin { "0201" }
- links:intvector { 247, 304 }
- } //Z#304
+ links:intvector { 248, 305 }
+ } //Z#305
/* Asia/Qyzylorda */ :table {
trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
typeOffsets:intvector { 15712, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010304050403040304030403040304030403040304030203050403040304030403040304030403040304030403040304030405" }
- } //Z#305
- /* Asia/Rangoon */ :int { 332 } //Z#306
+ } //Z#306
+ /* Asia/Rangoon */ :int { 333 } //Z#307
/* Asia/Riyadh */ :table {
trans:intvector { -719636812 }
typeOffsets:intvector { 11212, 0, 10800, 0 }
typeMap:bin { "01" }
- links:intvector { 237, 289, 307 }
- } //Z#307
- /* Asia/Saigon */ :int { 270 } //Z#308
+ links:intvector { 238, 290, 308 }
+ } //Z#308
+ /* Asia/Saigon */ :int { 271 } //Z#309
/* Asia/Sakhalin */ :table {
trans:intvector { -2031039048, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200, 1459008000 }
typeOffsets:intvector { 34248, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 }
typeMap:bin { "010405040504050405040504050405040504050405040302040504050405040504050403020302030203020302030203020302030203020302030203020302040204" }
- } //Z#309
+ } //Z#310
/* Asia/Samarkand */ :table {
trans:intvector { -1441168073, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686091600 }
typeOffsets:intvector { 16073, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010203040302030203020302030203020302030203020302" }
- } //Z#310
+ } //Z#311
/* Asia/Seoul */ :table {
trans:intvector { -1948782472, -1830414600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 }
typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 }
typeMap:bin { "0103010201020102010201020102010304030403" }
- links:intvector { 311, 595 }
- } //Z#311
+ links:intvector { 312, 596 }
+ } //Z#312
/* Asia/Shanghai */ :table {
transPre32:intvector { -1, 2117485353 }
trans:intvector { -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 257, 258, 268, 312, 381, 545 }
- } //Z#312
+ links:intvector { 258, 259, 269, 313, 382, 546 }
+ } //Z#313
/* Asia/Singapore */ :table {
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020304060405" }
- links:intvector { 313, 597 }
- } //Z#313
+ links:intvector { 314, 598 }
+ } //Z#314
/* Asia/Srednekolymsk */ :table {
trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 }
typeOffsets:intvector { 36892, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#314
+ } //Z#315
/* Asia/Taipei */ :table {
transPre32:intvector { -1, 1959718936 }
trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 }
typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 315, 594 }
- } //Z#315
+ links:intvector { 316, 595 }
+ } //Z#316
/* Asia/Tashkent */ :table {
trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 }
typeOffsets:intvector { 16631, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201" }
- } //Z#316
+ } //Z#317
/* Asia/Tbilisi */ :table {
trans:intvector { -1441162751, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 }
typeOffsets:intvector { 10751, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" }
- } //Z#317
+ } //Z#318
/* Asia/Tehran */ :table {
trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800 }
typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 }
@@ -1627,78 +1627,75 @@ zoneinfo64:table(nofallback) {
finalRule { "Iran" }
finalRaw:int { 12600 }
finalYear:int { 2037 }
- links:intvector { 318, 524 }
- } //Z#318
- /* Asia/Tel_Aviv */ :int { 277 } //Z#319
- /* Asia/Thimbu */ :int { 321 } //Z#320
+ links:intvector { 319, 525 }
+ } //Z#319
+ /* Asia/Tel_Aviv */ :int { 278 } //Z#320
+ /* Asia/Thimbu */ :int { 322 } //Z#321
/* Asia/Thimphu */ :table {
trans:intvector { -706341516, 560025000 }
typeOffsets:intvector { 21516, 0, 19800, 0, 21600, 0 }
typeMap:bin { "0102" }
- links:intvector { 320, 321 }
- } //Z#321
+ links:intvector { 321, 322 }
+ } //Z#322
/* Asia/Tokyo */ :table {
transPre32:intvector { -1, 1707254896 }
trans:intvector { -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 }
typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 }
typeMap:bin { "010201020102010201" }
- links:intvector { 322, 526, 528 }
- } //Z#322
+ links:intvector { 323, 527, 529 }
+ } //Z#323
/* Asia/Tomsk */ :table {
trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 }
typeOffsets:intvector { 20391, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304020102010201020102010201020102010201030103" }
- } //Z#323
- /* Asia/Ujung_Pandang */ :int { 293 } //Z#324
+ } //Z#324
+ /* Asia/Ujung_Pandang */ :int { 294 } //Z#325
/* Asia/Ulaanbaatar */ :table {
- trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200 }
+ trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200, 1458928800, 1474642800 }
typeOffsets:intvector { 25652, 0, 25200, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Mongol" }
- finalRaw:int { 28800 }
- finalYear:int { 2016 }
- links:intvector { 325, 326 }
- } //Z#325
- /* Asia/Ulan_Bator */ :int { 325 } //Z#326
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
+ links:intvector { 326, 327 }
+ } //Z#326
+ /* Asia/Ulan_Bator */ :int { 326 } //Z#327
/* Asia/Urumqi */ :table {
trans:intvector { -1325483420 }
typeOffsets:intvector { 21020, 0, 21600, 0 }
typeMap:bin { "01" }
- links:intvector { 281, 327 }
- } //Z#327
+ links:intvector { 282, 328 }
+ } //Z#328
/* Asia/Ust-Nera */ :table {
trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 }
typeOffsets:intvector { 34374, 0, 28800, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "010206050605060506050605060506050605060506050403050605060506050605060506050605060506050605060506050605060506050605060506050605070503" }
- } //Z#328
- /* Asia/Vientiane */ :int { 249 } //Z#329
+ } //Z#329
+ /* Asia/Vientiane */ :int { 250 } //Z#330
/* Asia/Vladivostok */ :table {
trans:intvector { -1487321251, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701798400, 717523200, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200 }
typeOffsets:intvector { 31651, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#330
+ } //Z#331
/* Asia/Yakutsk */ :table {
trans:intvector { -1579423138, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800 }
typeOffsets:intvector { 31138, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#331
+ } //Z#332
/* Asia/Yangon */ :table {
trans:intvector { -1577946280, -873268200, -778410000 }
typeOffsets:intvector { 23080, 0, 23400, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 306, 332 }
- } //Z#332
+ links:intvector { 307, 333 }
+ } //Z#333
/* Asia/Yekaterinburg */ :table {
trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 }
typeOffsets:intvector { 14553, 0, 13505, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010204050405040504050405040504050405040504050403020405040504050405040504050405040504050405040504050405040504050405040504050405040604" }
- } //Z#333
+ } //Z#334
/* Asia/Yerevan */ :table {
trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 }
typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" }
- links:intvector { 334, 538 }
- } //Z#334
+ links:intvector { 335, 539 }
+ } //Z#335
/* Atlantic/Azores */ :table {
transPre32:intvector { -1, 1581063056 }
trans:intvector { -1830377128, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -1707,7 +1704,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { -3600 }
finalYear:int { 1997 }
- } //Z#335
+ } //Z#336
/* Atlantic/Bermuda */ :table {
trans:intvector { -1262281242, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
typeOffsets:intvector { -15558, 0, -14400, 0, -14400, 3600 }
@@ -1715,7 +1712,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- } //Z#336
+ } //Z#337
/* Atlantic/Canary */ :table {
trans:intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 }
@@ -1723,13 +1720,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#337
+ } //Z#338
/* Atlantic/Cape_Verde */ :table {
trans:intvector { -1988144756, -862610400, -764118000, 186120000 }
typeOffsets:intvector { -5644, 0, -7200, 0, -7200, 3600, -3600, 0 }
typeMap:bin { "01020103" }
- } //Z#338
- /* Atlantic/Faeroe */ :int { 340 } //Z#339
+ } //Z#339
+ /* Atlantic/Faeroe */ :int { 341 } //Z#340
/* Atlantic/Faroe */ :table {
trans:intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -1624, 0, 0, 0, 0, 3600 }
@@ -1737,9 +1734,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 339, 340 }
- } //Z#340
- /* Atlantic/Jan_Mayen */ :int { 472 } //Z#341
+ links:intvector { 340, 341 }
+ } //Z#341
+ /* Atlantic/Jan_Mayen */ :int { 473 } //Z#342
/* Atlantic/Madeira */ :table {
trans:intvector { -1830379944, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 }
@@ -1747,25 +1744,25 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#342
+ } //Z#343
/* Atlantic/Reykjavik */ :table {
trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 }
typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 343, 512 }
- } //Z#343
+ links:intvector { 344, 513 }
+ } //Z#344
/* Atlantic/South_Georgia */ :table {
transPre32:intvector { -1, 1770454464 }
typeOffsets:intvector { -8768, 0, -7200, 0 }
typeMap:bin { "01" }
- } //Z#344
- /* Atlantic/St_Helena */ :int { 5 } //Z#345
+ } //Z#345
+ /* Atlantic/St_Helena */ :int { 5 } //Z#346
/* Atlantic/Stanley */ :table {
trans:intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400, 1019365200, 1030860000, 1050814800, 1062914400, 1082264400, 1094364000, 1113714000, 1125813600, 1145163600, 1157263200, 1176613200, 1188712800, 1208667600, 1220767200, 1240117200, 1252216800, 1271566800, 1283666400 }
typeOffsets:intvector { -13884, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010304030403020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- } //Z#346
- /* Australia/ACT */ :int { 365 } //Z#347
+ } //Z#347
+ /* Australia/ACT */ :int { 366 } //Z#348
/* Australia/Adelaide */ :table {
transPre32:intvector { -1, 1930857236, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1774,15 +1771,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 348, 364 }
- } //Z#348
+ links:intvector { 349, 365 }
+ } //Z#349
/* Australia/Brisbane */ :table {
transPre32:intvector { -1, 1928175368 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 }
typeOffsets:intvector { 36728, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 349, 363 }
- } //Z#349
+ links:intvector { 350, 364 }
+ } //Z#350
/* Australia/Broken_Hill */ :table {
transPre32:intvector { -1, 1930856548, -1, 1980016096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1791,9 +1788,9 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 350, 369 }
- } //Z#350
- /* Australia/Canberra */ :int { 365 } //Z#351
+ links:intvector { 351, 370 }
+ } //Z#351
+ /* Australia/Canberra */ :int { 366 } //Z#352
/* Australia/Currie */ :table {
transPre32:intvector { -1, 1949172768 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1802,20 +1799,20 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- } //Z#352
+ } //Z#353
/* Australia/Darwin */ :table {
transPre32:intvector { -1, 1930859096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 }
typeOffsets:intvector { 31400, 0, 32400, 0, 34200, 0, 34200, 3600 }
typeMap:bin { "01020302030203020302" }
- links:intvector { 0, 353, 361 }
- } //Z#353
+ links:intvector { 0, 354, 362 }
+ } //Z#354
/* Australia/Eucla */ :table {
transPre32:intvector { -1, 1957038768 }
trans:intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 }
typeOffsets:intvector { 30928, 0, 31500, 0, 31500, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- } //Z#354
+ } //Z#355
/* Australia/Hobart */ :table {
transPre32:intvector { -1, 1949171940 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1824,15 +1821,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 355, 366 }
- } //Z#355
- /* Australia/LHI */ :int { 358 } //Z#356
+ links:intvector { 356, 367 }
+ } //Z#356
+ /* Australia/LHI */ :int { 359 } //Z#357
/* Australia/Lindeman */ :table {
transPre32:intvector { -1, 1928176340 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200 }
typeOffsets:intvector { 35756, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#357
+ } //Z#358
/* Australia/Lord_Howe */ :table {
transPre32:intvector { -1, 1930852316 }
trans:intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 }
@@ -1841,8 +1838,8 @@ zoneinfo64:table(nofallback) {
finalRule { "LH" }
finalRaw:int { 37800 }
finalYear:int { 2009 }
- links:intvector { 356, 358 }
- } //Z#358
+ links:intvector { 357, 359 }
+ } //Z#359
/* Australia/Melbourne */ :table {
transPre32:intvector { -1, 1930855704 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1851,19 +1848,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AV" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 359, 367 }
- } //Z#359
- /* Australia/NSW */ :int { 365 } //Z#360
- /* Australia/North */ :int { 353 } //Z#361
+ links:intvector { 360, 368 }
+ } //Z#360
+ /* Australia/NSW */ :int { 366 } //Z#361
+ /* Australia/North */ :int { 354 } //Z#362
/* Australia/Perth */ :table {
transPre32:intvector { -1, 1957041892 }
trans:intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 }
typeOffsets:intvector { 27804, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- links:intvector { 362, 368 }
- } //Z#362
- /* Australia/Queensland */ :int { 349 } //Z#363
- /* Australia/South */ :int { 348 } //Z#364
+ links:intvector { 363, 369 }
+ } //Z#363
+ /* Australia/Queensland */ :int { 350 } //Z#364
+ /* Australia/South */ :int { 349 } //Z#365
/* Australia/Sydney */ :table {
transPre32:intvector { -1, 1930854204 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1872,19 +1869,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AN" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 1, 347, 351, 360, 365 }
- } //Z#365
- /* Australia/Tasmania */ :int { 355 } //Z#366
- /* Australia/Victoria */ :int { 359 } //Z#367
- /* Australia/West */ :int { 362 } //Z#368
- /* Australia/Yancowinna */ :int { 350 } //Z#369
- /* BET */ :int { 201 } //Z#370
- /* BST */ :int { 262 } //Z#371
- /* Brazil/Acre */ :int { 195 } //Z#372
- /* Brazil/DeNoronha */ :int { 176 } //Z#373
- /* Brazil/East */ :int { 201 } //Z#374
- /* Brazil/West */ :int { 156 } //Z#375
- /* CAT */ :int { 43 } //Z#376
+ links:intvector { 1, 348, 352, 361, 366 }
+ } //Z#366
+ /* Australia/Tasmania */ :int { 356 } //Z#367
+ /* Australia/Victoria */ :int { 360 } //Z#368
+ /* Australia/West */ :int { 363 } //Z#369
+ /* Australia/Yancowinna */ :int { 351 } //Z#370
+ /* BET */ :int { 202 } //Z#371
+ /* BST */ :int { 263 } //Z#372
+ /* Brazil/Acre */ :int { 196 } //Z#373
+ /* Brazil/DeNoronha */ :int { 176 } //Z#374
+ /* Brazil/East */ :int { 202 } //Z#375
+ /* Brazil/West */ :int { 156 } //Z#376
+ /* CAT */ :int { 43 } //Z#377
/* CET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -1892,9 +1889,9 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#377
- /* CNT */ :int { 206 } //Z#378
- /* CST */ :int { 98 } //Z#379
+ } //Z#378
+ /* CNT */ :int { 207 } //Z#379
+ /* CST */ :int { 98 } //Z#380
/* CST6CDT */ :table {
trans:intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { -21600, 0, -21600, 3600 }
@@ -1902,22 +1899,22 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#380
- /* CTT */ :int { 312 } //Z#381
- /* Canada/Atlantic */ :int { 128 } //Z#382
- /* Canada/Central */ :int { 221 } //Z#383
- /* Canada/East-Saskatchewan */ :int { 193 } //Z#384
- /* Canada/Eastern */ :int { 216 } //Z#385
- /* Canada/Mountain */ :int { 112 } //Z#386
- /* Canada/Newfoundland */ :int { 206 } //Z#387
- /* Canada/Pacific */ :int { 218 } //Z#388
- /* Canada/Saskatchewan */ :int { 193 } //Z#389
- /* Canada/Yukon */ :int { 220 } //Z#390
- /* Chile/Continental */ :int { 199 } //Z#391
- /* Chile/EasterIsland */ :int { 554 } //Z#392
- /* Cuba */ :int { 129 } //Z#393
- /* EAT */ :int { 48 } //Z#394
- /* ECT */ :int { 473 } //Z#395
+ } //Z#381
+ /* CTT */ :int { 313 } //Z#382
+ /* Canada/Atlantic */ :int { 128 } //Z#383
+ /* Canada/Central */ :int { 222 } //Z#384
+ /* Canada/East-Saskatchewan */ :int { 194 } //Z#385
+ /* Canada/Eastern */ :int { 217 } //Z#386
+ /* Canada/Mountain */ :int { 112 } //Z#387
+ /* Canada/Newfoundland */ :int { 207 } //Z#388
+ /* Canada/Pacific */ :int { 219 } //Z#389
+ /* Canada/Saskatchewan */ :int { 194 } //Z#390
+ /* Canada/Yukon */ :int { 221 } //Z#391
+ /* Chile/Continental */ :int { 200 } //Z#392
+ /* Chile/EasterIsland */ :int { 555 } //Z#393
+ /* Cuba */ :int { 129 } //Z#394
+ /* EAT */ :int { 48 } //Z#395
+ /* ECT */ :int { 474 } //Z#396
/* EET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7200, 0, 7200, 3600 }
@@ -1925,10 +1922,10 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#396
+ } //Z#397
/* EST */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#397
+ } //Z#398
/* EST5EDT */ :table {
trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
typeOffsets:intvector { -18000, 0, -18000, 3600 }
@@ -1936,108 +1933,108 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- } //Z#398
- /* Egypt */ :int { 18 } //Z#399
- /* Eire */ :int { 451 } //Z#400
+ } //Z#399
+ /* Egypt */ :int { 18 } //Z#400
+ /* Eire */ :int { 452 } //Z#401
/* Etc/GMT */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 401, 402, 415, 430, 431, 503, 504, 505, 506, 507 }
- } //Z#401
- /* Etc/GMT+0 */ :int { 401 } //Z#402
+ links:intvector { 402, 403, 416, 431, 432, 504, 505, 506, 507, 508 }
+ } //Z#402
+ /* Etc/GMT+0 */ :int { 402 } //Z#403
/* Etc/GMT+1 */ :table {
typeOffsets:intvector { -3600, 0 }
- } //Z#403
+ } //Z#404
/* Etc/GMT+10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#404
+ } //Z#405
/* Etc/GMT+11 */ :table {
typeOffsets:intvector { -39600, 0 }
- } //Z#405
+ } //Z#406
/* Etc/GMT+12 */ :table {
typeOffsets:intvector { -43200, 0 }
- } //Z#406
+ } //Z#407
/* Etc/GMT+2 */ :table {
typeOffsets:intvector { -7200, 0 }
- } //Z#407
+ } //Z#408
/* Etc/GMT+3 */ :table {
typeOffsets:intvector { -10800, 0 }
- } //Z#408
+ } //Z#409
/* Etc/GMT+4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#409
+ } //Z#410
/* Etc/GMT+5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#410
+ } //Z#411
/* Etc/GMT+6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#411
+ } //Z#412
/* Etc/GMT+7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#412
+ } //Z#413
/* Etc/GMT+8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#413
+ } //Z#414
/* Etc/GMT+9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#414
- /* Etc/GMT-0 */ :int { 401 } //Z#415
+ } //Z#415
+ /* Etc/GMT-0 */ :int { 402 } //Z#416
/* Etc/GMT-1 */ :table {
typeOffsets:intvector { 3600, 0 }
- } //Z#416
+ } //Z#417
/* Etc/GMT-10 */ :table {
typeOffsets:intvector { 36000, 0 }
- } //Z#417
+ } //Z#418
/* Etc/GMT-11 */ :table {
typeOffsets:intvector { 39600, 0 }
- } //Z#418
+ } //Z#419
/* Etc/GMT-12 */ :table {
typeOffsets:intvector { 43200, 0 }
- } //Z#419
+ } //Z#420
/* Etc/GMT-13 */ :table {
typeOffsets:intvector { 46800, 0 }
- } //Z#420
+ } //Z#421
/* Etc/GMT-14 */ :table {
typeOffsets:intvector { 50400, 0 }
- } //Z#421
+ } //Z#422
/* Etc/GMT-2 */ :table {
typeOffsets:intvector { 7200, 0 }
- } //Z#422
+ } //Z#423
/* Etc/GMT-3 */ :table {
typeOffsets:intvector { 10800, 0 }
- } //Z#423
+ } //Z#424
/* Etc/GMT-4 */ :table {
typeOffsets:intvector { 14400, 0 }
- } //Z#424
+ } //Z#425
/* Etc/GMT-5 */ :table {
typeOffsets:intvector { 18000, 0 }
- } //Z#425
+ } //Z#426
/* Etc/GMT-6 */ :table {
typeOffsets:intvector { 21600, 0 }
- } //Z#426
+ } //Z#427
/* Etc/GMT-7 */ :table {
typeOffsets:intvector { 25200, 0 }
- } //Z#427
+ } //Z#428
/* Etc/GMT-8 */ :table {
typeOffsets:intvector { 28800, 0 }
- } //Z#428
+ } //Z#429
/* Etc/GMT-9 */ :table {
typeOffsets:intvector { 32400, 0 }
- } //Z#429
- /* Etc/GMT0 */ :int { 401 } //Z#430
- /* Etc/Greenwich */ :int { 401 } //Z#431
+ } //Z#430
+ /* Etc/GMT0 */ :int { 402 } //Z#431
+ /* Etc/Greenwich */ :int { 402 } //Z#432
/* Etc/UCT */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 432, 612 }
- } //Z#432
+ links:intvector { 433, 613 }
+ } //Z#433
/* Etc/UTC */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 433, 434, 436, 626, 627, 631 }
- } //Z#433
- /* Etc/Universal */ :int { 433 } //Z#434
+ links:intvector { 434, 435, 437, 627, 628, 632 }
+ } //Z#434
+ /* Etc/Universal */ :int { 434 } //Z#435
/* Etc/Unknown */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#435
- /* Etc/Zulu */ :int { 433 } //Z#436
+ } //Z#436
+ /* Etc/Zulu */ :int { 434 } //Z#437
/* Europe/Amsterdam */ :table {
trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 }
@@ -2045,7 +2042,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#437
+ } //Z#438
/* Europe/Andorra */ :table {
transPre32:intvector { -1, 2117514132 }
trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2054,12 +2051,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#438
+ } //Z#439
/* Europe/Astrakhan */ :table {
trans:intvector { -1441249932, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11532, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403040302010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#439
+ } //Z#440
/* Europe/Athens */ :table {
trans:intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5692, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2067,8 +2064,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#440
- /* Europe/Belfast */ :int { 463 } //Z#441
+ } //Z#441
+ /* Europe/Belfast */ :int { 464 } //Z#442
/* Europe/Belgrade */ :table {
transPre32:intvector { -1, 1581051976 }
trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2077,8 +2074,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 442, 462, 474, 480, 483, 497 }
- } //Z#442
+ links:intvector { 443, 463, 475, 481, 484, 498 }
+ } //Z#443
/* Europe/Berlin */ :table {
transPre32:intvector { -1, 1872912888 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2087,8 +2084,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#443
- /* Europe/Bratislava */ :int { 475 } //Z#444
+ } //Z#444
+ /* Europe/Bratislava */ :int { 476 } //Z#445
/* Europe/Brussels */ :table {
transPre32:intvector { -1, 1844014246 }
trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2097,7 +2094,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#445
+ } //Z#446
/* Europe/Bucharest */ :table {
trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
typeOffsets:intvector { 6264, 0, 7200, 0, 7200, 3600 }
@@ -2105,7 +2102,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#446
+ } //Z#447
/* Europe/Budapest */ :table {
transPre32:intvector { -1, 1794028316 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1633212000, -1618700400, -1600466400, -1581202800, -906771600, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762660000, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2114,8 +2111,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#447
- /* Europe/Busingen */ :int { 499 } //Z#448
+ } //Z#448
+ /* Europe/Busingen */ :int { 500 } //Z#449
/* Europe/Chisinau */ :table {
transPre32:intvector { -1, 1454819576 }
trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 }
@@ -2124,8 +2121,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Moldova" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- links:intvector { 449, 488 }
- } //Z#449
+ links:intvector { 450, 489 }
+ } //Z#450
/* Europe/Copenhagen */ :table {
transPre32:intvector { -1, 1896673076 }
trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2134,7 +2131,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#450
+ } //Z#451
/* Europe/Dublin */ :table {
transPre32:intvector { -1, 1473317596 }
trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2143,8 +2140,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 400, 451 }
- } //Z#451
+ links:intvector { 401, 452 }
+ } //Z#452
/* Europe/Gibraltar */ :table {
transPre32:intvector { -1, 1473317380 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2153,8 +2150,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#452
- /* Europe/Guernsey */ :int { 463 } //Z#453
+ } //Z#453
+ /* Europe/Guernsey */ :int { 464 } //Z#454
/* Europe/Helsinki */ :table {
trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 }
@@ -2162,23 +2159,23 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- links:intvector { 454, 467 }
- } //Z#454
- /* Europe/Isle_of_Man */ :int { 463 } //Z#455
+ links:intvector { 455, 468 }
+ } //Z#455
+ /* Europe/Isle_of_Man */ :int { 464 } //Z#456
/* Europe/Istanbul */ :table {
transPre32:intvector { -1, 1454819544 }
trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 }
typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030504050405040504050403020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
- links:intvector { 274, 456, 611 }
- } //Z#456
- /* Europe/Jersey */ :int { 463 } //Z#457
+ links:intvector { 275, 457, 612 }
+ } //Z#457
+ /* Europe/Jersey */ :int { 464 } //Z#458
/* Europe/Kaliningrad */ :table {
transPre32:intvector { -1, 1872911176 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 }
typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "01020102010201020102010201030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#458
+ } //Z#459
/* Europe/Kiev */ :table {
trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2186,12 +2183,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#459
+ } //Z#460
/* Europe/Kirov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#460
+ } //Z#461
/* Europe/Lisbon */ :table {
trans:intvector { -1830381795, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2199,9 +2196,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 461, 593 }
- } //Z#461
- /* Europe/Ljubljana */ :int { 442 } //Z#462
+ links:intvector { 462, 594 }
+ } //Z#462
+ /* Europe/Ljubljana */ :int { 443 } //Z#463
/* Europe/London */ :table {
transPre32:intvector { -1, 442304971 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2210,8 +2207,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 441, 453, 455, 457, 463, 501, 502 }
- } //Z#463
+ links:intvector { 442, 454, 456, 458, 464, 502, 503 }
+ } //Z#464
/* Europe/Luxembourg */ :table {
trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
@@ -2219,16 +2216,16 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#464
+ } //Z#465
/* Europe/Madrid */ :table {
- transPre32:intvector { -1, 2117515380 }
- trans:intvector { -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ transPre32:intvector { -1, 2117514496 }
+ trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -884, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
- typeMap:bin { "01020102010201020102010201020102010201020102010203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
+ typeMap:bin { "0102010201020102010201020102010201020302010405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#465
+ } //Z#466
/* Europe/Malta */ :table {
transPre32:intvector { -1, 1891488612 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2237,14 +2234,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#466
- /* Europe/Mariehamn */ :int { 454 } //Z#467
+ } //Z#467
+ /* Europe/Mariehamn */ :int { 455 } //Z#468
/* Europe/Minsk */ :table {
transPre32:intvector { -1, 1454819880 }
trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 }
typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" }
- } //Z#468
+ } //Z#469
/* Europe/Monaco */ :table {
transPre32:intvector { -1, 1808287124 }
trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2253,14 +2250,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#469
+ } //Z#470
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 }
typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" }
- links:intvector { 470, 629 }
- } //Z#470
- /* Europe/Nicosia */ :int { 296 } //Z#471
+ links:intvector { 471, 630 }
+ } //Z#471
+ /* Europe/Nicosia */ :int { 297 } //Z#472
/* Europe/Oslo */ :table {
transPre32:intvector { -1, 1928209516 }
trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2269,8 +2266,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 236, 341, 472 }
- } //Z#472
+ links:intvector { 237, 342, 473 }
+ } //Z#473
/* Europe/Paris */ :table {
trans:intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2278,9 +2275,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 395, 473 }
- } //Z#473
- /* Europe/Podgorica */ :int { 442 } //Z#474
+ links:intvector { 396, 474 }
+ } //Z#474
+ /* Europe/Podgorica */ :int { 443 } //Z#475
/* Europe/Prague */ :table {
transPre32:intvector { -1, 1825565432 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2289,8 +2286,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 444, 475 }
- } //Z#475
+ links:intvector { 445, 476 }
+ } //Z#476
/* Europe/Riga */ :table {
trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 }
typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2298,7 +2295,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2002 }
- } //Z#476
+ } //Z#477
/* Europe/Rome */ :table {
transPre32:intvector { -1, 1891402096 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2307,27 +2304,27 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 477, 479, 492 }
- } //Z#477
+ links:intvector { 478, 480, 493 }
+ } //Z#478
/* Europe/Samara */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 }
typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" }
- } //Z#478
- /* Europe/San_Marino */ :int { 477 } //Z#479
- /* Europe/Sarajevo */ :int { 442 } //Z#480
+ } //Z#479
+ /* Europe/San_Marino */ :int { 478 } //Z#480
+ /* Europe/Sarajevo */ :int { 443 } //Z#481
/* Europe/Saratov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 }
typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#481
+ } //Z#482
/* Europe/Simferopol */ :table {
transPre32:intvector { -1, 1454818312 }
trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 }
typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" }
- } //Z#482
- /* Europe/Skopje */ :int { 442 } //Z#483
+ } //Z#483
+ /* Europe/Skopje */ :int { 443 } //Z#484
/* Europe/Sofia */ :table {
transPre32:intvector { -1, 1454820900, -1, 1925440280 }
trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
@@ -2336,7 +2333,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#484
+ } //Z#485
/* Europe/Stockholm */ :table {
transPre32:intvector { -1, 1423286164, -1, 2085974882 }
trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2345,7 +2342,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#485
+ } //Z#486
/* Europe/Tallinn */ :table {
trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 }
typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2353,7 +2350,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2003 }
- } //Z#486
+ } //Z#487
/* Europe/Tirane */ :table {
trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 }
@@ -2361,13 +2358,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#487
- /* Europe/Tiraspol */ :int { 449 } //Z#488
+ } //Z#488
+ /* Europe/Tiraspol */ :int { 450 } //Z#489
/* Europe/Ulyanovsk */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" }
- } //Z#489
+ } //Z#490
/* Europe/Uzhgorod */ :table {
transPre32:intvector { -1, 1794027544 }
trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2376,9 +2373,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#490
- /* Europe/Vaduz */ :int { 499 } //Z#491
- /* Europe/Vatican */ :int { 477 } //Z#492
+ } //Z#491
+ /* Europe/Vaduz */ :int { 500 } //Z#492
+ /* Europe/Vatican */ :int { 478 } //Z#493
/* Europe/Vienna */ :table {
transPre32:intvector { -1, 1872912175 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2387,7 +2384,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#493
+ } //Z#494
/* Europe/Vilnius */ :table {
transPre32:intvector { -1, 1454820420 }
trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 }
@@ -2396,12 +2393,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2004 }
- } //Z#494
+ } //Z#495
/* Europe/Volgograd */ :table {
trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#495
+ } //Z#496
/* Europe/Warsaw */ :table {
trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2409,9 +2406,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 496, 592 }
- } //Z#496
- /* Europe/Zagreb */ :int { 442 } //Z#497
+ links:intvector { 497, 593 }
+ } //Z#497
+ /* Europe/Zagreb */ :int { 443 } //Z#498
/* Europe/Zaporozhye */ :table {
transPre32:intvector { -1, 1454818056 }
trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2420,7 +2417,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#498
+ } //Z#499
/* Europe/Zurich */ :table {
transPre32:intvector { -1, 619768448, -1, 1909720710 }
trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2429,75 +2426,75 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 448, 491, 499 }
- } //Z#499
+ links:intvector { 449, 492, 500 }
+ } //Z#500
/* Factory */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#500
- /* GB */ :int { 463 } //Z#501
- /* GB-Eire */ :int { 463 } //Z#502
- /* GMT */ :int { 401 } //Z#503
- /* GMT+0 */ :int { 401 } //Z#504
- /* GMT-0 */ :int { 401 } //Z#505
- /* GMT0 */ :int { 401 } //Z#506
- /* Greenwich */ :int { 401 } //Z#507
+ } //Z#501
+ /* GB */ :int { 464 } //Z#502
+ /* GB-Eire */ :int { 464 } //Z#503
+ /* GMT */ :int { 402 } //Z#504
+ /* GMT+0 */ :int { 402 } //Z#505
+ /* GMT-0 */ :int { 402 } //Z#506
+ /* GMT0 */ :int { 402 } //Z#507
+ /* Greenwich */ :int { 402 } //Z#508
/* HST */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#508
- /* Hongkong */ :int { 271 } //Z#509
- /* IET */ :int { 131 } //Z#510
- /* IST */ :int { 285 } //Z#511
- /* Iceland */ :int { 343 } //Z#512
- /* Indian/Antananarivo */ :int { 48 } //Z#513
+ } //Z#509
+ /* Hongkong */ :int { 272 } //Z#510
+ /* IET */ :int { 131 } //Z#511
+ /* IST */ :int { 286 } //Z#512
+ /* Iceland */ :int { 344 } //Z#513
+ /* Indian/Antananarivo */ :int { 48 } //Z#514
/* Indian/Chagos */ :table {
trans:intvector { -1988167780, 820436400 }
typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0102" }
- } //Z#514
+ } //Z#515
/* Indian/Christmas */ :table {
transPre32:intvector { -1, 1930865124 }
typeOffsets:intvector { 25372, 0, 25200, 0 }
typeMap:bin { "01" }
- } //Z#515
+ } //Z#516
/* Indian/Cocos */ :table {
transPre32:intvector { -1, 2085955236 }
typeOffsets:intvector { 23260, 0, 23400, 0 }
typeMap:bin { "01" }
- } //Z#516
- /* Indian/Comoro */ :int { 48 } //Z#517
+ } //Z#517
+ /* Indian/Comoro */ :int { 48 } //Z#518
/* Indian/Kerguelen */ :table {
trans:intvector { -631152000 }
typeOffsets:intvector { 0, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#518
+ } //Z#519
/* Indian/Mahe */ :table {
trans:intvector { -2006653308 }
typeOffsets:intvector { 13308, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#519
+ } //Z#520
/* Indian/Maldives */ :table {
trans:intvector { -315636840 }
typeOffsets:intvector { 17640, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#520
+ } //Z#521
/* Indian/Mauritius */ :table {
trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 }
typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 }
typeMap:bin { "0102010201" }
- } //Z#521
- /* Indian/Mayotte */ :int { 48 } //Z#522
+ } //Z#522
+ /* Indian/Mayotte */ :int { 48 } //Z#523
/* Indian/Reunion */ :table {
trans:intvector { -1848886912 }
typeOffsets:intvector { 13312, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#523
- /* Iran */ :int { 318 } //Z#524
- /* Israel */ :int { 277 } //Z#525
- /* JST */ :int { 322 } //Z#526
- /* Jamaica */ :int { 142 } //Z#527
- /* Japan */ :int { 322 } //Z#528
- /* Kwajalein */ :int { 568 } //Z#529
- /* Libya */ :int { 56 } //Z#530
+ } //Z#524
+ /* Iran */ :int { 319 } //Z#525
+ /* Israel */ :int { 278 } //Z#526
+ /* JST */ :int { 323 } //Z#527
+ /* Jamaica */ :int { 142 } //Z#528
+ /* Japan */ :int { 323 } //Z#529
+ /* Kwajalein */ :int { 569 } //Z#530
+ /* Libya */ :int { 56 } //Z#531
/* MET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -2505,11 +2502,11 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#531
- /* MIT */ :int { 549 } //Z#532
+ } //Z#532
+ /* MIT */ :int { 550 } //Z#533
/* MST */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#533
+ } //Z#534
/* MST7MDT */ :table {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { -25200, 0, -25200, 3600 }
@@ -2517,20 +2514,20 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#534
- /* Mexico/BajaNorte */ :int { 215 } //Z#535
- /* Mexico/BajaSur */ :int { 160 } //Z#536
- /* Mexico/General */ :int { 165 } //Z#537
- /* NET */ :int { 334 } //Z#538
- /* NST */ :int { 550 } //Z#539
- /* NZ */ :int { 550 } //Z#540
- /* NZ-CHAT */ :int { 552 } //Z#541
- /* Navajo */ :int { 109 } //Z#542
- /* PLT */ :int { 280 } //Z#543
- /* PNT */ :int { 184 } //Z#544
- /* PRC */ :int { 312 } //Z#545
- /* PRT */ :int { 189 } //Z#546
- /* PST */ :int { 151 } //Z#547
+ } //Z#535
+ /* Mexico/BajaNorte */ :int { 216 } //Z#536
+ /* Mexico/BajaSur */ :int { 160 } //Z#537
+ /* Mexico/General */ :int { 165 } //Z#538
+ /* NET */ :int { 335 } //Z#539
+ /* NST */ :int { 551 } //Z#540
+ /* NZ */ :int { 551 } //Z#541
+ /* NZ-CHAT */ :int { 553 } //Z#542
+ /* Navajo */ :int { 109 } //Z#543
+ /* PLT */ :int { 281 } //Z#544
+ /* PNT */ :int { 184 } //Z#545
+ /* PRC */ :int { 313 } //Z#546
+ /* PRT */ :int { 189 } //Z#547
+ /* PST */ :int { 151 } //Z#548
/* PST8PDT */ :table {
trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
typeOffsets:intvector { -28800, 0, -28800, 3600 }
@@ -2538,7 +2535,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- } //Z#548
+ } //Z#549
/* Pacific/Apia */ :table {
transPre32:intvector { -1, 1439229312 }
trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 }
@@ -2547,8 +2544,8 @@ zoneinfo64:table(nofallback) {
finalRule { "WS" }
finalRaw:int { 46800 }
finalYear:int { 2013 }
- links:intvector { 532, 549 }
- } //Z#549
+ links:intvector { 533, 550 }
+ } //Z#550
/* Pacific/Auckland */ :table {
transPre32:intvector { -1, 1102531752 }
trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2557,14 +2554,14 @@ zoneinfo64:table(nofallback) {
finalRule { "NZ" }
finalRaw:int { 43200 }
finalYear:int { 2009 }
- links:intvector { 229, 232, 539, 540, 550 }
- } //Z#550
+ links:intvector { 230, 233, 540, 541, 551 }
+ } //Z#551
/* Pacific/Bougainville */ :table {
transPre32:intvector { -1, 1454789160, -1, 1928176784 }
trans:intvector { -868010400, -768906000, 1419696000 }
typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 }
typeMap:bin { "0203010304" }
- } //Z#551
+ } //Z#552
/* Pacific/Chatham */ :table {
transPre32:intvector { -1, 1102529668 }
trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2573,14 +2570,14 @@ zoneinfo64:table(nofallback) {
finalRule { "Chatham" }
finalRaw:int { 45900 }
finalYear:int { 2009 }
- links:intvector { 541, 552 }
- } //Z#552
+ links:intvector { 542, 553 }
+ } //Z#553
/* Pacific/Chuuk */ :table {
transPre32:intvector { -1, 2117478068 }
typeOffsets:intvector { 36428, 0, 36000, 0 }
typeMap:bin { "01" }
- links:intvector { 553, 588, 591 }
- } //Z#553
+ links:intvector { 554, 589, 592 }
+ } //Z#554
/* Pacific/Easter */ :table {
trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
@@ -2588,25 +2585,25 @@ zoneinfo64:table(nofallback) {
finalRule { "Chile" }
finalRaw:int { -21600 }
finalYear:int { 2017 }
- links:intvector { 392, 554 }
- } //Z#554
+ links:intvector { 393, 555 }
+ } //Z#555
/* Pacific/Efate */ :table {
trans:intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 }
typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#555
+ } //Z#556
/* Pacific/Enderbury */ :table {
transPre32:intvector { -1, 2117555556 }
trans:intvector { 307627200, 788958000 }
typeOffsets:intvector { -41060, 0, -43200, 0, -39600, 0, 46800, 0 }
typeMap:bin { "010203" }
- } //Z#556
+ } //Z#557
/* Pacific/Fakaofo */ :table {
transPre32:intvector { -1, 2117555592 }
trans:intvector { 1325242800 }
typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 }
typeMap:bin { "0102" }
- } //Z#557
+ } //Z#558
/* Pacific/Fiji */ :table {
trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000 }
typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 }
@@ -2614,143 +2611,143 @@ zoneinfo64:table(nofallback) {
finalRule { "Fiji" }
finalRaw:int { 43200 }
finalYear:int { 2016 }
- } //Z#558
+ } //Z#559
/* Pacific/Funafuti */ :table {
transPre32:intvector { -1, 2117471484 }
typeOffsets:intvector { 43012, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#559
- /* Pacific/Galapagos */ :table {
- trans:intvector { -1230746496, 504939600 }
- typeOffsets:intvector { -21504, 0, -21600, 0, -18000, 0 }
- typeMap:bin { "0201" }
} //Z#560
+ /* Pacific/Galapagos */ :table {
+ trans:intvector { -1230746496, 504939600, 722930400, 728888400 }
+ typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 }
+ typeMap:bin { "03010201" }
+ } //Z#561
/* Pacific/Gambier */ :table {
trans:intvector { -1806678012 }
typeOffsets:intvector { -32388, 0, -32400, 0 }
typeMap:bin { "01" }
- } //Z#561
+ } //Z#562
/* Pacific/Guadalcanal */ :table {
trans:intvector { -1806748788 }
typeOffsets:intvector { 38388, 0, 39600, 0 }
typeMap:bin { "01" }
- links:intvector { 562, 596 }
- } //Z#562
+ links:intvector { 563, 597 }
+ } //Z#563
/* Pacific/Guam */ :table {
transPre32:intvector { -1, 350340556, -1, 2117479756 }
typeOffsets:intvector { -51660, 0, 34740, 0, 36000, 0 }
typeMap:bin { "0102" }
- links:intvector { 563, 583 }
- } //Z#563
+ links:intvector { 564, 584 }
+ } //Z#564
/* Pacific/Honolulu */ :table {
transPre32:intvector { -1, 1960865982 }
trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 }
typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 }
typeMap:bin { "010201020103" }
- links:intvector { 564, 565, 619 }
- } //Z#564
- /* Pacific/Johnston */ :int { 564 } //Z#565
+ links:intvector { 565, 566, 620 }
+ } //Z#565
+ /* Pacific/Johnston */ :int { 565 } //Z#566
/* Pacific/Kiritimati */ :table {
transPre32:intvector { -1, 2117552256 }
trans:intvector { 307622400, 788954400 }
typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 }
typeMap:bin { "010203" }
- } //Z#566
+ } //Z#567
/* Pacific/Kosrae */ :table {
transPre32:intvector { -1, 2117475380 }
trans:intvector { -7988400, 915105600 }
typeOffsets:intvector { 39116, 0, 39600, 0, 43200, 0 }
typeMap:bin { "010201" }
- } //Z#567
+ } //Z#568
/* Pacific/Kwajalein */ :table {
transPre32:intvector { -1, 2117474336 }
trans:intvector { -7988400, 745848000 }
typeOffsets:intvector { 40160, 0, -43200, 0, 39600, 0, 43200, 0 }
typeMap:bin { "020103" }
- links:intvector { 529, 568 }
- } //Z#568
+ links:intvector { 530, 569 }
+ } //Z#569
/* Pacific/Majuro */ :table {
transPre32:intvector { -1, 2117473408 }
trans:intvector { -7988400 }
typeOffsets:intvector { 41088, 0, 39600, 0, 43200, 0 }
typeMap:bin { "0102" }
- } //Z#569
+ } //Z#570
/* Pacific/Marquesas */ :table {
trans:intvector { -1806676920 }
typeOffsets:intvector { -33480, 0, -34200, 0 }
typeMap:bin { "01" }
- } //Z#570
- /* Pacific/Midway */ :int { 576 } //Z#571
+ } //Z#571
+ /* Pacific/Midway */ :int { 577 } //Z#572
/* Pacific/Nauru */ :table {
trans:intvector { -1545131260, -877347000, -800960400, 294323400 }
typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 }
typeMap:bin { "02010203" }
- } //Z#572
+ } //Z#573
/* Pacific/Niue */ :table {
transPre32:intvector { -1, 2117555276 }
trans:intvector { -599575200, 276089400 }
typeOffsets:intvector { -40780, 0, -41400, 0, -40800, 0, -39600, 0 }
typeMap:bin { "020103" }
- } //Z#573
+ } //Z#574
/* Pacific/Norfolk */ :table {
transPre32:intvector { -1, 2117474184 }
trans:intvector { -599656320, 152029800, 162912600, 1443882600 }
typeOffsets:intvector { 40312, 0, 39600, 0, 40320, 0, 41400, 0, 41400, 3600 }
typeMap:bin { "0203040301" }
- } //Z#574
+ } //Z#575
/* Pacific/Noumea */ :table {
trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 }
typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#575
+ } //Z#576
/* Pacific/Pago_Pago */ :table {
transPre32:intvector { -1, 1439229064 }
trans:intvector { -1861879032 }
typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 }
typeMap:bin { "0102" }
- links:intvector { 571, 576, 584, 625 }
- } //Z#576
+ links:intvector { 572, 577, 585, 626 }
+ } //Z#577
/* Pacific/Palau */ :table {
transPre32:intvector { -1, 2117482220 }
typeOffsets:intvector { 32276, 0, 32400, 0 }
typeMap:bin { "01" }
- } //Z#577
+ } //Z#578
/* Pacific/Pitcairn */ :table {
transPre32:intvector { -1, 2117545716 }
trans:intvector { 893665800 }
typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 }
typeMap:bin { "0102" }
- } //Z#578
+ } //Z#579
/* Pacific/Pohnpei */ :table {
transPre32:intvector { -1, 2117476524 }
typeOffsets:intvector { 37972, 0, 39600, 0 }
typeMap:bin { "01" }
- links:intvector { 579, 580 }
- } //Z#579
- /* Pacific/Ponape */ :int { 579 } //Z#580
+ links:intvector { 580, 581 }
+ } //Z#580
+ /* Pacific/Ponape */ :int { 580 } //Z#581
/* Pacific/Port_Moresby */ :table {
transPre32:intvector { -1, 1454791176, -1, 1928176784 }
typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 }
typeMap:bin { "0102" }
- } //Z#581
+ } //Z#582
/* Pacific/Rarotonga */ :table {
transPre32:intvector { -1, 2117552840 }
trans:intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 }
typeOffsets:intvector { -38344, 0, -37800, 0, -36000, 0, -36000, 1800 }
typeMap:bin { "010302030203020302030203020302030203020302030203020302" }
- } //Z#582
- /* Pacific/Saipan */ :int { 563 } //Z#583
- /* Pacific/Samoa */ :int { 576 } //Z#584
+ } //Z#583
+ /* Pacific/Saipan */ :int { 564 } //Z#584
+ /* Pacific/Samoa */ :int { 577 } //Z#585
/* Pacific/Tahiti */ :table {
trans:intvector { -1806674504 }
typeOffsets:intvector { -35896, 0, -36000, 0 }
typeMap:bin { "01" }
- } //Z#585
+ } //Z#586
/* Pacific/Tarawa */ :table {
transPre32:intvector { -1, 2117472972 }
typeOffsets:intvector { 41524, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#586
+ } //Z#587
/* Pacific/Tongatapu */ :table {
transPre32:intvector { -1, 2117470136 }
trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800, 1509800400 }
@@ -2759,28 +2756,28 @@ zoneinfo64:table(nofallback) {
finalRule { "Tonga" }
finalRaw:int { 46800 }
finalYear:int { 2018 }
- } //Z#587
- /* Pacific/Truk */ :int { 553 } //Z#588
+ } //Z#588
+ /* Pacific/Truk */ :int { 554 } //Z#589
/* Pacific/Wake */ :table {
transPre32:intvector { -1, 2117474508 }
typeOffsets:intvector { 39988, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#589
+ } //Z#590
/* Pacific/Wallis */ :table {
transPre32:intvector { -1, 2117470376 }
typeOffsets:intvector { 44120, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#590
- /* Pacific/Yap */ :int { 553 } //Z#591
- /* Poland */ :int { 496 } //Z#592
- /* Portugal */ :int { 461 } //Z#593
- /* ROC */ :int { 315 } //Z#594
- /* ROK */ :int { 311 } //Z#595
- /* SST */ :int { 562 } //Z#596
- /* Singapore */ :int { 313 } //Z#597
+ } //Z#591
+ /* Pacific/Yap */ :int { 554 } //Z#592
+ /* Poland */ :int { 497 } //Z#593
+ /* Portugal */ :int { 462 } //Z#594
+ /* ROC */ :int { 316 } //Z#595
+ /* ROK */ :int { 312 } //Z#596
+ /* SST */ :int { 563 } //Z#597
+ /* Singapore */ :int { 314 } //Z#598
/* SystemV/AST4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#598
+ } //Z#599
/* SystemV/AST4ADT */ :table {
transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 }
trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 }
@@ -2789,10 +2786,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -14400 }
finalYear:int { 1977 }
- } //Z#599
+ } //Z#600
/* SystemV/CST6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#600
+ } //Z#601
/* SystemV/CST6CDT */ :table {
transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 }
trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 }
@@ -2801,10 +2798,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -21600 }
finalYear:int { 1977 }
- } //Z#601
+ } //Z#602
/* SystemV/EST5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#602
+ } //Z#603
/* SystemV/EST5EDT */ :table {
transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 }
trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 }
@@ -2813,13 +2810,13 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -18000 }
finalYear:int { 1977 }
- } //Z#603
+ } //Z#604
/* SystemV/HST10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#604
+ } //Z#605
/* SystemV/MST7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#605
+ } //Z#606
/* SystemV/MST7MDT */ :table {
transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 }
trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 }
@@ -2828,10 +2825,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -25200 }
finalYear:int { 1977 }
- } //Z#606
+ } //Z#607
/* SystemV/PST8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#607
+ } //Z#608
/* SystemV/PST8PDT */ :table {
transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 }
trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 }
@@ -2840,10 +2837,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -28800 }
finalYear:int { 1977 }
- } //Z#608
+ } //Z#609
/* SystemV/YST9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#609
+ } //Z#610
/* SystemV/YST9YDT */ :table {
transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 }
trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 }
@@ -2852,26 +2849,26 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -32400 }
finalYear:int { 1977 }
- } //Z#610
- /* Turkey */ :int { 456 } //Z#611
- /* UCT */ :int { 432 } //Z#612
- /* US/Alaska */ :int { 60 } //Z#613
- /* US/Aleutian */ :int { 59 } //Z#614
- /* US/Arizona */ :int { 184 } //Z#615
- /* US/Central */ :int { 98 } //Z#616
- /* US/East-Indiana */ :int { 131 } //Z#617
- /* US/Eastern */ :int { 173 } //Z#618
- /* US/Hawaii */ :int { 564 } //Z#619
- /* US/Indiana-Starke */ :int { 132 } //Z#620
- /* US/Michigan */ :int { 110 } //Z#621
- /* US/Mountain */ :int { 109 } //Z#622
- /* US/Pacific */ :int { 151 } //Z#623
- /* US/Pacific-New */ :int { 151 } //Z#624
- /* US/Samoa */ :int { 576 } //Z#625
- /* UTC */ :int { 433 } //Z#626
- /* Universal */ :int { 433 } //Z#627
- /* VST */ :int { 270 } //Z#628
- /* W-SU */ :int { 470 } //Z#629
+ } //Z#611
+ /* Turkey */ :int { 457 } //Z#612
+ /* UCT */ :int { 433 } //Z#613
+ /* US/Alaska */ :int { 60 } //Z#614
+ /* US/Aleutian */ :int { 59 } //Z#615
+ /* US/Arizona */ :int { 184 } //Z#616
+ /* US/Central */ :int { 98 } //Z#617
+ /* US/East-Indiana */ :int { 131 } //Z#618
+ /* US/Eastern */ :int { 173 } //Z#619
+ /* US/Hawaii */ :int { 565 } //Z#620
+ /* US/Indiana-Starke */ :int { 132 } //Z#621
+ /* US/Michigan */ :int { 110 } //Z#622
+ /* US/Mountain */ :int { 109 } //Z#623
+ /* US/Pacific */ :int { 151 } //Z#624
+ /* US/Pacific-New */ :int { 151 } //Z#625
+ /* US/Samoa */ :int { 577 } //Z#626
+ /* UTC */ :int { 434 } //Z#627
+ /* Universal */ :int { 434 } //Z#628
+ /* VST */ :int { 271 } //Z#629
+ /* W-SU */ :int { 471 } //Z#630
/* WET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 0, 0, 0, 3600 }
@@ -2879,8 +2876,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#630
- /* Zulu */ :int { 433 } //Z#631
+ } //Z#631
+ /* Zulu */ :int { 434 } //Z#632
}
Names {
"ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6
@@ -2948,126 +2945,126 @@ zoneinfo64:table(nofallback) {
,"America/Panama","America/Pangnirtung","America/Paramaribo" // 183
,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 186
,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 189
- ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 192
- ,"America/Regina","America/Resolute","America/Rio_Branco" // 195
- ,"America/Rosario","America/Santa_Isabel","America/Santarem" // 198
- ,"America/Santiago","America/Santo_Domingo","America/Sao_Paulo" // 201
- ,"America/Scoresbysund","America/Shiprock","America/Sitka" // 204
- ,"America/St_Barthelemy","America/St_Johns","America/St_Kitts" // 207
- ,"America/St_Lucia","America/St_Thomas","America/St_Vincent" // 210
- ,"America/Swift_Current","America/Tegucigalpa","America/Thule" // 213
- ,"America/Thunder_Bay","America/Tijuana","America/Toronto" // 216
- ,"America/Tortola","America/Vancouver","America/Virgin" // 219
- ,"America/Whitehorse","America/Winnipeg","America/Yakutat" // 222
- ,"America/Yellowknife","Antarctica/Casey","Antarctica/Davis" // 225
- ,"Antarctica/DumontDUrville","Antarctica/Macquarie" // 227
- ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 230
- ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 233
- ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 236
- ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 240
- ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 244
- ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 248
- ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 252
- ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 256
- ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 260
- ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 264
- ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 268
- ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 271
- ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 275
- ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 279
- ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 283
- ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 286
- ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 290
- ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 294
- ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 298
- ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 302
- ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 306
- ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 310
- ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 314
- ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 318
- ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 322
- ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 325
- ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 329
- ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 333
- ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 336
- ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 339
- ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 342
- ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 345
- ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 348
- ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 351
- ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 354
- ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 357
- ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 360
- ,"Australia/North","Australia/Perth","Australia/Queensland" // 363
- ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 366
- ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 369
- ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 374
- ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 381
- ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 384
- ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 387
- ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 390
- ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 394
- ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 401
- ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 405
- ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 410
- ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 415
- ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 419
- ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 423
- ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 428
- ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 433
- ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 437
- ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 440
- ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 443
- ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 446
- ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 449
- ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 452
- ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 455
- ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 458
- ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 462
- ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 465
- ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 469
- ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 473
- ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 477
- ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 480
- ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 483
- ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 486
- ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 489
- ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 492
- ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 495
- ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 498
- ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 504
- ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 510
- ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 514
- ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 517
- ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 520
- ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 523
- ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 529
- ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 535
- ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 540
- ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 548
- ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 551
- ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 554
- ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 557
- ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 560
- ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 563
- ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 566
- ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 569
- ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 572
- ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 575
- ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 578
- ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 581
- ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 584
- ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 587
- ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 591
- ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 597
- ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 601
- ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 605
- ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 608
- ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 613
- ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 617
- ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 621
- ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 625
- ,"UTC","Universal","VST","W-SU","WET","Zulu" // 631
+ ,"America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet" // 192
+ ,"America/Recife","America/Regina","America/Resolute" // 195
+ ,"America/Rio_Branco","America/Rosario","America/Santa_Isabel" // 198
+ ,"America/Santarem","America/Santiago","America/Santo_Domingo" // 201
+ ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 204
+ ,"America/Sitka","America/St_Barthelemy","America/St_Johns" // 207
+ ,"America/St_Kitts","America/St_Lucia","America/St_Thomas" // 210
+ ,"America/St_Vincent","America/Swift_Current","America/Tegucigalpa" // 213
+ ,"America/Thule","America/Thunder_Bay","America/Tijuana" // 216
+ ,"America/Toronto","America/Tortola","America/Vancouver" // 219
+ ,"America/Virgin","America/Whitehorse","America/Winnipeg" // 222
+ ,"America/Yakutat","America/Yellowknife","Antarctica/Casey" // 225
+ ,"Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie" // 228
+ ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 231
+ ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 234
+ ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 237
+ ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 241
+ ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 245
+ ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 249
+ ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 253
+ ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 257
+ ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 261
+ ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 265
+ ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 269
+ ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 272
+ ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 276
+ ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 280
+ ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 284
+ ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 287
+ ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 291
+ ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 295
+ ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 299
+ ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 303
+ ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 307
+ ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 311
+ ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 315
+ ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 319
+ ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 323
+ ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 326
+ ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 330
+ ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 334
+ ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 337
+ ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 340
+ ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 343
+ ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 346
+ ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 349
+ ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 352
+ ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 355
+ ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 358
+ ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 361
+ ,"Australia/North","Australia/Perth","Australia/Queensland" // 364
+ ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 367
+ ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 370
+ ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 375
+ ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 382
+ ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 385
+ ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 388
+ ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 391
+ ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 395
+ ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 402
+ ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 406
+ ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 411
+ ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 416
+ ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 420
+ ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 424
+ ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 429
+ ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 434
+ ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 438
+ ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 441
+ ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 444
+ ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 447
+ ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 450
+ ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 453
+ ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 456
+ ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 459
+ ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 463
+ ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 466
+ ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 470
+ ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 474
+ ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 478
+ ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 481
+ ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 484
+ ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 487
+ ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 490
+ ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 493
+ ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 496
+ ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 499
+ ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 505
+ ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 511
+ ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 515
+ ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 518
+ ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 521
+ ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 524
+ ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 530
+ ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 536
+ ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 541
+ ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 549
+ ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 552
+ ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 555
+ ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 558
+ ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 561
+ ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 564
+ ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 567
+ ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 570
+ ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 573
+ ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 576
+ ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 579
+ ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 582
+ ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 585
+ ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 588
+ ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 592
+ ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 598
+ ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 602
+ ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 606
+ ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 609
+ ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 614
+ ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 618
+ ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 622
+ ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 626
+ ,"UTC","Universal","VST","W-SU","WET","Zulu" // 632
}
Rules {
AN:intvector {
@@ -3109,26 +3106,26 @@ zoneinfo64:table(nofallback) {
Fiji:intvector {
10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600
} //_#12
+ Haiti:intvector {
+ 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
+ } //_#13
Iran:intvector {
2, 21, 0, 0, 0, 8, 21, 0, 0, 0, 3600
- } //_#13
+ } //_#14
Jordan:intvector {
2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600
- } //_#14
+ } //_#15
LH:intvector {
9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800
- } //_#15
+ } //_#16
Lebanon:intvector {
2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600
- } //_#16
+ } //_#17
Mexico:intvector {
3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#17
+ } //_#18
Moldova:intvector {
2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#18
- Mongol:intvector {
- 2, -31, -7, 7200, 0, 8, -30, -7, 0, 0, 3600
} //_#19
Morocco:intvector {
2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
@@ -3361,447 +3358,448 @@ zoneinfo64:table(nofallback) {
"BR", //Z#187 America/Porto_Acre
"BR", //Z#188 America/Porto_Velho
"PR", //Z#189 America/Puerto_Rico
- "CA", //Z#190 America/Rainy_River
- "CA", //Z#191 America/Rankin_Inlet
- "BR", //Z#192 America/Recife
- "CA", //Z#193 America/Regina
- "CA", //Z#194 America/Resolute
- "BR", //Z#195 America/Rio_Branco
- "AR", //Z#196 America/Rosario
- "MX", //Z#197 America/Santa_Isabel
- "BR", //Z#198 America/Santarem
- "CL", //Z#199 America/Santiago
- "DO", //Z#200 America/Santo_Domingo
- "BR", //Z#201 America/Sao_Paulo
- "GL", //Z#202 America/Scoresbysund
- "US", //Z#203 America/Shiprock
- "US", //Z#204 America/Sitka
- "BL", //Z#205 America/St_Barthelemy
- "CA", //Z#206 America/St_Johns
- "KN", //Z#207 America/St_Kitts
- "LC", //Z#208 America/St_Lucia
- "VI", //Z#209 America/St_Thomas
- "VC", //Z#210 America/St_Vincent
- "CA", //Z#211 America/Swift_Current
- "HN", //Z#212 America/Tegucigalpa
- "GL", //Z#213 America/Thule
- "CA", //Z#214 America/Thunder_Bay
- "MX", //Z#215 America/Tijuana
- "CA", //Z#216 America/Toronto
- "VG", //Z#217 America/Tortola
- "CA", //Z#218 America/Vancouver
- "TT", //Z#219 America/Virgin
- "CA", //Z#220 America/Whitehorse
- "CA", //Z#221 America/Winnipeg
- "US", //Z#222 America/Yakutat
- "CA", //Z#223 America/Yellowknife
- "AQ", //Z#224 Antarctica/Casey
- "AQ", //Z#225 Antarctica/Davis
- "AQ", //Z#226 Antarctica/DumontDUrville
- "AU", //Z#227 Antarctica/Macquarie
- "AQ", //Z#228 Antarctica/Mawson
- "AQ", //Z#229 Antarctica/McMurdo
- "AQ", //Z#230 Antarctica/Palmer
- "AQ", //Z#231 Antarctica/Rothera
- "NZ", //Z#232 Antarctica/South_Pole
- "AQ", //Z#233 Antarctica/Syowa
- "AQ", //Z#234 Antarctica/Troll
- "AQ", //Z#235 Antarctica/Vostok
- "SJ", //Z#236 Arctic/Longyearbyen
- "YE", //Z#237 Asia/Aden
- "KZ", //Z#238 Asia/Almaty
- "JO", //Z#239 Asia/Amman
- "RU", //Z#240 Asia/Anadyr
- "KZ", //Z#241 Asia/Aqtau
- "KZ", //Z#242 Asia/Aqtobe
- "TM", //Z#243 Asia/Ashgabat
- "TM", //Z#244 Asia/Ashkhabad
- "KZ", //Z#245 Asia/Atyrau
- "IQ", //Z#246 Asia/Baghdad
- "BH", //Z#247 Asia/Bahrain
- "AZ", //Z#248 Asia/Baku
- "TH", //Z#249 Asia/Bangkok
- "RU", //Z#250 Asia/Barnaul
- "LB", //Z#251 Asia/Beirut
- "KG", //Z#252 Asia/Bishkek
- "BN", //Z#253 Asia/Brunei
- "IN", //Z#254 Asia/Calcutta
- "RU", //Z#255 Asia/Chita
- "MN", //Z#256 Asia/Choibalsan
- "CN", //Z#257 Asia/Chongqing
- "CN", //Z#258 Asia/Chungking
- "LK", //Z#259 Asia/Colombo
- "BD", //Z#260 Asia/Dacca
- "SY", //Z#261 Asia/Damascus
- "BD", //Z#262 Asia/Dhaka
- "TL", //Z#263 Asia/Dili
- "AE", //Z#264 Asia/Dubai
- "TJ", //Z#265 Asia/Dushanbe
- "CY", //Z#266 Asia/Famagusta
- "PS", //Z#267 Asia/Gaza
- "CN", //Z#268 Asia/Harbin
- "PS", //Z#269 Asia/Hebron
- "VN", //Z#270 Asia/Ho_Chi_Minh
- "HK", //Z#271 Asia/Hong_Kong
- "MN", //Z#272 Asia/Hovd
- "RU", //Z#273 Asia/Irkutsk
- "TR", //Z#274 Asia/Istanbul
- "ID", //Z#275 Asia/Jakarta
- "ID", //Z#276 Asia/Jayapura
- "IL", //Z#277 Asia/Jerusalem
- "AF", //Z#278 Asia/Kabul
- "RU", //Z#279 Asia/Kamchatka
- "PK", //Z#280 Asia/Karachi
- "CN", //Z#281 Asia/Kashgar
- "NP", //Z#282 Asia/Kathmandu
- "NP", //Z#283 Asia/Katmandu
- "RU", //Z#284 Asia/Khandyga
- "IN", //Z#285 Asia/Kolkata
- "RU", //Z#286 Asia/Krasnoyarsk
- "MY", //Z#287 Asia/Kuala_Lumpur
- "MY", //Z#288 Asia/Kuching
- "KW", //Z#289 Asia/Kuwait
- "MO", //Z#290 Asia/Macao
- "MO", //Z#291 Asia/Macau
- "RU", //Z#292 Asia/Magadan
- "ID", //Z#293 Asia/Makassar
- "PH", //Z#294 Asia/Manila
- "OM", //Z#295 Asia/Muscat
- "CY", //Z#296 Asia/Nicosia
- "RU", //Z#297 Asia/Novokuznetsk
- "RU", //Z#298 Asia/Novosibirsk
- "RU", //Z#299 Asia/Omsk
- "KZ", //Z#300 Asia/Oral
- "KH", //Z#301 Asia/Phnom_Penh
- "ID", //Z#302 Asia/Pontianak
- "KP", //Z#303 Asia/Pyongyang
- "QA", //Z#304 Asia/Qatar
- "KZ", //Z#305 Asia/Qyzylorda
- "MM", //Z#306 Asia/Rangoon
- "SA", //Z#307 Asia/Riyadh
- "VN", //Z#308 Asia/Saigon
- "RU", //Z#309 Asia/Sakhalin
- "UZ", //Z#310 Asia/Samarkand
- "KR", //Z#311 Asia/Seoul
- "CN", //Z#312 Asia/Shanghai
- "SG", //Z#313 Asia/Singapore
- "RU", //Z#314 Asia/Srednekolymsk
- "TW", //Z#315 Asia/Taipei
- "UZ", //Z#316 Asia/Tashkent
- "GE", //Z#317 Asia/Tbilisi
- "IR", //Z#318 Asia/Tehran
- "IL", //Z#319 Asia/Tel_Aviv
- "BT", //Z#320 Asia/Thimbu
- "BT", //Z#321 Asia/Thimphu
- "JP", //Z#322 Asia/Tokyo
- "RU", //Z#323 Asia/Tomsk
- "ID", //Z#324 Asia/Ujung_Pandang
- "MN", //Z#325 Asia/Ulaanbaatar
- "MN", //Z#326 Asia/Ulan_Bator
- "CN", //Z#327 Asia/Urumqi
- "RU", //Z#328 Asia/Ust-Nera
- "LA", //Z#329 Asia/Vientiane
- "RU", //Z#330 Asia/Vladivostok
- "RU", //Z#331 Asia/Yakutsk
- "MM", //Z#332 Asia/Yangon
- "RU", //Z#333 Asia/Yekaterinburg
- "AM", //Z#334 Asia/Yerevan
- "PT", //Z#335 Atlantic/Azores
- "BM", //Z#336 Atlantic/Bermuda
- "ES", //Z#337 Atlantic/Canary
- "CV", //Z#338 Atlantic/Cape_Verde
- "FO", //Z#339 Atlantic/Faeroe
- "FO", //Z#340 Atlantic/Faroe
- "NO", //Z#341 Atlantic/Jan_Mayen
- "PT", //Z#342 Atlantic/Madeira
- "IS", //Z#343 Atlantic/Reykjavik
- "GS", //Z#344 Atlantic/South_Georgia
- "SH", //Z#345 Atlantic/St_Helena
- "FK", //Z#346 Atlantic/Stanley
- "AU", //Z#347 Australia/ACT
- "AU", //Z#348 Australia/Adelaide
- "AU", //Z#349 Australia/Brisbane
- "AU", //Z#350 Australia/Broken_Hill
- "AU", //Z#351 Australia/Canberra
- "AU", //Z#352 Australia/Currie
- "AU", //Z#353 Australia/Darwin
- "AU", //Z#354 Australia/Eucla
- "AU", //Z#355 Australia/Hobart
- "AU", //Z#356 Australia/LHI
- "AU", //Z#357 Australia/Lindeman
- "AU", //Z#358 Australia/Lord_Howe
- "AU", //Z#359 Australia/Melbourne
- "AU", //Z#360 Australia/NSW
- "AU", //Z#361 Australia/North
- "AU", //Z#362 Australia/Perth
- "AU", //Z#363 Australia/Queensland
- "AU", //Z#364 Australia/South
- "AU", //Z#365 Australia/Sydney
- "AU", //Z#366 Australia/Tasmania
- "AU", //Z#367 Australia/Victoria
- "AU", //Z#368 Australia/West
- "AU", //Z#369 Australia/Yancowinna
- "BR", //Z#370 BET
- "BD", //Z#371 BST
- "BR", //Z#372 Brazil/Acre
- "BR", //Z#373 Brazil/DeNoronha
- "BR", //Z#374 Brazil/East
- "BR", //Z#375 Brazil/West
- "MZ", //Z#376 CAT
- "001",//Z#377 CET
- "CA", //Z#378 CNT
- "US", //Z#379 CST
- "001",//Z#380 CST6CDT
- "CN", //Z#381 CTT
- "CA", //Z#382 Canada/Atlantic
- "CA", //Z#383 Canada/Central
- "CA", //Z#384 Canada/East-Saskatchewan
- "CA", //Z#385 Canada/Eastern
- "CA", //Z#386 Canada/Mountain
- "CA", //Z#387 Canada/Newfoundland
- "CA", //Z#388 Canada/Pacific
- "CA", //Z#389 Canada/Saskatchewan
- "CA", //Z#390 Canada/Yukon
- "CL", //Z#391 Chile/Continental
- "CL", //Z#392 Chile/EasterIsland
- "CU", //Z#393 Cuba
- "KE", //Z#394 EAT
- "FR", //Z#395 ECT
- "001",//Z#396 EET
- "001",//Z#397 EST
- "001",//Z#398 EST5EDT
- "EG", //Z#399 Egypt
- "IE", //Z#400 Eire
- "001",//Z#401 Etc/GMT
- "001",//Z#402 Etc/GMT+0
- "001",//Z#403 Etc/GMT+1
- "001",//Z#404 Etc/GMT+10
- "001",//Z#405 Etc/GMT+11
- "001",//Z#406 Etc/GMT+12
- "001",//Z#407 Etc/GMT+2
- "001",//Z#408 Etc/GMT+3
- "001",//Z#409 Etc/GMT+4
- "001",//Z#410 Etc/GMT+5
- "001",//Z#411 Etc/GMT+6
- "001",//Z#412 Etc/GMT+7
- "001",//Z#413 Etc/GMT+8
- "001",//Z#414 Etc/GMT+9
- "001",//Z#415 Etc/GMT-0
- "001",//Z#416 Etc/GMT-1
- "001",//Z#417 Etc/GMT-10
- "001",//Z#418 Etc/GMT-11
- "001",//Z#419 Etc/GMT-12
- "001",//Z#420 Etc/GMT-13
- "001",//Z#421 Etc/GMT-14
- "001",//Z#422 Etc/GMT-2
- "001",//Z#423 Etc/GMT-3
- "001",//Z#424 Etc/GMT-4
- "001",//Z#425 Etc/GMT-5
- "001",//Z#426 Etc/GMT-6
- "001",//Z#427 Etc/GMT-7
- "001",//Z#428 Etc/GMT-8
- "001",//Z#429 Etc/GMT-9
- "001",//Z#430 Etc/GMT0
- "001",//Z#431 Etc/Greenwich
- "001",//Z#432 Etc/UCT
- "001",//Z#433 Etc/UTC
- "001",//Z#434 Etc/Universal
- "001",//Z#435 Etc/Unknown
- "001",//Z#436 Etc/Zulu
- "NL", //Z#437 Europe/Amsterdam
- "AD", //Z#438 Europe/Andorra
- "RU", //Z#439 Europe/Astrakhan
- "GR", //Z#440 Europe/Athens
- "GB", //Z#441 Europe/Belfast
- "RS", //Z#442 Europe/Belgrade
- "DE", //Z#443 Europe/Berlin
- "SK", //Z#444 Europe/Bratislava
- "BE", //Z#445 Europe/Brussels
- "RO", //Z#446 Europe/Bucharest
- "HU", //Z#447 Europe/Budapest
- "DE", //Z#448 Europe/Busingen
- "MD", //Z#449 Europe/Chisinau
- "DK", //Z#450 Europe/Copenhagen
- "IE", //Z#451 Europe/Dublin
- "GI", //Z#452 Europe/Gibraltar
- "GG", //Z#453 Europe/Guernsey
- "FI", //Z#454 Europe/Helsinki
- "IM", //Z#455 Europe/Isle_of_Man
- "TR", //Z#456 Europe/Istanbul
- "JE", //Z#457 Europe/Jersey
- "RU", //Z#458 Europe/Kaliningrad
- "UA", //Z#459 Europe/Kiev
- "RU", //Z#460 Europe/Kirov
- "PT", //Z#461 Europe/Lisbon
- "SI", //Z#462 Europe/Ljubljana
- "GB", //Z#463 Europe/London
- "LU", //Z#464 Europe/Luxembourg
- "ES", //Z#465 Europe/Madrid
- "MT", //Z#466 Europe/Malta
- "AX", //Z#467 Europe/Mariehamn
- "BY", //Z#468 Europe/Minsk
- "MC", //Z#469 Europe/Monaco
- "RU", //Z#470 Europe/Moscow
- "CY", //Z#471 Europe/Nicosia
- "NO", //Z#472 Europe/Oslo
- "FR", //Z#473 Europe/Paris
- "ME", //Z#474 Europe/Podgorica
- "CZ", //Z#475 Europe/Prague
- "LV", //Z#476 Europe/Riga
- "IT", //Z#477 Europe/Rome
- "RU", //Z#478 Europe/Samara
- "SM", //Z#479 Europe/San_Marino
- "BA", //Z#480 Europe/Sarajevo
- "RU", //Z#481 Europe/Saratov
- "UA", //Z#482 Europe/Simferopol
- "MK", //Z#483 Europe/Skopje
- "BG", //Z#484 Europe/Sofia
- "SE", //Z#485 Europe/Stockholm
- "EE", //Z#486 Europe/Tallinn
- "AL", //Z#487 Europe/Tirane
- "MD", //Z#488 Europe/Tiraspol
- "RU", //Z#489 Europe/Ulyanovsk
- "UA", //Z#490 Europe/Uzhgorod
- "LI", //Z#491 Europe/Vaduz
- "VA", //Z#492 Europe/Vatican
- "AT", //Z#493 Europe/Vienna
- "LT", //Z#494 Europe/Vilnius
- "RU", //Z#495 Europe/Volgograd
- "PL", //Z#496 Europe/Warsaw
- "HR", //Z#497 Europe/Zagreb
- "UA", //Z#498 Europe/Zaporozhye
- "CH", //Z#499 Europe/Zurich
- "001",//Z#500 Factory
- "GB", //Z#501 GB
- "GB", //Z#502 GB-Eire
- "001",//Z#503 GMT
- "001",//Z#504 GMT+0
- "001",//Z#505 GMT-0
- "001",//Z#506 GMT0
- "001",//Z#507 Greenwich
- "001",//Z#508 HST
- "HK", //Z#509 Hongkong
- "US", //Z#510 IET
- "IN", //Z#511 IST
- "IS", //Z#512 Iceland
- "MG", //Z#513 Indian/Antananarivo
- "IO", //Z#514 Indian/Chagos
- "CX", //Z#515 Indian/Christmas
- "CC", //Z#516 Indian/Cocos
- "KM", //Z#517 Indian/Comoro
- "TF", //Z#518 Indian/Kerguelen
- "SC", //Z#519 Indian/Mahe
- "MV", //Z#520 Indian/Maldives
- "MU", //Z#521 Indian/Mauritius
- "YT", //Z#522 Indian/Mayotte
- "RE", //Z#523 Indian/Reunion
- "IR", //Z#524 Iran
- "IL", //Z#525 Israel
- "JP", //Z#526 JST
- "JM", //Z#527 Jamaica
- "JP", //Z#528 Japan
- "MH", //Z#529 Kwajalein
- "LY", //Z#530 Libya
- "001",//Z#531 MET
- "WS", //Z#532 MIT
- "001",//Z#533 MST
- "001",//Z#534 MST7MDT
- "MX", //Z#535 Mexico/BajaNorte
- "MX", //Z#536 Mexico/BajaSur
- "MX", //Z#537 Mexico/General
- "AM", //Z#538 NET
- "NZ", //Z#539 NST
- "NZ", //Z#540 NZ
- "NZ", //Z#541 NZ-CHAT
- "US", //Z#542 Navajo
- "PK", //Z#543 PLT
- "US", //Z#544 PNT
- "CN", //Z#545 PRC
- "PR", //Z#546 PRT
- "US", //Z#547 PST
- "001",//Z#548 PST8PDT
- "WS", //Z#549 Pacific/Apia
- "NZ", //Z#550 Pacific/Auckland
- "PG", //Z#551 Pacific/Bougainville
- "NZ", //Z#552 Pacific/Chatham
- "FM", //Z#553 Pacific/Chuuk
- "CL", //Z#554 Pacific/Easter
- "VU", //Z#555 Pacific/Efate
- "KI", //Z#556 Pacific/Enderbury
- "TK", //Z#557 Pacific/Fakaofo
- "FJ", //Z#558 Pacific/Fiji
- "TV", //Z#559 Pacific/Funafuti
- "EC", //Z#560 Pacific/Galapagos
- "PF", //Z#561 Pacific/Gambier
- "SB", //Z#562 Pacific/Guadalcanal
- "GU", //Z#563 Pacific/Guam
- "US", //Z#564 Pacific/Honolulu
- "UM", //Z#565 Pacific/Johnston
- "KI", //Z#566 Pacific/Kiritimati
- "FM", //Z#567 Pacific/Kosrae
- "MH", //Z#568 Pacific/Kwajalein
- "MH", //Z#569 Pacific/Majuro
- "PF", //Z#570 Pacific/Marquesas
- "UM", //Z#571 Pacific/Midway
- "NR", //Z#572 Pacific/Nauru
- "NU", //Z#573 Pacific/Niue
- "NF", //Z#574 Pacific/Norfolk
- "NC", //Z#575 Pacific/Noumea
- "AS", //Z#576 Pacific/Pago_Pago
- "PW", //Z#577 Pacific/Palau
- "PN", //Z#578 Pacific/Pitcairn
- "FM", //Z#579 Pacific/Pohnpei
- "FM", //Z#580 Pacific/Ponape
- "PG", //Z#581 Pacific/Port_Moresby
- "CK", //Z#582 Pacific/Rarotonga
- "MP", //Z#583 Pacific/Saipan
- "AS", //Z#584 Pacific/Samoa
- "PF", //Z#585 Pacific/Tahiti
- "KI", //Z#586 Pacific/Tarawa
- "TO", //Z#587 Pacific/Tongatapu
- "FM", //Z#588 Pacific/Truk
- "UM", //Z#589 Pacific/Wake
- "WF", //Z#590 Pacific/Wallis
- "FM", //Z#591 Pacific/Yap
- "PL", //Z#592 Poland
- "PT", //Z#593 Portugal
- "TW", //Z#594 ROC
- "KR", //Z#595 ROK
- "SB", //Z#596 SST
- "SG", //Z#597 Singapore
- "001",//Z#598 SystemV/AST4
- "001",//Z#599 SystemV/AST4ADT
- "001",//Z#600 SystemV/CST6
- "001",//Z#601 SystemV/CST6CDT
- "001",//Z#602 SystemV/EST5
- "001",//Z#603 SystemV/EST5EDT
- "001",//Z#604 SystemV/HST10
- "001",//Z#605 SystemV/MST7
- "001",//Z#606 SystemV/MST7MDT
- "001",//Z#607 SystemV/PST8
- "001",//Z#608 SystemV/PST8PDT
- "001",//Z#609 SystemV/YST9
- "001",//Z#610 SystemV/YST9YDT
- "TR", //Z#611 Turkey
- "001",//Z#612 UCT
- "US", //Z#613 US/Alaska
- "US", //Z#614 US/Aleutian
- "US", //Z#615 US/Arizona
- "US", //Z#616 US/Central
- "US", //Z#617 US/East-Indiana
- "US", //Z#618 US/Eastern
- "US", //Z#619 US/Hawaii
- "US", //Z#620 US/Indiana-Starke
- "US", //Z#621 US/Michigan
- "US", //Z#622 US/Mountain
- "US", //Z#623 US/Pacific
- "US", //Z#624 US/Pacific-New
- "AS", //Z#625 US/Samoa
- "001",//Z#626 UTC
- "001",//Z#627 Universal
- "VN", //Z#628 VST
- "RU", //Z#629 W-SU
- "001",//Z#630 WET
- "001",//Z#631 Zulu
+ "CL", //Z#190 America/Punta_Arenas
+ "CA", //Z#191 America/Rainy_River
+ "CA", //Z#192 America/Rankin_Inlet
+ "BR", //Z#193 America/Recife
+ "CA", //Z#194 America/Regina
+ "CA", //Z#195 America/Resolute
+ "BR", //Z#196 America/Rio_Branco
+ "AR", //Z#197 America/Rosario
+ "MX", //Z#198 America/Santa_Isabel
+ "BR", //Z#199 America/Santarem
+ "CL", //Z#200 America/Santiago
+ "DO", //Z#201 America/Santo_Domingo
+ "BR", //Z#202 America/Sao_Paulo
+ "GL", //Z#203 America/Scoresbysund
+ "US", //Z#204 America/Shiprock
+ "US", //Z#205 America/Sitka
+ "BL", //Z#206 America/St_Barthelemy
+ "CA", //Z#207 America/St_Johns
+ "KN", //Z#208 America/St_Kitts
+ "LC", //Z#209 America/St_Lucia
+ "VI", //Z#210 America/St_Thomas
+ "VC", //Z#211 America/St_Vincent
+ "CA", //Z#212 America/Swift_Current
+ "HN", //Z#213 America/Tegucigalpa
+ "GL", //Z#214 America/Thule
+ "CA", //Z#215 America/Thunder_Bay
+ "MX", //Z#216 America/Tijuana
+ "CA", //Z#217 America/Toronto
+ "VG", //Z#218 America/Tortola
+ "CA", //Z#219 America/Vancouver
+ "TT", //Z#220 America/Virgin
+ "CA", //Z#221 America/Whitehorse
+ "CA", //Z#222 America/Winnipeg
+ "US", //Z#223 America/Yakutat
+ "CA", //Z#224 America/Yellowknife
+ "AQ", //Z#225 Antarctica/Casey
+ "AQ", //Z#226 Antarctica/Davis
+ "AQ", //Z#227 Antarctica/DumontDUrville
+ "AU", //Z#228 Antarctica/Macquarie
+ "AQ", //Z#229 Antarctica/Mawson
+ "AQ", //Z#230 Antarctica/McMurdo
+ "AQ", //Z#231 Antarctica/Palmer
+ "AQ", //Z#232 Antarctica/Rothera
+ "NZ", //Z#233 Antarctica/South_Pole
+ "AQ", //Z#234 Antarctica/Syowa
+ "AQ", //Z#235 Antarctica/Troll
+ "AQ", //Z#236 Antarctica/Vostok
+ "SJ", //Z#237 Arctic/Longyearbyen
+ "YE", //Z#238 Asia/Aden
+ "KZ", //Z#239 Asia/Almaty
+ "JO", //Z#240 Asia/Amman
+ "RU", //Z#241 Asia/Anadyr
+ "KZ", //Z#242 Asia/Aqtau
+ "KZ", //Z#243 Asia/Aqtobe
+ "TM", //Z#244 Asia/Ashgabat
+ "TM", //Z#245 Asia/Ashkhabad
+ "KZ", //Z#246 Asia/Atyrau
+ "IQ", //Z#247 Asia/Baghdad
+ "BH", //Z#248 Asia/Bahrain
+ "AZ", //Z#249 Asia/Baku
+ "TH", //Z#250 Asia/Bangkok
+ "RU", //Z#251 Asia/Barnaul
+ "LB", //Z#252 Asia/Beirut
+ "KG", //Z#253 Asia/Bishkek
+ "BN", //Z#254 Asia/Brunei
+ "IN", //Z#255 Asia/Calcutta
+ "RU", //Z#256 Asia/Chita
+ "MN", //Z#257 Asia/Choibalsan
+ "CN", //Z#258 Asia/Chongqing
+ "CN", //Z#259 Asia/Chungking
+ "LK", //Z#260 Asia/Colombo
+ "BD", //Z#261 Asia/Dacca
+ "SY", //Z#262 Asia/Damascus
+ "BD", //Z#263 Asia/Dhaka
+ "TL", //Z#264 Asia/Dili
+ "AE", //Z#265 Asia/Dubai
+ "TJ", //Z#266 Asia/Dushanbe
+ "CY", //Z#267 Asia/Famagusta
+ "PS", //Z#268 Asia/Gaza
+ "CN", //Z#269 Asia/Harbin
+ "PS", //Z#270 Asia/Hebron
+ "VN", //Z#271 Asia/Ho_Chi_Minh
+ "HK", //Z#272 Asia/Hong_Kong
+ "MN", //Z#273 Asia/Hovd
+ "RU", //Z#274 Asia/Irkutsk
+ "TR", //Z#275 Asia/Istanbul
+ "ID", //Z#276 Asia/Jakarta
+ "ID", //Z#277 Asia/Jayapura
+ "IL", //Z#278 Asia/Jerusalem
+ "AF", //Z#279 Asia/Kabul
+ "RU", //Z#280 Asia/Kamchatka
+ "PK", //Z#281 Asia/Karachi
+ "CN", //Z#282 Asia/Kashgar
+ "NP", //Z#283 Asia/Kathmandu
+ "NP", //Z#284 Asia/Katmandu
+ "RU", //Z#285 Asia/Khandyga
+ "IN", //Z#286 Asia/Kolkata
+ "RU", //Z#287 Asia/Krasnoyarsk
+ "MY", //Z#288 Asia/Kuala_Lumpur
+ "MY", //Z#289 Asia/Kuching
+ "KW", //Z#290 Asia/Kuwait
+ "MO", //Z#291 Asia/Macao
+ "MO", //Z#292 Asia/Macau
+ "RU", //Z#293 Asia/Magadan
+ "ID", //Z#294 Asia/Makassar
+ "PH", //Z#295 Asia/Manila
+ "OM", //Z#296 Asia/Muscat
+ "CY", //Z#297 Asia/Nicosia
+ "RU", //Z#298 Asia/Novokuznetsk
+ "RU", //Z#299 Asia/Novosibirsk
+ "RU", //Z#300 Asia/Omsk
+ "KZ", //Z#301 Asia/Oral
+ "KH", //Z#302 Asia/Phnom_Penh
+ "ID", //Z#303 Asia/Pontianak
+ "KP", //Z#304 Asia/Pyongyang
+ "QA", //Z#305 Asia/Qatar
+ "KZ", //Z#306 Asia/Qyzylorda
+ "MM", //Z#307 Asia/Rangoon
+ "SA", //Z#308 Asia/Riyadh
+ "VN", //Z#309 Asia/Saigon
+ "RU", //Z#310 Asia/Sakhalin
+ "UZ", //Z#311 Asia/Samarkand
+ "KR", //Z#312 Asia/Seoul
+ "CN", //Z#313 Asia/Shanghai
+ "SG", //Z#314 Asia/Singapore
+ "RU", //Z#315 Asia/Srednekolymsk
+ "TW", //Z#316 Asia/Taipei
+ "UZ", //Z#317 Asia/Tashkent
+ "GE", //Z#318 Asia/Tbilisi
+ "IR", //Z#319 Asia/Tehran
+ "IL", //Z#320 Asia/Tel_Aviv
+ "BT", //Z#321 Asia/Thimbu
+ "BT", //Z#322 Asia/Thimphu
+ "JP", //Z#323 Asia/Tokyo
+ "RU", //Z#324 Asia/Tomsk
+ "ID", //Z#325 Asia/Ujung_Pandang
+ "MN", //Z#326 Asia/Ulaanbaatar
+ "MN", //Z#327 Asia/Ulan_Bator
+ "CN", //Z#328 Asia/Urumqi
+ "RU", //Z#329 Asia/Ust-Nera
+ "LA", //Z#330 Asia/Vientiane
+ "RU", //Z#331 Asia/Vladivostok
+ "RU", //Z#332 Asia/Yakutsk
+ "MM", //Z#333 Asia/Yangon
+ "RU", //Z#334 Asia/Yekaterinburg
+ "AM", //Z#335 Asia/Yerevan
+ "PT", //Z#336 Atlantic/Azores
+ "BM", //Z#337 Atlantic/Bermuda
+ "ES", //Z#338 Atlantic/Canary
+ "CV", //Z#339 Atlantic/Cape_Verde
+ "FO", //Z#340 Atlantic/Faeroe
+ "FO", //Z#341 Atlantic/Faroe
+ "NO", //Z#342 Atlantic/Jan_Mayen
+ "PT", //Z#343 Atlantic/Madeira
+ "IS", //Z#344 Atlantic/Reykjavik
+ "GS", //Z#345 Atlantic/South_Georgia
+ "SH", //Z#346 Atlantic/St_Helena
+ "FK", //Z#347 Atlantic/Stanley
+ "AU", //Z#348 Australia/ACT
+ "AU", //Z#349 Australia/Adelaide
+ "AU", //Z#350 Australia/Brisbane
+ "AU", //Z#351 Australia/Broken_Hill
+ "AU", //Z#352 Australia/Canberra
+ "AU", //Z#353 Australia/Currie
+ "AU", //Z#354 Australia/Darwin
+ "AU", //Z#355 Australia/Eucla
+ "AU", //Z#356 Australia/Hobart
+ "AU", //Z#357 Australia/LHI
+ "AU", //Z#358 Australia/Lindeman
+ "AU", //Z#359 Australia/Lord_Howe
+ "AU", //Z#360 Australia/Melbourne
+ "AU", //Z#361 Australia/NSW
+ "AU", //Z#362 Australia/North
+ "AU", //Z#363 Australia/Perth
+ "AU", //Z#364 Australia/Queensland
+ "AU", //Z#365 Australia/South
+ "AU", //Z#366 Australia/Sydney
+ "AU", //Z#367 Australia/Tasmania
+ "AU", //Z#368 Australia/Victoria
+ "AU", //Z#369 Australia/West
+ "AU", //Z#370 Australia/Yancowinna
+ "BR", //Z#371 BET
+ "BD", //Z#372 BST
+ "BR", //Z#373 Brazil/Acre
+ "BR", //Z#374 Brazil/DeNoronha
+ "BR", //Z#375 Brazil/East
+ "BR", //Z#376 Brazil/West
+ "MZ", //Z#377 CAT
+ "001",//Z#378 CET
+ "CA", //Z#379 CNT
+ "US", //Z#380 CST
+ "001",//Z#381 CST6CDT
+ "CN", //Z#382 CTT
+ "CA", //Z#383 Canada/Atlantic
+ "CA", //Z#384 Canada/Central
+ "CA", //Z#385 Canada/East-Saskatchewan
+ "CA", //Z#386 Canada/Eastern
+ "CA", //Z#387 Canada/Mountain
+ "CA", //Z#388 Canada/Newfoundland
+ "CA", //Z#389 Canada/Pacific
+ "CA", //Z#390 Canada/Saskatchewan
+ "CA", //Z#391 Canada/Yukon
+ "CL", //Z#392 Chile/Continental
+ "CL", //Z#393 Chile/EasterIsland
+ "CU", //Z#394 Cuba
+ "KE", //Z#395 EAT
+ "FR", //Z#396 ECT
+ "001",//Z#397 EET
+ "001",//Z#398 EST
+ "001",//Z#399 EST5EDT
+ "EG", //Z#400 Egypt
+ "IE", //Z#401 Eire
+ "001",//Z#402 Etc/GMT
+ "001",//Z#403 Etc/GMT+0
+ "001",//Z#404 Etc/GMT+1
+ "001",//Z#405 Etc/GMT+10
+ "001",//Z#406 Etc/GMT+11
+ "001",//Z#407 Etc/GMT+12
+ "001",//Z#408 Etc/GMT+2
+ "001",//Z#409 Etc/GMT+3
+ "001",//Z#410 Etc/GMT+4
+ "001",//Z#411 Etc/GMT+5
+ "001",//Z#412 Etc/GMT+6
+ "001",//Z#413 Etc/GMT+7
+ "001",//Z#414 Etc/GMT+8
+ "001",//Z#415 Etc/GMT+9
+ "001",//Z#416 Etc/GMT-0
+ "001",//Z#417 Etc/GMT-1
+ "001",//Z#418 Etc/GMT-10
+ "001",//Z#419 Etc/GMT-11
+ "001",//Z#420 Etc/GMT-12
+ "001",//Z#421 Etc/GMT-13
+ "001",//Z#422 Etc/GMT-14
+ "001",//Z#423 Etc/GMT-2
+ "001",//Z#424 Etc/GMT-3
+ "001",//Z#425 Etc/GMT-4
+ "001",//Z#426 Etc/GMT-5
+ "001",//Z#427 Etc/GMT-6
+ "001",//Z#428 Etc/GMT-7
+ "001",//Z#429 Etc/GMT-8
+ "001",//Z#430 Etc/GMT-9
+ "001",//Z#431 Etc/GMT0
+ "001",//Z#432 Etc/Greenwich
+ "001",//Z#433 Etc/UCT
+ "001",//Z#434 Etc/UTC
+ "001",//Z#435 Etc/Universal
+ "001",//Z#436 Etc/Unknown
+ "001",//Z#437 Etc/Zulu
+ "NL", //Z#438 Europe/Amsterdam
+ "AD", //Z#439 Europe/Andorra
+ "RU", //Z#440 Europe/Astrakhan
+ "GR", //Z#441 Europe/Athens
+ "GB", //Z#442 Europe/Belfast
+ "RS", //Z#443 Europe/Belgrade
+ "DE", //Z#444 Europe/Berlin
+ "SK", //Z#445 Europe/Bratislava
+ "BE", //Z#446 Europe/Brussels
+ "RO", //Z#447 Europe/Bucharest
+ "HU", //Z#448 Europe/Budapest
+ "DE", //Z#449 Europe/Busingen
+ "MD", //Z#450 Europe/Chisinau
+ "DK", //Z#451 Europe/Copenhagen
+ "IE", //Z#452 Europe/Dublin
+ "GI", //Z#453 Europe/Gibraltar
+ "GG", //Z#454 Europe/Guernsey
+ "FI", //Z#455 Europe/Helsinki
+ "IM", //Z#456 Europe/Isle_of_Man
+ "TR", //Z#457 Europe/Istanbul
+ "JE", //Z#458 Europe/Jersey
+ "RU", //Z#459 Europe/Kaliningrad
+ "UA", //Z#460 Europe/Kiev
+ "RU", //Z#461 Europe/Kirov
+ "PT", //Z#462 Europe/Lisbon
+ "SI", //Z#463 Europe/Ljubljana
+ "GB", //Z#464 Europe/London
+ "LU", //Z#465 Europe/Luxembourg
+ "ES", //Z#466 Europe/Madrid
+ "MT", //Z#467 Europe/Malta
+ "AX", //Z#468 Europe/Mariehamn
+ "BY", //Z#469 Europe/Minsk
+ "MC", //Z#470 Europe/Monaco
+ "RU", //Z#471 Europe/Moscow
+ "CY", //Z#472 Europe/Nicosia
+ "NO", //Z#473 Europe/Oslo
+ "FR", //Z#474 Europe/Paris
+ "ME", //Z#475 Europe/Podgorica
+ "CZ", //Z#476 Europe/Prague
+ "LV", //Z#477 Europe/Riga
+ "IT", //Z#478 Europe/Rome
+ "RU", //Z#479 Europe/Samara
+ "SM", //Z#480 Europe/San_Marino
+ "BA", //Z#481 Europe/Sarajevo
+ "RU", //Z#482 Europe/Saratov
+ "UA", //Z#483 Europe/Simferopol
+ "MK", //Z#484 Europe/Skopje
+ "BG", //Z#485 Europe/Sofia
+ "SE", //Z#486 Europe/Stockholm
+ "EE", //Z#487 Europe/Tallinn
+ "AL", //Z#488 Europe/Tirane
+ "MD", //Z#489 Europe/Tiraspol
+ "RU", //Z#490 Europe/Ulyanovsk
+ "UA", //Z#491 Europe/Uzhgorod
+ "LI", //Z#492 Europe/Vaduz
+ "VA", //Z#493 Europe/Vatican
+ "AT", //Z#494 Europe/Vienna
+ "LT", //Z#495 Europe/Vilnius
+ "RU", //Z#496 Europe/Volgograd
+ "PL", //Z#497 Europe/Warsaw
+ "HR", //Z#498 Europe/Zagreb
+ "UA", //Z#499 Europe/Zaporozhye
+ "CH", //Z#500 Europe/Zurich
+ "001",//Z#501 Factory
+ "GB", //Z#502 GB
+ "GB", //Z#503 GB-Eire
+ "001",//Z#504 GMT
+ "001",//Z#505 GMT+0
+ "001",//Z#506 GMT-0
+ "001",//Z#507 GMT0
+ "001",//Z#508 Greenwich
+ "001",//Z#509 HST
+ "HK", //Z#510 Hongkong
+ "US", //Z#511 IET
+ "IN", //Z#512 IST
+ "IS", //Z#513 Iceland
+ "MG", //Z#514 Indian/Antananarivo
+ "IO", //Z#515 Indian/Chagos
+ "CX", //Z#516 Indian/Christmas
+ "CC", //Z#517 Indian/Cocos
+ "KM", //Z#518 Indian/Comoro
+ "TF", //Z#519 Indian/Kerguelen
+ "SC", //Z#520 Indian/Mahe
+ "MV", //Z#521 Indian/Maldives
+ "MU", //Z#522 Indian/Mauritius
+ "YT", //Z#523 Indian/Mayotte
+ "RE", //Z#524 Indian/Reunion
+ "IR", //Z#525 Iran
+ "IL", //Z#526 Israel
+ "JP", //Z#527 JST
+ "JM", //Z#528 Jamaica
+ "JP", //Z#529 Japan
+ "MH", //Z#530 Kwajalein
+ "LY", //Z#531 Libya
+ "001",//Z#532 MET
+ "WS", //Z#533 MIT
+ "001",//Z#534 MST
+ "001",//Z#535 MST7MDT
+ "MX", //Z#536 Mexico/BajaNorte
+ "MX", //Z#537 Mexico/BajaSur
+ "MX", //Z#538 Mexico/General
+ "AM", //Z#539 NET
+ "NZ", //Z#540 NST
+ "NZ", //Z#541 NZ
+ "NZ", //Z#542 NZ-CHAT
+ "US", //Z#543 Navajo
+ "PK", //Z#544 PLT
+ "US", //Z#545 PNT
+ "CN", //Z#546 PRC
+ "PR", //Z#547 PRT
+ "US", //Z#548 PST
+ "001",//Z#549 PST8PDT
+ "WS", //Z#550 Pacific/Apia
+ "NZ", //Z#551 Pacific/Auckland
+ "PG", //Z#552 Pacific/Bougainville
+ "NZ", //Z#553 Pacific/Chatham
+ "FM", //Z#554 Pacific/Chuuk
+ "CL", //Z#555 Pacific/Easter
+ "VU", //Z#556 Pacific/Efate
+ "KI", //Z#557 Pacific/Enderbury
+ "TK", //Z#558 Pacific/Fakaofo
+ "FJ", //Z#559 Pacific/Fiji
+ "TV", //Z#560 Pacific/Funafuti
+ "EC", //Z#561 Pacific/Galapagos
+ "PF", //Z#562 Pacific/Gambier
+ "SB", //Z#563 Pacific/Guadalcanal
+ "GU", //Z#564 Pacific/Guam
+ "US", //Z#565 Pacific/Honolulu
+ "UM", //Z#566 Pacific/Johnston
+ "KI", //Z#567 Pacific/Kiritimati
+ "FM", //Z#568 Pacific/Kosrae
+ "MH", //Z#569 Pacific/Kwajalein
+ "MH", //Z#570 Pacific/Majuro
+ "PF", //Z#571 Pacific/Marquesas
+ "UM", //Z#572 Pacific/Midway
+ "NR", //Z#573 Pacific/Nauru
+ "NU", //Z#574 Pacific/Niue
+ "NF", //Z#575 Pacific/Norfolk
+ "NC", //Z#576 Pacific/Noumea
+ "AS", //Z#577 Pacific/Pago_Pago
+ "PW", //Z#578 Pacific/Palau
+ "PN", //Z#579 Pacific/Pitcairn
+ "FM", //Z#580 Pacific/Pohnpei
+ "FM", //Z#581 Pacific/Ponape
+ "PG", //Z#582 Pacific/Port_Moresby
+ "CK", //Z#583 Pacific/Rarotonga
+ "MP", //Z#584 Pacific/Saipan
+ "AS", //Z#585 Pacific/Samoa
+ "PF", //Z#586 Pacific/Tahiti
+ "KI", //Z#587 Pacific/Tarawa
+ "TO", //Z#588 Pacific/Tongatapu
+ "FM", //Z#589 Pacific/Truk
+ "UM", //Z#590 Pacific/Wake
+ "WF", //Z#591 Pacific/Wallis
+ "FM", //Z#592 Pacific/Yap
+ "PL", //Z#593 Poland
+ "PT", //Z#594 Portugal
+ "TW", //Z#595 ROC
+ "KR", //Z#596 ROK
+ "SB", //Z#597 SST
+ "SG", //Z#598 Singapore
+ "001",//Z#599 SystemV/AST4
+ "001",//Z#600 SystemV/AST4ADT
+ "001",//Z#601 SystemV/CST6
+ "001",//Z#602 SystemV/CST6CDT
+ "001",//Z#603 SystemV/EST5
+ "001",//Z#604 SystemV/EST5EDT
+ "001",//Z#605 SystemV/HST10
+ "001",//Z#606 SystemV/MST7
+ "001",//Z#607 SystemV/MST7MDT
+ "001",//Z#608 SystemV/PST8
+ "001",//Z#609 SystemV/PST8PDT
+ "001",//Z#610 SystemV/YST9
+ "001",//Z#611 SystemV/YST9YDT
+ "TR", //Z#612 Turkey
+ "001",//Z#613 UCT
+ "US", //Z#614 US/Alaska
+ "US", //Z#615 US/Aleutian
+ "US", //Z#616 US/Arizona
+ "US", //Z#617 US/Central
+ "US", //Z#618 US/East-Indiana
+ "US", //Z#619 US/Eastern
+ "US", //Z#620 US/Hawaii
+ "US", //Z#621 US/Indiana-Starke
+ "US", //Z#622 US/Michigan
+ "US", //Z#623 US/Mountain
+ "US", //Z#624 US/Pacific
+ "US", //Z#625 US/Pacific-New
+ "AS", //Z#626 US/Samoa
+ "001",//Z#627 UTC
+ "001",//Z#628 Universal
+ "VN", //Z#629 VST
+ "RU", //Z#630 W-SU
+ "001",//Z#631 WET
+ "001",//Z#632 Zulu
}
}
diff --git a/chromium/third_party/icu/source/data/translit/root_subset.txt b/chromium/third_party/icu/source/data/translit/root_subset.txt
index b27191cffd4..2f5c4baec34 100644
--- a/chromium/third_party/icu/source/data/translit/root_subset.txt
+++ b/chromium/third_party/icu/source/data/translit/root_subset.txt
@@ -3,25 +3,14 @@
// * Corporation; Unicode, Inc.; and others. All Rights Reserved.
// *
// ***************************************************************************
-// File: root.txt
-// Only include:
-// For Chinese script detection:
-// Chinese Simplified-Traditional and Traditional-Simplified transform
-// rules, and their aliases Hans-Hant and Hant-Hans, respectively.
+// This file specifies transliteration rulesets that are to be kept for Chromium
+// releases.
+//
+// Currently no rule sets in use.
+// Note that RuleBasedTransliteratorIDs block has to be present. Otherwise,
+// built-in transforms such as NFD/NFC would fail.
root {
RuleBasedTransliteratorIDs {
- Hans-Hant {
- file {
- resource:process(transliterator) {"Hans_Hant.txt"}
- direction {"FORWARD"}
- }
- }
- Hant-Hans {
- file {
- resource:process(transliterator) {"Hans_Hant.txt"}
- direction {"REVERSE"}
- }
- }
}
}
diff --git a/chromium/third_party/icu/source/data/translit/trnslocal.mk b/chromium/third_party/icu/source/data/translit/trnslocal.mk
index a3aba1b829b..1540b8d10ce 100644
--- a/chromium/third_party/icu/source/data/translit/trnslocal.mk
+++ b/chromium/third_party/icu/source/data/translit/trnslocal.mk
@@ -1 +1 @@
-TRANSLIT_SOURCE=css3transform.txt
+TRANSLIT_SOURCE=root_subset.txt
diff --git a/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp b/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp
index b73dc6d8254..cb5a0104271 100644
--- a/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp
+++ b/chromium/third_party/pdfium/core/fxcrt/fx_basic_coords.cpp
@@ -4,8 +4,9 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+#include <limits.h>
+
#include <algorithm>
-#include <limits>
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_ext.h"
@@ -230,7 +231,7 @@ CFX_FloatRect CFX_FloatRect::GetBBox(const CFX_PointF* pPoints, int nPoints) {
void CFX_Matrix::SetReverse(const CFX_Matrix& m) {
FX_FLOAT i = m.a * m.d - m.b * m.c;
- if (FXSYS_fabs(i) <= std::numeric_limits<float>::epsilon())
+ if (FXSYS_fabs(i) == 0)
return;
FX_FLOAT j = -i;
diff --git a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc
index 84b162bdfee..e29109d32c8 100644
--- a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc
+++ b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.cc
@@ -57,12 +57,6 @@ Rotation DxgiRotationToRotation(DXGI_MODE_ROTATION rotation) {
return Rotation::CLOCK_WISE_0;
}
-// Translates |rect| with the reverse of |offset|
-DesktopRect ReverseTranslate(DesktopRect rect, DesktopVector offset) {
- rect.Translate(-offset.x(), -offset.y());
- return rect;
-}
-
} // namespace
DxgiOutputDuplicator::DxgiOutputDuplicator(const D3dDevice& device,
@@ -132,8 +126,7 @@ bool DxgiOutputDuplicator::DuplicateOutput() {
}
rotation_ = DxgiRotationToRotation(desc_.Rotation);
- unrotated_size_ =
- RotateSize(desktop_rect_.size(), ReverseRotation(rotation_));
+ unrotated_size_ = RotateSize(desktop_size(), ReverseRotation(rotation_));
return true;
}
@@ -157,7 +150,7 @@ bool DxgiOutputDuplicator::Duplicate(Context* context,
RTC_DCHECK(texture_);
RTC_DCHECK(target);
if (!DesktopRect::MakeSize(target->size())
- .ContainsRect(TranslatedDesktopRect(offset))) {
+ .ContainsRect(GetTranslatedDesktopRect(offset))) {
// target size is not large enough to cover current output region.
return false;
}
@@ -175,37 +168,43 @@ bool DxgiOutputDuplicator::Duplicate(Context* context,
// We need to merge updated region with the one from context, but only spread
// updated region from current frame. So keeps a copy of updated region from
- // context here.
+ // context here. The |updated_region| always starts from (0, 0).
DesktopRegion updated_region;
updated_region.Swap(&context->updated_region);
if (error.Error() == S_OK &&
frame_info.AccumulatedFrames > 0 &&
resource) {
- DetectUpdatedRegion(frame_info, offset, &context->updated_region);
+ DetectUpdatedRegion(frame_info, &context->updated_region);
+ SpreadContextChange(context);
if (!texture_->CopyFrom(frame_info, resource.Get())) {
return false;
}
- SpreadContextChange(context);
updated_region.AddRegion(context->updated_region);
+ // TODO(zijiehe): Figure out why clearing context->updated_region() here
+ // triggers screen flickering?
const DesktopFrame& source = texture_->AsDesktopFrame();
if (rotation_ != Rotation::CLOCK_WISE_0) {
for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd();
it.Advance()) {
- const DesktopRect source_rect =
- RotateRect(ReverseTranslate(it.rect(), offset),
- desktop_rect().size(), ReverseRotation(rotation_));
+ // The |updated_region| returned by Windows is rotated, but the |source|
+ // frame is not. So we need to rotate it reversely.
+ const DesktopRect source_rect = RotateRect(
+ it.rect(), desktop_size(), ReverseRotation(rotation_));
RotateDesktopFrame(source, source_rect, rotation_, offset, target);
}
} else {
for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd();
it.Advance()) {
- target->CopyPixelsFrom(
- source, ReverseTranslate(it.rect(), offset).top_left(), it.rect());
+ // The DesktopRect in |target|, starts from offset.
+ DesktopRect dest_rect = it.rect();
+ dest_rect.Translate(offset);
+ target->CopyPixelsFrom(source, it.rect().top_left(), dest_rect);
}
}
last_frame_ = target->Share();
last_frame_offset_ = offset;
+ updated_region.Translate(offset.x(), offset.y());
target->mutable_updated_region()->AddRegion(updated_region);
num_frames_captured_++;
return texture_->Release() && ReleaseFrame();
@@ -216,8 +215,15 @@ bool DxgiOutputDuplicator::Duplicate(Context* context,
// export last frame to the target.
for (DesktopRegion::Iterator it(updated_region); !it.IsAtEnd();
it.Advance()) {
- target->CopyPixelsFrom(*last_frame_, it.rect().top_left(), it.rect());
+ // The DesktopRect in |source|, starts from last_frame_offset_.
+ DesktopRect source_rect = it.rect();
+ // The DesktopRect in |target|, starts from offset.
+ DesktopRect target_rect = source_rect;
+ source_rect.Translate(last_frame_offset_);
+ target_rect.Translate(offset);
+ target->CopyPixelsFrom(*last_frame_, source_rect.top_left(), target_rect);
}
+ updated_region.Translate(offset.x(), offset.y());
target->mutable_updated_region()->AddRegion(updated_region);
} else {
// If we were at the very first frame, and capturing failed, the
@@ -229,23 +235,26 @@ bool DxgiOutputDuplicator::Duplicate(Context* context,
return error.Error() == DXGI_ERROR_WAIT_TIMEOUT || ReleaseFrame();
}
-DesktopRect DxgiOutputDuplicator::TranslatedDesktopRect(DesktopVector offset) {
- DesktopRect result(DesktopRect::MakeSize(desktop_rect_.size()));
+DesktopRect DxgiOutputDuplicator::GetTranslatedDesktopRect(
+ DesktopVector offset) const {
+ DesktopRect result(DesktopRect::MakeSize(desktop_size()));
result.Translate(offset);
return result;
}
+DesktopRect DxgiOutputDuplicator::GetUntranslatedDesktopRect() const {
+ return DesktopRect::MakeSize(desktop_size());
+}
+
void DxgiOutputDuplicator::DetectUpdatedRegion(
const DXGI_OUTDUPL_FRAME_INFO& frame_info,
- DesktopVector offset,
DesktopRegion* updated_region) {
if (DoDetectUpdatedRegion(frame_info, updated_region)) {
- updated_region->Translate(offset.x(), offset.y());
// Make sure even a region returned by Windows API is out of the scope of
// desktop_rect_, we still won't export it to the target DesktopFrame.
- updated_region->IntersectWith(TranslatedDesktopRect(offset));
+ updated_region->IntersectWith(GetUntranslatedDesktopRect());
} else {
- updated_region->SetRect(TranslatedDesktopRect(offset));
+ updated_region->SetRect(GetUntranslatedDesktopRect());
}
}
@@ -325,7 +334,7 @@ bool DxgiOutputDuplicator::DoDetectUpdatedRegion(
void DxgiOutputDuplicator::Setup(Context* context) {
RTC_DCHECK(context->updated_region.is_empty());
// Always copy entire monitor during the first Duplicate() function call.
- context->updated_region.AddRect(desktop_rect_);
+ context->updated_region.AddRect(GetUntranslatedDesktopRect());
RTC_DCHECK(std::find(contexts_.begin(), contexts_.end(), context) ==
contexts_.end());
contexts_.push_back(context);
@@ -346,6 +355,10 @@ void DxgiOutputDuplicator::SpreadContextChange(const Context* const source) {
}
}
+DesktopSize DxgiOutputDuplicator::desktop_size() const {
+ return desktop_rect_.size();
+}
+
int64_t DxgiOutputDuplicator::num_frames_captured() const {
#if !defined(NDEBUG)
RTC_DCHECK_EQ(!!last_frame_, num_frames_captured_ > 0);
diff --git a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h
index 2ac0a75eabe..2e85bf7a08a 100644
--- a/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h
+++ b/chromium/third_party/webrtc/modules/desktop_capture/win/dxgi_output_duplicator.h
@@ -36,8 +36,8 @@ class DxgiOutputDuplicator {
public:
struct Context {
// The updated region DxgiOutputDuplicator::DetectUpdatedRegion() output
- // during last Duplicate() function call. It's a DesktopRegion translated by
- // offset of each DxgiOutputDuplicator instance.
+ // during last Duplicate() function call. It's always relative to the
+ // (0, 0).
DesktopRegion updated_region;
};
@@ -80,11 +80,9 @@ class DxgiOutputDuplicator {
int64_t num_frames_captured() const;
private:
- // Detects updated region translated by offset from IDXGIOutput1. This
- // function will set the |updated_region| as entire DesktopRect starts from
- // offset if it failed to execute Windows APIs.
+ // Calls DoDetectUpdatedRegion(). If it fails, this function sets the
+ // |updated_region| as entire UntranslatedDesktopRect().
void DetectUpdatedRegion(const DXGI_OUTDUPL_FRAME_INFO& frame_info,
- DesktopVector offset,
DesktopRegion* updated_region);
// Returns untranslated updated region, which are directly returned by Windows
@@ -98,14 +96,21 @@ class DxgiOutputDuplicator {
// Returns false if system does not support IDXGIOutputDuplication.
bool DuplicateOutput();
- // Returns a DesktopRect with the same size of desktop_size_, but translated
+ // Returns a DesktopRect with the same size of desktop_size(), but translated
// by offset.
- DesktopRect TranslatedDesktopRect(DesktopVector offset);
+ DesktopRect GetTranslatedDesktopRect(DesktopVector offset) const;
+
+ // Returns a DesktopRect with the same size of desktop_size(), but starts from
+ // (0, 0).
+ DesktopRect GetUntranslatedDesktopRect() const;
// Spreads changes from |context| to other registered Context(s) in
// contexts_.
void SpreadContextChange(const Context* const context);
+ // Returns the size of desktop rectangle current instance representing.
+ DesktopSize desktop_size() const;
+
const D3dDevice device_;
const Microsoft::WRL::ComPtr<IDXGIOutput1> output_;
const DesktopRect desktop_rect_;
diff --git a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc
index 31ad0b0acac..1afd2341b3f 100644
--- a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc
+++ b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc
@@ -252,12 +252,12 @@ void WindowCapturerWin::CaptureFrame() {
frame->mutable_updated_region()->SetRect(
DesktopRect::MakeSize(frame->size()));
- if (!result) {
+ if (result) {
+ callback_->OnCaptureResult(Result::SUCCESS, std::move(frame));
+ } else {
LOG(LS_ERROR) << "Both PrintWindow() and BitBlt() failed.";
- frame.reset();
+ callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
}
-
- callback_->OnCaptureResult(Result::SUCCESS, std::move(frame));
}
} // namespace
diff --git a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc
index dcbcb1f9bdf..8736567f8d2 100644
--- a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc
+++ b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2.cc
@@ -90,7 +90,8 @@ FrameBuffer::ReturnReason FrameBuffer::NextFrame(
if (continuous_end_it != frames_.end())
++continuous_end_it;
- for (; frame_it != continuous_end_it; ++frame_it) {
+ for (; frame_it != continuous_end_it && frame_it != frames_.end();
+ ++frame_it) {
if (!frame_it->second.continuous ||
frame_it->second.num_missing_decodable > 0) {
continue;
@@ -222,6 +223,17 @@ int FrameBuffer::InsertFrame(std::unique_ptr<FrameObject> frame) {
}
}
+ // Test if inserting this frame would cause the order of the frames to become
+ // ambiguous (covering more than half the interval of 2^16). This can happen
+ // when the picture id make large jumps mid stream.
+ if (!frames_.empty() &&
+ key < frames_.begin()->first &&
+ frames_.rbegin()->first < key) {
+ LOG(LS_WARNING) << "A jump in picture id was detected, clearing buffer.";
+ ClearFramesAndHistory();
+ last_continuous_picture_id = -1;
+ }
+
auto info = frames_.insert(std::make_pair(key, FrameInfo())).first;
if (info->second.frame) {
diff --git a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc
index b67d99376fd..04ce5595a55 100644
--- a/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc
+++ b/chromium/third_party/webrtc/modules/video_coding/frame_buffer2_unittest.cc
@@ -497,5 +497,24 @@ TEST_F(TestFrameBuffer2, StatsCallback) {
CheckFrame(0, pid, 0);
}
+TEST_F(TestFrameBuffer2, ForwardJumps) {
+ EXPECT_EQ(5453, InsertFrame(5453, 0, 1, false));
+ ExtractFrame();
+ EXPECT_EQ(5454, InsertFrame(5454, 0, 1, false, 5453));
+ ExtractFrame();
+ EXPECT_EQ(15670, InsertFrame(15670, 0, 1, false));
+ ExtractFrame();
+ EXPECT_EQ(29804, InsertFrame(29804, 0, 1, false));
+ ExtractFrame();
+ EXPECT_EQ(29805, InsertFrame(29805, 0, 1, false, 29804));
+ ExtractFrame();
+ EXPECT_EQ(29806, InsertFrame(29806, 0, 1, false, 29805));
+ ExtractFrame();
+ EXPECT_EQ(33819, InsertFrame(33819, 0, 1, false));
+ ExtractFrame();
+ EXPECT_EQ(41248, InsertFrame(41248, 0, 1, false));
+ ExtractFrame();
+}
+
} // namespace video_coding
} // namespace webrtc
diff --git a/chromium/tools/mb/mb_config.pyl b/chromium/tools/mb/mb_config.pyl
index ad91f61bb9c..655c67bf758 100644
--- a/chromium/tools/mb/mb_config.pyl
+++ b/chromium/tools/mb/mb_config.pyl
@@ -439,7 +439,7 @@
'official.desktop': {
'linux64': 'official',
'mac64': 'official',
- 'precise64': 'official',
+ 'mac64-recipes': 'official',
# Currently the official bots set mini_installer_official_deps=1
# but it's not clear if that's actually used anywhere.
@@ -456,12 +456,19 @@
'1': 'official_chrome_pgo_phase_1',
'2': 'official_chrome_pgo_phase_2',
},
+ # TODO(mmoss): Remove this once all official Windows recipes are working.
+ 'win-recipes': 'official',
},
'official.desktop.continuous': {
'mac beta': 'official',
'mac stable': 'official',
'mac trunk': 'official',
+ 'linux64 beta': 'official_six_concurrent_links',
+ 'linux64 stable': 'official_six_concurrent_links',
+ 'linux64 trunk': 'official_six_concurrent_links',
+ # TODO(mmoss): These precise64 entries can go away once the newly renamed
+ # builders are fully deployed.
'precise64 beta': 'official_six_concurrent_links',
'precise64 stable': 'official_six_concurrent_links',
'precise64 trunk': 'official_six_concurrent_links',
diff --git a/chromium/ui/arc/notification/arc_custom_notification_item.cc b/chromium/ui/arc/notification/arc_custom_notification_item.cc
index e0b0417d9f7..521145ddf06 100644
--- a/chromium/ui/arc/notification/arc_custom_notification_item.cc
+++ b/chromium/ui/arc/notification/arc_custom_notification_item.cc
@@ -102,6 +102,7 @@ void ArcCustomNotificationItem::UpdateWithArcNotificationData(
pinned_ = rich_data.pinned;
expand_state_ = data->expand_state;
+ shown_contents_ = data->shown_contents;
if (!data->snapshot_image || data->snapshot_image->isNull()) {
snapshot_ = gfx::ImageSkia();
diff --git a/chromium/ui/arc/notification/arc_custom_notification_item.h b/chromium/ui/arc/notification/arc_custom_notification_item.h
index 3a671b9549a..f4ed4567b5d 100644
--- a/chromium/ui/arc/notification/arc_custom_notification_item.h
+++ b/chromium/ui/arc/notification/arc_custom_notification_item.h
@@ -53,11 +53,16 @@ class ArcCustomNotificationItem : public ArcNotificationItem {
mojom::ArcNotificationExpandState expand_state() const {
return expand_state_;
}
+ mojom::ArcNotificationShownContents shown_contents() const {
+ return shown_contents_;
+ }
private:
bool pinned_ = false;
mojom::ArcNotificationExpandState expand_state_ =
mojom::ArcNotificationExpandState::FIXED_SIZE;
+ mojom::ArcNotificationShownContents shown_contents_ =
+ mojom::ArcNotificationShownContents::CONTENTS_SHOWN;
gfx::ImageSkia snapshot_;
int window_ref_count_ = 0;
diff --git a/chromium/ui/arc/notification/arc_custom_notification_view.cc b/chromium/ui/arc/notification/arc_custom_notification_view.cc
index d640556c32c..0c8c2ea4043 100644
--- a/chromium/ui/arc/notification/arc_custom_notification_view.cc
+++ b/chromium/ui/arc/notification/arc_custom_notification_view.cc
@@ -13,12 +13,15 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/events/event_handler.h"
+#include "ui/gfx/animation/linear_animation.h"
+#include "ui/gfx/animation/tween.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/transform.h"
#include "ui/message_center/message_center_style.h"
#include "ui/message_center/views/custom_notification_view.h"
#include "ui/message_center/views/toast_contents_view.h"
#include "ui/strings/grit/ui_strings.h"
+#include "ui/views/background.h"
#include "ui/views/focus/focus_manager.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/painter.h"
@@ -28,6 +31,22 @@
namespace arc {
+namespace {
+
+// This value should be the same as the duration of reveal animation of
+// the settings view of an Android notification.
+constexpr int kBackgroundColorChangeDuration = 360;
+
+SkColor GetControlButtonBackgroundColor(
+ const mojom::ArcNotificationShownContents& shown_contents) {
+ if (shown_contents == mojom::ArcNotificationShownContents::CONTENTS_SHOWN)
+ return message_center::kControlButtonBackgroundColor;
+ else
+ return SK_ColorTRANSPARENT;
+}
+
+} // namespace
+
class ArcCustomNotificationView::EventForwarder : public ui::EventHandler {
public:
explicit EventForwarder(ArcCustomNotificationView* owner) : owner_(owner) {}
@@ -48,14 +67,17 @@ class ArcCustomNotificationView::EventForwarder : public ui::EventHandler {
ForwardScrollEvent(event->AsScrollEvent());
} else if (event->IsMouseWheelEvent()) {
ForwardMouseWheelEvent(event->AsMouseWheelEvent());
- } else if (!event->IsTouchEvent()) {
+ } else if (!event->IsTouchEvent() && event->type() != ui::ET_GESTURE_TAP) {
// TODO(yoshiki): Use a better tigger (eg. focusing EditText on
// notification) than clicking (crbug.com/697379).
if (event->type() == ui::ET_MOUSE_PRESSED)
owner_->ActivateToast();
- // Forward the rest events to |owner_| except touches because View
- // should no longer receive touch events. See View::OnTouchEvent.
+ // Forward the rest events to |owner_| except for:
+ // 1. Touches, because View should no longer receive touch events.
+ // See View::OnTouchEvent.
+ // 2. Tap gestures are handled on the Android side, so ignore them.
+ // See crbug.com/709911.
owner_->OnEvent(event);
}
}
@@ -186,7 +208,15 @@ class ArcCustomNotificationView::ContentViewDelegate
ArcCustomNotificationView::ControlButton::ControlButton(
ArcCustomNotificationView* owner)
- : message_center::PaddedButton(owner), owner_(owner) {}
+ : message_center::PaddedButton(owner), owner_(owner) {
+ if (owner_->item_) {
+ set_background(views::Background::CreateSolidBackground(
+ GetControlButtonBackgroundColor(owner_->item_->shown_contents())));
+ } else {
+ set_background(views::Background::CreateSolidBackground(
+ message_center::kControlButtonBackgroundColor));
+ }
+}
void ArcCustomNotificationView::ControlButton::OnFocus() {
message_center::PaddedButton::OnFocus();
@@ -237,6 +267,7 @@ ArcCustomNotificationView::CreateContentViewDelegate() {
void ArcCustomNotificationView::CreateCloseButton() {
DCHECK(control_buttons_view_);
+ DCHECK(item_);
close_button_ = base::MakeUnique<ControlButton>(this);
close_button_->SetImage(views::CustomButton::STATE_NORMAL,
@@ -251,6 +282,7 @@ void ArcCustomNotificationView::CreateCloseButton() {
void ArcCustomNotificationView::CreateSettingsButton() {
DCHECK(control_buttons_view_);
+ DCHECK(item_);
settings_button_ = new ControlButton(this);
settings_button_->SetImage(views::CustomButton::STATE_NORMAL,
@@ -262,11 +294,12 @@ void ArcCustomNotificationView::CreateSettingsButton() {
control_buttons_view_->AddChildView(settings_button_);
}
-void ArcCustomNotificationView::CreateFloatingControlButtons() {
+void ArcCustomNotificationView::MaybeCreateFloatingControlButtons() {
// Floating close button is a transient child of |surface_| and also part
// of the hosting widget's focus chain. It could only be created when both
- // are present.
- if (!surface_ || !GetWidget())
+ // are present. Further, if we are being destroyed (|item_| is null), don't
+ // create the control buttons.
+ if (!surface_ || !GetWidget() || !item_)
return;
// Creates the control_buttons_view_, which collects all control buttons into
@@ -275,9 +308,10 @@ void ArcCustomNotificationView::CreateFloatingControlButtons() {
control_buttons_view_->SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
- if (item_ && item_->IsOpeningSettingsSupported())
+ if (item_->IsOpeningSettingsSupported())
CreateSettingsButton();
- CreateCloseButton();
+ if (!item_->pinned())
+ CreateCloseButton();
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
@@ -317,7 +351,7 @@ void ArcCustomNotificationView::SetSurface(exo::NotificationSurface* surface) {
surface_->window()->AddObserver(this);
surface_->window()->AddPreTargetHandler(event_forwarder_.get());
- CreateFloatingControlButtons();
+ MaybeCreateFloatingControlButtons();
if (GetWidget())
AttachSurface();
@@ -342,9 +376,22 @@ void ArcCustomNotificationView::UpdatePreferredSize() {
}
void ArcCustomNotificationView::UpdateControlButtonsVisibility() {
- if (!surface_ || !floating_control_buttons_widget_)
+ if (!surface_)
return;
+ // TODO(edcourtney, yhanada): Creating the floating control widget here is not
+ // correct. This function may be called during the destruction of
+ // |floating_control_buttons_widget_|. This can lead to memory corruption.
+ // Rather than creating it here, we should fix the behaviour of OnMouseExited
+ // and OnMouseEntered for ARC notifications in MessageCenterView. See
+ // crbug.com/714587 and crbug.com/709862.
+ if (!floating_control_buttons_widget_) {
+ // This may update |floating_control_buttons_widget_|.
+ MaybeCreateFloatingControlButtons();
+ if (!floating_control_buttons_widget_)
+ return;
+ }
+
const bool target_visiblity =
IsMouseHovered() || (close_button_ && close_button_->HasFocus()) ||
(settings_button_ && settings_button_->HasFocus());
@@ -358,7 +405,8 @@ void ArcCustomNotificationView::UpdateControlButtonsVisibility() {
}
void ArcCustomNotificationView::UpdatePinnedState() {
- DCHECK(item_);
+ if (!item_)
+ return;
if (item_->pinned() && close_button_) {
control_buttons_view_->RemoveChildView(close_button_.get());
@@ -403,6 +451,30 @@ void ArcCustomNotificationView::AttachSurface() {
UpdatePinnedState();
}
+void ArcCustomNotificationView::StartControlButtonsColorAnimation() {
+ if (control_button_color_animation_)
+ control_button_color_animation_->End();
+ control_button_color_animation_.reset(new gfx::LinearAnimation(this));
+ control_button_color_animation_->SetDuration(kBackgroundColorChangeDuration);
+ control_button_color_animation_->Start();
+}
+
+bool ArcCustomNotificationView::ShouldUpdateControlButtonsColor() const {
+ // Don't update the control button color when we are about to be destroyed.
+ if (!item_)
+ return false;
+
+ if (settings_button_ &&
+ settings_button_->background()->get_color() !=
+ GetControlButtonBackgroundColor(item_->shown_contents()))
+ return true;
+ if (close_button_ &&
+ close_button_->background()->get_color() !=
+ GetControlButtonBackgroundColor(item_->shown_contents()))
+ return true;
+ return false;
+}
+
void ArcCustomNotificationView::ViewHierarchyChanged(
const views::View::ViewHierarchyChangedDetails& details) {
views::Widget* widget = GetWidget();
@@ -524,6 +596,11 @@ void ArcCustomNotificationView::OnFocus() {
}
void ArcCustomNotificationView::OnBlur() {
+ if (!parent()) {
+ // OnBlur may be called when this view is being removed.
+ return;
+ }
+
CHECK_EQ(message_center::CustomNotificationView::kViewClassName,
parent()->GetClassName());
@@ -553,9 +630,12 @@ bool ArcCustomNotificationView::OnMousePressed(const ui::MouseEvent& event) {
// All mouse clicks or touches should be sent to corresponding Android view
// because the surface is on this view, so receiving a mouse pressed event
// means the event is generated by automation API.
- if (event.IsOnlyLeftMouseButton() &&
+ // We can distinguish events from automation API by checking the target of the
+ // event because the target of all events generated by automation API is set
+ // to nullptr.
+ if (event.IsOnlyLeftMouseButton() && item_ &&
item_->expand_state() != mojom::ArcNotificationExpandState::FIXED_SIZE &&
- event.target() != surface_->window()) {
+ event.target() == nullptr) {
item_->ToggleExpansion();
return true;
}
@@ -602,6 +682,8 @@ void ArcCustomNotificationView::OnItemDestroying() {
void ArcCustomNotificationView::OnItemUpdated() {
UpdatePinnedState();
UpdateSnapshot();
+ if (ShouldUpdateControlButtonsColor())
+ StartControlButtonsColorAnimation();
}
void ArcCustomNotificationView::OnNotificationSurfaceAdded(
@@ -620,4 +702,36 @@ void ArcCustomNotificationView::OnNotificationSurfaceRemoved(
SetSurface(nullptr);
}
+void ArcCustomNotificationView::AnimationEnded(
+ const gfx::Animation* animation) {
+ DCHECK_EQ(animation, control_button_color_animation_.get());
+ control_button_color_animation_.reset();
+}
+
+void ArcCustomNotificationView::AnimationProgressed(
+ const gfx::Animation* animation) {
+ DCHECK_EQ(animation, control_button_color_animation_.get());
+
+ if (item_) {
+ const SkColor target =
+ GetControlButtonBackgroundColor(item_->shown_contents());
+ const SkColor start =
+ target == message_center::kControlButtonBackgroundColor
+ ? SK_ColorTRANSPARENT
+ : message_center::kControlButtonBackgroundColor;
+ const SkColor current_color = gfx::Tween::ColorValueBetween(
+ animation->GetCurrentValue(), start, target);
+ if (settings_button_) {
+ settings_button_->set_background(
+ views::Background::CreateSolidBackground(current_color));
+ settings_button_->SchedulePaint();
+ }
+ if (close_button_) {
+ close_button_->set_background(
+ views::Background::CreateSolidBackground(current_color));
+ close_button_->SchedulePaint();
+ }
+ }
+}
+
} // namespace arc
diff --git a/chromium/ui/arc/notification/arc_custom_notification_view.h b/chromium/ui/arc/notification/arc_custom_notification_view.h
index 2ecb192bf21..6af56841a2a 100644
--- a/chromium/ui/arc/notification/arc_custom_notification_view.h
+++ b/chromium/ui/arc/notification/arc_custom_notification_view.h
@@ -12,6 +12,7 @@
#include "ui/arc/notification/arc_custom_notification_item.h"
#include "ui/arc/notification/arc_notification_surface_manager.h"
#include "ui/aura/window_observer.h"
+#include "ui/gfx/animation/animation_delegate.h"
#include "ui/message_center/views/custom_notification_content_view_delegate.h"
#include "ui/message_center/views/padded_button.h"
#include "ui/views/controls/button/button.h"
@@ -21,6 +22,10 @@ namespace exo {
class NotificationSurface;
}
+namespace gfx {
+class LinearAnimation;
+}
+
namespace views {
class FocusTraversable;
class Widget;
@@ -33,7 +38,8 @@ class ArcCustomNotificationView
public views::ButtonListener,
public aura::WindowObserver,
public ArcCustomNotificationItem::Observer,
- public ArcNotificationSurfaceManager::Observer {
+ public ArcNotificationSurfaceManager::Observer,
+ public gfx::AnimationDelegate {
public:
explicit ArcCustomNotificationView(ArcCustomNotificationItem* item);
~ArcCustomNotificationView() override;
@@ -64,7 +70,7 @@ class ArcCustomNotificationView
void CreateCloseButton();
void CreateSettingsButton();
- void CreateFloatingControlButtons();
+ void MaybeCreateFloatingControlButtons();
void SetSurface(exo::NotificationSurface* surface);
void UpdatePreferredSize();
void UpdateControlButtonsVisibility();
@@ -72,6 +78,8 @@ class ArcCustomNotificationView
void UpdateSnapshot();
void AttachSurface();
void ActivateToast();
+ void StartControlButtonsColorAnimation();
+ bool ShouldUpdateControlButtonsColor() const;
// views::NativeViewHost
void ViewHierarchyChanged(
@@ -104,6 +112,12 @@ class ArcCustomNotificationView
void OnNotificationSurfaceAdded(exo::NotificationSurface* surface) override;
void OnNotificationSurfaceRemoved(exo::NotificationSurface* surface) override;
+ // AnimationDelegate
+ void AnimationEnded(const gfx::Animation* animation) override;
+ void AnimationProgressed(const gfx::Animation* animation) override;
+
+ // If |item_| is null, we may be about to be destroyed. In this case,
+ // we have to be careful about what we do.
ArcCustomNotificationItem* item_ = nullptr;
exo::NotificationSurface* surface_ = nullptr;
@@ -133,6 +147,8 @@ class ArcCustomNotificationView
// Protects from call loops between Layout and OnWindowBoundsChanged.
bool in_layout_ = false;
+ std::unique_ptr<gfx::LinearAnimation> control_button_color_animation_;
+
DISALLOW_COPY_AND_ASSIGN(ArcCustomNotificationView);
};
diff --git a/chromium/ui/events/ozone/evdev/touch_evdev_types.h b/chromium/ui/events/ozone/evdev/touch_evdev_types.h
index 55699aace92..cd54f749dde 100644
--- a/chromium/ui/events/ozone/evdev/touch_evdev_types.h
+++ b/chromium/ui/events/ozone/evdev/touch_evdev_types.h
@@ -48,6 +48,8 @@ struct EVENTS_OZONE_EVDEV_EXPORT InProgressTouchEvdev {
float radius_y = 0;
float pressure = 0;
int tool_code = 0;
+ float tilt_x = 0;
+ float tilt_y = 0;
ui::EventPointerType reported_tool_type =
ui::EventPointerType::POINTER_TYPE_TOUCH;
diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc
index 8f16691c1cf..5ef3467c2fd 100644
--- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc
+++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.cc
@@ -46,6 +46,11 @@ struct TouchCalibration {
int bezel_bottom;
};
+// Convert tilt from [min, min + num_values) to [-90deg, +90deg)
+float ScaleTilt(int value, int min_value, int num_values) {
+ return 180.f * (value - min_value) / num_values - 90.f;
+}
+
void GetTouchCalibration(TouchCalibration* cal) {
std::vector<std::string> parts = base::SplitString(
base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
@@ -139,6 +144,11 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) {
x_num_tuxels_ = info.GetAbsMaximum(ABS_X) - x_min_tuxels_ + 1;
y_min_tuxels_ = info.GetAbsMinimum(ABS_Y);
y_num_tuxels_ = info.GetAbsMaximum(ABS_Y) - y_min_tuxels_ + 1;
+ tilt_x_min_ = info.GetAbsMinimum(ABS_TILT_X);
+ tilt_y_min_ = info.GetAbsMinimum(ABS_TILT_Y);
+ tilt_x_range_ = info.GetAbsMaximum(ABS_TILT_X) - tilt_x_min_ + 1;
+ tilt_y_range_ = info.GetAbsMaximum(ABS_TILT_Y) - tilt_y_min_ + 1;
+
touch_points_ = 1;
major_max_ = 0;
current_slot_ = 0;
@@ -202,6 +212,8 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) {
events_[0].radius_y = 0;
events_[0].pressure = 0;
events_[0].tool_code = 0;
+ events_[0].tilt_x = 0;
+ events_[0].tilt_y = 0;
events_[0].cancelled = false;
}
if (cancelled_state)
@@ -412,6 +424,16 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) {
return;
}
break;
+ case ABS_TILT_X:
+ if (!has_mt_) {
+ events_[0].tilt_x = ScaleTilt(input.value, tilt_x_min_, tilt_x_range_);
+ }
+ break;
+ case ABS_TILT_Y:
+ if (!has_mt_) {
+ events_[0].tilt_y = ScaleTilt(input.value, tilt_y_min_, tilt_y_range_);
+ }
+ break;
default:
DVLOG(5) << "unhandled code for EV_ABS: " << input.code;
return;
@@ -471,7 +493,7 @@ void TouchEventConverterEvdev::ReportTouchEvent(
base::TimeTicks timestamp) {
ui::PointerDetails details(event.reported_tool_type, event.radius_x,
event.radius_y, event.pressure,
- /* tilt_x */ 0.0f, /* tilt_y */ 0.0f);
+ event.tilt_x, event.tilt_y);
dispatcher_->DispatchTouchEvent(
TouchEventParams(input_device_.id, event.slot, event_type,
gfx::PointF(event.x, event.y), details, timestamp));
diff --git a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h
index 8ae2de71d94..3ad2a364902 100644
--- a/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h
+++ b/chromium/ui/events/ozone/evdev/touch_event_converter_evdev.h
@@ -112,6 +112,12 @@ class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev
int pressure_min_;
int pressure_max_; // Used to normalize pressure values.
+ // Input range for tilt.
+ int tilt_x_min_;
+ int tilt_x_range_;
+ int tilt_y_min_;
+ int tilt_y_range_;
+
// Input range for x-axis.
float x_min_tuxels_;
float x_num_tuxels_;
diff --git a/chromium/ui/message_center/message_center_impl.cc b/chromium/ui/message_center/message_center_impl.cc
index 4e90822a60c..982611a8d3b 100644
--- a/chromium/ui/message_center/message_center_impl.cc
+++ b/chromium/ui/message_center/message_center_impl.cc
@@ -795,10 +795,13 @@ void MessageCenterImpl::ClickOnNotificationButton(const std::string& id,
void MessageCenterImpl::ClickOnSettingsButton(const std::string& id) {
scoped_refptr<NotificationDelegate> delegate =
notification_list_->GetNotificationDelegate(id);
+
+ bool handled_by_delegate = false;
if (delegate.get())
- delegate->SettingsClick();
+ handled_by_delegate = delegate->SettingsClick();
+
for (auto& observer : observer_list_)
- observer.OnNotificationSettingsClicked();
+ observer.OnNotificationSettingsClicked(handled_by_delegate);
}
void MessageCenterImpl::MarkSinglePopupAsShown(const std::string& id,
diff --git a/chromium/ui/message_center/message_center_observer.h b/chromium/ui/message_center/message_center_observer.h
index e6315ccb929..e738bcb910d 100644
--- a/chromium/ui/message_center/message_center_observer.h
+++ b/chromium/ui/message_center/message_center_observer.h
@@ -40,8 +40,9 @@ class MESSAGE_CENTER_EXPORT MessageCenterObserver {
virtual void OnNotificationButtonClicked(const std::string& notification_id,
int button_index) {}
- // Called when notification settings button is clicked.
- virtual void OnNotificationSettingsClicked() {}
+ // Called when notification settings button is clicked. The |handled| argument
+ // indicates whether the notification delegate already handled the operation.
+ virtual void OnNotificationSettingsClicked(bool handled) {}
// Called when the notification associated with |notification_id| is actually
// displayed.
diff --git a/chromium/ui/message_center/message_center_style.h b/chromium/ui/message_center/message_center_style.h
index e3e245aea3d..289903d35d2 100644
--- a/chromium/ui/message_center/message_center_style.h
+++ b/chromium/ui/message_center/message_center_style.h
@@ -96,6 +96,9 @@ const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
const SkColor kSmallImageMaskForegroundColor = SK_ColorWHITE;
// Background of small icon image.
const SkColor kSmallImageMaskBackgroundColor = SkColorSetRGB(0xa3, 0xa3, 0xa3);
+// Background of the close button and the settings button
+const SkColor kControlButtonBackgroundColor =
+ SkColorSetA(SK_ColorWHITE, 0.9 * 0xff);
// Limits.
diff --git a/chromium/ui/message_center/message_center_tray.cc b/chromium/ui/message_center/message_center_tray.cc
index 69cdd6e4fa5..9d368b0d430 100644
--- a/chromium/ui/message_center/message_center_tray.cc
+++ b/chromium/ui/message_center/message_center_tray.cc
@@ -235,6 +235,11 @@ void MessageCenterTray::OnNotificationButtonClicked(
OnMessageCenterChanged();
}
+void MessageCenterTray::OnNotificationSettingsClicked(bool handled) {
+ if (!handled)
+ ShowNotifierSettingsBubble();
+}
+
void MessageCenterTray::OnNotificationDisplayed(
const std::string& notification_id,
const DisplaySource source) {
diff --git a/chromium/ui/message_center/message_center_tray.h b/chromium/ui/message_center/message_center_tray.h
index 166f3f2b664..86d35f745be 100644
--- a/chromium/ui/message_center/message_center_tray.h
+++ b/chromium/ui/message_center/message_center_tray.h
@@ -77,6 +77,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver {
void OnNotificationClicked(const std::string& notification_id) override;
void OnNotificationButtonClicked(const std::string& notification_id,
int button_index) override;
+ void OnNotificationSettingsClicked(bool handled) override;
void OnNotificationDisplayed(const std::string& notification_id,
const DisplaySource source) override;
void OnQuietModeChanged(bool in_quiet_mode) override;
diff --git a/chromium/ui/message_center/notification_delegate.cc b/chromium/ui/message_center/notification_delegate.cc
index 70675233293..de8b60de442 100644
--- a/chromium/ui/message_center/notification_delegate.cc
+++ b/chromium/ui/message_center/notification_delegate.cc
@@ -25,7 +25,9 @@ void NotificationDelegate::ButtonClickWithReply(int button_index,
NOTIMPLEMENTED();
}
-void NotificationDelegate::SettingsClick() {}
+bool NotificationDelegate::SettingsClick() {
+ return false;
+}
bool NotificationDelegate::ShouldDisplaySettingsButton() {
return false;
diff --git a/chromium/ui/message_center/notification_delegate.h b/chromium/ui/message_center/notification_delegate.h
index b9432fb12bc..a66d3760e69 100644
--- a/chromium/ui/message_center/notification_delegate.h
+++ b/chromium/ui/message_center/notification_delegate.h
@@ -49,7 +49,8 @@ class MESSAGE_CENTER_EXPORT NotificationDelegate
const base::string16& reply);
// To be called when the user clicks the settings button in a notification.
- virtual void SettingsClick();
+ // Returns whether the settings click was handled by the delegate.
+ virtual bool SettingsClick();
// To be called in order to detect if a settings button should be displayed.
virtual bool ShouldDisplaySettingsButton();
diff --git a/chromium/ui/message_center/popup_timer.h b/chromium/ui/message_center/popup_timer.h
index 494e360b88b..8137d3d2fe9 100644
--- a/chromium/ui/message_center/popup_timer.h
+++ b/chromium/ui/message_center/popup_timer.h
@@ -41,6 +41,9 @@ class PopupTimer {
// subsequent calls to Start the timer will continue where it left off.
void Pause();
+ // Returns whether the underlying timer is running or not.
+ bool IsRunning() { return timer_->IsRunning(); }
+
private:
// Notification ID for which this timer applies.
const std::string id_;
diff --git a/chromium/ui/message_center/popup_timers_controller.cc b/chromium/ui/message_center/popup_timers_controller.cc
index aae50daf81b..a967681d1f0 100644
--- a/chromium/ui/message_center/popup_timers_controller.cc
+++ b/chromium/ui/message_center/popup_timers_controller.cc
@@ -100,8 +100,20 @@ void PopupTimersController::OnNotificationUpdated(const std::string& id) {
return;
}
+ auto timer = popup_timers_.find(id);
+ // The timer must already have been started and not be running. Relies on
+ // the invariant that |popup_timers_| only contains timers that have been
+ // started.
+ bool was_paused = timer != popup_timers_.end() && !timer->second->IsRunning();
CancelTimer(id);
StartTimer(id, GetTimeoutForNotification(*iter));
+
+ // If a timer was paused before, pause it afterwards as well.
+ // See crbug.com/710298
+ if (was_paused) {
+ auto timer = popup_timers_.find(id);
+ timer->second->Pause();
+ }
}
void PopupTimersController::OnNotificationRemoved(const std::string& id,
diff --git a/chromium/ui/message_center/views/message_center_view.cc b/chromium/ui/message_center/views/message_center_view.cc
index 375d42be82d..defba470f0d 100644
--- a/chromium/ui/message_center/views/message_center_view.cc
+++ b/chromium/ui/message_center/views/message_center_view.cc
@@ -105,6 +105,7 @@ MessageCenterView::MessageCenterView(MessageCenter* message_center,
scroller_->layer()->SetMasksToBounds(true);
message_list_view_.reset(new MessageListView());
+ message_list_view_->set_scroller(scroller_);
message_list_view_->set_owned_by_client();
message_list_view_->AddObserver(this);
@@ -176,7 +177,7 @@ void MessageCenterView::ClearAllClosableNotifications() {
if (is_closing_)
return;
- is_clearing_ = true;
+ is_clearing_all_notifications_ = true;
UpdateButtonBarStatus();
SetViewHierarchyEnabled(scroller_, false);
message_list_view_->ClearAllClosableNotifications(
@@ -184,7 +185,7 @@ void MessageCenterView::ClearAllClosableNotifications() {
}
void MessageCenterView::OnAllNotificationsCleared() {
- is_clearing_ = false;
+ is_clearing_all_notifications_ = false;
SetViewHierarchyEnabled(scroller_, true);
button_bar_->SetCloseAllButtonEnabled(false);
@@ -395,6 +396,7 @@ bool MessageCenterView::SetRepositionTarget() {
if (message_list_view_->IsMouseHovered()) {
for (const auto& hover_id_view : notification_views_) {
MessageView* hover_view = hover_id_view.second;
+
if (hover_view->IsMouseHovered()) {
message_list_view_->SetRepositionTarget(hover_view->bounds());
return true;
@@ -405,6 +407,8 @@ bool MessageCenterView::SetRepositionTarget() {
}
void MessageCenterView::OnNotificationUpdated(const std::string& id) {
+ // TODO(edcourtney): We may be able to remove this, since |UpdateNotification|
+ // checks it anyway.
NotificationViewsMap::const_iterator view_iter = notification_views_.find(id);
if (view_iter == notification_views_.end())
return;
@@ -414,30 +418,7 @@ void MessageCenterView::OnNotificationUpdated(const std::string& id) {
if (!SetRepositionTarget())
message_list_view_->ResetRepositionSession();
- // TODO(dimich): add MessageCenter::GetVisibleNotificationById(id)
- MessageView* view = view_iter->second;
- const NotificationList::Notifications& notifications =
- message_center_->GetVisibleNotifications();
- for (NotificationList::Notifications::const_iterator iter =
- notifications.begin(); iter != notifications.end(); ++iter) {
- if ((*iter)->id() == id) {
- int old_width = view->width();
- int old_height = view->height();
- bool old_pinned = view->IsPinned();
- message_list_view_->UpdateNotification(view, **iter);
- if (view->GetHeightForWidth(old_width) != old_height) {
- Update(true /* animate */);
- } else if (view->IsPinned() != old_pinned) {
- // Animate flag is false, since the pinned flag transition doesn't need
- // animation.
- Update(false /* animate */);
- }
- break;
- }
- }
-
- // Notify accessibility that the contents have changed.
- view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+ UpdateNotification(id);
}
void MessageCenterView::OnLockedStateChanged(bool locked) {
@@ -479,7 +460,14 @@ void MessageCenterView::ClickOnSettingsButton(
void MessageCenterView::UpdateNotificationSize(
const std::string& notification_id) {
- OnNotificationUpdated(notification_id);
+ // TODO(edcourtney, yoshiki): We don't call OnNotificationUpdated directly
+ // because it resets the reposition session, which can end up deleting
+ // notification items when it cancels animations. This causes problems for
+ // ARC notifications. See crbug.com/714493. OnNotificationUpdated should not
+ // have to consider the reposition session, but OnMouseEntered and
+ // OnMouseExited don't work properly for ARC notifications at the moment.
+ // See crbug.com/714587.
+ UpdateNotification(notification_id);
}
void MessageCenterView::AnimationEnded(const gfx::Animation* animation) {
@@ -637,7 +625,7 @@ void MessageCenterView::SetVisibilityMode(Mode mode, bool animate) {
void MessageCenterView::UpdateButtonBarStatus() {
// Disables all buttons during animation of cleaning of all notifications.
- if (is_clearing_) {
+ if (is_clearing_all_notifications_) {
button_bar_->SetSettingsAndQuietModeButtonsEnabled(false);
button_bar_->SetCloseAllButtonEnabled(false);
return;
@@ -671,4 +659,38 @@ void MessageCenterView::SetNotificationViewForTest(MessageView* view) {
message_list_view_->AddNotificationAt(view, 0);
}
+void MessageCenterView::UpdateNotification(const std::string& id) {
+ // TODO(edcourtney, yoshiki): This check seems like it should not be needed.
+ // Investigate what circumstances (if any) trigger it.
+ NotificationViewsMap::const_iterator view_iter = notification_views_.find(id);
+ if (view_iter == notification_views_.end())
+ return;
+
+ // TODO(dimich): add MessageCenter::GetVisibleNotificationById(id)
+ MessageView* view = view_iter->second;
+ const NotificationList::Notifications& notifications =
+ message_center_->GetVisibleNotifications();
+ for (NotificationList::Notifications::const_iterator iter =
+ notifications.begin();
+ iter != notifications.end(); ++iter) {
+ if ((*iter)->id() == id) {
+ int old_width = view->width();
+ int old_height = view->height();
+ bool old_pinned = view->IsPinned();
+ message_list_view_->UpdateNotification(view, **iter);
+ if (view->GetHeightForWidth(old_width) != old_height) {
+ Update(true /* animate */);
+ } else if (view->IsPinned() != old_pinned) {
+ // Animate flag is false, since the pinned flag transition doesn't need
+ // animation.
+ Update(false /* animate */);
+ }
+ break;
+ }
+ }
+
+ // Notify accessibility that the contents have changed.
+ view->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
+}
+
} // namespace message_center
diff --git a/chromium/ui/message_center/views/message_center_view.h b/chromium/ui/message_center/views/message_center_view.h
index 60f9d73d8fb..8ff0637968b 100644
--- a/chromium/ui/message_center/views/message_center_view.h
+++ b/chromium/ui/message_center/views/message_center_view.h
@@ -122,6 +122,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterView
void UpdateButtonBarStatus();
void EnableCloseAllIfAppropriate();
void SetNotificationViewForTest(MessageView* view);
+ void UpdateNotification(const std::string& notification_id);
MessageCenter* message_center_; // Weak reference.
MessageCenterTray* tray_; // Weak reference.
@@ -155,7 +156,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterView
// ignored.
bool is_closing_;
- bool is_clearing_ = false;
+ bool is_clearing_all_notifications_ = false;
bool is_locked_ = false;
// Current view mode. During animation, it is the target mode.
diff --git a/chromium/ui/message_center/views/message_center_view_unittest.cc b/chromium/ui/message_center/views/message_center_view_unittest.cc
index 4f8a0a16942..35d2cfe347b 100644
--- a/chromium/ui/message_center/views/message_center_view_unittest.cc
+++ b/chromium/ui/message_center/views/message_center_view_unittest.cc
@@ -126,6 +126,8 @@ class MockMessageCenterView : public MessageCenterView {
bool SetRepositionTarget() override;
+ void PreferredSizeChanged() override;
+
private:
DISALLOW_COPY_AND_ASSIGN(MockMessageCenterView);
};
@@ -146,6 +148,11 @@ bool MockMessageCenterView::SetRepositionTarget() {
return true;
}
+void MockMessageCenterView::PreferredSizeChanged() {
+ SetSize(GetPreferredSize());
+ MessageCenterView::PreferredSizeChanged();
+}
+
/* Test fixture ***************************************************************/
class MessageCenterViewTest : public views::ViewsTestBase,
@@ -247,9 +254,9 @@ void MessageCenterViewTest::SetUp() {
// Then create a new MockMessageCenterView with that single notification.
message_center_view_.reset(
- new MockMessageCenterView(message_center_.get(), NULL, 100, false));
+ new MockMessageCenterView(message_center_.get(), NULL, 600, false));
GetMessageListView()->quit_message_loop_after_animation_for_test_ = true;
- GetMessageCenterView()->SetBounds(0, 0, 380, 600);
+ GetMessageCenterView()->SetBounds(0, 0, 380, 100);
message_center_view_->SetNotifications(notifications);
message_center_view_->set_owned_by_client();
@@ -560,6 +567,7 @@ TEST_F(MessageCenterViewTest, SizeAfterUpdateOfRepositionTarget) {
}
TEST_F(MessageCenterViewTest, SizeAfterRemove) {
+ int original_height = GetMessageListView()->height();
EXPECT_EQ(2, GetMessageListView()->child_count());
RemoveNotification(kNotificationId1, false);
@@ -569,13 +577,9 @@ TEST_F(MessageCenterViewTest, SizeAfterRemove) {
EXPECT_EQ(1, GetMessageListView()->child_count());
- int width =
- GetMessageListView()->width() - GetMessageListView()->GetInsets().width();
EXPECT_FALSE(GetNotificationView(kNotificationId1));
EXPECT_TRUE(GetNotificationView(kNotificationId2));
- EXPECT_EQ(GetMessageListView()->height(),
- GetNotificationView(kNotificationId2)->GetHeightForWidth(width) +
- GetMessageListView()->GetInsets().height());
+ EXPECT_EQ(GetMessageListView()->height(), original_height);
}
TEST_F(MessageCenterViewTest, PositionAfterUpdate) {
@@ -620,8 +624,6 @@ TEST_F(MessageCenterViewTest, PositionAfterRemove) {
int previous_height = GetMessageListView()->height();
int previous_notification2_y =
GetNotificationView(kNotificationId2)->bounds().y();
- int previous_notification2_height =
- GetNotificationView(kNotificationId2)->bounds().height();
EXPECT_EQ(2, GetMessageListView()->child_count());
RemoveNotification(kNotificationId2, false);
@@ -647,10 +649,8 @@ TEST_F(MessageCenterViewTest, PositionAfterRemove) {
// target in the message list.
FireOnMouseExitedEvent();
- // The height should shrink from the height of the removed notification 2.
- EXPECT_EQ(previous_height - previous_notification2_height -
- (kMarginBetweenItems - MessageView::GetShadowInsets().bottom()),
- GetMessageListView()->height());
+ // The height should be kept even after the cursor moved out.
+ EXPECT_EQ(previous_height, GetMessageListView()->height());
}
TEST_F(MessageCenterViewTest, CloseButton) {
diff --git a/chromium/ui/message_center/views/message_list_view.cc b/chromium/ui/message_center/views/message_list_view.cc
index 92d5d7fd7ed..06cce39c28a 100644
--- a/chromium/ui/message_center/views/message_list_view.cc
+++ b/chromium/ui/message_center/views/message_list_view.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <algorithm>
+
#include "base/command_line.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
@@ -100,6 +102,20 @@ void MessageListView::AddNotificationAt(MessageView* view, int index) {
void MessageListView::RemoveNotification(MessageView* view) {
DCHECK_EQ(view->parent(), this);
+ // TODO(yhananda): We should consider consolidating clearing_all_views_,
+ // deleting_views_ and deleted_when_done_.
+ if (std::find(clearing_all_views_.begin(), clearing_all_views_.end(), view) !=
+ clearing_all_views_.end() ||
+ deleting_views_.find(view) != deleting_views_.end() ||
+ deleted_when_done_.find(view) != deleted_when_done_.end()) {
+ // Let's skip deleting the view if it's already scheduled for deleting.
+ // Even if we check clearing_all_views_ here, we actualy have no idea
+ // whether the view is due to be removed or not because it could be in its
+ // animation before removal.
+ // In short, we could delete the view twice even if we check these three
+ // lists.
+ return;
+ }
if (GetContentsBounds().IsEmpty()) {
delete view;
@@ -120,6 +136,11 @@ void MessageListView::RemoveNotification(MessageView* view) {
void MessageListView::UpdateNotification(MessageView* view,
const Notification& notification) {
+ // Skip updating the notification being cleared
+ if (std::find(clearing_all_views_.begin(), clearing_all_views_.end(), view) !=
+ clearing_all_views_.end())
+ return;
+
int index = GetIndexOf(view);
DCHECK_LE(0, index); // GetIndexOf is negative if not a child.
@@ -175,9 +196,41 @@ void MessageListView::ReorderChildLayers(ui::Layer* parent_layer) {
}
}
+void MessageListView::UpdateFixedHeight(int requested_height,
+ bool prevent_scroll) {
+ int previous_fixed_height = fixed_height_;
+ int min_height;
+
+ // When the |prevent_scroll| flag is set, we use |fixed_height_|, which is the
+ // bottom position of the visible rect. It's to keep the current visible
+ // window, in other words, not to be scrolled, when the visible rect has a
+ // blank area at the bottom.
+ // Otherwise (in else block), we use the height of the visible rect to make
+ // the height of the message list as small as possible.
+ if (prevent_scroll) {
+ // TODO(yoshiki): Consider the case with scrolling. If the message center
+ // has scrollbar and its height is maximum, we may not need to keep the
+ // height of the list in the scroll view.
+ min_height = fixed_height_;
+ } else {
+ if (scroller_) {
+ gfx::Rect visible_rect = scroller_->GetVisibleRect();
+ min_height = visible_rect.height();
+ } else {
+ // Fallback for testing.
+ min_height = fixed_height_;
+ }
+ }
+ fixed_height_ = std::max(min_height, requested_height);
+
+ if (previous_fixed_height != fixed_height_) {
+ PreferredSizeChanged();
+ }
+}
+
void MessageListView::SetRepositionTarget(const gfx::Rect& target) {
reposition_top_ = std::max(target.y(), 0);
- fixed_height_ = GetHeightForWidth(width());
+ UpdateFixedHeight(GetHeightForWidth(width()), false);
}
void MessageListView::ResetRepositionSession() {
@@ -195,7 +248,8 @@ void MessageListView::ResetRepositionSession() {
}
reposition_top_ = -1;
- fixed_height_ = 0;
+
+ UpdateFixedHeight(fixed_height_, false);
}
void MessageListView::ClearAllClosableNotifications(
@@ -209,6 +263,15 @@ void MessageListView::ClearAllClosableNotifications(
continue;
if (child->IsPinned())
continue;
+ if (deleting_views_.find(child) != deleting_views_.end() ||
+ deleted_when_done_.find(child) != deleted_when_done_.end()) {
+ // We don't check clearing_all_views_ here, so this can lead to a
+ // notification being deleted twice. Even if we do check it, there is a
+ // problem similar to the problem in RemoveNotification(), it could be
+ // currently in its animation before removal, and we could similarly
+ // delete it twice. This is a bug.
+ continue;
+ }
clearing_all_views_.push_back(child);
}
if (clearing_all_views_.empty()) {
@@ -265,7 +328,9 @@ bool MessageListView::IsValidChild(const views::View* child) const {
deleting_views_.find(const_cast<views::View*>(child)) ==
deleting_views_.end() &&
deleted_when_done_.find(const_cast<views::View*>(child)) ==
- deleted_when_done_.end();
+ deleted_when_done_.end() &&
+ std::find(clearing_all_views_.begin(), clearing_all_views_.end(),
+ child) == clearing_all_views_.end();
}
void MessageListView::DoUpdateIfPossible() {
@@ -279,7 +344,8 @@ void MessageListView::DoUpdateIfPossible() {
}
if (!clearing_all_views_.empty()) {
- AnimateClearingOneNotification();
+ if (!clear_all_started_)
+ AnimateClearingOneNotification();
return;
}
@@ -290,7 +356,7 @@ void MessageListView::DoUpdateIfPossible() {
switches::kEnableMessageCenterAlwaysScrollUpUponNotificationRemoval))
AnimateNotificationsBelowTarget();
else
- AnimateNotificationsAboveTarget();
+ AnimateNotifications();
adding_views_.clear();
deleting_views_.clear();
@@ -299,6 +365,7 @@ void MessageListView::DoUpdateIfPossible() {
GetWidget()->SynthesizeMouseMoveEvent();
}
+// TODO(yoshiki): Remove this method. It is no longer maintained.
void MessageListView::AnimateNotificationsBelowTarget() {
int target_index = -1;
int padding = kMarginBetweenItems - MessageView::GetShadowInsets().bottom();
@@ -362,11 +429,17 @@ std::vector<int> MessageListView::ComputeRepositionOffsets(
vertical_gap_to_target_from_top += heights[i] + padding;
}
- // If the calculated length is changed from |repositon_top_|, it means that
- // some of items above the target are updated and their height are changed.
+ // If the calculated length is expanded from |repositon_top_|, it means that
+ // some of items above the target are updated and their height increased.
// Adjust the vertical length above the target.
- fixed_height_ -= reposition_top_ - vertical_gap_to_target_from_top;
- reposition_top_ = vertical_gap_to_target_from_top;
+ if (vertical_gap_to_target_from_top > reposition_top_) {
+ fixed_height_ += vertical_gap_to_target_from_top - reposition_top_;
+ reposition_top_ = vertical_gap_to_target_from_top;
+ }
+
+ // TODO(yoshiki): Scroll the parent container to keep the physical position
+ // of the target notification when the scrolling is caused by a size change
+ // of notification above.
std::vector<int> positions;
positions.reserve(heights.size());
@@ -377,7 +450,8 @@ std::vector<int> MessageListView::ComputeRepositionOffsets(
if (!deleting[i])
y += heights[i] + padding;
}
- DCHECK_EQ(y, reposition_top_);
+ DCHECK_EQ(y, vertical_gap_to_target_from_top);
+ DCHECK_LE(y, reposition_top_);
// Match the top with |reposition_top_|.
y = reposition_top_;
@@ -387,15 +461,18 @@ std::vector<int> MessageListView::ComputeRepositionOffsets(
if (!deleting[i])
y += heights[i] + padding;
}
- // If the target view, or any views below it expand they might exceed
- // |fixed_height_|. Rather than letting them push out the bottom and be
- // clipped, instead increase |fixed_height_|.
- fixed_height_ = std::max(fixed_height_, y - padding + GetInsets().bottom());
+
+ // Update the fixed height. |requested_height| is the height to have all
+ // notifications in the list and to keep the vertical position of the target
+ // notification. It may not just a total of all the notification heights if
+ // the target exists.
+ int requested_height = y - padding + GetInsets().bottom();
+ UpdateFixedHeight(requested_height, true);
return positions;
}
-void MessageListView::AnimateNotificationsAboveTarget() {
+void MessageListView::AnimateNotifications() {
int target_index = -1;
int padding = kMarginBetweenItems - MessageView::GetShadowInsets().bottom();
gfx::Rect child_area = GetContentsBounds();
@@ -410,15 +487,6 @@ void MessageListView::AnimateNotificationsAboveTarget() {
break;
}
}
- // If no items are below |reposition_top_|, use the last item as the target.
- if (target_index == -1) {
- target_index = child_count() - 1;
- for (; target_index != -1; target_index--) {
- views::View* target_view = child_at(target_index);
- if (deleting_views_.find(target_view) == deleting_views_.end())
- break;
- }
- }
}
if (target_index != -1) {
@@ -434,7 +502,9 @@ void MessageListView::AnimateNotificationsAboveTarget() {
std::vector<int> ys =
ComputeRepositionOffsets(heights, deleting, target_index, padding);
for (int i = 0; i < child_count(); ++i) {
- AnimateChild(child_at(i), ys[i], heights[i], true /* animate_on_move */);
+ bool above_target = (i < target_index);
+ AnimateChild(child_at(i), ys[i], heights[i],
+ !above_target /* animate_on_move */);
}
} else {
// Layout all the items.
@@ -445,7 +515,8 @@ void MessageListView::AnimateNotificationsAboveTarget() {
if (AnimateChild(child, y, height, true))
y += height + padding;
}
- fixed_height_ = y - padding + GetInsets().bottom();
+ int new_height = y - padding + GetInsets().bottom();
+ UpdateFixedHeight(new_height, false);
}
}
diff --git a/chromium/ui/message_center/views/message_list_view.h b/chromium/ui/message_center/views/message_list_view.h
index 1104b47cfeb..843991e8573 100644
--- a/chromium/ui/message_center/views/message_list_view.h
+++ b/chromium/ui/message_center/views/message_list_view.h
@@ -17,6 +17,7 @@
#include "ui/message_center/notification.h"
#include "ui/views/animation/bounds_animator.h"
#include "ui/views/animation/bounds_animator_observer.h"
+#include "ui/views/controls/scroll_view.h"
#include "ui/views/view.h"
namespace ui {
@@ -55,6 +56,8 @@ class MESSAGE_CENTER_EXPORT MessageListView
void SetRepositionTargetForTest(
const gfx::Rect& target_rect);
+ void set_scroller(views::ScrollView* scroller) { scroller_ = scroller; }
+
protected:
// Overridden from views::View.
void Layout() override;
@@ -77,9 +80,9 @@ class MESSAGE_CENTER_EXPORT MessageListView
// Animates all notifications below target upwards to align with the top of
// the last closed notification.
void AnimateNotificationsBelowTarget();
- // Animates all notifications above target downwards to align with the top of
- // the last closed notification.
- void AnimateNotificationsAboveTarget();
+ // Animates all notifications to align with the top of the last closed
+ // notification.
+ void AnimateNotifications();
// Computes reposition offsets for |AnimateNotificationsAboveTarget|.
std::vector<int> ComputeRepositionOffsets(const std::vector<int>& heights,
const std::vector<bool>& deleting,
@@ -93,6 +96,10 @@ class MESSAGE_CENTER_EXPORT MessageListView
int height,
bool animate_even_on_move);
+ // Calculate the new fixed height and update with it. |requested_height|
+ // is the minimum height, and actual fixed height should be more than it.
+ void UpdateFixedHeight(int requested_height, bool prevent_scroll);
+
// Animate clearing one notification.
void AnimateClearingOneNotification();
@@ -110,6 +117,8 @@ class MESSAGE_CENTER_EXPORT MessageListView
std::list<views::View*> clearing_all_views_;
views::BoundsAnimator animator_;
+ views::ScrollView* scroller_ = nullptr;
+
// If true, the message loop will be quitted after the animation finishes.
// This is just for tests and has no setter.
bool quit_message_loop_after_animation_for_test_;
diff --git a/chromium/ui/message_center/views/message_list_view_unittest.cc b/chromium/ui/message_center/views/message_list_view_unittest.cc
index dd534b22a07..d6054ef3a65 100644
--- a/chromium/ui/message_center/views/message_list_view_unittest.cc
+++ b/chromium/ui/message_center/views/message_list_view_unittest.cc
@@ -220,148 +220,148 @@ TEST_F(MessageListViewTest, RepositionOffsets) {
EXPECT_EQ(4 + insets.height() + 1, fixed_height());
EXPECT_EQ(1 + top + 1, reposition_top());
- // Notification above shrinks. |reposition_top| should remain at the same
- // offset from the bottom.
+ // Notification above shrinks. The message center keeps its height.
+ // All notifications should remain at the same position from the top.
fixed_height() = 5 + insets.height();
reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(4 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(5 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification above is being deleted. |reposition_top| should remain at the
- // same offset from the bottom.
- fixed_height() = 4 + insets.height();
- reposition_top() = 1 + top;
+ // same place.
+ fixed_height() = 5 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {true, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top, top + 1, top + 2));
- EXPECT_EQ(4 + insets.height() - 1, fixed_height());
- EXPECT_EQ(1 + top - 1, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(5 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification above is inserted. |reposition_top| should remain at the
// same offset from the bottom.
- fixed_height() = 3 + insets.height();
- reposition_top() = top;
+ fixed_height() = 5 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(3 + insets.height() + 1, fixed_height());
- EXPECT_EQ(top + 1, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(5 + insets.height(), fixed_height());
+ EXPECT_EQ(top + 2, reposition_top());
// Target notification grows with no free space. |reposition_top| is forced to
// change its offset from the bottom.
- fixed_height() = 4 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 5 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4));
- EXPECT_EQ(4 + insets.height() + 1, fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 4, top + 5));
+ EXPECT_EQ(5 + insets.height() + 1, fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Target notification grows with free space. |reposition_top| should remain
// at the same offset from the bottom.
- fixed_height() = 5 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 6 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 2, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 3, top + 4));
- EXPECT_EQ(5 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 4, top + 5));
+ EXPECT_EQ(6 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Target notification grows with not enough free space. |reposition_top|
// should change its offset as little as possible, and consume the free space.
- fixed_height() = 5 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 6 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 3, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 4, top + 5));
- EXPECT_EQ(5 + insets.height() + 1, fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 5, top + 6));
+ EXPECT_EQ(6 + insets.height() + 1, fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Target notification shrinks. |reposition_top| should remain at the
// same offset from the bottom.
- fixed_height() = 5 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 7 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(5 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(7 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below grows with no free space. |reposition_top| is forced to
// change its offset from the bottom.
- fixed_height() = 4 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 7 + insets.height();
+ reposition_top() = 2 + top;
positions =
- ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false},
+ ComputeRepositionOffsets({1, 1, 4, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4));
- EXPECT_EQ(4 + insets.height() + 1, fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 7));
+ EXPECT_EQ(7 + insets.height() + 1, fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below grows with free space. |reposition_top| should remain
// at the same offset from the bottom.
- fixed_height() = 5 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 8 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 2, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 4));
- EXPECT_EQ(5 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 5));
+ EXPECT_EQ(8 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below shrinks. |reposition_top| should remain at the same
// offset from the bottom.
- fixed_height() = 5 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 8 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(5 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(8 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below is being deleted. |reposition_top| should remain at the
// same offset from the bottom.
- fixed_height() = 4 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 8 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, true, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 2));
- EXPECT_EQ(4 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 3));
+ EXPECT_EQ(8 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below is inserted with free space. |reposition_top| should
// remain at the same offset from the bottom.
- fixed_height() = 4 + insets.height();
- reposition_top() = 1 + top;
+ fixed_height() = 8 + insets.height();
+ reposition_top() = 2 + top;
positions =
ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(4 + insets.height(), fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4));
+ EXPECT_EQ(8 + insets.height(), fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Notification below is inserted with no free space. |reposition_top| is
// forced to change its offset from the bottom.
- fixed_height() = 3 + insets.height();
- reposition_top() = 1 + top;
- positions =
- ComputeRepositionOffsets({1, 1, 1, 1}, {false, false, false, false},
- 1 /* target_index */, 0 /* padding */);
- EXPECT_THAT(positions, ElementsAre(top, top + 1, top + 2, top + 3));
- EXPECT_EQ(3 + insets.height() + 1, fixed_height());
- EXPECT_EQ(1 + top, reposition_top());
+ fixed_height() = 8 + insets.height();
+ reposition_top() = 2 + top;
+ positions = ComputeRepositionOffsets({1, 1, 1, 4, 1},
+ {false, false, false, false, false},
+ 1 /* target_index */, 0 /* padding */);
+ EXPECT_THAT(positions, ElementsAre(top, top + 2, top + 3, top + 4, top + 8));
+ EXPECT_EQ(8 + insets.height() + 1, fixed_height());
+ EXPECT_EQ(2 + top, reposition_top());
// Test padding.
fixed_height() = 20 + insets.height();
diff --git a/chromium/ui/message_center/views/message_popup_collection.cc b/chromium/ui/message_center/views/message_popup_collection.cc
index c9556d3d712..0a2afc4caa5 100644
--- a/chromium/ui/message_center/views/message_popup_collection.cc
+++ b/chromium/ui/message_center/views/message_popup_collection.cc
@@ -138,6 +138,26 @@ void MessagePopupCollection::MarkAllPopupsShown() {
}
}
+void MessagePopupCollection::PausePopupTimers() {
+ DCHECK(timer_pause_counter_ >= 0);
+ if (timer_pause_counter_ <= 0) {
+ message_center_->PausePopupTimers();
+ timer_pause_counter_ = 1;
+ } else {
+ timer_pause_counter_++;
+ }
+}
+
+void MessagePopupCollection::RestartPopupTimers() {
+ DCHECK(timer_pause_counter_ >= 1);
+ if (timer_pause_counter_ <= 1) {
+ message_center_->RestartPopupTimers();
+ timer_pause_counter_ = 0;
+ } else {
+ timer_pause_counter_--;
+ }
+}
+
void MessagePopupCollection::UpdateWidgets() {
if (message_center_->IsMessageCenterVisible()) {
DCHECK_EQ(0u, message_center_->GetPopupNotifications().size());
@@ -229,7 +249,7 @@ void MessagePopupCollection::OnMouseEntered(ToastContentsView* toast_entered) {
// toasts. So we need to keep track of which one is the currently active one.
latest_toast_entered_ = toast_entered;
- message_center_->PausePopupTimers();
+ PausePopupTimers();
if (user_is_closing_toasts_by_clicking_)
defer_timer_->Stop();
@@ -249,7 +269,7 @@ void MessagePopupCollection::OnMouseExited(ToastContentsView* toast_exited) {
this,
&MessagePopupCollection::OnDeferTimerExpired);
} else {
- message_center_->RestartPopupTimers();
+ RestartPopupTimers();
}
}
@@ -412,7 +432,7 @@ void MessagePopupCollection::OnDeferTimerExpired() {
user_is_closing_toasts_by_clicking_ = false;
DecrementDeferCounter();
- message_center_->RestartPopupTimers();
+ RestartPopupTimers();
}
void MessagePopupCollection::OnNotificationUpdated(
diff --git a/chromium/ui/message_center/views/message_popup_collection.h b/chromium/ui/message_center/views/message_popup_collection.h
index fa0068dec84..eff6cc5981a 100644
--- a/chromium/ui/message_center/views/message_popup_collection.h
+++ b/chromium/ui/message_center/views/message_popup_collection.h
@@ -72,6 +72,11 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection
void MarkAllPopupsShown();
+ // Inclement the timer counter, and pause the popup timer if necessary.
+ void PausePopupTimers();
+ // Declement the timer counter, and restart the popup timer if necessary.
+ void RestartPopupTimers();
+
// Since these events are really coming from individual toast widgets,
// it helps to be able to keep track of the sender.
void OnMouseEntered(ToastContentsView* toast_entered);
@@ -165,6 +170,10 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection
// Only to be used when user_is_closing_toasts_by_clicking_ is true.
int target_top_edge_;
+ // This is the number of pause request for timer. If it's more than zero, the
+ // timer is paused. If zero, the timer is not paused.
+ int timer_pause_counter_ = 0;
+
// Weak, only exists temporarily in tests.
std::unique_ptr<base::RunLoop> run_loop_for_test_;
diff --git a/chromium/ui/message_center/views/padded_button.cc b/chromium/ui/message_center/views/padded_button.cc
index 4c73a90f41f..08e3e6f1620 100644
--- a/chromium/ui/message_center/views/padded_button.cc
+++ b/chromium/ui/message_center/views/padded_button.cc
@@ -22,8 +22,8 @@ PaddedButton::PaddedButton(views::ButtonListener* listener)
SetFocusPainter(views::Painter::CreateSolidFocusPainter(
kFocusBorderColor,
gfx::Insets(1, 2, 2, 2)));
- set_background(views::Background::CreateSolidBackground(
- SkColorSetA(SK_ColorWHITE, 0.9 * 0xff)));
+ set_background(
+ views::Background::CreateSolidBackground(kControlButtonBackgroundColor));
SetBorder(views::CreateEmptyBorder(gfx::Insets(kControlButtonBorderSize)));
set_animate_on_state_change(false);
diff --git a/chromium/ui/message_center/views/toast_contents_view.cc b/chromium/ui/message_center/views/toast_contents_view.cc
index 44dfcf410fe..64e9d91ddeb 100644
--- a/chromium/ui/message_center/views/toast_contents_view.cc
+++ b/chromium/ui/message_center/views/toast_contents_view.cc
@@ -278,6 +278,14 @@ void ToastContentsView::OnWorkAreaChanged() {
Screen::GetScreen()->GetDisplayNearestWindow(native_view));
}
+void ToastContentsView::OnWidgetActivationChanged(views::Widget* widget,
+ bool active) {
+ if (active)
+ collection_->PausePopupTimers();
+ else
+ collection_->RestartPopupTimers();
+}
+
// views::View
void ToastContentsView::OnMouseEntered(const ui::MouseEvent& event) {
if (collection_)
@@ -389,6 +397,7 @@ void ToastContentsView::CreateWidget(
views::Widget* widget = new views::Widget();
alignment_delegate->ConfigureWidgetInitParamsForContainer(widget, &params);
widget->set_focus_on_creation(false);
+ widget->AddObserver(this);
#if defined(OS_WIN)
// We want to ensure that this toast always goes to the native desktop,
diff --git a/chromium/ui/message_center/views/toast_contents_view.h b/chromium/ui/message_center/views/toast_contents_view.h
index 77a4def3513..1161a0b0534 100644
--- a/chromium/ui/message_center/views/toast_contents_view.h
+++ b/chromium/ui/message_center/views/toast_contents_view.h
@@ -15,6 +15,7 @@
#include "ui/message_center/message_center_export.h"
#include "ui/message_center/views/message_center_controller.h"
#include "ui/views/widget/widget_delegate.h"
+#include "ui/views/widget/widget_observer.h"
namespace gfx {
class Animation;
@@ -42,6 +43,7 @@ class PopupAlignmentDelegate;
// widget/views are closed/destructed.
class MESSAGE_CENTER_EXPORT ToastContentsView
: public views::WidgetDelegateView,
+ public views::WidgetObserver,
public MessageCenterController,
public gfx::AnimationDelegate {
public:
@@ -117,6 +119,9 @@ class MESSAGE_CENTER_EXPORT ToastContentsView
void OnDisplayChanged() override;
void OnWorkAreaChanged() override;
+ // Overridden from views::WidgetObserver:
+ void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
+
// Recalculates preferred size from underlying view and notifies about it.
void UpdatePreferredSize();
diff --git a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc
index 09e9b425728..0c72261ccd7 100644
--- a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc
+++ b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc
@@ -45,6 +45,19 @@ void FillModesetBuffer(const scoped_refptr<DrmDevice>& drm,
return;
}
+ uint32_t fourcc_format = buffer->GetFramebufferPixelFormat();
+ const auto& modifiers = controller->GetFormatModifiers(fourcc_format);
+ for (const uint64_t modifier : modifiers) {
+ // A value of 0 means DRM_FORMAT_MOD_NONE. If the CRTC has any other
+ // modifier (tiling, compression, etc.) we can't read the fb and assume it's
+ // a linear buffer.
+ if (modifier) {
+ VLOG(2) << "Crtc has a modifier and we might not know how to interpret "
+ "the fb.";
+ return;
+ }
+ }
+
// If the display controller is in mirror mode, the CRTCs should be sharing
// the same framebuffer.
DrmConsoleBuffer saved_buffer(drm, saved_crtc->buffer_id);
diff --git a/chromium/ui/strings/translations/ui_strings_ca.xtb b/chromium/ui/strings/translations/ui_strings_ca.xtb
index 72931684a3a..efa1370baad 100644
--- a/chromium/ui/strings/translations/ui_strings_ca.xtb
+++ b/chromium/ui/strings/translations/ui_strings_ca.xtb
@@ -86,7 +86,7 @@
<translation id="6364916375976753737">Desplaçament a l'esquerra</translation>
<translation id="6394627529324717982">Coma</translation>
<translation id="6404817160109697034">{SECONDS,plural, =1{fa 1 s}other{fa # s}}</translation>
-<translation id="6528179044667508675">No molesteu</translation>
+<translation id="6528179044667508675">No molestis</translation>
<translation id="6612467943526193239">Prem Esc per sortir del calibratge.</translation>
<translation id="6620110761915583480">Desa el fitxer</translation>
<translation id="6699343763173986273">Fitxer multimèdia: pista següent</translation>
@@ -112,7 +112,7 @@
<translation id="7658239707568436148">Cancel·la</translation>
<translation id="7781829728241885113">Ahir</translation>
<translation id="7814458197256864873">&amp;Copia</translation>
-<translation id="7850320739366109486">No molesteu</translation>
+<translation id="7850320739366109486">No molestis</translation>
<translation id="7907591526440419938">Obre un fitxer</translation>
<translation id="8106081041558092062">{HOURS,plural, =1{fa 1 hora}other{fa # hores}}</translation>
<translation id="8131263257437993507">{SECONDS,plural, =1{1 s restant}other{# s restants}}</translation>
diff --git a/chromium/ui/views/bubble/bubble_frame_view.cc b/chromium/ui/views/bubble/bubble_frame_view.cc
index 14f5622aba1..58b79913675 100644
--- a/chromium/ui/views/bubble/bubble_frame_view.cc
+++ b/chromium/ui/views/bubble/bubble_frame_view.cc
@@ -259,7 +259,8 @@ gfx::Insets BubbleFrameView::GetInsets() const {
const int title_height = std::max(icon_height, label_height) + title_padding;
const int close_height =
GetWidget()->widget_delegate()->ShouldShowCloseButton()
- ? close_->height()
+ ? close_->height() +
+ ViewsDelegate::GetInstance()->GetDialogCloseButtonMargin()
: 0;
insets += gfx::Insets(std::max(title_height, close_height), 0, 0, 0);
return insets;
diff --git a/chromium/ui/views/bubble/bubble_frame_view_unittest.cc b/chromium/ui/views/bubble/bubble_frame_view_unittest.cc
index bf955dd451c..3474899d99a 100644
--- a/chromium/ui/views/bubble/bubble_frame_view_unittest.cc
+++ b/chromium/ui/views/bubble/bubble_frame_view_unittest.cc
@@ -145,12 +145,12 @@ TEST_F(BubbleFrameViewTest, GetBoundsForClientViewWithClose) {
EXPECT_EQ(kArrow, frame.bubble_border()->arrow());
EXPECT_EQ(kColor, frame.bubble_border()->background_color());
- int margin_x = frame.content_margins().left();
- int margin_y = frame.content_margins().top() +
- frame.GetCloseButtonForTest()->height();
- gfx::Insets insets = frame.bubble_border()->GetInsets();
- EXPECT_EQ(insets.left() + margin_x, frame.GetBoundsForClientView().x());
- EXPECT_EQ(insets.top() + margin_y, frame.GetBoundsForClientView().y());
+ gfx::Insets frame_insets = frame.GetInsets();
+ gfx::Insets border_insets = frame.bubble_border()->GetInsets();
+ EXPECT_EQ(border_insets.left() + frame_insets.left(),
+ frame.GetBoundsForClientView().x());
+ EXPECT_EQ(border_insets.top() + frame_insets.top(),
+ frame.GetBoundsForClientView().y());
}
// Tests that the arrow is mirrored as needed to better fit the screen.
diff --git a/chromium/ui/views/controls/native/native_view_host.cc b/chromium/ui/views/controls/native/native_view_host.cc
index 452e5966b48..34f4af7f94c 100644
--- a/chromium/ui/views/controls/native/native_view_host.cc
+++ b/chromium/ui/views/controls/native/native_view_host.cc
@@ -167,7 +167,8 @@ const char* NativeViewHost::GetClassName() const {
}
void NativeViewHost::OnFocus() {
- native_wrapper_->SetFocus();
+ if (native_view_)
+ native_wrapper_->SetFocus();
NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, true);
}
diff --git a/chromium/ui/views/window/dialog_delegate_unittest.cc b/chromium/ui/views/window/dialog_delegate_unittest.cc
index d11cfddde8f..ff365d4f98b 100644
--- a/chromium/ui/views/window/dialog_delegate_unittest.cc
+++ b/chromium/ui/views/window/dialog_delegate_unittest.cc
@@ -28,15 +28,7 @@ namespace {
class TestDialog : public DialogDelegateView {
public:
- TestDialog()
- : input_(new views::Textfield()),
- canceled_(false),
- accepted_(false),
- closed_(false),
- closeable_(false),
- should_handle_escape_(false) {
- AddChildView(input_);
- }
+ TestDialog() : input_(new views::Textfield()) { AddChildView(input_); }
~TestDialog() override {}
void Init() {
@@ -51,6 +43,7 @@ class TestDialog : public DialogDelegateView {
bool ShouldShowWindowTitle() const override {
return !title_.empty();
}
+ bool ShouldShowCloseButton() const override { return show_close_button_; }
// DialogDelegateView overrides:
bool Cancel() override {
@@ -66,7 +59,6 @@ class TestDialog : public DialogDelegateView {
return closeable_;
}
- // DialogDelegateView overrides:
gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); }
bool AcceleratorPressed(const ui::Accelerator& accelerator) override {
return should_handle_escape_;
@@ -92,6 +84,9 @@ class TestDialog : public DialogDelegateView {
}
void set_title(const base::string16& title) { title_ = title; }
+ void set_show_close_button(bool show_close) {
+ show_close_button_ = show_close;
+ }
void set_should_handle_escape(bool should_handle_escape) {
should_handle_escape_ = should_handle_escape;
}
@@ -100,13 +95,14 @@ class TestDialog : public DialogDelegateView {
private:
views::Textfield* input_;
- bool canceled_;
- bool accepted_;
- bool closed_;
+ bool canceled_ = false;
+ bool accepted_ = false;
+ bool closed_ = false;
// Prevent the dialog from closing, for repeated ok and cancel button clicks.
- bool closeable_;
+ bool closeable_ = false;
base::string16 title_;
- bool should_handle_escape_;
+ bool show_close_button_ = true;
+ bool should_handle_escape_ = false;
DISALLOW_COPY_AND_ASSIGN(TestDialog);
};
@@ -118,9 +114,8 @@ class DialogTest : public ViewsTestBase {
void SetUp() override {
ViewsTestBase::SetUp();
- dialog_ = new TestDialog();
- dialog_->Init();
- DialogDelegate::CreateDialogWidget(dialog_, GetContext(), nullptr)->Show();
+ InitializeDialog();
+ ShowDialog();
}
void TearDown() override {
@@ -128,6 +123,18 @@ class DialogTest : public ViewsTestBase {
ViewsTestBase::TearDown();
}
+ void InitializeDialog() {
+ if (dialog_)
+ dialog_->TearDown();
+
+ dialog_ = new TestDialog();
+ dialog_->Init();
+ }
+
+ void ShowDialog() {
+ DialogDelegate::CreateDialogWidget(dialog_, GetContext(), nullptr)->Show();
+ }
+
void SimulateKeyEvent(const ui::KeyEvent& event) {
ui::KeyEvent event_copy = event;
if (dialog()->GetFocusManager()->OnKeyEvent(event_copy))
@@ -208,12 +215,38 @@ TEST_F(DialogTest, HitTest_HiddenTitle) {
const int point;
const int hit;
} cases[] = {
- { border, HTSYSMENU },
- { border + 10, HTSYSMENU },
- { border + 20, HTCLIENT },
- { border + 50, HTCLIENT },
- { border + 60, HTCLIENT },
- { 1000, HTNOWHERE },
+ {border, HTSYSMENU},
+ {border + 10, HTSYSMENU},
+ {border + 20, HTNOWHERE},
+ {border + 50, HTCLIENT /* Space is reserved for the close button. */},
+ {border + 60, HTCLIENT},
+ {1000, HTNOWHERE},
+ };
+
+ for (size_t i = 0; i < arraysize(cases); ++i) {
+ gfx::Point point(cases[i].point, cases[i].point);
+ EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point))
+ << " case " << i << " with border: " << border << ", at point "
+ << cases[i].point;
+ }
+}
+
+TEST_F(DialogTest, HitTest_HiddenTitleNoCloseButton) {
+ InitializeDialog();
+ dialog()->set_show_close_button(false);
+ ShowDialog();
+
+ const NonClientView* view = dialog()->GetWidget()->non_client_view();
+ BubbleFrameView* frame = static_cast<BubbleFrameView*>(view->frame_view());
+ const int border = frame->bubble_border()->GetBorderThickness();
+
+ struct {
+ const int point;
+ const int hit;
+ } cases[] = {
+ {border, HTSYSMENU}, {border + 10, HTSYSMENU},
+ {border + 20, HTCLIENT}, {border + 50, HTCLIENT},
+ {border + 60, HTCLIENT}, {1000, HTNOWHERE},
};
for (size_t i = 0; i < arraysize(cases); ++i) {
diff --git a/chromium/v8/gypfiles/toolchain.gypi b/chromium/v8/gypfiles/toolchain.gypi
index 9c8f4a29012..88afb8612e4 100644
--- a/chromium/v8/gypfiles/toolchain.gypi
+++ b/chromium/v8/gypfiles/toolchain.gypi
@@ -991,8 +991,6 @@
# present in VS 2003 and earlier.
'msvs_disabled_warnings': [4351],
'msvs_configuration_attributes': {
- 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)',
- 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)',
'CharacterSet': '1',
},
}],
diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h
index f61c13da07e..2cc9821769a 100644
--- a/chromium/v8/include/v8-version.h
+++ b/chromium/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 5
#define V8_MINOR_VERSION 8
#define V8_BUILD_NUMBER 283
-#define V8_PATCH_LEVEL 24
+#define V8_PATCH_LEVEL 38
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/chromium/v8/src/arm/code-stubs-arm.cc b/chromium/v8/src/arm/code-stubs-arm.cc
index 80ef3224b91..67d661e0e82 100644
--- a/chromium/v8/src/arm/code-stubs-arm.cc
+++ b/chromium/v8/src/arm/code-stubs-arm.cc
@@ -2655,6 +2655,7 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
if (masm->isolate()->function_entry_hook() != NULL) {
ProfileEntryHookStub stub(masm->isolate());
+ masm->MaybeCheckConstPool();
PredictableCodeSizeScope predictable(masm);
predictable.ExpectSize(masm->CallStubSize(&stub) +
2 * Assembler::kInstrSize);
diff --git a/chromium/v8/src/arm/macro-assembler-arm.cc b/chromium/v8/src/arm/macro-assembler-arm.cc
index e6323e4ce74..9d036607f79 100644
--- a/chromium/v8/src/arm/macro-assembler-arm.cc
+++ b/chromium/v8/src/arm/macro-assembler-arm.cc
@@ -88,11 +88,11 @@ int MacroAssembler::CallStubSize(
return CallSize(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond);
}
-
-void MacroAssembler::Call(Address target,
- RelocInfo::Mode rmode,
- Condition cond,
- TargetAddressStorageMode mode) {
+void MacroAssembler::Call(Address target, RelocInfo::Mode rmode, Condition cond,
+ TargetAddressStorageMode mode,
+ bool check_constant_pool) {
+ // Check if we have to emit the constant pool before we block it.
+ if (check_constant_pool) MaybeCheckConstPool();
// Block constant pool for the call instruction sequence.
BlockConstPoolScope block_const_pool(this);
Label start;
@@ -138,12 +138,10 @@ int MacroAssembler::CallSize(Handle<Code> code,
return CallSize(reinterpret_cast<Address>(code.location()), rmode, cond);
}
-
-void MacroAssembler::Call(Handle<Code> code,
- RelocInfo::Mode rmode,
- TypeFeedbackId ast_id,
- Condition cond,
- TargetAddressStorageMode mode) {
+void MacroAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode,
+ TypeFeedbackId ast_id, Condition cond,
+ TargetAddressStorageMode mode,
+ bool check_constant_pool) {
Label start;
bind(&start);
DCHECK(RelocInfo::IsCodeTarget(rmode));
@@ -2417,7 +2415,8 @@ void MacroAssembler::CallStub(CodeStub* stub,
TypeFeedbackId ast_id,
Condition cond) {
DCHECK(AllowThisStubCall(stub)); // Stub calls are not allowed in some stubs.
- Call(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond);
+ Call(stub->GetCode(), RelocInfo::CODE_TARGET, ast_id, cond,
+ CAN_INLINE_TARGET_ADDRESS, false);
}
diff --git a/chromium/v8/src/arm/macro-assembler-arm.h b/chromium/v8/src/arm/macro-assembler-arm.h
index bcba01447e8..821a1096d30 100644
--- a/chromium/v8/src/arm/macro-assembler-arm.h
+++ b/chromium/v8/src/arm/macro-assembler-arm.h
@@ -107,12 +107,13 @@ class MacroAssembler: public Assembler {
void Jump(Address target, RelocInfo::Mode rmode, Condition cond = al);
void Jump(Handle<Code> code, RelocInfo::Mode rmode, Condition cond = al);
void Call(Register target, Condition cond = al);
- void Call(Address target, RelocInfo::Mode rmode,
- Condition cond = al,
- TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS);
+ void Call(Address target, RelocInfo::Mode rmode, Condition cond = al,
+ TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS,
+ bool check_constant_pool = true);
void Call(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
TypeFeedbackId ast_id = TypeFeedbackId::None(), Condition cond = al,
- TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS);
+ TargetAddressStorageMode mode = CAN_INLINE_TARGET_ADDRESS,
+ bool check_constant_pool = true);
int CallSize(Handle<Code> code,
RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
TypeFeedbackId ast_id = TypeFeedbackId::None(),
diff --git a/chromium/v8/src/ast/scopes.cc b/chromium/v8/src/ast/scopes.cc
index 2bc9b3af64a..225793c7bbc 100644
--- a/chromium/v8/src/ast/scopes.cc
+++ b/chromium/v8/src/ast/scopes.cc
@@ -1430,7 +1430,11 @@ void DeclarationScope::ResetAfterPreparsing(AstValueFactory* ast_value_factory,
DCHECK(is_function_scope());
// Reset all non-trivial members.
- params_.Clear();
+ if (!aborted || !IsArrowFunction(function_kind_)) {
+ // Do not remove parameters when lazy parsing an Arrow Function has failed,
+ // as the formal parameters are not re-parsed.
+ params_.Clear();
+ }
decls_.Clear();
locals_.Clear();
inner_scope_ = nullptr;
diff --git a/chromium/v8/src/bootstrapper.cc b/chromium/v8/src/bootstrapper.cc
index 3e095eafca4..8f9f92a08c6 100644
--- a/chromium/v8/src/bootstrapper.cc
+++ b/chromium/v8/src/bootstrapper.cc
@@ -2260,6 +2260,15 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
native_context()->set_regexp_last_match_info(*last_match_info);
Handle<RegExpMatchInfo> internal_match_info = factory->NewRegExpMatchInfo();
native_context()->set_regexp_internal_match_info(*internal_match_info);
+
+ // Force the RegExp constructor to fast properties, so that we can use the
+ // fast paths for various things like
+ //
+ // x instanceof RegExp
+ //
+ // etc. We should probably come up with a more principled approach once
+ // the JavaScript builtins are gone.
+ JSObject::MigrateSlowToFast(regexp_fun, 0, "Bootstrapping");
}
{ // -- E r r o r
diff --git a/chromium/v8/src/builtins/builtins-regexp.cc b/chromium/v8/src/builtins/builtins-regexp.cc
index 93cb55899b4..f76136b8066 100644
--- a/chromium/v8/src/builtins/builtins-regexp.cc
+++ b/chromium/v8/src/builtins/builtins-regexp.cc
@@ -247,19 +247,24 @@ Node* RegExpBuiltinsAssembler::RegExpPrototypeExecBodyWithoutResult(
Node* const regexp_lastindex = LoadLastIndex(context, regexp, is_fastpath);
var_lastindex.Bind(regexp_lastindex);
- // Omit ToLength if lastindex is a non-negative smi.
- Label call_tolength(this, Label::kDeferred), next(this);
- Branch(TaggedIsPositiveSmi(regexp_lastindex), &next, &call_tolength);
+ if (is_fastpath) {
+ // ToLength on a positive smi is a nop and can be skipped.
+ CSA_ASSERT(this, TaggedIsPositiveSmi(regexp_lastindex));
+ } else {
+ // Omit ToLength if lastindex is a non-negative smi.
+ Label call_tolength(this, Label::kDeferred), next(this);
+ Branch(TaggedIsPositiveSmi(regexp_lastindex), &next, &call_tolength);
+
+ Bind(&call_tolength);
+ {
+ Callable tolength_callable = CodeFactory::ToLength(isolate);
+ var_lastindex.Bind(
+ CallStub(tolength_callable, context, regexp_lastindex));
+ Goto(&next);
+ }
- Bind(&call_tolength);
- {
- Callable tolength_callable = CodeFactory::ToLength(isolate);
- var_lastindex.Bind(
- CallStub(tolength_callable, context, regexp_lastindex));
- Goto(&next);
+ Bind(&next);
}
-
- Bind(&next);
}
// Check whether the regexp is global or sticky, which determines whether we
@@ -408,7 +413,11 @@ Node* RegExpBuiltinsAssembler::ThrowIfNotJSReceiver(
return var_value_map.value();
}
-Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* map) {
+Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* object,
+ Node* map) {
+ Label out(this);
+ Variable var_result(this, MachineRepresentation::kWord32);
+
Node* const native_context = LoadNativeContext(context);
Node* const regexp_fun =
LoadContextElement(native_context, Context::REGEXP_FUNCTION_INDEX);
@@ -416,17 +425,33 @@ Node* RegExpBuiltinsAssembler::IsInitialRegExpMap(Node* context, Node* map) {
LoadObjectField(regexp_fun, JSFunction::kPrototypeOrInitialMapOffset);
Node* const has_initialmap = WordEqual(map, initial_map);
- return has_initialmap;
+ var_result.Bind(has_initialmap);
+ GotoIfNot(has_initialmap, &out);
+
+ // The smi check is required to omit ToLength(lastIndex) calls with possible
+ // user-code execution on the fast path.
+ Node* const last_index = FastLoadLastIndex(object);
+ var_result.Bind(TaggedIsPositiveSmi(last_index));
+ Goto(&out);
+
+ Bind(&out);
+ return var_result.value();
}
// RegExp fast path implementations rely on unmodified JSRegExp instances.
// We use a fairly coarse granularity for this and simply check whether both
-// the regexp itself is unmodified (i.e. its map has not changed) and its
-// prototype is unmodified.
+// the regexp itself is unmodified (i.e. its map has not changed), its
+// prototype is unmodified, and lastIndex is a non-negative smi.
void RegExpBuiltinsAssembler::BranchIfFastRegExp(Node* const context,
+ Node* const object,
Node* const map,
Label* const if_isunmodified,
Label* const if_ismodified) {
+ CSA_ASSERT(this, WordEqual(LoadMap(object), map));
+
+ // TODO(ishell): Update this check once map changes for constant field
+ // tracking are landing.
+
Node* const native_context = LoadNativeContext(context);
Node* const regexp_fun =
LoadContextElement(native_context, Context::REGEXP_FUNCTION_INDEX);
@@ -442,18 +467,21 @@ void RegExpBuiltinsAssembler::BranchIfFastRegExp(Node* const context,
Node* const proto_has_initialmap =
WordEqual(proto_map, initial_proto_initial_map);
- // TODO(ishell): Update this check once map changes for constant field
- // tracking are landing.
+ GotoIfNot(proto_has_initialmap, if_ismodified);
- Branch(proto_has_initialmap, if_isunmodified, if_ismodified);
+ // The smi check is required to omit ToLength(lastIndex) calls with possible
+ // user-code execution on the fast path.
+ Node* const last_index = FastLoadLastIndex(object);
+ Branch(TaggedIsPositiveSmi(last_index), if_isunmodified, if_ismodified);
}
Node* RegExpBuiltinsAssembler::IsFastRegExpMap(Node* const context,
+ Node* const object,
Node* const map) {
Label yup(this), nope(this), out(this);
Variable var_result(this, MachineRepresentation::kWord32);
- BranchIfFastRegExp(context, map, &yup, &nope);
+ BranchIfFastRegExp(context, object, map, &yup, &nope);
Bind(&yup);
var_result.Bind(Int32Constant(1));
@@ -486,16 +514,16 @@ TF_BUILTIN(RegExpPrototypeExec, RegExpBuiltinsAssembler) {
Node* const context = Parameter(4);
// Ensure {maybe_receiver} is a JSRegExp.
- Node* const regexp_map = ThrowIfNotInstanceType(
- context, maybe_receiver, JS_REGEXP_TYPE, "RegExp.prototype.exec");
+ ThrowIfNotInstanceType(context, maybe_receiver, JS_REGEXP_TYPE,
+ "RegExp.prototype.exec");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
Node* const string = ToString(context, maybe_string);
Label if_isfastpath(this), if_isslowpath(this);
- Branch(IsInitialRegExpMap(context, regexp_map), &if_isfastpath,
- &if_isslowpath);
+ Branch(IsInitialRegExpMap(context, receiver, LoadMap(receiver)),
+ &if_isfastpath, &if_isslowpath);
Bind(&if_isfastpath);
{
@@ -681,7 +709,8 @@ TF_BUILTIN(RegExpPrototypeFlagsGetter, RegExpBuiltinsAssembler) {
Node* const receiver = maybe_receiver;
Label if_isfastpath(this), if_isslowpath(this, Label::kDeferred);
- Branch(IsInitialRegExpMap(context, map), &if_isfastpath, &if_isslowpath);
+ Branch(IsInitialRegExpMap(context, receiver, map), &if_isfastpath,
+ &if_isslowpath);
Bind(&if_isfastpath);
Return(FlagsGetter(context, receiver, true));
@@ -1221,7 +1250,7 @@ Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp,
Label out(this), if_isfastpath(this), if_isslowpath(this);
Node* const map = LoadMap(regexp);
- BranchIfFastRegExp(context, map, &if_isfastpath, &if_isslowpath);
+ BranchIfFastRegExp(context, regexp, map, &if_isfastpath, &if_isslowpath);
Bind(&if_isfastpath);
{
@@ -1286,16 +1315,17 @@ TF_BUILTIN(RegExpPrototypeTest, RegExpBuiltinsAssembler) {
Node* const context = Parameter(4);
// Ensure {maybe_receiver} is a JSReceiver.
- Node* const map = ThrowIfNotJSReceiver(
- context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver,
- "RegExp.prototype.test");
+ ThrowIfNotJSReceiver(context, maybe_receiver,
+ MessageTemplate::kIncompatibleMethodReceiver,
+ "RegExp.prototype.test");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
Node* const string = ToString(context, maybe_string);
Label fast_path(this), slow_path(this);
- BranchIfFastRegExp(context, map, &fast_path, &slow_path);
+ BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path,
+ &slow_path);
Bind(&fast_path);
{
@@ -1322,13 +1352,36 @@ TF_BUILTIN(RegExpPrototypeTest, RegExpBuiltinsAssembler) {
Node* RegExpBuiltinsAssembler::AdvanceStringIndex(Node* const string,
Node* const index,
- Node* const is_unicode) {
+ Node* const is_unicode,
+ bool is_fastpath) {
+ CSA_ASSERT(this, IsHeapNumberMap(LoadReceiverMap(index)));
+ if (is_fastpath) CSA_ASSERT(this, TaggedIsPositiveSmi(index));
+
// Default to last_index + 1.
- Node* const index_plus_one = SmiAdd(index, SmiConstant(1));
+ Node* const index_plus_one = NumberInc(index);
Variable var_result(this, MachineRepresentation::kTagged, index_plus_one);
+ // Advancing the index has some subtle issues involving the distinction
+ // between Smis and HeapNumbers. There's three cases:
+ // * {index} is a Smi, {index_plus_one} is a Smi. The standard case.
+ // * {index} is a Smi, {index_plus_one} overflows into a HeapNumber.
+ // In this case we can return the result early, because
+ // {index_plus_one} > {string}.length.
+ // * {index} is a HeapNumber, {index_plus_one} is a HeapNumber. This can only
+ // occur when {index} is outside the Smi range since we normalize
+ // explicitly. Again we can return early.
+ if (is_fastpath) {
+ // Must be in Smi range on the fast path. We control the value of {index}
+ // on all call-sites and can never exceed the length of the string.
+ STATIC_ASSERT(String::kMaxLength + 2 < Smi::kMaxValue);
+ CSA_ASSERT(this, TaggedIsPositiveSmi(index_plus_one));
+ }
+
Label if_isunicode(this), out(this);
- Branch(is_unicode, &if_isunicode, &out);
+ GotoIfNot(is_unicode, &out);
+
+ // Keep this unconditional (even on the fast path) just to be safe.
+ Branch(TaggedIsPositiveSmi(index_plus_one), &if_isunicode, &out);
Bind(&if_isunicode);
{
@@ -1346,7 +1399,7 @@ Node* RegExpBuiltinsAssembler::AdvanceStringIndex(Node* const string,
&out);
// At a surrogate pair, return index + 2.
- Node* const index_plus_two = SmiAdd(index, SmiConstant(2));
+ Node* const index_plus_two = NumberInc(index_plus_one);
var_result.Bind(index_plus_two);
Goto(&out);
@@ -1630,12 +1683,23 @@ void RegExpBuiltinsAssembler::RegExpPrototypeMatchBody(Node* const context,
GotoIfNot(SmiEqual(match_length, smi_zero), &loop);
Node* last_index = LoadLastIndex(context, regexp, is_fastpath);
-
- Callable tolength_callable = CodeFactory::ToLength(isolate);
- last_index = CallStub(tolength_callable, context, last_index);
+ if (is_fastpath) {
+ CSA_ASSERT(this, TaggedIsPositiveSmi(last_index));
+ } else {
+ Callable tolength_callable = CodeFactory::ToLength(isolate);
+ last_index = CallStub(tolength_callable, context, last_index);
+ }
Node* const new_last_index =
- AdvanceStringIndex(string, last_index, is_unicode);
+ AdvanceStringIndex(string, last_index, is_unicode, is_fastpath);
+
+ if (is_fastpath) {
+ // On the fast path, we can be certain that lastIndex can never be
+ // incremented to overflow the Smi range since the maximal string
+ // length is less than the maximal Smi value.
+ STATIC_ASSERT(String::kMaxLength < Smi::kMaxValue);
+ CSA_ASSERT(this, TaggedIsPositiveSmi(new_last_index));
+ }
StoreLastIndex(context, regexp, new_last_index, is_fastpath);
@@ -1661,16 +1725,17 @@ TF_BUILTIN(RegExpPrototypeMatch, RegExpBuiltinsAssembler) {
Node* const context = Parameter(4);
// Ensure {maybe_receiver} is a JSReceiver.
- Node* const map = ThrowIfNotJSReceiver(
- context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver,
- "RegExp.prototype.@@match");
+ ThrowIfNotJSReceiver(context, maybe_receiver,
+ MessageTemplate::kIncompatibleMethodReceiver,
+ "RegExp.prototype.@@match");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
Node* const string = ToString(context, maybe_string);
Label fast_path(this), slow_path(this);
- BranchIfFastRegExp(context, map, &fast_path, &slow_path);
+ BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path,
+ &slow_path);
Bind(&fast_path);
RegExpPrototypeMatchBody(context, receiver, string, true);
@@ -1786,16 +1851,17 @@ TF_BUILTIN(RegExpPrototypeSearch, RegExpBuiltinsAssembler) {
Node* const context = Parameter(4);
// Ensure {maybe_receiver} is a JSReceiver.
- Node* const map = ThrowIfNotJSReceiver(
- context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver,
- "RegExp.prototype.@@search");
+ ThrowIfNotJSReceiver(context, maybe_receiver,
+ MessageTemplate::kIncompatibleMethodReceiver,
+ "RegExp.prototype.@@search");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
Node* const string = ToString(context, maybe_string);
Label fast_path(this), slow_path(this);
- BranchIfFastRegExp(context, map, &fast_path, &slow_path);
+ BranchIfFastRegExp(context, receiver, LoadMap(receiver), &fast_path,
+ &slow_path);
Bind(&fast_path);
RegExpPrototypeSearchBodyFast(context, receiver, string);
@@ -1939,7 +2005,7 @@ void RegExpBuiltinsAssembler::RegExpPrototypeSplitBody(Node* const context,
Node* const is_unicode = FastFlagGetter(regexp, JSRegExp::kUnicode);
Node* const new_next_search_from =
- AdvanceStringIndex(string, next_search_from, is_unicode);
+ AdvanceStringIndex(string, next_search_from, is_unicode, true);
var_next_search_from.Bind(new_next_search_from);
Goto(&loop);
@@ -2059,7 +2125,7 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) {
Node* const maybe_limit = Parameter(Descriptor::kLimit);
Node* const context = Parameter(Descriptor::kContext);
- CSA_ASSERT(this, IsFastRegExpMap(context, LoadMap(regexp)));
+ CSA_ASSERT(this, IsFastRegExpMap(context, regexp, LoadMap(regexp)));
CSA_ASSERT(this, IsString(string));
// TODO(jgruber): Even if map checks send us to the fast path, we still need
@@ -2067,13 +2133,23 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) {
// been changed.
// Convert {maybe_limit} to a uint32, capping at the maximal smi value.
- Variable var_limit(this, MachineRepresentation::kTagged);
- Label if_limitissmimax(this), limit_done(this);
+ Variable var_limit(this, MachineRepresentation::kTagged, maybe_limit);
+ Label if_limitissmimax(this), limit_done(this), runtime(this);
GotoIf(IsUndefined(maybe_limit), &if_limitissmimax);
+ GotoIf(TaggedIsPositiveSmi(maybe_limit), &limit_done);
+ Node* const limit = ToUint32(context, maybe_limit);
{
- Node* const limit = ToUint32(context, maybe_limit);
+ // ToUint32(limit) could potentially change the shape of the RegExp
+ // object. Recheck that we are still on the fast path and bail to runtime
+ // otherwise.
+ {
+ Label next(this);
+ BranchIfFastRegExp(context, regexp, LoadMap(regexp), &next, &runtime);
+ Bind(&next);
+ }
+
GotoIfNot(TaggedIsSmi(limit), &if_limitissmimax);
var_limit.Bind(limit);
@@ -2093,6 +2169,14 @@ TF_BUILTIN(RegExpSplit, RegExpBuiltinsAssembler) {
Node* const limit = var_limit.value();
RegExpPrototypeSplitBody(context, regexp, string, limit);
}
+
+ Bind(&runtime);
+ {
+ // The runtime call passes in limit to ensure the second ToUint32(limit)
+ // call is not observable.
+ CSA_ASSERT(this, IsHeapNumberMap(LoadReceiverMap(limit)));
+ Return(CallRuntime(Runtime::kRegExpSplit, context, regexp, string, limit));
+ }
}
// ES#sec-regexp.prototype-@@split
@@ -2104,16 +2188,16 @@ TF_BUILTIN(RegExpPrototypeSplit, RegExpBuiltinsAssembler) {
Node* const context = Parameter(5);
// Ensure {maybe_receiver} is a JSReceiver.
- Node* const map = ThrowIfNotJSReceiver(
- context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver,
- "RegExp.prototype.@@split");
+ ThrowIfNotJSReceiver(context, maybe_receiver,
+ MessageTemplate::kIncompatibleMethodReceiver,
+ "RegExp.prototype.@@split");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
Node* const string = ToString(context, maybe_string);
Label stub(this), runtime(this, Label::kDeferred);
- BranchIfFastRegExp(context, map, &stub, &runtime);
+ BranchIfFastRegExp(context, receiver, LoadMap(receiver), &stub, &runtime);
Bind(&stub);
Callable split_callable = CodeFactory::RegExpSplit(isolate());
@@ -2439,7 +2523,7 @@ TF_BUILTIN(RegExpReplace, RegExpBuiltinsAssembler) {
Node* const replace_value = Parameter(Descriptor::kReplaceValue);
Node* const context = Parameter(Descriptor::kContext);
- CSA_ASSERT(this, IsFastRegExpMap(context, LoadMap(regexp)));
+ CSA_ASSERT(this, IsFastRegExpMap(context, regexp, LoadMap(regexp)));
CSA_ASSERT(this, IsString(string));
Label checkreplacestring(this), if_iscallable(this),
@@ -2457,6 +2541,15 @@ TF_BUILTIN(RegExpReplace, RegExpBuiltinsAssembler) {
Node* const replace_string =
CallStub(tostring_callable, context, replace_value);
+ // ToString(replaceValue) could potentially change the shape of the RegExp
+ // object. Recheck that we are still on the fast path and bail to runtime
+ // otherwise.
+ {
+ Label next(this);
+ BranchIfFastRegExp(context, regexp, LoadMap(regexp), &next, &runtime);
+ Bind(&next);
+ }
+
Callable indexof_callable = CodeFactory::StringIndexOf(isolate());
Node* const dollar_string = HeapConstant(
isolate()->factory()->LookupSingleCharacterStringFromCode('$'));
@@ -2519,9 +2612,9 @@ TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) {
// }
// Ensure {maybe_receiver} is a JSReceiver.
- Node* const map = ThrowIfNotJSReceiver(
- context, maybe_receiver, MessageTemplate::kIncompatibleMethodReceiver,
- "RegExp.prototype.@@replace");
+ ThrowIfNotJSReceiver(context, maybe_receiver,
+ MessageTemplate::kIncompatibleMethodReceiver,
+ "RegExp.prototype.@@replace");
Node* const receiver = maybe_receiver;
// Convert {maybe_string} to a String.
@@ -2530,7 +2623,7 @@ TF_BUILTIN(RegExpPrototypeReplace, RegExpBuiltinsAssembler) {
// Fast-path checks: 1. Is the {receiver} an unmodified JSRegExp instance?
Label stub(this), runtime(this, Label::kDeferred);
- BranchIfFastRegExp(context, map, &stub, &runtime);
+ BranchIfFastRegExp(context, receiver, LoadMap(receiver), &stub, &runtime);
Bind(&stub);
Callable replace_callable = CodeFactory::RegExpReplace(isolate());
diff --git a/chromium/v8/src/builtins/builtins-regexp.h b/chromium/v8/src/builtins/builtins-regexp.h
index f14a41e051f..9e1bfdf48f0 100644
--- a/chromium/v8/src/builtins/builtins-regexp.h
+++ b/chromium/v8/src/builtins/builtins-regexp.h
@@ -19,8 +19,8 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler {
explicit RegExpBuiltinsAssembler(CodeAssemblerState* state)
: CodeStubAssembler(state) {}
- void BranchIfFastRegExp(Node* const context, Node* const map,
- Label* const if_isunmodified,
+ void BranchIfFastRegExp(Node* const context, Node* const object,
+ Node* const map, Label* const if_isunmodified,
Label* const if_ismodified);
protected:
@@ -50,9 +50,10 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler {
char const* method_name);
// Analogous to BranchIfFastRegExp, for use in asserts.
- Node* IsFastRegExpMap(Node* const context, Node* const map);
+ Node* IsFastRegExpMap(Node* const context, Node* const object,
+ Node* const map);
- Node* IsInitialRegExpMap(Node* context, Node* map);
+ Node* IsInitialRegExpMap(Node* context, Node* object, Node* map);
void BranchIfFastRegExpResult(Node* context, Node* map,
Label* if_isunmodified, Label* if_ismodified);
@@ -73,7 +74,7 @@ class RegExpBuiltinsAssembler : public CodeStubAssembler {
Node* RegExpExec(Node* context, Node* regexp, Node* string);
Node* AdvanceStringIndex(Node* const string, Node* const index,
- Node* const is_unicode);
+ Node* const is_unicode, bool is_fastpath);
void RegExpPrototypeMatchBody(Node* const context, Node* const regexp,
Node* const string, const bool is_fastpath);
diff --git a/chromium/v8/src/builtins/builtins-string.cc b/chromium/v8/src/builtins/builtins-string.cc
index 9967f958601..7cef567cf95 100644
--- a/chromium/v8/src/builtins/builtins-string.cc
+++ b/chromium/v8/src/builtins/builtins-string.cc
@@ -1224,7 +1224,7 @@ void StringBuiltinsAssembler::MaybeCallFunctionAtSymbol(
Label stub_call(this), slow_lookup(this);
RegExpBuiltinsAssembler regexp_asm(state());
- regexp_asm.BranchIfFastRegExp(context, object_map, &stub_call,
+ regexp_asm.BranchIfFastRegExp(context, object, object_map, &stub_call,
&slow_lookup);
Bind(&stub_call);
diff --git a/chromium/v8/src/compiler/js-builtin-reducer.cc b/chromium/v8/src/compiler/js-builtin-reducer.cc
index a9af93c80ce..24eb5cea8ec 100644
--- a/chromium/v8/src/compiler/js-builtin-reducer.cc
+++ b/chromium/v8/src/compiler/js-builtin-reducer.cc
@@ -815,20 +815,42 @@ Reduction JSBuiltinReducer::ReduceArrayPop(Node* node) {
// ES6 section 22.1.3.18 Array.prototype.push ( )
Reduction JSBuiltinReducer::ReduceArrayPush(Node* node) {
- Handle<Map> receiver_map;
// We need exactly target, receiver and value parameters.
if (node->op()->ValueInputCount() != 3) return NoChange();
Node* receiver = NodeProperties::GetValueInput(node, 1);
Node* effect = NodeProperties::GetEffectInput(node);
Node* control = NodeProperties::GetControlInput(node);
Node* value = NodeProperties::GetValueInput(node, 2);
- if (GetMapWitness(node).ToHandle(&receiver_map) &&
- CanInlineArrayResizeOperation(receiver_map)) {
+ ZoneHandleSet<Map> receiver_maps;
+ NodeProperties::InferReceiverMapsResult result =
+ NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps);
+ if (receiver_maps.size() != 1) return NoChange();
+ DCHECK_NE(NodeProperties::kNoReceiverMaps, result);
+
+ // TODO(turbofan): Relax this to deal with multiple {receiver} maps.
+ Handle<Map> receiver_map = receiver_maps[0];
+ if (CanInlineArrayResizeOperation(receiver_map)) {
// Install code dependencies on the {receiver} prototype maps and the
// global array protector cell.
dependencies()->AssumePropertyCell(factory()->array_protector());
dependencies()->AssumePrototypeMapsStable(receiver_map);
+ // If the {receiver_maps} information is not reliable, we need
+ // to check that the {receiver} still has one of these maps.
+ if (result == NodeProperties::kUnreliableReceiverMaps) {
+ if (receiver_map->is_stable()) {
+ dependencies()->AssumeMapStable(receiver_map);
+ } else {
+ // TODO(turbofan): This is a potential - yet unlikely - deoptimization
+ // loop, since we might not learn from this deoptimization in baseline
+ // code. We need a way to learn from deoptimizations in optimized to
+ // address these problems.
+ effect = graph()->NewNode(
+ simplified()->CheckMaps(CheckMapsFlag::kNone, receiver_maps),
+ receiver, effect, control);
+ }
+ }
+
// TODO(turbofan): Perform type checks on the {value}. We are not guaranteed
// to learn from these checks in case they fail, as the witness (i.e. the
// map check from the LoadIC for a.push) might not be executed in baseline
diff --git a/chromium/v8/src/compiler/js-call-reducer.cc b/chromium/v8/src/compiler/js-call-reducer.cc
index fe15f5fa237..c0deb915f81 100644
--- a/chromium/v8/src/compiler/js-call-reducer.cc
+++ b/chromium/v8/src/compiler/js-call-reducer.cc
@@ -325,7 +325,9 @@ Reduction JSCallReducer::ReduceObjectPrototypeGetProto(Node* node) {
// Try to determine the {receiver} map.
ZoneHandleSet<Map> receiver_maps;
- if (NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps)) {
+ NodeProperties::InferReceiverMapsResult result =
+ NodeProperties::InferReceiverMaps(receiver, effect, &receiver_maps);
+ if (result == NodeProperties::kReliableReceiverMaps) {
Handle<Map> candidate_map(
receiver_maps[0]->GetPrototypeChainRootMap(isolate()));
Handle<Object> candidate_prototype(candidate_map->prototype(), isolate());
diff --git a/chromium/v8/src/compiler/js-inlining.cc b/chromium/v8/src/compiler/js-inlining.cc
index 206cd639fca..c87be6c2362 100644
--- a/chromium/v8/src/compiler/js-inlining.cc
+++ b/chromium/v8/src/compiler/js-inlining.cc
@@ -309,8 +309,12 @@ bool NeedsConvertReceiver(Node* receiver, Node* effect) {
return false;
}
default: {
+ // We don't really care about the exact maps here, just the instance
+ // types, which don't change across potential side-effecting operations.
ZoneHandleSet<Map> maps;
- if (NodeProperties::InferReceiverMaps(receiver, effect, &maps)) {
+ NodeProperties::InferReceiverMapsResult result =
+ NodeProperties::InferReceiverMaps(receiver, effect, &maps);
+ if (result != NodeProperties::kNoReceiverMaps) {
// Check if all {maps} are actually JSReceiver maps.
for (size_t i = 0; i < maps.size(); ++i) {
if (!maps[i]->IsJSReceiverMap()) return true;
diff --git a/chromium/v8/src/compiler/js-native-context-specialization.cc b/chromium/v8/src/compiler/js-native-context-specialization.cc
index b72d3ec8bed..c32ee269a08 100644
--- a/chromium/v8/src/compiler/js-native-context-specialization.cc
+++ b/chromium/v8/src/compiler/js-native-context-specialization.cc
@@ -2256,7 +2256,19 @@ bool JSNativeContextSpecialization::ExtractReceiverMaps(
bool JSNativeContextSpecialization::InferReceiverMaps(
Node* receiver, Node* effect, MapHandleList* receiver_maps) {
ZoneHandleSet<Map> maps;
- if (NodeProperties::InferReceiverMaps(receiver, effect, &maps)) {
+ NodeProperties::InferReceiverMapsResult result =
+ NodeProperties::InferReceiverMaps(receiver, effect, &maps);
+ if (result == NodeProperties::kReliableReceiverMaps) {
+ for (size_t i = 0; i < maps.size(); ++i) {
+ receiver_maps->Add(maps[i]);
+ }
+ return true;
+ } else if (result == NodeProperties::kUnreliableReceiverMaps) {
+ // For untrusted receiver maps, we can still use the information
+ // if the maps are stable.
+ for (size_t i = 0; i < maps.size(); ++i) {
+ if (!maps[i]->is_stable()) return false;
+ }
for (size_t i = 0; i < maps.size(); ++i) {
receiver_maps->Add(maps[i]);
}
diff --git a/chromium/v8/src/compiler/node-properties.cc b/chromium/v8/src/compiler/node-properties.cc
index e559844cbfa..9243a08583b 100644
--- a/chromium/v8/src/compiler/node-properties.cc
+++ b/chromium/v8/src/compiler/node-properties.cc
@@ -330,23 +330,26 @@ bool NodeProperties::IsSame(Node* a, Node* b) {
}
// static
-bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect,
- ZoneHandleSet<Map>* maps_return) {
+NodeProperties::InferReceiverMapsResult NodeProperties::InferReceiverMaps(
+ Node* receiver, Node* effect, ZoneHandleSet<Map>* maps_return) {
HeapObjectMatcher m(receiver);
if (m.HasValue()) {
Handle<Map> receiver_map(m.Value()->map());
if (receiver_map->is_stable()) {
+ // The {receiver_map} is only reliable when we install a stability
+ // code dependency.
*maps_return = ZoneHandleSet<Map>(receiver_map);
- return true;
+ return kUnreliableReceiverMaps;
}
}
+ InferReceiverMapsResult result = kReliableReceiverMaps;
while (true) {
switch (effect->opcode()) {
case IrOpcode::kCheckMaps: {
Node* const object = GetValueInput(effect, 0);
if (IsSame(receiver, object)) {
*maps_return = CheckMapsParametersOf(effect->op()).maps();
- return true;
+ return result;
}
break;
}
@@ -362,12 +365,12 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect,
if (initial_map->constructor_or_backpointer() ==
*mtarget.Value()) {
*maps_return = ZoneHandleSet<Map>(initial_map);
- return true;
+ return result;
}
}
}
// We reached the allocation of the {receiver}.
- return false;
+ return kNoReceiverMaps;
}
break;
}
@@ -382,12 +385,12 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect,
HeapObjectMatcher m(value);
if (m.HasValue()) {
*maps_return = ZoneHandleSet<Map>(Handle<Map>::cast(m.Value()));
- return true;
+ return result;
}
}
// Without alias analysis we cannot tell whether this
// StoreField[map] affects {receiver} or not.
- return false;
+ result = kUnreliableReceiverMaps;
}
break;
}
@@ -400,10 +403,14 @@ bool NodeProperties::InferReceiverMaps(Node* receiver, Node* effect,
}
default: {
DCHECK_EQ(1, effect->op()->EffectOutputCount());
- if (effect->op()->EffectInputCount() != 1 ||
- !effect->op()->HasProperty(Operator::kNoWrite)) {
+ if (effect->op()->EffectInputCount() != 1) {
// Didn't find any appropriate CheckMaps node.
- return false;
+ return kNoReceiverMaps;
+ }
+ if (!effect->op()->HasProperty(Operator::kNoWrite)) {
+ // Without alias/escape analysis we cannot tell whether this
+ // {effect} affects {receiver} or not.
+ result = kUnreliableReceiverMaps;
}
break;
}
diff --git a/chromium/v8/src/compiler/node-properties.h b/chromium/v8/src/compiler/node-properties.h
index c82d78a6158..5ed85402d1f 100644
--- a/chromium/v8/src/compiler/node-properties.h
+++ b/chromium/v8/src/compiler/node-properties.h
@@ -128,10 +128,15 @@ class V8_EXPORT_PRIVATE NodeProperties final {
static bool IsSame(Node* a, Node* b);
// Walks up the {effect} chain to find a witness that provides map
- // information about the {receiver}. Doesn't look through potentially
+ // information about the {receiver}. Can look through potentially
// side effecting nodes.
- static bool InferReceiverMaps(Node* receiver, Node* effect,
- ZoneHandleSet<Map>* maps_return);
+ enum InferReceiverMapsResult {
+ kNoReceiverMaps, // No receiver maps inferred.
+ kReliableReceiverMaps, // Receiver maps can be trusted.
+ kUnreliableReceiverMaps // Receiver maps might have changed (side-effect).
+ };
+ static InferReceiverMapsResult InferReceiverMaps(
+ Node* receiver, Node* effect, ZoneHandleSet<Map>* maps_return);
// ---------------------------------------------------------------------------
// Context.
diff --git a/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc b/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc
index 11c70fb5ce5..4783808ba70 100644
--- a/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc
+++ b/chromium/v8/src/crankshaft/arm/lithium-codegen-arm.cc
@@ -688,7 +688,7 @@ void LCodeGen::CallCodeGeneric(Handle<Code> code,
// Block literal pool emission to ensure nop indicating no inlined smi code
// is in the correct position.
Assembler::BlockConstPoolScope block_const_pool(masm());
- __ Call(code, mode, TypeFeedbackId::None(), al, storage_mode);
+ __ Call(code, mode, TypeFeedbackId::None(), al, storage_mode, false);
RecordSafepointWithLazyDeopt(instr, safepoint_mode);
// Signal that we don't inline smi code before these stubs in the
@@ -5228,6 +5228,7 @@ void LCodeGen::DoStackCheck(LStackCheck* instr) {
__ cmp(sp, Operand(ip));
__ b(hs, &done);
Handle<Code> stack_check = isolate()->builtins()->StackCheck();
+ masm()->MaybeCheckConstPool();
PredictableCodeSizeScope predictable(masm());
predictable.ExpectSize(CallCodeSize(stack_check, RelocInfo::CODE_TARGET));
DCHECK(instr->context()->IsRegister());
diff --git a/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc b/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc
index aff8942fedd..d650f2e47b9 100644
--- a/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc
+++ b/chromium/v8/src/full-codegen/arm/full-codegen-arm.cc
@@ -312,10 +312,12 @@ void FullCodeGenerator::Generate() {
__ cmp(sp, Operand(ip));
__ b(hs, &ok);
Handle<Code> stack_check = isolate()->builtins()->StackCheck();
+ masm_->MaybeCheckConstPool();
PredictableCodeSizeScope predictable(masm_);
predictable.ExpectSize(
masm_->CallSize(stack_check, RelocInfo::CODE_TARGET));
- __ Call(stack_check, RelocInfo::CODE_TARGET);
+ __ Call(stack_check, RelocInfo::CODE_TARGET, TypeFeedbackId::None(), al,
+ CAN_INLINE_TARGET_ADDRESS, false);
__ bind(&ok);
}
diff --git a/chromium/v8/src/heap/array-buffer-tracker-inl.h b/chromium/v8/src/heap/array-buffer-tracker-inl.h
index f5bdead89a5..d20f1280028 100644
--- a/chromium/v8/src/heap/array-buffer-tracker-inl.h
+++ b/chromium/v8/src/heap/array-buffer-tracker-inl.h
@@ -17,7 +17,7 @@ void ArrayBufferTracker::RegisterNew(Heap* heap, JSArrayBuffer* buffer) {
size_t length = NumberToSize(buffer->byte_length());
Page* page = Page::FromAddress(buffer->address());
{
- base::LockGuard<base::Mutex> guard(page->mutex());
+ base::LockGuard<base::RecursiveMutex> guard(page->mutex());
LocalArrayBufferTracker* tracker = page->local_tracker();
if (tracker == nullptr) {
page->AllocateLocalTracker();
@@ -39,7 +39,7 @@ void ArrayBufferTracker::Unregister(Heap* heap, JSArrayBuffer* buffer) {
Page* page = Page::FromAddress(buffer->address());
size_t length = 0;
{
- base::LockGuard<base::Mutex> guard(page->mutex());
+ base::LockGuard<base::RecursiveMutex> guard(page->mutex());
LocalArrayBufferTracker* tracker = page->local_tracker();
DCHECK_NOT_NULL(tracker);
length = tracker->Remove(buffer);
diff --git a/chromium/v8/src/heap/array-buffer-tracker.cc b/chromium/v8/src/heap/array-buffer-tracker.cc
index d7bbb941e2c..543d81d23d1 100644
--- a/chromium/v8/src/heap/array-buffer-tracker.cc
+++ b/chromium/v8/src/heap/array-buffer-tracker.cc
@@ -127,7 +127,7 @@ bool ArrayBufferTracker::ProcessBuffers(Page* page, ProcessingMode mode) {
bool ArrayBufferTracker::IsTracked(JSArrayBuffer* buffer) {
Page* page = Page::FromAddress(buffer->address());
{
- base::LockGuard<base::Mutex> guard(page->mutex());
+ base::LockGuard<base::RecursiveMutex> guard(page->mutex());
LocalArrayBufferTracker* tracker = page->local_tracker();
if (tracker == nullptr) return false;
return tracker->IsTracked(buffer);
diff --git a/chromium/v8/src/heap/heap.cc b/chromium/v8/src/heap/heap.cc
index 1524a7821e0..25cb56d20c0 100644
--- a/chromium/v8/src/heap/heap.cc
+++ b/chromium/v8/src/heap/heap.cc
@@ -1705,12 +1705,14 @@ void Heap::Scavenge() {
{
// Copy objects reachable from the old generation.
TRACE_GC(tracer(), GCTracer::Scope::SCAVENGER_OLD_TO_NEW_POINTERS);
- RememberedSet<OLD_TO_NEW>::Iterate(this, [this](Address addr) {
- return Scavenger::CheckAndScavengeObject(this, addr);
- });
+ RememberedSet<OLD_TO_NEW>::Iterate(
+ this, SYNCHRONIZED, [this](Address addr) {
+ return Scavenger::CheckAndScavengeObject(this, addr);
+ });
RememberedSet<OLD_TO_NEW>::IterateTyped(
- this, [this](SlotType type, Address host_addr, Address addr) {
+ this, SYNCHRONIZED,
+ [this](SlotType type, Address host_addr, Address addr) {
return UpdateTypedSlotHelper::UpdateTypedSlot(
isolate(), type, addr, [this](Object** addr) {
// We expect that objects referenced by code are long living.
diff --git a/chromium/v8/src/heap/mark-compact.cc b/chromium/v8/src/heap/mark-compact.cc
index 338d954ab02..cf6bdff35df 100644
--- a/chromium/v8/src/heap/mark-compact.cc
+++ b/chromium/v8/src/heap/mark-compact.cc
@@ -2336,11 +2336,12 @@ void MarkCompactCollector::MarkLiveObjectsInYoungGeneration() {
{
TRACE_GC(heap()->tracer(),
GCTracer::Scope::MINOR_MC_MARK_OLD_TO_NEW_POINTERS);
- RememberedSet<OLD_TO_NEW>::Iterate(heap(), [this](Address addr) {
- return CheckAndMarkObject(heap(), addr);
- });
+ RememberedSet<OLD_TO_NEW>::Iterate(
+ heap(), NON_SYNCHRONIZED,
+ [this](Address addr) { return CheckAndMarkObject(heap(), addr); });
RememberedSet<OLD_TO_NEW>::IterateTyped(
- heap(), [this](SlotType type, Address host_addr, Address addr) {
+ heap(), NON_SYNCHRONIZED,
+ [this](SlotType type, Address host_addr, Address addr) {
return UpdateTypedSlotHelper::UpdateTypedSlot(
isolate(), type, addr, [this](Object** addr) {
return CheckAndMarkObject(heap(),
@@ -3887,7 +3888,7 @@ int MarkCompactCollector::Sweeper::ParallelSweepPage(Page* page,
AllocationSpace identity) {
int max_freed = 0;
{
- base::LockGuard<base::Mutex> guard(page->mutex());
+ base::LockGuard<base::RecursiveMutex> guard(page->mutex());
// If this page was already swept in the meantime, we can return here.
if (page->SweepingDone()) return 0;
DCHECK_EQ(Page::kSweepingPending,
diff --git a/chromium/v8/src/heap/remembered-set.h b/chromium/v8/src/heap/remembered-set.h
index cf17a46821e..bdb5bfc9a01 100644
--- a/chromium/v8/src/heap/remembered-set.h
+++ b/chromium/v8/src/heap/remembered-set.h
@@ -14,6 +14,7 @@ namespace v8 {
namespace internal {
enum PointerDirection { OLD_TO_OLD, OLD_TO_NEW };
+enum RememberedSetIterationMode { SYNCHRONIZED, NON_SYNCHRONIZED };
// TODO(ulan): Investigate performance of de-templatizing this class.
template <PointerDirection direction>
@@ -100,9 +101,13 @@ class RememberedSet : public AllStatic {
// Iterates and filters the remembered set with the given callback.
// The callback should take (Address slot) and return SlotCallbackResult.
template <typename Callback>
- static void Iterate(Heap* heap, Callback callback) {
- IterateMemoryChunks(
- heap, [callback](MemoryChunk* chunk) { Iterate(chunk, callback); });
+ static void Iterate(Heap* heap, RememberedSetIterationMode mode,
+ Callback callback) {
+ IterateMemoryChunks(heap, [mode, callback](MemoryChunk* chunk) {
+ if (mode == SYNCHRONIZED) chunk->mutex()->Lock();
+ Iterate(chunk, callback);
+ if (mode == SYNCHRONIZED) chunk->mutex()->Unlock();
+ });
}
// Iterates over all memory chunks that contains non-empty slot sets.
@@ -180,9 +185,12 @@ class RememberedSet : public AllStatic {
// The callback should take (SlotType slot_type, SlotAddress slot) and return
// SlotCallbackResult.
template <typename Callback>
- static void IterateTyped(Heap* heap, Callback callback) {
- IterateMemoryChunks(heap, [callback](MemoryChunk* chunk) {
+ static void IterateTyped(Heap* heap, RememberedSetIterationMode mode,
+ Callback callback) {
+ IterateMemoryChunks(heap, [mode, callback](MemoryChunk* chunk) {
+ if (mode == SYNCHRONIZED) chunk->mutex()->Lock();
IterateTyped(chunk, callback);
+ if (mode == SYNCHRONIZED) chunk->mutex()->Unlock();
});
}
diff --git a/chromium/v8/src/heap/spaces.cc b/chromium/v8/src/heap/spaces.cc
index c2a51e44fbf..c35864ed2f5 100644
--- a/chromium/v8/src/heap/spaces.cc
+++ b/chromium/v8/src/heap/spaces.cc
@@ -535,7 +535,7 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size,
chunk->progress_bar_ = 0;
chunk->high_water_mark_.SetValue(static_cast<intptr_t>(area_start - base));
chunk->concurrent_sweeping_state().SetValue(kSweepingDone);
- chunk->mutex_ = new base::Mutex();
+ chunk->mutex_ = new base::RecursiveMutex();
chunk->available_in_free_list_ = 0;
chunk->wasted_memory_ = 0;
chunk->ResetLiveBytes();
diff --git a/chromium/v8/src/heap/spaces.h b/chromium/v8/src/heap/spaces.h
index a71c63600b7..4bb2db69d0a 100644
--- a/chromium/v8/src/heap/spaces.h
+++ b/chromium/v8/src/heap/spaces.h
@@ -339,7 +339,7 @@ class MemoryChunk {
+ kPointerSize // TypedSlotSet* typed_old_to_old_slots_
+ kPointerSize // SkipList* skip_list_
+ kPointerSize // AtomicValue high_water_mark_
- + kPointerSize // base::Mutex* mutex_
+ + kPointerSize // base::RecursiveMutex* mutex_
+ kPointerSize // base::AtomicWord concurrent_sweeping_
+ 2 * kSizetSize // AtomicNumber free-list statistics
+ kPointerSize // AtomicValue next_chunk_
@@ -397,7 +397,7 @@ class MemoryChunk {
Address address() { return reinterpret_cast<Address>(this); }
- base::Mutex* mutex() { return mutex_; }
+ base::RecursiveMutex* mutex() { return mutex_; }
bool Contains(Address addr) {
return addr >= area_start() && addr < area_end();
@@ -626,7 +626,7 @@ class MemoryChunk {
// count highest number of bytes ever allocated on the page.
base::AtomicValue<intptr_t> high_water_mark_;
- base::Mutex* mutex_;
+ base::RecursiveMutex* mutex_;
base::AtomicValue<ConcurrentSweepingState> concurrent_sweeping_;
diff --git a/chromium/v8/src/i18n.cc b/chromium/v8/src/i18n.cc
index d2245ef34a9..7c22871ff5e 100644
--- a/chromium/v8/src/i18n.cc
+++ b/chromium/v8/src/i18n.cc
@@ -30,8 +30,13 @@
#include "unicode/ucol.h"
#include "unicode/ucurr.h"
#include "unicode/unum.h"
+#include "unicode/uvernum.h"
#include "unicode/uversion.h"
+#if U_ICU_VERSION_MAJOR_NUM >= 59
+#include "unicode/char16ptr.h"
+#endif
+
namespace v8 {
namespace internal {
@@ -270,8 +275,13 @@ icu::DecimalFormat* CreateICUNumberFormat(
}
UErrorCode status_digits = U_ZERO_ERROR;
+#if U_ICU_VERSION_MAJOR_NUM >= 59
uint32_t fraction_digits = ucurr_getDefaultFractionDigits(
- currency.getTerminatedBuffer(), &status_digits);
+ icu::toUCharPtr(currency.getTerminatedBuffer()), &status_digits);
+#else
+ uint32_t fraction_digits = ucurr_getDefaultFractionDigits(
+ currency.getTerminatedBuffer(), &status_digits);
+#endif
if (U_SUCCESS(status_digits)) {
number_format->setMinimumFractionDigits(fraction_digits);
number_format->setMaximumFractionDigits(fraction_digits);
diff --git a/chromium/v8/src/inspector/inspector.gyp b/chromium/v8/src/inspector/inspector.gyp
index c70722f852b..91507bd579f 100644
--- a/chromium/v8/src/inspector/inspector.gyp
+++ b/chromium/v8/src/inspector/inspector.gyp
@@ -13,6 +13,13 @@
'targets': [
{ 'target_name': 'inspector_injected_script',
'type': 'none',
+ 'conditions': [
+ ['want_separate_host_toolset==1', {
+ 'toolsets': ['host', 'target'],
+ }, {
+ 'toolsets': ['target'],
+ }]
+ ],
'actions': [
{
'action_name': 'convert_js_to_cpp_char_array',
@@ -37,6 +44,13 @@
},
{ 'target_name': 'inspector_debugger_script',
'type': 'none',
+ 'conditions': [
+ ['want_separate_host_toolset==1', {
+ 'toolsets': ['host', 'target'],
+ }, {
+ 'toolsets': ['target'],
+ }]
+ ],
'actions': [
{
'action_name': 'convert_js_to_cpp_char_array',
@@ -61,6 +75,13 @@
},
{ 'target_name': 'protocol_compatibility',
'type': 'none',
+ 'conditions': [
+ ['want_separate_host_toolset==1', {
+ 'toolsets': ['host', 'target'],
+ }, {
+ 'toolsets': ['target'],
+ }]
+ ],
'actions': [
{
'action_name': 'protocol_compatibility',
@@ -83,6 +104,13 @@
{ 'target_name': 'protocol_generated_sources',
'type': 'none',
'dependencies': [ 'protocol_compatibility' ],
+ 'conditions': [
+ ['want_separate_host_toolset==1', {
+ 'toolsets': ['host', 'target'],
+ }, {
+ 'toolsets': ['target'],
+ }]
+ ],
'actions': [
{
'action_name': 'protocol_generated_sources',
diff --git a/chromium/v8/src/interpreter/bytecode-array-builder.cc b/chromium/v8/src/interpreter/bytecode-array-builder.cc
index 5e58f9613d3..c327fb7cd82 100644
--- a/chromium/v8/src/interpreter/bytecode-array-builder.cc
+++ b/chromium/v8/src/interpreter/bytecode-array-builder.cc
@@ -71,6 +71,12 @@ Register BytecodeArrayBuilder::Parameter(int parameter_index) const {
return Register::FromParameterIndex(parameter_index, parameter_count());
}
+Register BytecodeArrayBuilder::Local(int index) const {
+ // TODO(marja): Make a DCHECK once crbug.com/706234 is fixed.
+ CHECK_LT(index, locals_count());
+ return Register(index);
+}
+
Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray(Isolate* isolate) {
DCHECK(return_seen_in_block_);
DCHECK(!bytecode_generated_);
diff --git a/chromium/v8/src/interpreter/bytecode-array-builder.h b/chromium/v8/src/interpreter/bytecode-array-builder.h
index 6c09f5cdf40..0a10c1f485c 100644
--- a/chromium/v8/src/interpreter/bytecode-array-builder.h
+++ b/chromium/v8/src/interpreter/bytecode-array-builder.h
@@ -71,6 +71,7 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final
return register_allocator()->maximum_register_count();
}
+ Register Local(int index) const;
Register Parameter(int parameter_index) const;
// Constant loads to accumulator.
diff --git a/chromium/v8/src/interpreter/bytecode-generator.cc b/chromium/v8/src/interpreter/bytecode-generator.cc
index 038c031ab27..0310509fde6 100644
--- a/chromium/v8/src/interpreter/bytecode-generator.cc
+++ b/chromium/v8/src/interpreter/bytecode-generator.cc
@@ -892,7 +892,7 @@ void BytecodeGenerator::VisitVariableDeclaration(VariableDeclaration* decl) {
}
case VariableLocation::LOCAL:
if (variable->binding_needs_init()) {
- Register destination(variable->index());
+ Register destination(builder()->Local(variable->index()));
builder()->LoadTheHole().StoreAccumulatorInRegister(destination);
}
break;
@@ -1918,7 +1918,7 @@ void BytecodeGenerator::BuildVariableLoad(Variable* variable, FeedbackSlot slot,
TypeofMode typeof_mode) {
switch (variable->location()) {
case VariableLocation::LOCAL: {
- Register source(Register(variable->index()));
+ Register source(builder()->Local(variable->index()));
// We need to load the variable into the accumulator, even when in a
// VisitForRegisterScope, in order to avoid register aliasing if
// subsequent expressions assign to the same variable.
@@ -2112,9 +2112,9 @@ void BytecodeGenerator::BuildVariableAssignment(Variable* variable,
case VariableLocation::LOCAL: {
Register destination;
if (VariableLocation::PARAMETER == variable->location()) {
- destination = Register(builder()->Parameter(variable->index() + 1));
+ destination = builder()->Parameter(variable->index() + 1);
} else {
- destination = Register(variable->index());
+ destination = builder()->Local(variable->index());
}
if (hole_check_mode == HoleCheckMode::kRequired) {
diff --git a/chromium/v8/src/parsing/parser-base.h b/chromium/v8/src/parsing/parser-base.h
index 869fd2efbd5..cf56c53a8e9 100644
--- a/chromium/v8/src/parsing/parser-base.h
+++ b/chromium/v8/src/parsing/parser-base.h
@@ -395,6 +395,17 @@ class ParserBase {
return scope()->promise_var();
}
+ void RewindDestructuringAssignments(int pos) {
+ destructuring_assignments_to_rewrite_.Rewind(pos);
+ }
+
+ void SetDestructuringAssignmentsScope(int pos, Scope* scope) {
+ for (int i = pos; i < destructuring_assignments_to_rewrite_.length();
+ ++i) {
+ destructuring_assignments_to_rewrite_[i].scope = scope;
+ }
+ }
+
const ZoneList<DestructuringAssignment>&
destructuring_assignments_to_rewrite() const {
return destructuring_assignments_to_rewrite_;
@@ -1138,9 +1149,14 @@ class ParserBase {
ExpressionT ParseMemberExpression(bool* is_async, bool* ok);
ExpressionT ParseMemberExpressionContinuation(ExpressionT expression,
bool* is_async, bool* ok);
+
+ // `rewritable_length`: length of the destructuring_assignments_to_rewrite()
+ // queue in the parent function state, prior to parsing of formal parameters.
+ // If the arrow function is lazy, any items added during formal parameter
+ // parsing are removed from the queue.
ExpressionT ParseArrowFunctionLiteral(bool accept_IN,
const FormalParametersT& parameters,
- bool* ok);
+ int rewritable_length, bool* ok);
void ParseAsyncFunctionBody(Scope* scope, StatementListT body,
FunctionKind kind, FunctionBodyType type,
bool accept_IN, int pos, bool* ok);
@@ -2679,6 +2695,8 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) {
this, classifier()->duplicate_finder());
Scope::Snapshot scope_snapshot(scope());
+ int rewritable_length =
+ function_state_->destructuring_assignments_to_rewrite().length();
bool is_async = peek() == Token::ASYNC &&
!scanner()->HasAnyLineTerminatorAfterNext() &&
@@ -2732,6 +2750,7 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) {
this->scope()->PropagateUsageFlagsToScope(scope);
scope_snapshot.Reparent(scope);
+ function_state_->SetDestructuringAssignmentsScope(rewritable_length, scope);
FormalParametersT parameters(scope);
if (!classifier()->is_simple_parameter_list()) {
@@ -2748,7 +2767,8 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) {
if (duplicate_loc.IsValid()) {
classifier()->RecordDuplicateFormalParameterError(duplicate_loc);
}
- expression = ParseArrowFunctionLiteral(accept_IN, parameters, CHECK_OK);
+ expression = ParseArrowFunctionLiteral(accept_IN, parameters,
+ rewritable_length, CHECK_OK);
impl()->Discard();
classifier()->RecordPatternError(arrow_loc,
MessageTemplate::kUnexpectedToken,
@@ -4097,7 +4117,8 @@ bool ParserBase<Impl>::IsTrivialExpression() {
template <typename Impl>
typename ParserBase<Impl>::ExpressionT
ParserBase<Impl>::ParseArrowFunctionLiteral(
- bool accept_IN, const FormalParametersT& formal_parameters, bool* ok) {
+ bool accept_IN, const FormalParametersT& formal_parameters,
+ int rewritable_length, bool* ok) {
const RuntimeCallStats::CounterId counters[2][2] = {
{&RuntimeCallStats::ParseBackgroundArrowFunctionLiteral,
&RuntimeCallStats::ParseArrowFunctionLiteral},
@@ -4228,6 +4249,14 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
}
impl()->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK);
+ if (is_lazy_top_level_function) {
+ FunctionState* parent_state = function_state.outer();
+ DCHECK_NOT_NULL(parent_state);
+ DCHECK_GE(parent_state->destructuring_assignments_to_rewrite().length(),
+ rewritable_length);
+ parent_state->RewindDestructuringAssignments(rewritable_length);
+ }
+
impl()->RewriteDestructuringAssignments();
}
diff --git a/chromium/v8/src/parsing/parser.cc b/chromium/v8/src/parsing/parser.cc
index b5241dd6768..cc6b6a260b2 100644
--- a/chromium/v8/src/parsing/parser.cc
+++ b/chromium/v8/src/parsing/parser.cc
@@ -880,6 +880,8 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info,
scope->set_start_position(info->start_position());
ExpressionClassifier formals_classifier(this);
ParserFormalParameters formals(scope);
+ int rewritable_length =
+ function_state.destructuring_assignments_to_rewrite().length();
Checkpoint checkpoint(this);
{
// Parsing patterns as variable reference expression creates
@@ -916,7 +918,8 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info,
// Pass `accept_IN=true` to ParseArrowFunctionLiteral --- This should
// not be observable, or else the preparser would have failed.
- Expression* expression = ParseArrowFunctionLiteral(true, formals, &ok);
+ Expression* expression =
+ ParseArrowFunctionLiteral(true, formals, rewritable_length, &ok);
if (ok) {
// Scanning must end at the same position that was recorded
// previously. If not, parsing has been interrupted due to a stack
@@ -929,6 +932,10 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info,
// must produce a FunctionLiteral.
DCHECK(expression->IsFunctionLiteral());
result = expression->AsFunctionLiteral();
+ // Rewrite destructuring assignments in the parameters. (The ones
+ // inside the function body are rewritten by
+ // ParseArrowFunctionLiteral.)
+ RewriteDestructuringAssignments();
} else {
ok = false;
}
diff --git a/chromium/v8/src/regexp/regexp-utils.cc b/chromium/v8/src/regexp/regexp-utils.cc
index d40431866a3..570a348f74a 100644
--- a/chromium/v8/src/regexp/regexp-utils.cc
+++ b/chromium/v8/src/regexp/regexp-utils.cc
@@ -145,7 +145,14 @@ bool RegExpUtils::IsUnmodifiedRegExp(Isolate* isolate, Handle<Object> obj) {
if (!proto->IsJSReceiver()) return false;
Handle<Map> initial_proto_initial_map = isolate->regexp_prototype_map();
- return (JSReceiver::cast(proto)->map() == *initial_proto_initial_map);
+ if (JSReceiver::cast(proto)->map() != *initial_proto_initial_map) {
+ return false;
+ }
+
+ // The smi check is required to omit ToLength(lastIndex) calls with possible
+ // user-code execution on the fast path.
+ Object* last_index = JSRegExp::cast(recv)->LastIndex();
+ return last_index->IsSmi() && Smi::cast(last_index)->value() >= 0;
}
int RegExpUtils::AdvanceStringIndex(Isolate* isolate, Handle<String> string,
diff --git a/chromium/v8/src/runtime/runtime-i18n.cc b/chromium/v8/src/runtime/runtime-i18n.cc
index 0b453819146..e89175a37db 100644
--- a/chromium/v8/src/runtime/runtime-i18n.cc
+++ b/chromium/v8/src/runtime/runtime-i18n.cc
@@ -43,6 +43,7 @@
#include "unicode/uloc.h"
#include "unicode/unistr.h"
#include "unicode/unum.h"
+#include "unicode/ustring.h"
#include "unicode/uversion.h"
@@ -609,10 +610,11 @@ RUNTIME_FUNCTION(Runtime_InternalCompare) {
String::FlatContent flat2 = string2->GetFlatContent();
std::unique_ptr<uc16[]> sap1;
std::unique_ptr<uc16[]> sap2;
- const UChar* string_val1 = GetUCharBufferFromFlat(flat1, &sap1, length1);
- const UChar* string_val2 = GetUCharBufferFromFlat(flat2, &sap2, length2);
- result =
- collator->compare(string_val1, length1, string_val2, length2, status);
+ icu::UnicodeString string_val1(
+ FALSE, GetUCharBufferFromFlat(flat1, &sap1, length1), length1);
+ icu::UnicodeString string_val2(
+ FALSE, GetUCharBufferFromFlat(flat2, &sap2, length2), length2);
+ result = collator->compare(string_val1, string_val2, status);
}
if (U_FAILURE(status)) return isolate->ThrowIllegalOperation();
diff --git a/chromium/v8/src/wasm/wasm-debug.cc b/chromium/v8/src/wasm/wasm-debug.cc
index c00a4f1ddd0..769f57d9512 100644
--- a/chromium/v8/src/wasm/wasm-debug.cc
+++ b/chromium/v8/src/wasm/wasm-debug.cc
@@ -362,6 +362,7 @@ Handle<WasmDebugInfo> WasmDebugInfo::New(Handle<WasmInstanceObject> instance) {
Isolate* isolate = instance->GetIsolate();
Factory* factory = isolate->factory();
Handle<FixedArray> arr = factory->NewFixedArray(kFieldCount, TENURED);
+ arr->set(kWrapperTracerHeader, Smi::kZero);
arr->set(kInstance, *instance);
return Handle<WasmDebugInfo>::cast(arr);
}
diff --git a/chromium/v8/src/wasm/wasm-js.cc b/chromium/v8/src/wasm/wasm-js.cc
index f16d8b29854..281c4e82e6a 100644
--- a/chromium/v8/src/wasm/wasm-js.cc
+++ b/chromium/v8/src/wasm/wasm-js.cc
@@ -690,6 +690,7 @@ void WebAssemblyMemoryGrow(const v8::FunctionCallbackInfo<v8::Value>& args) {
thrower.RangeError("Unable to grow instance memory.");
return;
}
+ i::wasm::DetachWebAssemblyMemoryBuffer(i_isolate, old_buffer);
v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
return_value.Set(ret);
}
diff --git a/chromium/v8/src/wasm/wasm-module.cc b/chromium/v8/src/wasm/wasm-module.cc
index c218805371d..9df236fa9e9 100644
--- a/chromium/v8/src/wasm/wasm-module.cc
+++ b/chromium/v8/src/wasm/wasm-module.cc
@@ -2127,7 +2127,8 @@ Handle<JSArrayBuffer> GrowMemoryBuffer(Isolate* isolate,
Handle<JSArrayBuffer> old_buffer;
Address old_mem_start = nullptr;
uint32_t old_size = 0;
- if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr) {
+ if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr &&
+ old_buffer->byte_length()->IsNumber()) {
old_mem_start = static_cast<Address>(old_buffer->backing_store());
DCHECK_NOT_NULL(old_mem_start);
old_size = old_buffer->byte_length()->Number();
@@ -2169,27 +2170,30 @@ void UncheckedUpdateInstanceMemory(Isolate* isolate,
code_specialization.ApplyToWholeInstance(*instance);
}
-void DetachArrayBuffer(Isolate* isolate, Handle<JSArrayBuffer> buffer) {
- const bool has_guard_regions =
- (!buffer.is_null() && buffer->has_guard_region());
+void wasm::DetachWebAssemblyMemoryBuffer(Isolate* isolate,
+ Handle<JSArrayBuffer> buffer) {
+ int64_t byte_length =
+ buffer->byte_length()->IsNumber()
+ ? static_cast<uint32_t>(buffer->byte_length()->Number())
+ : 0;
+ if (buffer.is_null() || byte_length == 0) return;
+ const bool has_guard_regions = buffer->has_guard_region();
+ const bool is_external = buffer->is_external();
void* backing_store = buffer->backing_store();
- if (backing_store != nullptr) {
- DCHECK(!buffer->is_neuterable());
- int64_t byte_length = NumberToSize(buffer->byte_length());
- buffer->set_is_neuterable(true);
- if (!has_guard_regions) {
- buffer->set_is_external(true);
- isolate->heap()->UnregisterArrayBuffer(*buffer);
- }
- buffer->Neuter();
- if (!has_guard_regions) {
- isolate->array_buffer_allocator()->Free(backing_store, byte_length);
- } else {
- base::OS::Free(backing_store, RoundUp(i::wasm::kWasmMaxHeapOffset,
- base::OS::CommitPageSize()));
- reinterpret_cast<v8::Isolate*>(isolate)
- ->AdjustAmountOfExternalAllocatedMemory(-byte_length);
- }
+ DCHECK(!buffer->is_neuterable());
+ if (!has_guard_regions && !is_external) {
+ buffer->set_is_external(true);
+ isolate->heap()->UnregisterArrayBuffer(*buffer);
+ }
+ buffer->set_is_neuterable(true);
+ buffer->Neuter();
+ if (has_guard_regions) {
+ base::OS::Free(backing_store, RoundUp(i::wasm::kWasmMaxHeapOffset,
+ base::OS::CommitPageSize()));
+ reinterpret_cast<v8::Isolate*>(isolate)
+ ->AdjustAmountOfExternalAllocatedMemory(-byte_length);
+ } else if (!has_guard_regions && !is_external) {
+ isolate->array_buffer_allocator()->Free(backing_store, byte_length);
}
}
@@ -2203,8 +2207,10 @@ int32_t wasm::GrowWebAssemblyMemory(Isolate* isolate,
Handle<JSArrayBuffer> old_buffer;
uint32_t old_size = 0;
Address old_mem_start = nullptr;
+ // Force byte_length to 0, if byte_length fails IsNumber() check.
if (memory_buffer.ToHandle(&old_buffer) &&
- old_buffer->backing_store() != nullptr) {
+ old_buffer->backing_store() != nullptr &&
+ old_buffer->byte_length()->IsNumber()) {
old_size = old_buffer->byte_length()->Number();
old_mem_start = static_cast<Address>(old_buffer->backing_store());
}
@@ -2264,7 +2270,6 @@ int32_t wasm::GrowWebAssemblyMemory(Isolate* isolate,
}
}
memory_object->set_buffer(*new_buffer);
- DetachArrayBuffer(isolate, old_buffer);
DCHECK(old_size % WasmModule::kPageSize == 0);
return (old_size / WasmModule::kPageSize);
}
diff --git a/chromium/v8/src/wasm/wasm-module.h b/chromium/v8/src/wasm/wasm-module.h
index 67fff1d2007..1aaf9a4e96e 100644
--- a/chromium/v8/src/wasm/wasm-module.h
+++ b/chromium/v8/src/wasm/wasm-module.h
@@ -407,6 +407,9 @@ int32_t GrowWebAssemblyMemory(Isolate* isolate,
int32_t GrowMemory(Isolate* isolate, Handle<WasmInstanceObject> instance,
uint32_t pages);
+void DetachWebAssemblyMemoryBuffer(Isolate* isolate,
+ Handle<JSArrayBuffer> buffer);
+
void UpdateDispatchTables(Isolate* isolate, Handle<FixedArray> dispatch_tables,
int index, Handle<JSFunction> js_function);
diff --git a/chromium/v8/src/wasm/wasm-objects.cc b/chromium/v8/src/wasm/wasm-objects.cc
index c9b552f4a78..d74bf0c97c0 100644
--- a/chromium/v8/src/wasm/wasm-objects.cc
+++ b/chromium/v8/src/wasm/wasm-objects.cc
@@ -263,6 +263,8 @@ Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial,
Handle<JSFunction> table_ctor(
isolate->native_context()->wasm_table_constructor());
Handle<JSObject> table_obj = isolate->factory()->NewJSObject(table_ctor);
+ table_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero);
+
*js_functions = isolate->factory()->NewFixedArray(initial);
Object* null = isolate->heap()->null_value();
for (int i = 0; i < static_cast<int>(initial); ++i) {
@@ -340,6 +342,8 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
isolate->native_context()->wasm_memory_constructor());
Handle<JSObject> memory_obj =
isolate->factory()->NewJSObject(memory_ctor, TENURED);
+ memory_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero);
+
memory_obj->SetInternalField(kArrayBuffer, *buffer);
Handle<Object> max = isolate->factory()->NewNumber(maximum);
memory_obj->SetInternalField(kMaximum, *max);
@@ -447,6 +451,8 @@ Handle<WasmInstanceObject> WasmInstanceObject::New(
isolate->native_context()->wasm_instance_constructor());
Handle<JSObject> instance_object =
isolate->factory()->NewJSObject(instance_cons, TENURED);
+ instance_object->SetInternalField(kWrapperTracerHeader, Smi::kZero);
+
Handle<Symbol> instance_sym(isolate->native_context()->wasm_instance_sym());
Object::SetProperty(instance_object, instance_sym, instance_object, STRICT)
.Check();
@@ -499,6 +505,8 @@ Handle<WasmExportedFunction> WasmExportedFunction::New(
shared->set_internal_formal_parameter_count(arity);
Handle<JSFunction> function = isolate->factory()->NewFunction(
isolate->wasm_function_map(), name, export_wrapper);
+ function->SetInternalField(kWrapperTracerHeader, Smi::kZero);
+
function->set_shared(*shared);
function->SetInternalField(kInstance, *instance);
@@ -554,7 +562,7 @@ Handle<WasmSharedModuleData> WasmSharedModuleData::New(
Handle<ByteArray> asm_js_offset_table) {
Handle<FixedArray> arr =
isolate->factory()->NewFixedArray(kFieldCount, TENURED);
-
+ arr->set(kWrapperTracerHeader, Smi::kZero);
arr->set(kModuleWrapper, *module_wrapper);
if (!module_bytes.is_null()) {
arr->set(kModuleBytes, *module_bytes);
diff --git a/chromium/v8/src/wasm/wasm-objects.h b/chromium/v8/src/wasm/wasm-objects.h
index c526a909b1e..b198cf27551 100644
--- a/chromium/v8/src/wasm/wasm-objects.h
+++ b/chromium/v8/src/wasm/wasm-objects.h
@@ -44,6 +44,7 @@ class WasmInstanceWrapper;
// Representation of a WebAssembly.Module JavaScript-level object.
class WasmModuleObject : public JSObject {
public:
+ // If a second field is added, we need a kWrapperTracerHeader field as well.
// TODO(titzer): add the brand as an internal field instead of a property.
enum Fields { kCompiledModule, kFieldCount };
@@ -58,8 +59,15 @@ class WasmModuleObject : public JSObject {
// Representation of a WebAssembly.Table JavaScript-level object.
class WasmTableObject : public JSObject {
public:
+ // The 0-th field is used by the Blink Wrapper Tracer.
// TODO(titzer): add the brand as an internal field instead of a property.
- enum Fields { kFunctions, kMaximum, kDispatchTables, kFieldCount };
+ enum Fields {
+ kWrapperTracerHeader,
+ kFunctions,
+ kMaximum,
+ kDispatchTables,
+ kFieldCount
+ };
DECLARE_CASTS(WasmTableObject);
DECLARE_ACCESSORS(functions, FixedArray);
@@ -83,8 +91,15 @@ class WasmTableObject : public JSObject {
// Representation of a WebAssembly.Memory JavaScript-level object.
class WasmMemoryObject : public JSObject {
public:
+ // The 0-th field is used by the Blink Wrapper Tracer.
// TODO(titzer): add the brand as an internal field instead of a property.
- enum Fields : uint8_t { kArrayBuffer, kMaximum, kInstancesLink, kFieldCount };
+ enum Fields : uint8_t {
+ kWrapperTracerHeader,
+ kArrayBuffer,
+ kMaximum,
+ kInstancesLink,
+ kFieldCount
+ };
DECLARE_CASTS(WasmMemoryObject);
DECLARE_ACCESSORS(buffer, JSArrayBuffer);
@@ -107,8 +122,10 @@ class WasmMemoryObject : public JSObject {
// Representation of a WebAssembly.Instance JavaScript-level object.
class WasmInstanceObject : public JSObject {
public:
+ // The 0-th field is used by the Blink Wrapper Tracer.
// TODO(titzer): add the brand as an internal field instead of a property.
enum Fields {
+ kWrapperTracerHeader,
kCompiledModule,
kMemoryObject,
kMemoryArrayBuffer,
@@ -142,7 +159,8 @@ class WasmInstanceObject : public JSObject {
// Representation of an exported WASM function.
class WasmExportedFunction : public JSFunction {
public:
- enum Fields { kInstance, kIndex, kFieldCount };
+ // The 0-th field is used by the Blink Wrapper Tracer.
+ enum Fields { kWrapperTracerHeader, kInstance, kIndex, kFieldCount };
DECLARE_CASTS(WasmExportedFunction);
@@ -158,7 +176,9 @@ class WasmExportedFunction : public JSFunction {
// Information shared by all WasmCompiledModule objects for the same module.
class WasmSharedModuleData : public FixedArray {
+ // The 0-th field is used by the Blink Wrapper Tracer.
enum Fields {
+ kWrapperTracerHeader,
kModuleWrapper,
kModuleBytes,
kScript,
@@ -408,7 +428,9 @@ class WasmCompiledModule : public FixedArray {
class WasmDebugInfo : public FixedArray {
public:
+ // The 0-th field is used by the Blink Wrapper Tracer.
enum Fields {
+ kWrapperTracerHeader,
kInstance,
kInterpreterHandle,
kInterpretedFunctions,