summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-01-05 10:20:22 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-01-05 09:32:17 +0000
commitb145b7fafd36f0c260d6a768c81fc14e32578099 (patch)
treee2995d100c509009de9a5ce7dc99386fd7e872bf
parent9cb87fa7638e305ef35b04f54ba07ac4fa04adcb (diff)
downloadqtwebengine-chromium-b145b7fafd36f0c260d6a768c81fc14e32578099.tar.gz
BASELINE: Update Chromium to 47.0.2526.109
Also adds sources for CDM. Change-Id: Id1c834411de135c71deb23b884f2dce902190136 Reviewed-by: Michael Brüning <michael.bruning@theqtcompany.com>
-rw-r--r--chromium/DEPS8
-rw-r--r--chromium/build/util/LASTCHANGE2
-rw-r--r--chromium/build/util/LASTCHANGE.blink2
-rw-r--r--chromium/cc/raster/tile_task_worker_pool.cc9
-rw-r--r--chromium/chrome/VERSION2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_fa.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_da.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_es-419.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_et.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_fa.xtb22
-rw-r--r--chromium/chrome/app/resources/generated_resources_fr.xtb42
-rw-r--r--chromium/chrome/app/resources/generated_resources_hu.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_iw.xtb8
-rw-r--r--chromium/chrome/app/resources/generated_resources_ja.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_kn.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_pt-PT.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_ro.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_sk.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_te.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_tr.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_uk.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_da.xtb4
-rw-r--r--chromium/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb2
-rw-r--r--chromium/components/cdm/DEPS4
-rw-r--r--chromium/components/cdm/OWNERS2
-rw-r--r--chromium/components/cdm/browser/BUILD.gn20
-rw-r--r--chromium/components/cdm/browser/DEPS4
-rw-r--r--chromium/components/cdm/browser/cdm_message_filter_android.cc122
-rw-r--r--chromium/components/cdm/browser/cdm_message_filter_android.h42
-rw-r--r--chromium/components/cdm/browser/widevine_drm_delegate_android.cc43
-rw-r--r--chromium/components/cdm/browser/widevine_drm_delegate_android.h32
-rw-r--r--chromium/components/cdm/common/BUILD.gn17
-rw-r--r--chromium/components/cdm/common/DEPS3
-rw-r--r--chromium/components/cdm/common/OWNERS12
-rw-r--r--chromium/components/cdm/common/cdm_message_generator.cc34
-rw-r--r--chromium/components/cdm/common/cdm_message_generator.h11
-rw-r--r--chromium/components/cdm/common/cdm_messages_android.h43
-rw-r--r--chromium/components/cdm/renderer/BUILD.gn25
-rw-r--r--chromium/components/cdm/renderer/DEPS3
-rw-r--r--chromium/components/cdm/renderer/android_key_systems.cc130
-rw-r--r--chromium/components/cdm/renderer/android_key_systems.h24
-rw-r--r--chromium/components/cdm/renderer/widevine_key_systems.cc93
-rw-r--r--chromium/components/cdm/renderer/widevine_key_systems.h38
-rw-r--r--chromium/content/browser/appcache/appcache_backend_impl.cc18
-rw-r--r--chromium/content/browser/appcache/appcache_dispatcher_host.cc9
-rw-r--r--chromium/content/browser/appcache/appcache_dispatcher_host.h3
-rw-r--r--chromium/content/browser/appcache/appcache_host.cc40
-rw-r--r--chromium/content/browser/appcache/appcache_host.h11
-rw-r--r--chromium/content/browser/appcache/appcache_host_unittest.cc13
-rw-r--r--chromium/content/browser/appcache/appcache_update_job.cc17
-rw-r--r--chromium/content/browser/appcache/appcache_update_job.h1
-rw-r--r--chromium/content/browser/devtools/shared_worker_devtools_manager.cc6
-rw-r--r--chromium/content/browser/loader/upload_data_stream_builder.cc4
-rw-r--r--chromium/content/browser/loader/upload_data_stream_builder_unittest.cc51
-rw-r--r--chromium/content/common/cursors/webcursor.cc6
-rw-r--r--chromium/content/common/sandbox_win.cc2
-rw-r--r--chromium/content/renderer/media/android/webmediaplayer_android.cc12
-rw-r--r--chromium/content/renderer/media/android/webmediaplayer_android.h3
-rw-r--r--chromium/gpu/config/gpu_driver_bug_list_json.cc2
-rw-r--r--chromium/gpu/config/software_rendering_list_json.cc15
-rw-r--r--chromium/media/midi/midi_manager.cc9
-rw-r--r--chromium/media/midi/midi_manager_alsa.cc4
-rw-r--r--chromium/media/midi/midi_manager_mac.cc2
-rw-r--r--chromium/media/video/gpu_memory_buffer_video_frame_pool.cc6
-rw-r--r--chromium/net/http/http_network_transaction_unittest.cc8
-rw-r--r--chromium/net/http/http_stream_parser.cc2
-rw-r--r--chromium/net/http/http_stream_parser.h3
-rw-r--r--chromium/net/quic/crypto/crypto_protocol.h3
-rw-r--r--chromium/net/quic/crypto/quic_crypto_client_config_test.cc41
-rw-r--r--chromium/net/quic/quic_connection.cc6
-rw-r--r--chromium/net/quic/quic_connection_test.cc13
-rw-r--r--chromium/net/quic/quic_crypto_client_stream.cc30
-rw-r--r--chromium/net/quic/quic_crypto_server_stream.cc24
-rw-r--r--chromium/net/quic/quic_crypto_server_stream_test.cc2
-rw-r--r--chromium/net/quic/quic_flags.cc10
-rw-r--r--chromium/net/quic/quic_flags.h3
-rw-r--r--chromium/net/quic/quic_session.cc14
-rw-r--r--chromium/net/quic/quic_session_test.cc8
-rw-r--r--chromium/net/quic/test_tools/crypto_test_utils.cc34
-rw-r--r--chromium/net/quic/test_tools/crypto_test_utils.h6
-rw-r--r--chromium/net/quic/test_tools/mock_crypto_client_stream.cc8
-rw-r--r--chromium/net/quic/test_tools/quic_packet_creator_peer.cc6
-rw-r--r--chromium/net/quic/test_tools/quic_packet_creator_peer.h1
-rw-r--r--chromium/net/tools/quic/quic_client_session_test.cc58
-rw-r--r--chromium/storage/browser/blob/upload_blob_element_reader.cc13
-rw-r--r--chromium/storage/browser/blob/upload_blob_element_reader.h15
-rw-r--r--chromium/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp1
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.cpp6
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h4
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/Node.cpp6
-rw-r--r--chromium/third_party/WebKit/Source/core/dom/Node.h2
-rw-r--r--chromium/third_party/WebKit/Source/core/frame/UseCounter.cpp3
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp2
-rw-r--r--chromium/third_party/WebKit/Source/core/layout/LayoutCounter.cpp4
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathElement.idl46
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSeg.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegList.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoAbs.idl2
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoRel.idl2
-rw-r--r--chromium/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js14
-rw-r--r--chromium/third_party/WebKit/Source/modules/accessibility/AXObject.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/accessibility/testing/InternalsAccessibility.h3
-rw-r--r--chromium/third_party/WebKit/Source/modules/app_banner/AppBannerCallbacks.h3
-rw-r--r--chromium/third_party/WebKit/Source/modules/app_banner/AppBannerController.h7
-rw-r--r--chromium/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/audio_output_devices/SetSinkIdCallbacks.h3
-rw-r--r--chromium/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.h13
-rw-r--r--chromium/third_party/WebKit/Source/modules/background_sync/SyncError.h6
-rw-r--r--chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h6
-rw-r--r--chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothSupplement.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/bluetooth/ConvertWebVectorToArrayBuffer.h5
-rw-r--r--chromium/third_party/WebKit/Source/modules/cachestorage/CacheStorageError.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/cachestorage/GlobalCacheStorage.h3
-rw-r--r--chromium/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/canvas2d/ClipList.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/canvas2d/MouseEventHitRegion.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/canvas2d/TouchHitRegion.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManager.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/credentialmanager/CredentialManagerClient.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/crypto/DOMWindowCrypto.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/crypto/WorkerGlobalScopeCrypto.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/encryptedmedia/EncryptedMediaUtils.h5
-rw-r--r--chromium/third_party/WebKit/Source/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysClient.h3
-rw-r--r--chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysController.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h4
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h12
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/FetchManager.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/fetch/GlobalFetch.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DOMFilePath.h5
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp8
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.h6
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.h6
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.cpp5
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.h5
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h2
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.cpp8
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.h6
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h1
-rw-r--r--chromium/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.h5
-rw-r--r--chromium/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h2
-rw-r--r--chromium/third_party/WebKit/Source/web/PopupMenuImpl.cpp13
-rw-r--r--chromium/third_party/WebKit/Source/web/WebPageSerializerImpl.cpp9
-rw-r--r--chromium/third_party/WebKit/Source/wtf/PartitionAlloc.cpp2
-rw-r--r--chromium/third_party/WebKit/Source/wtf/PartitionAlloc.h7
-rw-r--r--chromium/third_party/skia/src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp7
-rw-r--r--chromium/ui/gfx/canvas.cc80
-rw-r--r--chromium/ui/gfx/canvas.h21
-rw-r--r--chromium/ui/gfx/nine_image_painter.cc121
-rw-r--r--chromium/ui/gfx/nine_image_painter_unittest.cc164
-rw-r--r--chromium/ui/strings/translations/ui_strings_de.xtb2
-rw-r--r--chromium/ui/strings/translations/ui_strings_et.xtb2
-rw-r--r--chromium/v8/include/v8-version.h2
-rw-r--r--chromium/v8/src/ast-value-factory.cc30
-rw-r--r--chromium/v8/src/code-stubs-hydrogen.cc3
-rw-r--r--chromium/v8/src/func-name-inferrer.h38
-rw-r--r--chromium/v8/src/log-utils.h2
-rw-r--r--chromium/v8/src/parser.cc17
-rw-r--r--chromium/v8/src/preparser.h17
182 files changed, 1668 insertions, 558 deletions
diff --git a/chromium/DEPS b/chromium/DEPS
index 245dd3ec9e1..7ab63f241d0 100644
--- a/chromium/DEPS
+++ b/chromium/DEPS
@@ -4,7 +4,7 @@ vars = {
'boringssl_revision':
'0dd93002ddf5adce17db88f1212ca2e14eba6e9c',
'buildspec_platforms':
- 'all',
+ 'chromeos,',
'buildtools_revision':
'0c88009d5c50b9f21b6f8849db08abfb9eb29f1e',
'chromium_git':
@@ -122,7 +122,7 @@ deps = {
'src/third_party/opus/src':
(Var("chromium_git")) + '/chromium/deps/opus.git@cae696156f1e60006e39821e79a1811ae1933c69',
'src/third_party/pdfium':
- 'https://pdfium.googlesource.com/pdfium.git@4ec1953b4ace8248ac443effafa5f651e540d995',
+ 'https://pdfium.googlesource.com/pdfium.git@9c2b4ad8e3bfb3e748874bdfda3f265f0972cfd6',
'src/third_party/py_trace_event/src':
(Var("chromium_git")) + '/external/py_trace_event.git@dd463ea9e2c430de2b9e53dea57a77b4c3ac9b30',
'src/third_party/pyftpdlib/src':
@@ -136,7 +136,7 @@ deps = {
'src/third_party/sfntly/src':
(Var("chromium_git")) + '/external/github.com/googlei18n/sfntly.git@130f832eddf98467e6578b548cb74ce17d04a26d',
'src/third_party/skia':
- (Var("chromium_git")) + '/skia.git@39da2c221c0d5839aea52edd25d715291a560ee0',
+ (Var("chromium_git")) + '/skia.git@ba4e83be6027e68aacc2f1c581e839e88d845c38',
'src/third_party/smhasher/src':
(Var("chromium_git")) + '/external/smhasher.git@e87738e57558e0ec472b2fc3a643b838e5b6e88f',
'src/third_party/snappy/src':
@@ -164,7 +164,7 @@ deps = {
'src/tools/swarming_client':
(Var("chromium_git")) + '/external/swarming.client.git@e4c0e242eeec361886ed2b89591a505ebe24db43',
'src/v8':
- (Var("chromium_git")) + '/v8/v8.git@a10202d1aa3cbaa3b550401bebbe34119b2d20b2'
+ (Var("chromium_git")) + '/v8/v8.git@8e57c726a6ef8a343d3d2ac7372db6f32153a745'
}
deps_os = {
diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE
index c798411d43d..a3c01bf5edc 100644
--- a/chromium/build/util/LASTCHANGE
+++ b/chromium/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=526cbb5e5ebe9e766ae65e33722efdf9b1c5f908
+LASTCHANGE=e87244507f18cc384ab5f55c9999fbcb4438ef17
diff --git a/chromium/build/util/LASTCHANGE.blink b/chromium/build/util/LASTCHANGE.blink
index c798411d43d..a3c01bf5edc 100644
--- a/chromium/build/util/LASTCHANGE.blink
+++ b/chromium/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=526cbb5e5ebe9e766ae65e33722efdf9b1c5f908
+LASTCHANGE=e87244507f18cc384ab5f55c9999fbcb4438ef17
diff --git a/chromium/cc/raster/tile_task_worker_pool.cc b/chromium/cc/raster/tile_task_worker_pool.cc
index b1d7b70a229..e092382a375 100644
--- a/chromium/cc/raster/tile_task_worker_pool.cc
+++ b/chromium/cc/raster/tile_task_worker_pool.cc
@@ -224,13 +224,8 @@ void TileTaskWorkerPool::PlaybackToMemory(void* memory,
SkImageInfo dst_info =
SkImageInfo::Make(info.width(), info.height(), buffer_color_type,
info.alphaType(), info.profileType());
- // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the
- // bitmap data. There will be no need to call SkAlign4 once crbug.com/293728
- // is fixed.
- const size_t dst_row_bytes = SkAlign4(dst_info.minRowBytes());
- DCHECK_EQ(0u, dst_row_bytes % 4);
- bool success = canvas->readPixels(dst_info, memory, dst_row_bytes, 0, 0);
- DCHECK_EQ(true, success);
+ bool rv = canvas->readPixels(dst_info, memory, stride, 0, 0);
+ DCHECK(rv);
}
}
diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION
index c75127522a8..6e0b1e99ff4 100644
--- a/chromium/chrome/VERSION
+++ b/chromium/chrome/VERSION
@@ -1,4 +1,4 @@
MAJOR=47
MINOR=0
BUILD=2526
-PATCH=71
+PATCH=109
diff --git a/chromium/chrome/app/resources/chromium_strings_fa.xtb b/chromium/chrome/app/resources/chromium_strings_fa.xtb
index e4137c988ab..5416fd052d2 100644
--- a/chromium/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_fa.xtb
@@ -158,7 +158,7 @@
<translation id="5823381412099532241">‏Chromium نتوانست به صورت خودکار به جدیدترین نسخه به‌روزرسانی شود، بنابراین ویژگی‌های جدید فوق‌العاده و اشکال‌زدایی‌های امنیتی را از دست می‌دهید. باید Chromium را به‌روزرسانی کنید.</translation>
<translation id="5862307444128926510">‏به Chromium خوش آمدید</translation>
<translation id="5877064549588274448">کانال تغییر کرد. برای اعمال تغییرات دستگاه خود را مجدداً راه‌اندازی کنید.</translation>
-<translation id="5909170354645388250">‏در Chromium استفاده نمی‌شود. نگهدارنده مکان برای نگهداری نقشه‌های مکان به صورت همگام‌سازی. انتظار یک آرگومان می‌رود: 1$.</translation>
+<translation id="5909170354645388250">‏در Chromium استفاده نمی‌شود. نگه‌دارنده برای نگهداری نقشه‌های مکان به‌صورت همگام‌سازی‌شده. انتظار یک آرگومان می‌رود: $1.</translation>
<translation id="5942225298871134766">‏Chromium این مورد را با <ph name="SAVED_PASSWORD_LINK" /> ذخیره می‌کند و دفعه بعد که به آن نیاز داشتید، آن را به خاطر دارد.</translation>
<translation id="5942520288919337908">‏<ph name="EXTENSION_NAME" /> به Chromium اضافه شده است.</translation>
<translation id="59625444380784159">‏جزئیات مخاطبین شما می‌تواند به شما کمک کند فرم‌ها را سریع‌تر در Chromium تکمیل کنید.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_da.xtb b/chromium/chrome/app/resources/generated_resources_da.xtb
index 7a876d609ce..36ff793ecbf 100644
--- a/chromium/chrome/app/resources/generated_resources_da.xtb
+++ b/chromium/chrome/app/resources/generated_resources_da.xtb
@@ -755,7 +755,7 @@
<translation id="2089090684895656482">Mindre</translation>
<translation id="2090165459409185032">Du gendanner dine kontooplysninger ved at gå til: google.com/accounts/recovery</translation>
<translation id="2090876986345970080">Indstillinger for systemsikkerhed</translation>
-<translation id="2097372108957554726">Du skal logge ind på Chrome for at registrere nye enheder</translation>
+<translation id="2097372108957554726">Du skal logge ind i Chrome for at registrere nye enheder</translation>
<translation id="2098305189700762159">Blev ikke fundet</translation>
<translation id="2099172618127234427">Du aktiverer Chrome OS-fejlfindingsfunktioner, som konfigurerer sshd daemon og aktiverer systemgenstart via USB-drev.</translation>
<translation id="2099686503067610784">Slet servercertifikatet "<ph name="CERTIFICATE_NAME" />"?</translation>
@@ -1591,7 +1591,7 @@ Jeg synes ikke, dette website skal blokeres.</translation>
<translation id="3216508313927987948">For at gøre det skal du oplære din <ph name="DEVICE_TYPE" /> via de følgende trin.</translation>
<translation id="3220586366024592812">Behandlingen af forbindelsen til <ph name="CLOUD_PRINT_NAME" /> er gået ned. Vil du genstarte?</translation>
<translation id="3221634914176615296">Udforsk enhedens indhold i appen Filer.</translation>
-<translation id="3222066309010235055">Forudgengivelse: <ph name="PRERENDER_CONTENTS_NAME" /></translation>
+<translation id="3222066309010235055">Forhåndsgengivelse: <ph name="PRERENDER_CONTENTS_NAME" /></translation>
<translation id="3223445644493024689">Kontrolklik for at afspille <ph name="PLUGIN_NAME" />.</translation>
<translation id="3224239078034945833">Canadisk (flere sprog)</translation>
<translation id="3225319735946384299">Kodesignering</translation>
@@ -2973,7 +2973,7 @@ Tryk på en vilkårlig tast for at fortsætte udforskningen.</translation>
<translation id="5167131699331641907">Hollandsk tastatur</translation>
<translation id="5170477580121653719">Ledig plads på Google Drev: <ph name="SPACE_AVAILABLE" />.</translation>
<translation id="5170568018924773124">Vis i mappe</translation>
-<translation id="5171045022955879922">Søg efter, eller indtast en webadresse</translation>
+<translation id="5171045022955879922">Søg, eller indtast webadresse</translation>
<translation id="5175870427301879686"><ph name="URL" /> vil gemme data permanent på din lokale computer.</translation>
<translation id="5177479852722101802">Fortsæt blokering af adgang til kamera og mikrofon</translation>
<translation id="5177526793333269655">Miniaturevisning</translation>
@@ -4116,7 +4116,7 @@ slettes permanent, når den administrerede bruger fjernes. Besøgte websites og
<translation id="6820686453637990663">CVC</translation>
<translation id="6820687829547641339">Gzip-komprimeret tar-arkiv</translation>
<translation id="682123305478866682">Cast skrivebordet</translation>
-<translation id="6823506025919456619">Du skal logge ind på Chrome for at se dine enheder</translation>
+<translation id="6823506025919456619">Du skal logge ind i Chrome for at se dine enheder</translation>
<translation id="6824564591481349393">Kopier &amp;e-mailadresse</translation>
<translation id="6824725898506587159">Administrer sprog</translation>
<translation id="6825883775269213504">Russisk</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_es-419.xtb b/chromium/chrome/app/resources/generated_resources_es-419.xtb
index 8033b7756a2..1399d99aa97 100644
--- a/chromium/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chromium/chrome/app/resources/generated_resources_es-419.xtb
@@ -618,7 +618,7 @@
<translation id="1856715684130786728">Agregar ubicación...</translation>
<translation id="1857166538520940818">Adjuntar archivo:</translation>
<translation id="1858745523832238955"><ph name="ISSUER" /> verificó la identidad de este sitio web. El servidor no proporcionó ninguna información de transparencia de certificados.</translation>
-<translation id="1859234291848436338">Escribiendo dirección</translation>
+<translation id="1859234291848436338">Sentido de la escritura</translation>
<translation id="1864111464094315414">Acceder</translation>
<translation id="1864146862702347178">Habilitar predicción de desplazamiento</translation>
<translation id="1864454756846565995">Dispositivo USB-C (puerto trasero)</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_et.xtb b/chromium/chrome/app/resources/generated_resources_et.xtb
index f169dc40660..8a942a7001f 100644
--- a/chromium/chrome/app/resources/generated_resources_et.xtb
+++ b/chromium/chrome/app/resources/generated_resources_et.xtb
@@ -5254,7 +5254,7 @@ Täislaadimiseks kuluva aja arvutamine</translation>
<translation id="8425755597197517046">Kl&amp;eebi ja otsi</translation>
<translation id="8426519927982004547">HTTPS/SSL</translation>
<translation id="8427933533533814946">Foto autor:</translation>
-<translation id="8428213095426709021">Seadistused</translation>
+<translation id="8428213095426709021">Seaded</translation>
<translation id="8432590265309978927">Algses katsejärgus olev tugi saitidevaheliste iframe'ide renderdamiseks eraldi protsessides.</translation>
<translation id="8432745813735585631">US Colemaki klaviatuur</translation>
<translation id="8434177709403049435">&amp;Kodeerimine</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fa.xtb b/chromium/chrome/app/resources/generated_resources_fa.xtb
index 607fa9b8fe9..5289a3f8ccd 100644
--- a/chromium/chrome/app/resources/generated_resources_fa.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fa.xtb
@@ -1327,7 +1327,7 @@
<translation id="2849936225196189499">مهم</translation>
<translation id="2850124913210091882">پشتیبان‌گیری</translation>
<translation id="2850541429955027218">افزودن طرح زمینه</translation>
-<translation id="2853916256216444076">ویدیوی 1$</translation>
+<translation id="2853916256216444076">ویدیوی $1</translation>
<translation id="2856203831666278378">پاسخ سرور حاوی عنوانهای تکراری است. این مشکل معمولاً به دلیل پیکربندی نادرست وب‌سایت یا پراکسی روی می‌دهد. فقط سرپرست وب‌سایت یا پراکسی می‌تواند این مشکل را حل کند.</translation>
<translation id="2856903399071202337">استثناهای دوربین</translation>
<translation id="2857421400871862029">اگر سایتی می‌خواهد مکان‌نمای موشواره را غیرفعال کند، سؤال شود ( توصیه می‌شود)</translation>
@@ -1583,7 +1583,7 @@
<translation id="3202578601642193415">جدیدترین</translation>
<translation id="3204209274259353887">‏هنگامی که فعال است، WebRTC سعی می‌کند با DTLS 1.2 ارتباط برقرار کند.</translation>
<translation id="3204741654590142272">تغییر کانال بعداً اعمال خواهد شد.</translation>
-<translation id="3206175707080061730">فایلی به نام "1$" از قبل وجود دارد. آیا می‌خواهید آن را جایگزین کنید؟</translation>
+<translation id="3206175707080061730">فایلی به نام «$1» از قبل وجود دارد. آیا می‌خواهید آن را جایگزین کنید؟</translation>
<translation id="3207960819495026254">نشانک‌گذاری شده</translation>
<translation id="320825648481311438">‏وقتی فعال باشد، مرورگر ورود و خروج از حساب‌های Google را مدیریت می‌کند.</translation>
<translation id="3208703785962634733">تأیید نشده</translation>
@@ -2372,7 +2372,7 @@
<translation id="4278390842282768270">مجاز است</translation>
<translation id="4279125075627804580">فعال کردن کنترل واسط کاربر بی‌صدا کردن صدای برگه.</translation>
<translation id="4279490309300973883">بازتاب می‌شود</translation>
-<translation id="4284105660453474798">آیا مطمئنید می‌خواهید "1$" را حذف کنید؟</translation>
+<translation id="4284105660453474798">آیا مطمئنید می‌خواهید "$1" را حذف کنید؟</translation>
<translation id="4285498937028063278">لغو پین</translation>
<translation id="428565720843367874">نرم‌افزار آنتی‌ویروس به‌طور غیرمنتظره‌ای در هنگام اسکن کردن این فایل متوقف شد.</translation>
<translation id="428608937826130504">مورد ۸ قفسه</translation>
@@ -2555,7 +2555,7 @@
<translation id="4573096868619592038">‏Google Payments غیرفعال شد</translation>
<translation id="457386861538956877">بیشتر...</translation>
<translation id="4575703660920788003">‏برای تغییر طرح صفحه، کلیدهای Shift-Alt را فشار دهید.</translation>
-<translation id="4580526846085481512">آیا مطمئنید می‌خواهید موارد 1$ را حذف کنید؟</translation>
+<translation id="4580526846085481512">آیا مطمئنید می‌خواهید موارد $1 را حذف کنید؟</translation>
<translation id="458150753955139441">فشار دهید تا به عقب برگردید، از منوی بافت استفاده کنید تا سابقه را ببینید</translation>
<translation id="4581823559337371475">سرویس ورود به سیستم زیر توسط <ph name="SAML_DOMAIN" /> میزبانی می‌شود. برای ادامه وارد سیستم شوید.</translation>
<translation id="4582563038311694664">بازنشانی همه تنظیمات</translation>
@@ -2589,7 +2589,7 @@
<translation id="4628757576491864469">دستگاه‌ها</translation>
<translation id="4628948037717959914">عکس</translation>
<translation id="462965295757338707">برای ورود، تلفن را به <ph name="DEVICE_TYPE" /> نزدیک‌تر کنید.</translation>
-<translation id="4630590996962964935">نویسه نامعتبر: 1$</translation>
+<translation id="4630590996962964935">نویسه نامعتبر: $1</translation>
<translation id="4631110328717267096">به‌روزرسانی سیستم انجام نشد.</translation>
<translation id="4631502262378200687">هنگام دانلود افزایه خطایی رخ داد (<ph name="ERROR" />).</translation>
<translation id="4632483769545853758">وصل کردن صدای برگه</translation>
@@ -3078,7 +3078,7 @@
<translation id="5319782540886810524">صفحه‌کلید لتونیایی</translation>
<translation id="5321676762462132688">در صورت فعال بودن، تنظیمات به جای اینکه به عنوان یک برگه مرورگر نشان داده شوند، در یک پنجره اختصاصی نمایش داده می‌شوند.</translation>
<translation id="5323213332664049067">آمریکای لاتین</translation>
-<translation id="532360961509278431">نمی‌توانید "1$" را باز کنید: 2$</translation>
+<translation id="532360961509278431">نمی‌توانید «$1» را باز کنید: 2$</translation>
<translation id="5324674707192845912">‏در حال لغو ثبت این <ph name="DEVICE_TYPE" /> در Google هستید تا قابلیت پاک‌کردن، قفل‌کردن و تعیین مکان دستگاه را از راه دور غیرفعال کنید. این کار به راه‌اندازی مجدد نیاز دارد. می‌خواهید ادامه دهید؟</translation>
<translation id="5324780743567488672">تنظیم خودکار منطقه زمانی با استفاده از موقعیت مکانی شما</translation>
<translation id="5325120507747984426">از یک ترتیب پنجره پایدار در حالت نمای کلی استفاده می‌کند که تلاش می‌کند جابه‌جایی پنجره‌ها را هنگام ورود / خروج از نمای کلی و میان جلسه‌های نمای کلی، به حداقل برساند.</translation>
@@ -3321,7 +3321,7 @@
<translation id="5650203097176527467">بارگیری جزئیات خرید</translation>
<translation id="5650551054760837876">هیچ نتیجه‌ای برای جستجو یافت نشد.</translation>
<translation id="5651448275201436327">به برنامه‌های میزبانی‌شده امکان داده شود در پنجره‌ها باز شوند.</translation>
-<translation id="5653140146600257126">پوشه با نام "1$" در حال حاضر موجود است. لطفاً نام دیگری را انتخاب نمایید.</translation>
+<translation id="5653140146600257126">پوشه با نام «$1» در حال حاضر موجود است. لطفاً نام دیگری انتخاب کنید.</translation>
<translation id="5657667036353380798">‏برنامه افزودنی خارجی برای نصب شدن به Chrome نسخه <ph name="MINIMUM_CHROME_VERSION" /> یا بالاتر نیاز دارد.</translation>
<translation id="5659593005791499971">ایمیل</translation>
<translation id="5661272705528507004">این سیم کارت غیرفعال شده و قابل استفاده نیست. لطفاً برای تعویض آن با ارئه دهنده خدمات خود تماس بگیرید.</translation>
@@ -4233,7 +4233,7 @@
<translation id="7004562620237466965">فقط کشف رمز</translation>
<translation id="7005848115657603926">محدوده صفحه معتبر نیست، از <ph name="EXAMPLE_PAGE_RANGE" /> استفاده کنید</translation>
<translation id="7006634003215061422">حاشیه پایین</translation>
-<translation id="7006844981395428048">صدای 1$</translation>
+<translation id="7006844981395428048">صدای $1</translation>
<translation id="7010400591230614821">راهبرد تهاجمی آزادسازی برگه</translation>
<translation id="701080569351381435">مشاهده منبع</translation>
<translation id="7012435537548305893">فهرست برنامه تمام صفحه را در حالت نمای لمسی فعال می‌کند.</translation>
@@ -4977,7 +4977,7 @@
<translation id="8054563304616131773">لطفاً یک آدرس ایمیل معتبر وارد کنید</translation>
<translation id="8054921503121346576">‏صفحه‌کلید USB متصل شد</translation>
<translation id="8056430285089645882">متوجه شدم، دیگر به من نشان داده نشود.</translation>
-<translation id="8059178146866384858">فایلی به نام "1$" از قبل وجود دارد. لطفاً نام دیگری را انتخاب نمایید.</translation>
+<translation id="8059178146866384858">فایلی به نام «$1» از قبل وجود دارد. لطفاً نام دیگری انتخاب کنید.</translation>
<translation id="8059417245945632445">&amp;بازرسی دستگاه‌ها</translation>
<translation id="8061298200659260393">به هیچ سایتی اجازه داده نشود پیام‌های فشاری ارسال کند</translation>
<translation id="8064671687106936412">کلید:</translation>
@@ -5600,7 +5600,7 @@
<translation id="895347679606913382">در حال شروع...</translation>
<translation id="8954894007019320973">(ادامه)</translation>
<translation id="8954952943849489823">انتقال انجام نشد، خطای پیش‌بینی‌نشده: $1</translation>
-<translation id="895586998699996576">تصویر 1$</translation>
+<translation id="895586998699996576">تصویر $1</translation>
<translation id="8957210676456822347">مجوز پورتال محدود</translation>
<translation id="8957423540740801332">راست</translation>
<translation id="8957709627709183338">ایجاد کاربران نظارت شده توسط صاحب این دستگاه محدود شده است.</translation>
@@ -5638,7 +5638,7 @@
<translation id="9003647077635673607">در همه وب‌سایت‌ها مجاز باشد</translation>
<translation id="9003677638446136377">بررسی مجدد</translation>
<translation id="9004952710076978168">یک اعلان برای یک چاپگر ناشناس دریافت شد.</translation>
-<translation id="9006533633560719845">رضایت کاربر برای اسکریپت‌های برنامه افزودنی</translation>
+<translation id="9006533633560719845">رضایت کاربر برای اسکریپت‌های افزونه</translation>
<translation id="9008201768610948239">نادیده گرفتن</translation>
<translation id="9009299913548444929">این ویژگی به صورت موقت در دسترس نیست. <ph name="BEGIN_LINK" />راهنما<ph name="END_LINK" /></translation>
<translation id="9009369504041480176">در حال آپلود کردن (%<ph name="PROGRESS_PERCENT" />)</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_fr.xtb b/chromium/chrome/app/resources/generated_resources_fr.xtb
index e0e3e7faf36..016fe3f6770 100644
--- a/chromium/chrome/app/resources/generated_resources_fr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_fr.xtb
@@ -160,7 +160,7 @@
<translation id="1201402288615127009">Suivant</translation>
<translation id="1201895884277373915">Plus de résultats pour ce site</translation>
<translation id="1202290638211552064">Délai d'expiration atteint au niveau de la passerelle ou du serveur proxy en attente d'une réponse d'un serveur en amont.</translation>
-<translation id="1202596434010270079">L'application de kiosque a été mise à jour. Veuillez débrancher la clé USB.</translation>
+<translation id="1202596434010270079">L'application kiosque a été mise à jour. Veuillez débrancher la clé USB.</translation>
<translation id="1204242529756846967">Cette langue est utilisée pour corriger l'orthographe.</translation>
<translation id="1205489148908752564">Accéder aux comptes utilisateur sur liste blanche et les modifier</translation>
<translation id="1208421848177517699">Translittération (namaste → નમસ્તે)</translation>
@@ -859,7 +859,7 @@
<translation id="2231990265377706070">Point d'exclamation</translation>
<translation id="2232876851878324699">Le fichier contenait un certificat, qui n'a pas été importé :</translation>
<translation id="2233502537820838181">Plus d'informations</translation>
-<translation id="2233587473672843170">Afficher des sites populaires sur la page "Nouvel onglet"</translation>
+<translation id="2233587473672843170">Afficher des sites populaires sur la page Nouvel onglet</translation>
<translation id="223714078860837942">Si une page ne définit aucune stratégie explicite en matière d'URL de provenance, le fait de définir cet indicateur réduit la quantité d'informations dans l'en-tête "referer" des requêtes multi-domaines.</translation>
<translation id="2238379619048995541">Données sur l'état de fréquence</translation>
<translation id="2239921694246509981">Ajouter une personne supervisée</translation>
@@ -1081,7 +1081,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation>
<translation id="2521669435695685156">En cliquant sur "Continuer", vous acceptez les documents <ph name="LEGAL_DOC_LINK_TEXT_1" /> et <ph name="LEGAL_DOC_LINK_TEXT_2" />.</translation>
<translation id="252219247728877310">Composant non mis à jour</translation>
<translation id="2523966157338854187">Ouvrir une page ou un ensemble de pages spécifiques</translation>
-<translation id="2525250408503682495">Attention ! Impossible d'installer l'élément "cryptohome" pour l'application du kiosque.</translation>
+<translation id="2525250408503682495">Attention ! Impossible d'installer l'élément "cryptohome" pour l'application kiosque.</translation>
<translation id="2526590354069164005">Bureau</translation>
<translation id="2526619973349913024">Rechercher des mises à jour</translation>
<translation id="2527167509808613699">Toutes sortes de connexions</translation>
@@ -1257,7 +1257,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation>
<translation id="2781645665747935084">Belge</translation>
<translation id="2783298271312924866">Téléchargé</translation>
<translation id="2783321960289401138">Créer un raccourci…</translation>
-<translation id="2783661497142353826">Gérer les applications du kiosque</translation>
+<translation id="2783661497142353826">Gérer les applications kiosque</translation>
<translation id="2784407158394623927">Activation de votre service Internet mobile</translation>
<translation id="2784556410206159845">Pour assurer la sécurité de votre <ph name="DEVICE_TYPE" />, Smart Lock pour Chromebook nécessite l'activation d'un verrouillage d'écran sur votre téléphone</translation>
<translation id="2784949926578158345">La connexion a été réinitialisée.</translation>
@@ -1267,7 +1267,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation>
<translation id="2788135150614412178">+</translation>
<translation id="2789486458103222910">OK</translation>
<translation id="2790805296069989825">Clavier russe</translation>
-<translation id="2791952154587244007">Une erreur s'est produite. Impossible de lancer automatiquement l'application de kiosque sur cet appareil.</translation>
+<translation id="2791952154587244007">Une erreur s'est produite. Impossible de lancer automatiquement l'application kiosque sur cet appareil.</translation>
<translation id="2794337001681772676">Activer le mode bureau unifié, qui permet à une fenêtre de couvrir plusieurs affichages</translation>
<translation id="2796424461616874739">Expiration du délai d'authentification lors de la connexion à l'appareil "<ph name="DEVICE_NAME" />".</translation>
<translation id="2796740370559399562">Continuer à autoriser les cookies</translation>
@@ -1854,7 +1854,7 @@ Je ne pense pas que ce site devrait être bloqué.</translation>
<translation id="3559661023937741623">Pour votre sécurité, veuillez valider les informations de votre carte de paiement.</translation>
<translation id="3561204836318837461">BSSID :</translation>
<translation id="3561217442734750519">Vous devez indiquer un chemin valide comme valeur de clé privée.</translation>
-<translation id="3563432852173030730">Impossible de télécharger l'application du kiosque.</translation>
+<translation id="3563432852173030730">Impossible de télécharger l'application kiosque.</translation>
<translation id="3564334271939054422">Pour utiliser ce réseau Wi-Fi (<ph name="NETWORK_ID" />), vous devrez peut-être vous rendre sur la page de connexion correspondante.</translation>
<translation id="3564708465992574908">Niveaux de zoom</translation>
<translation id="356512994079769807">Paramètres d'installation système</translation>
@@ -3037,7 +3037,7 @@ Pour poursuivre l'exploration, appuyez sur n'importe quelle touche.</translation
<translation id="5249624017678798539">Le navigateur a planté avant la fin du téléchargement.</translation>
<translation id="5252456968953390977">Itinérance</translation>
<translation id="5253753933804516447">Activez "Ok Google" pour effectuer des recherches vocales lorsque votre écran est actif et déverrouillé.</translation>
-<translation id="52550593576409946">Impossible de lancer l'application du kiosque.</translation>
+<translation id="52550593576409946">Impossible de lancer l'application kiosque.</translation>
<translation id="5255315797444241226">La phrase secrète saisie est incorrecte.</translation>
<translation id="5258266922137542658">PPAPI (dans le processus)</translation>
<translation id="5260508466980570042">Adresse e-mail ou mot de passe incorrect. Veuillez réessayer.</translation>
@@ -3302,7 +3302,7 @@ Pour poursuivre l'exploration, appuyez sur n'importe quelle touche.</translation
<translation id="5613695965848159202">Authentification anonyme :</translation>
<translation id="5614190747811328134">Avertissement utilisateur</translation>
<translation id="5617934323658610138">Activer la publicité BLE dans les applications Chrome</translation>
-<translation id="5618075537869101857">Impossible de lancer l'application du kiosque.</translation>
+<translation id="5618075537869101857">Impossible de lancer l'application kiosque.</translation>
<translation id="5618333180342767515">Cela peut prendre quelques minutes.</translation>
<translation id="5618972959246891967">Date du système</translation>
<translation id="5620568081365989559">Un accès complet à <ph name="FOLDER_PATH" /> est requis pour DevTools.
@@ -3864,7 +3864,7 @@ Il est possible que certaines fonctionnalités ne soient pas disponibles. Veuill
<ph name="TIME" /></translation>
<translation id="6431347207794742960"><ph name="PRODUCT_NAME" /> va configurer les mises à jour automatiques pour tous les utilisateurs de cet ordinateur.</translation>
<translation id="6434309073475700221">Annuler</translation>
-<translation id="6435285122322546452">Gérer les applications de kiosque…</translation>
+<translation id="6435285122322546452">Gérer les applications kiosque…</translation>
<translation id="6436164536244065364">Afficher dans le Web Store</translation>
<translation id="6437213622978068772">Actualiser (Ctrl + R)</translation>
<translation id="6438234780621650381">Réinitialiser les paramètres</translation>
@@ -3978,7 +3978,7 @@ Il est possible que certaines fonctionnalités ne soient pas disponibles. Veuill
<translation id="6575251558004911012">Me demander lorsqu'un site demande l'accès à ma caméra (recommandé)</translation>
<translation id="6581162200855843583">Lien Google Drive</translation>
<translation id="6583070985841601920">Connecté avec l'adresse <ph name="USER_EMAIL_ADDRESS" />. Votre administrateur a désactivé la synchronisation.</translation>
-<translation id="65832705307647870">Préremplit la page "Nouvel onglet" avec des sites populaires.</translation>
+<translation id="65832705307647870">Préremplit la page Nouvel onglet avec des sites populaires.</translation>
<translation id="6584878029876017575">Signature permanente Microsoft</translation>
<translation id="6585234750898046415">Choisissez une image à associer à votre compte. Celle-ci s'affichera sur l'écran de connexion.</translation>
<translation id="6585283250473596934">Ouverture d'une session publique en cours…</translation>
@@ -4172,7 +4172,7 @@ Il est possible que certaines fonctionnalités ne soient pas disponibles. Veuill
<translation id="6886871292305414135">Ouvrir le lien dans un nouvel ongle&amp;t</translation>
<translation id="6896758677409633944">Copier</translation>
<translation id="6897140037006041989">Agent utilisateur</translation>
-<translation id="6898440773573063262">Les applications de kiosque peuvent désormais être configurées pour se lancer automatiquement sur cet appareil.</translation>
+<translation id="6898440773573063262">Les applications kiosque peuvent désormais être configurées pour se lancer automatiquement sur cet appareil.</translation>
<translation id="6898699227549475383">Organisation (O)</translation>
<translation id="6900284862687837908">Application en arrière-plan : <ph name="BACKGROUND_APP_URL" /></translation>
<translation id="6904344821472985372">Révoquer l'accès aux fichiers</translation>
@@ -4584,7 +4584,7 @@ Conseil : Le mode navigation privée (<ph name="SHORTCUT_KEY" />) pourra vous
<translation id="7474889694310679759">Clavier anglais canadien</translation>
<translation id="7475671414023905704">URL de mot de passe perdu Netscape</translation>
<translation id="7477347901712410606">Si vous avez oublié votre phrase secrète, interrompez la synchronisation, puis reconfigurez-la via <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
-<translation id="7478485216301680444">Impossible d'installer l'application du kiosque.</translation>
+<translation id="7478485216301680444">Impossible d'installer l'application kiosque.</translation>
<translation id="7479479221494776793">Si vous restez inactif, vous allez être déconnecté dans <ph name="LOGOUT_TIME_LEFT" />.</translation>
<translation id="7481312909269577407">Avancer</translation>
<translation id="748138892655239008">Contraintes de base du certificat</translation>
@@ -4643,7 +4643,7 @@ Conseil : Le mode navigation privée (<ph name="SHORTCUT_KEY" />) pourra vous
<translation id="7556033326131260574">Smart Lock n'a pas pu valider votre compte. Veuillez saisir votre mot de passe pour accéder à l'appareil.</translation>
<translation id="7556242789364317684">Malheureusement, il est impossible de récupérer vos paramètres <ph name="SHORT_PRODUCT_NAME" />. Pour corriger cette erreur, votre appareil doit être réinitialisé avec la fonctionnalité <ph name="SHORT_PRODUCT_NAME" /> Powerwash.</translation>
<translation id="7558050486864662801">Me demander lorsqu'un site demande l'accès à mon micro (recommandé)</translation>
-<translation id="7559719679815339381">Veuillez patienter… L'application de kiosque est en cours de mise à jour. Ne débranchez pas la clé USB.</translation>
+<translation id="7559719679815339381">Veuillez patienter… L'application kiosque est en cours de mise à jour. Ne débranchez pas la clé USB.</translation>
<translation id="7561196759112975576">Toujours</translation>
<translation id="7563991800558061108">Pour résoudre cette erreur, vous devez vous connecter à votre compte Google
sur l'écran de connexion, puis vous déconnecter de votre compte et
@@ -4700,7 +4700,7 @@ Conseil : Le mode navigation privée (<ph name="SHORTCUT_KEY" />) pourra vous
<translation id="7629536005696009600">Autoriser l'insertion des identifiants stockés pour les applications Android dans les sites Web correspondants</translation>
<translation id="7629827748548208700">Onglet : <ph name="TAB_NAME" /></translation>
<translation id="7631887513477658702">&amp;Toujours ouvrir les fichiers de ce type</translation>
-<translation id="7632948528260659758">Échec de la mise à jour des applications de kiosque suivantes :</translation>
+<translation id="7632948528260659758">Échec de la mise à jour des applications kiosque suivantes :</translation>
<translation id="7634554953375732414">Votre connexion à ce site n'est pas privée.</translation>
<translation id="7634566076839829401">Une erreur s'est produite. Veuillez réessayer.</translation>
<translation id="7639178625568735185">OK</translation>
@@ -4856,7 +4856,7 @@ Conseil : Le mode navigation privée (<ph name="SHORTCUT_KEY" />) pourra vous
<translation id="7861215335140947162">&amp;Téléchargements</translation>
<translation id="7863133010182113457">Effacer les économies de données obtenues via le proxy de réduction de données au démarrage de Chrome</translation>
<translation id="7864539943188674973">Désactiver le Bluetooth</translation>
-<translation id="7870790288828963061">Aucune nouvelle version d'une application de kiosque n'a été trouvée. Aucune mise à jour n'est disponible. Veuillez débrancher la clé USB.</translation>
+<translation id="7870790288828963061">Aucune nouvelle version d'une application kiosque n'a été trouvée. Aucune mise à jour n'est disponible. Veuillez débrancher la clé USB.</translation>
<translation id="787150342916295244">Lecture de cartes de paiement</translation>
<translation id="7876243839304621966">Tout supprimer</translation>
<translation id="7877451762676714207">Erreur serveur inconnue. Veuillez réessayer ou contacter l'administrateur du serveur.</translation>
@@ -4987,7 +4987,7 @@ Conservez votre fichier de clé en lieu sûr. Vous en aurez besoin lors de la cr
<translation id="8037117027592400564">Accéder à l'ensemble du texte énoncé à l'aide de la synthèse vocale</translation>
<translation id="803771048473350947">Fichier</translation>
<translation id="8038111231936746805">(par défaut)</translation>
-<translation id="8041535018532787664">Ajouter une application du kiosque :</translation>
+<translation id="8041535018532787664">Ajouter une application kiosque :</translation>
<translation id="8041940743680923270">Utiliser le paramètre global par défaut ("Demander")</translation>
<translation id="8044899503464538266">Lente</translation>
<translation id="8045462269890919536">Roumain</translation>
@@ -5217,7 +5217,7 @@ Calcul de la durée restante</translation>
<translation id="8358685469073206162">Restaurer les pages ?</translation>
<translation id="8362900609631365882">Activer la fonctionnalité d'accessibilité pour le changement d'onglets</translation>
<translation id="8363095875018065315">stable</translation>
-<translation id="8366396658833131068">Votre connexion réseau est rétablie. Veuillez sélectionner un autre réseau ou appuyer sur "Continuer" ci-dessous pour lancer votre application de kiosque.</translation>
+<translation id="8366396658833131068">Votre connexion réseau est rétablie. Veuillez sélectionner un autre réseau ou appuyer sur "Continuer" ci-dessous pour lancer votre application kiosque.</translation>
<translation id="8366694425498033255">Touches de sélection</translation>
<translation id="8368859634510605990">&amp;Ouvrir tous les favoris</translation>
<translation id="836961001039546082">Activer l'interface utilisateur matérielle pour les PDF</translation>
@@ -5303,7 +5303,7 @@ Calcul de la durée restante</translation>
<translation id="8487678622945914333">Zoom avant</translation>
<translation id="8487693399751278191">Importer mes favoris maintenant...</translation>
<translation id="8487700953926739672">Disponible hors connexion</translation>
-<translation id="8490896350101740396">Les applications de kiosque "<ph name="UPDATED_APPS" />" ont bien été mises à jour. Veuillez redémarrer l'appareil afin de terminer la procédure.</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="8494214181322051417">Nouveau !</translation>
<translation id="8494979374722910010">Échec de la tentative de connexion au serveur.</translation>
@@ -5484,7 +5484,7 @@ Calcul de la durée restante</translation>
<translation id="8731332457891046104">Annuler l'enregistrement du <ph name="DEVICE_TYPE" /></translation>
<translation id="8732030010853991079">Utilisez cette extension en cliquant sur cette icône</translation>
<translation id="8732212173949624846">Consulter et modifier votre historique de navigation sur tous les appareils sur lesquels vous êtes connecté à votre compte</translation>
-<translation id="8734073480934656039">L'activation de ce paramètre entraîne le lancement automatique des applications de kiosque au démarrage.</translation>
+<translation id="8734073480934656039">L'activation de ce paramètre entraîne le lancement automatique des applications kiosque au démarrage.</translation>
<translation id="8736288397686080465">Ce site a été mis à jour en arrière-plan.</translation>
<translation id="8737260648576902897">Installer Adobe Reader</translation>
<translation id="8737685506611670901">Ouvrir les liens "<ph name="PROTOCOL" />" à la place de "<ph name="REPLACED_HANDLER_TITLE" />"</translation>
@@ -5516,7 +5516,7 @@ Calcul de la durée restante</translation>
<translation id="8777218413579204310">Détecter le contenu</translation>
<translation id="8777628254805677039">mot de passe racine</translation>
<translation id="878069093594050299">Ce certificat a été vérifié pour les utilisations suivantes :</translation>
-<translation id="8782565991310229362">Annulation du lancement de l'application du kiosque.</translation>
+<translation id="8782565991310229362">Annulation du lancement de l'application kiosque.</translation>
<translation id="8783093612333542422">&lt;strong&gt;<ph name="SENDER" />&lt;/strong&gt; souhaite partager une imprimante &lt;strong&gt;<ph name="PRINTER_NAME" />&lt;/strong&gt; avec vous.</translation>
<translation id="878431691778285679">Il semble que vous gérez déjà un utilisateur portant ce nom.<ph name="LINE_BREAK" />Voulez-vous <ph name="BEGIN_LINK" />importer <ph name="PROFILE_NAME" /> sur cet appareil<ph name="END_LINK" /> ?</translation>
<translation id="8784626084144195648">Moyenne des éléments placés dans la corbeille</translation>
@@ -5569,7 +5569,7 @@ Calcul de la durée restante</translation>
<translation id="8870413625673593573">Récemment fermés</translation>
<translation id="8871696467337989339">Vous utilisez un indicateur de ligne de commande non pris en charge : <ph name="BAD_FLAG" />. La stabilité et la sécurité en seront affectées.</translation>
<translation id="8871974300055371298">Paramètres du contenu</translation>
-<translation id="8872155268274985541">Fichier manifeste de mise à jour externe de kiosque non valide. Échec de la mise à jour de l'application de kiosque. Veuillez débrancher la clé USB.</translation>
+<translation id="8872155268274985541">Fichier manifeste de mise à jour externe de kiosque non valide. Échec de la mise à jour de l'application kiosque. Veuillez débrancher la clé USB.</translation>
<translation id="8874184842967597500">Non connecté</translation>
<translation id="8876215549894133151">Format :</translation>
<translation id="8877448029301136595">[répertoire parent]</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_hu.xtb b/chromium/chrome/app/resources/generated_resources_hu.xtb
index 5bb466e01a8..ea5745d99e4 100644
--- a/chromium/chrome/app/resources/generated_resources_hu.xtb
+++ b/chromium/chrome/app/resources/generated_resources_hu.xtb
@@ -676,7 +676,7 @@
<translation id="1951615167417147110">Felgörgetés egy oldalnyival</translation>
<translation id="1956050014111002555">A fájl több tanúsítványt tartalmazott, amelyek közül egy sincs importálva:</translation>
<translation id="1957988341423158185">Navigálás nyomon követésének nyomcímkéje</translation>
-<translation id="1958820272620550857">Elemek blokkolása</translation>
+<translation id="1958820272620550857">Elemek letiltása</translation>
<translation id="1962233722219655970">Az oldal olyan Natív kliensalkalmazást használ, amely nem működik a számítógépén.</translation>
<translation id="1965328510789761112">Saját memória</translation>
<translation id="1965624977906726414">Nem rendelkezik speciális engedélyekkel.</translation>
@@ -4444,7 +4444,7 @@ Győződjön meg arról, hogy nem ad ki bizalmas adatokat.</translation>
<translation id="7331991248529612614">Olvasási mód gomb animációjának engedélyezése</translation>
<translation id="7334190995941642545">A Smart Lock jelenleg nem áll rendelkezésre. Próbálja újra később.</translation>
<translation id="7336748286991450492"><ph name="SIGN_IN_LINK" />, és mindenhol kéznél lesznek a könyvjelzői.</translation>
-<translation id="7337488620968032387">A(z) <ph name="PRODUCT_NAME" /> problémákat észlelt a hálózat elérése során. <ph name="LINE_BREAK" /> Ez azért történhetett meg, mert tűzfala vagy víruskereső szoftvere a(z) <ph name="PRODUCT_NAME" /> alkalmazást tévesen a mobil eszközén lévő behatolónak véli, ezért blokkolja az internethez való hozzáférését.</translation>
+<translation id="7337488620968032387">A(z) <ph name="PRODUCT_NAME" /> problémákat észlelt a hálózat elérése során. <ph name="LINE_BREAK" /> Ez azért történhetett meg, mert a tűzfal vagy a víruskereső szoftver a(z) <ph name="PRODUCT_NAME" /> alkalmazást tévesen a mobil eszközén lévő behatolónak véli, ezért letiltja az internethez való hozzáférését.</translation>
<translation id="7339763383339757376">PKCS #7, egyedüli tanúsítvány</translation>
<translation id="7339785458027436441">Helyesírás-ellenőrzés gépeléskor</translation>
<translation id="7339898014177206373">Új ablak</translation>
@@ -5088,7 +5088,7 @@ A kulcsfájlt tartsa biztonságos helyen. Szüksége lesz rá ahhoz, hogy új ve
<translation id="8214962590150211830">Személy eltávolítása</translation>
<translation id="8216170236829567922">Thai beviteli mód (Pattachote billentyűzet)</translation>
<translation id="8216278935161109887">Jelentkezzen ki, majd jelentkezzen be ismét</translation>
-<translation id="8217399928341212914">Továbbra is blokkolja több fájl automatikus letöltését</translation>
+<translation id="8217399928341212914">Továbbra is tiltsa le több fájl automatikus letöltését</translation>
<translation id="8221729492052686226">Ha nem Ön kezdeményezte ezt a kérelmet, akkor lehet, hogy támadást kíséreltek meg számítógépe ellen. Hacsak nem kifejezetten Ön csinált valamit, hogy kezdeményezze ezt a kérelmet, akkor javasoljuk, hogy a "Ne tegyen semmit" lehetőséget válassza.</translation>
<translation id="8222121761382682759">Eltávolítás…</translation>
<translation id="8223479393428528563">A fájlok offline használatra való mentéséhez lépjen fel újra az online felületre, kattintson jobb gombbal a fájlokra, és válassza a(z) <ph name="OFFLINE_CHECKBOX_NAME" /> lehetőséget.</translation>
@@ -5616,7 +5616,7 @@ függetlenül a következő kártyára lesz terhelve: <ph name="BACKING_CREDIT_C
<translation id="8965697826696209160">Nincs elég tárhely.</translation>
<translation id="8968527460726243404">ChromeOS System Image Writer</translation>
<translation id="89720367119469899">Vezérlő</translation>
-<translation id="8972513834460200407">Kérdezze meg hálózati rendszergazdájától, hogy a tűzfal nem blokkolja-e a Google szervereiről érkező letöltéseket.</translation>
+<translation id="8972513834460200407">Kérdezze meg a hálózati rendszergazdától, hogy a tűzfal nem tiltja-e le a Google szervereiről érkező letöltéseket.</translation>
<translation id="8972727166872864532">Hoppá! Meg kell kérdezned a szülőket, hogy meg szabad-e látogatnod ezt az oldalt.</translation>
<translation id="8974161578568356045">Automatikus felismerés</translation>
<translation id="8978526688207379569">Ez a webhely automatikusan letöltött több fájlt.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_iw.xtb b/chromium/chrome/app/resources/generated_resources_iw.xtb
index 6038c02f9a7..d5af874561c 100644
--- a/chromium/chrome/app/resources/generated_resources_iw.xtb
+++ b/chromium/chrome/app/resources/generated_resources_iw.xtb
@@ -1296,7 +1296,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="2815693974042551705">הוסף את התיקייה לסימניות</translation>
<translation id="2816269189405906839">‏שטת קלט סינית (cangjie)</translation>
<translation id="2817109084437064140">יבא וקשר להתקן...</translation>
-<translation id="2817861546829549432">הפעלת התכונה 'אל תעקוב' תגרום להכללת בקשה בתנועת הגלישה שלך. ההשפעה שלה תלויה בנכונות של אתר להגיב לבקשה, ובאופן שבו הבקשה תפורש. לדוגמה, אתרים מסוימים עשויים להגיב לבקשה זו על ידי הצגת מודעות שאינן מבוססות על אתרים אחרים שבהם ביקרת. אתרי אינטרנט רבים עדיין יאספו את נתוני הגלישה שלך וישתמשו בהם - למשל, כדי לשפר את האבטחה, לספק תוכן, שירותים, מודעות והמלצות באתרי האינטרנט שלהם ולהפיק סטטיסטיקת דיווח.</translation>
+<translation id="2817861546829549432">הפעלת התכונה 'ללא מעקב' תגרום להכללת בקשה בתנועת הגלישה שלך. ההשפעה שלה תלויה בנכונות של אתר להגיב לבקשה, ובאופן שבו הבקשה תפורש. לדוגמה, אתרים מסוימים עשויים להגיב לבקשה זו על ידי הצגת מודעות שאינן מבוססות על אתרים אחרים שבהם ביקרת. אתרי אינטרנט רבים עדיין יאספו את נתוני הגלישה שלך וישתמשו בהם - למשל, כדי לשפר את האבטחה, לספק תוכן, שירותים, מודעות והמלצות באתרי האינטרנט שלהם ולהפיק סטטיסטיקת דיווח.</translation>
<translation id="2819994928625218237">&amp;אין הצעות לאיות</translation>
<translation id="2822854841007275488">ערבית</translation>
<translation id="2824036200576902014">מקלדת וירטואלית צפה.</translation>
@@ -3058,7 +3058,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="5294529402252479912">‏עדכן את Adobe Reader עכשיו</translation>
<translation id="5298219193514155779">נושא שנוצר על ידי</translation>
<translation id="5298363578196989456">לא ניתן לייבא את התוסף "<ph name="IMPORT_NAME" />" מפני שהוא אינו מודול משותף.</translation>
-<translation id="5299109548848736476">אל תעקוב</translation>
+<translation id="5299109548848736476">ללא מעקב</translation>
<translation id="5299682071747318445">כל הנתונים מסונכרנים באמצעות משפט הסיסמה שלך לסנכרון</translation>
<translation id="5300589172476337783">הצג</translation>
<translation id="5301751748813680278">נכנס כאורח.</translation>
@@ -3532,7 +3532,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="5956585768868398362">האם זהו דף החיפוש שציפית לראות?</translation>
<translation id="5957613098218939406">אפשרויות נוספות</translation>
<translation id="5958529069007801266">משתמש בפיקוח</translation>
-<translation id="5958994127112619898">פשט את הדף</translation>
+<translation id="5958994127112619898">דף פשוט יותר</translation>
<translation id="5959471481388474538">הרשת לא זמינה</translation>
<translation id="5963026469094486319">ראה עיצובים</translation>
<translation id="5963453369025043595"><ph name="NUM_HANDLES" /> (שיא של <ph name="NUM_KILOBYTES_LIVE" />)</translation>
@@ -5482,7 +5482,7 @@ http://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-featur
<translation id="8787254343425541995">‏אפשר שרתי proxy עבור רשתות משותפות</translation>
<translation id="878763818693997570">השם הזה ארוך מדי</translation>
<translation id="8787865569533773240">אפס הגדרות <ph name="IDS_SHORT_PRODUCT_NAME" /> שהשתנו</translation>
-<translation id="8791534160414513928">שלח בקשת 'אל תעקוב' יחד עם תנועת הגלישה שלך</translation>
+<translation id="8791534160414513928">שלח בקשת 'ללא מעקב' יחד עם תנועת הגלישה שלך</translation>
<translation id="8795668016723474529">הוסף כרטיס אשראי</translation>
<translation id="8795916974678578410">חלון חדש</translation>
<translation id="8798099450830957504">ברירת מחדל</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ja.xtb b/chromium/chrome/app/resources/generated_resources_ja.xtb
index a62083b3b77..f9f52531721 100644
--- a/chromium/chrome/app/resources/generated_resources_ja.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ja.xtb
@@ -2973,7 +2973,7 @@
<translation id="5167131699331641907">オランダ語キーボード</translation>
<translation id="5170477580121653719">Google ドライブの残容量: <ph name="SPACE_AVAILABLE" /></translation>
<translation id="5170568018924773124">フォルダを開く</translation>
-<translation id="5171045022955879922">検索するか URL を入力してください</translation>
+<translation id="5171045022955879922">検索または URL を入力</translation>
<translation id="5175870427301879686"><ph name="URL" /> では、データをローカル コンピュータに永続的に保存することを要求しています。</translation>
<translation id="5177479852722101802">カメラとマイクへのアクセスを引き続きブロックする</translation>
<translation id="5177526793333269655">サムネイル ビュー</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_kn.xtb b/chromium/chrome/app/resources/generated_resources_kn.xtb
index babde8de4f6..3d753f58098 100644
--- a/chromium/chrome/app/resources/generated_resources_kn.xtb
+++ b/chromium/chrome/app/resources/generated_resources_kn.xtb
@@ -3915,7 +3915,7 @@
<translation id="6510391806634703461">ಹೊಸ ಬಳಕೆದಾರ</translation>
<translation id="6510568984200103950">ಕೆಲವು ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
<translation id="6514565641373682518">ಈ ಪುಟವು ನಿಮ್ಮ ಮೌಸ್ ಕರ್ಸರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿದೆ.</translation>
-<translation id="6516193643535292276">ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
+<translation id="6516193643535292276">ಇಂಟರ್ನೆಟ್‌ ಸಂಪರ್ಕ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
<translation id="6518014396551869914">ಇಮೇಜ್ ಅನ್ನು ನಕ&amp;ಲಿಸಿ</translation>
<translation id="6518066513180887959"><ph name="NEW_PROFILE_NAME" /> ಎಂದು ಹೆಸರಿಸಲಾದ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲಾಗಿದೆ. ಯಾವ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರು ವೀಕ್ಷಿಸಬಹುದು ಎಂಬುದನ್ನು ಹೊಂದಿಸಲು, ನೀವು <ph name="BEGIN_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_LINK" /> ಗೆ ಭೇಟಿ ನೀಡುವ ಮೂಲಕ ನಿರ್ಬಂಧನೆಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು. ನೀವು ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸದಿದ್ದರೆ, <ph name="NEW_PROFILE_NAME" /> ಅವರು ವೆಬ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಸೈಟ್‌ಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡಬಹುದು.
@@ -4229,7 +4229,7 @@
<translation id="699220179437400583">ಸಂಭಾವ್ಯ ಸುರಕ್ಷತಾ ಸಂಬಂಧಿತ ಘಟನೆಗಳ ವಿವರಗಳನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವರದಿ ಮಾಡು</translation>
<translation id="6993929801679678186">ಸ್ವಯಂತುಂಬುವಿಕೆಯ ಪೂರ್ವಸೂಚನೆಗಳನ್ನು ತೋರಿಸಿ</translation>
<translation id="6998711733709403587"><ph name="SELCTED_FOLDERS_COUNT" /> ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation>
-<translation id="6998872712520806535">{NUM_PAGES,plural, =1{ಕೆಳಗಿನ ಪುಟವು ಪ್ರತಿಕ್ರಿಯೆರಹಿತವಾಗಿದೆ. ಅದು ಪ್ರತಿಕ್ರಿಯಿಸುವವರೆಗೆ ನೀವು ಕಾಯಬಹುದು ಅಥವಾ ಅದನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}one{ಕೆಳಗಿನ ಪುಟಗಳು ಪ್ರತಿಕ್ರಿಯೆರಹಿತವಾಗಿವೆ. ಪುಟಗಳು ಪ್ರತಿಕ್ರಿಯಿಸುವವರೆಗೆ ನೀವು ಕಾಯಬಹುದು ಅಥವಾ ಅವುಗಳನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}other{ಕೆಳಗಿನ ಪುಟಗಳು ಪ್ರತಿಕ್ರಿಯೆರಹಿತವಾಗಿವೆ. ಪುಟಗಳು ಪ್ರತಿಕ್ರಿಯಿಸುವವರೆಗೆ ನೀವು ಕಾಯಬಹುದು ಅಥವಾ ಅವುಗಳನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}}</translation>
+<translation id="6998872712520806535">{NUM_PAGES,plural, =1{ಕೆಳಗಿನ ಪುಟವು ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಅದು ಸ್ಪಂದಿಸುವವರೆಗೂ ನೀವು ಕಾಯಬಹುದು ಇಲ್ಲವೇ ಅದನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}one{ಕೆಳಗಿನ ಪುಟವು ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಅದು ಸ್ಪಂದಿಸುವವರೆಗೂ ನೀವು ಕಾಯಬಹುದು ಇಲ್ಲವೇ ಅದನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}other{ಕೆಳಗಿನ ಪುಟವು ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಅದು ಸ್ಪಂದಿಸುವವರೆಗೂ ನೀವು ಕಾಯಬಹುದು ಇಲ್ಲವೇ ಅದನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬಹುದು.}}</translation>
<translation id="7002055706763150362">Chromebook ಗೆ Smart Lock ಹೊಂದಿಸಲು, ಇದು ನೀವೇ ಎಂಬುದನ್ನು Google ಗೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕಾದ ಅಗತ್ಯವಿದೆ - ಪ್ರಾರಂಭಿಸಲು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ.</translation>
<translation id="7002454948392136538">ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರಿಗಾಗಿ ನಿರ್ವಾಹಕರನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
<translation id="7003257528951459794">ಆವರ್ತನೆ:</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
index a6036876304..aaf1c7ae5d6 100644
--- a/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chromium/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -5421,7 +5421,7 @@ Mantenha o seu ficheiro de chave num local seguro, pois irá precisar dele para
<translation id="8677039480012021122">Limpar dados e desligar</translation>
<translation id="8677212948402625567">Reduzir tudo...</translation>
<translation id="8678648549315280022">Gerir definições de transferência...</translation>
-<translation id="8680251145628383637">Inicie sessão para obter os seus separadores, os marcadores, o histórico, as palavras-passe e outras definições em todos os seus dispositivos. Além disso, também inicia sessão automaticamente nos serviços Google.</translation>
+<translation id="8680251145628383637">Inicie sessão para obter os seus marcadores, o histórico, as palavras-passe e outras definições em todos os seus dispositivos. Além disso, também inicia sessão automaticamente nos serviços Google.</translation>
<translation id="8680536109547170164"><ph name="QUERY" />, resposta, <ph name="ANSWER" /></translation>
<translation id="8680787084697685621">Os detalhes de início de sessão na conta estão desactualizados.</translation>
<translation id="8684255857039823328">Palavra-passe guardada. Aceda às suas palavras-passe a partir de qualquer dispositivo em <ph name="MANAGEMENT_LINK" />.</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ro.xtb b/chromium/chrome/app/resources/generated_resources_ro.xtb
index a96cae85881..ab390fdc004 100644
--- a/chromium/chrome/app/resources/generated_resources_ro.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ro.xtb
@@ -2309,7 +2309,7 @@ Toți utilizatorii trebuie să se deconecteze pentru a continua.</translation>
<translation id="4157869833395312646">Criptografie Microsoft bazată pe server</translation>
<translation id="4159681666905192102">Acesta este un cont pentru copii gestionat de <ph name="CUSTODIAN_EMAIL" /> și de <ph name="SECOND_CUSTODIAN_EMAIL" />.</translation>
<translation id="4163560723127662357">Tastatură necunoscută</translation>
-<translation id="4165986682804962316">Setări pentru site</translation>
+<translation id="4165986682804962316">Setări pentru site-uri</translation>
<translation id="4166210099837486476">Monitorizează când acționezi în Chrome</translation>
<translation id="4168015872538332605">Aveți acces la anumite setări care aparțin utilizatorului <ph name="PRIMARY_EMAIL" />. Aceste setări vă afectează contul numai când folosiți conectarea multiplă.</translation>
<translation id="4172051516777682613">Afișați întotdeauna</translation>
@@ -5394,7 +5394,7 @@ Păstrează fișierul cu cheia într-un loc sigur. Acesta va fi necesar la crear
<translation id="8605503133013456784">Deconectarea de la și anularea împerecherii cu „<ph name="DEVICE_NAME" />” a eșuat.</translation>
<translation id="8606726445206553943">Folosească dispozitive MIDI</translation>
<translation id="8609432254184257462">Cardul tău a fost protejat cu ajutorul cardului virtual Google Payments (<ph name="FRONTING_CREDIT_CARD" />), iar acest număr va apărea pe chitanță. Costul acestei achiziții va fi debitat în continuare de pe cardul <ph name="BACKING_CREDIT_CARD" />.</translation>
-<translation id="8610892630019863050">Notifică-mă dacă un site vrea să afișeze notificări (recomandat)</translation>
+<translation id="8610892630019863050">Anunță-mă dacă un site vrea să afișeze notificări (recomandat)</translation>
<translation id="8615618338313291042">Aplicație incognito: <ph name="APP_NAME" /></translation>
<translation id="8616748524633185354">Anumite pagini web folosesc extensii JavaScript vechi sau non-standard care pot intra în conflict cu cele mai recente funcții JavaScript. Pentru compatibilitatea cu astfel de pagini, acest semnalizator dezactivează acceptarea acelor funcții.</translation>
<translation id="8619892228487928601"><ph name="CERTIFICATE_NAME" />: <ph name="ERROR" /></translation>
diff --git a/chromium/chrome/app/resources/generated_resources_sk.xtb b/chromium/chrome/app/resources/generated_resources_sk.xtb
index 53fada6980e..a807dc01008 100644
--- a/chromium/chrome/app/resources/generated_resources_sk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_sk.xtb
@@ -1095,7 +1095,7 @@ Tieto webové stránky by podľa mňa nemali byť blokované.</translation>
<translation id="2541423446708352368">Zobraziť všetky stiahnuté súbory</translation>
<translation id="2542049655219295786">Tabuľka Google</translation>
<translation id="254416073296957292">&amp;Nastavenie jazyka...</translation>
-<translation id="2546283357679194313">Súbory cookie a údaje stránok</translation>
+<translation id="2546283357679194313">Súbory cookie a dáta webov</translation>
<translation id="2549646943416322527">Seccomp Detector</translation>
<translation id="2552545117464357659">Novšie</translation>
<translation id="2553100941515833716">Obnoviť stav inštalácie Spúšťača aplikácii pri každom reštartovaní.</translation>
@@ -2887,7 +2887,7 @@ Ak chcete pokračovať v práci, stlačte ľubovoľný kláves.</translation>
<translation id="5038863510258510803">Prebieha povoľovanie...</translation>
<translation id="5039512255859636053">$1 TB</translation>
<translation id="5039804452771397117">Povoliť</translation>
-<translation id="5040262127954254034">Súkromie</translation>
+<translation id="5040262127954254034">Ochrana súkromia</translation>
<translation id="5045550434625856497">Nesprávne heslo</translation>
<translation id="5048179823246820836">Severské</translation>
<translation id="5050209346295804497">Zakázať požadovanie gest na prehrávanie médií.</translation>
@@ -4970,7 +4970,7 @@ Súbor kľúča uložte na bezpečné miesto. Budete ho potrebovať na vytvoreni
<translation id="8023801379949507775">Aktualizovať rozšírenia</translation>
<translation id="8025789898011765392">Úlohy</translation>
<translation id="802597130941734897">Spravovať dodacie adresy...</translation>
-<translation id="8026334261755873520">Vymazať údaje prehliadania</translation>
+<translation id="8026334261755873520">Vymazať dáta prehliadania</translation>
<translation id="8026964361287906498">(Spravované podnikovými pravidlami)</translation>
<translation id="8028060951694135607">Obnovenie kľúčov spoločnosti Microsoft</translation>
<translation id="8028993641010258682">Veľkosť</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb
index 99194eb1968..6bd891a481c 100644
--- a/chromium/chrome/app/resources/generated_resources_te.xtb
+++ b/chromium/chrome/app/resources/generated_resources_te.xtb
@@ -2513,7 +2513,7 @@
<translation id="4487088045714738411">బెల్జియన్ కీబోర్డ్</translation>
<translation id="4492190037599258964"><ph name="SEARCH_STRING" />' కోసం శోధన ఫలితాలు</translation>
<translation id="4495021739234344583">నమోదు తీసివేసి, పునఃప్రారంభించు</translation>
-<translation id="4495419450179050807">ఈ పేజీలో చూపవద్దు</translation>
+<translation id="4495419450179050807">ఈ పేజీని చూపవద్దు</translation>
<translation id="449680153165689114">ఫీల్డ్ హైలైటింగ్‌తో ప్రారంభించు</translation>
<translation id="449782841102640887">సురక్షితంగా ఉంచు</translation>
<translation id="450070808725753129">ఇప్పటికే ఇది నెట్‌వర్క్‌ను ప్రాప్యత చేయడానికి అనుమతించబడిన ప్రోగ్రామ్ వలె
diff --git a/chromium/chrome/app/resources/generated_resources_tr.xtb b/chromium/chrome/app/resources/generated_resources_tr.xtb
index 0184eb0031a..e930b684efd 100644
--- a/chromium/chrome/app/resources/generated_resources_tr.xtb
+++ b/chromium/chrome/app/resources/generated_resources_tr.xtb
@@ -206,7 +206,7 @@
<translation id="1293264513303784526">USB-C cihaz (sol bağlantı noktası)</translation>
<translation id="1293556467332435079">Dosyalar</translation>
<translation id="1294298200424241932">Güven ayarlarını düzenle:</translation>
-<translation id="129553762522093515">Yeni kapatılan</translation>
+<translation id="129553762522093515">Son kapatılan</translation>
<translation id="1297175357211070620">Hedef</translation>
<translation id="1297922636971898492">Google Drive şu anda kullanılamıyor. Google Drive tekrar kullanılabilir olduğunda yükleme işlemi otomatik olarak yeniden başlayacak.</translation>
<translation id="1303101771013849280">Yer İşaretleri HTML Dosyası</translation>
@@ -2504,7 +2504,7 @@ Keşfetmeye devam etmek için herhangi bir tuşa basın.</translation>
<translation id="4478664379124702289">Bağl&amp;antıyı Farklı Kaydet...</translation>
<translation id="4479639480957787382">Ethernet</translation>
<translation id="4479812471636796472">ABD Dvorak klavye</translation>
-<translation id="4481249487722541506">Paketlenmemiş uzantı yükle...</translation>
+<translation id="4481249487722541506">Paketi açılmış uzantı yükle...</translation>
<translation id="4487088045714738411">Belçika dilinde klavye</translation>
<translation id="4492190037599258964">'<ph name="SEARCH_STRING" />' için arama sonuçları</translation>
<translation id="4495021739234344583">Kaydı sil ve yeniden başlat</translation>
@@ -3182,7 +3182,7 @@ Keşfetmeye devam etmek için herhangi bir tuşa basın.</translation>
<translation id="5436430103864390185">Şekillendirilmiş pencereler desteklenmez.</translation>
<translation id="5436492226391861498">Proxy tüneli bekleniyor...</translation>
<translation id="5436510242972373446">Ara <ph name="SITE_NAME" />:</translation>
-<translation id="5438430601586617544">(Paketlenmemiş)</translation>
+<translation id="5438430601586617544">(Paketi açılmış)</translation>
<translation id="54401264925851789">Sayfa Güvenlik Bilgileri</translation>
<translation id="544083962418256601">Kısayol oluştur...</translation>
<translation id="5441100684135434593">Kablolu ağ</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_uk.xtb b/chromium/chrome/app/resources/generated_resources_uk.xtb
index e0bf06d7d54..76494bd8c02 100644
--- a/chromium/chrome/app/resources/generated_resources_uk.xtb
+++ b/chromium/chrome/app/resources/generated_resources_uk.xtb
@@ -4765,7 +4765,7 @@
<translation id="7801746894267596941">Ваші зашифровані дані може читати лише користувач, який знає вашу парольну фразу. Парольна фраза не надсилається в Google і не зберігається там. Якщо ви забули парольну фразу, потрібно</translation>
<translation id="780301667611848630">Ні, дякую</translation>
<translation id="7805768142964895445">Статус</translation>
-<translation id="7806513705704909664">Увімкнути "Автозаповнення", щоб заповнювати веб-форми за допомогою лише одного кліка.</translation>
+<translation id="7806513705704909664">Увімкнути "Автозаповнення", щоб заповнювати веб-форми за допомогою лише одного кліку.</translation>
<translation id="7807711621188256451">Завжди дозволяти хосту <ph name="HOST" /> доступ до вашої камери</translation>
<translation id="7809868303668093729">Експериментальний ефект закінчення вертикального прокручування.</translation>
<translation id="7810202088502699111">На цій сторінці спливаючі вікна заблоковано.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_da.xtb b/chromium/chrome/app/resources/google_chrome_strings_da.xtb
index 04b3be30e2b..e644dc8796c 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_da.xtb
@@ -72,7 +72,7 @@ Hvis du logger ind alligevel, flettes Chrome-oplysninger, som f.eks. bogmærker,
<translation id="3089968997497233615">Der findes en ny, sikker version af Google Chrome.</translation>
<translation id="3149510190863420837">Chrome-apps</translation>
<translation id="3197823471738295152">Din enhed er opdateret.</translation>
-<translation id="3282568296779691940">Log ind på Chrome</translation>
+<translation id="3282568296779691940">Log ind i Chrome</translation>
<translation id="3360895254066713204">Hjælp til Chrome</translation>
<translation id="3396977131400919238">Der opstod en fejl ved operativsystemet under installation. Download Google Chrome igen.</translation>
<translation id="3398288718845740432">Skjul i Chrome-menuen</translation>
@@ -215,7 +215,7 @@ Hvis du logger ind alligevel, flettes Chrome-oplysninger, som f.eks. bogmærker,
<translation id="7339898014177206373">Nyt vindue</translation>
<translation id="7396375882099008034">Tillad, at Chrome får adgang til netværket i dine indstillinger for firewall eller
antivirus.</translation>
-<translation id="7398801000654795464">Du loggede ind på Chrome som <ph name="USER_EMAIL_ADDRESS" />. Brug den samme konto til at logge ind igen.</translation>
+<translation id="7398801000654795464">Du loggede ind i Chrome som <ph name="USER_EMAIL_ADDRESS" />. Brug den samme konto til at logge ind igen.</translation>
<translation id="7400722733683201933">Om Google Chrome</translation>
<translation id="7408085963519505752">Vilkår for Chrome OS</translation>
<translation id="7419046106786626209">Chrome OS kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation>
diff --git a/chromium/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb b/chromium/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
index 7861340c4be..a804810eec9 100644
--- a/chromium/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
+++ b/chromium/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
@@ -649,7 +649,7 @@
<translation id="8033827949643255796">selecionado</translation>
<translation id="8035962149453661158">max:<ph name="X" /></translation>
<translation id="8042761080832772327">Editar texto, entrada de pesquisa</translation>
-<translation id="8049189770492311300">Temporizador</translation>
+<translation id="8049189770492311300">Timer</translation>
<translation id="8065607967589909823">A seleção é</translation>
<translation id="8066678206530322333">Banner</translation>
<translation id="8110647606445335195">Nenhum ponto de referência ARIA.</translation>
diff --git a/chromium/components/cdm/DEPS b/chromium/components/cdm/DEPS
new file mode 100644
index 00000000000..5ca4943d9e2
--- /dev/null
+++ b/chromium/components/cdm/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+ "+ipc",
+ "+media/base",
+]
diff --git a/chromium/components/cdm/OWNERS b/chromium/components/cdm/OWNERS
new file mode 100644
index 00000000000..554a4be64a0
--- /dev/null
+++ b/chromium/components/cdm/OWNERS
@@ -0,0 +1,2 @@
+ddorwin@chromium.org
+xhwang@chromium.org
diff --git a/chromium/components/cdm/browser/BUILD.gn b/chromium/components/cdm/browser/BUILD.gn
new file mode 100644
index 00000000000..cea393b405f
--- /dev/null
+++ b/chromium/components/cdm/browser/BUILD.gn
@@ -0,0 +1,20 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("browser") {
+ sources = [
+ "cdm_message_filter_android.cc",
+ "cdm_message_filter_android.h",
+ "widevine_drm_delegate_android.cc",
+ "widevine_drm_delegate_android.h",
+ ]
+
+ deps = [
+ "//base",
+ "//components/cdm/common",
+ "//content/public/browser",
+ "//content/public/common",
+ "//media",
+ ]
+}
diff --git a/chromium/components/cdm/browser/DEPS b/chromium/components/cdm/browser/DEPS
new file mode 100644
index 00000000000..1891599edae
--- /dev/null
+++ b/chromium/components/cdm/browser/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+ "+content/public/browser",
+ "+media/cdm",
+]
diff --git a/chromium/components/cdm/browser/cdm_message_filter_android.cc b/chromium/components/cdm/browser/cdm_message_filter_android.cc
new file mode 100644
index 00000000000..e9399f61898
--- /dev/null
+++ b/chromium/components/cdm/browser/cdm_message_filter_android.cc
@@ -0,0 +1,122 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/cdm/browser/cdm_message_filter_android.h"
+
+#include <string>
+#include <vector>
+
+#include "components/cdm/common/cdm_messages_android.h"
+#include "ipc/ipc_message_macros.h"
+#include "media/base/android/media_codec_bridge.h"
+#include "media/base/android/media_drm_bridge.h"
+
+using content::BrowserThread;
+using media::MediaCodecBridge;
+using media::MediaDrmBridge;
+using media::SupportedCodecs;
+
+namespace cdm {
+
+const size_t kMaxKeySystemLength = 256;
+
+enum CodecType {
+ CODEC_AUDIO,
+ CODEC_VIDEO
+};
+
+struct CodecInfo {
+ SupportedCodecs codec;
+ CodecType codec_type;
+ const char* codec_name;
+ const char* container_mime_type;
+};
+
+const CodecInfo kCodecsToQuery[] = {
+ {media::EME_CODEC_WEBM_OPUS, CODEC_AUDIO, "opus", "video/webm"},
+ {media::EME_CODEC_WEBM_VORBIS, CODEC_AUDIO, "vorbis", "video/webm"},
+ {media::EME_CODEC_WEBM_VP8, CODEC_VIDEO, "vp8", "video/webm"},
+ {media::EME_CODEC_WEBM_VP9, CODEC_VIDEO, "vp9", "video/webm"},
+#if defined(USE_PROPRIETARY_CODECS)
+ {media::EME_CODEC_MP4_AAC, CODEC_AUDIO, "mp4a", "video/mp4"},
+ {media::EME_CODEC_MP4_AVC1, CODEC_VIDEO, "avc1", "video/mp4"}
+#endif // defined(USE_PROPRIETARY_CODECS)
+};
+
+static SupportedCodecs GetSupportedCodecs(
+ const SupportedKeySystemRequest& request,
+ bool video_must_be_compositable) {
+ const std::string& key_system = request.key_system;
+ SupportedCodecs supported_codecs = media::EME_CODEC_NONE;
+
+ for (size_t i = 0; i < arraysize(kCodecsToQuery); ++i) {
+ const CodecInfo& info = kCodecsToQuery[i];
+ // TODO(qinmin): Remove the composition logic when secure contents can be
+ // composited.
+ bool is_secure = (info.codec_type == CODEC_VIDEO)
+ ? (!video_must_be_compositable) : false;
+ if ((request.codecs & info.codec) &&
+ MediaDrmBridge::IsKeySystemSupportedWithType(
+ key_system, info.container_mime_type) &&
+ MediaCodecBridge::CanDecode(info.codec_name, is_secure)) {
+ supported_codecs |= info.codec;
+ }
+ }
+
+ return supported_codecs;
+}
+
+CdmMessageFilterAndroid::CdmMessageFilterAndroid()
+ : BrowserMessageFilter(EncryptedMediaMsgStart) {}
+
+CdmMessageFilterAndroid::~CdmMessageFilterAndroid() {}
+
+bool CdmMessageFilterAndroid::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(CdmMessageFilterAndroid, message)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_QueryKeySystemSupport,
+ OnQueryKeySystemSupport)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_GetPlatformKeySystemNames,
+ OnGetPlatformKeySystemNames)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void CdmMessageFilterAndroid::OverrideThreadForMessage(
+ const IPC::Message& message, BrowserThread::ID* thread) {
+ // Move the IPC handling to FILE thread as it is not very cheap.
+ if (message.type() == ChromeViewHostMsg_QueryKeySystemSupport::ID)
+ *thread = BrowserThread::FILE;
+}
+
+void CdmMessageFilterAndroid::OnQueryKeySystemSupport(
+ const SupportedKeySystemRequest& request,
+ SupportedKeySystemResponse* response) {
+ if (!response) {
+ NOTREACHED() << "NULL response pointer provided.";
+ return;
+ }
+
+ if (request.key_system.size() > kMaxKeySystemLength) {
+ NOTREACHED() << "Invalid key system: " << request.key_system;
+ return;
+ }
+
+ if (!MediaDrmBridge::IsKeySystemSupported(request.key_system))
+ return;
+
+ DCHECK(request.codecs & media::EME_CODEC_ALL) << "unrecognized codec";
+ response->key_system = request.key_system;
+ // TODO(qinmin): check composition is supported or not.
+ response->compositing_codecs = GetSupportedCodecs(request, true);
+ response->non_compositing_codecs = GetSupportedCodecs(request, false);
+}
+
+void CdmMessageFilterAndroid::OnGetPlatformKeySystemNames(
+ std::vector<std::string>* key_systems) {
+ *key_systems = MediaDrmBridge::GetPlatformKeySystemNames();
+}
+
+} // namespace cdm
diff --git a/chromium/components/cdm/browser/cdm_message_filter_android.h b/chromium/components/cdm/browser/cdm_message_filter_android.h
new file mode 100644
index 00000000000..47b45c5f019
--- /dev/null
+++ b/chromium/components/cdm/browser/cdm_message_filter_android.h
@@ -0,0 +1,42 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CDM_BROWSER_CDM_MESSAGE_FILTER_ANDROID_H_
+#define COMPONENTS_CDM_BROWSER_CDM_MESSAGE_FILTER_ANDROID_H_
+
+#include "base/basictypes.h"
+#include "content/public/browser/browser_message_filter.h"
+
+struct SupportedKeySystemRequest;
+struct SupportedKeySystemResponse;
+
+namespace cdm {
+
+// Message filter for EME on android. It is responsible for getting the
+// SupportedKeySystems information and passing it back to renderer.
+class CdmMessageFilterAndroid
+ : public content::BrowserMessageFilter {
+ public:
+ CdmMessageFilterAndroid();
+
+ private:
+ ~CdmMessageFilterAndroid() override;
+
+ // BrowserMessageFilter implementation.
+ bool OnMessageReceived(const IPC::Message& message) override;
+ void OverrideThreadForMessage(const IPC::Message& message,
+ content::BrowserThread::ID* thread) override;
+
+ // Query the key system information.
+ void OnQueryKeySystemSupport(const SupportedKeySystemRequest& request,
+ SupportedKeySystemResponse* response);
+
+ void OnGetPlatformKeySystemNames(std::vector<std::string>* key_systems);
+
+ DISALLOW_COPY_AND_ASSIGN(CdmMessageFilterAndroid);
+};
+
+} // namespace cdm
+
+#endif // COMPONENTS_CDM_BROWSER_CDM_MESSAGE_FILTER_ANDROID_H_
diff --git a/chromium/components/cdm/browser/widevine_drm_delegate_android.cc b/chromium/components/cdm/browser/widevine_drm_delegate_android.cc
new file mode 100644
index 00000000000..8acf8003be6
--- /dev/null
+++ b/chromium/components/cdm/browser/widevine_drm_delegate_android.cc
@@ -0,0 +1,43 @@
+// Copyright 2015 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/cdm/browser/widevine_drm_delegate_android.h"
+
+#include "media/cdm/cenc_utils.h"
+
+namespace cdm {
+
+namespace {
+
+const uint8_t kWidevineUuid[16] = {
+ 0xED, 0xEF, 0x8B, 0xA9, 0x79, 0xD6, 0x4A, 0xCE,
+ 0xA3, 0xC8, 0x27, 0xDC, 0xD5, 0x1D, 0x21, 0xED };
+
+} // namespace
+
+WidevineDrmDelegateAndroid::WidevineDrmDelegateAndroid() {
+}
+
+WidevineDrmDelegateAndroid::~WidevineDrmDelegateAndroid() {
+}
+
+const std::vector<uint8_t> WidevineDrmDelegateAndroid::GetUUID() const {
+ return std::vector<uint8_t>(kWidevineUuid,
+ kWidevineUuid + arraysize(kWidevineUuid));
+}
+
+bool WidevineDrmDelegateAndroid::OnCreateSession(
+ const media::EmeInitDataType init_data_type,
+ const std::vector<uint8_t>& init_data,
+ std::vector<uint8_t>* init_data_out,
+ std::vector<std::string>* /* optional_parameters_out */) {
+ if (init_data_type != media::EmeInitDataType::CENC)
+ return true;
+
+ // Widevine MediaDrm plugin only accepts the "data" part of the PSSH box as
+ // the init data when using MP4 container.
+ return media::GetPsshData(init_data, GetUUID(), init_data_out);
+}
+
+} // namespace cdm
diff --git a/chromium/components/cdm/browser/widevine_drm_delegate_android.h b/chromium/components/cdm/browser/widevine_drm_delegate_android.h
new file mode 100644
index 00000000000..09a54aee674
--- /dev/null
+++ b/chromium/components/cdm/browser/widevine_drm_delegate_android.h
@@ -0,0 +1,32 @@
+// Copyright 2015 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_CDM_BROWSER_WIDEVINE_DRM_DELEGATE_ANDROID_H_
+#define COMPONENTS_CDM_BROWSER_WIDEVINE_DRM_DELEGATE_ANDROID_H_
+
+#include "base/macros.h"
+#include "media/base/android/media_drm_bridge_delegate.h"
+
+namespace cdm {
+
+class WidevineDrmDelegateAndroid : public media::MediaDrmBridgeDelegate {
+ public:
+ WidevineDrmDelegateAndroid();
+ ~WidevineDrmDelegateAndroid() override;
+
+ // media::MediaDrmBridgeDelegate implementation:
+ const std::vector<uint8_t> GetUUID() const override;
+ bool OnCreateSession(
+ const media::EmeInitDataType init_data_type,
+ const std::vector<uint8_t>& init_data,
+ std::vector<uint8_t>* init_data_out,
+ std::vector<std::string>* optional_parameters_out) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WidevineDrmDelegateAndroid);
+};
+
+} // namespace cdm
+
+#endif // COMPONENTS_CDM_BROWSER_WIDEVINE_DRM_DELEGATE_ANDROID_H_
diff --git a/chromium/components/cdm/common/BUILD.gn b/chromium/components/cdm/common/BUILD.gn
new file mode 100644
index 00000000000..7af38692c59
--- /dev/null
+++ b/chromium/components/cdm/common/BUILD.gn
@@ -0,0 +1,17 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+static_library("common") {
+ sources = [
+ "cdm_message_generator.cc",
+ "cdm_message_generator.h",
+ "cdm_messages_android.h",
+ ]
+
+ deps = [
+ "//base",
+ "//content/public/common",
+ "//ipc",
+ ]
+}
diff --git a/chromium/components/cdm/common/DEPS b/chromium/components/cdm/common/DEPS
new file mode 100644
index 00000000000..d5923ee96cb
--- /dev/null
+++ b/chromium/components/cdm/common/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+content/public/common",
+]
diff --git a/chromium/components/cdm/common/OWNERS b/chromium/components/cdm/common/OWNERS
new file mode 100644
index 00000000000..8918c6e7519
--- /dev/null
+++ b/chromium/components/cdm/common/OWNERS
@@ -0,0 +1,12 @@
+# Changes to IPC messages require a security review to avoid introducing
+# new sandbox escapes.
+per-file cdm_messages*.h=set noparent
+per-file cdm_messages*.h=dcheng@chromium.org
+per-file cdm_messages*.h=inferno@chromium.org
+per-file cdm_messages*.h=jln@chromium.org
+per-file cdm_messages*.h=jschuh@chromium.org
+per-file cdm_messages*.h=kenrb@chromium.org
+per-file cdm_messages*.h=mkwst@chromium.org
+per-file cdm_messages*.h=nasko@chromium.org
+per-file cdm_messages*.h=tsepez@chromium.org
+per-file cdm_messages*.h=wfh@chromium.org
diff --git a/chromium/components/cdm/common/cdm_message_generator.cc b/chromium/components/cdm/common/cdm_message_generator.cc
new file mode 100644
index 00000000000..2aabce727a5
--- /dev/null
+++ b/chromium/components/cdm/common/cdm_message_generator.cc
@@ -0,0 +1,34 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Get basic type definitions.
+#define IPC_MESSAGE_IMPL
+#include "components/cdm/common/cdm_message_generator.h"
+
+// Generate constructors.
+#include "ipc/struct_constructor_macros.h"
+#include "components/cdm/common/cdm_message_generator.h"
+
+// Generate destructors.
+#include "ipc/struct_destructor_macros.h"
+#include "components/cdm/common/cdm_message_generator.h"
+
+// Generate param traits write methods.
+#include "ipc/param_traits_write_macros.h"
+namespace IPC {
+#include "components/cdm/common/cdm_message_generator.h"
+} // namespace IPC
+
+// Generate param traits read methods.
+#include "ipc/param_traits_read_macros.h"
+namespace IPC {
+#include "components/cdm/common/cdm_message_generator.h"
+} // namespace IPC
+
+// Generate param traits log methods.
+#include "ipc/param_traits_log_macros.h"
+namespace IPC {
+#include "components/cdm/common/cdm_message_generator.h"
+} // namespace IPC
+
diff --git a/chromium/components/cdm/common/cdm_message_generator.h b/chromium/components/cdm/common/cdm_message_generator.h
new file mode 100644
index 00000000000..b528207d00f
--- /dev/null
+++ b/chromium/components/cdm/common/cdm_message_generator.h
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Multiply-included file, no traditional include guard.
+
+#include "base/basictypes.h" // for OS_ANDROID and some basic types.
+
+#if defined(OS_ANDROID)
+#include "components/cdm/common/cdm_messages_android.h"
+#endif
diff --git a/chromium/components/cdm/common/cdm_messages_android.h b/chromium/components/cdm/common/cdm_messages_android.h
new file mode 100644
index 00000000000..028306ac35b
--- /dev/null
+++ b/chromium/components/cdm/common/cdm_messages_android.h
@@ -0,0 +1,43 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// IPC messages for EME on android.
+// Multiply-included message file, hence no include guard.
+
+#include <vector>
+
+#include "ipc/ipc_message_macros.h"
+#include "media/base/eme_constants.h"
+
+#define IPC_MESSAGE_START EncryptedMediaMsgStart
+
+IPC_STRUCT_BEGIN(SupportedKeySystemRequest)
+ IPC_STRUCT_MEMBER(std::string, key_system)
+ IPC_STRUCT_MEMBER(media::SupportedCodecs, codecs, media::EME_CODEC_NONE)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(SupportedKeySystemResponse)
+ IPC_STRUCT_MEMBER(std::string, key_system)
+ IPC_STRUCT_MEMBER(media::SupportedCodecs,
+ compositing_codecs,
+ media::EME_CODEC_NONE)
+ IPC_STRUCT_MEMBER(media::SupportedCodecs,
+ non_compositing_codecs,
+ media::EME_CODEC_NONE)
+IPC_STRUCT_END()
+
+// Messages sent from the renderer to the browser.
+
+// Synchronously query key system information. If the key system is supported,
+// the response will be populated.
+IPC_SYNC_MESSAGE_CONTROL1_1(
+ ChromeViewHostMsg_QueryKeySystemSupport,
+ SupportedKeySystemRequest /* key system information request */,
+ SupportedKeySystemResponse /* key system information response */)
+
+// Synchronously get a list of platform-supported EME key system names that
+// are not explicitly handled by Chrome.
+IPC_SYNC_MESSAGE_CONTROL0_1(
+ ChromeViewHostMsg_GetPlatformKeySystemNames,
+ std::vector<std::string> /* key system names */)
diff --git a/chromium/components/cdm/renderer/BUILD.gn b/chromium/components/cdm/renderer/BUILD.gn
new file mode 100644
index 00000000000..ef4d03d018e
--- /dev/null
+++ b/chromium/components/cdm/renderer/BUILD.gn
@@ -0,0 +1,25 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+static_library("renderer") {
+ sources = [
+ "widevine_key_systems.cc",
+ "widevine_key_systems.h",
+ ]
+
+ if (is_android) {
+ sources += [
+ "android_key_systems.cc",
+ "android_key_systems.h",
+ ]
+ }
+
+ deps = [
+ "//base",
+ "//components/cdm/common",
+ "//content/public/renderer",
+ "//media",
+ "//third_party/widevine/cdm:version_h",
+ ]
+}
diff --git a/chromium/components/cdm/renderer/DEPS b/chromium/components/cdm/renderer/DEPS
new file mode 100644
index 00000000000..725e151a7a5
--- /dev/null
+++ b/chromium/components/cdm/renderer/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+content/public/renderer",
+]
diff --git a/chromium/components/cdm/renderer/android_key_systems.cc b/chromium/components/cdm/renderer/android_key_systems.cc
new file mode 100644
index 00000000000..b9521d3ad9e
--- /dev/null
+++ b/chromium/components/cdm/renderer/android_key_systems.cc
@@ -0,0 +1,130 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/cdm/renderer/android_key_systems.h"
+
+#include <string>
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/logging.h"
+#include "components/cdm/common/cdm_messages_android.h"
+#include "components/cdm/renderer/widevine_key_systems.h"
+#include "content/public/renderer/render_thread.h"
+#include "media/base/eme_constants.h"
+#include "media/base/media_switches.h"
+
+#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
+
+using media::EmeFeatureSupport;
+using media::EmeRobustness;
+using media::EmeSessionTypeSupport;
+using media::KeySystemInfo;
+using media::SupportedCodecs;
+
+namespace cdm {
+
+static SupportedKeySystemResponse QueryKeySystemSupport(
+ const std::string& key_system) {
+ SupportedKeySystemRequest request;
+ SupportedKeySystemResponse response;
+
+ request.key_system = key_system;
+ request.codecs = media::EME_CODEC_ALL;
+ content::RenderThread::Get()->Send(
+ new ChromeViewHostMsg_QueryKeySystemSupport(request, &response));
+ DCHECK(!(response.compositing_codecs & ~media::EME_CODEC_ALL))
+ << "unrecognized codec";
+ DCHECK(!(response.non_compositing_codecs & ~media::EME_CODEC_ALL))
+ << "unrecognized codec";
+ return response;
+}
+
+void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
+ SupportedKeySystemResponse response = QueryKeySystemSupport(
+ kWidevineKeySystem);
+
+ // Since we do not control the implementation of the MediaDrm API on Android,
+ // we assume that it can and will make use of persistence even though no
+ // persistence-based features are supported.
+
+ if (response.compositing_codecs != media::EME_CODEC_NONE) {
+ AddWidevineWithCodecs(
+ WIDEVINE,
+ response.compositing_codecs, // Regular codecs.
+ response.non_compositing_codecs, // Hardware-secure codecs.
+ EmeRobustness::HW_SECURE_CRYPTO, // Max audio robustness.
+ EmeRobustness::HW_SECURE_ALL, // Max video robustness.
+ EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-license.
+ EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-release-message.
+ EmeFeatureSupport::ALWAYS_ENABLED, // Persistent state.
+ EmeFeatureSupport::ALWAYS_ENABLED, // Distinctive identifier.
+ concrete_key_systems);
+ } else {
+ // It doesn't make sense to support secure codecs but not regular codecs.
+ DCHECK(response.non_compositing_codecs == media::EME_CODEC_NONE);
+ }
+
+ // For compatibility with the prefixed API, register a separate L1 key system.
+ // This key systems acts as though only hardware-secure codecs are available.
+ // We only register support for codecs with both regular and hardware-secure
+ // variants so that we can be sure they will work regardless of the renderer
+ // preference.
+ SupportedCodecs secure_codecs =
+ response.compositing_codecs & response.non_compositing_codecs;
+ if (secure_codecs != media::EME_CODEC_NONE) {
+ // Note: The prefixed API only consults the regular codecs field.
+ AddWidevineWithCodecs(
+ WIDEVINE_HR_NON_COMPOSITING,
+ secure_codecs, // Regular codecs.
+ media::EME_CODEC_NONE, // Hardware-secure codecs.
+ EmeRobustness::HW_SECURE_CRYPTO, // Max audio robustness.
+ EmeRobustness::HW_SECURE_ALL, // Max video robustness.
+ EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-license.
+ EmeSessionTypeSupport::NOT_SUPPORTED, // persistent-release-message.
+ EmeFeatureSupport::ALWAYS_ENABLED, // Persistent state.
+ EmeFeatureSupport::ALWAYS_ENABLED, // Distinctive identifier.
+ concrete_key_systems);
+ }
+}
+
+void AddAndroidPlatformKeySystems(
+ std::vector<KeySystemInfo>* concrete_key_systems) {
+ std::vector<std::string> key_system_names;
+ content::RenderThread::Get()->Send(
+ new ChromeViewHostMsg_GetPlatformKeySystemNames(&key_system_names));
+
+ for (std::vector<std::string>::const_iterator it = key_system_names.begin();
+ it != key_system_names.end(); ++it) {
+ SupportedKeySystemResponse response = QueryKeySystemSupport(*it);
+ if (response.compositing_codecs != media::EME_CODEC_NONE) {
+ KeySystemInfo info;
+ info.key_system = *it;
+ info.supported_codecs = response.compositing_codecs;
+ // Here we assume that support for a container implies support for the
+ // associated initialization data type. KeySystems handles validating
+ // |init_data_type| x |container| pairings.
+ if (response.compositing_codecs & media::EME_CODEC_WEBM_ALL)
+ info.supported_init_data_types |= media::kInitDataTypeMaskWebM;
+#if defined(USE_PROPRIETARY_CODECS)
+ if (response.compositing_codecs & media::EME_CODEC_MP4_ALL)
+ info.supported_init_data_types |= media::kInitDataTypeMaskCenc;
+#endif // defined(USE_PROPRIETARY_CODECS)
+ info.max_audio_robustness = EmeRobustness::EMPTY;
+ info.max_video_robustness = EmeRobustness::EMPTY;
+ // Assume that platform key systems support no features but can and will
+ // make use of persistence and identifiers.
+ info.persistent_license_support =
+ media::EmeSessionTypeSupport::NOT_SUPPORTED;
+ info.persistent_release_message_support =
+ media::EmeSessionTypeSupport::NOT_SUPPORTED;
+ info.persistent_state_support = media::EmeFeatureSupport::ALWAYS_ENABLED;
+ info.distinctive_identifier_support =
+ media::EmeFeatureSupport::ALWAYS_ENABLED;
+ concrete_key_systems->push_back(info);
+ }
+ }
+}
+
+} // namespace cdm
diff --git a/chromium/components/cdm/renderer/android_key_systems.h b/chromium/components/cdm/renderer/android_key_systems.h
new file mode 100644
index 00000000000..fb962b15624
--- /dev/null
+++ b/chromium/components/cdm/renderer/android_key_systems.h
@@ -0,0 +1,24 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CDM_RENDERER_ANDROID_KEY_SYSTEMS_H_
+#define COMPONENTS_CDM_RENDERER_ANDROID_KEY_SYSTEMS_H_
+
+#include <vector>
+
+#include "media/base/key_system_info.h"
+
+namespace cdm {
+
+void AddAndroidWidevine(
+ std::vector<media::KeySystemInfo>* concrete_key_systems);
+
+// Add platform-supported key systems which are not explicitly handled
+// by Chrome.
+void AddAndroidPlatformKeySystems(
+ std::vector<media::KeySystemInfo>* concrete_key_systems);
+
+} // namespace cdm
+
+#endif // COMPONENTS_CDM_RENDERER_ANDROID_KEY_SYSTEMS_H_
diff --git a/chromium/components/cdm/renderer/widevine_key_systems.cc b/chromium/components/cdm/renderer/widevine_key_systems.cc
new file mode 100644
index 00000000000..8cc63991086
--- /dev/null
+++ b/chromium/components/cdm/renderer/widevine_key_systems.cc
@@ -0,0 +1,93 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/cdm/renderer/widevine_key_systems.h"
+
+#include <string>
+#include <vector>
+
+#include "base/logging.h"
+#include "media/base/eme_constants.h"
+
+#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
+
+#if defined(WIDEVINE_CDM_AVAILABLE)
+
+using media::KeySystemInfo;
+using media::SupportedCodecs;
+
+namespace cdm {
+
+// Return |name|'s parent key system.
+static std::string GetDirectParentName(const std::string& name) {
+ size_t last_period = name.find_last_of('.');
+ DCHECK_GT(last_period, 0u);
+ return name.substr(0u, last_period);
+}
+
+void AddWidevineWithCodecs(
+ WidevineCdmType widevine_cdm_type,
+ SupportedCodecs supported_codecs,
+#if defined(OS_ANDROID)
+ SupportedCodecs supported_secure_codecs,
+#endif // defined(OS_ANDROID)
+ media::EmeRobustness max_audio_robustness,
+ media::EmeRobustness max_video_robustness,
+ media::EmeSessionTypeSupport persistent_license_support,
+ media::EmeSessionTypeSupport persistent_release_message_support,
+ media::EmeFeatureSupport persistent_state_support,
+ media::EmeFeatureSupport distinctive_identifier_support,
+ std::vector<KeySystemInfo>* concrete_key_systems) {
+ KeySystemInfo info;
+ info.key_system = kWidevineKeySystem;
+
+ switch (widevine_cdm_type) {
+ case WIDEVINE:
+ // For standard Widevine, add parent name.
+ info.parent_key_system = GetDirectParentName(kWidevineKeySystem);
+ break;
+#if defined(OS_ANDROID)
+ case WIDEVINE_HR_NON_COMPOSITING:
+ info.key_system.append(".hrnoncompositing");
+ break;
+#endif // defined(OS_ANDROID)
+ default:
+ NOTREACHED();
+ }
+
+ // TODO(xhwang): A container or an initDataType may be supported even though
+ // there are no codecs supported in that container. Fix this when we support
+ // initDataType.
+ info.supported_codecs = supported_codecs;
+#if defined(OS_ANDROID)
+ info.supported_secure_codecs = supported_secure_codecs;
+#endif // defined(OS_ANDROID)
+
+ // Here we assume that support for a container imples support for the
+ // associated initialization data type. KeySystems handles validating
+ // |init_data_type| x |container| pairings.
+ if (supported_codecs & media::EME_CODEC_WEBM_ALL)
+ info.supported_init_data_types |= media::kInitDataTypeMaskWebM;
+#if defined(USE_PROPRIETARY_CODECS)
+ if (supported_codecs & media::EME_CODEC_MP4_ALL)
+ info.supported_init_data_types |= media::kInitDataTypeMaskCenc;
+#endif // defined(USE_PROPRIETARY_CODECS)
+
+ info.max_audio_robustness = max_audio_robustness;
+ info.max_video_robustness = max_video_robustness;
+ info.persistent_license_support = persistent_license_support;
+ info.persistent_release_message_support = persistent_release_message_support;
+ info.persistent_state_support = persistent_state_support;
+ info.distinctive_identifier_support = distinctive_identifier_support;
+
+#if defined(ENABLE_PEPPER_CDMS)
+ info.pepper_type = kWidevineCdmPluginMimeType;
+#endif // defined(ENABLE_PEPPER_CDMS)
+
+ concrete_key_systems->push_back(info);
+}
+
+} // namespace cdm
+
+#endif // defined(WIDEVINE_CDM_AVAILABLE)
diff --git a/chromium/components/cdm/renderer/widevine_key_systems.h b/chromium/components/cdm/renderer/widevine_key_systems.h
new file mode 100644
index 00000000000..125e297b18c
--- /dev/null
+++ b/chromium/components/cdm/renderer/widevine_key_systems.h
@@ -0,0 +1,38 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEMS_H_
+#define COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEMS_H_
+
+#include <vector>
+
+#include "build/build_config.h"
+#include "media/base/key_system_info.h"
+
+namespace cdm {
+
+enum WidevineCdmType {
+ WIDEVINE,
+#if defined(OS_ANDROID)
+ WIDEVINE_HR_NON_COMPOSITING,
+#endif // defined(OS_ANDROID)
+};
+
+void AddWidevineWithCodecs(
+ WidevineCdmType widevine_cdm_type,
+ media::SupportedCodecs supported_codecs,
+#if defined(OS_ANDROID)
+ media::SupportedCodecs supported_secure_codecs,
+#endif // defined(OS_ANDROID)
+ media::EmeRobustness max_audio_robustness,
+ media::EmeRobustness max_video_robustness,
+ media::EmeSessionTypeSupport persistent_license_support,
+ media::EmeSessionTypeSupport persistent_release_message_support,
+ media::EmeFeatureSupport persistent_state_support,
+ media::EmeFeatureSupport distinctive_identifier_support,
+ std::vector<media::KeySystemInfo>* concrete_key_systems);
+
+} // namespace cdm
+
+#endif // COMPONENTS_CDM_RENDERER_WIDEVINE_KEY_SYSTEMS_H_
diff --git a/chromium/content/browser/appcache/appcache_backend_impl.cc b/chromium/content/browser/appcache/appcache_backend_impl.cc
index e055f1a1de8..01eed000ef0 100644
--- a/chromium/content/browser/appcache/appcache_backend_impl.cc
+++ b/chromium/content/browser/appcache/appcache_backend_impl.cc
@@ -68,32 +68,29 @@ bool AppCacheBackendImpl::SelectCache(
const int64 cache_document_was_loaded_from,
const GURL& manifest_url) {
AppCacheHost* host = GetHost(host_id);
- if (!host || host->was_select_cache_called())
+ if (!host)
return false;
- host->SelectCache(document_url, cache_document_was_loaded_from,
+ return host->SelectCache(document_url, cache_document_was_loaded_from,
manifest_url);
- return true;
}
bool AppCacheBackendImpl::SelectCacheForWorker(
int host_id, int parent_process_id, int parent_host_id) {
AppCacheHost* host = GetHost(host_id);
- if (!host || host->was_select_cache_called())
+ if (!host)
return false;
- host->SelectCacheForWorker(parent_process_id, parent_host_id);
- return true;
+ return host->SelectCacheForWorker(parent_process_id, parent_host_id);
}
bool AppCacheBackendImpl::SelectCacheForSharedWorker(
int host_id, int64 appcache_id) {
AppCacheHost* host = GetHost(host_id);
- if (!host || host->was_select_cache_called())
+ if (!host)
return false;
- host->SelectCacheForSharedWorker(appcache_id);
- return true;
+ return host->SelectCacheForSharedWorker(appcache_id);
}
bool AppCacheBackendImpl::MarkAsForeignEntry(
@@ -104,8 +101,7 @@ bool AppCacheBackendImpl::MarkAsForeignEntry(
if (!host)
return false;
- host->MarkAsForeignEntry(document_url, cache_document_was_loaded_from);
- return true;
+ return host->MarkAsForeignEntry(document_url, cache_document_was_loaded_from);
}
bool AppCacheBackendImpl::GetStatusWithCallback(
diff --git a/chromium/content/browser/appcache/appcache_dispatcher_host.cc b/chromium/content/browser/appcache/appcache_dispatcher_host.cc
index e35610fe9df..6a864f7dff1 100644
--- a/chromium/content/browser/appcache/appcache_dispatcher_host.cc
+++ b/chromium/content/browser/appcache/appcache_dispatcher_host.cc
@@ -19,7 +19,8 @@ AppCacheDispatcherHost::AppCacheDispatcherHost(
: BrowserMessageFilter(AppCacheMsgStart),
appcache_service_(appcache_service),
frontend_proxy_(this),
- process_id_(process_id) {
+ process_id_(process_id),
+ weak_factory_(this) {
}
void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) {
@@ -28,13 +29,13 @@ void AppCacheDispatcherHost::OnChannelConnected(int32 peer_pid) {
appcache_service_.get(), &frontend_proxy_, process_id_);
get_status_callback_ =
base::Bind(&AppCacheDispatcherHost::GetStatusCallback,
- base::Unretained(this));
+ weak_factory_.GetWeakPtr());
start_update_callback_ =
base::Bind(&AppCacheDispatcherHost::StartUpdateCallback,
- base::Unretained(this));
+ weak_factory_.GetWeakPtr());
swap_cache_callback_ =
base::Bind(&AppCacheDispatcherHost::SwapCacheCallback,
- base::Unretained(this));
+ weak_factory_.GetWeakPtr());
}
}
diff --git a/chromium/content/browser/appcache/appcache_dispatcher_host.h b/chromium/content/browser/appcache/appcache_dispatcher_host.h
index 30d2f86f71c..f8909a88125 100644
--- a/chromium/content/browser/appcache/appcache_dispatcher_host.h
+++ b/chromium/content/browser/appcache/appcache_dispatcher_host.h
@@ -9,6 +9,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "base/process/process.h"
#include "content/browser/appcache/appcache_backend_impl.h"
#include "content/browser/appcache/appcache_frontend_proxy.h"
@@ -69,6 +70,8 @@ class AppCacheDispatcherHost : public BrowserMessageFilter {
// The corresponding ChildProcessHost object's id().
int process_id_;
+ base::WeakPtrFactory<AppCacheDispatcherHost> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(AppCacheDispatcherHost);
};
diff --git a/chromium/content/browser/appcache/appcache_host.cc b/chromium/content/browser/appcache/appcache_host.cc
index dbdaf308fcd..9ec45f6174f 100644
--- a/chromium/content/browser/appcache/appcache_host.cc
+++ b/chromium/content/browser/appcache/appcache_host.cc
@@ -80,18 +80,21 @@ void AppCacheHost::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
-void AppCacheHost::SelectCache(const GURL& document_url,
+bool AppCacheHost::SelectCache(const GURL& document_url,
const int64 cache_document_was_loaded_from,
const GURL& manifest_url) {
+ if (was_select_cache_called_)
+ return false;
+
DCHECK(pending_start_update_callback_.is_null() &&
pending_swap_cache_callback_.is_null() &&
pending_get_status_callback_.is_null() &&
- !is_selection_pending() && !was_select_cache_called_);
+ !is_selection_pending());
was_select_cache_called_ = true;
if (!is_cache_selection_enabled_) {
FinishCacheSelection(NULL, NULL);
- return;
+ return true;
}
origin_in_use_ = document_url.GetOrigin();
@@ -111,7 +114,7 @@ void AppCacheHost::SelectCache(const GURL& document_url,
if (cache_document_was_loaded_from != kAppCacheNoCacheId) {
LoadSelectedCache(cache_document_was_loaded_from);
- return;
+ return true;
}
if (!manifest_url.is_empty() &&
@@ -132,7 +135,7 @@ void AppCacheHost::SelectCache(const GURL& document_url,
0,
false /*is_cross_origin*/));
frontend_->OnContentBlocked(host_id_, manifest_url);
- return;
+ return true;
}
// Note: The client detects if the document was not loaded using HTTP GET
@@ -141,49 +144,62 @@ void AppCacheHost::SelectCache(const GURL& document_url,
set_preferred_manifest_url(manifest_url);
new_master_entry_url_ = document_url;
LoadOrCreateGroup(manifest_url);
- return;
+ return true;
}
// TODO(michaeln): If there was a manifest URL, the user agent may report
// to the user that it was ignored, to aid in application development.
FinishCacheSelection(NULL, NULL);
+ return true;
}
-void AppCacheHost::SelectCacheForWorker(int parent_process_id,
+bool AppCacheHost::SelectCacheForWorker(int parent_process_id,
int parent_host_id) {
+ if (was_select_cache_called_)
+ return false;
+
DCHECK(pending_start_update_callback_.is_null() &&
pending_swap_cache_callback_.is_null() &&
pending_get_status_callback_.is_null() &&
- !is_selection_pending() && !was_select_cache_called_);
+ !is_selection_pending());
was_select_cache_called_ = true;
parent_process_id_ = parent_process_id;
parent_host_id_ = parent_host_id;
FinishCacheSelection(NULL, NULL);
+ return true;
}
-void AppCacheHost::SelectCacheForSharedWorker(int64 appcache_id) {
+bool AppCacheHost::SelectCacheForSharedWorker(int64 appcache_id) {
+ if (was_select_cache_called_)
+ return false;
+
DCHECK(pending_start_update_callback_.is_null() &&
pending_swap_cache_callback_.is_null() &&
pending_get_status_callback_.is_null() &&
- !is_selection_pending() && !was_select_cache_called_);
+ !is_selection_pending());
was_select_cache_called_ = true;
if (appcache_id != kAppCacheNoCacheId) {
LoadSelectedCache(appcache_id);
- return;
+ return true;
}
FinishCacheSelection(NULL, NULL);
+ return true;
}
// TODO(michaeln): change method name to MarkEntryAsForeign for consistency
-void AppCacheHost::MarkAsForeignEntry(const GURL& document_url,
+bool AppCacheHost::MarkAsForeignEntry(const GURL& document_url,
int64 cache_document_was_loaded_from) {
+ if (was_select_cache_called_)
+ return false;
+
// The document url is not the resource url in the fallback case.
storage()->MarkEntryAsForeign(
main_resource_was_namespace_entry_ ? namespace_entry_url_ : document_url,
cache_document_was_loaded_from);
SelectCache(document_url, kAppCacheNoCacheId, GURL());
+ return true;
}
void AppCacheHost::GetStatusWithCallback(const GetStatusCallback& callback,
diff --git a/chromium/content/browser/appcache/appcache_host.h b/chromium/content/browser/appcache/appcache_host.h
index 82029baf3f6..3818f30683e 100644
--- a/chromium/content/browser/appcache/appcache_host.h
+++ b/chromium/content/browser/appcache/appcache_host.h
@@ -33,6 +33,7 @@ FORWARD_DECLARE_TEST(AppCacheHostTest, SetSwappableCache);
FORWARD_DECLARE_TEST(AppCacheHostTest, ForDedicatedWorker);
FORWARD_DECLARE_TEST(AppCacheHostTest, SelectCacheAllowed);
FORWARD_DECLARE_TEST(AppCacheHostTest, SelectCacheBlocked);
+FORWARD_DECLARE_TEST(AppCacheHostTest, SelectCacheTwice);
FORWARD_DECLARE_TEST(AppCacheTest, CleanupUnusedCache);
class AppCache;
class AppCacheFrontend;
@@ -76,13 +77,13 @@ class CONTENT_EXPORT AppCacheHost
void RemoveObserver(Observer* observer);
// Support for cache selection and scriptable method calls.
- void SelectCache(const GURL& document_url,
+ bool SelectCache(const GURL& document_url,
const int64 cache_document_was_loaded_from,
const GURL& manifest_url);
- void SelectCacheForWorker(int parent_process_id,
+ bool SelectCacheForWorker(int parent_process_id,
int parent_host_id);
- void SelectCacheForSharedWorker(int64 appcache_id);
- void MarkAsForeignEntry(const GURL& document_url,
+ bool SelectCacheForSharedWorker(int64 appcache_id);
+ bool MarkAsForeignEntry(const GURL& document_url,
int64 cache_document_was_loaded_from);
void GetStatusWithCallback(const GetStatusCallback& callback,
void* callback_param);
@@ -163,7 +164,6 @@ class CONTENT_EXPORT AppCacheHost
AppCacheStorage* storage() const { return storage_; }
AppCacheFrontend* frontend() const { return frontend_; }
AppCache* associated_cache() const { return associated_cache_.get(); }
- bool was_select_cache_called() const { return was_select_cache_called_; }
void enable_cache_selection(bool enable) {
is_cache_selection_enabled_ = enable;
@@ -336,6 +336,7 @@ class CONTENT_EXPORT AppCacheHost
FRIEND_TEST_ALL_PREFIXES(content::AppCacheHostTest, ForDedicatedWorker);
FRIEND_TEST_ALL_PREFIXES(content::AppCacheHostTest, SelectCacheAllowed);
FRIEND_TEST_ALL_PREFIXES(content::AppCacheHostTest, SelectCacheBlocked);
+ FRIEND_TEST_ALL_PREFIXES(content::AppCacheHostTest, SelectCacheTwice);
FRIEND_TEST_ALL_PREFIXES(content::AppCacheTest, CleanupUnusedCache);
DISALLOW_COPY_AND_ASSIGN(AppCacheHost);
diff --git a/chromium/content/browser/appcache/appcache_host_unittest.cc b/chromium/content/browser/appcache/appcache_host_unittest.cc
index 817e8c0c924..255bfa9ab5b 100644
--- a/chromium/content/browser/appcache/appcache_host_unittest.cc
+++ b/chromium/content/browser/appcache/appcache_host_unittest.cc
@@ -530,4 +530,17 @@ TEST_F(AppCacheHostTest, SelectCacheBlocked) {
service_.set_quota_manager_proxy(NULL);
}
+TEST_F(AppCacheHostTest, SelectCacheTwice) {
+ AppCacheHost host(1, &mock_frontend_, &service_);
+ const GURL kDocAndOriginUrl(GURL("http://whatever/").GetOrigin());
+
+ EXPECT_TRUE(host.SelectCache(kDocAndOriginUrl, kAppCacheNoCacheId, GURL()));
+
+ // Select methods should bail if cache has already been selected.
+ EXPECT_FALSE(host.SelectCache(kDocAndOriginUrl, kAppCacheNoCacheId, GURL()));
+ EXPECT_FALSE(host.SelectCacheForWorker(0, 0));
+ EXPECT_FALSE(host.SelectCacheForSharedWorker(kAppCacheNoCacheId));
+ EXPECT_FALSE(host.MarkAsForeignEntry(kDocAndOriginUrl, kAppCacheNoCacheId));
+}
+
} // namespace content
diff --git a/chromium/content/browser/appcache/appcache_update_job.cc b/chromium/content/browser/appcache/appcache_update_job.cc
index 8720fe78e71..24700465026 100644
--- a/chromium/content/browser/appcache/appcache_update_job.cc
+++ b/chromium/content/browser/appcache/appcache_update_job.cc
@@ -405,11 +405,13 @@ AppCacheUpdateJob::~AppCacheUpdateJob() {
if (internal_state_ != COMPLETED)
Cancel();
- DCHECK(!manifest_fetcher_);
- DCHECK(pending_url_fetches_.empty());
DCHECK(!inprogress_cache_.get());
DCHECK(pending_master_entries_.empty());
- DCHECK(master_entry_fetches_.empty());
+
+ // The job must not outlive any of its fetchers.
+ CHECK(!manifest_fetcher_);
+ CHECK(pending_url_fetches_.empty());
+ CHECK(master_entry_fetches_.empty());
if (group_)
group_->SetUpdateAppCacheStatus(AppCacheGroup::IDLE);
@@ -426,6 +428,9 @@ void AppCacheUpdateJob::StartUpdate(AppCacheHost* host,
DCHECK(!new_master_resource.has_ref());
DCHECK(new_master_resource.GetOrigin() == manifest_url_.GetOrigin());
+ if (ContainsKey(failed_master_entries_, new_master_resource))
+ return;
+
// Cannot add more to this update if already terminating.
if (IsTerminating()) {
group_->QueueUpdate(host, new_master_resource);
@@ -863,6 +868,8 @@ void AppCacheUpdateJob::HandleMasterEntryFetchCompleted(
}
hosts.clear();
+ failed_master_entries_.insert(url);
+
const char* kFormatString = "Manifest fetch failed (%d) %s";
std::string message = FormatUrlErrorMessage(
kFormatString, request->url(), fetcher->result(), response_code);
@@ -1105,10 +1112,10 @@ void AppCacheUpdateJob::OnDestructionImminent(AppCacheHost* host) {
// The host is about to be deleted; remove from our collection.
PendingMasters::iterator found =
pending_master_entries_.find(host->pending_master_entry_url());
- DCHECK(found != pending_master_entries_.end());
+ CHECK(found != pending_master_entries_.end());
PendingHosts& hosts = found->second;
PendingHosts::iterator it = std::find(hosts.begin(), hosts.end(), host);
- DCHECK(it != hosts.end());
+ CHECK(it != hosts.end());
hosts.erase(it);
}
diff --git a/chromium/content/browser/appcache/appcache_update_job.h b/chromium/content/browser/appcache/appcache_update_job.h
index e876ad07aa0..eaee83b9e3d 100644
--- a/chromium/content/browser/appcache/appcache_update_job.h
+++ b/chromium/content/browser/appcache/appcache_update_job.h
@@ -283,6 +283,7 @@ class CONTENT_EXPORT AppCacheUpdateJob
PendingMasters pending_master_entries_;
size_t master_entries_completed_;
+ std::set<GURL> failed_master_entries_;
// TODO(jennb): Delete when update no longer fetches master entries directly.
// Helper containers to track which pending master entries have yet to be
diff --git a/chromium/content/browser/devtools/shared_worker_devtools_manager.cc b/chromium/content/browser/devtools/shared_worker_devtools_manager.cc
index 0b944ccdc73..328960498e8 100644
--- a/chromium/content/browser/devtools/shared_worker_devtools_manager.cc
+++ b/chromium/content/browser/devtools/shared_worker_devtools_manager.cc
@@ -60,7 +60,8 @@ void SharedWorkerDevToolsManager::WorkerReadyForInspection(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
const WorkerId id(worker_process_id, worker_route_id);
AgentHostMap::iterator it = workers_.find(id);
- DCHECK(it != workers_.end());
+ if (it == workers_.end())
+ return;
it->second->WorkerReadyForInspection();
}
@@ -70,7 +71,8 @@ void SharedWorkerDevToolsManager::WorkerDestroyed(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
const WorkerId id(worker_process_id, worker_route_id);
AgentHostMap::iterator it = workers_.find(id);
- DCHECK(it != workers_.end());
+ if (it == workers_.end())
+ return;
scoped_refptr<SharedWorkerDevToolsAgentHost> agent_host(it->second);
agent_host->WorkerDestroyed();
}
diff --git a/chromium/content/browser/loader/upload_data_stream_builder.cc b/chromium/content/browser/loader/upload_data_stream_builder.cc
index 12b4b80c9cf..2f30f94a7d6 100644
--- a/chromium/content/browser/loader/upload_data_stream_builder.cc
+++ b/chromium/content/browser/loader/upload_data_stream_builder.cc
@@ -104,10 +104,8 @@ scoped_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build(
DCHECK_EQ(0ul, element.offset());
scoped_ptr<storage::BlobDataHandle> handle =
blob_context->GetBlobDataFromUUID(element.blob_uuid());
- storage::BlobDataHandle* handle_ptr = handle.get();
element_readers.push_back(new storage::UploadBlobElementReader(
- handle_ptr->CreateReader(file_system_context, file_task_runner),
- handle.Pass()));
+ handle.Pass(), file_system_context, file_task_runner));
break;
}
case ResourceRequestBody::Element::TYPE_DISK_CACHE_ENTRY:
diff --git a/chromium/content/browser/loader/upload_data_stream_builder_unittest.cc b/chromium/content/browser/loader/upload_data_stream_builder_unittest.cc
index e323a4e9e31..ae79dd93cf1 100644
--- a/chromium/content/browser/loader/upload_data_stream_builder_unittest.cc
+++ b/chromium/content/browser/loader/upload_data_stream_builder_unittest.cc
@@ -149,4 +149,55 @@ TEST(UploadDataStreamBuilderTest,
// Clean up for ASAN.
base::RunLoop().RunUntilIdle();
}
+
+TEST(UploadDataStreamBuilderTest, ResetUploadStreamWithBlob) {
+ base::MessageLoopForIO message_loop;
+ {
+ scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody;
+
+ const std::string kBlob = "blobuuid";
+ const std::string kBlobData = "blobdata";
+ const int kBlobDataLength = 8;
+ const int64 kIdentifier = 12345;
+
+ BlobStorageContext blob_storage_context;
+ BlobDataBuilder builder(kBlob);
+ builder.AppendData(kBlobData);
+ scoped_ptr<BlobDataHandle> handle =
+ blob_storage_context.AddFinishedBlob(&builder);
+ request_body->AppendBlob(kBlob);
+ request_body->set_identifier(kIdentifier);
+
+ scoped_ptr<net::UploadDataStream> upload(UploadDataStreamBuilder::Build(
+ request_body.get(), &blob_storage_context, nullptr,
+ base::ThreadTaskRunnerHandle::Get().get()));
+
+ net::TestCompletionCallback init_callback;
+ ASSERT_EQ(net::OK, upload->Init(init_callback.callback()));
+
+ // Read part of the data.
+ const int kBufferLength = 4;
+ scoped_refptr<net::IOBufferWithSize> buffer(
+ new net::IOBufferWithSize(kBufferLength));
+ net::TestCompletionCallback read_callback;
+ int result =
+ upload->Read(buffer.get(), buffer->size(), read_callback.callback());
+ EXPECT_EQ(kBufferLength, read_callback.GetResult(result));
+ EXPECT_EQ(0,
+ std::memcmp(kBlobData.c_str(), buffer->data(), buffer->size()));
+
+ // Reset.
+ ASSERT_EQ(net::OK, upload->Init(init_callback.callback()));
+
+ // Read all the data.
+ buffer = new net::IOBufferWithSize(kBlobDataLength);
+ result =
+ upload->Read(buffer.get(), buffer->size(), read_callback.callback());
+ EXPECT_EQ(kBlobDataLength, read_callback.GetResult(result));
+ EXPECT_EQ(0,
+ std::memcmp(kBlobData.c_str(), buffer->data(), buffer->size()));
+ }
+ // Clean up for ASAN.
+ base::RunLoop().RunUntilIdle();
+}
} // namespace content
diff --git a/chromium/content/common/cursors/webcursor.cc b/chromium/content/common/cursors/webcursor.cc
index faa6d703b4f..b2dfcdf0aaa 100644
--- a/chromium/content/common/cursors/webcursor.cc
+++ b/chromium/content/common/cursors/webcursor.cc
@@ -112,8 +112,12 @@ bool WebCursor::Deserialize(base::PickleIterator* iter) {
if (size_x > 0 && size_y > 0) {
// The * 4 is because the expected format is an array of RGBA pixel
// values.
- if (size_x * size_y * 4 > data_len)
+ if (size_x * size_y * 4 != data_len) {
+ LOG(WARNING) << "WebCursor's data length and image size mismatch: "
+ << size_x << "x" << size_y << "x4 != "
+ << data_len;
return false;
+ }
hotspot_.set_x(hotspot_x);
hotspot_.set_y(hotspot_y);
diff --git a/chromium/content/common/sandbox_win.cc b/chromium/content/common/sandbox_win.cc
index 2173f4c6ec5..5860239b4cf 100644
--- a/chromium/content/common/sandbox_win.cc
+++ b/chromium/content/common/sandbox_win.cc
@@ -104,8 +104,6 @@ const wchar_t* const kTroublesomeDlls[] = {
L"radprlib.dll", // Radiant Naomi Internet Filter.
L"rapportnikko.dll", // Trustware Rapport.
L"rlhook.dll", // Trustware Bufferzone.
- L"rooksbas.dll", // IBM Trusteer Rapport.
- L"rooksbas_x64.dll" // IBM Trusteer Rapport.
L"rooksdol.dll", // Trustware Rapport.
L"rndlpepperbrowserrecordhelper.dll", // RealPlayer.
L"rpchromebrowserrecordhelper.dll", // RealPlayer.
diff --git a/chromium/content/renderer/media/android/webmediaplayer_android.cc b/chromium/content/renderer/media/android/webmediaplayer_android.cc
index b7e923021fe..8b1f09a1f39 100644
--- a/chromium/content/renderer/media/android/webmediaplayer_android.cc
+++ b/chromium/content/renderer/media/android/webmediaplayer_android.cc
@@ -199,6 +199,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid(
allow_stored_credentials_(false),
is_local_resource_(false),
interpolator_(&default_tick_clock_),
+ suppress_deleting_texture_(false),
weak_factory_(this) {
DCHECK(player_manager_);
DCHECK(cdm_factory_);
@@ -985,6 +986,7 @@ void WebMediaPlayerAndroid::OnDidExitFullscreen() {
if (!paused() && needs_establish_peer_) {
TryCreateStreamTextureProxyIfNeeded();
EstablishSurfaceTexturePeer();
+ suppress_deleting_texture_ = true;
}
#if defined(VIDEO_HOLE)
@@ -1329,8 +1331,13 @@ void WebMediaPlayerAndroid::PutCurrentFrame() {
void WebMediaPlayerAndroid::ResetStreamTextureProxy() {
DCHECK(main_thread_checker_.CalledOnValidThread());
-
- RemoveSurfaceTextureAndProxy();
+ // When suppress_deleting_texture_ is true, OnDidExitFullscreen has already
+ // re-connected surface texture for embedded playback. There is no need to
+ // delete them and create again. In fact, Android gives MediaPlayer erorr
+ // code: what == 1, extra == -19 when Android WebView tries to create, delete
+ // then create the surface textures for a video in quick succession.
+ if (!suppress_deleting_texture_)
+ RemoveSurfaceTextureAndProxy();
TryCreateStreamTextureProxyIfNeeded();
if (needs_establish_peer_ && is_playing_)
@@ -1902,6 +1909,7 @@ void WebMediaPlayerAndroid::enterFullscreen() {
player_manager_->EnterFullscreen(player_id_);
SetNeedsEstablishPeer(false);
is_fullscreen_ = true;
+ suppress_deleting_texture_ = false;
}
bool WebMediaPlayerAndroid::IsHLSStream() const {
diff --git a/chromium/content/renderer/media/android/webmediaplayer_android.h b/chromium/content/renderer/media/android/webmediaplayer_android.h
index a1762394142..4c5fcbdaeed 100644
--- a/chromium/content/renderer/media/android/webmediaplayer_android.h
+++ b/chromium/content/renderer/media/android/webmediaplayer_android.h
@@ -528,6 +528,9 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer,
scoped_ptr<MediaSourceDelegate> media_source_delegate_;
+ // Whether to delete the existing texture and re-create it.
+ bool suppress_deleting_texture_;
+
// NOTE: Weak pointers must be invalidated before all other member variables.
base::WeakPtrFactory<WebMediaPlayerAndroid> weak_factory_;
diff --git a/chromium/gpu/config/gpu_driver_bug_list_json.cc b/chromium/gpu/config/gpu_driver_bug_list_json.cc
index 36a42127512..814d00e552d 100644
--- a/chromium/gpu/config/gpu_driver_bug_list_json.cc
+++ b/chromium/gpu/config/gpu_driver_bug_list_json.cc
@@ -1574,7 +1574,7 @@ LONG_STRING_CONST(
"type": "macosx"
},
"vendor_id": "0x1002",
- "device_id": ["0x9440", "0x944a"],
+ "device_id": ["0x9440", "0x944a", "0x9488", "0x9490"],
"features": [
"disable_overlay_ca_layers",
"disable_post_sub_buffers_for_onscreen_surfaces"
diff --git a/chromium/gpu/config/software_rendering_list_json.cc b/chromium/gpu/config/software_rendering_list_json.cc
index 2baf780be70..eaabfe6cc5b 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": "10.12",
+ "version": "10.16",
"entries": [
{
"id": 1,
@@ -1166,6 +1166,19 @@ LONG_STRING_CONST(
"features": [
"all"
]
+ },
+ {
+ "id": 108,
+ "description": "GPU rasterization image color broken on Vivante",
+ "cr_bugs": [560587],
+ "os": {
+ "type": "android"
+ },
+ "gl_renderer": ".*Vivante.*",
+ "features": [
+ "gpu_rasterization",
+ "accelerated_2d_canvas"
+ ]
}
]
}
diff --git a/chromium/media/midi/midi_manager.cc b/chromium/media/midi/midi_manager.cc
index 6e8c1a266fa..27fe9c6eb21 100644
--- a/chromium/media/midi/midi_manager.cc
+++ b/chromium/media/midi/midi_manager.cc
@@ -134,11 +134,10 @@ void MidiManager::EndSession(MidiManagerClient* client) {
}
void MidiManager::AccumulateMidiBytesSent(MidiManagerClient* client, size_t n) {
- {
- base::AutoLock auto_lock(lock_);
- if (clients_.find(client) == clients_.end())
- return;
- }
+ base::AutoLock auto_lock(lock_);
+ if (clients_.find(client) == clients_.end())
+ return;
+
client->AccumulateMidiBytesSent(n);
}
diff --git a/chromium/media/midi/midi_manager_alsa.cc b/chromium/media/midi/midi_manager_alsa.cc
index af618efdb27..fe9fa42a0fd 100644
--- a/chromium/media/midi/midi_manager_alsa.cc
+++ b/chromium/media/midi/midi_manager_alsa.cc
@@ -298,8 +298,8 @@ void MidiManagerAlsa::DispatchSendMidiData(MidiManagerClient* client,
// Acknowledge send.
send_thread_.message_loop()->PostTask(
- FROM_HERE, base::Bind(&MidiManagerClient::AccumulateMidiBytesSent,
- base::Unretained(client), data.size()));
+ FROM_HERE, base::Bind(&MidiManagerAlsa::AccumulateMidiBytesSent,
+ base::Unretained(this), client, data.size()));
}
MidiManagerAlsa::MidiPort::Id::Id() = default;
diff --git a/chromium/media/midi/midi_manager_mac.cc b/chromium/media/midi/midi_manager_mac.cc
index ade118d2cfd..d51a2159b04 100644
--- a/chromium/media/midi/midi_manager_mac.cc
+++ b/chromium/media/midi/midi_manager_mac.cc
@@ -379,7 +379,7 @@ void MidiManagerMac::SendMidiData(MidiManagerClient* client,
MIDISend(coremidi_output_, destination, packet_list);
}
- client->AccumulateMidiBytesSent(data.size());
+ AccumulateMidiBytesSent(client, data.size());
}
} // namespace midi
diff --git a/chromium/media/video/gpu_memory_buffer_video_frame_pool.cc b/chromium/media/video/gpu_memory_buffer_video_frame_pool.cc
index f1965d109b9..526f96e5191 100644
--- a/chromium/media/video/gpu_memory_buffer_video_frame_pool.cc
+++ b/chromium/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -552,7 +552,8 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::
mailbox_holders[VideoFrame::kUPlane],
mailbox_holders[VideoFrame::kVPlane],
base::Bind(&PoolImpl::MailboxHoldersReleased, this, frame_resources),
- size, gfx::Rect(size), size, video_frame->timestamp());
+ size, gfx::Rect(size), video_frame->natural_size(),
+ video_frame->timestamp());
if (video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY))
frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
break;
@@ -561,7 +562,8 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::
frame = VideoFrame::WrapNativeTexture(
output_format_, mailbox_holders[VideoFrame::kYPlane],
base::Bind(&PoolImpl::MailboxHoldersReleased, this, frame_resources),
- size, gfx::Rect(size), size, video_frame->timestamp());
+ size, gfx::Rect(size), video_frame->natural_size(),
+ video_frame->timestamp());
frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
break;
default:
diff --git a/chromium/net/http/http_network_transaction_unittest.cc b/chromium/net/http/http_network_transaction_unittest.cc
index 730bf9e39e9..4744f6197b6 100644
--- a/chromium/net/http/http_network_transaction_unittest.cc
+++ b/chromium/net/http/http_network_transaction_unittest.cc
@@ -5319,12 +5319,8 @@ TEST_P(HttpNetworkTransactionTest, RecycleDeadSSLSocket) {
};
MockRead data_reads[] = {
- MockRead("HTTP/1.1 200 OK\r\n"),
- MockRead("Content-Length: 11\r\n\r\n"),
- MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
- MockRead("hello world"),
- MockRead(ASYNC, 0, 0) // EOF
- };
+ MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 11\r\n\r\n"),
+ MockRead("hello world"), MockRead(ASYNC, ERR_CONNECTION_CLOSED)};
SSLSocketDataProvider ssl(ASYNC, OK);
SSLSocketDataProvider ssl2(ASYNC, OK);
diff --git a/chromium/net/http/http_stream_parser.cc b/chromium/net/http/http_stream_parser.cc
index 9ddae4853da..4e4b6b6523f 100644
--- a/chromium/net/http/http_stream_parser.cc
+++ b/chromium/net/http/http_stream_parser.cc
@@ -1078,7 +1078,7 @@ bool HttpStreamParser::CanReuseConnection() const {
return false;
if (!response_->headers || !response_->headers->IsKeepAlive())
return false;
- return connection_->socket() && connection_->socket()->IsConnectedAndIdle();
+ return connection_->socket() && connection_->socket()->IsConnected();
}
void HttpStreamParser::GetSSLInfo(SSLInfo* ssl_info) {
diff --git a/chromium/net/http/http_stream_parser.h b/chromium/net/http/http_stream_parser.h
index f56e7ded4c3..f8700c472f5 100644
--- a/chromium/net/http/http_stream_parser.h
+++ b/chromium/net/http/http_stream_parser.h
@@ -79,7 +79,8 @@ class NET_EXPORT_PRIVATE HttpStreamParser {
// The connection can be reused if:
// * It's still connected.
// * The response headers indicate the connection can be kept alive.
- // * The end of the response can be found.
+ // * The end of the response can be found, though it may not have yet been
+ // received.
//
// Note that if response headers have yet to be received, this will return
// false.
diff --git a/chromium/net/quic/crypto/crypto_protocol.h b/chromium/net/quic/crypto/crypto_protocol.h
index 6d56198ce82..ff238ec2fab 100644
--- a/chromium/net/quic/crypto/crypto_protocol.h
+++ b/chromium/net/quic/crypto/crypto_protocol.h
@@ -166,6 +166,9 @@ const QuicTag kRSEQ = TAG('R', 'S', 'E', 'Q'); // Rejected packet number
// Universal tags
const QuicTag kPAD = TAG('P', 'A', 'D', '\0'); // Padding
+
+// Sent by clients with the fix to crbug/566156
+const QuicTag kFIXD = TAG('F', 'I', 'X', 'D'); // Client hello
// clang-format on
// These tags have a special form so that they appear either at the beginning
diff --git a/chromium/net/quic/crypto/quic_crypto_client_config_test.cc b/chromium/net/quic/crypto/quic_crypto_client_config_test.cc
index 0e1ea792f86..804a96316f5 100644
--- a/chromium/net/quic/crypto/quic_crypto_client_config_test.cc
+++ b/chromium/net/quic/crypto/quic_crypto_client_config_test.cc
@@ -6,6 +6,7 @@
#include "net/quic/crypto/proof_verifier.h"
#include "net/quic/quic_server_id.h"
+#include "net/quic/test_tools/crypto_test_utils.h"
#include "net/quic/test_tools/mock_random.h"
#include "net/quic/test_tools/quic_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -350,43 +351,9 @@ TEST(QuicCryptoClientConfigTest, ClearCachedStates) {
EXPECT_EQ(2u, cleared_cache->generation_counter());
}
-// Creates a minimal dummy reject message that will pass the client-config
-// validation tests.
-void FillInDummyReject(CryptoHandshakeMessage* rej, bool reject_is_stateless) {
- if (reject_is_stateless) {
- rej->set_tag(kSREJ);
- } else {
- rej->set_tag(kREJ);
- }
-
- // Minimum SCFG that passes config validation checks.
- // clang-format off
- unsigned char scfg[] = {
- // SCFG
- 0x53, 0x43, 0x46, 0x47,
- // num entries
- 0x01, 0x00,
- // padding
- 0x00, 0x00,
- // EXPY
- 0x45, 0x58, 0x50, 0x59,
- // EXPY end offset
- 0x08, 0x00, 0x00, 0x00,
- // Value
- '1', '2', '3', '4',
- '5', '6', '7', '8'
- };
- // clang-format on
- rej->SetValue(kSCFG, scfg);
- rej->SetStringPiece(kServerNonceTag, "SERVER_NONCE");
- vector<QuicTag> reject_reasons;
- reject_reasons.push_back(CLIENT_NONCE_INVALID_FAILURE);
- rej->SetVector(kRREJ, reject_reasons);
-}
-
TEST(QuicCryptoClientConfigTest, ProcessReject) {
CryptoHandshakeMessage rej;
- FillInDummyReject(&rej, /* stateless */ false);
+ CryptoTestUtils::FillInDummyReject(&rej, /* stateless */ false);
// Now process the rejection.
QuicCryptoClientConfig::CachedState cached;
@@ -404,7 +371,7 @@ TEST(QuicCryptoClientConfigTest, ProcessReject) {
TEST(QuicCryptoClientConfigTest, ProcessStatelessReject) {
// Create a dummy reject message and mark it as stateless.
CryptoHandshakeMessage rej;
- FillInDummyReject(&rej, /* stateless */ true);
+ CryptoTestUtils::FillInDummyReject(&rej, /* stateless */ true);
const QuicConnectionId kConnectionId = 0xdeadbeef;
const string server_nonce = "SERVER_NONCE";
rej.SetValue(kRCID, kConnectionId);
@@ -428,7 +395,7 @@ TEST(QuicCryptoClientConfigTest, BadlyFormattedStatelessReject) {
// Create a dummy reject message and mark it as stateless. Do not
// add an server-designated connection-id.
CryptoHandshakeMessage rej;
- FillInDummyReject(&rej, /* stateless */ true);
+ CryptoTestUtils::FillInDummyReject(&rej, /* stateless */ true);
// Now process the rejection.
QuicCryptoClientConfig::CachedState cached;
diff --git a/chromium/net/quic/quic_connection.cc b/chromium/net/quic/quic_connection.cc
index 261230b062a..a3fa3d93313 100644
--- a/chromium/net/quic/quic_connection.cc
+++ b/chromium/net/quic/quic_connection.cc
@@ -1132,6 +1132,12 @@ QuicConsumedData QuicConnection::SendStreamData(
LOG(DFATAL) << "Attempt to send empty stream frame";
return QuicConsumedData(0, false);
}
+ if (FLAGS_quic_never_write_unencrypted_data && id != kCryptoStreamId &&
+ encryption_level_ == ENCRYPTION_NONE) {
+ LOG(DFATAL) << "Cannot send stream data without encryption.";
+ CloseConnection(QUIC_UNENCRYPTED_STREAM_DATA, false);
+ return QuicConsumedData(0, false);
+ }
// Opportunistically bundle an ack with every outgoing packet.
// Particularly, we want to bundle with handshake packets since we don't know
diff --git a/chromium/net/quic/quic_connection_test.cc b/chromium/net/quic/quic_connection_test.cc
index 388070efa9c..13128011b45 100644
--- a/chromium/net/quic/quic_connection_test.cc
+++ b/chromium/net/quic/quic_connection_test.cc
@@ -17,6 +17,7 @@
#include "net/quic/crypto/quic_decrypter.h"
#include "net/quic/crypto/quic_encrypter.h"
#include "net/quic/quic_ack_notifier.h"
+#include "net/quic/quic_flags.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_utils.h"
#include "net/quic/test_tools/mock_clock.h"
@@ -719,6 +720,9 @@ class QuicConnectionTest : public ::testing::TestWithParam<TestParams> {
.WillRepeatedly(Return(QuicTime::Zero()));
EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
.WillRepeatedly(Return(PacketNumberSet()));
+ // TODO(ianswett): Fix QuicConnectionTests so they don't attempt to write
+ // non-crypto stream data at ENCRYPTION_NONE.
+ FLAGS_quic_never_write_unencrypted_data = false;
}
QuicVersion version() { return GetParam().version; }
@@ -4810,6 +4814,15 @@ TEST_P(QuicConnectionTest, DoNotSendGoAwayTwice) {
connection_.SendGoAway(QUIC_PEER_GOING_AWAY, kHeadersStreamId, "Going Away.");
}
+TEST_P(QuicConnectionTest, SendingUnencryptedStreamDataFails) {
+ FLAGS_quic_never_write_unencrypted_data = true;
+ EXPECT_CALL(visitor_,
+ OnConnectionClosed(QUIC_UNENCRYPTED_STREAM_DATA, false));
+ EXPECT_DFATAL(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr),
+ "Cannot send stream data without encryption.");
+ EXPECT_FALSE(connection_.connected());
+}
+
} // namespace
} // namespace test
} // namespace net
diff --git a/chromium/net/quic/quic_crypto_client_stream.cc b/chromium/net/quic/quic_crypto_client_stream.cc
index d4ea4bab337..c5742da2c2e 100644
--- a/chromium/net/quic/quic_crypto_client_stream.cc
+++ b/chromium/net/quic/quic_crypto_client_stream.cc
@@ -4,6 +4,8 @@
#include "net/quic/quic_crypto_client_stream.h"
+#include <vector>
+
#include "base/metrics/histogram_macros.h"
#include "base/profiler/scoped_tracker.h"
#include "net/quic/crypto/crypto_protocol.h"
@@ -15,9 +17,30 @@
#include "net/quic/quic_session.h"
using std::string;
+using std::vector;
namespace net {
+namespace {
+
+void AppendFixed(CryptoHandshakeMessage* message) {
+ vector<QuicTag> tags;
+ tags.push_back(kFIXD);
+
+ const QuicTag* received_tags;
+ size_t received_tags_length;
+ QuicErrorCode error =
+ message->GetTaglist(kCOPT, &received_tags, &received_tags_length);
+ if (error == QUIC_NO_ERROR) {
+ for (size_t i = 0; i < received_tags_length; ++i) {
+ tags.push_back(received_tags[i]);
+ }
+ }
+ message->SetVector(kCOPT, tags);
+}
+
+} // namespace
+
QuicCryptoClientStream::ChannelIDSourceCallbackImpl::
ChannelIDSourceCallbackImpl(QuicCryptoClientStream* stream)
: stream_(stream) {}
@@ -256,6 +279,7 @@ void QuicCryptoClientStream::DoSendCHLO(
// Send the client hello in plaintext.
session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_NONE);
+ encryption_established_ = false;
if (num_client_hellos_ > kMaxClientHellos) {
CloseConnection(QUIC_CRYPTO_TOO_MANY_REJECTS);
return;
@@ -268,6 +292,12 @@ void QuicCryptoClientStream::DoSendCHLO(
// Send all the options, regardless of whether we're sending an
// inchoate or subsequent hello.
session()->config()->ToHandshakeMessage(&out);
+
+ // This block and function should be removed after removing QUIC_VERSION_25.
+ if (FLAGS_quic_require_fix) {
+ AppendFixed(&out);
+ }
+
if (!cached->IsComplete(session()->connection()->clock()->WallNow())) {
crypto_config_->FillInchoateClientHello(
server_id_,
diff --git a/chromium/net/quic/quic_crypto_server_stream.cc b/chromium/net/quic/quic_crypto_server_stream.cc
index f50ab9e8b37..fe1157b4f57 100644
--- a/chromium/net/quic/quic_crypto_server_stream.cc
+++ b/chromium/net/quic/quic_crypto_server_stream.cc
@@ -20,6 +20,24 @@ using std::string;
namespace net {
+namespace {
+bool HasFixedTag(const CryptoHandshakeMessage& message) {
+ const QuicTag* received_tags;
+ size_t received_tags_length;
+ QuicErrorCode error =
+ message.GetTaglist(kCOPT, &received_tags, &received_tags_length);
+ if (error == QUIC_NO_ERROR) {
+ DCHECK(received_tags);
+ for (size_t i = 0; i < received_tags_length; ++i) {
+ if (received_tags[i] == kFIXD) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+} // namespace
+
void ServerHelloNotifier::OnAckNotification(
int num_retransmitted_packets,
int num_retransmitted_bytes,
@@ -57,6 +75,12 @@ void QuicCryptoServerStream::OnHandshakeMessage(
QuicCryptoStream::OnHandshakeMessage(message);
++num_handshake_messages_;
+ // This block should be removed with support for QUIC_VERSION_25.
+ if (FLAGS_quic_require_fix && !HasFixedTag(message)) {
+ CloseConnection(QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND);
+ return;
+ }
+
// Do not process handshake messages after the handshake is confirmed.
if (handshake_confirmed_) {
CloseConnection(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE);
diff --git a/chromium/net/quic/quic_crypto_server_stream_test.cc b/chromium/net/quic/quic_crypto_server_stream_test.cc
index 5a999ed1f51..7a205137f06 100644
--- a/chromium/net/quic/quic_crypto_server_stream_test.cc
+++ b/chromium/net/quic/quic_crypto_server_stream_test.cc
@@ -363,6 +363,7 @@ TEST_P(QuicCryptoServerStreamTest, ZeroRTT) {
}
TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) {
+ FLAGS_quic_require_fix = false;
CompleteCryptoHandshake();
EXPECT_CALL(
*server_connection_,
@@ -375,6 +376,7 @@ TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) {
}
TEST_P(QuicCryptoServerStreamTest, BadMessageType) {
+ FLAGS_quic_require_fix = false;
message_.set_tag(kSHLO);
ConstructHandshakeMessage();
EXPECT_CALL(*server_connection_,
diff --git a/chromium/net/quic/quic_flags.cc b/chromium/net/quic/quic_flags.cc
index dcbc230fc1b..c897b54ee84 100644
--- a/chromium/net/quic/quic_flags.cc
+++ b/chromium/net/quic/quic_flags.cc
@@ -73,3 +73,13 @@ bool FLAGS_reset_cubic_epoch_when_app_limited = true;
// If true, use an interval set as the internal representation of a packet queue
// instead of a set.
bool FLAGS_quic_packet_queue_use_interval_set = true;
+
+// If true, QUIC sessions will write block streams that attempt to write
+// unencrypted data.
+bool FLAGS_quic_block_unencrypted_writes = true;
+
+// If true, Close the connection instead of writing unencrypted stream data.
+bool FLAGS_quic_never_write_unencrypted_data = true;
+
+// If true, reject any incoming QUIC which does not have the FIXD tag.
+bool FLAGS_quic_require_fix = true;
diff --git a/chromium/net/quic/quic_flags.h b/chromium/net/quic/quic_flags.h
index ec4cd5a02cd..b6f1993367f 100644
--- a/chromium/net/quic/quic_flags.h
+++ b/chromium/net/quic/quic_flags.h
@@ -26,5 +26,8 @@ NET_EXPORT_PRIVATE extern bool FLAGS_send_goaway_after_client_migration;
NET_EXPORT_PRIVATE extern bool FLAGS_quic_close_connection_out_of_order_sending;
NET_EXPORT_PRIVATE extern bool FLAGS_reset_cubic_epoch_when_app_limited;
NET_EXPORT_PRIVATE extern bool FLAGS_quic_packet_queue_use_interval_set;
+NET_EXPORT_PRIVATE extern bool FLAGS_quic_block_unencrypted_writes;
+NET_EXPORT_PRIVATE extern bool FLAGS_quic_never_write_unencrypted_data;
+NET_EXPORT_PRIVATE extern bool FLAGS_quic_require_fix;
#endif // NET_QUIC_QUIC_FLAGS_H_
diff --git a/chromium/net/quic/quic_session.cc b/chromium/net/quic/quic_session.cc
index fe375bf69b1..890f5a25f18 100644
--- a/chromium/net/quic/quic_session.cc
+++ b/chromium/net/quic/quic_session.cc
@@ -296,6 +296,12 @@ QuicConsumedData QuicSession::WritevData(
bool fin,
FecProtection fec_protection,
QuicAckNotifier::DelegateInterface* ack_notifier_delegate) {
+ if (FLAGS_quic_block_unencrypted_writes && !IsEncryptionEstablished() &&
+ id != kCryptoStreamId) {
+ // Do not let streams write without encryption. The calling stream will end
+ // up write blocked until OnCanWrite is next called.
+ return QuicConsumedData(0, false);
+ }
return connection_->SendStreamData(id, iov, offset, fin, fec_protection,
ack_notifier_delegate);
}
@@ -519,12 +525,20 @@ void QuicSession::OnCryptoHandshakeEvent(CryptoHandshakeEvent event) {
// TODO(satyamshekhar): Move the logic of setting the encrypter/decrypter
// to QuicSession since it is the glue.
case ENCRYPTION_FIRST_ESTABLISHED:
+ // Given any streams blocked by encryption a chance to write.
+ if (FLAGS_quic_block_unencrypted_writes) {
+ OnCanWrite();
+ }
break;
case ENCRYPTION_REESTABLISHED:
// Retransmit originally packets that were sent, since they can't be
// decrypted by the peer.
connection_->RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION);
+ // Given any streams blocked by encryption a chance to write.
+ if (FLAGS_quic_block_unencrypted_writes) {
+ OnCanWrite();
+ }
break;
case HANDSHAKE_CONFIRMED:
diff --git a/chromium/net/quic/quic_session_test.cc b/chromium/net/quic/quic_session_test.cc
index 706b426aa76..c49936577ae 100644
--- a/chromium/net/quic/quic_session_test.cc
+++ b/chromium/net/quic/quic_session_test.cc
@@ -13,6 +13,7 @@
#include "base/strings/string_number_conversions.h"
#include "net/quic/crypto/crypto_protocol.h"
#include "net/quic/quic_crypto_stream.h"
+#include "net/quic/quic_flags.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_utils.h"
#include "net/quic/reliable_quic_stream.h"
@@ -223,6 +224,9 @@ class QuicSessionTestBase : public ::testing::TestWithParam<QuicVersion> {
"EFFlEYHsBQ98rXImL8ySDycdLEFvBPdtctPmWCfTxwmoSMLHU2SCVDhbqMWU5b0yr"
"JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo ";
connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ // TODO(ianswett): Fix QuicSessionTests so they don't attempt to write
+ // non-crypto stream data at ENCRYPTION_NONE.
+ FLAGS_quic_never_write_unencrypted_data = false;
}
void CheckClosedStreams() {
@@ -391,6 +395,10 @@ TEST_P(QuicSessionTestServer, OnCanWrite) {
}
TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
+ // Encryption needs to be established before data can be sent.
+ CryptoHandshakeMessage msg;
+ session_.GetCryptoStream()->OnHandshakeMessage(msg);
+
// Drive congestion control manually.
MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
QuicConnectionPeer::SetSendAlgorithm(session_.connection(), send_algorithm);
diff --git a/chromium/net/quic/test_tools/crypto_test_utils.cc b/chromium/net/quic/test_tools/crypto_test_utils.cc
index 409a042bc35..0ab55f1f399 100644
--- a/chromium/net/quic/test_tools/crypto_test_utils.cc
+++ b/chromium/net/quic/test_tools/crypto_test_utils.cc
@@ -398,6 +398,40 @@ CommonCertSets* CryptoTestUtils::MockCommonCertSets(StringPiece cert,
return new class MockCommonCertSets(cert, hash, index);
}
+// static
+void CryptoTestUtils::FillInDummyReject(CryptoHandshakeMessage* rej,
+ bool reject_is_stateless) {
+ if (reject_is_stateless) {
+ rej->set_tag(kSREJ);
+ } else {
+ rej->set_tag(kREJ);
+ }
+
+ // Minimum SCFG that passes config validation checks.
+ // clang-format off
+ unsigned char scfg[] = {
+ // SCFG
+ 0x53, 0x43, 0x46, 0x47,
+ // num entries
+ 0x01, 0x00,
+ // padding
+ 0x00, 0x00,
+ // EXPY
+ 0x45, 0x58, 0x50, 0x59,
+ // EXPY end offset
+ 0x08, 0x00, 0x00, 0x00,
+ // Value
+ '1', '2', '3', '4',
+ '5', '6', '7', '8'
+ };
+ // clang-format on
+ rej->SetValue(kSCFG, scfg);
+ rej->SetStringPiece(kServerNonceTag, "SERVER_NONCE");
+ vector<QuicTag> reject_reasons;
+ reject_reasons.push_back(CLIENT_NONCE_INVALID_FAILURE);
+ rej->SetVector(kRREJ, reject_reasons);
+}
+
void CryptoTestUtils::CompareClientAndServerKeys(
QuicCryptoClientStream* client,
QuicCryptoServerStream* server) {
diff --git a/chromium/net/quic/test_tools/crypto_test_utils.h b/chromium/net/quic/test_tools/crypto_test_utils.h
index 78aec5cca42..38fadaea0ce 100644
--- a/chromium/net/quic/test_tools/crypto_test_utils.h
+++ b/chromium/net/quic/test_tools/crypto_test_utils.h
@@ -147,6 +147,12 @@ class CryptoTestUtils {
uint64 hash,
uint32 index);
+ // Creates a minimal dummy reject message that will pass the client-config
+ // validation tests. This will include a server config, but no certs, proof
+ // source address token, or server nonce.
+ static void FillInDummyReject(CryptoHandshakeMessage* rej,
+ bool reject_is_stateless);
+
// ParseTag returns a QuicTag from parsing |tagstr|. |tagstr| may either be
// in the format "EXMP" (i.e. ASCII format), or "#11223344" (an explicit hex
// format). It CHECK fails if there's a parse error.
diff --git a/chromium/net/quic/test_tools/mock_crypto_client_stream.cc b/chromium/net/quic/test_tools/mock_crypto_client_stream.cc
index 290693933fd..c54ccff7a0c 100644
--- a/chromium/net/quic/test_tools/mock_crypto_client_stream.cc
+++ b/chromium/net/quic/test_tools/mock_crypto_client_stream.cc
@@ -5,6 +5,7 @@
#include "net/quic/test_tools/mock_crypto_client_stream.h"
#include "net/quic/crypto/quic_decrypter.h"
+#include "net/quic/crypto/quic_encrypter.h"
#include "net/quic/quic_client_session_base.h"
#include "net/quic/quic_server_id.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -40,6 +41,9 @@ void MockCryptoClientStream::CryptoConnect() {
handshake_confirmed_ = false;
session()->connection()->SetDecrypter(ENCRYPTION_INITIAL,
QuicDecrypter::Create(kNULL));
+ session()->connection()->SetEncrypter(ENCRYPTION_INITIAL,
+ QuicEncrypter::Create(kNULL));
+ session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
session()->OnCryptoHandshakeEvent(
QuicSession::ENCRYPTION_FIRST_ESTABLISHED);
break;
@@ -56,6 +60,10 @@ void MockCryptoClientStream::CryptoConnect() {
SetConfigNegotiated();
session()->connection()->SetDecrypter(ENCRYPTION_FORWARD_SECURE,
QuicDecrypter::Create(kNULL));
+ session()->connection()->SetEncrypter(ENCRYPTION_FORWARD_SECURE,
+ QuicEncrypter::Create(kNULL));
+ session()->connection()->SetDefaultEncryptionLevel(
+ ENCRYPTION_FORWARD_SECURE);
session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED);
break;
}
diff --git a/chromium/net/quic/test_tools/quic_packet_creator_peer.cc b/chromium/net/quic/test_tools/quic_packet_creator_peer.cc
index b5c94141678..2437fa0493c 100644
--- a/chromium/net/quic/test_tools/quic_packet_creator_peer.cc
+++ b/chromium/net/quic/test_tools/quic_packet_creator_peer.cc
@@ -52,5 +52,11 @@ void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
creator->packet_number_ = s;
}
+// static
+EncryptionLevel QuicPacketCreatorPeer::GetEncryptionLevel(
+ QuicPacketCreator* creator) {
+ return creator->encryption_level_;
+}
+
} // namespace test
} // namespace net
diff --git a/chromium/net/quic/test_tools/quic_packet_creator_peer.h b/chromium/net/quic/test_tools/quic_packet_creator_peer.h
index 83efcb250a9..05f0d96594b 100644
--- a/chromium/net/quic/test_tools/quic_packet_creator_peer.h
+++ b/chromium/net/quic/test_tools/quic_packet_creator_peer.h
@@ -29,6 +29,7 @@ class QuicPacketCreatorPeer {
static QuicPacketNumberLength NextPacketNumberLength(
QuicPacketCreator* creator);
static void SetPacketNumber(QuicPacketCreator* creator, QuicPacketNumber s);
+ static EncryptionLevel GetEncryptionLevel(QuicPacketCreator* creator);
private:
DISALLOW_COPY_AND_ASSIGN(QuicPacketCreatorPeer);
diff --git a/chromium/net/tools/quic/quic_client_session_test.cc b/chromium/net/tools/quic/quic_client_session_test.cc
index f9d761ee08e..0c6ab8736a2 100644
--- a/chromium/net/tools/quic/quic_client_session_test.cc
+++ b/chromium/net/tools/quic/quic_client_session_test.cc
@@ -10,6 +10,8 @@
#include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
#include "net/quic/quic_flags.h"
#include "net/quic/test_tools/crypto_test_utils.h"
+#include "net/quic/test_tools/quic_connection_peer.h"
+#include "net/quic/test_tools/quic_packet_creator_peer.h"
#include "net/quic/test_tools/quic_spdy_session_peer.h"
#include "net/quic/test_tools/quic_test_utils.h"
#include "net/tools/quic/quic_spdy_client_stream.h"
@@ -21,6 +23,8 @@ using net::test::CryptoTestUtils;
using net::test::DefaultQuicConfig;
using net::test::MockConnection;
using net::test::PacketSavingConnection;
+using net::test::QuicConnectionPeer;
+using net::test::QuicPacketCreatorPeer;
using net::test::QuicSpdySessionPeer;
using net::test::SupportedVersions;
using net::test::TestPeerIPAddress;
@@ -42,16 +46,21 @@ const uint16 kPort = 80;
class ToolsQuicClientSessionTest
: public ::testing::TestWithParam<QuicVersion> {
protected:
- ToolsQuicClientSessionTest()
- : connection_(new PacketSavingConnection(Perspective::IS_CLIENT,
- SupportedVersions(GetParam()))) {
+ ToolsQuicClientSessionTest() {
+ Initialize();
+ // Advance the time, because timers do not like uninitialized times.
+ connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ }
+
+ void Initialize() {
+ session_.reset();
+ connection_ = new PacketSavingConnection(Perspective::IS_CLIENT,
+ SupportedVersions(GetParam()));
session_.reset(new QuicClientSession(
DefaultQuicConfig(), connection_,
QuicServerId(kServerHostname, kPort, false, PRIVACY_MODE_DISABLED),
&crypto_config_));
session_->Initialize();
- // Advance the time, because timers do not like uninitialized times.
- connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
}
void CompleteCryptoHandshake() {
@@ -72,6 +81,45 @@ TEST_P(ToolsQuicClientSessionTest, CryptoConnect) {
CompleteCryptoHandshake();
}
+TEST_P(ToolsQuicClientSessionTest, NoEncryptionAfterInitialEncryption) {
+ ValueRestore<bool> old_flag(&FLAGS_quic_block_unencrypted_writes, true);
+ // Complete a handshake in order to prime the crypto config for 0-RTT.
+ CompleteCryptoHandshake();
+
+ // Now create a second session using the same crypto config.
+ Initialize();
+
+ // Starting the handshake should move immediately to encryption
+ // established and will allow streams to be created.
+ session_->CryptoConnect();
+ EXPECT_TRUE(session_->IsEncryptionEstablished());
+ QuicSpdyClientStream* stream = session_->CreateOutgoingDynamicStream();
+ DCHECK_NE(kCryptoStreamId, stream->id());
+ EXPECT_TRUE(stream != nullptr);
+
+ // Process an "inchoate" REJ from the server which will cause
+ // an inchoate CHLO to be sent and will leave the encryption level
+ // at NONE.
+ CryptoHandshakeMessage rej;
+ CryptoTestUtils::FillInDummyReject(&rej, /* stateless */ false);
+ EXPECT_TRUE(session_->IsEncryptionEstablished());
+ session_->GetCryptoStream()->OnHandshakeMessage(rej);
+ EXPECT_FALSE(session_->IsEncryptionEstablished());
+ EXPECT_EQ(ENCRYPTION_NONE,
+ QuicPacketCreatorPeer::GetEncryptionLevel(
+ QuicConnectionPeer::GetPacketCreator(connection_)));
+ // Verify that no new streams may be created.
+ EXPECT_TRUE(session_->CreateOutgoingDynamicStream() == nullptr);
+ // Verify that no data may be send on existing streams.
+ char data[] = "hello world";
+ struct iovec iov = {data, arraysize(data)};
+ QuicIOVector iovector(&iov, 1, iov.iov_len);
+ QuicConsumedData consumed = session_->WritevData(
+ stream->id(), iovector, 0, false, MAY_FEC_PROTECT, nullptr);
+ EXPECT_FALSE(consumed.fin_consumed);
+ EXPECT_EQ(0u, consumed.bytes_consumed);
+}
+
TEST_P(ToolsQuicClientSessionTest, MaxNumStreams) {
EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber());
diff --git a/chromium/storage/browser/blob/upload_blob_element_reader.cc b/chromium/storage/browser/blob/upload_blob_element_reader.cc
index dd0058f3617..e4d6d4a591d 100644
--- a/chromium/storage/browser/blob/upload_blob_element_reader.cc
+++ b/chromium/storage/browser/blob/upload_blob_element_reader.cc
@@ -4,20 +4,27 @@
#include "storage/browser/blob/upload_blob_element_reader.h"
+#include "base/single_thread_task_runner.h"
#include "net/base/net_errors.h"
#include "storage/browser/blob/blob_data_handle.h"
#include "storage/browser/blob/blob_reader.h"
+#include "storage/browser/fileapi/file_system_context.h"
namespace storage {
UploadBlobElementReader::UploadBlobElementReader(
- scoped_ptr<storage::BlobReader> reader,
- scoped_ptr<BlobDataHandle> handle)
- : reader_(reader.Pass()), handle_(handle.Pass()) {}
+ scoped_ptr<BlobDataHandle> handle,
+ FileSystemContext* file_system_context,
+ base::SingleThreadTaskRunner* file_task_runner)
+ : handle_(handle.Pass()),
+ file_system_context_(file_system_context),
+ file_runner_(file_task_runner) {}
UploadBlobElementReader::~UploadBlobElementReader() {}
int UploadBlobElementReader::Init(const net::CompletionCallback& callback) {
+ reader_ =
+ handle_->CreateReader(file_system_context_.get(), file_runner_.get());
BlobReader::Status status = reader_->CalculateSize(callback);
switch (status) {
case BlobReader::Status::NET_ERROR:
diff --git a/chromium/storage/browser/blob/upload_blob_element_reader.h b/chromium/storage/browser/blob/upload_blob_element_reader.h
index 72b7244a486..47ff90d2cbc 100644
--- a/chromium/storage/browser/blob/upload_blob_element_reader.h
+++ b/chromium/storage/browser/blob/upload_blob_element_reader.h
@@ -6,11 +6,16 @@
#define STORAGE_BROWSER_BLOB_UPLOAD_BLOB_ELEMENT_READER_H_
#include "base/macros.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "net/base/completion_callback.h"
#include "net/base/upload_element_reader.h"
#include "storage/browser/storage_browser_export.h"
+namespace base {
+class SingleThreadTaskRunner;
+}
+
namespace net {
class IOBuffer;
}
@@ -18,6 +23,7 @@ class IOBuffer;
namespace storage {
class BlobDataHandle;
class BlobReader;
+class FileSystemContext;
// This class is a wrapper around the BlobReader to make it conform
// to the net::UploadElementReader interface, and it also holds around the
@@ -25,8 +31,9 @@ class BlobReader;
class STORAGE_EXPORT UploadBlobElementReader
: NON_EXPORTED_BASE(public net::UploadElementReader) {
public:
- UploadBlobElementReader(scoped_ptr<BlobReader> reader,
- scoped_ptr<BlobDataHandle> handle);
+ UploadBlobElementReader(scoped_ptr<BlobDataHandle> handle,
+ FileSystemContext* file_system_context,
+ base::SingleThreadTaskRunner* file_task_runner);
~UploadBlobElementReader() override;
int Init(const net::CompletionCallback& callback) override;
@@ -44,8 +51,10 @@ class STORAGE_EXPORT UploadBlobElementReader
const std::string& uuid() const;
private:
- scoped_ptr<BlobReader> reader_;
scoped_ptr<BlobDataHandle> handle_;
+ scoped_refptr<FileSystemContext> file_system_context_;
+ scoped_refptr<base::SingleThreadTaskRunner> file_runner_;
+ scoped_ptr<BlobReader> reader_;
DISALLOW_COPY_AND_ASSIGN(UploadBlobElementReader);
};
diff --git a/chromium/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp b/chromium/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
index 0f78c2caf47..3eaf984de25 100644
--- a/chromium/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
+++ b/chromium/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
@@ -646,6 +646,7 @@ private:
if (tokens.peek().type() == LeftParenthesisToken) {
CSSParserTokenRange innerRange = tokens.consumeBlock();
tokens.consumeWhitespace();
+ innerRange.consumeWhitespace();
return parseValueExpression(innerRange, depth, result);
}
diff --git a/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.cpp b/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.cpp
index 689d0f44663..26e0a7e0bca 100644
--- a/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.cpp
+++ b/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.cpp
@@ -39,7 +39,7 @@ namespace blink {
PassOwnPtrWillBeRawPtr<MutationObserverInterestGroup> MutationObserverInterestGroup::createIfNeeded(Node& target, MutationObserver::MutationType type, MutationRecordDeliveryOptions oldValueFlag, const QualifiedName* attributeName)
{
ASSERT((type == MutationObserver::Attributes && attributeName) || !attributeName);
- WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions> observers;
+ WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions> observers;
target.getRegisteredMutationObserversOfType(observers, type, attributeName);
if (observers.isEmpty())
return nullptr;
@@ -47,7 +47,7 @@ PassOwnPtrWillBeRawPtr<MutationObserverInterestGroup> MutationObserverInterestGr
return adoptPtrWillBeNoop(new MutationObserverInterestGroup(observers, oldValueFlag));
}
-MutationObserverInterestGroup::MutationObserverInterestGroup(WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationRecordDeliveryOptions oldValueFlag)
+MutationObserverInterestGroup::MutationObserverInterestGroup(WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationRecordDeliveryOptions oldValueFlag)
: m_oldValueFlag(oldValueFlag)
{
ASSERT(!observers.isEmpty());
@@ -68,7 +68,7 @@ void MutationObserverInterestGroup::enqueueMutationRecord(PassRefPtrWillBeRawPtr
RefPtrWillBeRawPtr<MutationRecord> mutation = prpMutation;
RefPtrWillBeRawPtr<MutationRecord> mutationWithNullOldValue = nullptr;
for (auto& iter : m_observers) {
- MutationObserver* observer = iter.key;
+ MutationObserver* observer = iter.key.get();
if (hasOldValue(iter.value)) {
observer->enqueueMutationRecord(mutation);
continue;
diff --git a/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h b/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
index 38ec663497b..3eae6888a55 100644
--- a/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
+++ b/chromium/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
@@ -76,11 +76,11 @@ public:
private:
static PassOwnPtrWillBeRawPtr<MutationObserverInterestGroup> createIfNeeded(Node& target, MutationObserver::MutationType, MutationRecordDeliveryOptions oldValueFlag, const QualifiedName* attributeName = 0);
- MutationObserverInterestGroup(WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationRecordDeliveryOptions oldValueFlag);
+ MutationObserverInterestGroup(WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationRecordDeliveryOptions oldValueFlag);
bool hasOldValue(MutationRecordDeliveryOptions options) { return options & m_oldValueFlag; }
- WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions> m_observers;
+ WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions> m_observers;
MutationRecordDeliveryOptions m_oldValueFlag;
};
diff --git a/chromium/third_party/WebKit/Source/core/dom/Node.cpp b/chromium/third_party/WebKit/Source/core/dom/Node.cpp
index a2a74db4cd0..ee6c89ef6c6 100644
--- a/chromium/third_party/WebKit/Source/core/dom/Node.cpp
+++ b/chromium/third_party/WebKit/Source/core/dom/Node.cpp
@@ -1863,7 +1863,7 @@ WillBeHeapHashSet<RawPtrWillBeMember<MutationObserverRegistration>>* Node::trans
}
template<typename Registry>
-static inline void collectMatchingObserversForMutation(WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, Registry* registry, Node& target, MutationObserver::MutationType type, const QualifiedName* attributeName)
+static inline void collectMatchingObserversForMutation(WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, Registry* registry, Node& target, MutationObserver::MutationType type, const QualifiedName* attributeName)
{
if (!registry)
return;
@@ -1871,14 +1871,14 @@ static inline void collectMatchingObserversForMutation(WillBeHeapHashMap<RawPtrW
for (const auto& registration : *registry) {
if (registration->shouldReceiveMutationFrom(target, type, attributeName)) {
MutationRecordDeliveryOptions deliveryOptions = registration->deliveryOptions();
- WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>::AddResult result = observers.add(&registration->observer(), deliveryOptions);
+ WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>::AddResult result = observers.add(&registration->observer(), deliveryOptions);
if (!result.isNewEntry)
result.storedValue->value |= deliveryOptions;
}
}
}
-void Node::getRegisteredMutationObserversOfType(WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationObserver::MutationType type, const QualifiedName* attributeName)
+void Node::getRegisteredMutationObserversOfType(WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>& observers, MutationObserver::MutationType type, const QualifiedName* attributeName)
{
ASSERT((type == MutationObserver::Attributes && attributeName) || !attributeName);
collectMatchingObserversForMutation(observers, mutationObserverRegistry(), *this, type, attributeName);
diff --git a/chromium/third_party/WebKit/Source/core/dom/Node.h b/chromium/third_party/WebKit/Source/core/dom/Node.h
index c6fcd05a60f..659e07ef6cb 100644
--- a/chromium/third_party/WebKit/Source/core/dom/Node.h
+++ b/chromium/third_party/WebKit/Source/core/dom/Node.h
@@ -641,7 +641,7 @@ public:
EventTargetData* eventTargetData() override;
EventTargetData& ensureEventTargetData() override;
- void getRegisteredMutationObserversOfType(WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>&, MutationObserver::MutationType, const QualifiedName* attributeName);
+ void getRegisteredMutationObserversOfType(WillBeHeapHashMap<RefPtrWillBeMember<MutationObserver>, MutationRecordDeliveryOptions>&, MutationObserver::MutationType, const QualifiedName* attributeName);
void registerMutationObserver(MutationObserver&, MutationObserverOptions, const HashSet<AtomicString>& attributeFilter);
void unregisterMutationObserver(MutationObserverRegistration*);
void registerTransientMutationObserver(MutationObserverRegistration*);
diff --git a/chromium/third_party/WebKit/Source/core/frame/UseCounter.cpp b/chromium/third_party/WebKit/Source/core/frame/UseCounter.cpp
index 044286cd1cb..c71800dc3fb 100644
--- a/chromium/third_party/WebKit/Source/core/frame/UseCounter.cpp
+++ b/chromium/third_party/WebKit/Source/core/frame/UseCounter.cpp
@@ -914,6 +914,9 @@ String UseCounter::deprecationMessage(Feature feature)
case PrefixedMouseEventMovementY:
return replacedBy("webkitMovementY", "movementY");
+ case SVGPathSegDOM:
+ return "SVGPathSeg is deprecated and will be removed in Chrome 48. See https://www.chromestatus.com/feature/5708851034718208.";
+
case SVGSMILElementInDocument:
case SVGSMILAnimationInImageRegardlessOfCache:
return "SVG's SMIL animations (<animate>, <set>, etc.) are deprecated and will be removed. Please use CSS animations or Web animations instead.";
diff --git a/chromium/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp b/chromium/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
index 98e2002a915..2adbdf4ee11 100644
--- a/chromium/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp
@@ -629,7 +629,7 @@ BidiRun* LayoutBlockFlow::computeInlineDirectionPositionsForSegment(RootInlineBo
previousObject = r->m_object;
}
- if (isAfterExpansion && expansionOpportunityCount) {
+ if (isAfterExpansion && expansionOpportunityCount && expansionOpportunities.last()) {
expansionOpportunities.last()--;
expansionOpportunityCount--;
}
diff --git a/chromium/third_party/WebKit/Source/core/layout/LayoutCounter.cpp b/chromium/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
index 8557a15b61d..a0ad70b0c42 100644
--- a/chromium/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
+++ b/chromium/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
@@ -472,8 +472,10 @@ void LayoutCounter::destroyCounterNode(LayoutObject& owner, const AtomicString&
void LayoutCounter::layoutObjectSubtreeWillBeDetached(LayoutObject* layoutObject)
{
ASSERT(layoutObject->view());
- if (!layoutObject->view()->hasLayoutCounters())
+ // View should never be non-zero. crbug.com/546939
+ if (!layoutObject->view() || !layoutObject->view()->hasLayoutCounters())
return;
+
LayoutObject* currentLayoutObject = layoutObject->lastLeafChild();
if (!currentLayoutObject)
currentLayoutObject = layoutObject;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathElement.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathElement.idl
index 80c852f3253..00f6471b61d 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathElement.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathElement.idl
@@ -36,53 +36,53 @@
SVGPoint getPointAtLength(float distance);
unsigned long getPathSegAtLength(float distance);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegClosePath createSVGPathSegClosePath();
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegClosePath createSVGPathSegClosePath();
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(float x, float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegMovetoRel createSVGPathSegMovetoRel(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegMovetoRel createSVGPathSegMovetoRel(float x, float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(float x, float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoRel createSVGPathSegLinetoRel(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoRel createSVGPathSegLinetoRel(float x, float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(
float x, float y, float x1, float y1, float x2, float y2);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(
float x, float y, float x1, float y1, float x2, float y2);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(
float x, float y, float x1, float y1);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(
float x, float y, float x1, float y1);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegArcAbs createSVGPathSegArcAbs(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegArcAbs createSVGPathSegArcAbs(
float x, float y, float r1, float r2,
float angle, boolean largeArcFlag, boolean sweepFlag);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegArcRel createSVGPathSegArcRel(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegArcRel createSVGPathSegArcRel(
float x, float y, float r1, float r2,
float angle, boolean largeArcFlag, boolean sweepFlag);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(float x);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(float x);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(float x);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(float x);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(
float x, float y, float x2, float y2);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(
float x, float y, float x2, float y2);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y);
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y);
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y);
// TODO(philipj): pathSegList and animatedPathSegList should be on the
// SVGAnimatedPathData interface which SVGPathElement should implement:
// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGAnimatedPathData
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList pathSegList;
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedPathSegList;
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] readonly attribute SVGPathSegList pathSegList;
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedPathSegList;
// TODO(philipj): The following was part of SVG 1.1:
// http://www.w3.org/TR/SVG11/paths.html#InterfaceSVGAnimatedPathData
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList normalizedPathSegList;
- [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedNormalizedPathSegList;
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] readonly attribute SVGPathSegList normalizedPathSegList;
+ [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedNormalizedPathSegList;
};
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSeg.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSeg.idl
index b28dd7ec07c..99317e5c0d0 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSeg.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSeg.idl
@@ -29,7 +29,7 @@
[
DependentLifetime,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
WillBeGarbageCollected,
] interface SVGPathSeg {
// Path Segment Types
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcAbs.idl
index d530ba59dce..0751466f105 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegArcAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcRel.idl
index aa75b5df315..310d9b2e9d9 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegArcRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegArcRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicAbs.idl
index 272dbbae04f..b0973ebb910 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoCubicAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicRel.idl
index c690d856dbe..114799372e7 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoCubicRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
index a7085c140a4..857452f339d 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoCubicSmoothAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
index b3a5329b1bc..25bc9506c8a 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoCubicSmoothRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
index 812f2c6f8db..b82e3126c49 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoQuadraticAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticRel.idl
index 8348889482e..933e21fbf15 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoQuadraticRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
index b264f8caaf7..8121642fa77 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoQuadraticSmoothAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
index a9ad774f03d..34d615e18ea 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegCurvetoQuadraticSmoothRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoAbs.idl
index 0a69c5069e8..b4dc45ee81f 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalAbs.idl
index 479b068dfd5..be0f5cf723f 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoHorizontalAbs : SVGPathSeg {
attribute float x;
};
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalRel.idl
index c9ececfa3b0..cc6f72134d1 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoHorizontalRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoHorizontalRel : SVGPathSeg {
attribute float x;
};
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoRel.idl
index 684dfe5816b..0f9d236057f 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalAbs.idl
index 14111203683..10ad5106484 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoVerticalAbs : SVGPathSeg {
attribute float y;
};
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalRel.idl
index f7acc5ead9e..b7fba277697 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegLinetoVerticalRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegLinetoVerticalRel : SVGPathSeg {
attribute float y;
};
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegList.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegList.idl
index 20afb094543..94afd522ceb 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegList.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegList.idl
@@ -31,7 +31,7 @@
SetWrapperReferenceTo(SVGElement contextElement),
ImplementedAs=SVGPathSegListTearOff,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
WillBeGarbageCollected,
] interface SVGPathSegList {
readonly attribute unsigned long length;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoAbs.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoAbs.idl
index 5b904457c58..6e70bb4dc3e 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoAbs.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoAbs.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegMovetoAbs : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoRel.idl b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoRel.idl
index a45f98728c9..800ef8c4030 100644
--- a/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoRel.idl
+++ b/chromium/third_party/WebKit/Source/core/svg/SVGPathSegMovetoRel.idl
@@ -29,7 +29,7 @@
[
TypeChecking=Interface,
RuntimeEnabled=SVG1DOM,
- MeasureAs=SVGPathSegDOM,
+ DeprecateAs=SVGPathSegDOM,
] interface SVGPathSegMovetoRel : SVGPathSeg {
attribute float x;
attribute float y;
diff --git a/chromium/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/chromium/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index 5c1e30aecf2..0797ab239da 100644
--- a/chromium/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/chromium/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -104,10 +104,6 @@ WebInspector.NetworkLogView = function(filterBar, progressBarContainer, networkL
WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this);
WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestUpdated, this._onRequestUpdated, this);
WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestFinished, this._onRequestUpdated, this);
-
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
- WebInspector.targetManager.addModelListener(WebInspector.ResourceTreeModel, WebInspector.ResourceTreeModel.EventTypes.DOMContentLoaded, this._domContentLoadedEventFired, this);
}
WebInspector.NetworkLogView._isFilteredOutSymbol = Symbol("isFilteredOut");
@@ -211,6 +207,11 @@ WebInspector.NetworkLogView.prototype = {
*/
targetAdded: function(target)
{
+ if (!target.parentTarget()) {
+ target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
+ target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
+ target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.DOMContentLoaded, this._domContentLoadedEventFired, this);
+ }
target.networkLog.requests().forEach(this._appendRequest.bind(this));
},
@@ -220,6 +221,11 @@ WebInspector.NetworkLogView.prototype = {
*/
targetRemoved: function(target)
{
+ if (!target.parentTarget()) {
+ target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
+ target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
+ target.resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.DOMContentLoaded, this._domContentLoadedEventFired, this);
+ }
},
/**
diff --git a/chromium/third_party/WebKit/Source/modules/accessibility/AXObject.h b/chromium/third_party/WebKit/Source/modules/accessibility/AXObject.h
index 28138ed7eca..b93ba2262c8 100644
--- a/chromium/third_party/WebKit/Source/modules/accessibility/AXObject.h
+++ b/chromium/third_party/WebKit/Source/modules/accessibility/AXObject.h
@@ -421,7 +421,6 @@ public:
typedef HeapVector<Member<AXObject>> AccessibilityChildrenVector;
struct AXRange {
- ALLOW_ONLY_INLINE_ALLOCATION();
// The deepest descendant in which the range starts.
// (nullptr means the current object.)
Persistent<AXObject> anchorObject;
diff --git a/chromium/third_party/WebKit/Source/modules/accessibility/testing/InternalsAccessibility.h b/chromium/third_party/WebKit/Source/modules/accessibility/testing/InternalsAccessibility.h
index 5deaee199ff..1dec1e845a7 100644
--- a/chromium/third_party/WebKit/Source/modules/accessibility/testing/InternalsAccessibility.h
+++ b/chromium/third_party/WebKit/Source/modules/accessibility/testing/InternalsAccessibility.h
@@ -5,14 +5,11 @@
#ifndef InternalsAccessibility_h
#define InternalsAccessibility_h
-#include "wtf/Allocator.h"
-
namespace blink {
class Internals;
class InternalsAccessibility {
- STATIC_ONLY(InternalsAccessibility);
public:
static unsigned numberOfLiveAXObjects(Internals&);
};
diff --git a/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerCallbacks.h b/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerCallbacks.h
index a0591a37817..a4a3baa75aa 100644
--- a/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerCallbacks.h
+++ b/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerCallbacks.h
@@ -11,9 +11,6 @@
namespace blink {
class AppBannerCallbacks : public WebAppBannerCallbacks {
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(AppBannerCallbacks);
public:
explicit AppBannerCallbacks(UserChoiceProperty*);
~AppBannerCallbacks() override = default;
diff --git a/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerController.h b/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerController.h
index 4c53291ba77..da4ccf80e73 100644
--- a/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerController.h
+++ b/chromium/third_party/WebKit/Source/modules/app_banner/AppBannerController.h
@@ -6,7 +6,6 @@
#define AppBannerController_h
#include "modules/ModulesExport.h"
-#include "wtf/Allocator.h"
#include "wtf/Noncopyable.h"
namespace blink {
@@ -20,9 +19,13 @@ template <typename T> class WebVector;
// FIXME: unless userChoice ends up implemented, this class should not exist and
// a regular static method could be used instead.
class MODULES_EXPORT AppBannerController final {
- STATIC_ONLY(AppBannerController);
+ WTF_MAKE_NONCOPYABLE(AppBannerController);
public:
static void willShowInstallBannerPrompt(int requestId, WebAppBannerClient*, LocalFrame*, const WebVector<WebString>& platforms, WebAppBannerPromptReply*);
+
+private:
+ AppBannerController() = delete;
+ ~AppBannerController() = delete;
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h b/chromium/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h
index a6a599f8393..b9c5fa9cd1b 100644
--- a/chromium/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h
+++ b/chromium/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h
@@ -19,7 +19,6 @@ class ScriptState;
class HTMLMediaElementAudioOutputDevice final : public NoBaseWillBeGarbageCollectedFinalized<HTMLMediaElementAudioOutputDevice>, public WillBeHeapSupplement<HTMLMediaElement> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElementAudioOutputDevice);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(HTMLMediaElementAudioOutputDevice);
public:
DECLARE_VIRTUAL_TRACE();
static String sinkId(HTMLMediaElement&);
diff --git a/chromium/third_party/WebKit/Source/modules/audio_output_devices/SetSinkIdCallbacks.h b/chromium/third_party/WebKit/Source/modules/audio_output_devices/SetSinkIdCallbacks.h
index deb29178f26..0a3572a4186 100644
--- a/chromium/third_party/WebKit/Source/modules/audio_output_devices/SetSinkIdCallbacks.h
+++ b/chromium/third_party/WebKit/Source/modules/audio_output_devices/SetSinkIdCallbacks.h
@@ -18,9 +18,6 @@ class ScriptPromiseResolver;
struct WebSetSinkIdError;
class SetSinkIdCallbacks final : public WebCallbacks<void, WebSetSinkIdError*> {
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(SetSinkIdCallbacks);
WTF_MAKE_NONCOPYABLE(SetSinkIdCallbacks);
public:
SetSinkIdCallbacks(ScriptPromiseResolver*, HTMLMediaElement&, const String& sinkId);
diff --git a/chromium/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.h b/chromium/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.h
index 54837013b61..23a5bbcaaa9 100644
--- a/chromium/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.h
+++ b/chromium/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.h
@@ -27,9 +27,6 @@ class WebString;
// will pass it to the SyncRegistration.
class SyncRegistrationCallbacks final : public WebSyncRegistrationCallbacks {
WTF_MAKE_NONCOPYABLE(SyncRegistrationCallbacks);
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(SyncRegistrationCallbacks);
public:
SyncRegistrationCallbacks(ScriptPromiseResolver*, ServiceWorkerRegistration*);
~SyncRegistrationCallbacks() override;
@@ -49,9 +46,6 @@ private:
// SyncProvider.
class SyncNotifyWhenDoneCallbacks final : public WebSyncNotifyWhenDoneCallbacks {
WTF_MAKE_NONCOPYABLE(SyncNotifyWhenDoneCallbacks);
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(SyncNotifyWhenDoneCallbacks);
public:
SyncNotifyWhenDoneCallbacks(ScriptPromiseResolver*, ServiceWorkerRegistration*);
~SyncNotifyWhenDoneCallbacks() override;
@@ -71,9 +65,6 @@ private:
// SyncProvider.
class SyncUnregistrationCallbacks final : public WebSyncUnregistrationCallbacks {
WTF_MAKE_NONCOPYABLE(SyncUnregistrationCallbacks);
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(SyncUnregistrationCallbacks);
public:
SyncUnregistrationCallbacks(ScriptPromiseResolver*, ServiceWorkerRegistration*);
~SyncUnregistrationCallbacks() override;
@@ -92,9 +83,6 @@ private:
// will pass it to the SyncRegistration.
class SyncGetRegistrationsCallbacks final : public WebSyncGetRegistrationsCallbacks {
WTF_MAKE_NONCOPYABLE(SyncGetRegistrationsCallbacks);
- // FIXME(tasak): when making public/platform classes to use PartitionAlloc,
- // the following macro should be moved to WebCallbacks defined in public/platformWebCallbacks.h.
- WTF_MAKE_FAST_ALLOCATED(SyncGetRegistrationsCallbacks);
public:
SyncGetRegistrationsCallbacks(ScriptPromiseResolver*, ServiceWorkerRegistration*);
~SyncGetRegistrationsCallbacks() override;
@@ -112,7 +100,6 @@ private:
// depending on the permission status passed to the callback.
class SyncGetPermissionStatusCallbacks final : public WebSyncGetPermissionStatusCallbacks {
WTF_MAKE_NONCOPYABLE(SyncGetPermissionStatusCallbacks);
- WTF_MAKE_FAST_ALLOCATED(SyncGetPermissionStatusCallbacks);
public:
SyncGetPermissionStatusCallbacks(ScriptPromiseResolver*, ServiceWorkerRegistration*);
~SyncGetPermissionStatusCallbacks() override;
diff --git a/chromium/third_party/WebKit/Source/modules/background_sync/SyncError.h b/chromium/third_party/WebKit/Source/modules/background_sync/SyncError.h
index b4f9d949d2d..9b902293fdc 100644
--- a/chromium/third_party/WebKit/Source/modules/background_sync/SyncError.h
+++ b/chromium/third_party/WebKit/Source/modules/background_sync/SyncError.h
@@ -8,16 +8,18 @@
#include "core/dom/DOMException.h"
#include "platform/heap/Handle.h"
#include "public/platform/modules/background_sync/WebSyncError.h"
-#include "wtf/Allocator.h"
namespace blink {
class ScriptPromiseResolver;
class SyncError {
- STATIC_ONLY(SyncError);
+ WTF_MAKE_NONCOPYABLE(SyncError);
public:
static DOMException* take(ScriptPromiseResolver*, const WebSyncError&);
+
+private:
+ SyncError() = delete;
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h b/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
index 6fcf7de1954..91286ca6a54 100644
--- a/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
+++ b/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothError.h
@@ -7,7 +7,6 @@
#include "platform/heap/Handle.h"
#include "public/platform/modules/bluetooth/WebBluetoothError.h"
-#include "wtf/Allocator.h"
namespace blink {
@@ -17,11 +16,14 @@ class ScriptPromiseResolver;
// BluetoothError is used with CallbackPromiseAdapter to receive
// WebBluetoothError responses. See CallbackPromiseAdapter class comments.
class BluetoothError {
- STATIC_ONLY(BluetoothError);
+ WTF_MAKE_NONCOPYABLE(BluetoothError);
public:
// Interface required by CallbackPromiseAdapter:
using WebType = const WebBluetoothError&;
static DOMException* take(ScriptPromiseResolver*, const WebBluetoothError&);
+
+private:
+ BluetoothError() = delete;
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothSupplement.h b/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothSupplement.h
index 609c022c272..5b35c2e5052 100644
--- a/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothSupplement.h
+++ b/chromium/third_party/WebKit/Source/modules/bluetooth/BluetoothSupplement.h
@@ -16,7 +16,6 @@ class WebBluetooth;
// code in modules/.
class BLINK_EXPORT BluetoothSupplement : public NoBaseWillBeGarbageCollected<BluetoothSupplement>, public WillBeHeapSupplement<LocalFrame> {
WTF_MAKE_NONCOPYABLE(BluetoothSupplement);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(BluetoothSupplement);
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(BluetoothSupplement);
public:
diff --git a/chromium/third_party/WebKit/Source/modules/bluetooth/ConvertWebVectorToArrayBuffer.h b/chromium/third_party/WebKit/Source/modules/bluetooth/ConvertWebVectorToArrayBuffer.h
index 3e3643d25c1..95fa16efe12 100644
--- a/chromium/third_party/WebKit/Source/modules/bluetooth/ConvertWebVectorToArrayBuffer.h
+++ b/chromium/third_party/WebKit/Source/modules/bluetooth/ConvertWebVectorToArrayBuffer.h
@@ -16,11 +16,14 @@ class ScriptPromiseResolver;
// ConvertWebVectorToArrayBuffer is used with CallbackPromiseAdapter to receive
// WebVector responses. See CallbackPromiseAdapter class comments.
class ConvertWebVectorToArrayBuffer {
- STATIC_ONLY(ConvertWebVectorToArrayBuffer);
+ WTF_MAKE_NONCOPYABLE(ConvertWebVectorToArrayBuffer);
public:
// Interface required by CallbackPromiseAdapter:
using WebType = const WebVector<uint8_t>&;
static PassRefPtr<DOMArrayBuffer> take(ScriptPromiseResolver*, const WebVector<uint8_t>&);
+
+private:
+ ConvertWebVectorToArrayBuffer() = delete;
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/cachestorage/CacheStorageError.h b/chromium/third_party/WebKit/Source/modules/cachestorage/CacheStorageError.h
index 2900d6b19f2..d915907e1d4 100644
--- a/chromium/third_party/WebKit/Source/modules/cachestorage/CacheStorageError.h
+++ b/chromium/third_party/WebKit/Source/modules/cachestorage/CacheStorageError.h
@@ -15,7 +15,7 @@ class DOMException;
class ScriptPromiseResolver;
class CacheStorageError {
- STATIC_ONLY(CacheStorageError);
+ WTF_MAKE_NONCOPYABLE(CacheStorageError);
public:
// For CallbackPromiseAdapter. Ownership of a given error is not
// transferred.
diff --git a/chromium/third_party/WebKit/Source/modules/cachestorage/GlobalCacheStorage.h b/chromium/third_party/WebKit/Source/modules/cachestorage/GlobalCacheStorage.h
index 85d8b7ac75a..a00b7b17cbb 100644
--- a/chromium/third_party/WebKit/Source/modules/cachestorage/GlobalCacheStorage.h
+++ b/chromium/third_party/WebKit/Source/modules/cachestorage/GlobalCacheStorage.h
@@ -5,8 +5,6 @@
#ifndef GlobalCacheStorage_h
#define GlobalCacheStorage_h
-#include "wtf/Allocator.h"
-
namespace blink {
class CacheStorage;
@@ -15,7 +13,6 @@ class ExceptionState;
class WorkerGlobalScope;
class GlobalCacheStorage {
- STATIC_ONLY(GlobalCacheStorage);
public:
static CacheStorage* caches(DOMWindow&, ExceptionState&);
static CacheStorage* caches(WorkerGlobalScope&, ExceptionState&);
diff --git a/chromium/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.h b/chromium/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.h
index 551c1d0c706..628f3cd0e7e 100644
--- a/chromium/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.h
+++ b/chromium/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.h
@@ -19,7 +19,6 @@ class Element;
class CanvasRenderingContext2DState final : public NoBaseWillBeGarbageCollectedFinalized<CanvasRenderingContext2DState>, public CSSFontSelectorClient {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CanvasRenderingContext2DState);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(CanvasRenderingContext2DState);
public:
static PassOwnPtrWillBeRawPtr<CanvasRenderingContext2DState> create()
{
diff --git a/chromium/third_party/WebKit/Source/modules/canvas2d/ClipList.h b/chromium/third_party/WebKit/Source/modules/canvas2d/ClipList.h
index 9301b977415..b50c208349f 100644
--- a/chromium/third_party/WebKit/Source/modules/canvas2d/ClipList.h
+++ b/chromium/third_party/WebKit/Source/modules/canvas2d/ClipList.h
@@ -6,7 +6,6 @@
#define ClipList_h
#include "platform/graphics/GraphicsTypes.h"
-#include "wtf/Allocator.h"
#include "wtf/Vector.h"
class SkCanvas;
@@ -17,7 +16,6 @@ namespace blink {
class AffineTransform;
class ClipList {
- DISALLOW_ALLOCATION();
public:
ClipList() { }
ClipList(const ClipList&);
diff --git a/chromium/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.h b/chromium/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.h
index 336ee7c9243..0ae7efad8bd 100644
--- a/chromium/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.h
+++ b/chromium/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.h
@@ -5,7 +5,6 @@
#ifndef EventHitRegion_h
#define EventHitRegion_h
-#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
namespace blink {
@@ -14,7 +13,6 @@ class HTMLCanvasElement;
class LayoutPoint;
class EventHitRegion {
- STATIC_ONLY(EventHitRegion);
public:
static String regionIdFromAbsoluteLocation(HTMLCanvasElement&, const LayoutPoint&);
};
diff --git a/chromium/third_party/WebKit/Source/modules/canvas2d/MouseEventHitRegion.h b/chromium/third_party/WebKit/Source/modules/canvas2d/MouseEventHitRegion.h
index 2f213164d0a..d9a3e9c49a6 100644
--- a/chromium/third_party/WebKit/Source/modules/canvas2d/MouseEventHitRegion.h
+++ b/chromium/third_party/WebKit/Source/modules/canvas2d/MouseEventHitRegion.h
@@ -6,14 +6,12 @@
#define MouseEventHitRegion_h
#include "modules/canvas2d/EventHitRegion.h"
-#include "wtf/Allocator.h"
namespace blink {
class MouseEvent;
class MouseEventHitRegion : public EventHitRegion {
- STATIC_ONLY(MouseEventHitRegion);
public:
static String region(MouseEvent&);
};
diff --git a/chromium/third_party/WebKit/Source/modules/canvas2d/TouchHitRegion.h b/chromium/third_party/WebKit/Source/modules/canvas2d/TouchHitRegion.h
index 42eb2ec08c2..7730e3c1d2a 100644
--- a/chromium/third_party/WebKit/Source/modules/canvas2d/TouchHitRegion.h
+++ b/chromium/third_party/WebKit/Source/modules/canvas2d/TouchHitRegion.h
@@ -6,14 +6,12 @@
#define TouchHitRegion_h
#include "modules/canvas2d/EventHitRegion.h"
-#include "wtf/Allocator.h"
namespace blink {
class Touch;
class TouchHitRegion : public EventHitRegion {
- STATIC_ONLY(TouchHitRegion);
public:
static String region(Touch&);
};
diff --git a/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManager.h b/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManager.h
index 325219d2a9c..5a5d5436077 100644
--- a/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManager.h
+++ b/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerManager.h
@@ -18,7 +18,6 @@ class WebThread;
class WebThreadSupportingGC;
class MODULES_EXPORT CompositorWorkerManager final {
- WTF_MAKE_FAST_ALLOCATED(CompositorWorkerManager);
public:
static void initialize();
static void shutdown();
diff --git a/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h b/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
index eac8c44777f..f61511e5b87 100644
--- a/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
+++ b/chromium/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
@@ -6,12 +6,10 @@
#define CompositorWorkerMessagingProxy_h
#include "core/workers/WorkerMessagingProxy.h"
-#include "wtf/FastAllocBase.h"
namespace blink {
class CompositorWorkerMessagingProxy final : public WorkerMessagingProxy {
- WTF_MAKE_FAST_ALLOCATED(CompositorWorkerMessagingProxy);
public:
explicit CompositorWorkerMessagingProxy(InProcessWorkerBase*);
diff --git a/chromium/third_party/WebKit/Source/modules/credentialmanager/CredentialManagerClient.h b/chromium/third_party/WebKit/Source/modules/credentialmanager/CredentialManagerClient.h
index 9a5e4b97ab2..a9117806636 100644
--- a/chromium/third_party/WebKit/Source/modules/credentialmanager/CredentialManagerClient.h
+++ b/chromium/third_party/WebKit/Source/modules/credentialmanager/CredentialManagerClient.h
@@ -22,7 +22,6 @@ class WebURL;
// WebCredentialManagerClient's methods to make them visible to the bindings code.
class MODULES_EXPORT CredentialManagerClient final : public NoBaseWillBeGarbageCollectedFinalized<CredentialManagerClient>, public WillBeHeapSupplement<Page> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CredentialManagerClient);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(CredentialManagerClient);
public:
explicit CredentialManagerClient(WebCredentialManagerClient*);
virtual ~CredentialManagerClient();
diff --git a/chromium/third_party/WebKit/Source/modules/crypto/DOMWindowCrypto.h b/chromium/third_party/WebKit/Source/modules/crypto/DOMWindowCrypto.h
index 056ff05367c..c5f9f2223ca 100644
--- a/chromium/third_party/WebKit/Source/modules/crypto/DOMWindowCrypto.h
+++ b/chromium/third_party/WebKit/Source/modules/crypto/DOMWindowCrypto.h
@@ -43,7 +43,6 @@ class DOMWindow;
class DOMWindowCrypto final : public NoBaseWillBeGarbageCollected<DOMWindowCrypto>, public WillBeHeapSupplement<LocalDOMWindow>, public DOMWindowProperty {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(DOMWindowCrypto);
DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(DOMWindowCrypto);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(DOMWindowCrypto);
public:
static DOMWindowCrypto& from(LocalDOMWindow&);
static Crypto* crypto(DOMWindow&);
diff --git a/chromium/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.h b/chromium/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.h
index 2da151bed3a..43eba6326ab 100644
--- a/chromium/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.h
+++ b/chromium/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.h
@@ -36,7 +36,6 @@
#include "public/platform/WebCrypto.h"
#include "public/platform/WebCryptoAlgorithm.h"
#include "public/platform/WebString.h"
-#include "wtf/Allocator.h"
#include "wtf/Assertions.h"
#include "wtf/Forward.h"
@@ -45,7 +44,6 @@ namespace blink {
class Dictionary;
struct AlgorithmError {
- STACK_ALLOCATED();
WebCryptoErrorType errorType;
WebString errorDetails;
};
diff --git a/chromium/third_party/WebKit/Source/modules/crypto/WorkerGlobalScopeCrypto.h b/chromium/third_party/WebKit/Source/modules/crypto/WorkerGlobalScopeCrypto.h
index 98b0d4f9e21..eeaa4ef1c3e 100644
--- a/chromium/third_party/WebKit/Source/modules/crypto/WorkerGlobalScopeCrypto.h
+++ b/chromium/third_party/WebKit/Source/modules/crypto/WorkerGlobalScopeCrypto.h
@@ -42,7 +42,6 @@ class WorkerGlobalScope;
class WorkerGlobalScopeCrypto final : public NoBaseWillBeGarbageCollected<WorkerGlobalScopeCrypto>, public WillBeHeapSupplement<WorkerGlobalScope> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WorkerGlobalScopeCrypto);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(WorkerGlobalScopeCrypto);
public:
static WorkerGlobalScopeCrypto& from(WillBeHeapSupplementable<WorkerGlobalScope>&);
static Crypto* crypto(WillBeHeapSupplementable<WorkerGlobalScope>&);
diff --git a/chromium/third_party/WebKit/Source/modules/encryptedmedia/EncryptedMediaUtils.h b/chromium/third_party/WebKit/Source/modules/encryptedmedia/EncryptedMediaUtils.h
index 64dc3369418..fb7cbad1e69 100644
--- a/chromium/third_party/WebKit/Source/modules/encryptedmedia/EncryptedMediaUtils.h
+++ b/chromium/third_party/WebKit/Source/modules/encryptedmedia/EncryptedMediaUtils.h
@@ -6,19 +6,20 @@
#define EncryptedMediaUtils_h
#include "public/platform/WebEncryptedMediaTypes.h"
-#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
namespace blink {
class EncryptedMediaUtils {
- STATIC_ONLY(EncryptedMediaUtils);
public:
static WebEncryptedMediaInitDataType convertToInitDataType(const String& initDataType);
static String convertFromInitDataType(WebEncryptedMediaInitDataType);
static WebEncryptedMediaSessionType convertToSessionType(const String& sessionType);
static String convertFromSessionType(WebEncryptedMediaSessionType);
+
+private:
+ EncryptedMediaUtils();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h b/chromium/third_party/WebKit/Source/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h
index 4000da94877..cafeec83d62 100644
--- a/chromium/third_party/WebKit/Source/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h
+++ b/chromium/third_party/WebKit/Source/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h
@@ -26,7 +26,6 @@ class WebMediaPlayer;
class MODULES_EXPORT HTMLMediaElementEncryptedMedia final : public NoBaseWillBeGarbageCollectedFinalized<HTMLMediaElementEncryptedMedia>, public WillBeHeapSupplement<HTMLMediaElement>, public WebMediaPlayerEncryptedMediaClient {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElementEncryptedMedia);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(HTMLMediaElementEncryptedMedia);
public:
// encrypted media extensions (v0.1b)
static void webkitGenerateKeyRequest(HTMLMediaElement&, const String& keySystem, PassRefPtr<DOMUint8Array> initData, ExceptionState&);
diff --git a/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysClient.h b/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysClient.h
index beae1d1f977..a5eac0f3144 100644
--- a/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysClient.h
+++ b/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysClient.h
@@ -5,15 +5,12 @@
#ifndef MediaKeysClient_h
#define MediaKeysClient_h
-#include "wtf/FastAllocBase.h"
-
namespace blink {
class ExecutionContext;
class WebEncryptedMediaClient;
class MediaKeysClient {
- WTF_MAKE_FAST_ALLOCATED(MediaKeysClient);
public:
virtual WebEncryptedMediaClient* encryptedMediaClient(ExecutionContext*) = 0;
diff --git a/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysController.h b/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysController.h
index 0440082533b..450a6d0e8d7 100644
--- a/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysController.h
+++ b/chromium/third_party/WebKit/Source/modules/encryptedmedia/MediaKeysController.h
@@ -16,7 +16,6 @@ class WebEncryptedMediaClient;
class MODULES_EXPORT MediaKeysController final : public NoBaseWillBeGarbageCollected<MediaKeysController>, public WillBeHeapSupplement<Page> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaKeysController);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(MediaKeysController);
public:
WebEncryptedMediaClient* encryptedMediaClient(ExecutionContext*);
diff --git a/chromium/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h b/chromium/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h
index 96ecf146eb6..a1c0505e3a9 100644
--- a/chromium/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h
+++ b/chromium/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h
@@ -15,13 +15,15 @@
namespace blink {
class NavigatorRequestMediaKeySystemAccess {
- STATIC_ONLY(NavigatorRequestMediaKeySystemAccess);
public:
static ScriptPromise requestMediaKeySystemAccess(
ScriptState*,
Navigator&,
const String& keySystem,
const HeapVector<MediaKeySystemConfiguration>& supportedConfigurations);
+
+private:
+ NavigatorRequestMediaKeySystemAccess();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h b/chromium/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
index 94d05dc048a..be6a2e4c358 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
@@ -8,7 +8,6 @@
#include "modules/ModulesExport.h"
#include "platform/heap/Handle.h"
#include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/Allocator.h"
#include "wtf/OwnPtr.h"
#include "wtf/PassOwnPtr.h"
#include "wtf/RefPtr.h"
@@ -22,7 +21,6 @@ class WebThread;
// the handle by using |update| method.
class MODULES_EXPORT CompositeDataConsumerHandle final : public WebDataConsumerHandle {
WTF_MAKE_NONCOPYABLE(CompositeDataConsumerHandle);
- WTF_MAKE_FAST_ALLOCATED(CompositeDataConsumerHandle);
class Context;
public:
// An Updater is bound to the creator thread.
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
index 559d41db19f..ea20c447d63 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
@@ -34,10 +34,8 @@
namespace blink {
class DataConsumerHandleTestUtil {
- STATIC_ONLY(DataConsumerHandleTestUtil);
public:
class NoopClient final : public WebDataConsumerHandle::Client {
- DISALLOW_ALLOCATION();
public:
void didGetReadable() override { }
};
@@ -46,7 +44,6 @@ public:
// additional objects based on the given policy. The constructor and the
// destructor blocks during the setup and the teardown.
class Thread final {
- WTF_MAKE_FAST_ALLOCATED(Thread);
public:
// Initialization policy of a thread.
enum InitializationPolicy {
@@ -157,7 +154,6 @@ public:
// The reading/updating threads are alive while ThreadHolder is alive.
class ThreadHolder {
- DISALLOW_ALLOCATION();
public:
ThreadHolder(ThreadingTestBase* test)
: m_context(test->m_context)
@@ -181,7 +177,6 @@ public:
};
class ReaderImpl final : public WebDataConsumerHandle::Reader {
- WTF_MAKE_FAST_ALLOCATED(ReaderImpl);
public:
ReaderImpl(const String& name, PassRefPtr<Context> context) : m_name(name.isolatedCopy()), m_context(context)
{
@@ -200,7 +195,6 @@ public:
RefPtr<Context> m_context;
};
class DataConsumerHandle final : public WebDataConsumerHandle {
- WTF_MAKE_FAST_ALLOCATED(DataConsumerHandle);
public:
static PassOwnPtr<WebDataConsumerHandle> create(const String& name, PassRefPtr<Context> context)
{
@@ -362,7 +356,6 @@ public:
};
class Command final {
- ALLOW_ONLY_INLINE_ALLOCATION();
public:
enum Name {
Data,
@@ -388,7 +381,6 @@ public:
// ReplayingHandle stores commands via |add| and replays the stored commends when read.
class ReplayingHandle final : public WebDataConsumerHandle {
- WTF_MAKE_FAST_ALLOCATED(ReplayingHandle);
public:
static PassOwnPtr<ReplayingHandle> create() { return adoptPtr(new ReplayingHandle()); }
~ReplayingHandle();
@@ -443,7 +435,6 @@ public:
};
class HandleReadResult final {
- WTF_MAKE_FAST_ALLOCATED(HandleReadResult);
public:
HandleReadResult(WebDataConsumerHandle::Result result, const Vector<char>& data) : m_result(result), m_data(data) { }
WebDataConsumerHandle::Result result() const { return m_result; }
@@ -458,7 +449,6 @@ public:
// Reader::read on the thread on which it is created. When reading is done
// or failed, it calls the given callback with the result.
class HandleReader final : public WebDataConsumerHandle::Client {
- WTF_MAKE_FAST_ALLOCATED(HandleReader);
public:
using OnFinishedReading = WTF::Function<void(PassOwnPtr<HandleReadResult>)>;
@@ -476,7 +466,6 @@ public:
// HandleTwoPhaseReader does the same as HandleReader, but it uses
// |beginRead| / |endRead| instead of |read|.
class HandleTwoPhaseReader final : public WebDataConsumerHandle::Client {
- WTF_MAKE_FAST_ALLOCATED(HandleTwoPhaseReader);
public:
using OnFinishedReading = WTF::Function<void(PassOwnPtr<HandleReadResult>)>;
@@ -495,7 +484,6 @@ public:
// where T is one of HandleReader and HandleTwophaseReader.
template <typename T>
class HandleReaderRunner final {
- STACK_ALLOCATED();
public:
explicit HandleReaderRunner(PassOwnPtr<WebDataConsumerHandle> handle)
: m_thread(adoptPtr(new Thread("reading thread")))
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
index 229aa5b7a18..1cd84803b2d 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
@@ -8,7 +8,6 @@
#include "modules/ModulesExport.h"
#include "modules/fetch/FetchDataConsumerHandle.h"
#include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/Allocator.h"
#include "wtf/PassOwnPtr.h"
#include "wtf/WeakPtr.h"
@@ -34,7 +33,6 @@ MODULES_EXPORT PassOwnPtr<FetchDataConsumerHandle> createFetchDataConsumerHandle
// NotifyOnReaderCreationHelper must be owned by a reader and
// |client| must be the client of the reader.
class NotifyOnReaderCreationHelper final {
- DISALLOW_ALLOCATION();
public:
NotifyOnReaderCreationHelper(WebDataConsumerHandle::Client* /* client */);
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
index 30a5782f95c..eabd53b4a05 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
@@ -8,7 +8,6 @@
#include "modules/ModulesExport.h"
#include "modules/fetch/FetchDataConsumerHandle.h"
#include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/Allocator.h"
#include "wtf/OwnPtr.h"
#include "wtf/PassOwnPtr.h"
@@ -17,7 +16,6 @@ namespace blink {
class ExecutionContext;
class MODULES_EXPORT DataConsumerTee {
- STATIC_ONLY(DataConsumerTee);
public:
// Create two handles from one. |src| must be a valid unlocked handle.
static void create(ExecutionContext*, PassOwnPtr<WebDataConsumerHandle> src, OwnPtr<WebDataConsumerHandle>* dest1, OwnPtr<WebDataConsumerHandle>* dest2);
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h b/chromium/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
index 6ff0b5f09d3..069970f6974 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
@@ -21,10 +21,8 @@ namespace blink {
// to create a reference cycle. When an client is garbage collected, making
// the client own the handle is the right way.
class MODULES_EXPORT FetchDataConsumerHandle : public WebDataConsumerHandle {
- WTF_MAKE_FAST_ALLOCATED(FetchDataConsumerHandle);
public:
class Reader : public WebDataConsumerHandle::Reader {
- WTF_MAKE_FAST_ALLOCATED(Reader);
public:
enum BlobSizePolicy {
// The returned blob must have a valid size (i.e. != kuint64max).
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/FetchManager.h b/chromium/third_party/WebKit/Source/modules/fetch/FetchManager.h
index a65537fdc41..96215f48cea 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/FetchManager.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/FetchManager.h
@@ -16,7 +16,6 @@ class FetchRequestData;
class ScriptState;
class FetchManager final : public NoBaseWillBeGarbageCollectedFinalized<FetchManager> {
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(FetchManager);
public:
static PassOwnPtrWillBeRawPtr<FetchManager> create(ExecutionContext* executionContext)
{
diff --git a/chromium/third_party/WebKit/Source/modules/fetch/GlobalFetch.h b/chromium/third_party/WebKit/Source/modules/fetch/GlobalFetch.h
index 7b0f51b6f0a..81bbe611a4c 100644
--- a/chromium/third_party/WebKit/Source/modules/fetch/GlobalFetch.h
+++ b/chromium/third_party/WebKit/Source/modules/fetch/GlobalFetch.h
@@ -19,7 +19,6 @@ class ScriptState;
class WorkerGlobalScope;
class GlobalFetch {
- STATIC_ONLY(GlobalFetch);
public:
class MODULES_EXPORT ScopedFetcher : public WillBeGarbageCollectedMixin {
public:
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DOMFilePath.h b/chromium/third_party/WebKit/Source/modules/filesystem/DOMFilePath.h
index 2bc1a525c48..92a9f5fa153 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DOMFilePath.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DOMFilePath.h
@@ -31,14 +31,12 @@
#ifndef DOMFilePath_h
#define DOMFilePath_h
-#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
namespace blink {
// DOMFileSystem path utilities. All methods in this class are static.
class DOMFilePath {
- STATIC_ONLY(DOMFilePath);
public:
static const char separator;
static const char root[];
@@ -76,6 +74,9 @@ public:
// Checks if the given name follows the FileSystem API naming restrictions.
static bool isValidName(const String& name);
+
+private:
+ DOMFilePath() { }
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp b/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
index d04a6c76767..13a7247e94d 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
@@ -42,6 +42,14 @@
namespace blink {
+DOMWindowFileSystem::DOMWindowFileSystem()
+{
+}
+
+DOMWindowFileSystem::~DOMWindowFileSystem()
+{
+}
+
void DOMWindowFileSystem::webkitRequestFileSystem(DOMWindow& windowArg, int type, long long size, FileSystemCallback* successCallback, ErrorCallback* errorCallback)
{
LocalDOMWindow& window = toLocalDOMWindow(windowArg);
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.h
index cd8c85d736a..98a42e865e7 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.h
@@ -27,7 +27,6 @@
#define DOMWindowFileSystem_h
#include "platform/heap/Handle.h"
-#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
namespace blink {
@@ -38,7 +37,6 @@ class ErrorCallback;
class FileSystemCallback;
class DOMWindowFileSystem {
- STATIC_ONLY(DOMWindowFileSystem);
public:
static void webkitRequestFileSystem(DOMWindow&, int type, long long size, FileSystemCallback*, ErrorCallback*);
static void webkitResolveLocalFileSystemURL(DOMWindow&, const String&, EntryCallback*, ErrorCallback*);
@@ -49,6 +47,10 @@ public:
TEMPORARY,
PERSISTENT,
};
+
+private:
+ DOMWindowFileSystem();
+ ~DOMWindowFileSystem();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.h
index 747ebe2048c..7d9ebacfb41 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.h
@@ -32,7 +32,6 @@
#define DataTransferItemFileSystem_h
#include "platform/heap/Handle.h"
-#include "wtf/Allocator.h"
namespace blink {
@@ -41,9 +40,12 @@ class Entry;
class ExecutionContext;
class DataTransferItemFileSystem {
- STATIC_ONLY(DataTransferItemFileSystem);
public:
static Entry* webkitGetAsEntry(ExecutionContext*, DataTransferItem&);
+
+private:
+ DataTransferItemFileSystem();
+ ~DataTransferItemFileSystem();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.cpp b/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.cpp
index b678f573c36..d2ea9df5d62 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.cpp
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.cpp
@@ -31,4 +31,9 @@ void DevToolsHostFileSystem::upgradeDraggedFileSystemPermissions(DevToolsHost& h
host.sendMessageToEmbedder(message->toJSONString());
}
+DevToolsHostFileSystem::DevToolsHostFileSystem() { }
+
+DevToolsHostFileSystem::~DevToolsHostFileSystem() { }
+
+
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.h
index 8f73422572f..bb9a46f784b 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/DevToolsHostFileSystem.h
@@ -6,7 +6,6 @@
#define DevToolsHostFileSystem_h
#include "platform/heap/Handle.h"
-#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
namespace blink {
@@ -15,10 +14,12 @@ class DOMFileSystem;
class DevToolsHost;
class DevToolsHostFileSystem {
- STATIC_ONLY(DevToolsHostFileSystem);
public:
static DOMFileSystem* isolatedFileSystem(DevToolsHost&, const String& fileSystemName, const String& rootURL);
static void upgradeDraggedFileSystemPermissions(DevToolsHost&, DOMFileSystem*);
+private:
+ DevToolsHostFileSystem();
+ ~DevToolsHostFileSystem();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h b/chromium/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
index bcf6233852a..d8058a3dd02 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
@@ -33,7 +33,6 @@
#include "modules/ModulesExport.h"
#include "platform/FileSystemType.h"
-#include "wtf/FastAllocBase.h"
#include "wtf/Forward.h"
#include "wtf/Noncopyable.h"
@@ -45,7 +44,6 @@ class ContentSettingCallbacks;
class WorkerClients;
class FileSystemClient {
- WTF_MAKE_FAST_ALLOCATED(FileSystemClient);
WTF_MAKE_NONCOPYABLE(FileSystemClient);
public:
FileSystemClient() { }
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.cpp b/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.cpp
index bd5ce3ed6a3..3bf924c5651 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.cpp
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.cpp
@@ -76,4 +76,12 @@ EntryHeapVector HTMLInputElementFileSystem::webkitEntries(ExecutionContext* exec
return entries;
}
+HTMLInputElementFileSystem::HTMLInputElementFileSystem()
+{
+}
+
+HTMLInputElementFileSystem::~HTMLInputElementFileSystem()
+{
+}
+
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.h
index 7eb3145e5d8..526f67f2478 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/HTMLInputElementFileSystem.h
@@ -32,7 +32,6 @@
#define HTMLInputElementFileSystem_h
#include "modules/filesystem/EntriesCallback.h"
-#include "wtf/Allocator.h"
namespace blink {
@@ -40,9 +39,12 @@ class HTMLInputElement;
class ExecutionContext;
class HTMLInputElementFileSystem {
- STATIC_ONLY(HTMLInputElementFileSystem);
public:
static EntryHeapVector webkitEntries(ExecutionContext*, HTMLInputElement&);
+
+private:
+ HTMLInputElementFileSystem();
+ ~HTMLInputElementFileSystem();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
index de5e8fb2637..a42fab18393 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
@@ -50,7 +50,6 @@ class WebFileSystem;
class LocalFileSystem final : public NoBaseWillBeGarbageCollectedFinalized<LocalFileSystem>, public WillBeHeapSupplement<LocalFrame>, public WillBeHeapSupplement<WorkerClients> {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LocalFileSystem);
WTF_MAKE_NONCOPYABLE(LocalFileSystem);
- WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(LocalFileSystem);
public:
static PassOwnPtrWillBeRawPtr<LocalFileSystem> create(PassOwnPtr<FileSystemClient>);
virtual ~LocalFileSystem();
diff --git a/chromium/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.h b/chromium/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.h
index dc45ec9d46c..84a0d0f875d 100644
--- a/chromium/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.h
+++ b/chromium/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.h
@@ -40,7 +40,6 @@ class FileSystemCallback;
class WorkerGlobalScope;
class WorkerGlobalScopeFileSystem {
- STATIC_ONLY(WorkerGlobalScopeFileSystem);
public:
enum {
TEMPORARY,
@@ -51,6 +50,10 @@ public:
static DOMFileSystemSync* webkitRequestFileSystemSync(WorkerGlobalScope&, int type, long long size, ExceptionState&);
static void webkitResolveLocalFileSystemURL(WorkerGlobalScope&, const String& url, EntryCallback* successCallback, ErrorCallback*);
static EntrySync* webkitResolveLocalFileSystemSyncURL(WorkerGlobalScope&, const String& url, ExceptionState&);
+
+private:
+ WorkerGlobalScopeFileSystem();
+ ~WorkerGlobalScopeFileSystem();
};
} // namespace blink
diff --git a/chromium/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h b/chromium/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
index ab3ad1bd3fc..2f6ee3e3427 100644
--- a/chromium/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
+++ b/chromium/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
@@ -36,14 +36,12 @@
#include "platform/blob/BlobData.h"
#include "public/platform/WebFileWriter.h"
#include "wtf/Assertions.h"
-#include "wtf/FastAllocBase.h"
#include "wtf/Noncopyable.h"
#include "wtf/text/WTFString.h"
namespace blink {
class PLATFORM_EXPORT AsyncFileSystemCallbacks {
- WTF_MAKE_FAST_ALLOCATED(AsyncFileSystemCallbacks);
WTF_MAKE_NONCOPYABLE(AsyncFileSystemCallbacks);
public:
AsyncFileSystemCallbacks() : m_blockUntilCompletion(false) { }
diff --git a/chromium/third_party/WebKit/Source/web/PopupMenuImpl.cpp b/chromium/third_party/WebKit/Source/web/PopupMenuImpl.cpp
index 6ab87b1c7ac..62c4fd195e2 100644
--- a/chromium/third_party/WebKit/Source/web/PopupMenuImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/PopupMenuImpl.cpp
@@ -405,14 +405,19 @@ void PopupMenuImpl::setValueAndClosePopup(int numValue, const String& stringValu
{
ASSERT(m_popup);
ASSERT(m_ownerElement);
- EventQueueScope scope;
RefPtrWillBeRawPtr<PopupMenuImpl> protector(this);
bool success;
int listIndex = stringValue.toInt(&success);
ASSERT(success);
- m_ownerElement->valueChanged(listIndex);
- if (m_popup)
- m_chromeClient->closePagePopup(m_popup);
+ {
+ EventQueueScope scope;
+ m_ownerElement->valueChanged(listIndex);
+ if (m_popup)
+ m_chromeClient->closePagePopup(m_popup);
+ // 'change' event is dispatched here. For compatbility with
+ // Angular 1.2, we need to dispatch a change event before
+ // mouseup/click events.
+ }
// We dispatch events on the owner element to match the legacy behavior.
// Other browsers dispatch click events before and after showing the popup.
if (m_ownerElement) {
diff --git a/chromium/third_party/WebKit/Source/web/WebPageSerializerImpl.cpp b/chromium/third_party/WebKit/Source/web/WebPageSerializerImpl.cpp
index 93c697a708a..f9ab911b6b6 100644
--- a/chromium/third_party/WebKit/Source/web/WebPageSerializerImpl.cpp
+++ b/chromium/third_party/WebKit/Source/web/WebPageSerializerImpl.cpp
@@ -287,6 +287,9 @@ void WebPageSerializerImpl::encodeAndFlushBuffer(
status);
}
+// TODO(yosin): We should utilize |MarkupFormatter| here to share code,
+// especially escaping attribute values, done by |WebEntities| |m_htmlEntities|
+// and |m_xmlEntities|.
void WebPageSerializerImpl::openTagToString(Element* element,
SerializeDomParam* param)
{
@@ -316,7 +319,7 @@ void WebPageSerializerImpl::openTagToString(Element* element,
if (element->hasLegalLinkAttribute(attrName)) {
// For links start with "javascript:", we do not change it.
if (attrValue.startsWith("javascript:", TextCaseInsensitive)) {
- result.append(attrValue);
+ result.append(m_htmlEntities.convertEntitiesInString(attrValue));
} else {
// Get the absolute link
WebLocalFrameImpl* subFrame = WebLocalFrameImpl::fromFrameOwnerElement(element);
@@ -329,9 +332,9 @@ void WebPageSerializerImpl::openTagToString(Element* element,
result.append(param->directoryName);
result.append('/');
}
- result.append(m_localLinks.get(completeURL));
+ result.append(m_htmlEntities.convertEntitiesInString(m_localLinks.get(completeURL)));
} else {
- result.append(completeURL);
+ result.append(m_htmlEntities.convertEntitiesInString(completeURL));
}
}
} else {
diff --git a/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.cpp b/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
index 8a4b0dec169..f5c5badf1ae 100644
--- a/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
+++ b/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
@@ -291,6 +291,7 @@ bool partitionAllocShutdown(PartitionRoot* root)
bool partitionAllocGenericShutdown(PartitionRootGeneric* root)
{
+ spinLockLock(&root->lock);
bool foundLeak = false;
size_t i;
for (i = 0; i < kGenericNumBuckets; ++i) {
@@ -298,6 +299,7 @@ bool partitionAllocGenericShutdown(PartitionRootGeneric* root)
foundLeak |= partitionAllocShutdownBucket(bucket);
}
foundLeak |= partitionAllocBaseShutdown(root);
+ spinLockUnlock(&root->lock);
return !foundLeak;
}
diff --git a/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.h b/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.h
index b0e233f4e2d..b282228004b 100644
--- a/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.h
+++ b/chromium/third_party/WebKit/Source/wtf/PartitionAlloc.h
@@ -699,6 +699,13 @@ ALWAYS_INLINE void* partitionAllocGenericFlags(PartitionRootGeneric* root, int f
size = partitionCookieSizeAdjustAdd(size);
PartitionBucket* bucket = partitionGenericSizeToBucket(root, size);
spinLockLock(&root->lock);
+ // TODO(bashi): Remove following RELEAE_ASSERT()s once we find the cause of
+ // http://crbug.com/514141
+#if OS(ANDROID)
+ RELEASE_ASSERT(bucket >= &root->buckets[0] || bucket == &PartitionRootGeneric::gPagedBucket);
+ RELEASE_ASSERT(bucket <= &root->buckets[kGenericNumBuckets - 1] || bucket == &PartitionRootGeneric::gPagedBucket);
+ RELEASE_ASSERT(root->initialized);
+#endif
void* ret = partitionBucketAlloc(root, flags, size, bucket);
spinLockUnlock(&root->lock);
return ret;
diff --git a/chromium/third_party/skia/src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp b/chromium/third_party/skia/src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp
index fc92da713af..a79ca5a108a 100644
--- a/chromium/third_party/skia/src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp
+++ b/chromium/third_party/skia/src/gpu/gl/builders/GrGLVertexShaderBuilder.cpp
@@ -38,15 +38,10 @@ void GrGLVertexBuilder::emitAttributes(const GrGeometryProcessor& gp) {
void GrGLVertexBuilder::transformToNormalizedDeviceSpace(const GrShaderVar& posVar) {
SkASSERT(!fRtAdjustName);
- GrSLPrecision precision = kDefault_GrSLPrecision;
- if (fProgramBuilder->ctxInfo().vendor() == kARM_GrGLVendor) {
- precision = kHigh_GrSLPrecision;
- }
-
// setup RT Uniform
fProgramBuilder->fUniformHandles.fRTAdjustmentUni =
fProgramBuilder->addUniform(GrGLProgramBuilder::kVertex_Visibility,
- kVec4f_GrSLType, precision,
+ kVec4f_GrSLType, kHigh_GrSLPrecision,
fProgramBuilder->rtAdjustment(),
&fRtAdjustName);
if (this->getProgramBuilder()->desc().header().fSnapVerticesToPixelCenters) {
diff --git a/chromium/ui/gfx/canvas.cc b/chromium/ui/gfx/canvas.cc
index 49e32350a42..37ca6289269 100644
--- a/chromium/ui/gfx/canvas.cc
+++ b/chromium/ui/gfx/canvas.cc
@@ -54,10 +54,9 @@ Canvas::Canvas(const ImageSkiaRep& image_rep, bool is_opaque)
}
Canvas::Canvas()
- : image_scale_(1.0),
+ : image_scale_(1.f),
owned_canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))),
- canvas_(owned_canvas_.get()) {
-}
+ canvas_(owned_canvas_.get()) {}
Canvas::Canvas(SkCanvas* canvas, float image_scale)
: image_scale_(image_scale), owned_canvas_(), canvas_(canvas) {
@@ -180,6 +179,13 @@ void Canvas::Save() {
canvas_->save();
}
+float Canvas::SaveAndUnscale() {
+ Save();
+ SkScalar scale_factor = 1.0f / image_scale_;
+ canvas_->scale(scale_factor, scale_factor);
+ return image_scale_;
+}
+
void Canvas::SaveLayerAlpha(uint8 alpha) {
canvas_->saveLayerAlpha(NULL, alpha);
}
@@ -378,63 +384,26 @@ void Canvas::DrawImageInt(const ImageSkia& image,
int dest_h,
bool filter,
const SkPaint& paint) {
- DrawImageIntHelper(image, src_x, src_y, src_w, src_h, dest_x, dest_y, dest_w,
- dest_h, filter, paint, image_scale_, false);
+ const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale_);
+ if (image_rep.is_null())
+ return;
+ DrawImageIntHelper(image_rep, src_x, src_y, src_w, src_h, dest_x, dest_y,
+ dest_w, dest_h, filter, paint, false);
}
-void Canvas::DrawImageIntInPixel(const ImageSkia& image,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
+void Canvas::DrawImageIntInPixel(const ImageSkiaRep& image_rep,
int dest_x,
int dest_y,
int dest_w,
int dest_h,
bool filter,
const SkPaint& paint) {
- // All values passed into this function are in pixels, i.e. no scaling needs
- // be done.
- // Logic as below:-
- // 1. Get the matrix transform from the canvas.
- // 2. Set the scale in the matrix to 1.0 while honoring the direction of the
- // the scale (x/y). Example RTL layouts.
- // 3. Round off the X and Y translation components in the matrix. This is to
- // reduce floating point errors during rect transformation. This is needed
- // for fractional scale factors like 1.25/1.5, etc.
- // 4. Save the current state of the canvas and restore the state when going
- // out of scope with ScopedCanvas.
- // 5. Set the modified matrix in the canvas. This ensures that no scaling
- // will be done for draw operations on the canvas.
- // 6. Draw the image.
- SkMatrix matrix = canvas_->getTotalMatrix();
-
- // Ensure that the direction of the x and y scales is preserved. This is
- // important for RTL layouts.
- matrix.setScaleX(matrix.getScaleX() > 0 ? 1.0f : -1.0f);
- matrix.setScaleY(matrix.getScaleY() > 0 ? 1.0f : -1.0f);
-
- // Floor so that we get consistent rounding.
- matrix.setTranslateX(SkScalarFloorToScalar(matrix.getTranslateX()));
- matrix.setTranslateY(SkScalarFloorToScalar(matrix.getTranslateY()));
-
- ScopedCanvas scoper(this);
-
- canvas_->setMatrix(matrix);
-
- DrawImageIntHelper(image,
- src_x,
- src_y,
- src_w,
- src_h,
- dest_x,
- dest_y,
- dest_w,
- dest_h,
- filter,
- paint,
- image_scale_,
- true);
+ int src_x = 0;
+ int src_y = 0;
+ int src_w = image_rep.pixel_width();
+ int src_h = image_rep.pixel_height();
+ DrawImageIntHelper(image_rep, src_x, src_y, src_w, src_h, dest_x, dest_y,
+ dest_w, dest_h, filter, paint, true);
}
void Canvas::DrawImageInPath(const ImageSkia& image,
@@ -555,7 +524,7 @@ bool Canvas::IntersectsClipRect(const Rect& rect) {
rect.width(), rect.height());
}
-void Canvas::DrawImageIntHelper(const ImageSkia& image,
+void Canvas::DrawImageIntHelper(const ImageSkiaRep& image_rep,
int src_x,
int src_y,
int src_w,
@@ -566,7 +535,6 @@ void Canvas::DrawImageIntHelper(const ImageSkia& image,
int dest_h,
bool filter,
const SkPaint& paint,
- float image_scale,
bool pixel) {
DLOG_ASSERT(src_x + src_w < std::numeric_limits<int16_t>::max() &&
src_y + src_h < std::numeric_limits<int16_t>::max());
@@ -581,10 +549,6 @@ void Canvas::DrawImageIntHelper(const ImageSkia& image,
float user_scale_x = static_cast<float>(dest_w) / src_w;
float user_scale_y = static_cast<float>(dest_h) / src_h;
- const ImageSkiaRep& image_rep = image.GetRepresentation(image_scale);
- if (image_rep.is_null())
- return;
-
SkRect dest_rect = { SkIntToScalar(dest_x),
SkIntToScalar(dest_y),
SkIntToScalar(dest_x + dest_w),
diff --git a/chromium/ui/gfx/canvas.h b/chromium/ui/gfx/canvas.h
index 84a685cfb51..52d4b12c384 100644
--- a/chromium/ui/gfx/canvas.h
+++ b/chromium/ui/gfx/canvas.h
@@ -169,6 +169,11 @@ class GFX_EXPORT Canvas {
// until a balanced call to Restore() is made.
void Save();
+ // Saves the drawing state, unscales by the image scale factor, and returns
+ // that factor. This is useful when callers want to draw directly in the
+ // native scale.
+ float SaveAndUnscale();
+
// As with Save(), except draws to a layer that is blended with the canvas
// at the specified alpha once Restore() is called.
// |layer_bounds| are the bounds of the layer relative to the current
@@ -304,14 +309,11 @@ class GFX_EXPORT Canvas {
const SkPaint& paint);
// Same as the DrawImageInt functions above. Difference being this does not
- // do any scaling, i.e. it assumes that the source/destination/image, etc are
- // in pixels. It does translate the destination rectangle to ensure that the
- // image is displayed at the correct pixel coordinates.
- void DrawImageIntInPixel(const ImageSkia& image,
- int src_x,
- int src_y,
- int src_w,
- int src_h,
+ // do any scaling, i.e. it does not scale the output by the device scale
+ // factor (the internal image_scale_). It takes an ImageSkiaRep instead of
+ // an ImageSkia as the caller chooses the exact scale/pixel representation to
+ // use, which will not be scaled while drawing it into the canvas.
+ void DrawImageIntInPixel(const ImageSkiaRep& image_rep,
int dest_x,
int dest_y,
int dest_w,
@@ -419,7 +421,7 @@ class GFX_EXPORT Canvas {
// Helper for the DrawImageInt functions declared above. The |pixel|
// parameter if true indicates that the bounds and the image are to
// be assumed to be in pixels, i.e. no scaling needs to be performed.
- void DrawImageIntHelper(const ImageSkia& image,
+ void DrawImageIntHelper(const ImageSkiaRep& image_rep,
int src_x,
int src_y,
int src_w,
@@ -430,7 +432,6 @@ class GFX_EXPORT Canvas {
int dest_h,
bool filter,
const SkPaint& paint,
- float image_scale,
bool pixel);
// The device scale factor at which drawing on this canvas occurs.
diff --git a/chromium/ui/gfx/nine_image_painter.cc b/chromium/ui/gfx/nine_image_painter.cc
index 584e522982d..3e5b9907313 100644
--- a/chromium/ui/gfx/nine_image_painter.cc
+++ b/chromium/ui/gfx/nine_image_painter.cc
@@ -22,35 +22,28 @@ namespace gfx {
namespace {
-// The following functions calculate width and height of the image in pixels
-// for the scale factor.
-int ImageWidthInPixels(const ImageSkia& i, float scale) {
- if (i.isNull())
+int ImageRepWidthInPixels(const ImageSkiaRep& rep) {
+ if (rep.is_null())
return 0;
- ImageSkiaRep image_rep = i.GetRepresentation(scale);
- return image_rep.pixel_width() * scale / image_rep.scale();
+ return rep.pixel_width();
}
-int ImageHeightInPixels(const ImageSkia& i, float scale) {
- if (i.isNull())
+int ImageRepHeightInPixels(const ImageSkiaRep& rep) {
+ if (rep.is_null())
return 0;
- ImageSkiaRep image_rep = i.GetRepresentation(scale);
- return image_rep.pixel_height() * scale / image_rep.scale();
+ return rep.pixel_height();
}
-// Stretches the given image over the specified canvas area.
void Fill(Canvas* c,
- const ImageSkia& i,
+ const ImageSkiaRep& rep,
int x,
int y,
int w,
int h,
const SkPaint& paint) {
- if (i.isNull())
+ if (rep.is_null())
return;
- c->DrawImageIntInPixel(i, 0, 0, ImageWidthInPixels(i, c->image_scale()),
- ImageHeightInPixels(i, c->image_scale()),
- x, y, w, h, false, paint);
+ c->DrawImageIntInPixel(rep, x, y, w, h, false, paint);
}
} // namespace
@@ -95,49 +88,47 @@ void NineImagePainter::Paint(Canvas* canvas,
if (IsEmpty())
return;
- ScopedCanvas scoped_canvas(canvas);
- canvas->Translate(bounds.OffsetFromOrigin());
+ // Painting at physical device pixels (undo device scale factor).
+ float scale = canvas->SaveAndUnscale();
- // Get the current transform from the canvas and apply it to the logical
- // bounds passed in. This will give us the pixel bounds which can be used
- // to draw the images at the correct locations.
- // We should not scale the bounds by the canvas->image_scale() as that can be
- // different from the real scale in the canvas transform.
- SkRect bounds_in_pixels_f;
- if (!canvas->sk_canvas()->getTotalMatrix().mapRect(
- &bounds_in_pixels_f, RectToSkRect(gfx::Rect(bounds.size()))))
- return; // Invalid transform.
+ // Since the drawing from the following Fill() calls assumes the mapped origin
+ // is at (0,0), we need to translate the canvas to the mapped origin.
+ const int left_in_pixels = ToRoundedInt(bounds.x() * scale);
+ const int top_in_pixels = ToRoundedInt(bounds.y() * scale);
+ const int right_in_pixels = ToRoundedInt(bounds.right() * scale);
+ const int bottom_in_pixels = ToRoundedInt(bounds.bottom() * scale);
- SkIRect bounds_in_pixels;
- bounds_in_pixels_f.dround(&bounds_in_pixels);
+ const int width_in_pixels = right_in_pixels - left_in_pixels;
+ const int height_in_pixels = bottom_in_pixels - top_in_pixels;
- SkMatrix matrix = canvas->sk_canvas()->getTotalMatrix();
- matrix.setTranslateX(SkIntToScalar(bounds_in_pixels.x()));
- matrix.setTranslateY(SkIntToScalar(bounds_in_pixels.y()));
- canvas->sk_canvas()->setMatrix(matrix);
+ // Since the drawing from the following Fill() calls assumes the mapped origin
+ // is at (0,0), we need to translate the canvas to the mapped origin.
+ canvas->Translate(gfx::Vector2d(left_in_pixels, top_in_pixels));
- const int width_in_pixels = bounds_in_pixels.width();
- const int height_in_pixels = bounds_in_pixels.height();
- const float scale_x = matrix.getScaleX();
- const float scale_y = matrix.getScaleY();
+ ImageSkiaRep image_reps[9];
+ static_assert(arraysize(image_reps) == arraysize(images_), "");
+ for (size_t i = 0; i < arraysize(image_reps); ++i) {
+ image_reps[i] = images_[i].GetRepresentation(scale);
+ DCHECK(image_reps[i].is_null() || image_reps[i].scale() == scale);
+ }
// In case the corners and edges don't all have the same width/height, we draw
// the center first, and extend it out in all directions to the edges of the
// images with the smallest widths/heights. This way there will be no
// unpainted areas, though some corners or edges might overlap the center.
- int i0w = ImageWidthInPixels(images_[0], scale_x);
- int i2w = ImageWidthInPixels(images_[2], scale_x);
- int i3w = ImageWidthInPixels(images_[3], scale_x);
- int i5w = ImageWidthInPixels(images_[5], scale_x);
- int i6w = ImageWidthInPixels(images_[6], scale_x);
- int i8w = ImageWidthInPixels(images_[8], scale_x);
-
- int i0h = ImageHeightInPixels(images_[0], scale_y);
- int i1h = ImageHeightInPixels(images_[1], scale_y);
- int i2h = ImageHeightInPixels(images_[2], scale_y);
- int i6h = ImageHeightInPixels(images_[6], scale_y);
- int i7h = ImageHeightInPixels(images_[7], scale_y);
- int i8h = ImageHeightInPixels(images_[8], scale_y);
+ int i0w = ImageRepWidthInPixels(image_reps[0]);
+ int i2w = ImageRepWidthInPixels(image_reps[2]);
+ int i3w = ImageRepWidthInPixels(image_reps[3]);
+ int i5w = ImageRepWidthInPixels(image_reps[5]);
+ int i6w = ImageRepWidthInPixels(image_reps[6]);
+ int i8w = ImageRepWidthInPixels(image_reps[8]);
+
+ int i0h = ImageRepHeightInPixels(image_reps[0]);
+ int i1h = ImageRepHeightInPixels(image_reps[1]);
+ int i2h = ImageRepHeightInPixels(image_reps[2]);
+ int i6h = ImageRepHeightInPixels(image_reps[6]);
+ int i7h = ImageRepHeightInPixels(image_reps[7]);
+ int i8h = ImageRepHeightInPixels(image_reps[8]);
i0w = std::min(i0w, width_in_pixels);
i2w = std::min(i2w, width_in_pixels - i0w);
@@ -163,26 +154,22 @@ void NineImagePainter::Paint(Canvas* canvas,
SkPaint paint;
paint.setAlpha(alpha);
- Fill(canvas, images_[4], i4x, i4y, i4w, i4h, paint);
-
- Fill(canvas, images_[0], 0, 0, i0w, i0h, paint);
-
- Fill(canvas, images_[1], i0w, 0, width_in_pixels - i0w - i2w, i1h, paint);
-
- Fill(canvas, images_[2], width_in_pixels - i2w, 0, i2w, i2h, paint);
-
- Fill(canvas, images_[3], 0, i0h, i3w, height_in_pixels - i0h - i6h, paint);
-
- Fill(canvas, images_[5], width_in_pixels - i5w, i2h, i5w,
+ Fill(canvas, image_reps[4], i4x, i4y, i4w, i4h, paint);
+ Fill(canvas, image_reps[0], 0, 0, i0w, i0h, paint);
+ Fill(canvas, image_reps[1], i0w, 0, width_in_pixels - i0w - i2w, i1h,
+ paint);
+ Fill(canvas, image_reps[2], width_in_pixels - i2w, 0, i2w, i2h, paint);
+ Fill(canvas, image_reps[3], 0, i0h, i3w, height_in_pixels - i0h - i6h,
+ paint);
+ Fill(canvas, image_reps[5], width_in_pixels - i5w, i2h, i5w,
height_in_pixels - i2h - i8h, paint);
-
- Fill(canvas, images_[6], 0, height_in_pixels - i6h, i6w, i6h, paint);
-
- Fill(canvas, images_[7], i6w, height_in_pixels - i7h,
+ Fill(canvas, image_reps[6], 0, height_in_pixels - i6h, i6w, i6h, paint);
+ Fill(canvas, image_reps[7], i6w, height_in_pixels - i7h,
width_in_pixels - i6w - i8w, i7h, paint);
+ Fill(canvas, image_reps[8], width_in_pixels - i8w, height_in_pixels - i8h,
+ i8w, i8h, paint);
- Fill(canvas, images_[8], width_in_pixels - i8w, height_in_pixels - i8h, i8w,
- i8h, paint);
+ canvas->Restore();
}
// static
diff --git a/chromium/ui/gfx/nine_image_painter_unittest.cc b/chromium/ui/gfx/nine_image_painter_unittest.cc
index ecfd409f840..759c7f4cc3e 100644
--- a/chromium/ui/gfx/nine_image_painter_unittest.cc
+++ b/chromium/ui/gfx/nine_image_painter_unittest.cc
@@ -4,14 +4,47 @@
#include "ui/gfx/nine_image_painter.h"
+#include "base/base64.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/codec/png_codec.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/vector2d.h"
+#include "ui/gfx/geometry/vector2d_conversions.h"
#include "ui/gfx/image/image_skia.h"
namespace gfx {
+static std::string GetPNGDataUrl(const SkBitmap& bitmap) {
+ std::vector<unsigned char> png_data;
+ gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &png_data);
+ std::string data_url;
+ data_url.insert(data_url.end(), png_data.begin(), png_data.end());
+ base::Base64Encode(data_url, &data_url);
+ data_url.insert(0, "data:image/png;base64,");
+
+ return data_url;
+}
+
+void ExpectRedWithGreenRect(const SkBitmap& bitmap,
+ const Rect& outer_rect,
+ const Rect& green_rect) {
+ for (int y = outer_rect.y(); y < outer_rect.bottom(); y++) {
+ SCOPED_TRACE(y);
+ for (int x = outer_rect.x(); x < outer_rect.right(); x++) {
+ SCOPED_TRACE(x);
+ if (green_rect.Contains(x, y)) {
+ ASSERT_EQ(SK_ColorGREEN, bitmap.getColor(x, y))
+ << "Output image:\n" << GetPNGDataUrl(bitmap);
+ } else {
+ ASSERT_EQ(SK_ColorRED, bitmap.getColor(x, y)) << "Output image:\n"
+ << GetPNGDataUrl(bitmap);
+ }
+ }
+ }
+}
+
TEST(NineImagePainterTest, GetSubsetRegions) {
SkBitmap src;
src.allocN32Pixels(40, 50);
@@ -31,22 +64,25 @@ TEST(NineImagePainterTest, GetSubsetRegions) {
EXPECT_EQ(gfx::Rect(36, 47, 4, 3), rects[8]);
}
-TEST(NineImagePainterTest, PaintScale) {
+TEST(NineImagePainterTest, PaintHighDPI) {
SkBitmap src;
src.allocN32Pixels(100, 100);
src.eraseColor(SK_ColorRED);
src.eraseArea(SkIRect::MakeXYWH(10, 10, 80, 80), SK_ColorGREEN);
- gfx::ImageSkia image(gfx::ImageSkiaRep(src, 0.0f));
+ float image_scale = 2.f;
+
+ gfx::ImageSkia image(gfx::ImageSkiaRep(src, image_scale));
gfx::Insets insets(10, 10, 10, 10);
gfx::NineImagePainter painter(image, insets);
- int image_scale = 2;
bool is_opaque = true;
- gfx::Canvas canvas(gfx::Size(400, 400), image_scale, is_opaque);
- canvas.Scale(2, 1);
+ gfx::Canvas canvas(gfx::Size(100, 100), image_scale, is_opaque);
+
+ gfx::Vector2d offset(20, 10);
+ canvas.Translate(offset);
- gfx::Rect bounds(0, 0, 100, 100);
+ gfx::Rect bounds(0, 0, 50, 50);
painter.Paint(&canvas, bounds);
SkBitmap result;
@@ -54,16 +90,11 @@ TEST(NineImagePainterTest, PaintScale) {
result.allocN32Pixels(size.width(), size.height());
canvas.sk_canvas()->readPixels(&result, 0, 0);
- SkIRect green_rect = SkIRect::MakeLTRB(40, 20, 360, 180);
- for (int y = 0; y < 200; y++) {
- for (int x = 0; x < 400; x++) {
- if (green_rect.contains(x, y)) {
- EXPECT_EQ(SK_ColorGREEN, result.getColor(x, y));
- } else {
- EXPECT_EQ(SK_ColorRED, result.getColor(x, y));
- }
- }
- }
+ gfx::Vector2d paint_offset =
+ gfx::ToFlooredVector2d(gfx::ScaleVector2d(offset, image_scale));
+ gfx::Rect green_rect = gfx::Rect(10, 10, 80, 80) + paint_offset;
+ gfx::Rect outer_rect = gfx::Rect(100, 100) + paint_offset;
+ ExpectRedWithGreenRect(result, outer_rect, green_rect);
}
TEST(NineImagePainterTest, PaintStaysInBounds) {
@@ -105,4 +136,105 @@ TEST(NineImagePainterTest, PaintStaysInBounds) {
EXPECT_EQ(SK_ColorBLACK, result.getColor(2, 2));
}
+TEST(NineImagePainterTest, PaintWithBoundOffset) {
+ SkBitmap src;
+ src.allocN32Pixels(10, 10);
+ src.eraseColor(SK_ColorRED);
+ src.eraseArea(SkIRect::MakeXYWH(1, 1, 8, 8), SK_ColorGREEN);
+
+ gfx::ImageSkia image(gfx::ImageSkiaRep(src, 0.0f));
+ gfx::Insets insets(1, 1, 1, 1);
+ gfx::NineImagePainter painter(image, insets);
+
+ bool is_opaque = true;
+ gfx::Canvas canvas(gfx::Size(10, 10), 1, is_opaque);
+
+ gfx::Rect bounds(1, 1, 10, 10);
+ painter.Paint(&canvas, bounds);
+
+ SkBitmap result;
+ const SkISize size = canvas.sk_canvas()->getDeviceSize();
+ result.allocN32Pixels(size.width(), size.height());
+ canvas.sk_canvas()->readPixels(&result, 0, 0);
+
+ SkIRect green_rect = SkIRect::MakeLTRB(2, 2, 10, 10);
+ for (int y = 1; y < 10; y++) {
+ for (int x = 1; x < 10; x++) {
+ if (green_rect.contains(x, y)) {
+ ASSERT_EQ(SK_ColorGREEN, result.getColor(x, y));
+ } else {
+ ASSERT_EQ(SK_ColorRED, result.getColor(x, y));
+ }
+ }
+ }
+}
+
+TEST(NineImagePainterTest, PaintWithScale) {
+ SkBitmap src;
+ src.allocN32Pixels(100, 100);
+ src.eraseColor(SK_ColorRED);
+ src.eraseArea(SkIRect::MakeXYWH(10, 10, 80, 80), SK_ColorGREEN);
+
+ float image_scale = 2.f;
+
+ gfx::ImageSkia image(gfx::ImageSkiaRep(src, image_scale));
+ gfx::Insets insets(10, 10, 10, 10);
+ gfx::NineImagePainter painter(image, insets);
+
+ bool is_opaque = true;
+ gfx::Canvas canvas(gfx::Size(400, 400), image_scale, is_opaque);
+
+ gfx::Vector2d offset(20, 10);
+ canvas.Translate(offset);
+ canvas.Scale(2, 1);
+
+ gfx::Rect bounds(0, 0, 50, 50);
+ painter.Paint(&canvas, bounds);
+
+ SkBitmap result;
+ const SkISize size = canvas.sk_canvas()->getDeviceSize();
+ result.allocN32Pixels(size.width(), size.height());
+ canvas.sk_canvas()->readPixels(&result, 0, 0);
+
+ gfx::Vector2d paint_offset =
+ gfx::ToFlooredVector2d(gfx::ScaleVector2d(offset, image_scale));
+ gfx::Rect green_rect = gfx::Rect(20, 10, 160, 80) + paint_offset;
+ gfx::Rect outer_rect = gfx::Rect(200, 100) + paint_offset;
+ ExpectRedWithGreenRect(result, outer_rect, green_rect);
+}
+
+TEST(NineImagePainterTest, PaintWithNegativeScale) {
+ SkBitmap src;
+ src.allocN32Pixels(100, 100);
+ src.eraseColor(SK_ColorRED);
+ src.eraseArea(SkIRect::MakeXYWH(10, 10, 80, 80), SK_ColorGREEN);
+
+ float image_scale = 2.f;
+
+ gfx::ImageSkia image(gfx::ImageSkiaRep(src, image_scale));
+ gfx::Insets insets(10, 10, 10, 10);
+ gfx::NineImagePainter painter(image, insets);
+
+ bool is_opaque = true;
+ gfx::Canvas canvas(gfx::Size(400, 400), image_scale, is_opaque);
+ canvas.Translate(gfx::Vector2d(70, 60));
+ canvas.Scale(-1, -1);
+
+ gfx::Rect bounds(0, 0, 50, 50);
+ painter.Paint(&canvas, bounds);
+
+ SkBitmap result;
+ const SkISize size = canvas.sk_canvas()->getDeviceSize();
+ result.allocN32Pixels(size.width(), size.height());
+ canvas.sk_canvas()->readPixels(&result, 0, 0);
+
+ // The painting space is 50x50 and the scale of -1,-1 means an offset of 50,50
+ // would put the output in the top left corner. Since the offset is 70,60 it
+ // moves by 20,10. Since the output is 2x DPI it will become offset by 40,20.
+ gfx::Vector2d paint_offset(40, 20);
+ gfx::Rect green_rect = gfx::Rect(10, 10, 80, 80) + paint_offset;
+ gfx::Rect outer_rect = gfx::Rect(100, 100) + paint_offset;
+ ExpectRedWithGreenRect(result, outer_rect, green_rect);
+}
+
} // namespace gfx
diff --git a/chromium/ui/strings/translations/ui_strings_de.xtb b/chromium/ui/strings/translations/ui_strings_de.xtb
index e5d15e8bc53..a4b3c0238a3 100644
--- a/chromium/ui/strings/translations/ui_strings_de.xtb
+++ b/chromium/ui/strings/translations/ui_strings_de.xtb
@@ -109,7 +109,7 @@
<translation id="7139614227326422685">Ein Wort nach rechts</translation>
<translation id="7222373446505536781">F11</translation>
<translation id="7238427729722629793">{MINUTES,plural, =1{1 Min. übrig}other{# Min. übrig}}</translation>
-<translation id="7365057348334984696">{MINUTES,plural, =1{1 Min. her}other{# Min. her}}</translation>
+<translation id="7365057348334984696">{MINUTES,plural, =1{vor 1 Min.}other{vor # Min.}}</translation>
<translation id="7410957453383678442">{MINUTES,plural, =1{1 Minute übrig}other{# Minuten übrig}}</translation>
<translation id="7457942297256758195">Alle löschen</translation>
<translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/chromium/ui/strings/translations/ui_strings_et.xtb b/chromium/ui/strings/translations/ui_strings_et.xtb
index 76d31a10489..03ff6cfb2a6 100644
--- a/chromium/ui/strings/translations/ui_strings_et.xtb
+++ b/chromium/ui/strings/translations/ui_strings_et.xtb
@@ -131,7 +131,7 @@
<translation id="8371695176452482769">Alustage rääkimist</translation>
<translation id="8394908167088220973">Meediumi esitamine/peatamine</translation>
<translation id="8400147561352026160">Shift+<ph name="KEY_COMBO_NAME" /></translation>
-<translation id="8428213095426709021">Seadistused</translation>
+<translation id="8428213095426709021">Seaded</translation>
<translation id="8447116497070723931">PgUp</translation>
<translation id="8471049483003785219">Liiguta sõna võrra vasakule ja muuda valikut</translation>
<translation id="8602707065186045623"><ph name="SAVEAS_EXTENSION_TYPE" /> Fail (.<ph name="SAVEAS_EXTENSION_NAME" />)</translation>
diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h
index 7585e096520..3b59c2cf70b 100644
--- a/chromium/v8/include/v8-version.h
+++ b/chromium/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 4
#define V8_MINOR_VERSION 7
#define V8_BUILD_NUMBER 80
-#define V8_PATCH_LEVEL 23
+#define V8_PATCH_LEVEL 27
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/chromium/v8/src/ast-value-factory.cc b/chromium/v8/src/ast-value-factory.cc
index 68cf0152003..fbcde8b4570 100644
--- a/chromium/v8/src/ast-value-factory.cc
+++ b/chromium/v8/src/ast-value-factory.cc
@@ -29,6 +29,7 @@
#include "src/api.h"
#include "src/objects.h"
+#include "src/utils.h"
namespace v8 {
namespace internal {
@@ -379,11 +380,32 @@ AstRawString* AstValueFactory::GetString(uint32_t hash, bool is_one_byte,
bool AstValueFactory::AstRawStringCompare(void* a, void* b) {
const AstRawString* lhs = static_cast<AstRawString*>(a);
const AstRawString* rhs = static_cast<AstRawString*>(b);
- if (lhs->is_one_byte() != rhs->is_one_byte()) return false;
+ if (lhs->length() != rhs->length()) return false;
if (lhs->hash() != rhs->hash()) return false;
- int len = lhs->byte_length();
- if (rhs->byte_length() != len) return false;
- return memcmp(lhs->raw_data(), rhs->raw_data(), len) == 0;
+ const unsigned char* l = lhs->raw_data();
+ const unsigned char* r = rhs->raw_data();
+ size_t length = rhs->length();
+ if (lhs->is_one_byte()) {
+ if (rhs->is_one_byte()) {
+ return CompareCharsUnsigned(reinterpret_cast<const uint8_t*>(l),
+ reinterpret_cast<const uint8_t*>(r),
+ length) == 0;
+ } else {
+ return CompareCharsUnsigned(reinterpret_cast<const uint8_t*>(l),
+ reinterpret_cast<const uint16_t*>(r),
+ length) == 0;
+ }
+ } else {
+ if (rhs->is_one_byte()) {
+ return CompareCharsUnsigned(reinterpret_cast<const uint16_t*>(l),
+ reinterpret_cast<const uint8_t*>(r),
+ length) == 0;
+ } else {
+ return CompareCharsUnsigned(reinterpret_cast<const uint16_t*>(l),
+ reinterpret_cast<const uint16_t*>(r),
+ length) == 0;
+ }
+ }
}
} // namespace internal
} // namespace v8
diff --git a/chromium/v8/src/code-stubs-hydrogen.cc b/chromium/v8/src/code-stubs-hydrogen.cc
index dc2ae554bfc..801079bcd94 100644
--- a/chromium/v8/src/code-stubs-hydrogen.cc
+++ b/chromium/v8/src/code-stubs-hydrogen.cc
@@ -396,8 +396,7 @@ HValue* CodeStubGraphBuilder<TypeofStub>::BuildCodeStub() {
// Is it an undetectable object?
IfBuilder is_undetectable(this);
is_undetectable.If<HCompareNumericAndBranch>(
- bit_field_masked, Add<HConstant>(1 << Map::kIsUndetectable),
- Token::EQ);
+ bit_field_masked, graph()->GetConstant0(), Token::NE);
is_undetectable.Then();
{
// typeof an undetectable object is 'undefined'.
diff --git a/chromium/v8/src/func-name-inferrer.h b/chromium/v8/src/func-name-inferrer.h
index 8b077f9d8cf..1be63323ca2 100644
--- a/chromium/v8/src/func-name-inferrer.h
+++ b/chromium/v8/src/func-name-inferrer.h
@@ -30,17 +30,29 @@ class FuncNameInferrer : public ZoneObject {
public:
FuncNameInferrer(AstValueFactory* ast_value_factory, Zone* zone);
+ // To enter function name inference state, put a FuncNameInferrer::State
+ // on the stack.
+ class State {
+ public:
+ explicit State(FuncNameInferrer* fni) : fni_(fni) {
+ if (fni_ != nullptr) fni_->Enter();
+ }
+ ~State() {
+ if (fni_ != nullptr) fni_->Leave();
+ }
+
+ private:
+ FuncNameInferrer* fni_;
+
+ DISALLOW_COPY_AND_ASSIGN(State);
+ };
+
// Returns whether we have entered name collection state.
bool IsOpen() const { return !entries_stack_.is_empty(); }
// Pushes an enclosing the name of enclosing function onto names stack.
void PushEnclosingName(const AstRawString* name);
- // Enters name collection state.
- void Enter() {
- entries_stack_.Add(names_stack_.length(), zone());
- }
-
// Pushes an encountered name onto names stack when in collection state.
void PushLiteralName(const AstRawString* name);
@@ -67,14 +79,6 @@ class FuncNameInferrer : public ZoneObject {
}
}
- // Leaves names collection state.
- void Leave() {
- DCHECK(IsOpen());
- names_stack_.Rewind(entries_stack_.RemoveLast());
- if (entries_stack_.is_empty())
- funcs_to_infer_.Clear();
- }
-
private:
enum NameType {
kEnclosingConstructorName,
@@ -87,6 +91,14 @@ class FuncNameInferrer : public ZoneObject {
NameType type;
};
+ void Enter() { entries_stack_.Add(names_stack_.length(), zone()); }
+
+ void Leave() {
+ DCHECK(IsOpen());
+ names_stack_.Rewind(entries_stack_.RemoveLast());
+ if (entries_stack_.is_empty()) funcs_to_infer_.Clear();
+ }
+
Zone* zone() const { return zone_; }
// Constructs a full name in dotted notation from gathered names.
diff --git a/chromium/v8/src/log-utils.h b/chromium/v8/src/log-utils.h
index 87dab524063..67143078a9b 100644
--- a/chromium/v8/src/log-utils.h
+++ b/chromium/v8/src/log-utils.h
@@ -5,6 +5,8 @@
#ifndef V8_LOG_UTILS_H_
#define V8_LOG_UTILS_H_
+#include <cstdarg>
+
#include "src/allocation.h"
#include "src/base/platform/mutex.h"
#include "src/flags.h"
diff --git a/chromium/v8/src/parser.cc b/chromium/v8/src/parser.cc
index 1bd163ce493..60a6024608b 100644
--- a/chromium/v8/src/parser.cc
+++ b/chromium/v8/src/parser.cc
@@ -2227,10 +2227,8 @@ Statement* Parser::ParseFunctionDeclaration(
const AstRawString* name = ParseIdentifierOrStrictReservedWord(
&is_strict_reserved, CHECK_OK);
- if (fni_ != NULL) {
- fni_->Enter();
- fni_->PushEnclosingName(name);
- }
+ FuncNameInferrer::State fni_state(fni_);
+ if (fni_ != NULL) fni_->PushEnclosingName(name);
FunctionLiteral* fun = ParseFunctionLiteral(
name, scanner()->location(),
is_strict_reserved ? kFunctionNameIsStrictReserved
@@ -2239,7 +2237,6 @@ Statement* Parser::ParseFunctionDeclaration(
: FunctionKind::kNormalFunction,
pos, FunctionLiteral::DECLARATION, FunctionLiteral::NORMAL_ARITY,
language_mode(), CHECK_OK);
- if (fni_ != NULL) fni_->Leave();
// Even if we're not at the top-level of the global or a function
// scope, we treat it as such and introduce the function with its
@@ -2516,7 +2513,7 @@ void Parser::ParseVariableDeclarations(VariableDeclarationContext var_context,
int bindings_start = peek_position();
bool is_for_iteration_variable;
do {
- if (fni_ != NULL) fni_->Enter();
+ FuncNameInferrer::State fni_state(fni_);
// Parse name.
if (!first_declaration) Consume(Token::COMMA);
@@ -2591,7 +2588,6 @@ void Parser::ParseVariableDeclarations(VariableDeclarationContext var_context,
value = GetLiteralUndefined(position());
}
- if (single_name && fni_ != NULL) fni_->Leave();
parsing_result->declarations.Add(DeclarationParsingResult::Declaration(
pattern, initializer_position, value));
first_declaration = false;
@@ -4813,7 +4809,7 @@ ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
const bool has_extends = extends != nullptr;
while (peek() != Token::RBRACE) {
if (Check(Token::SEMICOLON)) continue;
- if (fni_ != NULL) fni_->Enter();
+ FuncNameInferrer::State fni_state(fni_);
const bool in_class = true;
const bool is_static = false;
bool is_computed_name = false; // Classes do not care about computed
@@ -4831,10 +4827,7 @@ ClassLiteral* Parser::ParseClassLiteral(const AstRawString* name,
properties->Add(property, zone());
}
- if (fni_ != NULL) {
- fni_->Infer();
- fni_->Leave();
- }
+ if (fni_ != NULL) fni_->Infer();
}
Expect(Token::RBRACE, CHECK_OK);
diff --git a/chromium/v8/src/preparser.h b/chromium/v8/src/preparser.h
index 50dbcf1a463..85844a08750 100644
--- a/chromium/v8/src/preparser.h
+++ b/chromium/v8/src/preparser.h
@@ -2770,7 +2770,7 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral(
Expect(Token::LBRACE, CHECK_OK);
while (peek() != Token::RBRACE) {
- if (fni_ != nullptr) fni_->Enter();
+ FuncNameInferrer::State fni_state(fni_);
const bool in_class = false;
const bool is_static = false;
@@ -2801,10 +2801,7 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral(
Expect(Token::COMMA, CHECK_OK);
}
- if (fni_ != nullptr) {
- fni_->Infer();
- fni_->Leave();
- }
+ if (fni_ != nullptr) fni_->Infer();
}
Expect(Token::RBRACE, CHECK_OK);
@@ -2906,7 +2903,7 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN,
return this->ParseYieldExpression(classifier, ok);
}
- if (fni_ != NULL) fni_->Enter();
+ FuncNameInferrer::State fni_state(fni_);
ParserBase<Traits>::Checkpoint checkpoint(this);
ExpressionClassifier arrow_formals_classifier(classifier->duplicate_finder());
bool parenthesized_formals = peek() == Token::LPAREN;
@@ -2941,6 +2938,9 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN,
}
expression = this->ParseArrowFunctionLiteral(
parameters, arrow_formals_classifier, CHECK_OK);
+
+ if (fni_ != nullptr) fni_->Infer();
+
return expression;
}
@@ -2951,7 +2951,6 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN,
ExpressionClassifier::FormalParametersProductions);
if (!Token::IsAssignmentOp(peek())) {
- if (fni_ != NULL) fni_->Leave();
// Parsed conditional expression only (no assignment).
return expression;
}
@@ -3002,7 +3001,6 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN,
} else {
fni_->RemoveLastFunction();
}
- fni_->Leave();
}
return factory()->NewAssignment(op, expression, right, pos);
@@ -3469,7 +3467,7 @@ ParserBase<Traits>::ParseStrongInitializationExpression(
// 'this' '.' IdentifierName '=' AssignmentExpression
// 'this' '[' Expression ']' '=' AssignmentExpression
- if (fni_ != NULL) fni_->Enter();
+ FuncNameInferrer::State fni_state(fni_);
Consume(Token::THIS);
int pos = position();
@@ -3528,7 +3526,6 @@ ParserBase<Traits>::ParseStrongInitializationExpression(
} else {
fni_->RemoveLastFunction();
}
- fni_->Leave();
}
if (function_state_->return_location().IsValid()) {