summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-03-18 14:18:40 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-03-18 14:38:27 +0000
commit0078283f3cf586ae8a0d0df501a08e7440636b43 (patch)
tree9e227bbc71af5611b00176d23bf4f474c09bf54c
parenteaf1da4d961fbbda9455f9af3b23d1af777f43fa (diff)
BASELINE: Update Chromium to 73.0.3683.83
Change-Id: Ie2948cebb1e9204f293fdf63c36d6215a5f5b507 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
-rw-r--r--chromium/DEPS6
-rw-r--r--chromium/build/util/LASTCHANGE2
-rw-r--r--chromium/build/util/LASTCHANGE.committime2
-rw-r--r--chromium/chrome/VERSION2
-rw-r--r--chromium/chrome/app/resources/chromium_strings_te.xtb6
-rw-r--r--chromium/chrome/app/resources/generated_resources_ca.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_es-419.xtb4
-rw-r--r--chromium/chrome/app/resources/generated_resources_et.xtb2
-rw-r--r--chromium/chrome/app/resources/generated_resources_te.xtb214
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_id.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_ja.xtb2
-rw-r--r--chromium/chrome/app/resources/google_chrome_strings_te.xtb4
-rw-r--r--chromium/chrome/browser/extensions/api/web_request/web_request_apitest.cc2
-rw-r--r--chromium/chrome/browser/printing/print_preview_dialog_controller.cc24
-rw-r--r--chromium/chrome/browser/printing/print_view_manager.cc26
-rw-r--r--chromium/chrome/browser/printing/print_view_manager.h13
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json6
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json6
-rw-r--r--chromium/chrome/browser/resources/plugin_metadata/plugins_win.json6
-rw-r--r--chromium/chrome/browser/resources/print_preview/new/app.js2
-rw-r--r--chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html12
-rw-r--r--chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js12
-rw-r--r--chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/nux/constants.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/nux_helper.cc3
-rw-r--r--chromium/chrome/common/extensions/api/_api_features.json2
-rw-r--r--chromium/chrome/common/url_constants.cc3
-rw-r--r--chromium/components/arc/metrics/arc_metrics_service.cc5
-rw-r--r--chromium/components/arc/metrics/arc_metrics_service_unittest.cc14
-rw-r--r--chromium/components/autofill_strings.grdp2
-rw-r--r--chromium/components/crash/content/app/crash_reporter_client.cc2
-rw-r--r--chromium/components/crash/content/app/crash_reporter_client.h2
-rw-r--r--chromium/components/crash/content/app/crashpad_linux.cc6
-rw-r--r--chromium/components/previews/content/previews_hints.cc12
-rw-r--r--chromium/components/previews/content/previews_hints_unittest.cc29
-rw-r--r--chromium/components/previews/content/previews_optimization_guide.cc17
-rw-r--r--chromium/components/previews/content/previews_optimization_guide_unittest.cc22
-rw-r--r--chromium/components/strings/components_strings_ca.xtb2
-rw-r--r--chromium/components/strings/components_strings_es-419.xtb2
-rw-r--r--chromium/components/strings/components_strings_te.xtb94
-rw-r--r--chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.cc7
-rw-r--r--chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h9
-rw-r--r--chromium/content/browser/download/download_manager_impl.cc66
-rw-r--r--chromium/content/browser/frame_host/render_frame_host_impl.cc6
-rw-r--r--chromium/content/browser/loader/navigation_url_loader_impl.cc26
-rw-r--r--chromium/content/browser/media/hardware_key_media_controller.cc12
-rw-r--r--chromium/content/browser/media/hardware_key_media_controller.h13
-rw-r--r--chromium/content/browser/network_service_instance.cc25
-rw-r--r--chromium/content/browser/notifications/platform_notification_context_impl.cc2
-rw-r--r--chromium/content/browser/renderer_host/render_process_host_impl.cc4
-rw-r--r--chromium/content/browser/renderer_host/render_process_host_impl.h1
-rw-r--r--chromium/content/browser/service_worker/embedded_worker_instance.cc5
-rw-r--r--chromium/content/browser/tracing/tracing_controller_impl.cc5
-rw-r--r--chromium/content/browser/webrtc/webrtc_video_capture_browsertest.cc19
-rw-r--r--chromium/content/common/child.mojom6
-rw-r--r--chromium/content/common/service_manager/child_connection.cc13
-rw-r--r--chromium/content/common/service_manager/child_connection.h3
-rw-r--r--chromium/content/common/service_manager/service_manager_connection_impl.cc3
-rw-r--r--chromium/content/common/throttling_url_loader.cc8
-rw-r--r--chromium/content/public/browser/content_browser_client.cc1
-rw-r--r--chromium/content/public/browser/content_browser_client.h12
-rw-r--r--chromium/content/public/browser/render_process_host.h3
-rw-r--r--chromium/content/public/common/content_features.cc13
-rw-r--r--chromium/content/public/common/url_utils.cc3
-rw-r--r--chromium/content/renderer/media/stream/media_stream_constraints_util_audio.cc3
-rw-r--r--chromium/content/renderer/media/stream/media_stream_constraints_util_audio_unittest.cc26
-rw-r--r--chromium/device/fido/fido_test_data.h2
-rw-r--r--chromium/device/fido/u2f_register_operation.cc1
-rw-r--r--chromium/device/fido/u2f_register_operation_unittest.cc10
-rw-r--r--chromium/extensions/browser/api/media_perception_private/media_perception_api_manager.cc6
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_api.cc3
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_api.h1
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_info.cc3
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_info.h1
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_info_unittest.cc2
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc18
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h5
-rw-r--r--chromium/extensions/browser/api/web_request/web_request_proxying_websocket.cc3
-rw-r--r--chromium/extensions/browser/extension_host.cc28
-rw-r--r--chromium/extensions/browser/url_loader_factory_manager.cc71
-rw-r--r--chromium/extensions/shell/browser/shell_content_browser_client.cc5
-rw-r--r--chromium/extensions/shell/browser/shell_content_browser_client.h1
-rw-r--r--chromium/gpu/config/gpu_lists_version.h2
-rw-r--r--chromium/gpu/ipc/client/command_buffer_proxy_impl.cc5
-rw-r--r--chromium/gpu/ipc/service/gpu_channel.cc1
-rw-r--r--chromium/media/capture/video/chromeos/stream_buffer_manager.cc1
-rw-r--r--chromium/media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.cc2
-rw-r--r--chromium/media/filters/gpu_video_decoder.cc4
-rw-r--r--chromium/media/formats/mp4/avc.cc12
-rw-r--r--chromium/media/formats/mp4/avc.h2
-rw-r--r--chromium/media/gpu/ipc/client/gpu_video_decode_accelerator_host.cc1
-rw-r--r--chromium/media/gpu/ipc/common/media_messages.h1
-rw-r--r--chromium/media/gpu/ipc/service/gpu_video_decode_accelerator.cc1
-rw-r--r--chromium/media/gpu/ipc/service/picture_buffer_manager.cc4
-rw-r--r--chromium/media/gpu/ipc/service/vda_video_decoder.cc72
-rw-r--r--chromium/media/gpu/ipc/service/vda_video_decoder.h5
-rw-r--r--chromium/media/gpu/ipc/service/vda_video_decoder_unittest.cc4
-rw-r--r--chromium/media/gpu/vt_video_decode_accelerator_mac.cc18
-rw-r--r--chromium/media/video/picture.cc1
-rw-r--r--chromium/media/video/picture.h11
-rw-r--r--chromium/net/dns/fuzzed_host_resolver.cc18
-rw-r--r--chromium/net/dns/mdns_client.cc47
-rw-r--r--chromium/net/dns/mdns_client.h35
-rw-r--r--chromium/net/dns/mdns_client_impl.cc84
-rw-r--r--chromium/net/dns/mdns_client_impl.h11
-rw-r--r--chromium/net/dns/mdns_client_unittest.cc124
-rw-r--r--chromium/net/dns/mock_mdns_socket_factory.cc76
-rw-r--r--chromium/net/dns/mock_mdns_socket_factory.h99
-rw-r--r--chromium/net/dns/public/util.cc11
-rw-r--r--chromium/net/dns/public/util.h4
-rw-r--r--chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc8
-rw-r--r--chromium/services/media_session/media_controller.cc23
-rw-r--r--chromium/services/media_session/media_controller.h6
-rw-r--r--chromium/services/media_session/media_controller_unittest.cc92
-rw-r--r--chromium/services/media_session/public/cpp/media_metadata.cc5
-rw-r--r--chromium/services/media_session/public/cpp/media_metadata.h3
-rw-r--r--chromium/services/media_session/public/mojom/media_controller.mojom21
-rw-r--r--chromium/services/network/mdns_responder.cc80
-rw-r--r--chromium/services/network/mdns_responder_unittest.cc69
-rw-r--r--chromium/services/network/network_service.cc21
-rw-r--r--chromium/services/network/network_service.h2
-rw-r--r--chromium/services/network/public/mojom/network_service.mojom15
-rw-r--r--chromium/services/tracing/public/cpp/traced_process_impl.cc6
-rw-r--r--chromium/services/tracing/public/cpp/traced_process_impl.h3
-rw-r--r--chromium/skia/ext/skia_commit_hash.h2
-rw-r--r--chromium/testing/variations/fieldtrial_testing_config.json8
-rw-r--r--chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc3
-rw-r--r--chromium/third_party/blink/renderer/core/layout/layout_block_flow.cc37
-rw-r--r--chromium/third_party/blink/renderer/core/layout/layout_block_flow.h27
-rw-r--r--chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc20
-rw-r--r--chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h2
-rw-r--r--chromium/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_test.cc1
-rw-r--r--chromium/third_party/blink/renderer/core/loader/frame_loader.cc10
-rw-r--r--chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc3
-rw-r--r--chromium/third_party/blink/renderer/core/streams/CommonOperations.js96
-rw-r--r--chromium/third_party/blink/renderer/core/streams/ReadableStream.js50
-rw-r--r--chromium/third_party/blink/renderer/core/streams/TransformStream.js21
-rw-r--r--chromium/third_party/blink/renderer/core/streams/WritableStream.js82
-rw-r--r--chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc32
-rw-r--r--chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h7
-rw-r--r--chromium/third_party/skia/src/core/SkGlyphRunPainter.cpp3
-rw-r--r--chromium/third_party/skia/src/core/SkScalerContext.h10
-rw-r--r--chromium/third_party/skia/src/ports/SkFontHost_mac.cpp23
-rw-r--r--chromium/tools/metrics/histograms/histograms.xml22
-rw-r--r--chromium/tools/traffic_annotation/summary/annotations.xml2
-rw-r--r--chromium/ui/android/delegated_frame_host_android.cc2
-rw-r--r--chromium/ui/android/delegated_frame_host_android_unittest.cc9
-rw-r--r--chromium/ui/gl/gl_image_io_surface_egl.mm14
-rw-r--r--chromium/ui/gl/yuv_to_rgb_converter.cc20
-rw-r--r--chromium/ui/gl/yuv_to_rgb_converter.h1
-rw-r--r--chromium/ui/strings/translations/ui_strings_te.xtb2
-rw-r--r--chromium/ui/views_bridge_mac/views_nswindow_delegate.mm12
-rw-r--r--chromium/ui/webui/resources/cr_components/managed_footnote/managed_footnote.js4
-rw-r--r--chromium/v8/include/v8-version.h2
-rw-r--r--chromium/v8/src/arm64/assembler-arm64.cc6
-rw-r--r--chromium/v8/src/arm64/assembler-arm64.h5
-rw-r--r--chromium/v8/src/ast/ast-traversal-visitor.h1
-rw-r--r--chromium/v8/src/ast/ast.cc20
-rw-r--r--chromium/v8/src/ast/ast.h18
-rw-r--r--chromium/v8/src/ast/prettyprinter.cc4
-rw-r--r--chromium/v8/src/heap/factory.cc3
-rw-r--r--chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc3
-rw-r--r--chromium/v8/src/regexp/regexp-macro-assembler.cc5
-rw-r--r--chromium/v8/src/simulator.h10
-rw-r--r--chromium/v8/src/snapshot/embedded-file-writer.cc10
-rw-r--r--chromium/v8/test/unittests/BUILD.gn1
-rw-r--r--chromium/v8/tools/whitespace.txt4
170 files changed, 1623 insertions, 1074 deletions
diff --git a/chromium/DEPS b/chromium/DEPS
index 25336dd400d..75c145286f2 100644
--- a/chromium/DEPS
+++ b/chromium/DEPS
@@ -122,11 +122,11 @@ vars = {
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling Skia
# and whatever else without interference from each other.
- 'skia_revision': '84c5c846e543066678a8fd8391171fb730886852',
+ 'skia_revision': '636ee33902ddc27fd9683d250ceb23f65467488b',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling V8
# and whatever else without interference from each other.
- 'v8_revision': 'a8a51d8837b31292af4a420039f154967f86c7eb',
+ 'v8_revision': '51df567dd66bdea870c9a93f445ee50b7bbd6735',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling swarming_client
# and whatever else without interference from each other.
@@ -1241,7 +1241,7 @@ deps = {
Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'),
'src-internal': {
- 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@eaeb005f029e576064c33c1ff7008c2102962bb2',
+ 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@bad94f342e267c3ef91b4a5d35db8189a6d0f714',
'condition': 'checkout_src_internal',
},
diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE
index 590de91593e..61421da80c7 100644
--- a/chromium/build/util/LASTCHANGE
+++ b/chromium/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=4564075605dd87605df1f8c00bf7161c9c4eb41b-refs/branch-heads/3683@{#721}
+LASTCHANGE=a18e9c821f68671054de122c6b20464b639f37da-refs/branch-heads/3683@{#836}
diff --git a/chromium/build/util/LASTCHANGE.committime b/chromium/build/util/LASTCHANGE.committime
index 3e22592f58a..88b2a0fe230 100644
--- a/chromium/build/util/LASTCHANGE.committime
+++ b/chromium/build/util/LASTCHANGE.committime
@@ -1 +1 @@
-1551663520 \ No newline at end of file
+1552867762 \ No newline at end of file
diff --git a/chromium/chrome/VERSION b/chromium/chrome/VERSION
index 1c8737afe1c..0369b692a6b 100644
--- a/chromium/chrome/VERSION
+++ b/chromium/chrome/VERSION
@@ -1,4 +1,4 @@
MAJOR=73
MINOR=0
BUILD=3683
-PATCH=64
+PATCH=83
diff --git a/chromium/chrome/app/resources/chromium_strings_te.xtb b/chromium/chrome/app/resources/chromium_strings_te.xtb
index 6a1b0874d50..7f84bacc691 100644
--- a/chromium/chrome/app/resources/chromium_strings_te.xtb
+++ b/chromium/chrome/app/resources/chromium_strings_te.xtb
@@ -17,7 +17,7 @@
<translation id="151962892725702025">మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున, Chromium OS, మీ డేటాను సింక్ చేయ‌లేక‌పోయింది.</translation>
<translation id="1585657529869845941">ఇది కనిపిస్తే, <ph name="BEGIN_BOLD" />అయిన కూడా మార్చు<ph name="END_BOLD" />ను క్లిక్ చేయండి</translation>
<translation id="1668054258064581266">Chromium నుండి మీ ఖాతాను తీసివేసిన తర్వాత, ప్రభావవంతం కావడానికి మీరు మీ తెరిచిన ట్యాబ్‌లను మళ్లీ లోడ్ చేయాల్సి రావచ్చు.</translation>
-<translation id="1688750314291223739">మీ వ్యక్తిగతీకరించిన బ్రౌజర్ ఫీచ‌ర్‌ల‌ను వెబ్‌లో సేవ్ చేయడానికి సమకాలీకణను సెటప్ చేయండి. వాటిని ఏదైనా కంప్యూటర్‌లోని Chromium నుండి యాక్సెస్‌ చేయండి.</translation>
+<translation id="1688750314291223739">వెబ్‌కు మీ వ్యక్తిగతీకరించిన బ్రౌజర్ ఫీచర్‌లను సేవ్ చేసి, వాటిని ఏదైనా కంప్యూటర్‌లోని Chromium నుండి యాక్సెస్ చేయడానికి సింక్‌ను సెటప్ చేయండి.</translation>
<translation id="1708666629004767631">Chromium యొక్క కొత్త సురక్షితమైన వెర్షన్ అందుబాటులో ఉంది.</translation>
<translation id="1766096484055239003">అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు</translation>
<translation id="1774152462503052664">నేపథ్యంలో Chromiumని అమలు చేయడానికి అనుమతించు</translation>
@@ -207,7 +207,7 @@
దయచేసి తదుపరి సూచనల కోసం <ph name="ACCOUNT_EMAIL" /> లో మీ ఇమెయిల్‌ను చూడండి.</translation>
<translation id="7448255348454382571">Chromium OSని మళ్లీ ప్రారంభించండి</translation>
<translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium Dev</translation>
-<translation id="7451052299415159299">ఈ సైట్ కోసం మీ కెమెరాని యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం</translation>
+<translation id="7451052299415159299">ఈ సైట్ కోసం మీ కెమెరాను యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం</translation>
<translation id="7471302858145901434">{0,plural, =1{ఒక రోజులో Chromium OSని మళ్లీ ప్రారంభించండి}other{# రోజుల్లో Chromium OSని మళ్లీ ప్రారంభించండి}}</translation>
<translation id="7483335560992089831">ప్రస్తుతం అమలు అవుతోన్న అదే Chromium వెర్షన్‌ను ఇన్‌స్టాల్ చేయలేరు. దయచేసి Chromiumను మూసివేసి, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="7549178288319965365">Chromium OS గురించి</translation>
@@ -266,7 +266,7 @@
<translation id="9089354809943900324">Chromium కాలం చెల్లినది</translation>
<translation id="91086099826398415">కొత్త Chromium &amp;ట్యాబ్‌లో లింక్‌ని తెరువు</translation>
<translation id="911206726377975832">మీ బ్రౌజింగ్ డేటాను కూడా తొలగించాలా?</translation>
-<translation id="918373042641772655"><ph name="USERNAME" />ని డిస్‌కనెక్ట్ చేయడం వలన ఈ పరికరంలో నిల్వ చేయబడిన మీ చరిత్ర, బుక్‌మార్క్‌లు, సెట్టింగ్‌లు, ఇతర Chromium డేటా క్లియర్ చేయబడతాయి. మీ Google ఖాతాలో నిల్వ చేయబడిన డేటా క్లియర్ చేయబడదు. దాన్ని <ph name="GOOGLE_DASHBOARD_LINK" />Google డాష్‌బోర్డ్<ph name="END_GOOGLE_DASHBOARD_LINK" />లో నిర్వహించవచ్చు.</translation>
+<translation id="918373042641772655"><ph name="USERNAME" />ను డిస్‌కనెక్ట్ చేయడం వలన ఈ పరికరంలో నిల్వ చేయబడిన మీ చరిత్ర, బుక్‌మార్క్‌లు, సెట్టింగ్‌లు మరియు ఇతర Chromium డేటా క్లియర్ చేయబడతాయి. మీ Google ఖాతాలో నిల్వ చేయబడిన డేటా క్లియర్ చేయబడదు మరియు దాన్ని <ph name="GOOGLE_DASHBOARD_LINK" />Google డాష్‌బోర్డ్<ph name="END_GOOGLE_DASHBOARD_LINK" />లో నిర్వహించవచ్చు.</translation>
<translation id="9190841055450128916">Chromium (mDNS-In)</translation>
<translation id="9197815481970649201">మీరు ఇప్పుడు Chromiumకు సైన్ ఇన్ చేసారు</translation>
<translation id="93478295209880648">Chromiumకి ఇప్పుడు Windows XP లేదా Windows Vistaలో మద్దతు లేనందున ఇది సరిగ్గా పని చేయకపోవచ్చు</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_ca.xtb b/chromium/chrome/app/resources/generated_resources_ca.xtb
index f83990b3df4..ff146987970 100644
--- a/chromium/chrome/app/resources/generated_resources_ca.xtb
+++ b/chromium/chrome/app/resources/generated_resources_ca.xtb
@@ -1349,7 +1349,7 @@
<translation id="3011488081941333749">Les galetes del domini <ph name="DOMAIN" /> s'esborraran en sortir-ne</translation>
<translation id="3012631534724231212">(iframe)</translation>
<translation id="3012804260437125868">Només les connexions segures dins del mateix lloc</translation>
-<translation id="3012917896646559015">Contacteu immediatament amb el fabricant del maquinari per enviar l'ordinador a un taller de reparació.</translation>
+<translation id="3012917896646559015">Contacteu immediatament amb el fabricant del maquinari per enviar l'ordinador a un centre de reparació.</translation>
<translation id="3013291976881901233">Dispositius MIDI</translation>
<translation id="3015639418649705390">Torna a iniciar ara</translation>
<translation id="3016641847947582299">Component actualitzat</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_es-419.xtb b/chromium/chrome/app/resources/generated_resources_es-419.xtb
index edf0f02e1b6..1294870bd5a 100644
--- a/chromium/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chromium/chrome/app/resources/generated_resources_es-419.xtb
@@ -659,7 +659,7 @@
<translation id="1970368523891847084">Accediste al modo de video</translation>
<translation id="197288927597451399">Conservar</translation>
<translation id="1974043046396539880">Puntos de distribución de la CRL</translation>
-<translation id="1974060860693918893">Avanzada</translation>
+<translation id="1974060860693918893">Configuración avanzada</translation>
<translation id="1974821797477522211">Conectarse a una red</translation>
<translation id="197560921582345123">Se puede editar</translation>
<translation id="1975841812214822307">Eliminar…</translation>
@@ -1854,7 +1854,7 @@
<translation id="3785071023202624850">{NUM_TABS,plural, =1{Silenciar pestaña}other{Silenciar pestañas}}</translation>
<translation id="3785308913036335955">Mostrar acceso directo a las aplicaciones</translation>
<translation id="3785727820640310185">Se guardaron contraseñas para este sitio</translation>
-<translation id="3786301125658655746">No estás conectado.</translation>
+<translation id="3786301125658655746">No tienes conexión.</translation>
<translation id="3788401245189148511">Podría:</translation>
<translation id="3789841737615482174">Instalar</translation>
<translation id="379082410132524484">La tarjeta está vencida</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_et.xtb b/chromium/chrome/app/resources/generated_resources_et.xtb
index 8e3335f96a1..947c262cb43 100644
--- a/chromium/chrome/app/resources/generated_resources_et.xtb
+++ b/chromium/chrome/app/resources/generated_resources_et.xtb
@@ -718,7 +718,7 @@
<translation id="2075959085554270910">Võimaldab lubada/keelata funktsioonid Koputa klõpsamiseks ja Puudutusega lohistamine</translation>
<translation id="2076269580855484719">Peida pistikprogramm</translation>
<translation id="2076672359661571384">Keskmine (soovitatud)</translation>
-<translation id="2077129598763517140">Kasuta võimaluse korral riistvarakiirendust</translation>
+<translation id="2077129598763517140">Kasuta võimaluse korral riistvaralist kiirendust</translation>
<translation id="2078019350989722914">Hoiata enne väljumist (<ph name="KEY_EQUIVALENT" />)</translation>
<translation id="2079053412993822885">Kui kustutate ühe enda sertifikaatidest, ei saa te enam seda enda tuvastamiseks kasutada.</translation>
<translation id="2079545284768500474">Võta tagasi</translation>
diff --git a/chromium/chrome/app/resources/generated_resources_te.xtb b/chromium/chrome/app/resources/generated_resources_te.xtb
index 55e9a9f511d..c7a9a7068bd 100644
--- a/chromium/chrome/app/resources/generated_resources_te.xtb
+++ b/chromium/chrome/app/resources/generated_resources_te.xtb
@@ -60,9 +60,9 @@
<translation id="1076698951459398590">థీమ్‌ను ప్రారంభించు</translation>
<translation id="1076818208934827215">Microsoft Internet Explorer</translation>
<translation id="1079766198702302550">ఎల్లప్పుడూ కెమెరా యాక్సెస్‌ను బ్లాక్ చేయి</translation>
-<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> మీ Chrome సెట్టింగ్‌లను వాటి అసలు డిఫాల్ట్‌లకు పునరుద్ధరించాలనుకుంటోంది. ఇది మీ హోమ్ పేజీని, కొత్త ట్యాబ్ పేజీని, శోధన ఇంజిన్‌ను రీసెట్ చేస్తుంది. మీ ఎక్స్‌టెన్ష‌న్‌లను నిలిపివేస్తుంది. ట్యాబ్‌లన్నింటినీ అన్‌పిన్ చేస్తుంది. ఇది కుక్కీలు, కంటెంట్, సైట్ డేటా వంటి ఇతర తాత్కాలిక మరియు కాష్ చేసిన డేటాను కూడా తీసివేస్తుంది.</translation>
+<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> మీ Chrome సెట్టింగ్‌లను వాటి అసలు డిఫాల్ట్‌లకు పునరుద్ధరించాలనుకుంటోంది. ఇది మీ హోమ్ పేజీని, కొత్త ట్యాబ్ పేజీని మరియు శోధన ఇంజిన్‌ను రీసెట్ చేస్తుంది, మీ ఎక్స్‌టెన్షన్‌లను నిలిపివేస్తుంది మరియు ట్యాబ్‌లు అన్నింటినీ అన్‌పిన్ చేస్తుంది. ఇది కుక్కీలు, కంటెంట్ మరియు సైట్ డేటా వంటి ఇతర తాత్కాలిక మరియు కాష్ చేసిన డేటాను కూడా తీసివేస్తుంది.</translation>
<translation id="1082725763867769612">ఆఫ్‌లైన్ ఫైల్‌లు</translation>
-<translation id="1084824384139382525">లింక్ చిరు&amp;నామాను కాపీ చెయ్యి</translation>
+<translation id="1084824384139382525">లింక్ చిరు&amp;నామాను కాపీ చేయి</translation>
<translation id="1085697365578766383">వర్చువల్ మెషిన్‌ను ప్రారంభించడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="1089439967362294234">పాస్‌వర్డ్‌ని మార్చు</translation>
<translation id="1090126737595388931">నేపథ్య అనువర్తనాలు ఏవి అమలులో లేవు</translation>
@@ -77,7 +77,7 @@
<translation id="1112420131909513020">బ్యాక్‌గ్రౌండ్‌ ట్యాబ్ బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
<translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation>
<translation id="1114202307280046356">చతుర్భుజం</translation>
-<translation id="1114335938027186412">మీ కంప్యూటర్ ట్రస్టెడ్ ప్లాట్‌ఫారమ్ మాడ్యూల్ (TPM) భద్రతా పరికరాన్ని కలిగి ఉంది. ఇది Chrome OSలో అనేక కీలకమైన భద్రతా ఫీచ‌ర్‌ల‌ను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm</translation>
+<translation id="1114335938027186412">మీ కంప్యూటర్ ట్రస్టెడ్ ప్లాట్‌ఫారమ్ మాడ్యూల్ (TPM) భద్రతా పరికరాన్ని కలిగి ఉంది, ఇది Chrome OSలో అనేక కీలకమైన భద్రతా ఫీచ‌ర్‌ల‌ను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm</translation>
<translation id="1114525161406758033">మూత మూసి ఉన్నప్పుడు స్లీప్ స్థితికి వెళ్లు</translation>
<translation id="1116639326869298217">మీ గుర్తింపును ధృవీకరించడం సాధ్యపడలేదు</translation>
<translation id="1116694919640316211">గురించి</translation>
@@ -101,7 +101,7 @@
<translation id="1140746652461896221">మీరు సందర్శించే ఏ పేజీలో అయినా కంటెంట్‌ని బ్లాక్ చేయండి</translation>
<translation id="1143142264369994168">సర్టిఫికెట్ సంతకందారు</translation>
<translation id="1145292499998999162">ప్లగ్ఇన్‌ బ్లాక్ చేయబడింది</translation>
-<translation id="1145532888383813076">మీ పరికరం, యాప్‌లు మరియు వెబ్‌ను వెతకండి.</translation>
+<translation id="1145532888383813076">మీ పరికరం, యాప్‌లు మరియు వెబ్‌ను శోధించండి.</translation>
<translation id="1146204723345436916">HTML ఫైల్ నుండి బుక్‌మార్క్‌లను దిగుమతి చేయి...</translation>
<translation id="114721135501989771">Chromeలో Google స్మార్ట్‌లను పొందండి</translation>
<translation id="1148097584170732637"><ph name="FILE_COUNT" /> కనుగొనబడ్డాయి.
@@ -137,7 +137,7 @@
<translation id="1186771945450942097">హానికరమైన సాఫ్ట్‌వేర్‌ని తీసివేయండి</translation>
<translation id="1187722533808055681">ఇన్‌యాక్టివ్‌ మేల్కొలుపులు</translation>
<translation id="1188807932851744811">లాగ్ అప్‌లోడ్ కాలేదు.</translation>
-<translation id="1189418886587279221">మీ పరికరాన్ని సులభంగా ఉపయోగించడానికి యాక్సెస్‌ సౌల‌భ్య‌ ఫీచ‌ర్‌ల‌ను ప్రారంభించండి.</translation>
+<translation id="1189418886587279221">మీ పరికరాన్ని సులభంగా ఉపయోగించడానికి యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను ప్రారంభించండి.</translation>
<translation id="1190144681599273207">ఈ ఫైల్‌ను పొందడానికి మొబైల్ డేటాలో సుమారుగా <ph name="FILE_SIZE" /> ఉపయోగించబడుతుంది.</translation>
<translation id="11901918071949011">{NUM_FILES,plural, =1{మీ కంప్యూటర్‌లో నిల్వ చేసిన ఫైల్‌ను యాక్సెస్ చేయండి}other{ మీ కంప్యూటర్‌లో నిల్వ చేసిన # ఫైల్‌లను యాక్సెస్ చేయండి}}</translation>
<translation id="1190660338026981543"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ద్వారా సంస్థ నిర్వహణకు మీ <ph name="DEVICE_TYPE" /> విజయవంతంగా నమోదు చేయబడింది.</translation>
@@ -155,11 +155,11 @@
<translation id="1211364473545090084">అజ్ఞాత విండోలో మీ బ్రౌజింగ్ చరిత్రను సేవ్ చేయకుండానే వెబ్‌ని ఉపయోగించండి</translation>
<translation id="1213037489357051291"><ph name="NUM_FINGERPRINTS" /> వేలిముద్రలు సెటప్ చేయబడ్డాయి</translation>
<translation id="1215411991991485844">కొత్త బ్యాక్‌గ్రౌండ్‌ యాప్ జోడించబడింది</translation>
-<translation id="1216659994753476700">మమ్మల్ని క్షమించండి. మేము మీ ప్రొఫైల్‌ను యాక్సెస్ చేయలేకపోయాము. ఈ పరికరంలో అయిన ఫైల్‌లు మరియు డేటా కోల్పోయి ఉండవచ్చు.<ph name="BR" />
+<translation id="1216659994753476700">మమ్మల్ని క్షమించండి. మేము మీ ప్రొఫైల్‌ను యాక్సెస్‌ చేయలేకపోయాము. ఈ పరికరంలో నిల్వ చేయబడిన ఫైల్‌లు మరియు డేటా కోల్పోయి ఉండవచ్చు.<ph name="BR" />
<ph name="BR" />
మీరు మీ ప్రొఫైల్‌ను మళ్లీ సెటప్ చేయాల్సి ఉంటుంది.<ph name="BR" />
<ph name="BR" />
- ఈ సమస్యను పరిష్కరించడంలో మాకు సహాయపడటానికి, దయచేసి మీ అభిప్రాయాన్ని తర్వాతి స్క్రీన్‌లో పంపండి.</translation>
+ తదుపరి స్క్రీన్‌లో, దయచేసి ఈ సమస్యను పరిష్కరించడంలో మాకు సహాయపడటానికి అభిప్రాయాన్ని పంపండి.</translation>
<translation id="1217668622537098248">చర్య తర్వాత తిరిగి ఎడమ క్లిక్ వద్దకు మారు</translation>
<translation id="121783623783282548">పాస్‌‌వర్డ్‌లు సరిపోలలేదు.</translation>
<translation id="1218839827383191197"><ph name="BEGIN_PARAGRAPH1" />ఈ పరికర స్థానాన్ని అంచనా వేయడంలో సహాయపడటానికి Wi‑Fi, మొబైల్ నెట్‌వర్క్‌లు మరియు సెన్సార్‌ల వంటి మూలాధారాలను Google స్థాన సేవ ఉపయోగిస్తుంది.<ph name="END_PARAGRAPH1" />
@@ -200,7 +200,7 @@
<translation id="127668050356036882">మీ అన్ని విండోలను మూసివేయండి</translation>
<translation id="1277908057200820621">పరికర జాబితాను చూడండి</translation>
<translation id="1280820357415527819">మొబైల్ నెట్‌వర్క్‌ల కోసం వెతుకుతోంది</translation>
-<translation id="1285320974508926690">ఈ సైట్‌ను అనువదించవద్దు</translation>
+<translation id="1285320974508926690">ఈ సైట్‌ను ఎప్పటికీ అనువదించవద్దు</translation>
<translation id="1285484354230578868">మీ Google డిస్క్ ఖాతాలో డేటాను నిల్వ చేయండి</translation>
<translation id="1288037062697528143">సూర్యాస్తమయ సమయానికి రాత్రి కాంతి స్వయంచాలకంగా ఆన్ అవుతుంది</translation>
<translation id="1288300545283011870">ప్రసంగ లక్షణాలు</translation>
@@ -215,7 +215,7 @@
<translation id="1303101771013849280">HTML ఫైల్‌ని బుక్‌మార్క్ చేస్తుంది</translation>
<translation id="1303671224831497365">బ్లూటూత్ పరికరాలు ఏవీ కనుగొనబడలేదు</translation>
<translation id="1306606229401759371">సెట్టింగ్‌లను మార్చు</translation>
-<translation id="1307559529304613120">అయ్యో! సిస్టమ్ ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్ టోకెన్‌ను నిల్వ చేయడంలో విఫలమైంది.</translation>
+<translation id="1307559529304613120">అయ్యో! సిస్టమ్ ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్‌ టోకెన్‌ను నిల్వ చేయడంలో విఫలమైంది.</translation>
<translation id="1307931752636661898">Linux ఫైల్‌లను చూడటం సాధ్యపడలేదు</translation>
<translation id="1313405956111467313">ఆటోమేటిక్‌ ప్రాక్సీ కాన్ఫిగరేషన్</translation>
<translation id="131364520783682672">Caps Lock</translation>
@@ -277,7 +277,7 @@
<translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (పర్యవేక్షించబడేవారు)</translation>
<translation id="1406500794671479665">ధృవీకరిస్తోంది...</translation>
<translation id="1407489512183974736">మధ్యకు కత్తిరించు</translation>
-<translation id="1408504635543854729">ఫైల్‌ల‌ యాప్‌‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు.</translation>
+<translation id="1408504635543854729">ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు.</translation>
<translation id="1408789165795197664">అధునాతన...</translation>
<translation id="1409390508152595145">పర్యవేక్షించబడే వినియోగదారుని సృష్టించు</translation>
<translation id="1410197035576869800">యాప్ చిహ్నం</translation>
@@ -285,7 +285,7 @@
<translation id="1411668397053040814">VRలో Chromeను ఉపయోగించడానికి Daydream కీబోర్డ్‌ను ఇన్‌స్టాల్ చేయండి లేదా అప్‌డేట్ చేయండి</translation>
<translation id="1414648216875402825">మీరు <ph name="PRODUCT_NAME" /> యొక్క అస్థిర వెర్షన్‌కు అప్‌డేట్ చేస్తున్నారు, ఇందులో పురోగతిలో ఉన్న ఫీచర్‌లు ఉంటాయి. క్రాష్‌లు మరియు ఊహించని బగ్‌లు ఏర్పడవచ్చు. దయచేసి జాగ్రత్తగా కొనసాగండి.</translation>
<translation id="1415708812149920388">క్లిప్‌బోర్డ్‌ను చదివే యాక్సెస్ నిరాకరించబడింది</translation>
-<translation id="1415990189994829608"><ph name="EXTENSION_NAME" /> (ఎక్స్‌టెన్షన్‌ ID "<ph name="EXTENSION_ID" />") ఈ రకమైన సెషన్‌లో అనుమతించబడదు.</translation>
+<translation id="1415990189994829608"><ph name="EXTENSION_NAME" /> (ఎక్స్‌టెన్షన్ ID "<ph name="EXTENSION_ID" />")కు ఈ రకమైన సెషన్‌లో అనుమతి లేదు.</translation>
<translation id="1416836038590872660">EAP-MD5</translation>
<translation id="1420834118113404499">మీడియా లైసెన్స్‌లు</translation>
<translation id="1420920093772172268">జత చేయడాన్ని అనుమతించడానికి <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
@@ -471,7 +471,7 @@
<translation id="1688867105868176567">సైట్ డేటాని క్లియర్ చేయాలా?</translation>
<translation id="1688935057616748272">అక్షరాన్ని టైప్ చేయండి</translation>
<translation id="168991973552362966">సమీపంలోని ప్రింటర్‌ను జోడించండి</translation>
-<translation id="1689945336726856614">&amp;URLని కాపీ చేయండి</translation>
+<translation id="1689945336726856614">&amp;URLను కాపీ చేయండి</translation>
<translation id="1692115862433274081">మరో ఖాతాను ఉపయోగించు</translation>
<translation id="1692602667007917253">అయ్యో, ఏదో తప్పు జరిగింది</translation>
<translation id="1692799361700686467">బహుళ సైట్‌ల నుండి కుకీలు అనుమతించబడ్డాయి.</translation>
@@ -575,7 +575,7 @@
<translation id="1838374766361614909">శోధనను తీసివేయి</translation>
<translation id="1838709767668011582">Google సైట్</translation>
<translation id="1839704667838141620">ఈ ఫైల్ భాగస్వామ్యం చేయబడే విధానాన్ని మార్చండి</translation>
-<translation id="1841545962859478868">పరికర నిర్వాహకుడు క్రింది వాటిని పర్యవేక్షించవచ్చు:</translation>
+<translation id="1841545962859478868">పరికర నిర్వాహకుడు కింది వాటిని పర్యవేక్షించవచ్చు:</translation>
<translation id="1841616161104323629">పరికర రికార్డ్ కనుగొనబడటం లేదు.</translation>
<translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> నిలిపివేయబడింది</translation>
<translation id="1842766183094193446">మీరు ఖచ్చితంగా డెమో మోడ్‌ని ప్రారంభించాలనుకుంటున్నారా?</translation>
@@ -653,7 +653,7 @@
<translation id="1944921356641260203">అప్‌డేట్ కనుగొనబడింది</translation>
<translation id="1954813140452229842">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మీ ఆధారాలను సరిచూసుకుని, మళ్లీ ప్రయత్నించండి.</translation>
<translation id="1956050014111002555">ఫైల్ బహుళ ప్రమాణపత్రాలను కలిగి ఉంది, వీటిలో ఏది దిగుమతి చెయ్యబడింది:</translation>
-<translation id="1956390763342388273">ఇది "<ph name="FOLDER_PATH" />" నుండి అన్ని ఫైల్‌లను అప్‌లోడ్ చేస్తుంది. మీరు సైట్‌ను విశ్వసిస్తే మాత్రమే దీన్ని చేయండి.</translation>
+<translation id="1956390763342388273">ఇది "<ph name="FOLDER_PATH" />" నుండి అన్ని ఫైల్‌లను అప్‌లోడ్ చేస్తుంది. మీరు సైట్‌ను విశ్వసిస్తే మాత్రమే దీనిని చేయండి.</translation>
<translation id="1962233722219655970">ఈ పేజీ మీ కంప్యూటర్‌లో పని చేయని స్థానిక క్లయింట్ యాప్‌ను ఉపయోగిస్తుంది.</translation>
<translation id="1962969542251276847">స్క్రీన్‌ను లాక్ చేయి</translation>
<translation id="1963227389609234879">అన్నీ తొలగించు</translation>
@@ -670,7 +670,7 @@
<translation id="1976323404609382849">బహుళ సైట్‌ల నుండి కుకీలు బ్లాక్ చేయబడ్డాయి.</translation>
<translation id="1977965994116744507">మీ <ph name="DEVICE_TYPE" />ను అన్‌లాక్ చేయడానికి మీ ఫోన్‌ను సమీపంలోకి తీసుకురండి.</translation>
<translation id="1979280758666859181">మీరు <ph name="PRODUCT_NAME" /> పాత వెర్షన్ ఉన్న ఛానెల్‌కు మారుతున్నారు. ఈ ఛానెల్ వెర్షన్, మీ పరికరంలో ప్రస్తుతం ఇన్‌స్టాల్ అయిన వెర్షన్‌కు సరిపోలినప్పుడు ఛానెల్ మార్పు వర్తిస్తుంది.</translation>
-<translation id="1983959805486816857">మీరు క్రొత్త పర్యవేక్షించబడే వినియోగదారును సృష్టించిన తర్వాత, ఏ సమయంలో అయినా ఏ పరికరం నుండి అయినా <ph name="MANAGEMENT_URL" />లో సెట్టింగ్‌లను నిర్వహించవచ్చు.</translation>
+<translation id="1983959805486816857">మీరు కొత్త‌ పర్యవేక్షించబడే వినియోగదారును సృష్టించిన తర్వాత, ఏ సమయంలో అయినా ఏ పరికరం నుండి అయినా <ph name="MANAGEMENT_URL" />లో సెట్టింగ్‌లను నిర్వహించవచ్చు.</translation>
<translation id="1987317783729300807">ఖాతాలు</translation>
<translation id="1989112275319619282">బ్రౌజ్ చేయి</translation>
<translation id="1992397118740194946">సెట్ చెయ్యలేదు</translation>
@@ -702,7 +702,7 @@
<translation id="204497730941176055">Microsoft సర్టిఫికెట్ టెంప్లేట్ పేరు</translation>
<translation id="2045117674524495717">కీబోర్డ్ షార్ట్‌కట్ సహాయం</translation>
<translation id="2045969484888636535">కుకీలను నిరోధించడాన్ని కొనసాగించండి</translation>
-<translation id="204622017488417136">మీ పరికరం మునుపు ఇన్‌స్టాల్ చేసిన Chrome వెర్షన్‌కు తిరిగి మార్చబడింది. అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడతాయి. దీనిని రద్దు చేయడం సాధ్యపడదు.</translation>
+<translation id="204622017488417136">మీ పరికరం మునుపు ఇన్‌స్టాల్ చేసిన Chrome వెర్షన్‌కు తిరిగి మార్చబడింది. అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడుతుంది. దీన్ని రద్దు చేయడం సాధ్యపడదు.</translation>
<translation id="2048182445208425546">మీ నెట్‌వర్క్ ట్రాఫిక్‌ను యాక్సెస్ చేయండి</translation>
<translation id="2048653237708779538">చర్య అందుబాటులో లేదు</translation>
<translation id="204914487372604757">షార్ట్‌కట్‌ను సృష్టించు</translation>
@@ -875,7 +875,7 @@
<translation id="2282155092769082568">ఆటోకాన్ఫిగరేషన్ URL:</translation>
<translation id="228758327756499171"><ph name="NUMBER_OF_MORE_APPS" /> యాప్‌లు</translation>
<translation id="2288181517385084064">వీడియో రికార్డర్‌కు మార్చు</translation>
-<translation id="2288735659267887385">ప్రాప్యత సెట్టింగ్‌లు</translation>
+<translation id="2288735659267887385">యాక్సెస్‌ సెట్టింగ్‌లు</translation>
<translation id="2291538123825441971"><ph name="NUMBER_OF_FILES" /> ఫైల్‌లను తెరుస్తోంది.</translation>
<translation id="2292848386125228270"><ph name="PRODUCT_NAME" />ని ఒక సాధారణ వినియోగదారుగా దయచేసి ప్రారంభించండి. డెవలపర్‌గా వాడటానికి మీరు రూట్ లాగా అమలు చేయాలనుకుంటే, --no-sandbox ఫ్లాగ్‌తో మళ్లీ అమలు చేయండి.</translation>
<translation id="2294358108254308676">మీరు <ph name="PRODUCT_NAME" />ను ఇన్‌స్టాల్ చేయాల‌నుకుంటున్నారా?</translation>
@@ -1088,7 +1088,7 @@
<translation id="2619761439309613843">రోజూ రిఫ్రెష్ అవుతుంది</translation>
<translation id="2620090360073999360">Google డిస్క్‌ను ఈ సమయంలో చేరుకోవడం సాధ్యపడదు.</translation>
<translation id="2620436844016719705">సిస్టమ్</translation>
-<translation id="26224892172169984">ప్రోటోకాల్స్ నిర్వహించడానికి ఏ సైట్‌ని అనుమతించవద్దు</translation>
+<translation id="26224892172169984">ప్రోటోకాల్స్ నిర్వహించడానికి ఏ సైట్‌నూ అనుమతించవద్దు</translation>
<translation id="2624142942574147739">ఈ పేజీ మీ కెమెరా మరియు మైక్రోఫోన్‌ను ప్రాప్యత చేస్తోంది.</translation>
<translation id="2626799779920242286">దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి.</translation>
<translation id="2630681426381349926">ప్రారంభించడానికి Wi-Fiకి కనెక్ట్ చేయండి</translation>
@@ -1172,14 +1172,14 @@
<translation id="2737363922397526254">కుదించు...</translation>
<translation id="2738771556149464852">తరువాత కాదు</translation>
<translation id="2739191690716947896">డీబగ్</translation>
-<translation id="2739240477418971307">మీ ప్రాప్యత సెట్టింగ్‌లను మార్చడం</translation>
+<translation id="2739240477418971307">మీ యాక్సెస్‌ సెట్టింగ్‌లను మార్చడం</translation>
<translation id="2740393541869613458">పర్యవేక్షించబడే వినియోగదారు సందర్శించిన వెబ్‌సైట్‌లను సమీక్షించండి మరియు</translation>
<translation id="2743387203779672305">క్లిప్‌బోర్డ్‌కు కాపీ చేయి</translation>
<translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
<translation id="2749756011735116528"><ph name="PRODUCT_NAME" />కు సైన్ ఇన్ చేయండి</translation>
<translation id="2749881179542288782">స్పెల్ చెక్‌తో పాటు వ్యాకరణాన్ని కూడా తనిఖీ చేయి</translation>
<translation id="2751739896257479635">EAP 2వ దశ ప్రమాణీకరణ</translation>
-<translation id="2755367719610958252">ప్రాప్యత లక్షణాలను నిర్వహించండి</translation>
+<translation id="2755367719610958252">యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను నిర్వహించండి</translation>
<translation id="2755628026949580719">మీ భద్రతా కీ కనుక జాబితా చేయబడకుంటే, కనీసం 5 సెకన్ల పాటు కీ బటన్‌ని నొక్కండి.</translation>
<translation id="275662540872599901">స్క్రీన్ ఆఫ్‌లో ఉంది</translation>
<translation id="2761898608071930085">మరో ఖాతాను ఉపయోగించు</translation>
@@ -1319,7 +1319,7 @@
<translation id="2972557485845626008">ఫర్మ్‌వేర్</translation>
<translation id="2972581237482394796">&amp;పునరావృతం</translation>
<translation id="2972642118232180842">ముఖ్యమైన కంటెంట్‌ను మాత్రమే అమలు చేయి (సిఫార్సు చేస్తున్నాము)</translation>
-<translation id="2973324205039581528">సైట్‌ని మ్యూట్ చేయండి</translation>
+<translation id="2973324205039581528">సైట్‌ను మ్యూట్ చేయండి</translation>
<translation id="2977480621796371840">గుంపు నుండి తీసివేయి</translation>
<translation id="2979639724566107830">కొత్త విండోలో తెరువు</translation>
<translation id="2981113813906970160">పెద్ద మౌస్ కర్సర్‌ను చూపు</translation>
@@ -1394,16 +1394,16 @@
<translation id="3083193146044397360">మీ భద్రత నిమిత్తం తాత్కాలికంగా బ్లాక్ చేయబడింది</translation>
<translation id="3084548735795614657">ఇన్‌స్టాల్ చేయడానికి వదలండి</translation>
<translation id="3084771660770137092">Chrome మెమరీ దాటిపోయి ఉండవచ్చు లేదా వేరొక కారణంచేత ఆ వెబ్‌పేజీ ప్రాసెస్ ముగించబడి ఉండవచ్చు. కొనసాగించడానికి మళ్లీ లోడ్ చేయండి లేదా మరొక పేజీకి వెళ్ళండి.</translation>
-<translation id="3085412380278336437">సైట్ మీ కెమెరాని ఉపయోగించవచ్చు</translation>
+<translation id="3085412380278336437">సైట్ మీ కెమెరాను ఉపయోగించవచ్చు</translation>
<translation id="3085752524577180175">SOCKS హోస్ట్</translation>
<translation id="3088325635286126843">&amp;పేరుమార్చు...</translation>
<translation id="3089137131053189723">శోధన తీసివేయబడింది</translation>
<translation id="3090193911106258841">ఆడియో, వీడియో ఇన్‌పుట్ యాక్సెస్‌ చేయబడుతోంది</translation>
-<translation id="3090819949319990166">బాహ్య crx ఫైల్‌ను <ph name="TEMP_CRX_FILE" />కి కాపీ చేయడం సాధ్యపడదు.</translation>
+<translation id="3090819949319990166">బాహ్య crx ఫైల్‌ను <ph name="TEMP_CRX_FILE" />‌కు కాపీ చేయడం సాధ్యపడదు.</translation>
<translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" జత చేయబడింది</translation>
<translation id="3101709781009526431">తేదీ మరియు సమయం</translation>
<translation id="3104763887980088552">కార్యకలాప లాగ్</translation>
-<translation id="310671807099593501">సైట్, బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
+<translation id="310671807099593501">సైట్ బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
<translation id="3115128645424181617">మీ ఫోన్‌ను కనుగొనలేము. అది చేతికి అందేంత దగ్గర్లో ఉందని, బ్లూటూత్ ఆన్ చేసి ఉన్నట్లు నిర్ధారించుకోండి.</translation>
<translation id="3115147772012638511">కాష్ కోసం వేచి ఉంది...</translation>
<translation id="3118319026408854581"><ph name="PRODUCT_NAME" /> సహాయం</translation>
@@ -1413,7 +1413,7 @@
<translation id="3122496702278727796">డేటా డైరెక్టరీని సృష్టించడంలో విఫలమైంది</translation>
<translation id="3124111068741548686">వినియోగదారు నిర్వహించేవి</translation>
<translation id="3126026824346185272">Ctrl</translation>
-<translation id="3127156390846601284">దీని వలన చూపబడిన అన్ని సైట్‌ల కోసం మీ పరికరంలో నిల్వ చేయబడిన ఏ డేటా అయినా తొలగిం</translation>
+<translation id="3127156390846601284">దీని వలన చూపబడిన అన్ని సైట్‌ల కోసం మీ పరికరంలో నిల్వ చేయబడిన ఏ డేటా అయినా తొలగించబడుతుంది. మీరు కొనసాగించదలిచారా?</translation>
<translation id="3127919023693423797">ప్రమాణీకరిస్తోంది...</translation>
<translation id="3129173833825111527">ఎడమ సరిహద్దు</translation>
<translation id="3130528281680948470">మీ పరికరం రీసెట్ చేయబడుతుంది మరియు అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడుతుంది. దీన్ని రద్దు చేయడం సాధ్యపడదు.</translation>
@@ -1433,7 +1433,7 @@
<translation id="3151539355209957474">ప్రారంభ సమయం</translation>
<translation id="3151562827395986343">చరిత్ర, కుక్కీలు, కాష్ మొదలైన వాటిని తీసివేస్తుంది</translation>
<translation id="3151786313568798007">దృగ్విన్యాసం</translation>
-<translation id="3153862085237805241">కార్డ్‌ని సేవ్ చేయండి</translation>
+<translation id="3153862085237805241">కార్డ్‌ను సేవ్ చేయండి</translation>
<translation id="3154351730702813399">పరికర నిర్వాహకుడు మీ బ్రౌజింగ్ కార్యకలాపాన్ని పర్యవేక్షించవచ్చు.</translation>
<translation id="3154429428035006212">నెలకు పైగా ఆఫ్‌లైన్‌లో ఉంది</translation>
<translation id="3156531245809797194">Chromeను ఉపయోగించడానికి, దయచేసి సైన్ ఇన్ చేయండి</translation>
@@ -1465,7 +1465,7 @@
<translation id="321799795901478485">జిప్ ఆర్కైవర్</translation>
<translation id="321834671654278338">Linux అన్ఇన్‌స్టాలర్</translation>
<translation id="3220586366024592812"><ph name="CLOUD_PRINT_NAME" /> కనెక్టర్ విధానం క్రాష్ అయ్యింది. పునఃప్రారంభించాలా?</translation>
-<translation id="3221634914176615296">ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి.</translation>
+<translation id="3221634914176615296">ఫైల్స్ యాప్‌‌లో పరికర కంటెంట్‌ను విశ్లేషించండి.</translation>
<translation id="3222066309010235055">ప్రిరెండర్: <ph name="PRERENDER_CONTENTS_NAME" /></translation>
<translation id="3225084153129302039">డిఫాల్ట్ ఊదా రంగు అవతార్</translation>
<translation id="3225319735946384299">కోడ్ సైనింగ్</translation>
@@ -1493,14 +1493,14 @@
<translation id="3269093882174072735">చిత్రాన్ని లోడ్ చేయి</translation>
<translation id="326999365752735949">డిఫ్‌ను డౌన్‌లోడ్ చేస్తోంది</translation>
<translation id="3270965368676314374">మీ కంప్యూటర్‌లోని ఫోటోలు, సంగీతం మరియు ఇతర మీడియాని చదవడం, మార్చడం మరియు తొలగించడం</translation>
-<translation id="327147043223061465">మొత్తం కుక్కీలు మరియు సైట్ డేటాని చూడండి</translation>
+<translation id="327147043223061465">మొత్తం కుక్కీలు మరియు సైట్ డేటాను చూడండి</translation>
<translation id="3271648667212143903"><ph name="ORIGIN" /> దీనికి కనెక్ట్ చేయాలనుకుంటోంది</translation>
<translation id="3274763671541996799">మీరు పూర్తి స్క్రీన్‌కు వెళ్ళారు.</translation>
<translation id="3275778913554317645">విండో వలె తెరవండి</translation>
<translation id="3278001907972365362">మీ Google ఖాతా లేదా ఖాతాలను జాగ్రత్తగా గమనించాలి</translation>
<translation id="3279230909244266691">ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. వర్చ్యువల్ మెషీన్‌ను ప్రారంభిస్తోంది.</translation>
<translation id="3279741024917655738">ఇందులో పూర్తి స్క్రీన్ వీడియోలను చూపించండి</translation>
-<translation id="3280237271814976245">&amp;ఇలా సేవ్ చెయ్యి</translation>
+<translation id="3280237271814976245">ఇలా సేవ్ &amp;చేయి...</translation>
<translation id="3280243678470289153">Chromeలోనే కొనసాగించు</translation>
<translation id="3280431534455935878">సిద్ధం చేస్తోంది</translation>
<translation id="3281892622610078515">నిరోధించాల్సిన ఫైల్‌లు, ప్రోగ్రామ్‌లు:</translation>
@@ -1567,7 +1567,7 @@
<translation id="3378630551672149129">సైన్ ఇన్ చేయండి, ఇన్‌పుట్ అంశాలతో పరస్పర చర్య చేయడానికి ట్యాబ్ కీని నొక్కండి</translation>
<translation id="337920581046691015"><ph name="PRODUCT_NAME" /> వ్యవస్థాపించబడుతుంది.</translation>
<translation id="3380365263193509176">తెలియని ఎర్రర్</translation>
-<translation id="3382073616108123819">అయ్యో! ఈ పరికరం కోసం పరికర ఐడెంటిఫైయర్‌లను నిర్ణయించడంలో సిస్టమ్ విఫలమైంది.</translation>
+<translation id="3382073616108123819">అయ్యో! ఈ పరికరం కోసం పరికర ఐడెంటిఫైయర్‌లను నిశ్చయించడంలో సిస్టమ్ విఫలమైంది.</translation>
<translation id="3382086682569279540">మీరు నిర్వహించే ఖాతా త్వరలో తీసివేయబడుతుంది</translation>
<translation id="3382200254148930874">పర్యవేక్షణను ఆపివేస్తోంది...</translation>
<translation id="3385092118218578224"><ph name="DISPLAY_ZOOM" />%</translation>
@@ -1745,7 +1745,7 @@
<translation id="3627671146180677314">Netscape సర్టిఫికెట్ పునరుద్ధరణ సమయం</translation>
<translation id="3627879631695760395"><ph name="APP" />ను ఇన్‌స్టాల్ చేయి...</translation>
<translation id="3630132874740063857">మీ ఫోన్</translation>
-<translation id="3630995161997703415">ఈ సైట్‌ని ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ అరకి జోడించండి</translation>
+<translation id="3630995161997703415">ఈ సైట్‌ను ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ 'అర'కు జోడించండి</translation>
<translation id="3636096452488277381">హాయ్, <ph name="USER_GIVEN_NAME" />.</translation>
<translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> మిగిలి ఉంది</translation>
<translation id="3637682276779847508">మీరు సరైన PIN అన్‌లాక్ కీని నమోదు చేయకపోతే, మీ SIM కార్డ్ శాశ్వతంగా నిలిపివేయబడుతుంది.</translation>
@@ -1762,7 +1762,7 @@
<translation id="3653160965917900914">నెట్‌వర్క్ ఫైల్ షేర్‌లు</translation>
<translation id="3653842108912548333">మీ అసిస్టెంట్‌ని Voice Match సాయంతో యాక్సెస్ చేసుకోండి</translation>
<translation id="3653999333232393305">మీ మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి <ph name="HOST" />కి అనుమతిని కొనసాగించండి</translation>
-<translation id="3654045516529121250">మీ ప్రాప్యత సెట్టింగ్‌లను చదవండి</translation>
+<translation id="3654045516529121250">మీ యాక్సెస్‌ సెట్టింగ్‌లను చదవండి</translation>
<translation id="3655712721956801464">{NUM_FILES,plural, =1{ఇది ఒక ఫైల్‌కు శాశ్వత యాక్సెస్‌ను కలిగి ఉంది.}other{ఇది # ఫైల్‌లకు శాశ్వత యాక్సెస్‌ను కలిగి ఉంది.}}</translation>
<translation id="3660234220361471169">అవిశ్వసనీయ</translation>
<translation id="3664511988987167893">ఎక్స్‌టెన్షన్ చిహ్నం</translation>
@@ -1800,7 +1800,7 @@
<translation id="370665806235115550">లోడ్ అవుతోంది...</translation>
<translation id="3709244229496787112">డౌన్‌లోడ్ పూర్తి కావడానికి ముందే బ్రౌజర్ షట్‌డౌన్ చేయబడింది.</translation>
<translation id="3712217561553024354">మీ Google ఖాతాతో మొబైల్ డేటా కనెక్షన్‌ ఉన్న ఇతర పరికరాలను గుర్తించడానికి ఈ పరికరాన్ని అనుమతించండి</translation>
-<translation id="3712897371525859903">&amp;వలె పేజీని సేవ్ చేయి</translation>
+<translation id="3712897371525859903">&amp;లాగా పేజీని సేవ్ చేయి</translation>
<translation id="371300529209814631">వెనుకకు/ముందుకు</translation>
<translation id="3714195043138862580">ఈ డెమో పరికరం కేటాయింపు తీసివేత స్థితిలో ఉంచబడింది.</translation>
<translation id="3714633008798122362">వెబ్ క్యాలెండర్</translation>
@@ -1831,7 +1831,7 @@
<translation id="3752582316358263300">సరే...</translation>
<translation id="3752673729237782832">నా పరికరాలు</translation>
<translation id="3755411799582650620">మీ <ph name="PHONE_NAME" /> ఇప్పుడు ఈ <ph name="DEVICE_TYPE" />ని కూడా అన్‌లాక్ చేయగలదు.</translation>
-<translation id="375636864092143889">సైట్ మీ మైక్రోఫోన్‌ని ఉపయోగిస్తోంది</translation>
+<translation id="375636864092143889">సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగిస్తోంది</translation>
<translation id="3757733214359997190">సైట్‌లు ఏవీ కనుగొనబడలేదు</translation>
<translation id="375841316537350618">ప్రాక్సీ స్క్రిప్ట్‌ను డౌన్‌లోడ్ చేస్తోంది...</translation>
<translation id="3758842566811519622">కుక్కీలు సెట్ చేయబడ్డాయి</translation>
@@ -1891,12 +1891,12 @@
<translation id="3830674330436234648">ప్లేబ్యాక్ అందుబాటులో లేదు</translation>
<translation id="3831436149286513437">Google డిస్క్ శోధన సూచనలు</translation>
<translation id="3831486154586836914">విండో స్థూలదృష్టి మోడ్‌లోకి ప్రవేశించారు</translation>
-<translation id="383161972796689579">ఈ పరికరం యొక్క యజమాని క్రొత్త వినియోగదారులను జోడించడం నిలిపివేసారు</translation>
+<translation id="383161972796689579">ఈ పరికరం యొక్క యజమాని కొత్త‌ వినియోగదారులను జోడించడం నిలిపివేశారు</translation>
<translation id="3834775135533257713"><ph name="TO_INSTALL_APP_NAME" /> యాప్ "<ph name="INSTALLED_APP_NAME" />"కి వైరుధ్యంగా ఉన్నందున దాన్ని జోడించలేరు.</translation>
<translation id="3835522725882634757">అయ్యో! ఈ సర్వర్ పంపిస్తున్న డేటా <ph name="PRODUCT_NAME" />కు అర్థం కాలేదు. దయచేసి <ph name="BEGIN_LINK" />బగ్‌ను నివేదించి<ph name="END_LINK" />, అందులో <ph name="BEGIN2_LINK" />అసలు జాబితా<ph name="END2_LINK" />ను చేర్చండి.</translation>
<translation id="3838085852053358637">ఎక్స్‌టెన్షన్‌ను లోడ్ చేయడం విఫలమైంది</translation>
<translation id="3838486795898716504">మరిన్ని <ph name="PAGE_TITLE" /></translation>
-<translation id="3838543471119263078">కుక్కీలు మరియు ఇతర సైట్ మరియు ప్లగ్ఇన్‌ డేటా</translation>
+<translation id="3838543471119263078">కుక్కీలు మరియు ఇతర సైట్ మరియు ప్లగిన్ డేటా</translation>
<translation id="383891835335927981">సైట్‌లు ఏవీ దగ్గరకు లేదా దూరానికి జూమ్ చేయబడలేదు</translation>
<translation id="3839516600093027468">క్లిప్‌బోర్డ్‌ను చూడనీయకుండా ఎల్లప్పుడూ <ph name="HOST" />ని బ్లాక్ చేయి</translation>
<translation id="3842552989725514455">Serif ఫాంట్</translation>
@@ -1930,7 +1930,7 @@
<translation id="3879748587602334249">డౌన్‌లోడ్ మేనేజ‌ర్‌</translation>
<translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" />తో గమనికలు రూపొందిస్తున్నారు</translation>
<translation id="3892414795099177503">OpenVPN / L2TPని జోడించు...</translation>
-<translation id="3893536212201235195">మీ ప్రాప్యత సౌలభ్య సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి</translation>
+<translation id="3893536212201235195">మీ యాక్సెస్‌ సౌలభ్య సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి</translation>
<translation id="3893630138897523026">ChromeVox (చదవబడే అభిప్రాయం)</translation>
<translation id="3894427358181296146">ఫోల్డర్‌ను జోడించండి</translation>
<translation id="389589731200570180">అతిథులతో భాగస్వామ్యం చేయండి</translation>
@@ -1996,7 +1996,7 @@
<translation id="397703832102027365">పూర్తి చేస్తోంది...</translation>
<translation id="3979395879372752341">క్రొత్త పొడిగింపు జోడించబడింది (<ph name="EXTENSION_NAME" />)</translation>
<translation id="3979748722126423326"><ph name="NETWORKDEVICE" />ను ప్రారంభించు</translation>
-<translation id="3981760180856053153">చెల్లని సేవ్ రకం ఎంటర్ చేయ‌బడింది.</translation>
+<translation id="3981760180856053153">చెల్లని సేవ్ రకం ఎంటర్ చేయబడింది.</translation>
<translation id="3982375475032951137">సులువైన కొద్ది దశలతో మీ బ్రౌజర్‌ని సెటప్ చేయండి</translation>
<translation id="3983400541576569538">కొన్ని యాప్‌ల డేటాని కోల్పోవచ్చు</translation>
<translation id="3983586614702900908">తెలియని విక్రేత అందించిన పరికరాలు</translation>
@@ -2285,7 +2285,7 @@
<translation id="4475552974751346499">డౌన్‌లోడ్‌లను వెతకండి</translation>
<translation id="4476590490540813026">అథ్లెట్</translation>
<translation id="4477015793815781985">Ctrl, Alt లేదా ⌘ని చేర్చండి</translation>
-<translation id="4478664379124702289">లిం&amp;క్‌ను ఇలా సేవ్ చెయ్యి...</translation>
+<translation id="4478664379124702289">లిం&amp;క్‌ను ఇలా సేవ్ చేయి...</translation>
<translation id="4479424953165245642">కియోస్క్ అనువర్తనాలను నిర్వహించండి</translation>
<translation id="4479639480957787382">ఈథర్నెట్</translation>
<translation id="4480590691557335796">Chrome మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్‌ని కనుగొని, తీసివేయగలదు</translation>
@@ -2400,7 +2400,7 @@
<translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' యొక్క సభ్యులతో ఈ అంశాలను షేర్ చేస్తే మినహా వారు యాక్సెస్‌ను కోల్పోతారు.</translation>
<translation id="4672657274720418656">పేజీని డిస్టిల్ చేయి</translation>
<translation id="4673442866648850031">స్టైలస్‌ను బయటకు తీసినప్పుడు స్టైలస్ సాధనాలను తెరుస్తుంది</translation>
-<translation id="4677585247300749148">యాక్సెసిబిలిటీ ఈవెంట్‌లకు <ph name="URL" /> ప్రతిస్పందించాలనుకుంటోంది</translation>
+<translation id="4677585247300749148">యాక్సెసిబిలిటీ ఈవెంట్‌లకు <ph name="URL" /> ప్రతిస్పందించాలని అనుకుంటోంది</translation>
<translation id="4677772697204437347">GPU మెమరీ</translation>
<translation id="4680105648806843642">ఈ పేజీలో ధ్వని మ్యూట్ చేయబడింది</translation>
<translation id="4681930562518940301">అసలు &amp;చిత్రాన్ని కొత్త ట్యాబ్‌లో తెరువు</translation>
@@ -2423,7 +2423,7 @@
<translation id="4708794300267213770">నిద్రావస్థ నుండి సక్రియం అవుతున్నప్పుడు లాక్ స్క్రీన్‌ని చూపు</translation>
<translation id="4708849949179781599"><ph name="PRODUCT_NAME" /> నిష్క్రమించు</translation>
<translation id="4711638718396952945">సెట్టింగ్‌లను పునరుద్ధరించు</translation>
-<translation id="4713544552769165154">ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలమైనది కాదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం <ph name="BEGIN_LINK" />Chrome వెబ్ స్టోర్<ph name="END_LINK" />లో వెతకండి.<ph name="BEGIN_LINK_HELP" />మరింత తెలుసుకోండి<ph name="END_LINK_HELP" /></translation>
+<translation id="4713544552769165154">ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలమైనది కాదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం <ph name="BEGIN_LINK" />Chrome వెబ్ స్టోర్<ph name="END_LINK" />లో శోధించండి.<ph name="BEGIN_LINK_HELP" />మరింత తెలుసుకోండి<ph name="END_LINK_HELP" /></translation>
<translation id="4715553623069266137">చాలా సంక్షిప్తం (0.8s)</translation>
<translation id="4716483597559580346">అదనపు భద్రత కోసం పవర్ వాష్ చేయండి</translation>
<translation id="4720113199587244118">పరికరాలను జోడించు</translation>
@@ -2435,7 +2435,7 @@
<translation id="4726710629007580002">ఈ ఎక్స్‌టెన్ష‌న్‌ను ఇన్‌స్టాల్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు హెచ్చరికలు చేయబడ్డాయి:</translation>
<translation id="4728558894243024398">ప్లాట్‌ఫారమ్</translation>
<translation id="4732760563705710320">క్షమించండి, మీ cast పరికరం ఈ వీడియోకు మద్దతివ్వదు.</translation>
-<translation id="4733082559415072992"><ph name="URL" /> మీ పరికర స్థానాన్ని ఉపయోగించాలనుకుంటోంది</translation>
+<translation id="4733082559415072992"><ph name="URL" /> మీ పరికర స్థానాన్ని ఉపయోగించాలని అనుకుంటోంది</translation>
<translation id="4733793249294335256">స్థానం</translation>
<translation id="4734518477988699048">ఇన్‌పుట్ విలువ చెల్లదు.</translation>
<translation id="4735265153267957659">Smart Lockని ప్రారంభించడానికి మీ పాస్‌వర్డ్‌‌ను నమోదు చేయండి. తర్వాతిసారి, మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />ని అన్‌లాక్ చేస్తుంది. సెట్టింగ్‌లలో Smart Lockని ఆఫ్ చేయండి.</translation>
@@ -2554,7 +2554,7 @@
<translation id="4891089016822695758">బీటా ఫోరమ్</translation>
<translation id="4892823793812813456">లేబుల్‌లు ఇవ్వు</translation>
<translation id="4892969127351273348"><ph name="APP_NAME" />తో తెరవడం సాధ్యపడలేదు</translation>
-<translation id="4893336867552636863">దీని వ‌ల్ల‌ మీ బ్రౌజింగ్ డేటా ఈ పరికరం నుండి శాశ్వతంగా తొలగించబడుతుంది.</translation>
+<translation id="4893336867552636863">దీని వలన మీ బ్రౌజింగ్ డేటా ఈ పరికరం నుండి శాశ్వతంగా తొలగించబడుతుంది.</translation>
<translation id="4893522937062257019">లాక్ స్క్రీన్‌పై</translation>
<translation id="4898011734382862273">ప్రమాణపత్రం "<ph name="CERTIFICATE_NAME" />" ప్రమాణపత్రాలను మంజూరు చేసే సంస్థను సూచిస్తోంది</translation>
<translation id="489985760463306091">హానికరమైన సాఫ్ట్‌వేర్ తొలగింపును పూర్తి చేసేందుకు, మీ కంప్యూటర్‌ను పునఃప్రారంభించాలి</translation>
@@ -2600,7 +2600,7 @@
<translation id="4964455510556214366">అమరిక</translation>
<translation id="4964673849688379040">తనిఖీ చేస్తోంది...</translation>
<translation id="4965808351167763748">Hangouts Meetను అమలు చేసేలా ఈ పరికరాన్ని ఖచ్చితంగా సెటప్ చేయాలని అనుకుంటున్నారా?</translation>
-<translation id="496888482094675990">ఫైల్‌ల యాప్ మీరు Google డిస్క్, బాహ్య నిల్వ లేదా మీ Chrome OS పరికరంలో సేవ్ చేసిన ఫైల్‌లకు శీఘ్ర యాక్సెస్‌ను అందిస్తుంది.</translation>
+<translation id="496888482094675990">మీరు Google డిస్క్, బాహ్య నిల్వ లేదా మీ Chrome OS పరికరంలో సేవ్ చేసిన ఫైల్‌లకు ఫైల్స్ యాప్‌, శీఘ్ర యాక్సెస్‌ను అందిస్తుంది.</translation>
<translation id="4969785127455456148">ఆల్బమ్</translation>
<translation id="4971412780836297815">పూర్తవగానే తెరువు</translation>
<translation id="4972129977812092092">ప్రింటర్‌ను సవరించండి</translation>
@@ -2645,7 +2645,7 @@
<translation id="5029568752722684782">కాపీని తీసివేయి</translation>
<translation id="5030338702439866405">వీరిచే జారీచేయబడింది</translation>
<translation id="503498442187459473"><ph name="HOST" /> మీ కెమెరాను మరియు మైక్రోఫోన్‌ను ఉపయోగించాలనుకుంటోంది</translation>
-<translation id="5036662165765606524">బహుళ ఫైల్‌లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడానికి ఏ సైట్‌ను అనుమతించవద్దు</translation>
+<translation id="5036662165765606524">బహుళ ఫైల్‌లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడానికి ఏ సైట్‌నూ అనుమతించవద్దు</translation>
<translation id="5037676449506322593">అన్నీ ఎంచుకోండి</translation>
<translation id="5038625366300922036">మరింత చూడండి...</translation>
<translation id="5038863510258510803">ప్రారంభిస్తోంది...</translation>
@@ -2697,7 +2697,7 @@
<translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> విజయవంతంగా ముద్రించబడింది</translation>
<translation id="5117930984404104619">సందర్శించిన URLలతో సహా ఇతర పొడిగింపుల యొక్క ప్రవర్తనను పర్యవేక్షించండి</translation>
<translation id="5119173345047096771">Mozilla Firefox</translation>
-<translation id="5121130586824819730">మీ హార్డ్ డిస్క్ నిండింది. దయచేసి మరొక స్థానానికి సేవ్ చేయండి లేదా హార్డ్ డిస్క్‌లో ఎక్కువ ఖాళీ చేయండి.</translation>
+<translation id="5121130586824819730">మీ హార్డ్ డిస్క్ నిండింది. దయచేసి మరొక స్థానానికి సేవ్ చేయండి లేదా హార్డ్ డిస్క్‌లోని నిల్వను ఖాళీ చేయండి.</translation>
<translation id="5125751979347152379">చెల్లని URL.</translation>
<translation id="5127805178023152808">సమకాలీకరణ ఆఫ్‌లో ఉంది</translation>
<translation id="5127881134400491887">నెట్‌వర్క్ కనెక్షన్‌లను నిర్వహించండి</translation>
@@ -2879,7 +2879,7 @@
<translation id="5379140238605961210">మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయడాన్ని కొనసాగించు</translation>
<translation id="5379268888377976432">తొలగింపు చర్య రద్దు చేయండి</translation>
<translation id="5382591305415226340">మద్దతు గల లింక్‌లను నిర్వహించండి</translation>
-<translation id="5384883051496921101">ఈ సైట్, అజ్ఞాత మోడ్ వెలుపల యాప్‌‌తో సమాచారాన్ని షేర్ చేయబోతోంది.</translation>
+<translation id="5384883051496921101">ఈ సైట్ అజ్ఞాత మోడ్ వెలుపల ఉన్న ఒక యాప్‌తో సమాచారాన్ని షేర్ చేయబోతోంది.</translation>
<translation id="5388885445722491159">జత చేయబడింది</translation>
<translation id="5389237414310520250">కొత్త వినియోగదారుని సృష్టించడం సాధ్యపడలేదు. దయచేసి మీ హార్డ్ డ్రైవ్ నిల్వ స్థలాన్ని, అనుమతులను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="5390100381392048184">ధ్వనిని ప్లే చేయడానికి సైట్‌లను అనుమతించండి</translation>
@@ -2960,14 +2960,14 @@
<translation id="5499313591153584299">ఈ ఫైల్ మీ కంప్యూటర్‌కు హానికరం కావచ్చు.</translation>
<translation id="5502500733115278303">Firefox నుండి దిగుమతి చెయ్యబడింది</translation>
<translation id="5507756662695126555">అంగీకరించడం</translation>
-<translation id="5509693895992845810">ఇలా &amp;సేవ్ చేయి...</translation>
+<translation id="5509693895992845810">&amp;ఇలా సేవ్ చేయి...</translation>
<translation id="5509914365760201064">జారీచేసినవారు: <ph name="CERTIFICATE_AUTHORITY" /></translation>
<translation id="5511379779384092781">అతి చిన్నది</translation>
-<translation id="5511823366942919280">మీరు ఖచ్చితంగా ఈ పరికరాన్ని "షార్క్"గా సెటప్ చేయాలనుకుంటున్నారా?</translation>
+<translation id="5511823366942919280">మీరు ఖచ్చితంగా ఈ పరికరాన్ని "షార్క్"గా సెటప్ చేయాలని అనుకుంటున్నారా?</translation>
<translation id="5512653252560939721">వినియోగదారు సర్టిఫికెట్ ఖచ్చితంగా హార్డ్‌వేర్-బ్యాకెడ్ అయ్యుండాలి.</translation>
<translation id="5516183516694518900">మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు ఇతర సెట్టింగ్‌లను మీ అన్ని పరికరాలలో పొందడానికి మీ Google ఖాతాతో Chromeకు సైన్ ఇన్ చేయండి.</translation>
<translation id="551752069230578406">మీ ఖాతాకు ప్రింటర్‌ను జోడిస్తోంది - దీనికి కొంత సమయం పట్టవచ్చు...</translation>
-<translation id="5518219166343146486">క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం మరియు చిత్రాలను సైట్ చూడాలన్నప్పుడు అనుమతి అడగాలి</translation>
+<translation id="5518219166343146486">క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం, చిత్రాలను సైట్ చూడాలన్నప్పుడు, అందుకు అనుమతి అడగాలి</translation>
<translation id="5518584115117143805">ఇమెయిల్ గుప్తీకరణ సర్టిఫికెట్</translation>
<translation id="5521078259930077036">మీరు ఆశిస్తున్న హోమ్ పేజీ ఇదేనా?</translation>
<translation id="5522156646677899028">ఈ పొడిగింపు తీవ్రమైన భద్రతా భేద్యతలను కలిగి ఉంది.</translation>
@@ -3012,7 +3012,7 @@
<translation id="5573248369095789351">కొనసాగింపు చర్య</translation>
<translation id="5575473780076478375">అజ్ఞాత ఎక్స్‌టెన్‌షన్: <ph name="EXTENSION_NAME" /></translation>
<translation id="5575528586625653441">డెమో నమోదు అభ్యర్థనకు సంబంధించి ఒక సమస్య ఏర్పడింది.</translation>
-<translation id="557722062034137776">మీ పరికరాన్ని రీసెట్ చేయడం వలన మీ Google ఖాతాలపై లేదా ఈ ఖాతాలకు సమకాలీకరించబడిన ఏదైనా డేటాపై ఎటువంటి ప్రభావం ఉండదు. అయితే, మీ పరికరంలో స్థానికంగా సేవ్ చేయబడిన అన్ని ఫైల్‌లు తొలగించబడతాయి.</translation>
+<translation id="557722062034137776">మీ పరికరాన్ని రీసెట్ చేయడం వలన మీ Google ఖాతాలపై లేదా ఈ ఖాతాలకు సింక్ చేయ‌బ‌డిన‌ ఏదైనా డేటాపై ఎటువంటి ప్రభావం ఉండదు. అయితే, మీ పరికరంలో స్థానికంగా సేవ్ చేయబడిన అన్ని ఫైల్‌లు తొలగించబడతాయి.</translation>
<translation id="5578059481725149024">ఆటోమేటిక్ సైన్-ఇన్</translation>
<translation id="558170650521898289">Microsoft Windows హార్డ్‌వేర్ డ్రైవర్ ధృవీకరణ</translation>
<translation id="5582839680698949063">ప్రధాన మెను</translation>
@@ -3127,7 +3127,7 @@
<translation id="5739458112391494395">చాలా పెద్దవిగా</translation>
<translation id="5740331643563157105"><ph name="LANGUAGE_1" />, <ph name="LANGUAGE_2" /> మరియు మరో <ph name="NUM_ADDITIONAL_LANGUAGES" /></translation>
<translation id="574209121243317957">పిచ్</translation>
-<translation id="5746169159649715125">PDF వలె సేవ్ చేయి</translation>
+<translation id="5746169159649715125">PDF లాగా సేవ్ చేయి</translation>
<translation id="5747552184818312860">గడువు ముగింపు</translation>
<translation id="5747785204778348146">డెవలపర్ - అస్థిరం</translation>
<translation id="5750324801516359607">దూరంగా ఉండాలి</translation>
@@ -3184,7 +3184,7 @@
<translation id="5827266244928330802">Safari</translation>
<translation id="5828633471261496623">ముద్రిస్తోంది...</translation>
<translation id="5830410401012830739">స్థాన సెట్టింగ్‌లను నిర్వహించు...</translation>
-<translation id="5830720307094128296">&amp;లాగ పేజీని సేవ్ చెయ్యండి...</translation>
+<translation id="5830720307094128296">&amp;లాగా పేజీని సేవ్ చేయి...</translation>
<translation id="5832805196449965646">వ్యక్తిని జోడించు</translation>
<translation id="583281660410589416">తెలియని</translation>
<translation id="5832976493438355584">లాక్ చేయబడింది</translation>
@@ -3226,7 +3226,7 @@
<translation id="5869029295770560994">సరే, అర్థమైంది</translation>
<translation id="5869522115854928033">సేవ్ చేసిన పాస్‌వర్డ్‌లు</translation>
<translation id="5869948122057593679">మీ అన్ని విండోలను మూసివేయండి</translation>
-<translation id="5870086504539785141">యాక్సెస్ మెనూను మూసివేయండి</translation>
+<translation id="5870086504539785141">యాక్సెస్‌ మెనూను మూసివేయండి</translation>
<translation id="5870155679953074650">క్లిష్టమైన లోపాలు</translation>
<translation id="5877064549588274448">ఛానెల్ మార్చబడింది. మార్పులను వర్తింపజేయడానికి మీ పరికరాన్ని పునఃప్రారంభించండి.</translation>
<translation id="5877584842898320529">ఎంచుకున్న ప్రింటర్ అందుబాటులో లేదు లేదా సరిగ్గా ఇన్‌స్టాల్ చేయబడలేదు. <ph name="BR" /> మీ ప్రింటర్‌ను తనిఖీ చేయండి లేదా మరొక ప్రింటర్‌ను ఎంచుకోవడాన్ని ప్రయత్నించండి.</translation>
@@ -3361,9 +3361,9 @@
<translation id="6069671174561668781">వాల్‌పేపర్‌ని సెట్ చేయండి</translation>
<translation id="6071181508177083058">పాస్‌వర్డ్‌ను నిర్ధారించండి</translation>
<translation id="6071576563962215370">పరికరం ఇన్‌స్టాలేషన్-సమయ లక్షణాల లాక్‌ను ఏర్పాటు చేయడంలో సిస్టమ్ విఫలమైంది.</translation>
-<translation id="6073903501322152803">యాక్సెస్ ఫీచర్‌లను జోడించండి</translation>
+<translation id="6073903501322152803">యాక్సెస్‌ ఫీచర్‌లను జోడించండి</translation>
<translation id="6074825444536523002">Google ఫారమ్</translation>
-<translation id="6075731018162044558">అయ్యో! ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్ టోకెన్‌ను పొందడంలో సిస్టమ్ విఫలమైంది.</translation>
+<translation id="6075731018162044558">అయ్యో! ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్‌ టోకెన్‌ను పొందడంలో సిస్టమ్ విఫలమైంది.</translation>
<translation id="6075907793831890935"><ph name="HOSTNAME" /> పేరు గల పరికరంతో డేటాను ఇచ్చిపుచ్చుకోవడానికి అనుమతి</translation>
<translation id="6076175485108489240">స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు మీ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాని సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాని అనామకంగా ఉపయోగించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="6076448957780543068">ఈ స్క్రీన్‌షాట్‌ను చేర్చు</translation>
@@ -3470,7 +3470,7 @@
<translation id="6228516488918914827">వేగవంతమైన పేజీ లోడ్ అయింది</translation>
<translation id="6228691855869374890">ఈ సైట్ MIDI పరికరాలకు పూర్తి నియంత్రణను కలిగి ఉంది.</translation>
<translation id="6229890768313448549">Google Play సేవా నిబంధనలను లోడ్ చేయడం సాధ్యపడదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
-<translation id="6231881193380278751">పేజీని ఆటోమేటిక్‌గా రిఫ్రెష్ చేయడానికి URLలో ప్రశ్న పరామితిని జోడించండి: chrome://device-log/?refresh=&lt;sec&gt;</translation>
+<translation id="6231881193380278751">పేజీని ఆటోమేటిక్‌గా రిఫ్రెష్ చేయడానికి URLలో ప్రశ్న పారామీట‌ర్‌ను జోడించండి: chrome://device-log/?refresh=&lt;sec&gt;</translation>
<translation id="6232017090690406397">బ్యాటరీ</translation>
<translation id="6232116551750539448"><ph name="NAME" />కి కనెక్షన్ కోల్పోయింది</translation>
<translation id="6233154960150021497">కీబోర్డ్ బదులుగా వాయిస్‌ను డిఫాల్ట్‌గా ఉపయోగించండి</translation>
@@ -3518,7 +3518,7 @@
<translation id="630065524203833229">ని&amp;ష్క్రమించు</translation>
<translation id="6305607932814307878">సార్వజనీన విధానం:</translation>
<translation id="6307990684951724544">సిస్టమ్ బిజీగా ఉంది</translation>
-<translation id="6308937455967653460">లిం&amp;క్‌ను ఇలా సేవ్ చెయ్యి...</translation>
+<translation id="6308937455967653460">లిం&amp;క్‌ను ఇలా సేవ్ చేయి...</translation>
<translation id="6311220991371174222">మీ ప్రొఫైల్‌ను తెరుస్తున్నప్పుడు ఏదో తప్పు జరిగినందున Chromeను తెరవడం సాధ్యపడలేదు. Chromeను పునఃప్రారంభించడానికి ప్రయత్నించండి.</translation>
<translation id="6312403991423642364">తెలియని నెట్‌వర్క్ ఎర్రర్</translation>
<translation id="6313320178014547270">మీరు ఈ వెబ్‌సైట్‌తో నమోదు కాని కీని ఉపయోగిస్తున్నారు</translation>
@@ -3563,7 +3563,7 @@
<translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' అనే దానికి 1 ఫలితం మాత్రమే లభించింది</translation>
<translation id="6380143666419481200">అంగీకరించి, కొనసాగండి</translation>
<translation id="6384275966486438344">మీ శోధన సెట్టింగ్‌లను దీనికి మార్చండి: <ph name="SEARCH_HOST" /></translation>
-<translation id="6385543213911723544">సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు. చదవగలవు</translation>
+<translation id="6385543213911723544">సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు మరియు చదవగలవు</translation>
<translation id="6386099547750337629">ఇది అనూహ్యమైనదైతే, దయచేసి మద్దతును సంప్రదించండి.</translation>
<translation id="6388429472088318283">భాషలను వెతకండి</translation>
<translation id="6390799748543157332">మీరు ఈ విండో‌లో వీక్షించే పేజీలు బ్రౌజర్ చరిత్రలో కనిపించవు. తెరవబడిన అన్ని అతిథి విండోలను మీరు మూసివేసిన తర్వాత అవి కంప్యూటర్‌లో కుక్కీల వంటి ఇతర జాడలను వదిలిపెట్టవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఫైల్స్ భద్రపరచబడతాయి.</translation>
@@ -3591,10 +3591,9 @@
<translation id="6418160186546245112">మునుపు ఇన్‌స్టాల్ చేసిన <ph name="IDS_SHORT_PRODUCT_NAME" /> వెర్షన్‌కు తిరిగి మారుస్తోంది</translation>
<translation id="6418481728190846787">అన్ని యాప్‌ల కోసం యాక్సెస్‌ను శాశ్వతంగా తీసివేయి</translation>
<translation id="6418511932144861495">కీలకమైన అప్‌డేట్‌ను ఇన్‌స్టాల్ చేయండి</translation>
-<translation id="6419288379019356534">ఈ పరికరం <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.ద్వారా నిర్వహించబడుతోంది.
-
+<translation id="6419288379019356534">ఈ పరికరం <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ద్వారా నిర్వహించబడుతోంది.
<ph name="LINE_BREAK" />
- దయచేసి మీ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ఖాతాకి సైన్ ఇన్ చేయడం కొనసాగించడానికి "తరువాత" క్లిక్ చేయండి.</translation>
+ దయచేసి మీ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ఖాతాకు సైన్ ఇన్ చేయడం కొనసాగించడానికి "తదుపరి" క్లిక్ చేయండి.</translation>
<translation id="6419546358665792306">ప్యాక్ చేయబడని ఎక్స్‌టెన్షన్‌ను లోడ్ చేయి</translation>
<translation id="642282551015776456">ఈ పేరును ఫైల్ యొక్క ఫోల్డర్ పేరుగా ఉపయోగించలేము.</translation>
<translation id="642469772702851743">ఈ (SN: <ph name="SERIAL_NUMBER" />) పరికరం యజమానిచే లాక్ చేయబడింది.</translation>
@@ -3662,7 +3661,7 @@
<ph name="FILE_INFO" />
<ph name="EVENT_NAME" /></translation>
<translation id="6527303717912515753">భాగస్వామ్యం చేయి</translation>
-<translation id="6528513914570774834">ఈ నెట్‌వర్క్‌ని ఉపయోగించడానికి ఈ పరికరం యొక్క ఇతర వినియోగదారులను అనుమతించండి</translation>
+<translation id="6528513914570774834">ఈ నెట్‌వర్క్‌ను ఉపయోగించడానికి ఈ పరికరం యొక్క ఇతర వినియోగదారులను అనుమతించండి</translation>
<translation id="652948702951888897">Chrome చరిత్ర</translation>
<translation id="6530186581263215931">ఈ సెట్టింగ్‌లు మీ నిర్వాహకుడి ద్వారా అమలు చేయబడ్డాయి</translation>
<translation id="653019979737152879"><ph name="FILE_NAME" />ని సమకాలీకరిస్తోంది...</translation>
@@ -3680,13 +3679,13 @@
<translation id="6551508934388063976">ఆదేశం అందుబాటులో లేదు. కొత్త విండోను తెరవడానికి control-N నొక్కండి.</translation>
<translation id="655384502888039633"><ph name="USER_COUNT" /> వినియోగదారులు</translation>
<translation id="655483977608336153">మళ్లీ ప్రయత్నించు</translation>
-<translation id="6555432686520421228">అన్ని వినియోగదారు ఖాతాలను తీసివేయండి మరియు మీ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరాన్ని క్రొత్త దాని లాగా రీసెట్ చేయండి.</translation>
+<translation id="6555432686520421228">అన్ని వినియోగదారు ఖాతాలను తీసివేయండి మరియు మీ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరాన్ని కొత్త‌ దాని లాగా రీసెట్ చేయండి.</translation>
<translation id="6555810572223193255">క్లీనప్ ప్రస్తుతం అందుబాటులో లేదు</translation>
<translation id="6556866813142980365">మళ్లీ చేయి</translation>
<translation id="6558280019477628686">ఎర్రర్ ఏర్పడింది. కొన్ని అంశాలు తొలగించబడి ఉండకపోవచ్చు.</translation>
<translation id="6559023360691182159">{COUNT,plural, =0{ఏదీ వద్దు}=1{<ph name="APP_1" />}=2{<ph name="APP_1" />, <ph name="APP_2" />}=3{<ph name="APP_1" />, <ph name="APP_2" />, <ph name="APP_3" />}=4{<ph name="APP_1" />, <ph name="APP_2" />, <ph name="APP_3" />, 1 ఇతర యాప్}other{<ph name="APP_1" />, <ph name="APP_2" />, <ph name="APP_3" />, <ph name="EXTRA_APPS" /> ఇతర యాప్‌లు}}</translation>
<translation id="6561726789132298588">enter</translation>
-<translation id="656293578423618167">ఫైల్ పాథ్‌ లేదా పేరు చాలా పొడవుగా ఉంది. దయచేసి చిన్న పేరుతో లేదా మరొక స్థానానికి సేవ్ చేయండి.</translation>
+<translation id="656293578423618167">ఫైల్ పాత్ లేదా పేరు చాలా పొడవుగా ఉంది. దయచేసి చిన్న పేరుతో, లేదా మరొక స్థానానికి సేవ్ చేయండి.</translation>
<translation id="656398493051028875">"<ph name="FILENAME" />"ని తొలగిస్తోంది...</translation>
<translation id="6567688344210276845">పేజీ చర్య కోసం '<ph name="ICON" />' చిహ్నాన్ని లోడ్ చేయడం సాధ్యపడలేదు.</translation>
<translation id="6571979863037191371">మీ Chromebook నుండి మీ ఫోన్‌ని డిస్‌కనెక్ట్ చేయండి. అవి ఇకపై ఆటోమేటిక్‌గా కనెక్ట్ కావు.</translation>
@@ -3736,8 +3735,8 @@
<translation id="6639554308659482635">SQLite మెమరీ</translation>
<translation id="6641138807883536517">యాదృచ్ఛికంగా రూపొందించబడిన సురక్షిత మాడ్యూల్ పాస్‌వర్డ్ అందుబాటులో లేదు. పవర్‌వాష్ తర్వాత ఇలా జరగడం సాధారణం.</translation>
<translation id="6643016212128521049">క్లియర్ చేయి</translation>
-<translation id="6644512095122093795">పాస్‌వర్డ్‌లను సేవ్ చెయ్యడానికి ప్రతిపాదన</translation>
-<translation id="6644846457769259194">మీ పరికరం నవీకరించబడుతోంది (<ph name="PROGRESS_PERCENT" />)</translation>
+<translation id="6644512095122093795">పాస్‌వర్డ్‌లను సేవ్ చేయడానికి ప్రతిపాదించు</translation>
+<translation id="6644846457769259194">మీ పరికరం అప్‌డేట్ చేయబడుతోంది (<ph name="PROGRESS_PERCENT" />)</translation>
<translation id="6645437135153136856">ఎంచుకున్న Google క్లౌడ్ ప్రింట్ పరికరానికి ఇప్పుడు మద్దతు లేదు. <ph name="BR" /> మీ కంప్యూటర్ సిస్టమ్ సెట్టింగ్‌లలో ప్రింటర్‌ని సెటప్ చేయడాన్ని ప్రయత్నించండి.</translation>
<translation id="6647228709620733774">Netscape సర్టిఫికెట్ అధికార రద్దు URL</translation>
<translation id="6647838571840953560">ప్రస్తుతం <ph name="CHANNEL_NAME" />లో ఉన్నారు</translation>
@@ -3795,7 +3794,7 @@
<translation id="67269783048918309">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ <ph name="BEGIN_LINK1" />సెట్టింగ్‌<ph name="END_LINK1" />ని యజమాని అమలు చేసారు. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="6732801395666424405">ప్రమాణపత్రాలు లోడ్ కాలేదు</translation>
<translation id="6732900235521116609">షార్ట్‌కట్‌ను తొలగించలేరు</translation>
-<translation id="6735304988756581115">కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు... </translation>
+<translation id="6735304988756581115">కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు...</translation>
<translation id="6736045498964449756">అయ్యో, పాస్‌వర్డ్‌లు సరిపోలలేదు!</translation>
<translation id="6736243959894955139">చిరునామా</translation>
<translation id="6736329909263487977"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />]</translation>
@@ -3850,7 +3849,7 @@
<translation id="6820687829547641339">Gzip కుదించిన tar ఆర్కైవ్</translation>
<translation id="682123305478866682">డెస్క్‌టాప్‌ను ప్రసారం చేయండి</translation>
<translation id="6823506025919456619">మీరు మీ పరికరాలను చూడటానికి Chromeకు సైన్ ఇన్ చేయాలి</translation>
-<translation id="6824564591481349393">&amp;ఇమెయిల్ చిరునామాను కాపీ చెయ్యి</translation>
+<translation id="6824564591481349393">&amp;ఇమెయిల్ చిరునామాను కాపీ చేయండి</translation>
<translation id="6824584962142919697">&amp;మూలకాలను పర్యవేక్షించు</translation>
<translation id="6825184156888454064">పేరు ద్వారా క్రమబద్ధీకరించు</translation>
<translation id="6826872289184051766">USB ద్వారా ధృవీకరించు</translation>
@@ -3891,8 +3890,8 @@
<translation id="6886871292305414135">కొత్త &amp;ట్యాబ్‌లో లింక్‌ను తెరువు</translation>
<translation id="6892812721183419409">లింక్‌ను <ph name="USER" /> తరపున తెరువు</translation>
<translation id="6895032998810961280">ఈ క్లీన్అప్ సమయంలో మీ కంప్యూటర్‌లో గుర్తించిన హానికరమైన సాఫ్ట్‌వేర్, సిస్టమ్ సెట్టింగ్‌లు మరియు ప్రాసెస్‌ల గురించి Googleకు వివరాలను నివేదించండి</translation>
-<translation id="6896758677409633944">కాపీ చెయ్యి</translation>
-<translation id="6898440773573063262">కియోస్క్ యాప్‌లను ఇప్పుడు ఈ పరికరంలో ఆటోమేటిక్‌గా ప్రారంభించగలిగేలా కాన్ఫిగర్ చేయవచ్చు.</translation>
+<translation id="6896758677409633944">కాపీ చేయి</translation>
+<translation id="6898440773573063262">కియోస్క్ యాప్‌లను ఇప్పుడు ఈ పరికరంలో ఆటోమేటిక్‌గా ప్రారంభించడానికి కాన్ఫిగర్ చేయవచ్చు.</translation>
<translation id="6898699227549475383">సంస్థ (O)</translation>
<translation id="6900284862687837908">బ్యాక్‌గ్రౌండ్ యాప్: <ph name="BACKGROUND_APP_URL" /></translation>
<translation id="6902066522699286937">వాయిస్ యొక్క ప్రివ్యూ</translation>
@@ -3911,14 +3910,13 @@
<translation id="6920989436227028121">సాధారణ టాబ్‌ లాగా తెరువు</translation>
<translation id="6921104647315081813">కార్యకలాపాలను తీసివేయి</translation>
<translation id="6921709132208495314">ఈ పేజీలో డేటాను ఉపయోగించడం ఆపివేయండి</translation>
-<translation id="6922128026973287222">Google డేటా సేవర్‌ను ఉపయోగించి డేటాను ఆదా చేయండి. వేగంగా బ్రౌజ్ చేయండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి.</translation>
+<translation id="6922128026973287222">Google డేటా సేవర్‌ను ఉపయోగించి డేటాను ఆదా చేయండి, మరింత వేగంగా బ్రౌజ్ చేయండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి.</translation>
<translation id="6923132443355966645">స్క్రోల్ / క్లిక్</translation>
<translation id="6923633482430812883">షేర్‌ని మౌంట్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీరు కనెక్ట్ చేస్తున్న ఫైల్ సర్వర్‌లో SMBv2 లేదా అంతకంటే తాజా వెర్షన్‌కు మద్దతు ఉందో లేదో తనిఖీ చేయండి.</translation>
<translation id="6930242544192836755">వ్యవధి</translation>
<translation id="6934241953272494177">మీ మీడియా పరికరాన్ని స్కాన్ చేస్తోంది...
-
<ph name="LINE_BREAK1" />
- <ph name="FILE_COUNT" /> కనుగొనబడ్డాయి</translation>
+ <ph name="FILE_COUNT" />కనుగొనబడ్డాయి</translation>
<translation id="693807610556624488">వ్రాసే చర్య దీనికి సంబంధించిన లక్షణం గరిష్ట పొడవును మించిపోయింది: "<ph name="DEVICE_NAME" />".</translation>
<translation id="6941937518557314510">మీ సర్టిఫికెట్‌తో <ph name="HOST_NAME" />ను ప్రమాణీకరించడానికి దయచేసి <ph name="TOKEN_NAME" />కు సైన్ ఇన్ చేయండి.</translation>
<translation id="6943176775188458830">ముద్రణను రద్దు చేయి</translation>
@@ -3948,12 +3946,12 @@
<translation id="6974609594866392343">ఆఫ్‌లైన్ డెమో మోడ్</translation>
<translation id="6977381486153291903">ఫర్మ్‌వేర్ పునర్విమర్శ</translation>
<translation id="6978121630131642226">శోధన ఇంజిన్‌లు</translation>
-<translation id="6978611942794658017">ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం Chrome వెబ్ స్టోర్‌లో వెతకండి.</translation>
+<translation id="6978611942794658017">ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం Chrome వెబ్ స్టోర్‌లో శోధించండి.</translation>
<translation id="6979158407327259162">Google డిస్క్</translation>
<translation id="6979440798594660689">మ్యూట్ (డిఫాల్ట్)</translation>
<translation id="6979737339423435258">మొత్తం సమయం</translation>
<translation id="6980462514016882061">శోధన, ప్రకటనలు మరియు ఇతర Google సేవలను వ్యక్తిగతీకరించడం కోసం Google మీ బ్రౌజింగ్ చరిత్రను ఉపయోగించవచ్చు</translation>
-<translation id="6981982820502123353">యాక్సెస్ సామర్థ్యం</translation>
+<translation id="6981982820502123353">యాక్సెస్‌</translation>
<translation id="6983783921975806247">రిజిస్టర్ చేసిన OID</translation>
<translation id="6984299437918708277">సైన్-ఇన్ స్క్రీన్‌లో మీ ఖాతాకు ప్రదర్శించడానికి చిత్రాన్ని ఎంచుకోండి</translation>
<translation id="6985235333261347343">Microsoft Key Recovery Agent</translation>
@@ -4094,7 +4092,7 @@
<translation id="7189874332498648577"><ph name="NUMBER_OF_GB" /> GB</translation>
<translation id="7189965711416741966">వేలిముద్ర జోడించబడింది.</translation>
<translation id="7191159667348037">తెలియని ప్రింటర్ (USB)</translation>
-<translation id="7191454237977785534">దీని లాగా ఫైల్ సేవ్ చేయి</translation>
+<translation id="7191454237977785534">ఫైల్‌ను ఇలా సేవ్ చేయి</translation>
<translation id="7193374945610105795"><ph name="ORIGIN" /> కోసం పాస్‌వర్డ్‌లు సేవ్ చేయబడలేదు</translation>
<translation id="7196913789568937443">Google డిస్క్‌కు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాని పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకి అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
<translation id="7197190419934240522">మీరు బ్రౌజ్ చేసే ప్రతిసారి Google శోధన మరియు Google స్మార్ట్‌లను పొందండి</translation>
@@ -4138,7 +4136,7 @@
<translation id="7255002516883565667">ప్రస్తుతం, కేవలం ఈ పరికరంలో మాత్రమే ఉపయోగించగల ఒక కార్డ్ మీ వద్ద ఉంది</translation>
<translation id="7255220508626648026">ప్రసారం చేస్తోంది: <ph name="ROUTETITLE" /></translation>
<translation id="7255935316994522020">వర్తింపజేయి</translation>
-<translation id="7256069762010468647">సైట్ మీ కెమెరాని ఉపయోగిస్తోంది</translation>
+<translation id="7256069762010468647">సైట్ మీ కెమెరాను ఉపయోగిస్తోంది</translation>
<translation id="7256405249507348194">గుర్తించబడని ఎర్రర్: <ph name="DESC" /></translation>
<translation id="7256710573727326513">ట్యాబ్‌లో తెరువు</translation>
<translation id="725758059478686223">ముద్రణ సేవ</translation>
@@ -4193,7 +4191,7 @@
<translation id="7339785458027436441">టైప్ చేసేటప్పుడు స్పెల్ చెక్ చేయి</translation>
<translation id="7339898014177206373">కొత్త విండో</translation>
<translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ఇప్పుడు పూర్తి స్క్రీన్‌లో కనిపిస్తుంది.</translation>
-<translation id="7340650977506865820">సైట్ మీ స్క్రీన్‌ని షేర్ చేస్తోంది</translation>
+<translation id="7340650977506865820">సైట్ మీ స్క్రీన్‌ను షేర్ చేస్తోంది</translation>
<translation id="7341834142292923918">ఈ సైట్‌కు యాక్సెస్ కోరుతోంది</translation>
<translation id="7345706641791090287">మీ పాస్‌వర్డ్‌ను నిర్ధారించండి</translation>
<translation id="7346909386216857016">సరే, అర్థమైంది</translation>
@@ -4383,7 +4381,7 @@
<translation id="7654941827281939388">ఈ ఖాతా ఇప్పటికే ఈ కంప్యూటర్‌లో ఉపయోగించబడుతోంది.</translation>
<translation id="7658239707568436148">రద్దు చేయి</translation>
<translation id="7659584679870740384">ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి.</translation>
-<translation id="7661259717474717992">కుక్కీ డేటాను సేవ్ చేయడానికి, చదవడానికి సైట్‌లను అనుమతించు</translation>
+<translation id="7661259717474717992">కుక్కీ డేటాను సేవ్ చేయడానికి మరియు చదవడానికి సైట్‌లను అనుమతించు</translation>
<translation id="7661451191293163002">నమోదు ప్రమాణపత్రాన్ని పొందడం సాధ్యపడలేదు.</translation>
<translation id="7662283695561029522">కాన్ఫిగర్ చేయడానికి నొక్కండి</translation>
<translation id="7663719505383602579">స్వీకర్త: <ph name="ARC_PROCESS_NAME" /></translation>
@@ -4440,7 +4438,7 @@
<translation id="7748626145866214022">చర్య బార్‌లో మరిన్ని ఎంపికలు అందుబాటులో ఉంటాయి. చర్య బార్‌పై దృష్టి పెట్టడం కోసం Alt + A నొక్కండి.</translation>
<translation id="7750228210027921155">చిత్రంలో చిత్రం</translation>
<translation id="7751260505918304024">అన్నీ చూపించు</translation>
-<translation id="7754704193130578113">ప్రతి ఫైల్‌ను డౌన్‌లోడ్ చేసే ముందు ఎక్కడ సేవ్ చెయ్యాలో అడుగు</translation>
+<translation id="7754704193130578113">ప్రతి ఫైల్‌ను డౌన్‌లోడ్ చేసే ముందు ఎక్కడ సేవ్ చేయాలో అడుగు</translation>
<translation id="7758143121000533418">Family Link</translation>
<translation id="7758450972308449809">మీ ప్రదర్శన సరిహద్దులను సర్దుబాటు చేయండి</translation>
<translation id="7760004034676677601">మీరు ఆశిస్తున్న ప్రారంభ పేజీ ఇదేనా?</translation>
@@ -4465,7 +4463,7 @@
<translation id="7786207843293321886">అతిథిగా నిష్క్రమించు</translation>
<translation id="7786889348652477777">యాప్‌ను &amp;మళ్లీ లోడ్ చేయి</translation>
<translation id="7787308148023287649">మరొక స్క్రీన్‌లో ప్రదర్శించు</translation>
-<translation id="7788080748068240085">ఆఫ్‌లైన్‌లో "<ph name="FILE_NAME" />"ని సేవ్ చేయడానికి మీరు అదనంగా <ph name="TOTAL_FILE_SIZE" /> ఖాళీ స్థలాన్ని తప్పనిసరిగా కలిగి ఉండాలి:<ph name="MARKUP_1" />
+<translation id="7788080748068240085">"<ph name="FILE_NAME" />"ను ఆఫ్‌లైన్‌లో సేవ్ చేయడానికి మీ వద్ద <ph name="TOTAL_FILE_SIZE" /> అదనపు ఖాళీ స్థలం తప్పనిసరిగా ఉండాలి:<ph name="MARKUP_1" />
<ph name="MARKUP_2" />మీరు ఆఫ్‌లైన్‌లో ఇకపై యాక్సెస్ చేయకూడదనుకునే ఫైల్‌లను అన్‌పిన్ చేయండి<ph name="MARKUP_3" />
<ph name="MARKUP_4" />మీ డౌన్‌లోడ్‌ల ఫోల్డర్ నుండి ఫైల్‌లను తొలగించండి<ph name="MARKUP_5" /></translation>
<translation id="7788298548579301890">మీ కంప్యూటర్‌లోని మరొక ప్రోగ్రామ్ Chrome పని చేసే విధానాన్ని మార్చే యాప్‌ను జోడించింది.
@@ -4477,7 +4475,7 @@
<translation id="7791543448312431591">జోడించు</translation>
<translation id="7792012425874949788">సైన్ ఇన్ చేయడంలో ఏదో తప్పు జరిగింది</translation>
<translation id="7792388396321542707">భాగస్వామ్యం చేయడాన్ని ఆపివేయి</translation>
-<translation id="7794058097940213561">పరికరాన్ని ఆకృతీకరించు</translation>
+<translation id="7794058097940213561">ఈ పరికరాన్ని ఫార్మాట్ చేయి</translation>
<translation id="7799299114731150374">వాల్‌పేపర్ విజయవంతంగా సెట్ చేయబడింది</translation>
<translation id="7799329977874311193">HTML పత్రం</translation>
<translation id="7800518121066352902">అ&amp;పసవ్యదిశలో తిప్పు</translation>
@@ -4511,7 +4509,7 @@
<ph name="LIST_ITEM" />డెవలపర్ మరియు సిస్టమ్ రూట్ లాగిన్ పాస్‌వర్డ్ రెండింటినీ అనుకూల విలువకు సెట్ చేయడం, తద్వారా మీరు పరికరంలోకి మ్యానువల్‌గా SSH చేయవచ్చు
<ph name="END_LIST" />
<ph name="BR" />
- ఒకసారి ఆరంభించబడితే, ఎంటర్‌ప్రైజ్ నిర్వాహిత‌ పరికరంలో పవర్‌వాష్ అమలు చేసిన తర్వాత లేదా డేటాను తుడిచివేసిన తర్వాత కూడా చాలా వరకు డీబగ్గింగ్ ఫీచర్‌లు అలాగే ఆరంభించబడి ఉంటాయి. అన్ని డీబగ్గింగ్ ఫీచర్‌లను పూర్తిగా నిలిపివేయడానికి, Chrome OS పునరుద్ధరణ ప్రక్రియ (https://support.google.com/chromebook/answer/1080595) పూర్తి చేయండి.
+ ఒకసారి ఆరంభించబడితే, ఎంటర్‌ప్రైజ్ నిర్వాహిత‌ పరికరంలో పవర్‌వాష్ అమలు చేసిన తర్వాత లేదా డేటాను తుడిచివేసిన తర్వాత కూడా చాలా వరకు డీబగ్గింగ్ ఫీచర్‌లు అలాగే ఆరంభించబడి ఉంటాయి. అన్ని డీబగ్గింగ్ ఫీచర్‌లను పూర్తిగా నిలిపివేయడానికి, Chrome OS పునరుద్ధరణ ప్రక్రియ పూర్తి చేయండి (https://support.google.com/chromebook/answer/1080595).
<ph name="BR" />
<ph name="BR" />
డీబగ్గింగ్ ఫీచర్‌ల గురించి మరింత సమాచారం కోసం, ఈ లింక్‌ను చూడండి:<ph name="BR" />
@@ -4567,7 +4565,7 @@
<translation id="7893008570150657497">మీ కంప్యూటర్ నుండి ఫోటోలు, సంగీతం మరియు ఇతర మీడియాను యాక్సెస్ చేయండి</translation>
<translation id="7893153962594818789">ఈ <ph name="DEVICE_TYPE" />లో బ్లూటూత్ ఆఫ్‌లో ఉంది. మీ పాస్‌వర్డ్‌ను నమోదు చేసి బ్లూటూత్‌ను ఆన్ చేయండి.</translation>
<translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (డిఫాల్ట్)</translation>
-<translation id="7897900149154324287">భవిష్యత్తులో, మీ తీసివేయదగిన పరికరాన్ని అన్‌ప్లగ్ చేయడానికి ముందు ఫైల్స్ యాప్‌లో దాన్ని తొల‌గించ‌డం మర్చిపోవద్దు. లేదంటే, మీరు డేటాను కోల్పోయే అవకాశం ఉంటుంది.</translation>
+<translation id="7897900149154324287">భవిష్యత్తులో, మీ తీసివేయదగిన పరికరాన్ని అన్‌ప్లగ్ చేయడానికి ముందు ఫైల్స్ యాప్‌‌లో దాన్ని ఎజెక్ట్ చేయడం మర్చిపోవద్దు. లేదంటే, మీరు డేటాను కోల్పోయే అవకాశం ఉంటుంది.</translation>
<translation id="7898627924844766532">సాధనపట్టీలో ఉంచండి</translation>
<translation id="7898725031477653577">ఎల్లప్పుడూ అనువదించు</translation>
<translation id="790040513076446191">గోప్యత సంబంధ సెట్టింగ్‌లను మ్యానిపులేట్ చేయండి</translation>
@@ -4577,7 +4575,7 @@
<translation id="7903925330883316394">యుటిలిటీ: <ph name="UTILITY_TYPE" /></translation>
<translation id="7904094684485781019">ఈ ఖాతా నిర్వాహకులు బహుళ సైన్-ఇన్‌ను అనుమతించలేదు.</translation>
<translation id="7904402721046740204">ప్రామాణీకరిస్తోంది</translation>
-<translation id="7908378463497120834">క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజనను మౌంట్ చేయడం వీలుకాలేదు.</translation>
+<translation id="7908378463497120834">క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజన కూడా ఉంచబడదు.</translation>
<translation id="7909969815743704077">అజ్ఞాతంలో డౌన్‌లోడ్ చేయబడింది</translation>
<translation id="7910768399700579500">&amp;క్రొత్త ఫోల్డర్</translation>
<translation id="7911118814695487383">Linux</translation>
@@ -4594,7 +4592,7 @@
<translation id="7931318309563332511">తెలియదు</translation>
<translation id="7932969338829957666">Linuxలో <ph name="BASE_DIR" />లో షేర్ చేసిన ఫోల్డర్‌లు అందుబాటులో ఉన్నాయి.</translation>
<translation id="7933314993013528982">{NUM_TABS,plural, =1{సైట్‌ను అన్‌మ్యూట్ చేయి}other{సైట్‌లను అన్‌మ్యూట్ చేయి}}</translation>
-<translation id="7934414805353235750"><ph name="URL" /> రక్షిత కంటెంట్‌ని ప్లే చేయాలనుకుంటోంది. మీ పరికర గుర్తింపును Google ధృవీకరిస్తుంది.</translation>
+<translation id="7934414805353235750"><ph name="URL" /> రక్షిత కంటెంట్‌ను ప్లే చేయాలనుకుంటోంది. మీ పరికర గుర్తింపును Google ధృవీకరిస్తుంది.</translation>
<translation id="793531125873261495">వర్చువల్ మెషిన్‌ను డౌన్‌లోడ్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="7938594894617528435">ప్రస్తుతం ఆఫ్‌లైన్‌లో ఉంది</translation>
<translation id="7939062555109487992">అధునాతన ఎంపికలు</translation>
@@ -4607,7 +4605,7 @@
<translation id="7947962633355574091">వీడియో చిరునామాను కా&amp;పీ చేయండి</translation>
<translation id="7950040156882184764">ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (HTTP)</translation>
<translation id="7952904276017482715">ఆశించిన ID "<ph name="EXPECTED_ID" />", కానీ ఉన్న ID "<ph name="NEW_ID" />"</translation>
-<translation id="7953739707111622108">పరికరం తెరవడం సాధ్యం కాదు ఎందుకంటే దాని ఫైల్‌సిస్టమ్ గుర్తించబడలేదు.</translation>
+<translation id="7953739707111622108">పరికరం తెరవడం సాధ్యం కాదు. ఎందుకంటే దాని ఫైల్‌సిస్టమ్ గుర్తించబడలేదు.</translation>
<translation id="7953955868932471628">సత్వరమార్గాలను నిర్వహించండి</translation>
<translation id="7957054228628133943">పాప్-అప్‌ను నిరోధించడాన్ని నిర్వహించు...</translation>
<translation id="7957615753207896812">కీబోర్డ్ పరికర సెట్టింగ్‌లను తెరవండి</translation>
@@ -4634,7 +4632,7 @@
<translation id="7986295104073916105">సేవ్ చేసిన పాస్‌వర్డ్ సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి</translation>
<translation id="7987814697832569482">ఎల్లప్పుడూ ఈ VPN ద్వారా కనెక్ట్ చేయి</translation>
<translation id="798835209536175951">మీ Chromebook నుండి వచన సందేశాలను పంపండి లేదా స్వీకరించండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
-<translation id="7988355189918024273">సులభంగా యాక్సెస్‌ చేసే ఫీచ‌ర్‌ల‌ను ప్రారంభించు</translation>
+<translation id="7988355189918024273">సులభంగా యాక్సెస్‌ చేసే ఫీచ‌ర్‌లను ప్రారంభించు</translation>
<translation id="7994702968232966508">EAP పద్ధతి</translation>
<translation id="799547531016638432">షార్ట్‌కట్‌ను తీసివేయి</translation>
<translation id="7997826902155442747">ప్రాసెస్ ప్రాధాన్యత</translation>
@@ -4684,7 +4682,7 @@
<translation id="8052887694493382350">ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించినది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలంగా లేదు. <ph name="BEGIN_LINK_HELP" />మరింత తెలుసుకోండి<ph name="END_LINK_HELP" /></translation>
<translation id="8053278772142718589">PKCS #12 ఫైళ్ళు</translation>
<translation id="8053390638574070785">ఈ పేజీని మళ్లీ లోడ్ చేయి</translation>
-<translation id="8054517699425078995">ఈ రకమైన ఫైల్ మీ పరికరానికి హాని కలిగించవచ్చు. ఏదేమైనా <ph name="FILE_NAME" />ని ఉంచాలనుకుంటున్నారా?</translation>
+<translation id="8054517699425078995">ఈ రకమైన ఫైల్ మీ పరికరానికి హాని కలిగించవచ్చు. ఏది ఏమైనా <ph name="FILE_NAME" />ను ఉంచాలని అనుకుంటున్నారా?</translation>
<translation id="8054563304616131773">దయచేసి చెల్లుబాటు అయ్యే ఇమెయిల్ చిరునామాను నమోదు చేయండి</translation>
<translation id="8054921503121346576">USB కీబోర్డ్ కనెక్ట్ చేయబడింది</translation>
<translation id="8058655154417507695">గడువు ముగింపు సంవత్సరం</translation>
@@ -4731,7 +4729,7 @@
Google Payకి చెందిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు ఇందులో ఉండవు.</translation>
<translation id="81238879832906896">పసుపు మరియు తెలుపు రంగు పుష్పం</translation>
<translation id="8124313775439841391">నిర్వహిత ONC</translation>
-<translation id="813082847718468539">సైట్ సమాచారాన్ని వీక్షించండి</translation>
+<translation id="813082847718468539">సైట్ సమాచారాన్ని చూడండి</translation>
<translation id="8131740175452115882">నిర్ధారించు</translation>
<translation id="8133676275609324831">&amp;ఫోల్డర్‌లో చూపించు</translation>
<translation id="8135557862853121765"><ph name="NUM_KILOBYTES" />K</translation>
@@ -4789,11 +4787,11 @@
<translation id="8209677645716428427">పర్యవేక్షించబడే వినియోగదారు మీ మార్గదర్శకత్వంతో వెబ్‌ను విశ్లేషించవచ్చు. Chromeలో పర్యవేక్షించబడే వినియోగదారు యొక్క నిర్వాహకునిగా మీరు వీటిని చేయవచ్చు:</translation>
<translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{డౌన్‌లోడ్ ప్రోగ్రెస్‌లో ఉంది}other{డౌన్‌లోడ్‌లు ప్రోగ్రెస్‌లో ఉన్నాయి}}</translation>
<translation id="8213449224684199188">ఫోటో మోడ్‌లోకి ప్రవేశించింది</translation>
-<translation id="8213577208796878755">ఒక ఇతర పరికరం అందుబాటులో ఉంది.</translation>
+<translation id="8213577208796878755">ఇతర పరికరం ఒక‌టి అందుబాటులో ఉంది.</translation>
<translation id="8214489666383623925">ఫైల్‌ను తెరువు...</translation>
<translation id="8214962590150211830">ఈ వ్యక్తిని తీసివేయి</translation>
<translation id="8217399928341212914">బహుళ ఫైల్‌ల యొక్క స్వయంచాలక డౌన్‌లోడ్‌లను బ్లాక్ చేయడాన్ని కొనసాగించు</translation>
-<translation id="8223479393428528563">ఈ ఫైల్స్‌ను ఆఫ్‌లైన్‌లో ఉపయోగించేందుకు వాటిని సేవ్ చేయడానికి, తిరిగి ఆన్‌లైన్‌లోకి వచ్చి, ఫైల్స్‌పై కుడి-క్లిక్ చేసి, ఆపై <ph name="OFFLINE_CHECKBOX_NAME" /> ఎంపికను ఎంచుకోండి.</translation>
+<translation id="8223479393428528563">ఈ ఫైల్‌లను ఆఫ్‌లైన్‌లో ఉపయోగించేందుకు వాటిని సేవ్ చేయడానికి, తిరిగి ఆన్‌లైన్‌లోకి వచ్చి, ఫైల్‌లపై కుడి-క్లిక్ చేసి, <ph name="OFFLINE_CHECKBOX_NAME" /> ఎంపికను ఎంచుకోండి.</translation>
<translation id="8225753906568652947">మీ ఆఫర్‌లను రీడీమ్ చేయండి</translation>
<translation id="8226222018808695353">నిషేధించబడింది</translation>
<translation id="8226619461731305576">క్రమ వరుస</translation>
@@ -4840,7 +4838,7 @@
<translation id="8276560076771292512">కాష్‌ను ఖాళీ చేసి, నిర్బంధంగా మళ్లీ లోడ్ చేయి</translation>
<translation id="8281886186245836920">దాటవేయి</translation>
<translation id="8282356762694872144">మీ ఇమెయిల్‌కు కొనసాగించాలా?</translation>
-<translation id="8282947398454257691">మీ ప్రత్యేక పరికర ఐడెంటిఫైయర్‌ని తెలుసుకోవడానికి అనుమతి</translation>
+<translation id="8282947398454257691">మీ ప్రత్యేక పరికర ఐడెంటిఫైయర్‌ను తెలుసుకోవడానికి అనుమతి</translation>
<translation id="8283475148136688298">"<ph name="DEVICE_NAME" />"కు కనెక్ట్ చేస్తున్నప్పుడు ప్రామాణీకరణ కోడ్ తిరస్కరించబడింది.</translation>
<translation id="8284279544186306258">అన్ని <ph name="WEBSITE_1" /> వెబ్‌సైట్‌లు</translation>
<translation id="8286036467436129157">సైన్ ఇన్ చేయండి</translation>
@@ -4889,7 +4887,7 @@
<translation id="8372369524088641025">తప్పుడు WEP కీ</translation>
<translation id="8378714024927312812">మీ సంస్థ ద్వారా నిర్వహించబడుతున్నవి</translation>
<translation id="8379878387931047019">ఈ వెబ్‌సైట్ అభ్యర్థించిన భద్రతా కీ రకానికి ఈ పరికరం మద్దతు ఇవ్వదు</translation>
-<translation id="8382913212082956454">&amp;ఇమెయిల్ చిరునామాను కాపీ చెయ్యి</translation>
+<translation id="8382913212082956454">&amp;ఇమెయిల్ చిరునామాను కాపీ చేయండి</translation>
<translation id="8386091599636877289">విధానం కనుగొనబడలేదు.</translation>
<translation id="8386903983509584791">స్కాన్ పూర్తయింది</translation>
<translation id="8389492867173948260">మీరు సందర్శించే వెబ్‌సైట్‌లలో ఉన్న మీ డేటా మొత్తాన్ని చదవడం లేదా మార్చడం కోసం ఈ ఎక్స్‌టెన్షన్‌ను అనుమతించండి:</translation>
@@ -4958,13 +4956,13 @@
<translation id="8475647382427415476">Google డిస్క్ ప్రస్తుతం "<ph name="FILENAME" />"ని సమకాలీకరించలేకపోయింది. Google డిస్క్ తర్వాత మళ్లీ ప్రయత్నిస్తుంది.</translation>
<translation id="8477241577829954800">బదులు పెట్టు</translation>
<translation id="8477384620836102176">&amp;సాధారణ</translation>
-<translation id="8480082892550707549">మీరు ఇంతకుముందు ఈ సైట్ నుండి ఫైల్‌లను డౌన్‌లోడ్ చేసినప్పటికీ, సైట్ తాత్కాలికంగా అసురక్షితం కావచ్చు (హ్యాకింగ్‌కి గురై ఉండవచ్చు). ఈ ఫైల్‌ను తర్వాత డౌన్‌లోడ్ చేయడానికి ప్రయత్నించండి.</translation>
+<translation id="8480082892550707549">మీరు ఇంతకుముందు ఈ సైట్ నుండి ఫైల్‌లను డౌన్‌లోడ్ చేసినప్పటికీ, సైట్ తాత్కాలికంగా అసురక్షితం కావచ్చు (హ్యాకింగ్‌కు గురై ఉండవచ్చు). ఈ ఫైల్‌ను తర్వాత డౌన్‌లోడ్ చేయడానికి ప్రయత్నించండి.</translation>
<translation id="8480869669560681089"><ph name="VENDOR_NAME" /> నుండి తెలియని పరికరం</translation>
<translation id="8481187309597259238">USB అనుమతిని నిర్ధారించండి</translation>
<translation id="8483248364096924578">IP చిరునామా</translation>
<translation id="8487678622945914333">దగ్గరికి జూమ్ చెయ్యి</translation>
<translation id="8487700953926739672">ఆఫ్‌లైన్‌లో అందుబాటు</translation>
-<translation id="8490896350101740396">కింది కియోస్క్ యాప్‌లు "<ph name="UPDATED_APPS" />" అప్‌డేట్ అయ్యాయి. దయచేసి అప్‌డేట్‌ ప్రాసెస్‌ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి.</translation>
+<translation id="8490896350101740396">కింది కియోస్క్ యాప్‌లు "<ph name="UPDATED_APPS" />" అప్‌డేట్ అయ్యాయి. దయచేసి అప్‌డేట్ ప్రాసెస్‌ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి.</translation>
<translation id="8493236660459102203">మైక్రోఫోన్:</translation>
<translation id="8496717697661868878">ఈ ప్లగ్ఇన్‌ను అమలు చేయి</translation>
<translation id="8497219075884839166">Windows వినియోగాలు</translation>
@@ -5127,7 +5125,7 @@
<translation id="8732844209475700754">గోప్యత, భద్రత మరియు డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్‌లు</translation>
<translation id="8734073480934656039">ఈ సెట్టింగ్‌ను ప్రారంభించడం వలన కియోస్క్ యాప్‌లు ప్రారంభంలో ఆటోమేటిక్‌గా ప్రారంభించడానికి అనుమతించబడతాయి.</translation>
<translation id="873545264931343897"><ph name="PLUGIN_NAME" />ను అప్‌డేట్ చేయడం పూర్తయినప్పుడు, దానిని యాక్టివేట్ చేయడానికి పేజీని మళ్లీ లోడ్ చేయండి</translation>
-<translation id="8736288397686080465">ఈ సైట్ నేపథ్యంలో నవీకరించబడింది.</translation>
+<translation id="8736288397686080465">ఈ సైట్ నేపథ్యంలో అప్‌డేట్ చేయబడింది.</translation>
<translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" />కి బదులుగా <ph name="PROTOCOL" /> లింక్‌లను తెరవాలనుకుంటోంది</translation>
<translation id="8737709691285775803">షిల్</translation>
<translation id="8743390665131937741">పూర్తిస్క్రీన్ జూమ్ స్థాయి:</translation>
@@ -5152,7 +5150,7 @@
<translation id="8770507190024617908">వ్యక్తులను నిర్వహించు</translation>
<translation id="8774934320277480003">ఎగువ అంచు</translation>
<translation id="8775144690796719618">URL చెల్లదు</translation>
-<translation id="8775404590947523323">మీ సవరణలు ఆటోమేటిక్‌గా సేవ్ చేయబడతాయి.<ph name="BREAKS" />అసలు చిత్రం యొక్క నకలును ఉంచడానికి, "అసలును అధిగ‌మించు" ఎంపికను తీసివేయండి</translation>
+<translation id="8775404590947523323">మీ సవరణలు ఆటోమేటిక్‌గా సేవ్ చేయబడతాయి.<ph name="BREAKS" />అసలు చిత్రం యొక్క నకలును ఉంచడానికి, "అసలును భర్తీ చేయి" ఎంపికను తీసివేయండి</translation>
<translation id="8777628254805677039">మూల పాస్‌వర్డ్</translation>
<translation id="8780443667474968681">వాయిస్ శోధన ఆపివేయబడింది.</translation>
<translation id="878069093594050299">ఈ సర్టిఫికెట్ క్రింది ఉపయోగాలకు ధృవీకరించబడింది:</translation>
@@ -5228,7 +5226,7 @@
<translation id="8890516388109605451">మూలాధారాలు</translation>
<translation id="8892168913673237979">అంతా పూర్తయింది!</translation>
<translation id="8893801527741465188">అన్ఇన్‌స్టాల్ పూర్తయింది</translation>
-<translation id="8893928184421379330">క్షమించండి, పరికరం <ph name="DEVICE_LABEL" /> గుర్తించబడలేదు.</translation>
+<translation id="8893928184421379330">క్షమించండి, పరికరం <ph name="DEVICE_LABEL" /> గుర్తించబడలేదు.</translation>
<translation id="8895454554629927345">బుక్‌మార్క్‌ జాబితా</translation>
<translation id="8898786835233784856">తదుపరి టాబ్‌ను ఎంచుకో</translation>
<translation id="8898840733695078011">సిగ్నల్ సామర్థ్యం</translation>
@@ -5246,7 +5244,7 @@
<translation id="8916476537757519021">అజ్ఞాత సబ్‌ఫ్రేమ్: <ph name="SUBFRAME_SITE" /></translation>
<translation id="8919275547519617350">మీ అన్ని పరికరాలలో మీ అన్ని పాస్‌వర్డ్‌‌లను పొందడానికి, సైన్ ఇన్ చేసి, సింక్‌ను ఆన్ చేయండి.</translation>
<translation id="8921366488406707015">మీ భద్రతా కీని ధృవీకరిస్తోంది...</translation>
-<translation id="8922013791253848639">ఎల్లప్పుడూ ఈ సైట్‌లోని ప్రకటనలను అనుమతించు</translation>
+<translation id="8922013791253848639">ప్రకటనలను ఈ సైట్‌లో ఎప్పుడూ అనుమతించు</translation>
<translation id="8925458182817574960">&amp;సెట్టింగ్‌లు</translation>
<translation id="8926389886865778422">మళ్ళి అడగవద్దు</translation>
<translation id="892706138619340876">కొన్ని సెట్టింగ్‌లు రీసెట్ చేయబడ్డాయి</translation>
@@ -5275,7 +5273,7 @@
<translation id="89720367119469899">ఎస్కేప్</translation>
<translation id="8972513834460200407">దయచేసి Google సర్వర్‌ల నుండి డౌన్‌లోడ్‌లను ఫైర్‌వాల్ బ్లాక్ చేయడం లేదని నిర్ధారించుకోవడానికి మీ నెట్‌వర్క్ నిర్వాహకుడిని సంప్రదించండి.</translation>
<translation id="8973557916016709913">జూమ్ స్థాయిని తీసివేయి</translation>
-<translation id="8973596347849323817">మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్ ఫీచర్‌లను సెట్టింగ్‌లలో తర్వాత మార్చవచ్చు.</translation>
+<translation id="8973596347849323817">మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్‌ ఫీచర్‌లను సెట్టింగ్‌ల్లో తర్వాత మార్చవచ్చు.</translation>
<translation id="897414447285476047">కనెక్షన్ సమస్య కారణంగా గమ్యస్థాన ఫైల్ సంపూర్ణంగా లేదు.</translation>
<translation id="8976520271376534479">ఈ పేజీలో ఫ్లాష్ బ్లాక్ చేయబడింది.</translation>
<translation id="8977811652087512276">పాస్‌వర్డ్ తప్పు లేదా ఫైల్ పాడైంది</translation>
@@ -5287,7 +5285,7 @@
<translation id="8986362086234534611">మరిచిపోయారా</translation>
<translation id="8986494364107987395">Googleకు ఆటోమేటిక్‌గా వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను పంపు</translation>
<translation id="8987927404178983737">నెల</translation>
-<translation id="8991520179165052608">సైట్ మీ మైక్రోఫోన్‌ని ఉపయోగించవచ్చు</translation>
+<translation id="8991520179165052608">సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగించవచ్చు</translation>
<translation id="899403249577094719">Netscape సర్టిఫికెట్ ఆధార URL</translation>
<translation id="8995603266996330174"><ph name="DOMAIN" /> ద్వారా నిర్వహించబడుతోంది</translation>
<translation id="8996526648899750015">ఖాతాను జోడించండి...</translation>
@@ -5305,7 +5303,7 @@
<translation id="9020362265352758658">4x</translation>
<translation id="9021662811137657072">వైరస్ కనుగొనబడింది</translation>
<translation id="9022847679183471841">ఈ ఖాతా ఈ కంప్యూటర్‌లో ఇప్పటికే <ph name="AVATAR_NAME" /> ద్వారా ఉపయోగించబడుతోంది.</translation>
-<translation id="9023009238991294202">ఈ పరికరం యొక్క ఇతర వినియోగదారులు ఈ నెట్‌వర్క్‌ని ఉపయోగించగలరు.</translation>
+<translation id="9023009238991294202">ఈ పరికరం యొక్క ఇతర వినియోగదారులు ఈ నెట్‌వర్క్‌ను ఉపయోగించగలరు.</translation>
<translation id="9024127637873500333">&amp;కొత్త‌ ట్యాబ్‌లో తెరువు</translation>
<translation id="9024158959543687197">షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. ఫైల్ షేర్ URLని తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
<translation id="9025098623496448965">సరే, నన్ను తిరిగి సైన్-ఇన్ స్క్రీన్‌కు తీసుకువెళ్లు</translation>
@@ -5384,7 +5382,7 @@
<translation id="9131598836763251128">దయచేసి ఒకటి లేదా మరిన్ని ఫైళ్ళను ఎంచుకోండి</translation>
<translation id="9133055936679483811">జిప్ చేయడంలో విఫలమైంది. <ph name="ERROR_MESSAGE" /></translation>
<translation id="9134304429738380103">అవును, నాకు సమ్మతమే.</translation>
-<translation id="9134524245363717059">ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. Chrome OS అమలయ్యే మీ పరికరానికి ఇది అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం Chrome వెబ్ స్టోర్‌లో వెతకండి.</translation>
+<translation id="9134524245363717059">ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం Chrome వెబ్ స్టోర్‌లో శోధించండి.</translation>
<translation id="9137013805542155359">అసలును చూపించు</translation>
<translation id="9137916601698928395">లింక్‌ను <ph name="USER" /> తరపున తెరువు</translation>
<translation id="9138978632494473300">కింది స్థలాలకు షార్ట్‌కట్‌లను జోడించండి:</translation>
@@ -5395,7 +5393,7 @@
<translation id="9148126808321036104">మళ్ళీ సైన్ ఇన్ చేయండి</translation>
<translation id="9149866541089851383">సవరించు...</translation>
<translation id="9150045010208374699">మీ కెమెరాను ఉపయోగించండి</translation>
-<translation id="9153934054460603056">గుర్తింపు మరియు పాస్‌వర్డ్‌ సేవ్ చెయ్యి</translation>
+<translation id="9153934054460603056">గుర్తింపు మరియు పాస్‌వర్డ్‌ సేవ్ చేయి</translation>
<translation id="9154194610265714752">నవీకరించబడింది</translation>
<translation id="9154418932169119429">ఈ చిత్రం ఆఫ్‌లైన్‌లో అందుబాటులో లేదు.</translation>
<translation id="91568222606626347">షార్ట్‌కట్‌ను సృష్టించు...</translation>
@@ -5413,7 +5411,7 @@
<translation id="9177499212658576372">మీరు ప్రస్తుతానికి <ph name="NETWORK_TYPE" /> నెట్‌వర్క్‌కు కనెక్ట్ చేయబడ్డారు.</translation>
<translation id="9179734824669616955">మీ <ph name="DEVICE_TYPE" />లో Linux (బీటా)ను సెటప్ చేయండి</translation>
<translation id="9180281769944411366">ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. Linux కంటైనర్ ప్రారంభం అవుతోంది.</translation>
-<translation id="9180380851667544951">సైట్ మీ స్క్రీన్‌ని షేర్ చేయవచ్చు</translation>
+<translation id="9180380851667544951">సైట్ మీ స్క్రీన్‌ను షేర్ చేయవచ్చు</translation>
<translation id="9188441292293901223">దయచేసి ఈ <ph name="DEVICE_TYPE" />ను అన్‌లాక్ చేయడానికి మీ ఫోన్‌ను Android తాజా వెర్షన్‌కు అప్‌డేట్ చేయండి.</translation>
<translation id="9188732951356337132">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation>
<translation id="9190063653747922532">L2TP/IPsec + ముందుగా భాగస్వామ్యం చేసిన కీ</translation>
@@ -5477,7 +5475,7 @@
<translation id="987897973846887088">చిత్రాలు ఏమీ అందుబాటులో లేవు</translation>
<translation id="988685240266037636">"<ph name="FILE_NAME" />" పేరు గల ఫైల్ ఇప్పటికే వినియోగంలో ఉంది. మీరు దీనిని భర్తీ చేయాలనుకుంటున్నారా?</translation>
<translation id="988978206646512040">రహస్య పదబంధం ఖాళీగా ఉంటే అనుమతించబడదు</translation>
-<translation id="992032470292211616">పొడిగింపులు, అనువర్తనాలు మరియు థీమ్‌లు మీ పరికరానికి హాని కలిగించవచ్చు. మీరు ఖచ్చితంగా కొనసాగాలనుకుంటున్నారా?</translation>
+<translation id="992032470292211616">ఎక్స్‌టెన్ష‌న్‌లు, యాప్‌లు మరియు థీమ్‌లు మీ పరికరానికి హాని కలిగించవచ్చు. మీరు ఖచ్చితంగా కొనసాగాలని అనుకుంటున్నారా?</translation>
<translation id="992592832486024913">ChromeVox (చదవబడే అభిప్రాయం)ను నిలిపివేయి</translation>
<translation id="993540765962421562">ఇన్‌స్టాలేషన్ జరుగుతోంది</translation>
<translation id="994289308992179865">&amp;లూప్</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_id.xtb b/chromium/chrome/app/resources/google_chrome_strings_id.xtb
index 0651af68ba3..c56f76b42ee 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_id.xtb
@@ -229,7 +229,7 @@ Periksa email Anda di <ph name="ACCOUNT_EMAIL" /> untuk petunjuk lebih lanjut.</
<translation id="7561940363513215021">{0,plural, =1{Chrome akan diluncurkan ulang dalam 1 menit}other{Chrome akan diluncurkan ulang dalam # menit}}</translation>
<translation id="7589360514048265910">Komputer ini tidak akan menerima update Google Chrome lagi karena Mac OS X 10.9 sudah tidak didukung.</translation>
<translation id="7592736734348559088">Google Chrome tidak dapat menyinkronkan data karena detail ID masuk akun Anda belum diperbarui.</translation>
-<translation id="7626032353295482388">Selamat Menggunakan Chrome</translation>
+<translation id="7626032353295482388">Selamat Datang di Chrome</translation>
<translation id="7651907282515937834">Logo Chrome Enterprise</translation>
<translation id="7747138024166251722">Pemasang tidak dapat membuat direktori sementara. Periksa kapasitas kosong pada disk dan izin untuk memasang software.</translation>
<translation id="7761834446675418963">Klik nama Anda untuk membuka Chrome dan mulai menjelajah.</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_ja.xtb b/chromium/chrome/app/resources/google_chrome_strings_ja.xtb
index 348c6613b93..684179716ec 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -229,7 +229,7 @@
<translation id="7561940363513215021">{0,plural, =1{Chrome は 1 分後に再起動されます}other{Chrome は # 分後に再起動されます}}</translation>
<translation id="7589360514048265910">Mac OS X 10.9 はサポートされなくなったため、このパソコンでは今後 Google Chrome のアップデートは受信されません。</translation>
<translation id="7592736734348559088">アカウントのログイン情報が最新ではないため、Google Chrome はデータを同期できませんでした。</translation>
-<translation id="7626032353295482388">Chrome にようこそ</translation>
+<translation id="7626032353295482388">Chrome へようこそ</translation>
<translation id="7651907282515937834">Chrome Enterprise ロゴ</translation>
<translation id="7747138024166251722">インストーラーの一時ディレクトリを作成できませんでした。ディスクの空き領域とソフトウェアのインストール許可があることを確認してください。</translation>
<translation id="7761834446675418963">Chrome を開いてブラウジングを始めるには、名前をクリックしてください。</translation>
diff --git a/chromium/chrome/app/resources/google_chrome_strings_te.xtb b/chromium/chrome/app/resources/google_chrome_strings_te.xtb
index 477d43ac482..eaf459b6c86 100644
--- a/chromium/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chromium/chrome/app/resources/google_chrome_strings_te.xtb
@@ -38,7 +38,7 @@
<translation id="1773601347087397504">Chrome OSను ఉపయోగించడం గురించి సహాయాన్ని పొందండి</translation>
<translation id="1795405610103747296">మీ ఫోన్‌లో Chromeను ఇన్‌స్టాల్ చేయండి. మేము మీ ఫోన్ నంబర్‌కు SMS పంపుతాము: <ph name="PHONE_NUMBER" /></translation>
<translation id="1812689907177901597">దీనిని ఆఫ్ చేయడం ద్వారా, మీరు Chromeకి సైన్ ఇన్ చేయకుండానే Gmail లాంటి Google సైట్‌లలో సైన్ ఇన్ చేయగలరు</translation>
-<translation id="1860536484129686729">ఈ సైట్ కోసం మీ కెమెరాని ఉపయోగించడానికి Chromeకి అనుమతి అవసరం</translation>
+<translation id="1860536484129686729">ఈ సైట్ కోసం మీ కెమెరాను ఉపయోగించడానికి Chromeకు అనుమతి అవసరం</translation>
<translation id="1873233029667955273">Google Chrome మీ డిఫాల్ట్ బ్రౌజర్ కాదు</translation>
<translation id="1874309113135274312">Google Chrome బీటా (mDNS-In)</translation>
<translation id="1877026089748256423">Chrome కాలం చెల్లినది</translation>
@@ -221,7 +221,7 @@
<translation id="7398801000654795464">మీరు <ph name="USER_EMAIL_ADDRESS" />గా Chromeకు సైన్ ఇన్ చేసారు. మళ్లీ సైన్ ఇన్ చేయడానికి, దయచేసి ఇదే ఖాతాను ఉపయోగించండి.</translation>
<translation id="7408085963519505752">Chrome OS నిబంధనలు</translation>
<translation id="7419046106786626209">మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున Chrome OS మీ డేటాను సింక్ చేయ‌లేక‌పోయింది.</translation>
-<translation id="7459554271817304652">వెబ్‌కు మీ వ్యక్తిగతీకరించిన‌ బ్రౌజర్ ఫీచ‌ర్‌ల‌ను సేవ్ చేయడానికి, ఏదైనా కంప్యూటర్‌లోని Google Chrome నుండి అయినా వాటిని యాక్సెస్‌ చేయడానికి సింక్‌ను సెటప్ చేయండి.</translation>
+<translation id="7459554271817304652">వెబ్‌కు మీ వ్యక్తిగతీకరించి బ్రౌజర్ ఫీచర్‌లను సేవ్ చేయడానికి, ఏదైనా కంప్యూటర్‌లోని Google Chrome నుండి అయినా వాటిని యాక్సెస్ చేయడానికి సింక్‌ను సెటప్ చేయండి.</translation>
<translation id="7473136999113284234">Chrome ఆటోమేటిక్‌గా అప్‌డేట్ అవుతుంది కాబట్టి మీ వద్ద ఎప్పుడూ తాజా వెర్షన్ ఉంటుంది.</translation>
<translation id="7486227612705979895">చిరునామా బార్‌లో సూచనలను చేయడానికి Chrome మీ డిస్క్‌ను యాక్సెస్ చేస్తుంది</translation>
<translation id="7535429826459677826">Google Chrome డెవలపర్</translation>
diff --git a/chromium/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chromium/chrome/browser/extensions/api/web_request/web_request_apitest.cc
index a565a712966..dddf65e879f 100644
--- a/chromium/chrome/browser/extensions/api/web_request/web_request_apitest.cc
+++ b/chromium/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -1765,7 +1765,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebRequestApiTest,
content::RenderFrameHost* frame = temp_web_contents->GetMainFrame();
EXPECT_TRUE(api->MaybeProxyURLLoaderFactory(
frame->GetProcess()->GetBrowserContext(), frame,
- frame->GetProcess()->GetID(), false, &request, nullptr));
+ frame->GetProcess()->GetID(), false, false, &request, nullptr));
temp_web_contents.reset();
auto params = network::mojom::URLLoaderFactoryParams::New();
params->process_id = 0;
diff --git a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
index 2283ce8c85e..1695a0d9fc6 100644
--- a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -40,6 +40,7 @@
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_delegate.h"
+#include "content/public/browser/web_contents_observer.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/web_dialogs/web_dialog_delegate.h"
@@ -51,10 +52,13 @@ using content::NavigationController;
using content::WebContents;
using content::WebUIMessageHandler;
+namespace printing {
+
namespace {
// A ui::WebDialogDelegate that specifies the print preview dialog appearance.
-class PrintPreviewDialogDelegate : public ui::WebDialogDelegate {
+class PrintPreviewDialogDelegate : public ui::WebDialogDelegate,
+ public content::WebContentsObserver {
public:
explicit PrintPreviewDialogDelegate(WebContents* initiator);
~PrintPreviewDialogDelegate() override;
@@ -72,14 +76,13 @@ class PrintPreviewDialogDelegate : public ui::WebDialogDelegate {
bool ShouldShowDialogTitle() const override;
private:
- WebContents* initiator_;
+ WebContents* initiator() const { return web_contents(); }
DISALLOW_COPY_AND_ASSIGN(PrintPreviewDialogDelegate);
};
PrintPreviewDialogDelegate::PrintPreviewDialogDelegate(WebContents* initiator)
- : initiator_(initiator) {
-}
+ : content::WebContentsObserver(initiator) {}
PrintPreviewDialogDelegate::~PrintPreviewDialogDelegate() {
}
@@ -116,7 +119,10 @@ void PrintPreviewDialogDelegate::GetDialogSize(gfx::Size* size) const {
web_modal::WebContentsModalDialogHost* host = nullptr;
content::WebContents* outermost_web_contents =
- guest_view::GuestViewBase::GetTopLevelWebContents(initiator_);
+ guest_view::GuestViewBase::GetTopLevelWebContents(initiator());
+ if (!outermost_web_contents)
+ return;
+
Browser* browser = chrome::FindBrowserWithWebContents(outermost_web_contents);
if (browser)
host = browser->window()->GetWebContentsModalDialogHost();
@@ -141,6 +147,12 @@ std::string PrintPreviewDialogDelegate::GetDialogArgs() const {
void PrintPreviewDialogDelegate::OnDialogClosed(
const std::string& /* json_retval */) {
+ if (!initiator())
+ return;
+
+ auto* print_view_manager = PrintViewManager::FromWebContents(initiator());
+ if (print_view_manager)
+ print_view_manager->PrintPreviewAlmostDone();
}
void PrintPreviewDialogDelegate::OnCloseContents(WebContents* /* source */,
@@ -154,8 +166,6 @@ bool PrintPreviewDialogDelegate::ShouldShowDialogTitle() const {
} // namespace
-namespace printing {
-
PrintPreviewDialogController::PrintPreviewDialogController()
: waiting_for_new_preview_page_(false),
is_creating_print_preview_dialog_(false) {
diff --git a/chromium/chrome/browser/printing/print_view_manager.cc b/chromium/chrome/browser/printing/print_view_manager.cc
index 6e42720c4e3..e36cca0528b 100644
--- a/chromium/chrome/browser/printing/print_view_manager.cc
+++ b/chromium/chrome/browser/printing/print_view_manager.cc
@@ -134,6 +134,14 @@ void PrintViewManager::PrintPreviewForWebNode(content::RenderFrameHost* rfh) {
print_preview_state_ = USER_INITIATED_PREVIEW;
}
+void PrintViewManager::PrintPreviewAlmostDone() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ if (print_preview_state_ != SCRIPTED_PREVIEW)
+ return;
+
+ MaybeUnblockScriptedPreviewRPH();
+}
+
void PrintViewManager::PrintPreviewDone() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (print_preview_state_ == NOT_PREVIEWING)
@@ -163,7 +171,10 @@ void PrintViewManager::PrintPreviewDone() {
CHECK(it != map.end());
it->second.Run();
map.erase(it);
- scripted_print_preview_rph_->SetBlocked(false);
+
+ // PrintPreviewAlmostDone() usually already calls this. Calling it again
+ // will likely be a no-op, but do it anyway to reset the state for sure.
+ MaybeUnblockScriptedPreviewRPH();
scripted_print_preview_rph_ = nullptr;
}
print_preview_state_ = NOT_PREVIEWING;
@@ -229,7 +240,11 @@ void PrintViewManager::OnSetupScriptedPrintPreview(
map[rph] = base::Bind(&PrintViewManager::OnScriptedPrintPreviewReply,
base::Unretained(this), reply_msg);
scripted_print_preview_rph_ = rph;
- scripted_print_preview_rph_->SetBlocked(true);
+ DCHECK(!scripted_print_preview_rph_set_blocked_);
+ if (!scripted_print_preview_rph_->IsBlocked()) {
+ scripted_print_preview_rph_->SetBlocked(true);
+ scripted_print_preview_rph_set_blocked_ = true;
+ }
}
void PrintViewManager::OnShowScriptedPrintPreview(content::RenderFrameHost* rfh,
@@ -281,6 +296,13 @@ bool PrintViewManager::OnMessageReceived(
PrintViewManagerBase::OnMessageReceived(message, render_frame_host);
}
+void PrintViewManager::MaybeUnblockScriptedPreviewRPH() {
+ if (scripted_print_preview_rph_set_blocked_) {
+ scripted_print_preview_rph_->SetBlocked(false);
+ scripted_print_preview_rph_set_blocked_ = false;
+ }
+}
+
WEB_CONTENTS_USER_DATA_KEY_IMPL(PrintViewManager)
} // namespace printing
diff --git a/chromium/chrome/browser/printing/print_view_manager.h b/chromium/chrome/browser/printing/print_view_manager.h
index b878a6c6dc0..8415c9ccf35 100644
--- a/chromium/chrome/browser/printing/print_view_manager.h
+++ b/chromium/chrome/browser/printing/print_view_manager.h
@@ -43,8 +43,12 @@ class PrintViewManager : public PrintViewManagerBase,
// a particular WebNode.
void PrintPreviewForWebNode(content::RenderFrameHost* rfh);
- // Notify PrintViewManager that print preview has finished. Unfreeze the
- // renderer in the case of scripted print preview.
+ // Notify PrintViewManager that print preview is about to finish. Unblock the
+ // renderer in the case of scripted print preview if needed.
+ void PrintPreviewAlmostDone();
+
+ // Notify PrintViewManager that print preview has finished. Unblock the
+ // renderer in the case of scripted print preview if needed.
void PrintPreviewDone();
// content::WebContentsObserver implementation.
@@ -77,6 +81,8 @@ class PrintViewManager : public PrintViewManagerBase,
bool source_is_modifiable);
void OnScriptedPrintPreviewReply(IPC::Message* reply_msg);
+ void MaybeUnblockScriptedPreviewRPH();
+
base::OnceClosure on_print_dialog_shown_callback_;
// Current state of print preview for this view.
@@ -89,6 +95,9 @@ class PrintViewManager : public PrintViewManagerBase,
// Keeps track of the pending callback during scripted print preview.
content::RenderProcessHost* scripted_print_preview_rph_ = nullptr;
+ // True if |scripted_print_preview_rph_| needs to be unblocked.
+ bool scripted_print_preview_rph_set_blocked_ = false;
+
// Indicates whether we're switching from print preview to system dialog. This
// flag is true between PrintForSystemDialogNow() and PrintPreviewDone().
bool is_switching_to_system_dialog_ = false;
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
index 8bcbb0646a2..b4275569ab6 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_linux.json
@@ -1,5 +1,5 @@
{
- "x-version": 37,
+ "x-version": 38,
"adobe-flash-player": {
"mime_types": [
"application/futuresplash",
@@ -10,9 +10,9 @@
],
"versions": [
{
- "version": "32.0.0.114",
+ "version": "32.0.0.142",
"status": "up_to_date",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-01.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-06.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
index 37824725779..06ce5108bf6 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_mac.json
@@ -1,5 +1,5 @@
{
- "x-version": 43,
+ "x-version": 44,
"adobe-flash-player": {
"mime_types": [
"application/futuresplash",
@@ -7,9 +7,9 @@
],
"versions": [
{
- "version": "32.0.0.114",
+ "version": "32.0.0.142",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-01.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-06.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
index 2c3ec107446..2dedd1053e8 100644
--- a/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
+++ b/chromium/chrome/browser/resources/plugin_metadata/plugins_win.json
@@ -1,5 +1,5 @@
{
- "x-version": 52,
+ "x-version": 53,
"adobe-flash-player": {
"mime_types": [
"application/futuresplash",
@@ -7,9 +7,9 @@
],
"versions": [
{
- "version": "32.0.0.114",
+ "version": "32.0.0.142",
"status": "requires_authorization",
- "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-01.html"
+ "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-06.html"
}
],
"lang": "en-US",
diff --git a/chromium/chrome/browser/resources/print_preview/new/app.js b/chromium/chrome/browser/resources/print_preview/new/app.js
index 030cdd3a4ba..5055ffd0dd2 100644
--- a/chromium/chrome/browser/resources/print_preview/new/app.js
+++ b/chromium/chrome/browser/resources/print_preview/new/app.js
@@ -537,7 +537,7 @@ Polymer({
const destination = assert(this.destinationStore_.selectedDestination);
this.cloudPrintInterface_.submit(
destination, this.$.model.createCloudJobTicket(destination),
- this.$.documentInfo.title, data);
+ this.documentSettings_.title, data);
},
// <if expr="not chromeos">
diff --git a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html
index fda8a287d76..4274c2b31d8 100644
--- a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html
+++ b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html
@@ -22,8 +22,17 @@
};
}
+ .fingerprint-scanner-tablet {
+ background:
+ url(chrome://theme/IDR_LOGIN_FINGERPRINT_SCANNER_TABLET_ANIMATION);
+ }
+
+ .fingerprint-scanner-laptop {
+ background:
+ url(chrome://theme/IDR_LOGIN_FINGERPRINT_SCANNER_LAPTOP_ANIMATION);
+ }
+
#scannerLocation {
- background: url(chrome://theme/IDR_LOGIN_FINGERPRINT_SCANNER_ANIMATION);
background-position: center;
background-repeat: no-repeat;
background-size: 298px 205px;
@@ -55,6 +64,7 @@
<span>[[getInstructionMessage_(step_, problemMessage_)]]</span>
</div>
<div id="scannerLocation" hidden="[[!showScannerLocation_(step_)]]"
+ class$="[[getFingerprintScannerAnimationClass_()]]"
aria-label="$i18n{configureFingerprintScannerStepAriaLabel}"
aria-live="polite" >
</div>
diff --git a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js
index 39061e653ee..e3f1867824f 100644
--- a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js
+++ b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js
@@ -300,5 +300,17 @@ Polymer({
this.$.arc.setProgress(oldValue, newValue, newValue === 100);
},
+
+ /**
+ * Returns the class name for fingerprint scanner animation.
+ * @private
+ */
+ getFingerprintScannerAnimationClass_: function() {
+ if (loadTimeData.getBoolean('fingerprintUnlockEnabled') &&
+ loadTimeData.getBoolean('isFingerprintReaderOnKeyboard')) {
+ return 'fingerprint-scanner-laptop';
+ }
+ return 'fingerprint-scanner-tablet';
+ },
});
})();
diff --git a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js
index 12801134687..7913ebb4a9d 100644
--- a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js
+++ b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -165,7 +165,12 @@ Polymer({
settings.setGlobalScrollTarget(this.$.container);
const scrollToTop = top => new Promise(resolve => {
- this.$.container.scrollTo({top, behavior: 'smooth'});
+ // When transitioning back to main page from a subpage on ChromeOS, using
+ // 'smooth' scroll here results in the scroll changing to whatever is last
+ // value of |top|. This happens even after setting the scroll position the
+ // UI or programmatically.
+ const behavior = cr.isChromeOS ? 'auto' : 'smooth';
+ this.$.container.scrollTo({top: top, behavior: behavior});
const onScroll = () => {
this.debounce('scrollEnd', () => {
this.$.container.removeEventListener('scroll', onScroll);
diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
index 40649db94f2..14217b3493e 100644
--- a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
+++ b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -314,9 +314,7 @@ void GaiaScreenHandler::MaybePreloadAuthExtension() {
VLOG(1) << "MaybePreloadAuthExtension";
if (!network_portal_detector_) {
- NetworkPortalDetectorImpl* detector = new NetworkPortalDetectorImpl(
- g_browser_process->system_network_context_manager()
- ->GetURLLoaderFactory());
+ NetworkPortalDetectorImpl* detector = new NetworkPortalDetectorImpl();
detector->set_portal_test_url(GURL(kRestrictiveProxyURL));
network_portal_detector_.reset(detector);
network_portal_detector_->AddObserver(this);
diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index 660b87c4450..fb5bf35d23c 100644
--- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -7,6 +7,7 @@
#include <stddef.h>
#include <memory>
+#include <string>
#include <utility>
#include "ash/public/cpp/ash_features.h"
@@ -23,6 +24,7 @@
#include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen_view.h"
#include "chrome/browser/chromeos/login/enrollment/enrollment_screen_view.h"
+#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/chromeos/login/screens/demo_preferences_screen_view.h"
#include "chrome/browser/chromeos/login/screens/demo_setup_screen_view.h"
#include "chrome/browser/chromeos/login/screens/error_screen.h"
@@ -102,6 +104,7 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/ui_base_features.h"
#include "ui/base/webui/web_ui_util.h"
+#include "ui/chromeos/resources/grit/ui_chromeos_resources.h"
#include "ui/display/display.h"
#include "ui/events/devices/input_device.h"
#include "ui/events/devices/input_device_manager.h"
@@ -197,6 +200,16 @@ void AddEnterpriseEnrollmentResources(content::WebUIDataSource* source) {
source->AddResourcePath(kEnrollmentJSPath, IDR_OOBE_ENROLLMENT_JS);
}
+void AddFingerprintResources(content::WebUIDataSource* source) {
+ if (quick_unlock::IsFingerprintReaderOnKeyboard()) {
+ source->AddResourcePath("fingerprint_scanner_animation.png",
+ IDR_LOGIN_FINGERPRINT_SCANNER_LAPTOP_ANIMATION);
+ } else {
+ source->AddResourcePath("fingerprint_scanner_animation.png",
+ IDR_LOGIN_FINGERPRINT_SCANNER_TABLET_ANIMATION);
+ }
+}
+
// Default and non-shared resource definition for kOobeDisplay display type.
// chrome://oobe/oobe
void AddOobeDisplayTypeDefaultResources(content::WebUIDataSource* source) {
@@ -266,6 +279,7 @@ content::WebUIDataSource* CreateOobeUIDataSource(
AddProductLogoResources(source);
if (display_type != OobeUI::kLockDisplay) {
+ AddFingerprintResources(source);
AddSyncConsentResources(source);
AddArcScreensResources(source);
AddEnterpriseEnrollmentResources(source);
diff --git a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
index 5a9b7b784ef..34587daaef9 100644
--- a/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
+++ b/chromium/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -113,6 +113,7 @@
#include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
#include "components/arc/arc_util.h"
#include "ui/base/ui_base_features.h"
+#include "ui/chromeos/resources/grit/ui_chromeos_resources.h"
#else // !defined(OS_CHROMEOS)
#include "chrome/browser/signin/account_consistency_mode_manager.h"
#include "chrome/browser/ui/webui/settings/settings_default_browser_handler.h"
@@ -313,9 +314,15 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
html_source->AddBoolean(
"quickUnlockDisabledByPolicy",
chromeos::quick_unlock::IsPinDisabledByPolicy(profile->GetPrefs()));
- html_source->AddBoolean(
- "fingerprintUnlockEnabled",
- chromeos::quick_unlock::IsFingerprintEnabled(profile));
+ const bool fingerprint_unlock_enabled =
+ chromeos::quick_unlock::IsFingerprintEnabled(profile);
+ html_source->AddBoolean("fingerprintUnlockEnabled",
+ fingerprint_unlock_enabled);
+ if (fingerprint_unlock_enabled) {
+ html_source->AddBoolean(
+ "isFingerprintReaderOnKeyboard",
+ chromeos::quick_unlock::IsFingerprintReaderOnKeyboard());
+ }
html_source->AddBoolean("lockScreenNotificationsEnabled",
ash::features::IsLockScreenNotificationsEnabled());
html_source->AddBoolean(
diff --git a/chromium/chrome/browser/ui/webui/welcome/nux/constants.cc b/chromium/chrome/browser/ui/webui/welcome/nux/constants.cc
index d616532f1ce..06f0a13b20a 100644
--- a/chromium/chrome/browser/ui/webui/welcome/nux/constants.cc
+++ b/chromium/chrome/browser/ui/webui/welcome/nux/constants.cc
@@ -16,10 +16,10 @@ const base::Feature kNuxOnboardingFeature{"NuxOnboarding",
// chrome/browser/resources/welcome/onboarding_welcome/welcome_app.js
const base::FeatureParam<std::string> kNuxOnboardingNewUserModules{
&kNuxOnboardingFeature, "new-user-modules",
- "nux-email,nux-google-apps,nux-set-as-default,signin-view"};
+ "nux-google-apps,nux-email,nux-set-as-default,signin-view"};
const base::FeatureParam<std::string> kNuxOnboardingReturningUserModules{
&kNuxOnboardingFeature, "returning-user-modules", "nux-set-as-default"};
const base::FeatureParam<bool> kNuxOnboardingShowEmailInterstitial{
- &kNuxOnboardingFeature, "show-email-interstitial", true};
+ &kNuxOnboardingFeature, "show-email-interstitial", false};
} // namespace nux
diff --git a/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc b/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc
index 05132e5ae81..ded62340fd9 100644
--- a/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc
+++ b/chromium/chrome/browser/ui/webui/welcome/nux_helper.cc
@@ -32,11 +32,12 @@ const base::Feature kNuxOnboardingForceEnabled = {
// chrome/browser/resources/welcome/onboarding_welcome/welcome_app.js
const base::FeatureParam<std::string> kNuxOnboardingForceEnabledNewUserModules =
{&kNuxOnboardingForceEnabled, "new-user-modules",
- "nux-email,nux-google-apps,nux-set-as-default,signin-view"};
+ "nux-google-apps,nux-email,nux-set-as-default,signin-view"};
const base::FeatureParam<std::string>
kNuxOnboardingForceEnabledReturningUserModules = {
&kNuxOnboardingForceEnabled, "returning-user-modules",
"nux-set-as-default"};
+// TODO(hcarmona): remove this flag and all code behind it.
const base::FeatureParam<bool> kNuxOnboardingForceEnabledShowEmailInterstitial =
{&kNuxOnboardingForceEnabled, "show-email-interstitial", true};
diff --git a/chromium/chrome/common/extensions/api/_api_features.json b/chromium/chrome/common/extensions/api/_api_features.json
index a5c0d27639d..065a299280c 100644
--- a/chromium/chrome/common/extensions/api/_api_features.json
+++ b/chromium/chrome/common/extensions/api/_api_features.json
@@ -297,7 +297,7 @@
"dashboardPrivate": [{
"channel": "stable",
"contexts": ["blessed_web_page", "web_page"],
- "matches": ["https://chrome.google.com/*"]
+ "matches": ["https://chrome.google.com/webstore/*"]
}, {
"channel": "stable",
"contexts": ["blessed_extension"],
diff --git a/chromium/chrome/common/url_constants.cc b/chromium/chrome/common/url_constants.cc
index ae6378e7ea6..d1660bd5ef4 100644
--- a/chromium/chrome/common/url_constants.cc
+++ b/chromium/chrome/common/url_constants.cc
@@ -153,9 +153,8 @@ const char kLegacySupervisedUserManagementDisplayURL[] =
const char kLegacySupervisedUserManagementURL[] =
"https://www.chrome.com/manage";
-// TODO(nicolaso): Replace with a p-link once it's ready. b/117655761
const char kManagedUiLearnMoreUrl[] =
- "https://support.google.com/chromebook/answer/1331549";
+ "https://support.google.com/chromebook/?p=is_chrome_managed";
const char kMyActivityUrlInClearBrowsingData[] =
"https://myactivity.google.com/myactivity/?utm_source=chrome_cbd";
diff --git a/chromium/components/arc/metrics/arc_metrics_service.cc b/chromium/components/arc/metrics/arc_metrics_service.cc
index 80894857e12..eb023fc5018 100644
--- a/chromium/components/arc/metrics/arc_metrics_service.cc
+++ b/chromium/components/arc/metrics/arc_metrics_service.cc
@@ -424,6 +424,11 @@ void ArcMetricsService::RecordEngagementTimeToUmaIfNeeded() {
base::TimeDelta::FromSeconds(1),
base::TimeDelta::FromDays(1) + kUpdateEngagementTimePeriod, 50);
UMA_HISTOGRAM_CUSTOM_TIMES(
+ "Arc.EngagementTime.ArcTotal",
+ engagement_time_foreground_ + engagement_time_background_,
+ base::TimeDelta::FromSeconds(1),
+ base::TimeDelta::FromDays(1) + kUpdateEngagementTimePeriod, 50);
+ UMA_HISTOGRAM_CUSTOM_TIMES(
"Arc.EngagementTime.Foreground", engagement_time_foreground_,
base::TimeDelta::FromSeconds(1),
base::TimeDelta::FromDays(1) + kUpdateEngagementTimePeriod, 50);
diff --git a/chromium/components/arc/metrics/arc_metrics_service_unittest.cc b/chromium/components/arc/metrics/arc_metrics_service_unittest.cc
index 95bb3169ce4..a5e64668ea7 100644
--- a/chromium/components/arc/metrics/arc_metrics_service_unittest.cc
+++ b/chromium/components/arc/metrics/arc_metrics_service_unittest.cc
@@ -464,6 +464,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeSessionLocked) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(0), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -480,6 +482,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeSessionActive) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(1), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -497,6 +501,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeScreenDimmed) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(0), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -518,6 +524,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeArcWindowFocused) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(1), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(1), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(1), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -538,6 +546,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeNonArcWindowFocused) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(1), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -556,6 +566,8 @@ TEST_F(ArcMetricsServiceTest, RecordEngagementTimeAppInBackground) {
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(1), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(1), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(0), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
@@ -579,6 +591,8 @@ TEST_F(ArcMetricsServiceTest,
TriggerRecordEngagementTimeToUma();
tester.ExpectTimeBucketCount("Arc.EngagementTime.Total",
base::TimeDelta::FromSeconds(1), 1);
+ tester.ExpectTimeBucketCount("Arc.EngagementTime.ArcTotal",
+ base::TimeDelta::FromSeconds(1), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Foreground",
base::TimeDelta::FromSeconds(1), 1);
tester.ExpectTimeBucketCount("Arc.EngagementTime.Background",
diff --git a/chromium/components/autofill_strings.grdp b/chromium/components/autofill_strings.grdp
index 9996ab7959b..2016de68e4f 100644
--- a/chromium/components/autofill_strings.grdp
+++ b/chromium/components/autofill_strings.grdp
@@ -214,7 +214,7 @@
<message name="IDS_AUTOFILL_SAVE_CARD_PROMPT_TITLE_LOCAL" desc="Title text for the Autofill save card prompt when the card is to be saved locally. The prompt can be either a bubble or an infobar.">
Save card?
</message>
- <message name="IDS_AUTOFILL_NAME_FIX_FLOW_PROMPT_SAVE_CARD" desc="Text to show for the Autofill save credit card prompt card holder name fix flow button.">
+ <message name="IDS_AUTOFILL_NAME_FIX_FLOW_PROMPT_SAVE_CARD" desc="Text to show for the Autofill save credit card prompt card holder name fix flow button." formatter_data="android_java">
Save card
</message>
<if expr="is_linux and not chromeos">
diff --git a/chromium/components/crash/content/app/crash_reporter_client.cc b/chromium/components/crash/content/app/crash_reporter_client.cc
index b3b09cee8d6..c3c3f9db07d 100644
--- a/chromium/components/crash/content/app/crash_reporter_client.cc
+++ b/chromium/components/crash/content/app/crash_reporter_client.cc
@@ -148,7 +148,7 @@ bool CrashReporterClient::ReportingIsEnforcedByPolicy(bool* breakpad_enabled) {
}
#if defined(OS_ANDROID)
-unsigned int CrashReporterClient::GetCrashDumpPercentageForWebView() {
+unsigned int CrashReporterClient::GetCrashDumpPercentage() {
return 100;
}
diff --git a/chromium/components/crash/content/app/crash_reporter_client.h b/chromium/components/crash/content/app/crash_reporter_client.h
index caebf67a7e0..1d35caa3671 100644
--- a/chromium/components/crash/content/app/crash_reporter_client.h
+++ b/chromium/components/crash/content/app/crash_reporter_client.h
@@ -156,7 +156,7 @@ class CrashReporterClient {
// Used by WebView to sample crashes without generating the unwanted dumps. If
// the returned value is less than 100, crash dumping will be sampled to that
// percentage.
- virtual unsigned int GetCrashDumpPercentageForWebView();
+ virtual unsigned int GetCrashDumpPercentage();
// Returns true if |ptype| was set to a value to override the default `ptype`
// annotation used for the browser process.
diff --git a/chromium/components/crash/content/app/crashpad_linux.cc b/chromium/components/crash/content/app/crashpad_linux.cc
index 6244bfef583..1c1c80bc92d 100644
--- a/chromium/components/crash/content/app/crashpad_linux.cc
+++ b/chromium/components/crash/content/app/crashpad_linux.cc
@@ -20,6 +20,7 @@
#include "base/path_service.h"
#include "base/posix/eintr_wrapper.h"
#include "base/posix/global_descriptors.h"
+#include "base/rand_util.h"
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "build/build_config.h"
@@ -639,8 +640,9 @@ base::FilePath PlatformCrashpadInitialization(
base::android::SetJavaExceptionCallback(SetJavaExceptionInfo);
unsigned int dump_percentage =
- GetCrashReporterClient()->GetCrashDumpPercentageForWebView();
- if (dump_percentage < 100 && rand() % 100 >= dump_percentage) {
+ GetCrashReporterClient()->GetCrashDumpPercentage();
+ if (dump_percentage < 100 &&
+ static_cast<unsigned int>(base::RandInt(0, 99)) >= dump_percentage) {
dump_at_crash = false;
}
#endif // OS_ANDROID
diff --git a/chromium/components/previews/content/previews_hints.cc b/chromium/components/previews/content/previews_hints.cc
index 5a8011f46ab..c6b31fd2494 100644
--- a/chromium/components/previews/content/previews_hints.cc
+++ b/chromium/components/previews/content/previews_hints.cc
@@ -6,7 +6,6 @@
#include <unordered_set>
-#include "base/command_line.h"
#include "base/files/file.h"
#include "base/files/file_util.h"
#include "base/metrics/histogram_functions.h"
@@ -463,14 +462,13 @@ bool PreviewsHints::IsBlacklisted(const GURL& url, PreviewsType type) const {
// Check large scale blacklists received from the server.
// (At some point, we may have blacklisting to check in HintCache as well.)
if (type == PreviewsType::LITE_PAGE_REDIRECT) {
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kIgnoreLitePageRedirectOptimizationBlacklist)) {
- return false;
+ // If no bloom filter blacklist is provided by the component update, assume
+ // a server error and return true.
+ if (!lite_page_redirect_blacklist_) {
+ return true;
}
- if (lite_page_redirect_blacklist_) {
- return lite_page_redirect_blacklist_->ContainsHostSuffix(url);
- }
+ return lite_page_redirect_blacklist_->ContainsHostSuffix(url);
}
return false;
diff --git a/chromium/components/previews/content/previews_hints_unittest.cc b/chromium/components/previews/content/previews_hints_unittest.cc
index 474cf0159c9..9fa246bedb0 100644
--- a/chromium/components/previews/content/previews_hints_unittest.cc
+++ b/chromium/components/previews/content/previews_hints_unittest.cc
@@ -259,32 +259,27 @@ TEST_F(PreviewsHintsTest, LogHintCacheMatch) {
5 /* EFFECTIVE_CONNECTION_TYPE_4G */, 1);
}
-TEST_F(PreviewsHintsTest, IsBlacklisted) {
+TEST_F(PreviewsHintsTest, IsBlacklistedReturnsTrueIfNoBloomFilter) {
base::test::ScopedFeatureList scoped_list;
scoped_list.InitAndEnableFeature(features::kLitePageServerPreviews);
- BloomFilter blacklist_bloom_filter(kBlackBlacklistBloomFilterNumHashFunctions,
- kBlackBlacklistBloomFilterNumBits);
- PopulateBlackBlacklistBloomFilter(&blacklist_bloom_filter);
-
optimization_guide::proto::Configuration config;
- AddBlacklistBloomFilterToConfig(blacklist_bloom_filter,
- kBlackBlacklistBloomFilterNumHashFunctions,
- kBlackBlacklistBloomFilterNumBits, &config);
ParseConfig(config);
- EXPECT_TRUE(HasLitePageRedirectBlacklist());
+ EXPECT_FALSE(HasLitePageRedirectBlacklist());
+
EXPECT_FALSE(previews_hints()->IsBlacklisted(GURL("https://black.com/path"),
PreviewsType::LOFI));
+
EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://joe.black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
- EXPECT_FALSE(previews_hints()->IsBlacklisted(
+ EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://nonblack.com"), PreviewsType::LITE_PAGE_REDIRECT));
}
-TEST_F(PreviewsHintsTest, IgnoreLitePageRedirectBlacklist) {
+TEST_F(PreviewsHintsTest, IsBlacklisted) {
base::test::ScopedFeatureList scoped_list;
scoped_list.InitAndEnableFeature(features::kLitePageServerPreviews);
@@ -298,14 +293,12 @@ TEST_F(PreviewsHintsTest, IgnoreLitePageRedirectBlacklist) {
kBlackBlacklistBloomFilterNumBits, &config);
ParseConfig(config);
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kIgnoreLitePageRedirectOptimizationBlacklist);
-
+ EXPECT_TRUE(HasLitePageRedirectBlacklist());
EXPECT_FALSE(previews_hints()->IsBlacklisted(GURL("https://black.com/path"),
PreviewsType::LOFI));
- EXPECT_FALSE(previews_hints()->IsBlacklisted(
+ EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
- EXPECT_FALSE(previews_hints()->IsBlacklisted(
+ EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://joe.black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
EXPECT_FALSE(previews_hints()->IsBlacklisted(
GURL("https://nonblack.com"), PreviewsType::LITE_PAGE_REDIRECT));
@@ -337,7 +330,7 @@ TEST_F(PreviewsHintsTest, ParseConfigWithInsufficientConfigDetails) {
"Previews.OptimizationFilterStatus.LitePageRedirect",
2 /* FAILED_SERVER_BLACKLIST_BAD_CONFIG */, 1);
- EXPECT_FALSE(previews_hints()->IsBlacklisted(
+ EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
}
@@ -369,7 +362,7 @@ TEST_F(PreviewsHintsTest, ParseConfigWithTooLargeBlacklist) {
"Previews.OptimizationFilterStatus.LitePageRedirect",
3 /* FAILED_SERVER_BLACKLIST_TOO_BIG */, 1);
- EXPECT_FALSE(previews_hints()->IsBlacklisted(
+ EXPECT_TRUE(previews_hints()->IsBlacklisted(
GURL("https://black.com/path"), PreviewsType::LITE_PAGE_REDIRECT));
}
diff --git a/chromium/components/previews/content/previews_optimization_guide.cc b/chromium/components/previews/content/previews_optimization_guide.cc
index cc16e22fdc5..4c1f93733c6 100644
--- a/chromium/components/previews/content/previews_optimization_guide.cc
+++ b/chromium/components/previews/content/previews_optimization_guide.cc
@@ -129,11 +129,22 @@ bool PreviewsOptimizationGuide::IsWhitelisted(
bool PreviewsOptimizationGuide::IsBlacklisted(const GURL& url,
PreviewsType type) const {
DCHECK(ui_task_runner_->BelongsToCurrentThread());
- if (!hints_) {
- return false;
+
+ if (type == PreviewsType::LITE_PAGE_REDIRECT) {
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kIgnoreLitePageRedirectOptimizationBlacklist)) {
+ return false;
+ }
+
+ if (!hints_)
+ return true;
+
+ return hints_->IsBlacklisted(url, PreviewsType::LITE_PAGE_REDIRECT);
}
- return hints_->IsBlacklisted(url, type);
+ // This function is only used by lite page redirect.
+ NOTREACHED();
+ return false;
}
void PreviewsOptimizationGuide::OnLoadedHint(
diff --git a/chromium/components/previews/content/previews_optimization_guide_unittest.cc b/chromium/components/previews/content/previews_optimization_guide_unittest.cc
index dfba646da12..aca9b7cd247 100644
--- a/chromium/components/previews/content/previews_optimization_guide_unittest.cc
+++ b/chromium/components/previews/content/previews_optimization_guide_unittest.cc
@@ -1514,7 +1514,7 @@ TEST_F(PreviewsOptimizationGuideTest, IsBlacklisted) {
base::test::ScopedFeatureList scoped_list;
scoped_list.InitAndEnableFeature(features::kLitePageServerPreviews);
- EXPECT_FALSE(
+ EXPECT_TRUE(
guide()->IsBlacklisted(GURL("https://m.blacklisteddomain.com/path"),
PreviewsType::LITE_PAGE_REDIRECT));
@@ -1523,7 +1523,7 @@ TEST_F(PreviewsOptimizationGuideTest, IsBlacklisted) {
EXPECT_TRUE(
guide()->IsBlacklisted(GURL("https://m.blacklisteddomain.com/path"),
PreviewsType::LITE_PAGE_REDIRECT));
- EXPECT_FALSE(guide()->IsBlacklisted(
+ EXPECT_DCHECK_DEATH(guide()->IsBlacklisted(
GURL("https://m.blacklisteddomain.com/path"), PreviewsType::NOSCRIPT));
EXPECT_TRUE(guide()->IsBlacklisted(
@@ -1534,6 +1534,22 @@ TEST_F(PreviewsOptimizationGuideTest, IsBlacklisted) {
PreviewsType::LITE_PAGE_REDIRECT));
}
+TEST_F(PreviewsOptimizationGuideTest, LitePageRedirectSkipIsBlacklistedCheck) {
+ base::test::ScopedFeatureList scoped_list;
+ scoped_list.InitAndEnableFeature(features::kLitePageServerPreviews);
+ InitializeWithLitePageRedirectBlacklist();
+
+ EXPECT_TRUE(
+ guide()->IsBlacklisted(GURL("https://m.blacklisteddomain.com/path"),
+ PreviewsType::LITE_PAGE_REDIRECT));
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kIgnoreLitePageRedirectOptimizationBlacklist);
+
+ EXPECT_FALSE(
+ guide()->IsBlacklisted(GURL("https://m.blacklisteddomain.com/path"),
+ PreviewsType::LITE_PAGE_REDIRECT));
+}
+
TEST_F(PreviewsOptimizationGuideTest,
IsBlacklistedWithLitePageServerPreviewsDisabled) {
base::test::ScopedFeatureList scoped_list;
@@ -1541,7 +1557,7 @@ TEST_F(PreviewsOptimizationGuideTest,
InitializeWithLitePageRedirectBlacklist();
- EXPECT_FALSE(
+ EXPECT_TRUE(
guide()->IsBlacklisted(GURL("https://m.blacklisteddomain.com/path"),
PreviewsType::LITE_PAGE_REDIRECT));
}
diff --git a/chromium/components/strings/components_strings_ca.xtb b/chromium/components/strings/components_strings_ca.xtb
index 15d733328a1..29ac6d2bc62 100644
--- a/chromium/components/strings/components_strings_ca.xtb
+++ b/chromium/components/strings/components_strings_ca.xtb
@@ -834,7 +834,7 @@
<translation id="625755898061068298">Has decidit desactivar els advertiments de seguretat en aquest lloc.</translation>
<translation id="6259156558325130047">&amp;Refés el canvi d'ordre</translation>
<translation id="6263376278284652872">Adreces d'interès de <ph name="DOMAIN" /></translation>
-<translation id="6264485186158353794">Torna a l'àrea de seguretat</translation>
+<translation id="6264485186158353794">Torna a una pàgina segura</translation>
<translation id="6266934640124581640">Verd blavós clar</translation>
<translation id="6276112860590028508">Les pàgines de la teva llista de lectura es mostren aquí</translation>
<translation id="627746635834430766">Perquè la propera vegada puguis pagar més ràpidament, desa la targeta i l'adreça de facturació al compte de Google.</translation>
diff --git a/chromium/components/strings/components_strings_es-419.xtb b/chromium/components/strings/components_strings_es-419.xtb
index 9be328f398c..63daadfff74 100644
--- a/chromium/components/strings/components_strings_es-419.xtb
+++ b/chromium/components/strings/components_strings_es-419.xtb
@@ -175,7 +175,7 @@
<translation id="1948773908305951926">Tarjetas de prepago aceptadas</translation>
<translation id="1962204205936693436">Favoritos de <ph name="DOMAIN" /></translation>
<translation id="1973335181906896915">Error de serialización</translation>
-<translation id="1974060860693918893">Avanzada</translation>
+<translation id="1974060860693918893">Configuración avanzada</translation>
<translation id="1978555033938440688">Versión de firmware</translation>
<translation id="1981206234434200693">Borrar datos del historial de navegación de Chrome</translation>
<translation id="2001146170449793414">{COUNT,plural, =1{y 1 más}other{y # más}}</translation>
diff --git a/chromium/components/strings/components_strings_te.xtb b/chromium/components/strings/components_strings_te.xtb
index f365f78af72..fff62d730ad 100644
--- a/chromium/components/strings/components_strings_te.xtb
+++ b/chromium/components/strings/components_strings_te.xtb
@@ -1,7 +1,7 @@
<?xml version="1.0" ?>
<!DOCTYPE translationbundle>
<translationbundle lang="te">
-<translation id="1005145902654145231">సెషన్ పేరుని మార్చడం విఫలమైంది.</translation>
+<translation id="1005145902654145231">సెషన్ పేరును మార్చడం విఫలమైంది.</translation>
<translation id="1008557486741366299">ఇప్పుడు కాదు</translation>
<translation id="1010200102790553230">పేజీని తర్వాత లోడ్ చేయి</translation>
<translation id="1015730422737071372">అదనపు వివరాలను అందించండి</translation>
@@ -20,7 +20,7 @@
<translation id="1089439967362294234">పాస్‌వర్డ్‌ని మార్చు</translation>
<translation id="109743633954054152">Chrome సెట్టింగ్‌లలో పాస్‌వర్డ్‌లను నిర్వహించండి</translation>
<translation id="1103523840287552314">ఎల్లప్పుడూ <ph name="LANGUAGE" />ను అనువదించు</translation>
-<translation id="1107591249535594099">ఎంచుకున్నట్లయితే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chrome మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది.</translation>
+<translation id="1107591249535594099">ఎంచుకున్నట్లయితే, Chrome వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది.</translation>
<translation id="1110994991967754504"><ph name="PERMISSION_NAME" /> కోసం అనుమతిని ఎంచుకోండి</translation>
<translation id="1111153019813902504">ఇటీవలి బుక్‌మార్క్‌లు</translation>
<translation id="1113869188872983271">&amp;మళ్లీ క్రమం చేయడాన్ని రద్దు చేయి</translation>
@@ -29,7 +29,7 @@
<translation id="112840717907525620">విధాన కాష్ సరిపోయింది</translation>
<translation id="1150979032973867961">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని మీ కంప్యూటర్ ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కి అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
<translation id="1151972924205500581">పాస్‌వర్డ్ అవసరం</translation>
-<translation id="1152921474424827756"><ph name="URL" /> యొక్క <ph name="BEGIN_LINK" />కాష్ చేయబడిన కాపీ<ph name="END_LINK" />ని యాక్సెస్ చేయండి</translation>
+<translation id="1152921474424827756"><ph name="URL" /> యొక్క <ph name="BEGIN_LINK" />కాష్ చేయబడిన కాపీ<ph name="END_LINK" />ని యాక్సెస్‌ చేయండి</translation>
<translation id="1156303062776767266">మీరు స్థానిక లేదా షేర్ చేసిన ఫైల్‌ను చూస్తున్నారు</translation>
<translation id="1158211211994409885"><ph name="HOST_NAME" /> ఊహించని విధంగా కనెక్షన్‌ను మూసివేసింది.</translation>
<translation id="1161325031994447685">Wi-Fiకి మళ్లీ కనెక్ట్ చేయడం</translation>
@@ -39,7 +39,7 @@
<translation id="1181037720776840403">తీసివేయి</translation>
<translation id="1197088940767939838">నారింజ రంగు</translation>
<translation id="1201402288615127009">తరువాత</translation>
-<translation id="1201895884277373915">ఈ సైట్ నుండి మరింత</translation>
+<translation id="1201895884277373915">ఈ సైట్ నుండి మరికొన్ని</translation>
<translation id="1206967143813997005">తప్పు ప్రారంభ సంతకం</translation>
<translation id="1209206284964581585">ప్రస్తుతానికి దాచు</translation>
<translation id="121201262018556460">మీరు <ph name="DOMAIN" />ను చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ బలహీన కీని కలిగి ఉన్న ప్రమాణపత్రాన్ని అందించింది. దాడి చేసేవారు ప్రైవేట్ కీని విచ్ఛిన్నం చేశారు మరియు సర్వర్ మీరు ఊహించిన సర్వర్ కాకపోవచ్చు (మీరు దాడి చేసే వారితో కమ్యూనికేట్ చేస్తుండవచ్చు).</translation>
@@ -57,11 +57,11 @@
&lt;li&gt;మీ ఇంటర్నెట్ కనెక్షన్ సరిగ్గానే పని చేస్తున్నట్లు నిర్ధారించుకోండి.&lt;/li&gt;
&lt;li&gt;వెబ్‌సైట్ యజమానిని సంప్రదించండి.&lt;/li&gt;
&lt;/ol&gt;</translation>
-<translation id="1257286744552378071">మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేసారు. మీ ఖాతాని రక్షించడం కోసం, మీ పాస్‌వర్డ్‌ని ఇతర యాప్‌లు మరియు సైట్‌లలో తిరిగి ఉపయోగించవద్దు.</translation>
+<translation id="1257286744552378071">మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ను నమోదు చేసారు. మీ ఖాతాను రక్షించడం కోసం, ఇతర యాప్‌లు మరియు సైట్‌లలో మీ పాస్‌వర్డ్‌ను తిరిగి ఉపయోగించవద్దు.</translation>
<translation id="1263231323834454256">పఠన జాబితా</translation>
<translation id="1264126396475825575">క్రాష్ నివేదిక <ph name="CRASH_TIME" />కి క్యాప్చర్ చేయబడింది (ఇంకా అప్‌లోడ్ చేయలేదు లేదా విస్మరించబడింది)</translation>
<translation id="1270502636509132238">పికప్ పద్ధతి</translation>
-<translation id="1285320974508926690">ఈ సైట్‌ను అనువదించవద్దు</translation>
+<translation id="1285320974508926690">ఈ సైట్‌ను ఎప్పటికీ అనువదించవద్దు</translation>
<translation id="1292701964462482250">"మీ కంప్యూటర్‌లో ఉన్న సాఫ్ట్‌వేర్ కారణంగా Chrome సురక్షితంగా వెబ్‌కి కనెక్ట్ కాలేకపోతోంది" (Windows కంప్యూటర్‌లకు మాత్రమే)</translation>
<translation id="1294154142200295408">ఆదేశ-పంక్తి వ్యత్యాసాలు</translation>
<translation id="129553762522093515">ఇటీవల మూసివెయ్యబడినవి</translation>
@@ -69,7 +69,7 @@
<translation id="1314614906530272393">ఎంచుకోబడిన సెషన్ ఉనికిలో లేదు.</translation>
<translation id="1323433172918577554">మరింత చూపు</translation>
<translation id="132390688737681464">చిరునామాలను సేవ్ చేసి, పూరించండి</translation>
-<translation id="1333989956347591814">మీ కార్యాచరణ వీరికి <ph name="BEGIN_EMPHASIS" />ఇప్పటికీ కనిపించవచ్చు<ph name="END_EMPHASIS" /> :
+<translation id="1333989956347591814">మీ కార్యకలాపం వీరికి <ph name="BEGIN_EMPHASIS" />ఇప్పటికీ కనిపించవచ్చు<ph name="END_EMPHASIS" />:
<ph name="BEGIN_LIST" />
<ph name="LIST_ITEM" />మీరు సందర్శించే వెబ్‌సైట్‌లు
<ph name="LIST_ITEM" />మీ యజమాని లేదా పాఠశాల నిర్వాహకులు
@@ -136,7 +136,7 @@
<translation id="1706954506755087368">{1,plural, =1{ఈ సర్వర్ ఇది <ph name="DOMAIN" /> అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం రేపటిది కావచ్చు. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్‌కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు.}other{ఈ సర్వర్ ఇది <ph name="DOMAIN" /> అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం భవిష్యత్తులో # రోజుల తదుపరిది కావచ్చు. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్‌కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు.}}</translation>
<translation id="1710259589646384581">OS</translation>
<translation id="1718029547804390981">పత్రం అదనపు గమనికలను జోడించడానికి వీలు లేకుండా చాలా అధిక పరిమాణంలో ఉంది</translation>
-<translation id="1721312023322545264">ఈ సైట్‌ని సందర్శించడానికి మీకు <ph name="NAME" /> నుండి అనుమతి అవసరం</translation>
+<translation id="1721312023322545264">ఈ సైట్‌ను సందర్శించడానికి మీకు <ph name="NAME" /> నుండి అనుమతి అవసరం</translation>
<translation id="1721424275792716183">* అవసరమైన ఫీల్డ్</translation>
<translation id="1727741090716970331">చెల్లుబాటయ్యే కార్డ్ నంబర్‌ను జోడించండి</translation>
<translation id="1728677426644403582">మీరు వెబ్ పేజీ యొక్క మూలాధారాన్ని వీక్షిస్తున్నారు</translation>
@@ -147,7 +147,7 @@
<translation id="1743520634839655729">తర్వాతిసారి మరింత వేగంగా చెల్లించడానికి, మీ కార్డ్, పేరు మరియు బిల్లింగ్ చిరునామాను మీ Google ఖాతాకు మరియు ఈ పరికరానికి సేవ్ చేయండి.</translation>
<translation id="17513872634828108">తెరిచిన ట్యాబ్‍లు</translation>
<translation id="1753706481035618306">పేజీ సంఖ్య</translation>
-<translation id="1763864636252898013">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని మీ పరికర ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
+<translation id="1763864636252898013">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా సర్టిఫికెట్‌ను మీ పరికర ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడి చేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
<translation id="1768211456781949159"><ph name="BEGIN_LINK" />Windows నెట్‌వర్క్ సమస్య విశ్లేషణలను అమలు చేయడం ప్రయత్నించండి<ph name="END_LINK" />.</translation>
<translation id="1783075131180517613">దయచేసి మీ సింక్‌ ర‌హ‌స్య ప‌ద‌బంధాన్ని అప్‌డేట్ చేయండి.</translation>
<translation id="1787142507584202372">మీ తెరవబడిన ట్యాబ్‌లు ఇక్కడ కనిపిస్తాయి</translation>
@@ -155,7 +155,7 @@
<translation id="1803264062614276815">కార్డుదారుని పేరు</translation>
<translation id="1821930232296380041">చెల్లని అభ్యర్థన లేదా అభ్యర్థన పారామీట‌ర్‌లు</translation>
<translation id="1826516787628120939">తనిఖీ చేస్తోంది</translation>
-<translation id="1834321415901700177">ఈ సైట్ హానికరమైన ప్రోగ్రామ్‌లను కలిగి ఉంది</translation>
+<translation id="1834321415901700177">ఈ సైట్‌లో హానికరమైన ప్రోగ్రామ్‌లు ఉన్నాయి</translation>
<translation id="1839551713262164453">విధాన విలువల క్రమబద్ధీకరణ ఎర్రర్‌లతో విఫలమైంది</translation>
<translation id="1842969606798536927">చెల్లింపు</translation>
<translation id="1871208020102129563">.pac స్క్రిప్ట్ URLను కాకుండా, స్థిరమైన ప్రాక్సీ సర్వర్‌లను ఉపయోగించేలా ప్రాక్సీ సెట్ చేయబడింది.</translation>
@@ -165,7 +165,7 @@
<translation id="187918866476621466">ప్రారంభ పేజీలను తెరువు</translation>
<translation id="1883255238294161206">జాబితాను కుదించు</translation>
<translation id="1898423065542865115">ఫిల్టరింగ్</translation>
-<translation id="1916770123977586577">ఈ సైట్‌కు మీ అప్‌డేట్ చేసిన సెట్టింగ్‌లను వర్తింపజేయడానికి, ఈ పేజీని మళ్లీ లోడ్ చేయండి</translation>
+<translation id="1916770123977586577">ఈ సైట్ విషయంలో మీరు అప్‌డేట్ చేసిన సెట్టింగ్‌లను వర్తింపజేయడానికి, ఈ పేజీని మళ్లీ లోడ్ చేయండి</translation>
<translation id="1919345977826869612">ప్రకటనలు</translation>
<translation id="1919367280705858090">నిర్దిష్ట ఎర్రర్ సందేశానికి సంబంధించిన సహాయం పొందండి</translation>
<translation id="192020519938775529">{COUNT,plural, =0{ఏమీ లేవు}=1{1 సైట్}other{# సైట్‌లు}}</translation>
@@ -205,7 +205,7 @@
<translation id="2154054054215849342">సింక్‌ మీ డొమైన్‌కు అందుబాటులో లేదు</translation>
<translation id="2154484045852737596">కార్డ్‌ను సవరించండి</translation>
<translation id="2166049586286450108">పూర్తి నిర్వాహక యాక్సెస్</translation>
-<translation id="2166378884831602661">ఈ సైట్ సురక్షితమైన కనెక్షన్‌ను అందించలేదు</translation>
+<translation id="2166378884831602661">ఈ సైట్ సురక్షితమైన కనెక్షన్‌ను అందించలేకపోయింది</translation>
<translation id="2181821976797666341">విధానాలు</translation>
<translation id="2183608646556468874">ఫోన్ నంబర్</translation>
<translation id="2184405333245229118">{COUNT,plural, =1{1 చిరునామా}other{# చిరునామాలు}}</translation>
@@ -213,7 +213,7 @@
<translation id="2202020181578195191">చెల్లుబాటు అయ్యే గడువు ముగింపు సంవత్సరాన్ని నమోదు చేయండి</translation>
<translation id="2212735316055980242">విధానం కనుగొనబడలేదు</translation>
<translation id="2213606439339815911">నమోదులను పొందుతోంది...</translation>
-<translation id="2218879909401188352"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్‌లు మీ పరికరంలో హానికరమైన యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు మరియు మీ మొబైల్ బిల్‌లో అదృశ్య ఛార్జీలకు కారణం కావచ్చు లేదా మీ వ్యక్తిగత సమాచారాన్ని దొంగిలించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
+<translation id="2218879909401188352"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్‌లు మీ పరికరంలో హానికరమైన యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు. మీ మొబైల్ బిల్‌లో అదృశ్య ఛార్జీలకు కారణం కావచ్చు లేదా మీ వ్యక్తిగత సమాచారాన్ని దొంగిలించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
<translation id="2224337661447660594">ఇంటర్నెట్ లేదు</translation>
<translation id="2230458221926704099"><ph name="BEGIN_LINK" />విశ్లేషణల యాప్‌<ph name="END_LINK" />ను ఉపయోగించి మీ కనెక్షన్‌ను సరి చేయండి</translation>
<translation id="2239100178324503013">ఇప్పుడే పంపండి</translation>
@@ -231,7 +231,7 @@
<translation id="2349790679044093737">VR సెషన్ యాక్టివ్‌లో ఉంది</translation>
<translation id="2354001756790975382">ఇతర బుక్‌మార్క్‌లు</translation>
<translation id="2354430244986887761">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />హానికర యాప్‌లను కనుగొంది<ph name="END_LINK" />.</translation>
-<translation id="2355395290879513365">దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలగవచ్చు మరియు వాటిని సవరించడం ద్వారా మిమ్మల్ని మోసగించవచ్చు.</translation>
+<translation id="2355395290879513365">దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలరు, వాటిని సవరించడం ద్వారా మిమ్మల్ని మోసగించవచ్చు.</translation>
<translation id="2356070529366658676">అడుగు</translation>
<translation id="2359629602545592467">అనేకం</translation>
<translation id="2359808026110333948">కొనసాగించు</translation>
@@ -256,7 +256,7 @@
<translation id="248348093745724435">మెషీన్ విధానాలు</translation>
<translation id="2491120439723279231">సర్వర్ యొక్క ప్రమాణపత్రంలో లోపాలు ఉన్నాయి.</translation>
<translation id="2495083838625180221">JSON పార్సర్</translation>
-<translation id="2495093607237746763">ఎంచుకుంటే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని Chromium నిల్వ చేస్తుంది.</translation>
+<translation id="2495093607237746763">ఎంచుకుంటే, Chromium వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది.</translation>
<translation id="2498091847651709837">కొత్త కార్డ్‌ను స్కాన్ చేయండి</translation>
<translation id="2501278716633472235">వెనుకకు వెళ్ళు</translation>
<translation id="2503184589641749290">ఆమోదించబడిన డెబిట్ మరియు ప్రీపెయిడ్ కార్డ్‌లు</translation>
@@ -304,7 +304,7 @@
<translation id="2784949926578158345">కనెక్షన్ మళ్ళీ సెట్ చేయబడింది.</translation>
<translation id="2788784517760473862">ఆమోదించబడిన క్రెడిట్ కార్డ్‌లు</translation>
<translation id="2794233252405721443">సైట్ బ్లాక్ చేయబడింది</translation>
-<translation id="2799020568854403057">రాబోయే సైట్ హానికరమైన యాప్‌లను కలిగి ఉంది</translation>
+<translation id="2799020568854403057">రాబోయే సైట్‌లో హానికరమైన యాప్‌లు ఉన్నాయి</translation>
<translation id="2799223571221894425">మళ్లీ ప్రారంభించు</translation>
<translation id="2803306138276472711">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />మాల్వేర్‌ను గుర్తించింది<ph name="END_LINK" />. సాధారణంగా సురక్షితమైన వెబ్‌సైట్‌‌లకు కూడా కొన్నిసార్లు మాల్వేర్ సోకుతుంది.</translation>
<translation id="2824775600643448204">చిరునామా మరియు శోధన బార్</translation>
@@ -325,11 +325,11 @@
<translation id="2941952326391522266">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం <ph name="DOMAIN2" /> నుండి జారీ చేయబడింది. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
<translation id="2948083400971632585">మీరు సెట్టింగ్‌ల పేజీ నుండి కనెక్షన్ కోసం కాన్ఫిగర్ చేయబడిన ఏ ప్రాక్సీలను అయినా నిలిపివేయవచ్చు.</translation>
<translation id="2955913368246107853">కనుగొను పట్టీని మూసివేయి</translation>
-<translation id="2969319727213777354">సురక్షిత కనెక్షన్‌ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్‌సైట్‌లు వాటిని గుర్తించడానికి ఉపయోగించే ప్రమాణపత్రాలు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ ప్రమాణపత్రాలను ధృవీకరించలేదు.</translation>
+<translation id="2969319727213777354">సురక్షిత కనెక్షన్‌ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్‌సైట్‌లు వాటిని గుర్తించడానికి ఉపయోగించే స‌ర్టిఫికెట్‌లు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ స‌ర్టిఫికెట్‌లను ధృవీకరించలేదు.</translation>
<translation id="2972581237482394796">&amp;పునరావృతం</translation>
<translation id="2977665033722899841"><ph name="ROW_NAME" />, ప్రస్తుతం ఎంచుకోబడింది. <ph name="ROW_CONTENT" /></translation>
<translation id="2982481275546140226">డేటాను తీసివేయి</translation>
-<translation id="2985306909656435243">ప్రారంభిస్తే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chromium మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది.</translation>
+<translation id="2985306909656435243">ప్రారంభిస్తే, Chromium వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది.</translation>
<translation id="2985398929374701810">చెల్లుబాటు అయ్యే చిరునామాని నమోదు చేయండి</translation>
<translation id="2986368408720340940">ఈ పికప్ పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి.</translation>
<translation id="2991174974383378012">వెబ్‌సైట్‌లతో భాగస్వామ్యం</translation>
@@ -364,13 +364,13 @@
<translation id="3195213714973468956"><ph name="SERVER_NAME" />లో <ph name="PRINTER_NAME" /></translation>
<translation id="320323717674993345">చెల్లింపును రద్దు చేయండి</translation>
<translation id="3207960819495026254">బుక్‌మార్క్ చేయబడింది</translation>
-<translation id="3209375525920864198">దయచేసి చెల్లుబాటు అయ్యే సెషన్ పేరుని నమోదు చేయండి.</translation>
+<translation id="3209375525920864198">దయచేసి చెల్లుబాటు అయ్యే సెషన్ పేరును నమోదు చేయండి.</translation>
<translation id="3225919329040284222">అంతర్గత అంచనాలకు సరిపోలని ఒక ధృవీకరణ పత్రాన్ని సర్వర్ సమర్పించింది. మిమ్మల్ని సంరక్షించే దిశగా నిర్దిష్ట, ఉన్నత స్ధాయి భద్రతా వెబ్‌సైట్‌ల కోసం ఈ అంచనాలు చేర్చబడ్డాయి.</translation>
<translation id="3226128629678568754">పేజీని లోడ్ చేయడానికి అవసరమైన డేటాను మళ్లీ సమర్పించడం కోసం 'మళ్లీ లోడ్ చేయి' బటన్ క్లిక్ చేయండి.</translation>
<translation id="3227137524299004712">మైక్రోఫోన్</translation>
<translation id="3228969707346345236">పేజీ ఇప్పటికే <ph name="LANGUAGE" />లో ఉన్నందున అనువాదం విఫలమైంది.</translation>
<translation id="323107829343500871"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి</translation>
-<translation id="3234666976984236645">ఈ సైట్‌లో ఎల్లప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు</translation>
+<translation id="3234666976984236645">ఈ సైట్‌లో ఎప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు</translation>
<translation id="3254409185687681395">ఈ పేజీని బుక్‌మార్క్ చేయి</translation>
<translation id="3270847123878663523">&amp;మళ్లీ క్రమం చేయడాన్ని రద్దు చేయి</translation>
<translation id="3282497668470633863">కార్డ్‌లో పేరుని జోడించండి</translation>
@@ -381,7 +381,7 @@
<translation id="3320021301628644560">బిల్లింగ్ చిరునామాను జోడించండి</translation>
<translation id="3324983252691184275">ముదురు ఎరుపు రంగు</translation>
<translation id="3338095232262050444">సురక్షితం</translation>
-<translation id="3345135638360864351">ఈ సైట్‌ని యాక్సెస్ చేయడానికి మీరు చేసిన అభ్యర్థన <ph name="NAME" />కి పంపబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
+<translation id="3345135638360864351">ఈ సైట్‌ను యాక్సెస్ చేయడానికి మీరు చేసిన అభ్యర్థన <ph name="NAME" />కు పంపబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="3355823806454867987">ప్రాక్సీ సెట్టింగ్‌లను మార్చు...</translation>
<translation id="3361596688432910856">Chrome ఈ కింది సమాచారాన్ని <ph name="BEGIN_EMPHASIS" />సేవ్ చేయదు<ph name="END_EMPHASIS" />:
<ph name="BEGIN_LIST" />
@@ -465,7 +465,7 @@
<translation id="3759461132968374835">మీకు ఇటీవల నివేదించిన క్రాష్‌లు లేవు. క్రాష్‌ నివేదన నిలిపివేసినపుడు ఏర్పడే క్రాష్‌లు ఇక్కడ కనిపించవు.</translation>
<translation id="3761718714832595332">స్థితిని దాచు</translation>
<translation id="3765032636089507299">సురక్షిత బ్రౌజింగ్ పేజీ నిర్మాణంలో ఉంది.</translation>
-<translation id="3778403066972421603">ఈ కార్డ్‌ని మీ Google ఖాతాకు మరియు ఈ పరికరంలో సేవ్ చేయాలనుకుంటున్నారా?</translation>
+<translation id="3778403066972421603">ఈ కార్డ్‌ను మీ Google ఖాతాకు మరియు ఈ పరికరంలో సేవ్ చేయాలని అనుకుంటున్నారా?</translation>
<translation id="3781428340399460090">ముదురు గులాబి రంగు</translation>
<translation id="3783418713923659662">Mastercard</translation>
<translation id="3787705759683870569">గడువు ముగింపు <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
@@ -478,7 +478,7 @@
<translation id="3858027520442213535">తేదీని, సమయాన్ని అప్‌డేట్ చేయి</translation>
<translation id="3884278016824448484">వైరుధ్యమైన పరికరం ఐడెంటిఫైయర్</translation>
<translation id="3885155851504623709">పారిష్</translation>
-<translation id="3886446263141354045">మీరు ఈ సైట్‌ను యాక్సెస్ చేయడానికి చేసిన అభ్యర్థన <ph name="NAME" />కి పంపబడింది</translation>
+<translation id="3886446263141354045">మీరు ఈ సైట్‌ను యాక్సెస్ చేయడానికి చేసిన అభ్యర్థన <ph name="NAME" />కు పంపబడింది</translation>
<translation id="3890664840433101773">ఇమెయిల్‌ను జోడించండి</translation>
<translation id="3901925938762663762">కార్డ్ గడువు సమయం ముగిసింది</translation>
<translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
@@ -500,7 +500,7 @@
<translation id="4072486802667267160">మీ ఆర్డర్‌ను ప్రాసెస్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation>
<translation id="4075732493274867456">క్లయింట్ మరియు సర్వర్ ఒకే SSL ప్రోటోకాల్ వెర్ష‌న్‌ లేదా సైఫర్ సూట్‌కు మద్దతివ్వవు.</translation>
<translation id="4079302484614802869">స్థిరమైన ప్రాక్సీ సర్వర్‌లను కాకుండా, ఒక .pac స్క్రిప్ట్ URLను ఉపయోగించేలా ప్రాక్సీ కాన్ఫిగరేషన్ సెట్ చేయబడింది.</translation>
-<translation id="4098354747657067197">ముందు వంచనాత్మక సైట్ ఉంది</translation>
+<translation id="4098354747657067197">ముందున్న సైట్ మోసపూరితమైనది</translation>
<translation id="4103249731201008433">పరికర క్రమ సంఖ్య చెల్లదు</translation>
<translation id="410351446219883937">స్వీయ ప్లే</translation>
<translation id="4103763322291513355">బ్లాక్‌లిస్ట్‌లో ఉన్న URLల జాబితాను మరియు మీ సిస్టమ్ నిర్వాహకుని ద్వారా అమలు చేయబడిన ఇతర విధానాలను చూడటానికి &lt;strong&gt;chrome://policy&lt;/strong&gt;ని సందర్శించండి.</translation>
@@ -540,7 +540,7 @@
&lt;p&gt;ఇప్పటికీ మీకు ఎర్రర్ కనిపిస్తున్నట్లయితే, వెబ్‌సైట్ యజమానిని సంప్రదించండి.&lt;/p&gt;</translation>
<translation id="4226937834893929579"><ph name="BEGIN_LINK" />నెట్‌వర్క్ సమస్య విశ్లేషణలను అమలు చేయడం ప్రయత్నించండి<ph name="END_LINK" />.</translation>
<translation id="4235360514405112390">చెల్లుతుంది</translation>
-<translation id="4250431568374086873">ఈ సైట్‌కి మీ కనెక్షన్ పూర్తి స్థాయిలో సురక్షితంగా లేదు</translation>
+<translation id="4250431568374086873">ఈ సైట్‌కు మీ కనెక్షన్ పూర్తి స్థాయిలో సురక్షితంగా లేదు</translation>
<translation id="4250680216510889253">కాదు</translation>
<translation id="425582637250725228">మీరు చేసిన మార్పులు సేవ్ అయ్యి ఉండకపోవచ్చు.</translation>
<translation id="4258748452823770588">చెల్లని సంతకం</translation>
@@ -602,7 +602,7 @@
<translation id="4738601419177586157"><ph name="TEXT" /> శోధన సూచన</translation>
<translation id="4742407542027196863">పాస్‌వర్డ్‌లను నిర్వహించు…</translation>
<translation id="4744603770635761495">అమలు చేయగల పాథ్‌</translation>
-<translation id="4750917950439032686">మీ సమాచారాన్ని (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్ నంబర్‌లు) ఈ సైట్‌కి పంపినప్పుడు అది ప్రైవేట్‌గా ఉంచబడుతుంది.</translation>
+<translation id="4750917950439032686">మీ సమాచారాన్ని (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్ నంబర్‌లు) ఈ సైట్‌కు పంపినప్పుడు అది ప్రైవేట్‌గా ఉంచబడుతుంది.</translation>
<translation id="4756388243121344051">&amp;చరిత్ర</translation>
<translation id="4758311279753947758">సంప్రదింపు సమాచారాన్ని జోడించు</translation>
<translation id="4759118997339041434">చెల్లింపు స్వీయపూరణ నిలిపివేయబడింది</translation>
@@ -618,7 +618,7 @@
<translation id="4816492930507672669">పేజీకి తగినట్లు అమర్చు</translation>
<translation id="4850886885716139402">వీక్షణ</translation>
<translation id="4854362297993841467">ఈ బట్వాడా పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి.</translation>
-<translation id="4858792381671956233">ఈ సైట్‌ను సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లిదండ్రులకు అభ్యర్థన పంపారు</translation>
+<translation id="4858792381671956233">ఈ సైట్‌ను సందర్శించడానికి అనుమతిని కోరుతూ మీరు మీ తల్లిదండ్రులకు అభ్యర్థన పంపారు</translation>
<translation id="4876305945144899064">వినియోగదారు పేరు లేదు</translation>
<translation id="4877422487531841831"><ph name="TEXT" /> శోధన</translation>
<translation id="4879491255372875719">ఆటోమేటిక్ (డిఫాల్ట్)</translation>
@@ -641,7 +641,7 @@
<translation id="4989163558385430922">అన్నీ చూడండి</translation>
<translation id="4989809363548539747">ఈ ప్లగ్ఇన్‌‌కు మద్దతు లేదు</translation>
<translation id="4996230189582812866">నివేదన</translation>
-<translation id="5002932099480077015">ప్రారంభిస్తే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chrome మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది.</translation>
+<translation id="5002932099480077015">ప్రారంభిస్తే, వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది.</translation>
<translation id="5014174725590676422">Chromeలో Google అసిస్టెంట్ మొదటి అమలు స్క్రీన్ చూపబడింది</translation>
<translation id="5015510746216210676">మెషీన్ పేరు:</translation>
<translation id="5018422839182700155">ఈ పేజీని తెరవడం సాధ్యపడదు</translation>
@@ -663,7 +663,7 @@
<translation id="5095208057601539847">ప్రావిన్స్</translation>
<translation id="5098222253617183465">మీ పరికరం <ph name="ENROLLMENT_DOMAIN" /> ద్వారా నిర్వహించబడుతుంది, అలాగే <ph name="ACCOUNT_DOMAIN" /> ద్వారా మీ ఖాతా నిర్వహించబడుతుంది. దీని ప్రకారం, మీ నిర్వాహకులు రిమోట్ విధానం ద్వారా మీ పరికరం, ఖాతాను కాన్ఫిగర్ చేయవచ్చు .</translation>
<translation id="5115563688576182185">(64-బిట్)</translation>
-<translation id="5128122789703661928">ఈ పేరు కలిగిన సెషన్‌ని తొలగించలేరు.</translation>
+<translation id="5128122789703661928">ఈ పేరు కలిగిన సెషన్‌ను తొలగించలేరు.</translation>
<translation id="5135404736266831032">చిరునామాలను నిర్వహించండి...</translation>
<translation id="5141240743006678641">మీ Google ఆధారాలతో సింక్ చేయ‌బ‌డిన పాస్‌వర్డ్‌లను ఎన్‌క్రిప్ట్ చేయండి</translation>
<translation id="5145883236150621069">విధాన ప్రతిస్పందనలో ఎర్రర్ కోడ్ ఉంది</translation>
@@ -700,7 +700,7 @@
<translation id="5371425731340848620">కార్డ్‌ని అప్‌డేట్ చేయండి</translation>
<translation id="5377026284221673050">"మీ గడియారం ఆలస్యంగా నడుస్తోంది" లేదా "మీ గడియారం ముందుగా ఉంది" లేదా "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
<translation id="5384855140246857529">మీ కార్డ్‌ల‌ను అన్ని పరికరాలలో ఉపయోగించాలంటే, సైన్ ఇన్ చేసి, సమకాలీకరణను ఆన్ చేయండి.</translation>
-<translation id="5386426401304769735">ఈ సైట్ ప్రమాణపత్రం గొలుసులో SHA-1 ఉపయోగించి సంతకం చేసిన ప్రమాణపత్రం ఉంది.</translation>
+<translation id="5386426401304769735">ఈ సైట్ సర్టిఫికెట్ గొలుసులో SHA-1 ఉపయోగించి సంతకం చేసిన సర్టిఫికెట్ ఉంది.</translation>
<translation id="540969355065856584">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం ప్రస్తుతం చెల్లదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడి చేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation>
<translation id="5421136146218899937">బ్రౌజింగ్ డేటాను క్లియర్ చేయి...</translation>
<translation id="5430298929874300616">బుక్‌మార్క్‌ను తీసివేయండి</translation>
@@ -714,7 +714,7 @@
<translation id="5481076368049295676">ఈ కంటెంట్ మీ సమాచారాన్ని దొంగిలించగల లేదా తొలగించగల హానికరమైన సాఫ్ట్‌వేర్‌ను మీ పరికరంలో ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు. <ph name="BEGIN_LINK" />ఏదేమైనా చూపు<ph name="END_LINK" /></translation>
<translation id="54817484435770891">చెల్లుబాటు అయ్యే చిరునామాను జోడించండి</translation>
<translation id="5490432419156082418">చిరునామాలు మరియు మరిన్ని</translation>
-<translation id="5492298309214877701">కంపెనీ, సంస్థ లేదా పాఠశాల ఇంట్రానెట్‌లోని ఈ సైట్- బాహ్య వెబ్‌సైట్ కలిగి ఉన్న అదే URLను కలిగి ఉంది.
+<translation id="5492298309214877701">కంపెనీ, సంస్థ లేదా పాఠశాల ఇంట్రానెట్‌లోని ఈ సైట్ URL, బాహ్య వెబ్‌సైట్‌కు ఉన్న URL ఒకేలా ఉంది.
<ph name="LINE_BREAK" />
మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించడానికి ప్రయత్నించండి.</translation>
<translation id="549333378215107354">పరిమాణం 3</translation>
@@ -770,7 +770,7 @@
<translation id="5804241973901381774">అనుమతులు</translation>
<translation id="5810442152076338065"><ph name="DOMAIN" />కు గల మీ కనెక్షన్ వాడుకలో లేని సైఫర్ సూట్ ఉపయోగించి ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది.</translation>
<translation id="5813119285467412249">&amp;జోడించడాన్ని పునరావృతం చేయి</translation>
-<translation id="5838278095973806738">మీరు ఈ సైట్‌లో ఎలాంటి గోప్యమైన సమాచారాన్ని నమోదు చేయకూడదు (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్‌లు), దాడికి పాల్పడే వారు ఆ సమాచారం దొంగిలించే అవకాశం ఉంటుంది.</translation>
+<translation id="5838278095973806738">మీరు ఈ సైట్‌లో ఎలాంటి గోప్యమైన సమాచారాన్ని నమోదు చేయకూడదు (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్‌లు), దాడికి పాల్పడేవారు ఆ సమాచారం దొంగిలించే అవకాశం ఉంటుంది.</translation>
<translation id="5863847714970149516">మీరు చూడబోతున్న పేజీ మీకు డబ్బు ఛార్జ్ చేయడానికి ప్రయత్నించవచ్చు</translation>
<translation id="5866257070973731571">ఫోన్ నంబర్‌ను జోడించండి</translation>
<translation id="5869405914158311789">ఈ సైట్‌ను చేరుకోలేకపోయాము</translation>
@@ -823,8 +823,8 @@
<translation id="6151417162996330722">సర్వర్ ప్రమాణపత్రం చెల్లుబాటు వ్యవధి చాలా ఎక్కువ కాలం ఉంది.</translation>
<translation id="6157877588268064908">రవాణా పద్ధతులు మరియు అవసరాలను చూడాలంటే, చిరునామాని ఎంచుకోండి</translation>
<translation id="6165508094623778733">మరింత తెలుసుకోండి</translation>
-<translation id="6169916984152623906">‌ఇప్పుడు మీరు వ్యక్తిగతంగా బ్రౌజ్ చేయవచ్చు. ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులకు మీ కార్య‌క‌లాపం కనిపించదు. అయినప్పటికీ, డౌన్‌లోడ్‌లు, బుక్‌మార్క్‌లు సేవ్ చేయబడతాయి.</translation>
-<translation id="6177128806592000436">ఈ సైట్‌కి మీ కనెక్షన్ సురక్షితంగా లేదు</translation>
+<translation id="6169916984152623906">‌ఇప్పుడు మీరు వ్యక్తిగతంగా బ్రౌజ్ చేయవచ్చు మరియు ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులకు మీ కార్య‌క‌లాపం కనిపించదు. అయినప్పటికీ, డౌన్‌లోడ్‌లు మరియు బుక్‌మార్క్‌లు సేవ్ చేయబడతాయి.</translation>
+<translation id="6177128806592000436">ఈ సైట్‌తో మీకున్న కనెక్షన్ సురక్షితంగా లేదు</translation>
<translation id="6203231073485539293">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి</translation>
<translation id="6218753634732582820">Chromium నుండి చిరునామాను తీసివేయాలా?</translation>
<translation id="6221345481584921695">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />మాల్వేర్‌ను గుర్తించింది<ph name="END_LINK" />. సాధారణంగా సురక్షితమైన వెబ్‌సైట్‌‌లకు కూడా కొన్నిసార్లు మాల్వేర్ సోకుతుంది. ఈ హానికరమైన కంటెంట్, మాల్వేర్ పంపిణీదారుగా ప్రసిద్ధిగాంచిన <ph name="SUBRESOURCE_HOST" /> నుండి సంక్రమిస్తుంది.</translation>
@@ -855,7 +855,7 @@
<translation id="6387754724289022810">తర్వాతిసారి మరింత వేగంగా చెల్లించడానికి, మీ కార్డ్ మరియు బిల్లింగ్ చిరునామాను మీ Google ఖాతాకు మరియు ఈ పరికరానికి సేవ్ చేయండి.</translation>
<translation id="6404511346730675251">బుక్‌మార్క్‌ను సవరించండి</translation>
<translation id="6410264514553301377"><ph name="CREDIT_CARD" /> గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి</translation>
-<translation id="6414888972213066896">మీరు ఈ సైట్‌ని సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు</translation>
+<translation id="6414888972213066896">ఈ సైట్‌ను సందర్శించడానికి అనుమతి కోరుతూ మీరు మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు</translation>
<translation id="6417515091412812850">ప్రమాణపత్రం రద్దు చెయ్యబడిందా అని తనిఖీ చెయ్యడం సాధ్యం కాలేదు.</translation>
<translation id="6433490469411711332">సంప్రదింపు సమాచారాన్ని సవరించండి</translation>
<translation id="6433595998831338502"><ph name="HOST_NAME" /> కనెక్ట్ కావడానికి నిరాకరించింది.</translation>
@@ -894,7 +894,7 @@
<translation id="674375294223700098">తెలియని సర్వర్ ప్రమాణపత్రం లోపం.</translation>
<translation id="6744009308914054259">కనెక్షన్ కోసం వేచి ఉన్నప్పుడు, మీరు ఆఫ్‌లైన్ కథనాలను చదవడానికి డౌన్‌లోడ్‌లను సందర్శించవచ్చు.</translation>
<translation id="6753269504797312559">విధానం విలువ</translation>
-<translation id="6757797048963528358">మీ పరికరం నిద్రావస్థకి వెళ్లింది.</translation>
+<translation id="6757797048963528358">మీ పరికరం నిద్రావస్థకు వెళ్లింది.</translation>
<translation id="6778737459546443941">మీ తల్లి/తండ్రి దీన్ని ఇంకా ఆమోదించలేదు</translation>
<translation id="67862343314499040">నీలి ఊదా రంగు</translation>
<translation id="679355240208270552">విధానం ప్రకారం, డిఫాల్ట్ శోధనను ప్రారంభించలేదు కాబట్టి, విస్మరించబడింది.</translation>
@@ -969,8 +969,8 @@
<translation id="7219179957768738017">కనెక్షన్ <ph name="SSL_VERSION" />ని ఉపయోగిస్తుంది.</translation>
<translation id="7220786058474068424">ప్రాసెస్ చేస్తోంది</translation>
<translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation>
-<translation id="724691107663265825">మీరు చేరుకోబోయే సైట్‌లో మాల్వేర్ ఉంది</translation>
-<translation id="724975217298816891">మీ కార్డ్ వివరాలను అప్‌డేట్ చేయ‌డానికి <ph name="CREDIT_CARD" /> కార్డ్ గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్‌ చేయబడతాయి.</translation>
+<translation id="724691107663265825">ముందున్న సైట్‌లో మాల్వేర్ ఉంది</translation>
+<translation id="724975217298816891">మీ కార్డ్ వివరాలను అప్‌డేట్ చేయడానికి <ph name="CREDIT_CARD" /> కార్డ్ గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి.</translation>
<translation id="7251437084390964440">నెట్‌వర్క్ కాన్ఫిగరేషన్ ONC ప్రమాణానికి అనుకూలంగా లేదు. కాన్ఫిగరేషన్‌లోని భాగాలు దిగుమతి కాకపోయి ఉండకపోవచ్చు.
అదనపు వివరాలు:
<ph name="DEBUG_INFO" /></translation>
@@ -1027,7 +1027,7 @@
<translation id="7514365320538308">డౌన్‌లోడ్ చేయి</translation>
<translation id="7518003948725431193">వెబ్ చిరునామాకు వెబ్‌పేజీ కనుగొనబడలేదు: <ph name="URL" /></translation>
<translation id="7521387064766892559">JavaScript</translation>
-<translation id="7526934274050461096">ఈ సైట్‌కి మీ కనెక్షన్ ప్రైవేట్ కాదు</translation>
+<translation id="7526934274050461096">ఈ సైట్‌తో మీకున్న కనెక్షన్ ప్రైవేట్‌గా లేదు</translation>
<translation id="7537536606612762813">తప్పనిసరి</translation>
<translation id="7542403920425041731">మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి.</translation>
<translation id="7542995811387359312">ఈ ఫారమ్ సురక్షిత కనెక్షన్‌ను ఉపయోగించనందున క్రెడిట్ కార్డ్ వివరాలను ఆటోమేటిక్‌గా పూర్తి చేయడం ఆపివేయబడింది.</translation>
@@ -1057,7 +1057,7 @@
<translation id="7663736086183791259">సర్టిఫికెట్ <ph name="CERTIFICATE_VALIDITY" /></translation>
<translation id="7667346355482952095">అందించిన విధాన టోకెన్ ఖాళీగా ఉంది లేదా ప్రస్తుత టోకెన్‌తో సరిపోలలేదు</translation>
<translation id="7668654391829183341">తెలియని పరికరం</translation>
-<translation id="7669271284792375604">ఈ సైట్‌లోని దాడి చేసేవారు మీ బ్రౌజింగ్ అనుభవానికి హాని కలిగించే ప్రోగ్రామ్‌లను ఇన్‌స్టాల్ చేసే విధంగా (ఉదాహరణకు, మీ హోమ్ పేజీని మార్చడం లేదా మీరు సందర్శించే సైట్‌లలో అదనపు ప్రకటనలను చూపడం ద్వారా) మిమ్మల్ని మోసగించడానికి ప్రయత్నించవచ్చు.</translation>
+<translation id="7669271284792375604">ఈ సైట్‌లోని దాడి చేసేవారు మీ బ్రౌజింగ్ అనుభవానికి హాని కలిగించే (ఉదాహరణకు, మీ హోమ్ పేజీని మార్చడం లేదా మీరు సందర్శించే సైట్‌లలో అదనపు ప్రకటనలను చూపడం ద్వారా) ప్రోగ్రామ్‌లను ఇన్‌స్టాల్ చేసే విధంగా మిమ్మల్ని మోసగించడానికి ప్రయత్నించవచ్చు.</translation>
<translation id="7681101578153515023">శోధన ఇంజిన్‌ను మార్చు</translation>
<translation id="7682287625158474539">ఓడ రవాణా</translation>
<translation id="7687186412095877299">సేవ్ చేయబడిన మీ చెల్లింపు పద్ధతులతో చెల్లింపు ఫారమ్‌లను పూరిస్తుంది</translation>
@@ -1091,7 +1091,7 @@
<translation id="7818867226424560206">విధాన నిర్వహణ</translation>
<translation id="782886543891417279">మీరు ఉపయోగిస్తున్న Wi-Fi అయిన (<ph name="WIFI_NAME" />), దాని లాగిన్ పేజీని మీరు సందర్శించాల్సిందిగా కోరవచ్చు.</translation>
<translation id="7844689747373518809">{COUNT,plural, =0{ఏదీ వద్దు}=1{1 యాప్ (<ph name="EXAMPLE_APP_1" />)}=2{2 యాప్‌లు (<ph name="EXAMPLE_APP_1" />, <ph name="EXAMPLE_APP_2" />)}other{# యాప్‌లు (<ph name="EXAMPLE_APP_1" />, <ph name="EXAMPLE_APP_2" />, <ph name="AND_MORE" />)}}</translation>
-<translation id="785549533363645510">అయినప్పటికీ, మీరు అదృశ్యంగా ఉండరు. అజ్ఞాతంలోకి వెళ్లడం వ‌ల్ల‌ మీ బ్రౌజింగ్- మీ యజమానికి, మీ ఇంటర్నెట్ సేవా ప్రదాతకు లేదా మీరు సందర్శించే వెబ్‌సైట్‌లకు కనిపించకుండా దాచబడదు.</translation>
+<translation id="785549533363645510">అయితే, మీరు అదృశ్యంగా ఉండరు. అజ్ఞాతంలోకి వెళ్లడం వలన మీ బ్రౌజింగ్ మీ యజమానికి, మీ ఇంటర్నెట్ సేవా ప్రదాతకు లేదా మీరు సందర్శించే వెబ్‌సైట్‌లకు కనిపించకుండా దాచబడదు.</translation>
<translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
<translation id="7862185352068345852">సైట్ నుండి నిష్క్రమించాలా?</translation>
<translation id="7878176543348854470">డెబిట్ మరియు ప్రీపెయిడ్ కార్డ్‌లు ఆమోదించబడతాయి.</translation>
@@ -1147,7 +1147,7 @@
<translation id="8202097416529803614">ఆర్డర్ సారాంశం</translation>
<translation id="8211406090763984747">కనెక్షన్ సురక్షితంగా ఉంది</translation>
<translation id="8218327578424803826">కేటాయించిన స్థానం:</translation>
-<translation id="8225771182978767009">ఈ కంప్యూటర్‌ను సెటప్ చేసిన వ్యక్తి ఈ సైట్‌ను బ్లాక్ చేయడానికి ఎంచుకున్నారు.</translation>
+<translation id="8225771182978767009">ఈ కంప్యూటర్‌ను సెటప్ చేసిన వ్యక్తి ఈ సైట్‌ను బ్లాక్ చేయడం ఎంచుకున్నారు.</translation>
<translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
<translation id="8238581221633243064">కొత్త అజ్ఞాత ట్యాబ్‌లో పేజీని తెరవండి</translation>
<translation id="8241707690549784388">మీరు వెతికే పేజీ మీరు ఎంటర్ చేసిన సమాచారాన్ని ఉపయోగించుకుంది. ఆ పేజీకి తిరిగి వెళ్ల‌డం ద్వారా మీరు చేసిన ఏ చర్య అయినా పునరావృతం చేయ‌వలసి వస్తుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation>
@@ -1168,7 +1168,7 @@
<translation id="8311129316111205805">సెషన్‌ను లోడ్ చేయి</translation>
<translation id="8332188693563227489"><ph name="HOST_NAME" />కి యాక్సెస్ నిరాకరించబడింది</translation>
<translation id="8340095855084055290"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
-<translation id="834457929814110454">మీ భద్రతకు వాటిల్లే ఆపదల గురించి మీకు అర్థం అయ్యి ఉంటే, హానికర ప్రోగ్రామ్‌లు తీసివేయబడటానికి ముందే మీరు <ph name="BEGIN_LINK" />ఈ సైట్‌ను సందర్శించవచ్చు<ph name="END_LINK" />.</translation>
+<translation id="834457929814110454">మీ భద్రతకు వాటిల్లే ఆపదలు మీకు అర్థం అయ్యి ఉంటే, హానికర ప్రోగ్రామ్‌లు తీసివేయబడటానికి ముందే మీరు <ph name="BEGIN_LINK" />ఈ సైట్‌ను సందర్శించవచ్చు<ph name="END_LINK" />.</translation>
<translation id="8349305172487531364">బుక్‌మార్క్‌ల పట్టీ</translation>
<translation id="8363502534493474904">ఎయిర్‌ప్లైన్ మోడ్‌ను ఆఫ్ చేయడం</translation>
<translation id="8364627913115013041">సెట్ చేయలేదు.</translation>
@@ -1198,11 +1198,11 @@
<translation id="8503559462189395349">Chrome పాస్‌వర్డ్‌లు</translation>
<translation id="8503813439785031346">యూజర్‌పేరు</translation>
<translation id="8508648098325802031">శోధన చిహ్నం</translation>
-<translation id="8543181531796978784">మీరు <ph name="BEGIN_ERROR_LINK" />గుర్తింపు సమస్యను నివేదించవచ్చు<ph name="END_ERROR_LINK" /> లేదా మీకు మీ భద్రతకు పొంచి ఉన్న ప్రమాదాలు అర్థం అయ్యి ఉంటే, మ<ph name="BEGIN_LINK" />ఈ అసురక్షిత సైట్‌ను సందర్శించండి<ph name="END_LINK" />.</translation>
+<translation id="8543181531796978784">మీరు <ph name="BEGIN_ERROR_LINK" />గుర్తింపు సమస్యను నివేదించవచ్చు<ph name="END_ERROR_LINK" /> లేదా మీకు మీ భద్రతకు పొంచి ఉన్న ప్రమాదాలు అర్థం అయ్యి ఉంటే, <ph name="BEGIN_LINK" />ఈ అసురక్షిత సైట్‌ను సందర్శించండి<ph name="END_LINK" />.</translation>
<translation id="8543556556237226809">ప్రశ్నలు ఏమైనా ఉన్నాయా? మీ ప్రొఫైల్‌ను పర్యవేక్షించే వ్యక్తిని సంప్రదించండి.</translation>
<translation id="8553075262323480129">పేజీ భాష నిర్థారించలేకపోయినందున అనువాదం విఫలమైంది.</translation>
<translation id="8557066899867184262">మీ కార్డు వెనుకవైపు CVC ఉంటుంది.</translation>
-<translation id="8559762987265718583">మీ పరికరం తేదీ మరియు సమయం (<ph name="DATE_AND_TIME" />) తప్పుగా ఉన్నందున <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />కి ప్రైవేట్ కనెక్షన్ ఏర్పాటు చేయబడదు.</translation>
+<translation id="8559762987265718583">మీ పరికరం తేదీ మరియు సమయం <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> తప్పుగా ఉన్నందున (<ph name="DATE_AND_TIME" />)కు ప్రైవేట్ కనెక్షన్ ఏర్పాటు చేయబడదు.</translation>
<translation id="8564985650692024650">మీరు మీ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించినట్లయితే దీనిని రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
<translation id="8571890674111243710">పేజీని <ph name="LANGUAGE" />కు అనువదిస్తోంది...</translation>
<translation id="858637041960032120">ఫోన్ నం. జోడిం.</translation>
@@ -1255,7 +1255,7 @@
<translation id="8987927404178983737">నెల</translation>
<translation id="8988408250700415532">ఏదో తప్పు జరిగింది. మీరు వెబ్‌సైట్‌లో మీ ఆర్డర్‌ని పూర్తి చేయవచ్చు.</translation>
<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation>
-<translation id="8996941253935762404">ఈ సైట్ హానికర ప్రోగ్రామ్‌లను కలిగి ఉంది</translation>
+<translation id="8996941253935762404">ఈ సైట్‌లో హానికర ప్రోగ్రామ్‌లు ఉన్నాయి</translation>
<translation id="8997023839087525404">సర్వర్ ప్రమాణపత్ర పారదర్శకత విధానాన్ని ఉపయోగించి పబ్లిక్‌గా బహిరంగపరచబడని ప్రమాణపత్రాన్ని అందించింది. కొన్ని ప్రమాణపత్రాలకు, అవి విశ్వసనీయమైనవని మరియు దాడి చేసేవారి నుండి రక్షణ కల్పించగలవని నిర్ధారించడానికి, ఇది ఆవశ్యకం.</translation>
<translation id="9001074447101275817"><ph name="DOMAIN" /> ప్రాక్సీకి వినియోగదారు పేరు మరియు పాస్‌వర్డ్ అవసరం.</translation>
<translation id="9005998258318286617">PDF పత్రాన్ని లోడ్ చేయడం విఫలమైంది.</translation>
@@ -1288,7 +1288,7 @@
<translation id="9154194610265714752">నవీకరించబడింది</translation>
<translation id="9157595877708044936">అమర్చుతోంది...</translation>
<translation id="9168814207360376865">మీ వద్ద సేవ్ చేయబడిన చెల్లింపు పద్ధతులు ఉన్నాయో లేదో తనిఖీ చేయడానికి సైట్‌లను అనుమతించండి</translation>
-<translation id="9169664750068251925">ఈ సైట్‌లో ఎల్లప్పుడూ బ్లాక్ చేయి</translation>
+<translation id="9169664750068251925">ఈ సైట్‌లో ఎప్పుడూ బ్లాక్ చేయి</translation>
<translation id="9170848237812810038">&amp;అన్డు</translation>
<translation id="9171296965991013597">యాప్ నుండి నిష్క్రమించాలా?</translation>
<translation id="917450738466192189">సర్వర్ యొక్క ప్రమాణపత్రం చెల్లుబాటు కాదు.</translation>
diff --git a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
index a469d9e14df..39c0b0bede5 100644
--- a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
+++ b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -75,6 +75,13 @@ CompositorFrameSinkSupport::~CompositorFrameSinkSupport() {
DCHECK(!added_frame_observer_);
}
+CompositorFrameSinkSupport::PresentationFeedbackMap
+CompositorFrameSinkSupport::TakePresentationFeedbacks() {
+ PresentationFeedbackMap map;
+ map.swap(presentation_feedbacks_);
+ return map;
+}
+
void CompositorFrameSinkSupport::SetUpHitTest(
LatestLocalSurfaceIdLookupDelegate* local_surface_id_lookup_delegate) {
DCHECK(is_root_);
diff --git a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
index 26af0a7b95b..8c35c99d650 100644
--- a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
+++ b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
@@ -56,6 +56,8 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
const gfx::Size& frame_size_in_pixels,
const gfx::Rect& damage_rect,
base::TimeTicks expected_display_time)>;
+ using PresentationFeedbackMap =
+ base::flat_map<uint32_t, gfx::PresentationFeedback>;
static const uint64_t kFrameIndexStart = 2;
@@ -80,11 +82,12 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
FrameSinkManagerImpl* frame_sink_manager() { return frame_sink_manager_; }
- const base::flat_map<uint32_t, gfx::PresentationFeedback>&
- presentation_feedbacks() {
+ const PresentationFeedbackMap& presentation_feedbacks() {
return presentation_feedbacks_;
}
+ PresentationFeedbackMap TakePresentationFeedbacks() WARN_UNUSED_RESULT;
+
// Viz hit-test setup is only called when |is_root_| is true (except on
// android webview).
void SetUpHitTest(
@@ -304,7 +307,7 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
bool callback_received_receive_ack_ = true;
uint32_t trace_sequence_ = 0;
- base::flat_map<uint32_t, gfx::PresentationFeedback> presentation_feedbacks_;
+ PresentationFeedbackMap presentation_feedbacks_;
uint32_t last_evicted_parent_sequence_number_ = 0;
base::TimeTicks last_frame_time_;
diff --git a/chromium/content/browser/download/download_manager_impl.cc b/chromium/content/browser/download/download_manager_impl.cc
index 2d45e9e41f4..a2cd3267d01 100644
--- a/chromium/content/browser/download/download_manager_impl.cc
+++ b/chromium/content/browser/download/download_manager_impl.cc
@@ -70,6 +70,8 @@
#include "content/public/common/origin_util.h"
#include "content/public/common/previews_state.h"
#include "content/public/common/referrer.h"
+#include "content/public/common/url_utils.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
#include "net/base/elements_upload_data_stream.h"
#include "net/base/load_flags.h"
#include "net/base/request_priority.h"
@@ -77,6 +79,7 @@
#include "net/url_request/url_request_context.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "services/network/public/cpp/features.h"
+#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
#include "storage/browser/blob/blob_url_loader_factory.h"
#include "storage/browser/blob/blob_url_request_job_factory.h"
#include "url/origin.h"
@@ -276,16 +279,34 @@ CreateDownloadURLLoaderFactoryGetter(StoragePartitionImpl* storage_partition,
network::mojom::URLLoaderFactoryPtrInfo proxy_factory_ptr_info;
network::mojom::URLLoaderFactoryRequest proxy_factory_request;
if (rfh) {
- network::mojom::URLLoaderFactoryPtrInfo devtools_factory_ptr_info;
- network::mojom::URLLoaderFactoryRequest devtools_factory_request =
- MakeRequest(&devtools_factory_ptr_info);
- if (devtools_instrumentation::WillCreateURLLoaderFactory(
- static_cast<RenderFrameHostImpl*>(rfh), true, is_download,
- &devtools_factory_request)) {
- proxy_factory_ptr_info = std::move(devtools_factory_ptr_info);
- proxy_factory_request = std::move(devtools_factory_request);
+ bool should_proxy = false;
+
+ // Create an intermediate pipe that can be used to proxy the download's
+ // URLLoaderFactory.
+ network::mojom::URLLoaderFactoryPtrInfo maybe_proxy_factory_ptr_info;
+ network::mojom::URLLoaderFactoryRequest maybe_proxy_factory_request =
+ MakeRequest(&maybe_proxy_factory_ptr_info);
+
+ // Allow DevTools to potentially inject itself into the proxy pipe.
+ should_proxy = devtools_instrumentation::WillCreateURLLoaderFactory(
+ static_cast<RenderFrameHostImpl*>(rfh), true, is_download,
+ &maybe_proxy_factory_request);
+
+ // Also allow the Content embedder to inject itself if it wants to.
+ should_proxy |= GetContentClient()->browser()->WillCreateURLLoaderFactory(
+ rfh->GetSiteInstance()->GetBrowserContext(), rfh,
+ rfh->GetProcess()->GetID(), false /* is_navigation */,
+ true /* is_download/ */, url::Origin(), &maybe_proxy_factory_request,
+ nullptr /* header_client */, nullptr /* bypass_redirect_checks */);
+
+ // If anyone above indicated that they care about proxying, pass the
+ // intermediate pipe along to the NetworkDownloadURLLoaderFactoryGetter.
+ if (should_proxy) {
+ proxy_factory_ptr_info = std::move(maybe_proxy_factory_ptr_info);
+ proxy_factory_request = std::move(maybe_proxy_factory_request);
}
}
+
return base::MakeRefCounted<NetworkDownloadURLLoaderFactoryGetter>(
storage_partition->url_loader_factory_getter(),
std::move(proxy_factory_ptr_info), std::move(proxy_factory_request));
@@ -1266,6 +1287,35 @@ void DownloadManagerImpl::BeginResourceDownloadOnChecksComplete(
base::MakeRefCounted<FileSystemDownloadURLLoaderFactoryGetter>(
params->url(), rfh, /*is_navigation=*/false,
storage_partition->GetFileSystemContext(), storage_domain);
+ } else if (!IsURLHandledByNetworkService(params->url())) {
+ ContentBrowserClient::NonNetworkURLLoaderFactoryMap
+ non_network_url_loader_factories;
+ GetContentClient()
+ ->browser()
+ ->RegisterNonNetworkSubresourceURLLoaderFactories(
+ params->render_process_host_id(),
+ params->render_frame_host_routing_id(),
+ &non_network_url_loader_factories);
+ auto it = non_network_url_loader_factories.find(params->url().scheme());
+ if (it == non_network_url_loader_factories.end()) {
+ DLOG(ERROR) << "No URLLoaderFactory found to download " << params->url();
+ return;
+ } else {
+ std::unique_ptr<network::mojom::URLLoaderFactory> factory =
+ std::move(it->second);
+ network::mojom::URLLoaderFactoryPtr factory_ptr;
+ mojo::MakeStrongBinding(std::move(factory),
+ mojo::MakeRequest(&factory_ptr));
+ network::mojom::URLLoaderFactoryPtrInfo factory_ptr_info =
+ factory_ptr.PassInterface();
+
+ auto wrapper_factory =
+ std::make_unique<network::WrapperSharedURLLoaderFactoryInfo>(
+ std::move(factory_ptr_info));
+ url_loader_factory_getter =
+ base::MakeRefCounted<download::DownloadURLLoaderFactoryGetterImpl>(
+ std::move(wrapper_factory));
+ }
} else {
StoragePartitionImpl* storage_partition =
static_cast<StoragePartitionImpl*>(
diff --git a/chromium/content/browser/frame_host/render_frame_host_impl.cc b/chromium/content/browser/frame_host/render_frame_host_impl.cc
index fcda9392b8a..9727a15ac2b 100644
--- a/chromium/content/browser/frame_host/render_frame_host_impl.cc
+++ b/chromium/content/browser/frame_host/render_frame_host_impl.cc
@@ -4803,7 +4803,7 @@ void RenderFrameHostImpl::CommitNavigation(
auto factory_request = mojo::MakeRequest(&factory_proxy_info);
GetContentClient()->browser()->WillCreateURLLoaderFactory(
browser_context, this, GetProcess()->GetID(),
- false /* is_navigation */,
+ false /* is_navigation */, false /* is_download */,
GetOriginForURLLoaderFactory(common_params.url, GetSiteInstance())
.value_or(url::Origin()),
&factory_request, nullptr /* header_client */,
@@ -5549,8 +5549,8 @@ bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryInternal(
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
GetContentClient()->browser()->WillCreateURLLoaderFactory(
context, this, GetProcess()->GetID(), false /* is_navigation */,
- origin.value_or(url::Origin()), &default_factory_request,
- &header_client, &bypass_redirect_checks);
+ false /* is_download */, origin.value_or(url::Origin()),
+ &default_factory_request, &header_client, &bypass_redirect_checks);
}
// Keep DevTools proxy last, i.e. closest to the network.
diff --git a/chromium/content/browser/loader/navigation_url_loader_impl.cc b/chromium/content/browser/loader/navigation_url_loader_impl.cc
index eb08165b270..47c7fb628bb 100644
--- a/chromium/content/browser/loader/navigation_url_loader_impl.cc
+++ b/chromium/content/browser/loader/navigation_url_loader_impl.cc
@@ -323,17 +323,6 @@ void UnknownSchemeCallback(
handled_externally ? net::ERR_ABORTED : net::ERR_UNKNOWN_URL_SCHEME));
}
-// Returns whether this URL can be handled by the default network service
-// URLLoader.
-bool IsURLHandledByDefaultLoader(const GURL& url) {
- // Data URLs are only handled by the network service if
- // |enable_data_url_support| is set in NetworkContextParams. This is set to
- // true for the context used by NavigationURLLoaderImpl, so in addition to
- // checking whether the URL is handled by the network service, we also need to
- // check for the data scheme.
- return IsURLHandledByNetworkService(url) || url.SchemeIs(url::kDataScheme);
-}
-
// Determines whether it is safe to redirect from |from_url| to |to_url|.
bool IsRedirectSafe(const GURL& from_url,
const GURL& to_url,
@@ -801,8 +790,8 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
if (!default_loader_used_ ||
(base::FeatureList::IsEnabled(network::features::kNetworkService) &&
url_chain_.size() > 1 &&
- IsURLHandledByDefaultLoader(url_chain_[url_chain_.size() - 1]) !=
- IsURLHandledByDefaultLoader(url_chain_[url_chain_.size() - 2]))) {
+ IsURLHandledByNetworkService(url_chain_[url_chain_.size() - 1]) !=
+ IsURLHandledByNetworkService(url_chain_[url_chain_.size() - 2]))) {
url_loader_.reset();
}
interceptor_index_ = 0;
@@ -985,7 +974,7 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
// further refactor the factory getters to avoid this.
scoped_refptr<network::SharedURLLoaderFactory> factory;
- if (!IsURLHandledByDefaultLoader(resource_request_->url)) {
+ if (!IsURLHandledByNetworkService(resource_request_->url)) {
if (known_schemes_.find(resource_request_->url.scheme()) ==
known_schemes_.end()) {
bool handled = GetContentClient()->browser()->HandleExternalProtocol(
@@ -1675,8 +1664,9 @@ NavigationURLLoaderImpl::NavigationURLLoaderImpl(
bool use_proxy = GetContentClient()->browser()->WillCreateURLLoaderFactory(
partition->browser_context(), frame_tree_node->current_frame_host(),
frame_tree_node->current_frame_host()->GetProcess()->GetID(),
- true /* is_navigation */, navigation_request_initiator,
- &factory_request, &header_client, &bypass_redirect_checks);
+ true /* is_navigation */, false /* is_download */,
+ navigation_request_initiator, &factory_request, &header_client,
+ &bypass_redirect_checks);
if (devtools_instrumentation::WillCreateURLLoaderFactory(
frame_tree_node->current_frame_host(), true /* is_navigation */,
false /* is_download */, &factory_request)) {
@@ -1854,8 +1844,8 @@ void NavigationURLLoaderImpl::BindNonNetworkURLLoaderFactoryRequest(
GetContentClient()->browser()->WillCreateURLLoaderFactory(
frame->GetSiteInstance()->GetBrowserContext(), frame,
frame->GetProcess()->GetID(), true /* is_navigation */,
- navigation_request_initiator, &factory, nullptr /* header_client */,
- nullptr /* bypass_redirect_checks */);
+ false /* is_download */, navigation_request_initiator, &factory,
+ nullptr /* header_client */, nullptr /* bypass_redirect_checks */);
it->second->Clone(std::move(factory));
}
diff --git a/chromium/content/browser/media/hardware_key_media_controller.cc b/chromium/content/browser/media/hardware_key_media_controller.cc
index f7cf052573f..84b57a948c5 100644
--- a/chromium/content/browser/media/hardware_key_media_controller.cc
+++ b/chromium/content/browser/media/hardware_key_media_controller.cc
@@ -32,12 +32,12 @@ HardwareKeyMediaController::HardwareKeyMediaController(
controller_manager_ptr->CreateActiveMediaController(
mojo::MakeRequest(&media_controller_ptr_));
- // Observe the active media session for changes to playback state and
+ // Observe the active media controller for changes to playback state and
// supported actions.
- media_session::mojom::MediaSessionObserverPtr media_session_observer;
- media_session_observer_binding_.Bind(
- mojo::MakeRequest(&media_session_observer));
- media_controller_ptr_->AddObserver(std::move(media_session_observer));
+ media_session::mojom::MediaControllerObserverPtr media_controller_observer;
+ media_controller_observer_binding_.Bind(
+ mojo::MakeRequest(&media_controller_observer));
+ media_controller_ptr_->AddObserver(std::move(media_controller_observer));
}
HardwareKeyMediaController::~HardwareKeyMediaController() = default;
@@ -185,4 +185,4 @@ HardwareKeyMediaController::MediaSessionActionToKeyCode(
}
}
-} // namespace content \ No newline at end of file
+} // namespace content
diff --git a/chromium/content/browser/media/hardware_key_media_controller.h b/chromium/content/browser/media/hardware_key_media_controller.h
index b9ecba2d0c8..94dbb0fe7bb 100644
--- a/chromium/content/browser/media/hardware_key_media_controller.h
+++ b/chromium/content/browser/media/hardware_key_media_controller.h
@@ -13,7 +13,6 @@
#include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/media_session/public/mojom/media_controller.mojom.h"
-#include "services/media_session/public/mojom/media_session.mojom.h"
#include "ui/base/accelerators/media_keys_listener.h"
#include "ui/events/keycodes/keyboard_codes.h"
@@ -25,13 +24,13 @@ namespace content {
// HardwareKeyMediaController controls media sessions via hardware media keys.
class CONTENT_EXPORT HardwareKeyMediaController
- : public media_session::mojom::MediaSessionObserver,
+ : public media_session::mojom::MediaControllerObserver,
public ui::MediaKeysListener::Delegate {
public:
explicit HardwareKeyMediaController(service_manager::Connector* connector);
~HardwareKeyMediaController() override;
- // media_session::mojom::MediaSessionObserver:
+ // media_session::mojom::MediaControllerObserver:
void MediaSessionInfoChanged(
media_session::mojom::MediaSessionInfoPtr session_info) override;
void MediaSessionMetadataChanged(
@@ -84,13 +83,13 @@ class CONTENT_EXPORT HardwareKeyMediaController
// Used to check which actions are currently supported.
base::flat_set<media_session::mojom::MediaSessionAction> actions_;
- // Used to receive updates to the active MediaSession.
- mojo::Binding<media_session::mojom::MediaSessionObserver>
- media_session_observer_binding_{this};
+ // Used to receive updates to the active media controller.
+ mojo::Binding<media_session::mojom::MediaControllerObserver>
+ media_controller_observer_binding_{this};
DISALLOW_COPY_AND_ASSIGN(HardwareKeyMediaController);
};
} // namespace content
-#endif // CONTENT_BROWSER_MEDIA_HARDWARE_KEY_MEDIA_CONTROLLER_H_ \ No newline at end of file
+#endif // CONTENT_BROWSER_MEDIA_HARDWARE_KEY_MEDIA_CONTROLLER_H_
diff --git a/chromium/content/browser/network_service_instance.cc b/chromium/content/browser/network_service_instance.cc
index f45d1d89974..e4d01d908f0 100644
--- a/chromium/content/browser/network_service_instance.cc
+++ b/chromium/content/browser/network_service_instance.cc
@@ -37,6 +37,13 @@ namespace content {
namespace {
+#if defined(OS_POSIX)
+// Environment variable pointing to credential cache file.
+constexpr char kKrb5CCEnvName[] = "KRB5CCNAME";
+// Environment variable pointing to Kerberos config file.
+constexpr char kKrb5ConfEnvName[] = "KRB5_CONFIG";
+#endif
+
network::mojom::NetworkServicePtr* g_network_service_ptr = nullptr;
network::NetworkConnectionTracker* g_network_connection_tracker;
network::NetworkService* g_network_service;
@@ -50,6 +57,24 @@ network::mojom::NetworkServiceParamsPtr CreateNetworkServiceParams() {
network_service_params->initial_connection_subtype =
network::mojom::ConnectionSubtype(
net::NetworkChangeNotifier::GetConnectionSubtype());
+
+#if defined(OS_POSIX)
+ // Send Kerberos environment variables to the network service.
+ if (IsOutOfProcessNetworkService()) {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ std::string value;
+ if (env->HasVar(kKrb5CCEnvName)) {
+ env->GetVar(kKrb5CCEnvName, &value);
+ network_service_params->environment.push_back(
+ network::mojom::EnvironmentVariable::New(kKrb5CCEnvName, value));
+ }
+ if (env->HasVar(kKrb5ConfEnvName)) {
+ env->GetVar(kKrb5ConfEnvName, &value);
+ network_service_params->environment.push_back(
+ network::mojom::EnvironmentVariable::New(kKrb5ConfEnvName, value));
+ }
+ }
+#endif
return network_service_params;
}
diff --git a/chromium/content/browser/notifications/platform_notification_context_impl.cc b/chromium/content/browser/notifications/platform_notification_context_impl.cc
index 9b31e66db71..d2b2c16756f 100644
--- a/chromium/content/browser/notifications/platform_notification_context_impl.cc
+++ b/chromium/content/browser/notifications/platform_notification_context_impl.cc
@@ -479,7 +479,7 @@ void PlatformNotificationContextImpl::LazyInitialize(
if (!task_runner_) {
task_runner_ = base::CreateSequencedTaskRunnerWithTraits(
- {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+ {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
}
task_runner_->PostTask(
diff --git a/chromium/content/browser/renderer_host/render_process_host_impl.cc b/chromium/content/browser/renderer_host/render_process_host_impl.cc
index 04f816a43b8..94d88268d6f 100644
--- a/chromium/content/browser/renderer_host/render_process_host_impl.cc
+++ b/chromium/content/browser/renderer_host/render_process_host_impl.cc
@@ -2094,6 +2094,10 @@ void RenderProcessHostImpl::BindIndexedDB(
std::move(request), origin));
}
+void RenderProcessHostImpl::ForceCrash() {
+ child_connection_->ForceCrash();
+}
+
void RenderProcessHostImpl::BindFileSystemManager(
blink::mojom::FileSystemManagerRequest request) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/chromium/content/browser/renderer_host/render_process_host_impl.h b/chromium/content/browser/renderer_host/render_process_host_impl.h
index 1d6fb2e6592..1e8f777be2e 100644
--- a/chromium/content/browser/renderer_host/render_process_host_impl.h
+++ b/chromium/content/browser/renderer_host/render_process_host_impl.h
@@ -239,6 +239,7 @@ class CONTENT_EXPORT RenderProcessHostImpl
const url::Origin& origin) override;
void BindIndexedDB(blink::mojom::IDBFactoryRequest request,
const url::Origin& origin) override;
+ void ForceCrash() override;
void CleanupCorbExceptionForPluginUponDestruction() override;
mojom::RouteProvider* GetRemoteRouteProvider();
diff --git a/chromium/content/browser/service_worker/embedded_worker_instance.cc b/chromium/content/browser/service_worker/embedded_worker_instance.cc
index 033853b765d..fa97725073e 100644
--- a/chromium/content/browser/service_worker/embedded_worker_instance.cc
+++ b/chromium/content/browser/service_worker/embedded_worker_instance.cc
@@ -113,8 +113,9 @@ std::unique_ptr<blink::URLLoaderFactoryBundleInfo> CreateFactoryBundle(
// See if the default factory needs to be tweaked by the embedder.
GetContentClient()->browser()->WillCreateURLLoaderFactory(
rph->GetBrowserContext(), nullptr /* frame_host */, rph->GetID(),
- false /* is_navigation */, origin, &default_factory_request,
- &default_header_client, &bypass_redirect_checks);
+ false /* is_navigation */, false /* is_download */, origin,
+ &default_factory_request, &default_header_client,
+ &bypass_redirect_checks);
}
if (!GetNetworkFactoryCallbackForTest()) {
diff --git a/chromium/content/browser/tracing/tracing_controller_impl.cc b/chromium/content/browser/tracing/tracing_controller_impl.cc
index beed93a8031..758526f49f0 100644
--- a/chromium/content/browser/tracing/tracing_controller_impl.cc
+++ b/chromium/content/browser/tracing/tracing_controller_impl.cc
@@ -298,10 +298,7 @@ TracingControllerImpl* TracingControllerImpl::GetInstance() {
bool TracingControllerImpl::GetCategories(GetCategoriesDoneCallback callback) {
std::set<std::string> category_set;
-
- tracing::TraceEventAgent::GetInstance()->GetCategories(&category_set);
- for (auto& agent : agents_)
- agent->GetCategories(&category_set);
+ tracing::TracedProcessImpl::GetInstance()->GetCategories(&category_set);
std::move(callback).Run(category_set);
return true;
diff --git a/chromium/content/browser/webrtc/webrtc_video_capture_browsertest.cc b/chromium/content/browser/webrtc/webrtc_video_capture_browsertest.cc
index 9e38210316a..a9eb78c74fa 100644
--- a/chromium/content/browser/webrtc/webrtc_video_capture_browsertest.cc
+++ b/chromium/content/browser/webrtc/webrtc_video_capture_browsertest.cc
@@ -22,16 +22,6 @@
namespace content {
-#if defined(OS_ANDROID)
-// Mojo video capture is currently not supported on Android
-// TODO(chfremer): Enable as soon as https://crbug.com/720500 is resolved.
-#define MAYBE_RecoverFromCrashInVideoCaptureProcess \
- DISABLED_RecoverFromCrashInVideoCaptureProcess
-#else
-#define MAYBE_RecoverFromCrashInVideoCaptureProcess \
- RecoverFromCrashInVideoCaptureProcess
-#endif // defined(OS_ANDROID)
-
namespace {
static const char kVideoCaptureHtmlFile[] = "/media/video_capture_test.html";
@@ -63,6 +53,7 @@ class WebRtcVideoCaptureBrowserTest : public ContentBrowserTest {
void SetUp() override {
ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
EnablePixelOutput();
+ embedded_test_server()->StartAcceptingConnections();
ContentBrowserTest::SetUp();
}
@@ -73,8 +64,12 @@ class WebRtcVideoCaptureBrowserTest : public ContentBrowserTest {
};
IN_PROC_BROWSER_TEST_F(WebRtcVideoCaptureBrowserTest,
- MAYBE_RecoverFromCrashInVideoCaptureProcess) {
- embedded_test_server()->StartAcceptingConnections();
+ RecoverFromCrashInVideoCaptureProcess) {
+ // This test only makes sense if the video capture service runs in a
+ // separate process.
+ if (!features::IsVideoCaptureServiceEnabledForOutOfProcess())
+ return;
+
GURL url(embedded_test_server()->GetURL(kVideoCaptureHtmlFile));
NavigateToURL(shell(), url);
diff --git a/chromium/content/common/child.mojom b/chromium/content/common/child.mojom
index 15524dded27..af7d60f9d66 100644
--- a/chromium/content/common/child.mojom
+++ b/chromium/content/common/child.mojom
@@ -6,4 +6,8 @@ module content.mojom;
// This interface encapsulates a pipe between a child and browser processes
// that each side uses to monitor the lifetime of the connection.
-interface Child {};
+interface Child {
+ // Force the child process to crash immediately (i.e. a hard crash, no
+ // cleanup, generating a crash report).
+ Crash();
+};
diff --git a/chromium/content/common/service_manager/child_connection.cc b/chromium/content/common/service_manager/child_connection.cc
index 58f8c26fba9..7cd197ddff8 100644
--- a/chromium/content/common/service_manager/child_connection.cc
+++ b/chromium/content/common/service_manager/child_connection.cc
@@ -70,6 +70,13 @@ class ChildConnection::IOThreadContext
this, handle));
}
+ void ForceCrash() {
+ DCHECK(io_task_runner_);
+ io_task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(&IOThreadContext::ForceCrashOnIOThread, this));
+ }
+
private:
friend class base::RefCountedThreadSafe<IOThreadContext>;
@@ -101,6 +108,8 @@ class ChildConnection::IOThreadContext
pid_receiver_.reset();
}
+ void ForceCrashOnIOThread() { child_->Crash(); }
+
scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
// Usable from the IO thread only.
std::unique_ptr<service_manager::Connector> connector_;
@@ -141,4 +150,8 @@ void ChildConnection::SetProcessHandle(base::ProcessHandle handle) {
context_->SetProcessHandle(handle);
}
+void ChildConnection::ForceCrash() {
+ context_->ForceCrash();
+}
+
} // namespace content
diff --git a/chromium/content/common/service_manager/child_connection.h b/chromium/content/common/service_manager/child_connection.h
index 96aca647373..067945049cd 100644
--- a/chromium/content/common/service_manager/child_connection.h
+++ b/chromium/content/common/service_manager/child_connection.h
@@ -59,6 +59,9 @@ class CONTENT_EXPORT ChildConnection {
// functional until this is called.
void SetProcessHandle(base::ProcessHandle handle);
+ // Instructs the child process to crash immediately.
+ void ForceCrash();
+
private:
class IOThreadContext;
diff --git a/chromium/content/common/service_manager/service_manager_connection_impl.cc b/chromium/content/common/service_manager/service_manager_connection_impl.cc
index 1226556dd8c..8a44c4ebe6f 100644
--- a/chromium/content/common/service_manager/service_manager_connection_impl.cc
+++ b/chromium/content/common/service_manager/service_manager_connection_impl.cc
@@ -301,6 +301,9 @@ class ServiceManagerConnectionImpl::IOThreadContext
}
}
+ // mojom::Child:
+ void Crash() override { IMMEDIATE_CRASH(); }
+
base::ThreadChecker io_thread_checker_;
bool started_ = false;
diff --git a/chromium/content/common/throttling_url_loader.cc b/chromium/content/common/throttling_url_loader.cc
index 6303159af21..b38fdad1530 100644
--- a/chromium/content/common/throttling_url_loader.cc
+++ b/chromium/content/common/throttling_url_loader.cc
@@ -552,7 +552,9 @@ void ThrottlingURLLoader::OnReceiveRedirect(
deferred_stage_ = DEFERRED_REDIRECT;
redirect_info_ =
std::make_unique<RedirectInfo>(redirect_info, response_head);
- client_binding_.PauseIncomingMethodCallProcessing();
+ // |client_binding_| can be unbound if the redirect came from a throttle.
+ if (client_binding_.is_bound())
+ client_binding_.PauseIncomingMethodCallProcessing();
return;
}
}
@@ -677,7 +679,9 @@ void ThrottlingURLLoader::Resume() {
break;
}
case DEFERRED_REDIRECT: {
- client_binding_.ResumeIncomingMethodCallProcessing();
+ // |client_binding_| can be unbound if the redirect came from a throttle.
+ if (client_binding_.is_bound())
+ client_binding_.ResumeIncomingMethodCallProcessing();
// TODO(dhausknecht) at this point we do not actually know if we commit to
// the redirect or if it will be cancelled. FollowRedirect would be a more
// suitable place to set this URL but there we do not have the data.
diff --git a/chromium/content/public/browser/content_browser_client.cc b/chromium/content/public/browser/content_browser_client.cc
index 07d71b3a06f..10de4bf0974 100644
--- a/chromium/content/public/browser/content_browser_client.cc
+++ b/chromium/content/public/browser/content_browser_client.cc
@@ -722,6 +722,7 @@ bool ContentBrowserClient::WillCreateURLLoaderFactory(
RenderFrameHost* frame,
int render_process_id,
bool is_navigation,
+ bool is_download,
const url::Origin& request_initiator,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
diff --git a/chromium/content/public/browser/content_browser_client.h b/chromium/content/public/browser/content_browser_client.h
index eaa7d8b2514..b40ca1e3be8 100644
--- a/chromium/content/public/browser/content_browser_client.h
+++ b/chromium/content/public/browser/content_browser_client.h
@@ -1171,9 +1171,10 @@ class CONTENT_EXPORT ContentBrowserClient {
// Allows the embedder to register per-scheme URLLoaderFactory implementations
// to handle subresource URL requests for schemes not handled by the Network
// Service. This function can also be used to make a factory for other
- // non-subresource requests, such as for the service worker script when
- // starting a service worker. In that case, the frame id will be
- // MSG_ROUTING_NONE.
+ // non-subresource requests, such as:
+ // -downloads
+ // -service worker script when starting a service worker. In that case, the
+ // frame id will be MSG_ROUTING_NONE
virtual void RegisterNonNetworkSubresourceURLLoaderFactories(
int render_process_id,
int render_frame_id,
@@ -1217,6 +1218,7 @@ class CONTENT_EXPORT ContentBrowserClient {
RenderFrameHost* frame,
int render_process_id,
bool is_navigation,
+ bool is_download,
const url::Origin& request_initiator,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
@@ -1265,6 +1267,10 @@ class CONTENT_EXPORT ContentBrowserClient {
//
// If |relative_partition_path| is the empty string, it means this needs to
// create the default NetworkContext for the BrowserContext.
+ //
+ // For NetworkContexts returned from the Network Service, some requirements:
+ // -enable data URL support (or else data URLs will fail)
+ // -disable file URL support (for security)
virtual network::mojom::NetworkContextPtr CreateNetworkContext(
BrowserContext* context,
bool in_memory,
diff --git a/chromium/content/public/browser/render_process_host.h b/chromium/content/public/browser/render_process_host.h
index 771fadd4135..56d7c5c8cdc 100644
--- a/chromium/content/public/browser/render_process_host.h
+++ b/chromium/content/public/browser/render_process_host.h
@@ -490,6 +490,9 @@ class CONTENT_EXPORT RenderProcessHost : public IPC::Sender,
// be posted back on the UI thread).
void PostTaskWhenProcessIsReady(base::OnceClosure task);
+ // Forces the renderer process to crash ASAP.
+ virtual void ForceCrash() {}
+
// Controls whether the destructor of RenderProcessHost*Impl* will end up
// cleaning the memory used by the exception added via
// RenderProcessHostImpl::AddCorbExceptionForPlugin.
diff --git a/chromium/content/public/common/content_features.cc b/chromium/content/public/common/content_features.cc
index 163f4055afb..628f91622bf 100644
--- a/chromium/content/public/common/content_features.cc
+++ b/chromium/content/public/common/content_features.cc
@@ -5,10 +5,6 @@
#include "content/public/common/content_features.h"
#include "build/build_config.h"
-#if defined(OS_CHROMEOS)
-#include "media/capture/video/chromeos/public/cros_features.h"
-#endif
-
namespace features {
// All features in alphabetical order.
@@ -723,12 +719,11 @@ VideoCaptureServiceConfiguration GetVideoCaptureServiceConfiguration() {
if (!ShouldEnableVideoCaptureService())
return VideoCaptureServiceConfiguration::kDisabled;
-#if defined(OS_ANDROID)
+// On ChromeOS the service must run in the browser process, because parts of the
+// code depend on global objects that are only available in the Browser process.
+// See https://crbug.com/891961.
+#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
return VideoCaptureServiceConfiguration::kEnabledForBrowserProcess;
-#elif defined(OS_CHROMEOS)
- return media::ShouldUseCrosCameraService()
- ? VideoCaptureServiceConfiguration::kEnabledForBrowserProcess
- : VideoCaptureServiceConfiguration::kEnabledForOutOfProcess;
#else
return base::FeatureList::IsEnabled(
features::kRunVideoCaptureServiceInBrowserProcess)
diff --git a/chromium/content/public/common/url_utils.cc b/chromium/content/public/common/url_utils.cc
index 5fcc9b77371..43da363b974 100644
--- a/chromium/content/public/common/url_utils.cc
+++ b/chromium/content/public/common/url_utils.cc
@@ -64,7 +64,8 @@ bool IsURLHandledByNetworkStack(const GURL& url) {
bool IsURLHandledByNetworkService(const GURL& url) {
return url.SchemeIsHTTPOrHTTPS() || url.SchemeIsWSOrWSS() ||
- url.SchemeIs(url::kFtpScheme) || url.SchemeIs(url::kGopherScheme);
+ url.SchemeIs(url::kFtpScheme) || url.SchemeIs(url::kGopherScheme) ||
+ url.SchemeIs(url::kDataScheme);
}
bool IsRendererDebugURL(const GURL& url) {
diff --git a/chromium/content/renderer/media/stream/media_stream_constraints_util_audio.cc b/chromium/content/renderer/media/stream/media_stream_constraints_util_audio.cc
index 0d7a924a2b4..ef3ee22659c 100644
--- a/chromium/content/renderer/media/stream/media_stream_constraints_util_audio.cc
+++ b/chromium/content/renderer/media/stream/media_stream_constraints_util_audio.cc
@@ -1255,8 +1255,7 @@ class DeviceContainer {
// It is possible, however, that the HW echo canceller is enabled. In
// such case the property for echo cancellation type should be updated
// accordingly.
- if (effects & media::AudioParameters::ECHO_CANCELLER ||
- effects & media::AudioParameters::EXPERIMENTAL_ECHO_CANCELLER) {
+ if (effects & media::AudioParameters::ECHO_CANCELLER) {
properties.echo_cancellation_type =
EchoCancellationType::kEchoCancellationSystem;
}
diff --git a/chromium/content/renderer/media/stream/media_stream_constraints_util_audio_unittest.cc b/chromium/content/renderer/media/stream/media_stream_constraints_util_audio_unittest.cc
index 49149a27d46..ac1ec05e744 100644
--- a/chromium/content/renderer/media/stream/media_stream_constraints_util_audio_unittest.cc
+++ b/chromium/content/renderer/media/stream/media_stream_constraints_util_audio_unittest.cc
@@ -190,11 +190,18 @@ class MediaStreamConstraintsUtilAudioTest
bool enable_system_echo_canceller,
bool hotword_enabled,
bool disable_local_echo,
- bool render_to_associated_sink) {
+ bool render_to_associated_sink,
+ bool enable_experimental_echo_canceller = false) {
blink::MediaStreamDevice device;
device.type = GetMediaStreamType();
+
+ int effects = 0;
if (enable_system_echo_canceller)
- device.input.set_effects(media::AudioParameters::ECHO_CANCELLER);
+ effects |= media::AudioParameters::ECHO_CANCELLER;
+ if (enable_experimental_echo_canceller)
+ effects |= media::AudioParameters::EXPERIMENTAL_ECHO_CANCELLER;
+ device.input.set_effects(effects);
+
if (render_to_associated_sink)
device.matched_output_device_id = std::string("some_device_id");
@@ -2146,6 +2153,21 @@ TEST_P(MediaStreamConstraintsUtilAudioTest, UsedAndUnusedSources) {
}
}
+TEST_P(MediaStreamConstraintsUtilAudioTest, ExperimetanlEcWithSource) {
+ std::unique_ptr<LocalMediaStreamAudioSource> source =
+ GetLocalMediaStreamAudioSource(
+ false /* enable_system_echo_canceller */,
+ false /* disable_local_echo */, false /* render_to_associated_sink */,
+ true /* enable_experimental_echo_canceller */);
+
+ constraint_factory_.Reset();
+ constraint_factory_.basic().echo_cancellation.SetExact(false);
+
+ auto result = SelectSettingsAudioCapture(
+ source.get(), constraint_factory_.CreateWebMediaConstraints());
+ EXPECT_TRUE(result.HasValue());
+}
+
INSTANTIATE_TEST_CASE_P(,
MediaStreamConstraintsUtilAudioTest,
testing::Values("",
diff --git a/chromium/device/fido/fido_test_data.h b/chromium/device/fido/fido_test_data.h
index 95192fdeace..7381c21f9e9 100644
--- a/chromium/device/fido/fido_test_data.h
+++ b/chromium/device/fido/fido_test_data.h
@@ -385,6 +385,8 @@ constexpr uint8_t kU2fConditionNotSatisfiedApduResponse[] = {0x69, 0x85};
constexpr uint8_t kU2fWrongDataApduResponse[] = {0x6A, 0x80};
+constexpr uint8_t kU2fWrongLengthApduResponse[] = {0x67, 0x00};
+
constexpr uint8_t kU2fKeyHandleSizeApduResponse[] = {0x00, 0x01};
constexpr uint8_t kApduEncodedNoErrorRegisterResponse[] = {
diff --git a/chromium/device/fido/u2f_register_operation.cc b/chromium/device/fido/u2f_register_operation.cc
index e80655a5f90..5a29ba0cc24 100644
--- a/chromium/device/fido/u2f_register_operation.cc
+++ b/chromium/device/fido/u2f_register_operation.cc
@@ -123,6 +123,7 @@ void U2fRegisterOperation::OnCheckForExcludedKeyHandle(
}
case apdu::ApduResponse::Status::SW_WRONG_DATA:
+ case apdu::ApduResponse::Status::SW_WRONG_LENGTH:
// Continue to iterate through the provided key handles in the exclude
// list and check for already registered keys.
if (++it != request().exclude_list()->cend()) {
diff --git a/chromium/device/fido/u2f_register_operation_unittest.cc b/chromium/device/fido/u2f_register_operation_unittest.cc
index 567ce6186f4..89eb9a94e36 100644
--- a/chromium/device/fido/u2f_register_operation_unittest.cc
+++ b/chromium/device/fido/u2f_register_operation_unittest.cc
@@ -152,10 +152,10 @@ TEST_F(U2fRegisterOperationTest, TestRegistrationWithExclusionList) {
auto device = std::make_unique<MockFidoDevice>();
EXPECT_CALL(*device, GetId()).WillRepeatedly(::testing::Return("device"));
- // DeviceTransact() will be called three times including two check only
- // sign-in calls and one registration call. For the first two calls, device
- // will invoke MockFidoDevice::WrongData as the authenticator did not create
- // the two key handles provided in the exclude list. At the third call,
+ // DeviceTransact() will be called three times including two check only sign-
+ // in calls and one registration call. For the first two calls, device will
+ // invoke MockFidoDevice::WrongData/WrongLength as the authenticator did not
+ // create the two key handles provided in the exclude list. At the third call,
// MockFidoDevice::NoErrorRegister will be invoked after registration.
::testing::InSequence s;
device->ExpectRequestAndRespondWith(
@@ -163,7 +163,7 @@ TEST_F(U2fRegisterOperationTest, TestRegistrationWithExclusionList) {
test_data::kU2fWrongDataApduResponse);
device->ExpectRequestAndRespondWith(
test_data::kU2fCheckOnlySignCommandApduWithKeyBeta,
- test_data::kU2fWrongDataApduResponse);
+ test_data::kU2fWrongLengthApduResponse);
device->ExpectRequestAndRespondWith(
test_data::kU2fRegisterCommandApdu,
test_data::kApduEncodedNoErrorRegisterResponse);
diff --git a/chromium/extensions/browser/api/media_perception_private/media_perception_api_manager.cc b/chromium/extensions/browser/api/media_perception_private/media_perception_api_manager.cc
index fd9ca85a4e6..7f3d0d91ef8 100644
--- a/chromium/extensions/browser/api/media_perception_private/media_perception_api_manager.cc
+++ b/chromium/extensions/browser/api/media_perception_private/media_perception_api_manager.cc
@@ -188,12 +188,6 @@ void MediaPerceptionAPIManager::GetState(APIStateCallback callback) {
void MediaPerceptionAPIManager::SetAnalyticsComponent(
const extensions::api::media_perception_private::Component& component,
APISetAnalyticsComponentCallback callback) {
- if (analytics_process_state_ != AnalyticsProcessState::IDLE) {
- LOG(WARNING) << "Analytics process is not STOPPED.";
- std::move(callback).Run(GetFailedToInstallComponentState());
- return;
- }
-
MediaPerceptionAPIDelegate* delegate =
ExtensionsAPIClient::Get()->GetMediaPerceptionAPIDelegate();
if (!delegate) {
diff --git a/chromium/extensions/browser/api/web_request/web_request_api.cc b/chromium/extensions/browser/api/web_request/web_request_api.cc
index 7a2c83535e0..6b15b0e32f6 100644
--- a/chromium/extensions/browser/api/web_request/web_request_api.cc
+++ b/chromium/extensions/browser/api/web_request/web_request_api.cc
@@ -643,6 +643,7 @@ bool WebRequestAPI::MaybeProxyURLLoaderFactory(
content::RenderFrameHost* frame,
int render_process_id,
bool is_navigation,
+ bool is_download,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -702,7 +703,7 @@ bool WebRequestAPI::MaybeProxyURLLoaderFactory(
browser_context, browser_context->GetResourceContext(),
// Match the behavior of the WebRequestInfo constructor
// which takes a net::URLRequest*.
- is_navigation ? -1 : render_process_id,
+ is_navigation ? -1 : render_process_id, is_download,
request_id_generator_, std::move(navigation_ui_data),
base::Unretained(info_map_), std::move(proxied_request),
std::move(target_factory_info),
diff --git a/chromium/extensions/browser/api/web_request/web_request_api.h b/chromium/extensions/browser/api/web_request/web_request_api.h
index 858deaad398..b8395bde776 100644
--- a/chromium/extensions/browser/api/web_request/web_request_api.h
+++ b/chromium/extensions/browser/api/web_request/web_request_api.h
@@ -197,6 +197,7 @@ class WebRequestAPI : public BrowserContextKeyedAPI,
content::RenderFrameHost* frame,
int render_process_id,
bool is_navigation,
+ bool is_download,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client);
diff --git a/chromium/extensions/browser/api/web_request/web_request_info.cc b/chromium/extensions/browser/api/web_request/web_request_info.cc
index 2c2524a077f..7df82afbaf6 100644
--- a/chromium/extensions/browser/api/web_request/web_request_info.cc
+++ b/chromium/extensions/browser/api/web_request/web_request_info.cc
@@ -306,6 +306,7 @@ WebRequestInfo::WebRequestInfo(
int32_t routing_id,
content::ResourceContext* resource_context,
const network::ResourceRequest& request,
+ bool is_download,
bool is_async)
: id(request_id),
url(request.url),
@@ -323,6 +324,8 @@ WebRequestInfo::WebRequestInfo(
resource_context(resource_context) {
if (url.SchemeIsWSOrWSS())
web_request_type = WebRequestResourceType::WEB_SOCKET;
+ else if (is_download)
+ web_request_type = WebRequestResourceType::OTHER;
else
web_request_type = ToWebRequestResourceType(type.value());
diff --git a/chromium/extensions/browser/api/web_request/web_request_info.h b/chromium/extensions/browser/api/web_request/web_request_info.h
index 553750d96a6..8cfd0c46702 100644
--- a/chromium/extensions/browser/api/web_request/web_request_info.h
+++ b/chromium/extensions/browser/api/web_request/web_request_info.h
@@ -78,6 +78,7 @@ struct WebRequestInfo {
int32_t routing_id,
content::ResourceContext* resource_context,
const network::ResourceRequest& request,
+ bool is_download,
bool is_async);
~WebRequestInfo();
diff --git a/chromium/extensions/browser/api/web_request/web_request_info_unittest.cc b/chromium/extensions/browser/api/web_request/web_request_info_unittest.cc
index 6e0b21c35ee..822ea552b3c 100644
--- a/chromium/extensions/browser/api/web_request/web_request_info_unittest.cc
+++ b/chromium/extensions/browser/api/web_request/web_request_info_unittest.cc
@@ -28,7 +28,7 @@ TEST(WebRequestInfoTest, CreateRequestBodyDataFromFile) {
request.request_body->AppendFileRange(base::FilePath(kFilePath), 0,
std::numeric_limits<uint64_t>::max(),
base::Time());
- WebRequestInfo info(0, 0, 0, nullptr, 0, nullptr, request, false);
+ WebRequestInfo info(0, 0, 0, nullptr, 0, nullptr, request, false, false);
ASSERT_TRUE(info.request_body_data);
auto* value = info.request_body_data->FindKey(
extension_web_request_api_constants::kRequestBodyRawKey);
diff --git a/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
index 0ac1297518e..c94c7f7a1e0 100644
--- a/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
+++ b/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -4,6 +4,7 @@
#include "extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h"
+#include <memory>
#include <utility>
#include "base/debug/alias.h"
@@ -28,11 +29,13 @@ WebRequestProxyingURLLoaderFactory::InProgressRequest::InProgressRequest(
int32_t routing_id,
uint32_t options,
const network::ResourceRequest& request,
+ bool is_download,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
network::mojom::URLLoaderRequest loader_request,
network::mojom::URLLoaderClientPtr client)
: factory_(factory),
request_(request),
+ is_download_(is_download),
request_id_(request_id),
network_service_request_id_(network_service_request_id),
routing_id_(routing_id),
@@ -79,7 +82,7 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::Restart() {
request_id_, factory_->render_process_id_, request_.render_frame_id,
factory_->navigation_ui_data_ ? factory_->navigation_ui_data_->DeepCopy()
: nullptr,
- routing_id_, factory_->resource_context_, request_,
+ routing_id_, factory_->resource_context_, request_, is_download_,
!(options_ & network::mojom::kURLLoadOptionSynchronous));
current_request_uses_header_client_ =
@@ -707,6 +710,7 @@ WebRequestProxyingURLLoaderFactory::WebRequestProxyingURLLoaderFactory(
void* browser_context,
content::ResourceContext* resource_context,
int render_process_id,
+ bool is_download,
scoped_refptr<WebRequestAPI::RequestIDGenerator> request_id_generator,
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data,
InfoMap* info_map,
@@ -717,6 +721,7 @@ WebRequestProxyingURLLoaderFactory::WebRequestProxyingURLLoaderFactory(
: browser_context_(browser_context),
resource_context_(resource_context),
render_process_id_(render_process_id),
+ is_download_(is_download),
request_id_generator_(std::move(request_id_generator)),
navigation_ui_data_(std::move(navigation_ui_data)),
info_map_(info_map),
@@ -741,6 +746,7 @@ void WebRequestProxyingURLLoaderFactory::StartProxying(
void* browser_context,
content::ResourceContext* resource_context,
int render_process_id,
+ bool is_download,
scoped_refptr<WebRequestAPI::RequestIDGenerator> request_id_generator,
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data,
InfoMap* info_map,
@@ -752,7 +758,7 @@ void WebRequestProxyingURLLoaderFactory::StartProxying(
WebRequestAPI::ProxySet::GetFromResourceContext(resource_context);
auto proxy = std::make_unique<WebRequestProxyingURLLoaderFactory>(
- browser_context, resource_context, render_process_id,
+ browser_context, resource_context, render_process_id, is_download,
std::move(request_id_generator), std::move(navigation_ui_data), info_map,
std::move(loader_request), std::move(target_factory_info),
std::move(header_client_request), proxies);
@@ -790,10 +796,10 @@ void WebRequestProxyingURLLoaderFactory::CreateLoaderAndStart(
}
auto result = requests_.emplace(
- web_request_id,
- std::make_unique<InProgressRequest>(
- this, web_request_id, request_id, routing_id, options, request,
- traffic_annotation, std::move(loader_request), std::move(client)));
+ web_request_id, std::make_unique<InProgressRequest>(
+ this, web_request_id, request_id, routing_id, options,
+ request, is_download_, traffic_annotation,
+ std::move(loader_request), std::move(client)));
result.first->second->Restart();
}
diff --git a/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h b/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
index b0ac89df029..d38dfe471a3 100644
--- a/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
+++ b/chromium/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
@@ -58,6 +58,7 @@ class WebRequestProxyingURLLoaderFactory
int32_t network_service_request_id,
uint32_t options,
const network::ResourceRequest& request,
+ bool is_download,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
network::mojom::URLLoaderRequest loader_request,
network::mojom::URLLoaderClientPtr client);
@@ -123,6 +124,7 @@ class WebRequestProxyingURLLoaderFactory
WebRequestProxyingURLLoaderFactory* const factory_;
network::ResourceRequest request_;
+ const bool is_download_;
const uint64_t request_id_;
const int32_t network_service_request_id_;
const int32_t routing_id_;
@@ -178,6 +180,7 @@ class WebRequestProxyingURLLoaderFactory
void* browser_context,
content::ResourceContext* resource_context,
int render_process_id,
+ bool is_download,
scoped_refptr<WebRequestAPI::RequestIDGenerator> request_id_generator,
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data,
InfoMap* info_map,
@@ -192,6 +195,7 @@ class WebRequestProxyingURLLoaderFactory
void* browser_context,
content::ResourceContext* resource_context,
int render_process_id,
+ bool is_download,
scoped_refptr<WebRequestAPI::RequestIDGenerator> request_id_generator,
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data,
InfoMap* info_map,
@@ -232,6 +236,7 @@ class WebRequestProxyingURLLoaderFactory
void* const browser_context_;
content::ResourceContext* const resource_context_;
const int render_process_id_;
+ const bool is_download_;
scoped_refptr<WebRequestAPI::RequestIDGenerator> request_id_generator_;
std::unique_ptr<ExtensionNavigationUIData> navigation_ui_data_;
InfoMap* const info_map_;
diff --git a/chromium/extensions/browser/api/web_request/web_request_proxying_websocket.cc b/chromium/extensions/browser/api/web_request/web_request_proxying_websocket.cc
index 1d6f7d3f197..c52de5feb5b 100644
--- a/chromium/extensions/browser/api/web_request/web_request_proxying_websocket.cc
+++ b/chromium/extensions/browser/api/web_request/web_request_proxying_websocket.cc
@@ -76,7 +76,8 @@ void WebRequestProxyingWebSocket::AddChannelRequest(
uint64_t request_id = request_id_generator_->Generate();
int routing_id = MSG_ROUTING_NONE;
info_.emplace(request_id, process_id_, render_frame_id_, nullptr, routing_id,
- resource_context_, request_, true /* is_async */);
+ resource_context_, request_, false /* is_download */,
+ true /* is_async */);
forwarding_client_ = std::move(client);
diff --git a/chromium/extensions/browser/extension_host.cc b/chromium/extensions/browser/extension_host.cc
index 0714c63350c..8cc9503fc13 100644
--- a/chromium/extensions/browser/extension_host.cc
+++ b/chromium/extensions/browser/extension_host.cc
@@ -336,24 +336,30 @@ void ExtensionHost::OnEventAck(int event_id) {
// events for other extensions have been acked. Make sure that the event id
// sent by the renderer is one that this ExtensionHost expects to receive.
// This way if a renderer _is_ compromised, it can really only affect itself.
- const auto it = unacked_messages_.find(event_id);
- if (!is_background_page || it == unacked_messages_.end()) {
+ if (!is_background_page) {
// Kill this renderer.
DCHECK(render_process_host());
- if (!is_background_page) {
- LOG(ERROR) << "Killing renderer for extension " << extension_id()
- << " for sending an EventAck without a lazy background page.";
- } else {
- // We have received an unexpected event id from the renderer. It might
- // be compromised or it might have some other issue.
- LOG(ERROR) << "Killing renderer for extension " << extension_id()
- << " for sending an EventAck message with a bad event id.";
- }
+ LOG(ERROR) << "Killing renderer for extension " << extension_id()
+ << " for sending an EventAck without a lazy background page.";
bad_message::ReceivedBadMessage(render_process_host(),
bad_message::EH_BAD_EVENT_ID);
return;
}
+ const auto it = unacked_messages_.find(event_id);
+ if (it == unacked_messages_.end()) {
+ // Ideally, we'd be able to kill the renderer in the case of it sending an
+ // ack for an event that we haven't seen. However, https://crbug.com/939279
+ // demonstrates that there are cases in which this can happen in other
+ // situations. We should track those down and fix them, but for now
+ // log and gracefully exit.
+ // bad_message::ReceivedBadMessage(render_process_host(),
+ // bad_message::EH_BAD_EVENT_ID);
+ LOG(ERROR) << "Received EventAck for extension " << extension_id()
+ << " for an unknown event.";
+ return;
+ }
+
EventRouter* router = EventRouter::Get(browser_context_);
if (router)
router->OnEventAck(browser_context_, extension_id(), it->second);
diff --git a/chromium/extensions/browser/url_loader_factory_manager.cc b/chromium/extensions/browser/url_loader_factory_manager.cc
index 2a8b9f6253b..703c27f704f 100644
--- a/chromium/extensions/browser/url_loader_factory_manager.cc
+++ b/chromium/extensions/browser/url_loader_factory_manager.cc
@@ -60,43 +60,114 @@ enum class FactoryUser {
// https://docs.google.com/document/d/1wOFTUmwM4NsDfjY4K6aXAbIyH7WJwLFPPIb5KAa1YZ8
const char* kHardcodedPartOfCorbAllowlist[] = {
"0149C10F1124F1ED6ACAD85C45E87A76A9DDC667",
+ "039F93DD1DF836F1D4E2084C1BEFDB46A854A9D1",
"072D729E856B1F2C9894AEEC3A5DF65E519D6BEE",
+ "07333481B7B8D7F57A9BA64FB98CF86EA87455FC",
+ "086E69ED9071DCB20C93A081A68360963AB09385",
+ "0CB16BAEE070B7617E9188B387C44964FB705D79",
+ "0EAEA2FDEE025D95B3ABB37014EFF5A98AC4BEAE",
+ "109A37B889E7C8AEA7B0103559C3EB6AF73B7832",
"16A81AEA09A67B03F7AEA5B957D24A4095E764BE",
"177508B365CBF1610CC2B53707749D79272F2F0B",
"1AB9CC404876117F49135E67BAD813F935AAE9BA",
+ "1CDDF7436E5F891E1D5E37164F7EB992AECA0E2D",
+ "1DB115A4344B58C0B7CC1595662E86C9E92C0848",
+ "1E37F1A19C1C528E616637B105CFC4838ECF52B4",
"260871EABEDE6F2D07D0D9450096093EDAFCBF34",
+ "29427534E31BB1820714C7CAEDF9C54B47BE154F",
"2AA94E2D3F4DA33F0D3BCF5DD48F69B8BDB26F52",
"2FEFB2792E8FF41073E77C8E9B38C159C5A788A8",
+ "2C116B242B7425D359E188AB053B3F88DB78F78D",
+ "2E2D8A405430172AB15ADCC09740F3EEE990D605",
+ "31E6100DC7B4EAB4ABF6CA2A4E191D3945D3C731",
+ "3230014EA01150A27C1887B700E019B27A6DBA08",
"3334952C8387B357A41DD8349D39AD9E7C423943",
"33A4A3614CD4BF90F4F2C7984220A9D4FF24DFEF",
+ "34FB670464B5F16EF5ABD6CD53E26030E97C26B3",
"360D8A88545D0C21CBDE2B55EA9E4E4285282B4C",
+ "37AC33A3A46D271CCE57DD6CB3FACE6B01F5A347",
+ "3CD98763C80D86E00CB1C4CAA56CEA8F3B0BA4F1",
+ "3EB17C39F8B6B28FAF34E2406E57A76013A2E066",
"3FDD3DB17F3B686F5A05204700ABA13DF20AE957",
+ "41536C3554CD9458EB2F05F1B58CF84BB7BF83BC",
+ "43865F8D555C201FE452A5A40702EA96240E749C",
+ "44943FADD66932EF56EE3D856A9FAAD4A8AF0FD9",
+ "4913450195D177430217CAB64B356DC6F6B0F483",
"4FC718F4549B18E68A45A11FC2B593033C7049D2",
+ "5053323D1F7B6EEC97A77A350DB6D0D8E51CD0AC",
"505F2C1E723731B2C8C9182FEAA73D00525B2048",
+ "50DDD8734521B61564FCE273F8E60547F88BBCBE",
+ "52865B2087D0ABCD195A83DFD4BD041A3B4EBC34",
+ "52C94AC7680C3A03CCB6EA31445DD42BD0D5CA8E",
+ "58BCF05A42C8ECED4E6D76F51E2E1A64AC4F7E7C",
+ "5E052881B4847F68CFC8ED1A00C341FC14009C1E",
+ "5F0C47BC039BEDC1B29B68918F75370C292076A6",
"61E581B10D83C0AEF8366BB64C18C6615884B3D2",
"62D18583FC239861A9661C922A5F13A57EE7EDD7",
+ "6357533CAFFB94A9EA5268ED110079E15561E469",
+ "65C20C06ED10E6F39EED527AC736D87B0390DE70",
+ "67528F9B47BE454EC46809C33D24F2C199BE408D",
"6AE81EF3B13B15080A2DDB23A205A24C65CCC10B",
"6BA5F75FFF75B69507BC4B09B7094926EF93DBD2",
+ "6E49449D56D031B87835CC767734AF5A064E1A13",
+ "71CB78C3334D5122E7F23C8525AD24100CDE7D4A",
"71EE66C0F71CD89BEE340F8568A44101D4C3A9A7",
+ "77D83E0A4157A0E77B51AD60BAB69A346CD4FEA3",
+ "7879DB88205D880B64D55E51B9726E1D12F7261F",
"7BFE588B209A15260DE12777B4BBB738DE98FE6C",
"808FA9BB3CD501D7801D1CD6D5A3DBA088FDD46F",
"82FDBBF79F3517C3946BD89EAAF90C46DFDA4681",
+ "83B6C75264D5D2F81FDEFD681EDD2076DD8F0B9B",
"88C372CE52E21560C17BFD52556E60D694E12CAC",
+ "88F5F459139892C0F5DF3022676726BB3F01FB5C",
+ "89C9B32115F19A18E9BE4906DC59F24A934CB9F0",
+ "89F40D84C0C72C6B02B320716E877FB1671218E9",
+ "8A0634388BCBB6D073E1C97B14C024396ED32D12",
+ "8CDD303D6C341D9CAB16713C3CD7587B90A7A84A",
+ "8CE6227B4E53DF42FF93B24F49D15EDE31E97E79",
"934B8F5753A3E5A276FC7D0EE5E575B335A0CC76",
"973E35633030AD27DABEC99609424A61386C7309",
+ "97E04C5632954E778306CAC40B3F95C470B463B6",
+ "98EF7B1601119AEE1FCC28EE5CE247DED5676539",
"99E06C364BBB2D1F82A9D20BC1645BF21E478259",
"A30E526CF62131BFBFD7CD9B56253A8F3F171777",
"A3660FA31A0DBF07C9F80D5342FF215DBC962719",
+ "A6057397EDC4E6CF25BC3A142F866ACC653B1CF1",
+ "A8FB3967ADE404B77AC3FB5815A399C0660C3C63",
+ "A9A4B26C2387BA2A5861C790B0FF39F230427AC8",
+ "A9F78610B717B3992F92F490E82FC63FFF46C5FA",
+ "AA3DE48E23B2465B21F5D33E993FD959F611DD10",
"AEEDAC793F184240CFB800DA73EE6321E5145102",
+ "B3CF6C01796E8D03378FAA77AF507E27BB847E9D",
"B4782AE831D849EFCC2AF4BE2012816EDDF8D908",
"BF5224FB246A6B67EA986EFF77A43F6C1BCA9672",
+ "C5539F4EBECABA792CC40D03A56144AAD3BF9D19",
"C5BCB9E2E47C3F6FD3F7F83ED982872F77852BA7",
+ "C86D546CA47034163C12DC2C912910C3A12C3B07",
+ "C940F83135D9612865F4A44391DDDFE3B7BE1393",
"CA89BD35059845F2DB4B4398FD339B9F210E9337",
"CC74B2408753932B5D49C81EC073E3E4CA766EE6",
+ "CD8AF9C47DDE6327F8D9A3EFA81F34C6B6C26EBB",
+ "CF40F6289951CBFA3B83B792EFA774E2EA06E4C0",
"D0537B1BADCE856227CE76E31B3772F6B68F653C",
+ "D9A97CD75380C697C65D37512E53DBECDFA45FB9",
+ "DDA21167F058A65D878DF84C3CF3FCC60B053E80",
+ "E178D4F4D6617C0B880C36F192DA3B18422C5064",
+ "E6B12430B6166B31BE20E13941C22569EA75B0F2",
"E7036E906DBFB77C46EDDEB003A72C0B5CC9BE7F",
+ "E873675B8E754F1B1F1222CB921EA14B4335179D",
+ "EAD0BFA4ED66D9A2112A4C9A0AA25329FF980AC6",
"EC24668224116D19FF1A5FFAA61238B88773982C",
+ "EC4A841BD03C8E5202043165188A9E060BF703A3",
+ "EE4BE5F23D2E59E4713958465941EFB4A18166B7",
+ "F273C23C616F5C56E8EDBAE24B21F5D408936A0D",
+ "F566B33D62CE21415AF5B3F3FD8762B7454B8874",
"F59AB261280AB3AE9826D9359507838B90B07431",
+ "F73F9EF0207603992CA3C00A7A0CB223D5571B3F",
+ "F9287A33E15038F2591F23E6E9C486717C7202DD",
+ "FEE3DC8C722657A4A5B0F72CA48CF950DC956148",
+ "FF0DA4BD87A88469B10709B99E79D4B0E11C0CA6",
+ "FF8257C73304BA655E10F324C962504BA6691DF2",
};
constexpr size_t kHashedExtensionIdLength = base::kSHA1Length * 2;
diff --git a/chromium/extensions/shell/browser/shell_content_browser_client.cc b/chromium/extensions/shell/browser/shell_content_browser_client.cc
index fbe3536495d..70d8869a0eb 100644
--- a/chromium/extensions/shell/browser/shell_content_browser_client.cc
+++ b/chromium/extensions/shell/browser/shell_content_browser_client.cc
@@ -292,6 +292,7 @@ bool ShellContentBrowserClient::WillCreateURLLoaderFactory(
content::RenderFrameHost* frame,
int render_process_id,
bool is_navigation,
+ bool is_download,
const url::Origin& request_initiator,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
@@ -300,8 +301,8 @@ bool ShellContentBrowserClient::WillCreateURLLoaderFactory(
extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get(
browser_context);
bool use_proxy = web_request_api->MaybeProxyURLLoaderFactory(
- browser_context, frame, render_process_id, is_navigation, factory_request,
- header_client);
+ browser_context, frame, render_process_id, is_navigation, is_download,
+ factory_request, header_client);
if (bypass_redirect_checks)
*bypass_redirect_checks = use_proxy;
return use_proxy;
diff --git a/chromium/extensions/shell/browser/shell_content_browser_client.h b/chromium/extensions/shell/browser/shell_content_browser_client.h
index b4c7546c225..f669db6caa6 100644
--- a/chromium/extensions/shell/browser/shell_content_browser_client.h
+++ b/chromium/extensions/shell/browser/shell_content_browser_client.h
@@ -78,6 +78,7 @@ class ShellContentBrowserClient : public content::ContentBrowserClient {
content::RenderFrameHost* frame_host,
int render_process_id,
bool is_navigation,
+ bool is_download,
const url::Origin& request_initiator,
network::mojom::URLLoaderFactoryRequest* factory_request,
network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client,
diff --git a/chromium/gpu/config/gpu_lists_version.h b/chromium/gpu/config/gpu_lists_version.h
index 2e511214d9c..30cdf83f8c2 100644
--- a/chromium/gpu/config/gpu_lists_version.h
+++ b/chromium/gpu/config/gpu_lists_version.h
@@ -3,6 +3,6 @@
#ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_
#define GPU_CONFIG_GPU_LISTS_VERSION_H_
-#define GPU_LISTS_VERSION "4564075605dd87605df1f8c00bf7161c9c4eb41b"
+#define GPU_LISTS_VERSION "a18e9c821f68671054de122c6b20464b639f37da"
#endif // GPU_CONFIG_GPU_LISTS_VERSION_H_
diff --git a/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc b/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
index 57827e5ffc2..d1405a8425c 100644
--- a/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -637,7 +637,10 @@ void CommandBufferProxyImpl::TakeFrontBuffer(const gpu::Mailbox& mailbox) {
if (last_state_.error != gpu::error::kNoError)
return;
- Send(new GpuCommandBufferMsg_TakeFrontBuffer(route_id_, mailbox));
+ // TakeFrontBuffer should be a deferred message so that it's sequenced
+ // correctly with respect to preceding ReturnFrontBuffer messages.
+ last_flush_id_ = channel_->EnqueueDeferredMessage(
+ GpuCommandBufferMsg_TakeFrontBuffer(route_id_, mailbox));
}
void CommandBufferProxyImpl::ReturnFrontBuffer(const gpu::Mailbox& mailbox,
diff --git a/chromium/gpu/ipc/service/gpu_channel.cc b/chromium/gpu/ipc/service/gpu_channel.cc
index c966dfe9f20..f061ec17372 100644
--- a/chromium/gpu/ipc/service/gpu_channel.cc
+++ b/chromium/gpu/ipc/service/gpu_channel.cc
@@ -237,6 +237,7 @@ bool GpuChannelMessageFilter::OnMessageReceived(const IPC::Message& message) {
case GpuCommandBufferMsg_AsyncFlush::ID:
case GpuCommandBufferMsg_DestroyTransferBuffer::ID:
case GpuCommandBufferMsg_ReturnFrontBuffer::ID:
+ case GpuCommandBufferMsg_TakeFrontBuffer::ID:
case GpuChannelMsg_CreateSharedImage::ID:
case GpuChannelMsg_DestroySharedImage::ID:
return MessageErrorHandler(message, "Invalid message");
diff --git a/chromium/media/capture/video/chromeos/stream_buffer_manager.cc b/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
index f67ce8028ba..722e1a8e74e 100644
--- a/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
+++ b/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
@@ -728,6 +728,7 @@ void StreamBufferManager::SubmitCaptureResultIfComplete(
CaptureResult& pending_result = pending_results_[frame_number];
if (!stream_context_[stream_type]->capture_results_with_buffer.count(
frame_number) ||
+ pending_result.partial_metadata_received.empty() ||
*pending_result.partial_metadata_received.rbegin() <
partial_result_count_ ||
pending_result.reference_time == base::TimeTicks()) {
diff --git a/chromium/media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.cc b/chromium/media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.cc
index 21b6b2ebad0..200794e63c9 100644
--- a/chromium/media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.cc
+++ b/chromium/media/filters/ffmpeg_h265_to_annex_b_bitstream_converter.cc
@@ -52,7 +52,7 @@ bool FFmpegH265ToAnnexBBitstreamConverter::ConvertPacket(AVPacket* packet) {
// allow that (see crbug.com/455379).
input_frame.insert(input_frame.end(),
packet->data, packet->data + packet->size);
- int nalu_size_len = hevc_config_->lengthSizeMinusOne + 1;
+ size_t nalu_size_len = hevc_config_->lengthSizeMinusOne + 1;
if (!mp4::AVC::ConvertFrameToAnnexB(nalu_size_len, &input_frame,
&subsamples)) {
DVLOG(1) << "AnnexB conversion failed";
diff --git a/chromium/media/filters/gpu_video_decoder.cc b/chromium/media/filters/gpu_video_decoder.cc
index 71789da8ff4..72088c75a66 100644
--- a/chromium/media/filters/gpu_video_decoder.cc
+++ b/chromium/media/filters/gpu_video_decoder.cc
@@ -687,6 +687,10 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) {
frame->set_color_space(picture.color_space());
if (picture.allow_overlay())
frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
+ if (picture.read_lock_fences_enabled()) {
+ frame->metadata()->SetBoolean(VideoFrameMetadata::READ_LOCK_FENCES_ENABLED,
+ true);
+ }
if (picture.texture_owner())
frame->metadata()->SetBoolean(VideoFrameMetadata::TEXTURE_OWNER, true);
if (picture.wants_promotion_hint()) {
diff --git a/chromium/media/formats/mp4/avc.cc b/chromium/media/formats/mp4/avc.cc
index 5a0bb690bef..1a85b67d5f7 100644
--- a/chromium/media/formats/mp4/avc.cc
+++ b/chromium/media/formats/mp4/avc.cc
@@ -23,9 +23,9 @@ static const uint8_t kAnnexBStartCode[] = {0, 0, 0, 1};
static const int kAnnexBStartCodeSize = 4;
static bool ConvertAVCToAnnexBInPlaceForLengthSize4(std::vector<uint8_t>* buf) {
- const int kLengthSize = 4;
+ const size_t kLengthSize = 4;
size_t pos = 0;
- while (pos + kLengthSize < buf->size()) {
+ while (buf->size() > kLengthSize && buf->size() - kLengthSize > pos) {
uint32_t nal_length = (*buf)[pos];
nal_length = (nal_length << 8) + (*buf)[pos+1];
nal_length = (nal_length << 8) + (*buf)[pos+2];
@@ -63,7 +63,7 @@ int AVC::FindSubsampleIndex(const std::vector<uint8_t>& buffer,
}
// static
-bool AVC::ConvertFrameToAnnexB(int length_size,
+bool AVC::ConvertFrameToAnnexB(size_t length_size,
std::vector<uint8_t>* buffer,
std::vector<SubsampleEntry>* subsamples) {
RCHECK(length_size == 1 || length_size == 2 || length_size == 4);
@@ -79,8 +79,8 @@ bool AVC::ConvertFrameToAnnexB(int length_size,
buffer->reserve(temp.size() + 32);
size_t pos = 0;
- while (pos + length_size < temp.size()) {
- int nal_length = temp[pos];
+ while (temp.size() > length_size && temp.size() - length_size > pos) {
+ size_t nal_length = temp[pos];
if (length_size == 2) nal_length = (nal_length << 8) + temp[pos+1];
pos += length_size;
@@ -89,7 +89,7 @@ bool AVC::ConvertFrameToAnnexB(int length_size,
return false;
}
- RCHECK(pos + nal_length <= temp.size());
+ RCHECK(temp.size() >= nal_length && temp.size() - nal_length >= pos);
buffer->insert(buffer->end(), kAnnexBStartCode,
kAnnexBStartCode + kAnnexBStartCodeSize);
if (subsamples && !subsamples->empty()) {
diff --git a/chromium/media/formats/mp4/avc.h b/chromium/media/formats/mp4/avc.h
index e83f561e467..8f11e77716d 100644
--- a/chromium/media/formats/mp4/avc.h
+++ b/chromium/media/formats/mp4/avc.h
@@ -26,7 +26,7 @@ struct AVCDecoderConfigurationRecord;
class MEDIA_EXPORT AVC {
public:
- static bool ConvertFrameToAnnexB(int length_size,
+ static bool ConvertFrameToAnnexB(size_t length_size,
std::vector<uint8_t>* buffer,
std::vector<SubsampleEntry>* subsamples);
diff --git a/chromium/media/gpu/ipc/client/gpu_video_decode_accelerator_host.cc b/chromium/media/gpu/ipc/client/gpu_video_decode_accelerator_host.cc
index 9e521044bb8..7d658f1a08e 100644
--- a/chromium/media/gpu/ipc/client/gpu_video_decode_accelerator_host.cc
+++ b/chromium/media/gpu/ipc/client/gpu_video_decode_accelerator_host.cc
@@ -262,6 +262,7 @@ void GpuVideoDecodeAcceleratorHost::OnPictureReady(
Picture picture(params.picture_buffer_id, params.bitstream_buffer_id,
params.visible_rect, params.color_space,
params.allow_overlay);
+ picture.set_read_lock_fences_enabled(params.read_lock_fences_enabled);
picture.set_size_changed(params.size_changed);
picture.set_texture_owner(params.surface_texture);
picture.set_wants_promotion_hint(params.wants_promotion_hint);
diff --git a/chromium/media/gpu/ipc/common/media_messages.h b/chromium/media/gpu/ipc/common/media_messages.h
index 5ef9243a42b..08e7216f65c 100644
--- a/chromium/media/gpu/ipc/common/media_messages.h
+++ b/chromium/media/gpu/ipc/common/media_messages.h
@@ -27,6 +27,7 @@ IPC_STRUCT_BEGIN(AcceleratedVideoDecoderHostMsg_PictureReady_Params)
IPC_STRUCT_MEMBER(gfx::Rect, visible_rect)
IPC_STRUCT_MEMBER(gfx::ColorSpace, color_space)
IPC_STRUCT_MEMBER(bool, allow_overlay)
+ IPC_STRUCT_MEMBER(bool, read_lock_fences_enabled)
IPC_STRUCT_MEMBER(bool, size_changed)
IPC_STRUCT_MEMBER(bool, surface_texture)
IPC_STRUCT_MEMBER(bool, wants_promotion_hint)
diff --git a/chromium/media/gpu/ipc/service/gpu_video_decode_accelerator.cc b/chromium/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
index 9ee74f99baa..a79ff565045 100644
--- a/chromium/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
+++ b/chromium/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
@@ -288,6 +288,7 @@ void GpuVideoDecodeAccelerator::PictureReady(const Picture& picture) {
params.visible_rect = picture.visible_rect();
params.color_space = picture.color_space();
params.allow_overlay = picture.allow_overlay();
+ params.read_lock_fences_enabled = picture.read_lock_fences_enabled();
params.size_changed = picture.size_changed();
params.surface_texture = picture.texture_owner();
params.wants_promotion_hint = picture.wants_promotion_hint();
diff --git a/chromium/media/gpu/ipc/service/picture_buffer_manager.cc b/chromium/media/gpu/ipc/service/picture_buffer_manager.cc
index 9cd5b1e1664..b00538685ea 100644
--- a/chromium/media/gpu/ipc/service/picture_buffer_manager.cc
+++ b/chromium/media/gpu/ipc/service/picture_buffer_manager.cc
@@ -220,6 +220,10 @@ class PictureBufferManagerImpl : public PictureBufferManager {
if (picture.allow_overlay())
frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true);
+ if (picture.read_lock_fences_enabled()) {
+ frame->metadata()->SetBoolean(
+ VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true);
+ }
// TODO(sandersd): Provide an API for VDAs to control this.
frame->metadata()->SetBoolean(VideoFrameMetadata::POWER_EFFICIENT, true);
diff --git a/chromium/media/gpu/ipc/service/vda_video_decoder.cc b/chromium/media/gpu/ipc/service/vda_video_decoder.cc
index 82ad4598f03..2b94759988f 100644
--- a/chromium/media/gpu/ipc/service/vda_video_decoder.cc
+++ b/chromium/media/gpu/ipc/service/vda_video_decoder.cc
@@ -12,6 +12,7 @@
#include "base/callback_helpers.h"
#include "base/location.h"
#include "base/logging.h"
+#include "build/build_config.h"
#include "gpu/config/gpu_driver_bug_workarounds.h"
#include "gpu/config/gpu_info.h"
#include "gpu/config/gpu_preferences.h"
@@ -21,6 +22,7 @@
#include "media/base/video_codecs.h"
#include "media/base/video_types.h"
#include "media/base/video_util.h"
+#include "media/gpu/buildflags.h"
#include "media/gpu/gpu_video_accelerator_util.h"
#include "media/gpu/gpu_video_decode_accelerator_factory.h"
#include "media/video/picture.h"
@@ -118,8 +120,8 @@ VdaVideoDecoder::Create(
std::move(media_log), target_color_space,
base::BindOnce(&PictureBufferManager::Create),
base::BindOnce(&CreateCommandBufferHelper, std::move(get_stub_cb)),
- base::BindOnce(&CreateAndInitializeVda, gpu_preferences,
- gpu_workarounds),
+ base::BindRepeating(&CreateAndInitializeVda, gpu_preferences,
+ gpu_workarounds),
GpuVideoAcceleratorUtil::ConvertGpuToMediaDecodeCapabilities(
GpuVideoDecodeAcceleratorFactory::GetDecoderCapabilities(
gpu_preferences, gpu_workarounds))));
@@ -264,13 +266,32 @@ void VdaVideoDecoder::Initialize(const VideoDecoderConfig& config,
return;
}
+ // VaapiVideoDecodeAccelerator doesn't support profile change, the different
+ // profiles from the initial profile will causes an issue in AMD driver
+ // (https://crbug.com/929565). We should support reinitialization for profile
+ // changes. We limit this support as small as possible for safety.
+ const bool is_profile_change =
+#if defined(OS_CHROMEOS) && BUILDFLAG(USE_VAAPI)
+ config_.profile() != config.profile();
+#else
+ false;
+#endif
+
// The configuration is supported.
config_ = config;
if (reinitializing) {
- parent_task_runner_->PostTask(
- FROM_HERE, base::BindOnce(&VdaVideoDecoder::InitializeDone,
- parent_weak_this_, true));
+ if (is_profile_change) {
+ MEDIA_LOG(INFO, media_log_) << "Reinitializing video decode accelerator "
+ << "for profile change";
+ gpu_task_runner_->PostTask(
+ FROM_HERE, base::BindOnce(&VdaVideoDecoder::ReinitializeOnGpuThread,
+ gpu_weak_this_));
+ } else {
+ parent_task_runner_->PostTask(
+ FROM_HERE, base::BindOnce(&VdaVideoDecoder::InitializeDone,
+ parent_weak_this_, true));
+ }
return;
}
@@ -279,21 +300,39 @@ void VdaVideoDecoder::Initialize(const VideoDecoderConfig& config,
base::BindOnce(&VdaVideoDecoder::InitializeOnGpuThread, gpu_weak_this_));
}
+void VdaVideoDecoder::ReinitializeOnGpuThread() {
+ DVLOG(2) << __func__;
+ DCHECK(gpu_task_runner_->BelongsToCurrentThread());
+ DCHECK(vda_initialized_);
+ DCHECK(vda_);
+ DCHECK(!reinitializing_);
+
+ reinitializing_ = true;
+ gpu_weak_vda_factory_ = nullptr;
+ vda_ = nullptr;
+ vda_initialized_ = false;
+ InitializeOnGpuThread();
+}
+
void VdaVideoDecoder::InitializeOnGpuThread() {
DVLOG(2) << __func__;
DCHECK(gpu_task_runner_->BelongsToCurrentThread());
DCHECK(!vda_);
+ DCHECK(!vda_initialized_);
+
+ // Set up |command_buffer_helper_|.
+ if (!reinitializing_) {
+ command_buffer_helper_ = std::move(create_command_buffer_helper_cb_).Run();
+ if (!command_buffer_helper_) {
+ parent_task_runner_->PostTask(
+ FROM_HERE, base::BindOnce(&VdaVideoDecoder::InitializeDone,
+ parent_weak_this_, false));
+ return;
+ }
- // Set up |command_buffer_helper|.
- scoped_refptr<CommandBufferHelper> command_buffer_helper =
- std::move(create_command_buffer_helper_cb_).Run();
- if (!command_buffer_helper) {
- parent_task_runner_->PostTask(
- FROM_HERE, base::BindOnce(&VdaVideoDecoder::InitializeDone,
- parent_weak_this_, false));
- return;
+ picture_buffer_manager_->Initialize(gpu_task_runner_,
+ command_buffer_helper_);
}
- picture_buffer_manager_->Initialize(gpu_task_runner_, command_buffer_helper);
// Convert the configuration.
VideoDecodeAccelerator::Config vda_config;
@@ -312,8 +351,8 @@ void VdaVideoDecoder::InitializeOnGpuThread() {
// vda_config.supported_output_formats = [Only used by PPAPI]
// Create and initialize the VDA.
- vda_ = std::move(create_and_initialize_vda_cb_)
- .Run(command_buffer_helper, this, media_log_.get(), vda_config);
+ vda_ = create_and_initialize_vda_cb_.Run(command_buffer_helper_, this,
+ media_log_.get(), vda_config);
if (!vda_) {
parent_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&VdaVideoDecoder::InitializeDone,
@@ -347,6 +386,7 @@ void VdaVideoDecoder::InitializeDone(bool status) {
return;
}
+ reinitializing_ = false;
std::move(init_cb_).Run(true);
}
diff --git a/chromium/media/gpu/ipc/service/vda_video_decoder.h b/chromium/media/gpu/ipc/service/vda_video_decoder.h
index e9e9b5d6038..39c6478968b 100644
--- a/chromium/media/gpu/ipc/service/vda_video_decoder.h
+++ b/chromium/media/gpu/ipc/service/vda_video_decoder.h
@@ -47,7 +47,7 @@ class VdaVideoDecoder : public VideoDecoder,
using CreateCommandBufferHelperCB =
base::OnceCallback<scoped_refptr<CommandBufferHelper>()>;
using CreateAndInitializeVdaCB =
- base::OnceCallback<std::unique_ptr<VideoDecodeAccelerator>(
+ base::RepeatingCallback<std::unique_ptr<VideoDecodeAccelerator>(
scoped_refptr<CommandBufferHelper>,
VideoDecodeAccelerator::Client*,
MediaLog*,
@@ -138,6 +138,7 @@ class VdaVideoDecoder : public VideoDecoder,
// Tasks and thread hopping.
void DestroyOnGpuThread();
void InitializeOnGpuThread();
+ void ReinitializeOnGpuThread();
void InitializeDone(bool status);
void DecodeOnGpuThread(scoped_refptr<DecoderBuffer> buffer,
int32_t bitstream_id);
@@ -197,8 +198,10 @@ class VdaVideoDecoder : public VideoDecoder,
// Only written on the GPU thread during initialization, which is mutually
// exclusive with reads on the parent thread.
std::unique_ptr<VideoDecodeAccelerator> vda_;
+ scoped_refptr<CommandBufferHelper> command_buffer_helper_;
bool vda_initialized_ = false;
bool decode_on_parent_thread_ = false;
+ bool reinitializing_ = false;
//
// Weak pointers, prefixed by bound thread.
diff --git a/chromium/media/gpu/ipc/service/vda_video_decoder_unittest.cc b/chromium/media/gpu/ipc/service/vda_video_decoder_unittest.cc
index 859e6e195fb..b25795f94ed 100644
--- a/chromium/media/gpu/ipc/service/vda_video_decoder_unittest.cc
+++ b/chromium/media/gpu/ipc/service/vda_video_decoder_unittest.cc
@@ -120,8 +120,8 @@ class VdaVideoDecoderTest : public testing::TestWithParam<bool> {
base::Unretained(this)),
base::BindOnce(&VdaVideoDecoderTest::CreateCommandBufferHelper,
base::Unretained(this)),
- base::BindOnce(&VdaVideoDecoderTest::CreateAndInitializeVda,
- base::Unretained(this)),
+ base::BindRepeating(&VdaVideoDecoderTest::CreateAndInitializeVda,
+ base::Unretained(this)),
GetCapabilities()));
client_ = vdavd_.get();
}
diff --git a/chromium/media/gpu/vt_video_decode_accelerator_mac.cc b/chromium/media/gpu/vt_video_decode_accelerator_mac.cc
index e09762f19c9..36a61a0c1a5 100644
--- a/chromium/media/gpu/vt_video_decode_accelerator_mac.cc
+++ b/chromium/media/gpu/vt_video_decode_accelerator_mac.cc
@@ -1344,9 +1344,21 @@ bool VTVideoDecodeAccelerator::SendFrame(const Frame& frame) {
DVLOG(3) << "PictureReady(picture_id=" << picture_id << ", "
<< "bitstream_id=" << frame.bitstream_id << ")";
- client_->PictureReady(Picture(picture_id, frame.bitstream_id,
- gfx::Rect(frame.image_size), color_space,
- true));
+ Picture picture(picture_id, frame.bitstream_id, gfx::Rect(frame.image_size),
+ color_space, true);
+ // The GLImageIOSurface keeps the IOSurface alive as long as it exists, but
+ // bound textures do not, and they can outlive the GLImageIOSurface if they
+ // are deleted in the command buffer before they are used by the platform GL
+ // implementation. (https://crbug.com/930479#c69)
+ //
+ // A fence is required whenever a GLImage is bound, but we can't know in
+ // advance whether that will happen.
+ //
+ // TODO(sandersd): Can GLImageIOSurface be responsible for fences, so that
+ // we don't need to use them when the image is never bound? Bindings are
+ // typically only created when WebGL is in use.
+ picture.set_read_lock_fences_enabled(true);
+ client_->PictureReady(std::move(picture));
return true;
}
diff --git a/chromium/media/video/picture.cc b/chromium/media/video/picture.cc
index e7ab1dbb9af..316ce15e5b8 100644
--- a/chromium/media/video/picture.cc
+++ b/chromium/media/video/picture.cc
@@ -74,6 +74,7 @@ Picture::Picture(int32_t picture_buffer_id,
visible_rect_(visible_rect),
color_space_(color_space),
allow_overlay_(allow_overlay),
+ read_lock_fences_enabled_(false),
size_changed_(false),
texture_owner_(false),
wants_promotion_hint_(false) {}
diff --git a/chromium/media/video/picture.h b/chromium/media/video/picture.h
index 0dedb51ee55..49ea2af8898 100644
--- a/chromium/media/video/picture.h
+++ b/chromium/media/video/picture.h
@@ -94,10 +94,6 @@ class MEDIA_EXPORT Picture {
// Returns the id of the bitstream buffer from which this frame was decoded.
int32_t bitstream_buffer_id() const { return bitstream_buffer_id_; }
- void set_bitstream_buffer_id(int32_t bitstream_buffer_id) {
- bitstream_buffer_id_ = bitstream_buffer_id;
- }
-
// Returns the color space of the picture.
const gfx::ColorSpace& color_space() const { return color_space_; }
@@ -108,6 +104,12 @@ class MEDIA_EXPORT Picture {
bool allow_overlay() const { return allow_overlay_; }
+ bool read_lock_fences_enabled() const { return read_lock_fences_enabled_; }
+
+ void set_read_lock_fences_enabled(bool read_lock_fences_enabled) {
+ read_lock_fences_enabled_ = read_lock_fences_enabled;
+ }
+
// Returns true when the VDA has adjusted the resolution of this Picture
// without requesting new PictureBuffers. GpuVideoDecoder should read this
// as a signal to update the size of the corresponding PicutreBuffer using
@@ -132,6 +134,7 @@ class MEDIA_EXPORT Picture {
gfx::Rect visible_rect_;
gfx::ColorSpace color_space_;
bool allow_overlay_;
+ bool read_lock_fences_enabled_;
bool size_changed_;
bool texture_owner_;
bool wants_promotion_hint_;
diff --git a/chromium/net/dns/fuzzed_host_resolver.cc b/chromium/net/dns/fuzzed_host_resolver.cc
index 7b4c0cf220f..de69a9aae7d 100644
--- a/chromium/net/dns/fuzzed_host_resolver.cc
+++ b/chromium/net/dns/fuzzed_host_resolver.cc
@@ -32,7 +32,6 @@
#include "net/dns/mdns_client.h"
#include "net/log/net_log_with_source.h"
#include "net/socket/datagram_server_socket.h"
-#include "net/socket/fuzzed_datagram_client_socket.h"
namespace net {
@@ -283,18 +282,11 @@ class FuzzedMdnsSocketFactory : public MDnsSocketFactory {
explicit FuzzedMdnsSocketFactory(base::FuzzedDataProvider* data_provider)
: data_provider_(data_provider) {}
- void CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) override {
- // TODO(qingsi): Fuzz with 0 to 4 socket pairs after HostResolverImp can
- // handle the false return from MDnsConnection::Init with zero socket pair.
- int num_socket_pairs = data_provider_->ConsumeIntegralInRange(1, 4);
- for (int i = 0; i < num_socket_pairs; ++i) {
- auto send_socket =
- std::make_unique<FuzzedDatagramClientSocket>(data_provider_);
- auto recv_socket = std::make_unique<FuzzedMdnsSocket>(data_provider_);
- socket_pairs->push_back(
- std::make_pair(std::move(send_socket), std::move(recv_socket)));
- }
+ void CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override {
+ int num_sockets = data_provider_->ConsumeIntegralInRange(1, 4);
+ for (int i = 0; i < num_sockets; ++i)
+ sockets->push_back(std::make_unique<FuzzedMdnsSocket>(data_provider_));
}
private:
diff --git a/chromium/net/dns/mdns_client.cc b/chromium/net/dns/mdns_client.cc
index d1be032a5d3..7b1787485cd 100644
--- a/chromium/net/dns/mdns_client.cc
+++ b/chromium/net/dns/mdns_client.cc
@@ -4,8 +4,6 @@
#include "net/dns/mdns_client.h"
-#include <utility>
-
#include "net/base/address_family.h"
#include "net/base/net_errors.h"
#include "net/base/network_interfaces.h"
@@ -18,22 +16,13 @@ namespace net {
namespace {
-int BindSendSocket(AddressFamily address_family,
- uint32_t interface_index,
- DatagramClientSocket* socket) {
- int rv = socket->SetMulticastInterface(interface_index);
- DCHECK_EQ(OK, rv);
- return socket->Connect(dns_util::GetMdnsGroupEndPoint(address_family));
-}
-
-int BindRecvSocket(AddressFamily address_family,
- uint32_t interface_index,
- DatagramServerSocket* socket) {
+int Bind(AddressFamily address_family,
+ uint32_t interface_index,
+ DatagramServerSocket* socket) {
socket->AllowAddressSharingForMulticast();
- int rv = socket->SetMulticastInterface(interface_index);
- DCHECK_EQ(OK, rv);
+ socket->SetMulticastInterface(interface_index);
- rv = socket->Listen(dns_util::GetMdnsReceiveEndPoint(address_family));
+ int rv = socket->Listen(dns_util::GetMdnsReceiveEndPoint(address_family));
if (rv < OK)
return rv;
@@ -75,26 +64,20 @@ InterfaceIndexFamilyList GetMDnsInterfacesToBind() {
return interfaces;
}
-MDnsSendRecvSocketPair CreateAndBindMDnsSocketPair(AddressFamily address_family,
- uint32_t interface_index,
- NetLog* net_log) {
- auto send_socket = std::make_unique<UDPClientSocket>(
- DatagramSocket::RANDOM_BIND, net_log, NetLogSource());
- int rv = BindSendSocket(address_family, interface_index, send_socket.get());
- if (rv != OK) {
- VLOG(1) << "MDNS send socket bind failed, address_family=" << address_family
- << ", error=" << rv;
- return std::make_pair(nullptr, nullptr);
- }
+std::unique_ptr<DatagramServerSocket> CreateAndBindMDnsSocket(
+ AddressFamily address_family,
+ uint32_t interface_index,
+ NetLog* net_log) {
+ std::unique_ptr<DatagramServerSocket> socket(
+ new UDPServerSocket(net_log, NetLogSource()));
- auto recv_socket = std::make_unique<UDPServerSocket>(net_log, NetLogSource());
- rv = BindRecvSocket(address_family, interface_index, recv_socket.get());
+ int rv = Bind(address_family, interface_index, socket.get());
if (rv != OK) {
- VLOG(1) << "MDNS recv socket bind failed, address_family=" << address_family
+ socket.reset();
+ VLOG(1) << "MDNS bind failed, address_family=" << address_family
<< ", error=" << rv;
- return std::make_pair(nullptr, nullptr);
}
- return std::make_pair(std::move(send_socket), std::move(recv_socket));
+ return socket;
}
} // namespace net
diff --git a/chromium/net/dns/mdns_client.h b/chromium/net/dns/mdns_client.h
index 3cba46b4ea7..89011cc25b8 100644
--- a/chromium/net/dns/mdns_client.h
+++ b/chromium/net/dns/mdns_client.h
@@ -22,14 +22,9 @@
namespace net {
class DatagramServerSocket;
-class DatagramClientSocket;
class NetLog;
class RecordParsed;
-typedef std::pair<std::unique_ptr<DatagramClientSocket>,
- std::unique_ptr<DatagramServerSocket>>
- MDnsSendRecvSocketPair;
-
// Represents a one-time record lookup. A transaction takes one
// associated callback (see |MDnsClient::CreateTransaction|) and calls it
// whenever a matching record has been found, either from the cache or
@@ -145,8 +140,8 @@ class NET_EXPORT MDnsListener {
class NET_EXPORT MDnsSocketFactory {
public:
virtual ~MDnsSocketFactory() {}
- virtual void CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) = 0;
+ virtual void CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) = 0;
static std::unique_ptr<MDnsSocketFactory> CreateDefault();
};
@@ -186,19 +181,31 @@ class NET_EXPORT MDnsClient {
static std::unique_ptr<MDnsClient> CreateDefault();
};
+// Gets the endpoint for the multicast group a socket should join to receive
+// MDNS messages. Such sockets should also bind to the endpoint from
+// GetMDnsReceiveEndPoint().
+//
+// This is also the endpoint messages should be sent to to send MDNS messages.
+NET_EXPORT IPEndPoint GetMDnsGroupEndPoint(AddressFamily address_family);
+
+// Gets the endpoint sockets should be bound to to receive MDNS messages. Such
+// sockets should also join the multicast group from GetMDnsGroupEndPoint().
+NET_EXPORT IPEndPoint GetMDnsReceiveEndPoint(AddressFamily address_family);
+
typedef std::vector<std::pair<uint32_t, AddressFamily>>
InterfaceIndexFamilyList;
// Returns pairs of interface and address family to bind. Current
// implementation returns unique list of all available interfaces.
NET_EXPORT InterfaceIndexFamilyList GetMDnsInterfacesToBind();
-// Creates a pair of sockets for sending and receiving, binds them to mDNS
-// endpoints, and sets their multicast interfaces and joins the multicast group
-// on for |interface_index|. Returns NULL if failed.
-NET_EXPORT MDnsSendRecvSocketPair
-CreateAndBindMDnsSocketPair(AddressFamily address_family,
- uint32_t interface_index,
- NetLog* net_log);
+// Create sockets, binds socket to MDns endpoint, and sets multicast interface
+// and joins multicast group on for |interface_index|.
+// Returns NULL if failed.
+NET_EXPORT std::unique_ptr<DatagramServerSocket> CreateAndBindMDnsSocket(
+ AddressFamily address_family,
+ uint32_t interface_index,
+ NetLog* net_log);
+
} // namespace net
#endif // NET_DNS_MDNS_CLIENT_H_
diff --git a/chromium/net/dns/mdns_client_impl.cc b/chromium/net/dns/mdns_client_impl.cc
index 967ca352968..65bd1b7a98c 100644
--- a/chromium/net/dns/mdns_client_impl.cc
+++ b/chromium/net/dns/mdns_client_impl.cc
@@ -39,75 +39,39 @@ namespace {
const double kListenerRefreshRatio1 = 0.85;
const double kListenerRefreshRatio2 = 0.95;
-constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation =
- net::DefineNetworkTrafficAnnotation("mdns_client", R"(
- semantics {
- sender: "mDNS Client"
- description:
- "mDNS client implements a multicast DNS querier as defined in RFC "
- "6762."
- trigger:
- "Any network request that may require mDNS resolution, including "
- "navigations and service discovery."
- data:
- "Domain name with the TLD .local that needs resolution."
- destination: OTHER
- destination_other:
- "The connection is made to the mDNS multicast group within the "
- "subnet where the user resides."
- }
- policy {
- cookies_allowed: NO
- setting:
- "No setting for this feature."
- policy_exception_justification:
- "This feature is enabled on most platforms and is core networking "
- "functionality on local networks."
- })");
-
} // namespace
-void MDnsSocketFactoryImpl::CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) {
+void MDnsSocketFactoryImpl::CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) {
InterfaceIndexFamilyList interfaces(GetMDnsInterfacesToBind());
for (size_t i = 0; i < interfaces.size(); ++i) {
DCHECK(interfaces[i].second == ADDRESS_FAMILY_IPV4 ||
interfaces[i].second == ADDRESS_FAMILY_IPV6);
- MDnsSendRecvSocketPair socket_pair(CreateAndBindMDnsSocketPair(
+ std::unique_ptr<DatagramServerSocket> socket(CreateAndBindMDnsSocket(
interfaces[i].second, interfaces[i].first, net_log_));
- const auto& send_socket = socket_pair.first;
- const auto& recv_socket = socket_pair.second;
- if (send_socket && recv_socket)
- socket_pairs->push_back(std::move(socket_pair));
+ if (socket)
+ sockets->push_back(std::move(socket));
}
}
-MDnsConnection::SocketHandler::SocketHandler(MDnsSendRecvSocketPair socket_pair,
- MDnsConnection* connection)
- : send_socket_(std::move(socket_pair.first)),
- recv_socket_(std::move(socket_pair.second)),
+MDnsConnection::SocketHandler::SocketHandler(
+ std::unique_ptr<DatagramServerSocket> socket,
+ MDnsConnection* connection)
+ : socket_(std::move(socket)),
connection_(connection),
response_(dns_protocol::kMaxMulticastSize),
- send_in_progress_(false) {
- DCHECK(send_socket_);
- DCHECK(recv_socket_);
-}
+ send_in_progress_(false) {}
MDnsConnection::SocketHandler::~SocketHandler() = default;
int MDnsConnection::SocketHandler::Start() {
IPEndPoint end_point;
- int rv = recv_socket_->GetLocalAddress(&end_point);
+ int rv = socket_->GetLocalAddress(&end_point);
if (rv != OK)
return rv;
- const AddressFamily af = end_point.GetFamily();
-#ifdef DEBUG
- DCHECK(af == net::ADDRESS_FAMILY_IPV4 || af == net::ADDRESS_FAMILY_IPV6);
- net::IPEndPoint send_socket_end_point;
- DCHECK(send_socket_->GetLocalAddress(&send_socket_end_point));
- DCHECK_EQ(af, send_socket_end_point.GetFamily());
-#endif
- multicast_addr_ = dns_util::GetMdnsGroupEndPoint(af);
+ DCHECK(end_point.GetFamily() == ADDRESS_FAMILY_IPV4 ||
+ end_point.GetFamily() == ADDRESS_FAMILY_IPV6);
+ multicast_addr_ = dns_util::GetMdnsGroupEndPoint(end_point.GetFamily());
return DoLoop(0);
}
@@ -116,7 +80,7 @@ int MDnsConnection::SocketHandler::DoLoop(int rv) {
if (rv > 0)
connection_->OnDatagramReceived(&response_, recv_addr_, rv);
- rv = recv_socket_->RecvFrom(
+ rv = socket_->RecvFrom(
response_.io_buffer(), response_.io_buffer_size(), &recv_addr_,
base::Bind(&MDnsConnection::SocketHandler::OnDatagramReceived,
base::Unretained(this)));
@@ -142,11 +106,11 @@ void MDnsConnection::SocketHandler::Send(const scoped_refptr<IOBuffer>& buffer,
send_queue_.push(std::make_pair(buffer, size));
return;
}
- int rv =
- send_socket_->Write(buffer.get(), size,
- base::Bind(&MDnsConnection::SocketHandler::SendDone,
- base::Unretained(this)),
- kTrafficAnnotation);
+ int rv = socket_->SendTo(buffer.get(),
+ size,
+ multicast_addr_,
+ base::Bind(&MDnsConnection::SocketHandler::SendDone,
+ base::Unretained(this)));
if (rv == ERR_IO_PENDING) {
send_in_progress_ = true;
} else if (rv < OK) {
@@ -173,12 +137,12 @@ MDnsConnection::MDnsConnection(MDnsConnection::Delegate* delegate)
MDnsConnection::~MDnsConnection() = default;
bool MDnsConnection::Init(MDnsSocketFactory* socket_factory) {
- std::vector<MDnsSendRecvSocketPair> socket_pairs;
- socket_factory->CreateSocketPairs(&socket_pairs);
+ std::vector<std::unique_ptr<DatagramServerSocket>> sockets;
+ socket_factory->CreateSockets(&sockets);
- for (auto& send_recv_sockets : socket_pairs) {
+ for (std::unique_ptr<DatagramServerSocket>& socket : sockets) {
socket_handlers_.push_back(std::make_unique<MDnsConnection::SocketHandler>(
- std::move(send_recv_sockets), this));
+ std::move(socket), this));
}
// All unbound sockets need to be bound before processing untrusted input.
diff --git a/chromium/net/dns/mdns_client_impl.h b/chromium/net/dns/mdns_client_impl.h
index 4a3ac889133..562719386cc 100644
--- a/chromium/net/dns/mdns_client_impl.h
+++ b/chromium/net/dns/mdns_client_impl.h
@@ -23,9 +23,7 @@
#include "net/base/net_export.h"
#include "net/dns/mdns_cache.h"
#include "net/dns/mdns_client.h"
-#include "net/socket/datagram_client_socket.h"
#include "net/socket/datagram_server_socket.h"
-#include "net/socket/udp_client_socket.h"
#include "net/socket/udp_server_socket.h"
#include "net/socket/udp_socket.h"
@@ -44,8 +42,8 @@ class MDnsSocketFactoryImpl : public MDnsSocketFactory {
explicit MDnsSocketFactoryImpl(NetLog* net_log) : net_log_(net_log) {}
~MDnsSocketFactoryImpl() override {}
- void CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) override;
+ void CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override;
private:
NetLog* const net_log_;
@@ -75,7 +73,7 @@ class NET_EXPORT_PRIVATE MDnsConnection {
private:
class SocketHandler {
public:
- SocketHandler(MDnsSendRecvSocketPair socket_pair,
+ SocketHandler(std::unique_ptr<DatagramServerSocket> socket,
MDnsConnection* connection);
~SocketHandler();
@@ -89,8 +87,7 @@ class NET_EXPORT_PRIVATE MDnsConnection {
// Callback for when sending a query has finished.
void SendDone(int rv);
- std::unique_ptr<DatagramClientSocket> send_socket_;
- std::unique_ptr<DatagramServerSocket> recv_socket_;
+ std::unique_ptr<DatagramServerSocket> socket_;
MDnsConnection* connection_;
IPEndPoint recv_addr_;
DnsResponse response_;
diff --git a/chromium/net/dns/mdns_client_unittest.cc b/chromium/net/dns/mdns_client_unittest.cc
index 0532ae0b828..f9ea4229d00 100644
--- a/chromium/net/dns/mdns_client_unittest.cc
+++ b/chromium/net/dns/mdns_client_unittest.cc
@@ -30,7 +30,6 @@
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
-using ::testing::DoAll;
using ::testing::Exactly;
using ::testing::IgnoreResult;
using ::testing::Invoke;
@@ -44,12 +43,6 @@ namespace net {
namespace {
-ACTION_TEMPLATE(MoveArgPointee,
- HAS_1_TEMPLATE_PARAMS(int, k),
- AND_1_VALUE_PARAMS(out)) {
- *out = std::move(*::testing::get<k>(args));
-};
-
const uint8_t kSamplePacket1[] = {
// Header
0x00, 0x00, // ID is zeroed out
@@ -1109,18 +1102,18 @@ TEST_F(MDnsTest, RefreshQuery) {
// This is a simplifying assumption based on the way the code works now.
class SimpleMockSocketFactory : public MDnsSocketFactory {
public:
- void CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) override {
- socket_pairs->clear();
- socket_pairs->swap(socket_pairs_);
+ void CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override {
+ sockets->clear();
+ sockets->swap(sockets_);
}
- void PushSocketPair(MDnsSendRecvSocketPair socket_pair) {
- socket_pairs_.push_back(std::move(socket_pair));
+ void PushSocket(std::unique_ptr<DatagramServerSocket> socket) {
+ sockets_.push_back(std::move(socket));
}
private:
- std::vector<MDnsSendRecvSocketPair> socket_pairs_;
+ std::vector<std::unique_ptr<DatagramServerSocket>> sockets_;
};
class MockMDnsConnectionDelegate : public MDnsConnection::Delegate {
@@ -1142,20 +1135,10 @@ class MDnsConnectionTest : public TestWithScopedTaskEnvironment {
protected:
// Follow successful connection initialization.
void SetUp() override {
- auto send_socket_ipv4 = std::make_unique<MockMDnsDatagramClientSocket>();
- auto recv_socket_ipv4 =
- std::make_unique<MockMDnsDatagramServerSocket>(ADDRESS_FAMILY_IPV4);
- auto send_socket_ipv6 = std::make_unique<MockMDnsDatagramClientSocket>();
- auto recv_socket_ipv6 =
- std::make_unique<MockMDnsDatagramServerSocket>(ADDRESS_FAMILY_IPV6);
- send_socket_ipv4_ = send_socket_ipv4.get();
- recv_socket_ipv4_ = recv_socket_ipv4.get();
- send_socket_ipv6_ = send_socket_ipv6.get();
- recv_socket_ipv6_ = recv_socket_ipv6.get();
- factory_.PushSocketPair(std::make_pair(std::move(send_socket_ipv4),
- std::move(recv_socket_ipv4)));
- factory_.PushSocketPair(std::make_pair(std::move(send_socket_ipv6),
- std::move(recv_socket_ipv6)));
+ socket_ipv4_ = new MockMDnsDatagramServerSocket(ADDRESS_FAMILY_IPV4);
+ socket_ipv6_ = new MockMDnsDatagramServerSocket(ADDRESS_FAMILY_IPV6);
+ factory_.PushSocket(base::WrapUnique(socket_ipv6_));
+ factory_.PushSocket(base::WrapUnique(socket_ipv4_));
sample_packet_ = MakeString(kSamplePacket1, sizeof(kSamplePacket1));
sample_buffer_ = base::MakeRefCounted<StringIOBuffer>(sample_packet_);
}
@@ -1166,10 +1149,8 @@ class MDnsConnectionTest : public TestWithScopedTaskEnvironment {
StrictMock<MockMDnsConnectionDelegate> delegate_;
- MockMDnsDatagramClientSocket* send_socket_ipv4_;
- MockMDnsDatagramServerSocket* recv_socket_ipv4_;
- MockMDnsDatagramClientSocket* send_socket_ipv6_;
- MockMDnsDatagramServerSocket* recv_socket_ipv6_;
+ MockMDnsDatagramServerSocket* socket_ipv4_;
+ MockMDnsDatagramServerSocket* socket_ipv6_;
SimpleMockSocketFactory factory_;
MDnsConnection connection_;
TestCompletionCallback callback_;
@@ -1178,12 +1159,12 @@ class MDnsConnectionTest : public TestWithScopedTaskEnvironment {
};
TEST_F(MDnsConnectionTest, ReceiveSynchronous) {
- recv_socket_ipv6_->SetResponsePacket(sample_packet_);
- EXPECT_CALL(*recv_socket_ipv4_, RecvFromInternal(_, _, _, _))
+ socket_ipv6_->SetResponsePacket(sample_packet_);
+ EXPECT_CALL(*socket_ipv4_, RecvFromInternal(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(*recv_socket_ipv6_, RecvFromInternal(_, _, _, _))
- .WillOnce(Invoke(recv_socket_ipv6_,
- &MockMDnsDatagramServerSocket::HandleRecvNow))
+ EXPECT_CALL(*socket_ipv6_, RecvFromInternal(_, _, _, _))
+ .WillOnce(
+ Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvNow))
.WillOnce(Return(ERR_IO_PENDING));
EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet_));
@@ -1191,14 +1172,14 @@ TEST_F(MDnsConnectionTest, ReceiveSynchronous) {
}
TEST_F(MDnsConnectionTest, ReceiveAsynchronous) {
- recv_socket_ipv6_->SetResponsePacket(sample_packet_);
+ socket_ipv6_->SetResponsePacket(sample_packet_);
- EXPECT_CALL(*recv_socket_ipv4_, RecvFromInternal(_, _, _, _))
+ EXPECT_CALL(*socket_ipv4_, RecvFromInternal(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(*recv_socket_ipv6_, RecvFromInternal(_, _, _, _))
+ EXPECT_CALL(*socket_ipv6_, RecvFromInternal(_, _, _, _))
.Times(2)
- .WillOnce(Invoke(recv_socket_ipv6_,
- &MockMDnsDatagramServerSocket::HandleRecvLater))
+ .WillOnce(
+ Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvLater))
.WillOnce(Return(ERR_IO_PENDING));
ASSERT_TRUE(InitConnection());
@@ -1209,17 +1190,17 @@ TEST_F(MDnsConnectionTest, ReceiveAsynchronous) {
}
TEST_F(MDnsConnectionTest, Error) {
- CompletionOnceCallback callback;
+ CompletionRepeatingCallback callback;
- EXPECT_CALL(*recv_socket_ipv4_, RecvFromInternal(_, _, _, _))
+ EXPECT_CALL(*socket_ipv4_, RecvFromInternal(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(*recv_socket_ipv6_, RecvFromInternal(_, _, _, _))
- .WillOnce(DoAll(MoveArgPointee<3>(&callback), Return(ERR_IO_PENDING)));
+ EXPECT_CALL(*socket_ipv6_, RecvFromInternal(_, _, _, _))
+ .WillOnce(DoAll(SaveArg<3>(&callback), Return(ERR_IO_PENDING)));
ASSERT_TRUE(InitConnection());
EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
- std::move(callback).Run(ERR_SOCKET_NOT_CONNECTED);
+ callback.Run(ERR_SOCKET_NOT_CONNECTED);
base::RunLoop().RunUntilIdle();
}
@@ -1227,24 +1208,28 @@ class MDnsConnectionSendTest : public MDnsConnectionTest {
protected:
void SetUp() override {
MDnsConnectionTest::SetUp();
- EXPECT_CALL(*recv_socket_ipv4_, RecvFromInternal(_, _, _, _))
+ EXPECT_CALL(*socket_ipv4_, RecvFromInternal(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
- EXPECT_CALL(*recv_socket_ipv6_, RecvFromInternal(_, _, _, _))
+ EXPECT_CALL(*socket_ipv6_, RecvFromInternal(_, _, _, _))
.WillOnce(Return(ERR_IO_PENDING));
EXPECT_TRUE(InitConnection());
}
};
TEST_F(MDnsConnectionSendTest, Send) {
- EXPECT_CALL(*send_socket_ipv4_, WriteInternal(sample_packet_, _, _));
- EXPECT_CALL(*send_socket_ipv6_, WriteInternal(sample_packet_, _, _));
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _));
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _));
connection_.Send(sample_buffer_, sample_packet_.size());
}
TEST_F(MDnsConnectionSendTest, SendError) {
- EXPECT_CALL(*send_socket_ipv4_, WriteInternal(sample_packet_, _, _));
- EXPECT_CALL(*send_socket_ipv6_, WriteInternal(sample_packet_, _, _))
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _));
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
.WillOnce(Return(ERR_SOCKET_NOT_CONNECTED));
connection_.Send(sample_buffer_, sample_packet_.size());
@@ -1254,37 +1239,38 @@ TEST_F(MDnsConnectionSendTest, SendError) {
TEST_F(MDnsConnectionSendTest, SendQueued) {
// Send data immediately.
- EXPECT_CALL(*send_socket_ipv4_, WriteInternal(sample_packet_, _, _))
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _))
.Times(2)
.WillRepeatedly(Return(OK));
- CompletionOnceCallback callback;
+ CompletionRepeatingCallback callback;
// Delay sending data. Only the first call should be made.
- EXPECT_CALL(*send_socket_ipv6_, WriteInternal(sample_packet_, _, _))
- .WillOnce(DoAll(MoveArgPointee<1>(&callback), Return(ERR_IO_PENDING)));
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
+ .WillOnce(DoAll(SaveArg<2>(&callback), Return(ERR_IO_PENDING)));
connection_.Send(sample_buffer_, sample_packet_.size());
connection_.Send(sample_buffer_, sample_packet_.size());
// The second IPv6 packet is not sent yet.
- EXPECT_CALL(*send_socket_ipv4_, WriteInternal(sample_packet_, _, _)).Times(0);
+ EXPECT_CALL(*socket_ipv4_,
+ SendToInternal(sample_packet_, "224.0.0.251:5353", _))
+ .Times(0);
// Expect call for the second IPv6 packet.
- EXPECT_CALL(*send_socket_ipv6_, WriteInternal(sample_packet_, _, _))
+ EXPECT_CALL(*socket_ipv6_,
+ SendToInternal(sample_packet_, "[ff02::fb]:5353", _))
.WillOnce(Return(OK));
- std::move(callback).Run(OK);
+ callback.Run(OK);
}
-TEST(MDnsSocketTest, CreateSocketPair) {
+TEST(MDnsSocketTest, CreateSocket) {
// Verifies that socket creation hasn't been broken.
NetLog net_log;
- MDnsSendRecvSocketPair socket_pair = CreateAndBindMDnsSocketPair(
- AddressFamily::ADDRESS_FAMILY_IPV4, 1, &net_log);
- const auto& send_socket = socket_pair.first;
- const auto& recv_socket = socket_pair.second;
- EXPECT_NE(nullptr, send_socket);
- EXPECT_NE(nullptr, recv_socket);
- send_socket->Close();
- recv_socket->Close();
+ auto socket =
+ CreateAndBindMDnsSocket(AddressFamily::ADDRESS_FAMILY_IPV4, 1, &net_log);
+ EXPECT_TRUE(socket);
+ socket->Close();
}
} // namespace net
diff --git a/chromium/net/dns/mock_mdns_socket_factory.cc b/chromium/net/dns/mock_mdns_socket_factory.cc
index bbdee07eb80..4946efe2666 100644
--- a/chromium/net/dns/mock_mdns_socket_factory.cc
+++ b/chromium/net/dns/mock_mdns_socket_factory.cc
@@ -13,8 +13,6 @@
#include "base/threading/thread_task_runner_handle.h"
#include "net/base/net_errors.h"
#include "net/dns/public/util.h"
-#include "net/socket/socket_tag.h"
-#include "net/traffic_annotation/network_traffic_annotation.h"
using testing::_;
using testing::Invoke;
@@ -33,14 +31,15 @@ int MockMDnsDatagramServerSocket::SendTo(IOBuffer* buf,
const IPEndPoint& address,
CompletionOnceCallback callback) {
return SendToInternal(std::string(buf->data(), buf_len), address.ToString(),
- &callback);
+ base::AdaptCallbackForRepeating(std::move(callback)));
}
int MockMDnsDatagramServerSocket::RecvFrom(IOBuffer* buffer,
int size,
IPEndPoint* address,
CompletionOnceCallback callback) {
- return RecvFromInternal(buffer, size, address, &callback);
+ return RecvFromInternal(buffer, size, address,
+ base::AdaptCallbackForRepeating(std::move(callback)));
}
int MockMDnsDatagramServerSocket::GetLocalAddress(IPEndPoint* address) const {
@@ -57,7 +56,7 @@ int MockMDnsDatagramServerSocket::HandleRecvNow(
IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback) {
+ CompletionRepeatingCallback callback) {
int size_returned =
std::min(response_packet_.size(), static_cast<size_t>(size));
memcpy(buffer->data(), response_packet_.data(), size_returned);
@@ -68,53 +67,38 @@ int MockMDnsDatagramServerSocket::HandleRecvLater(
IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback) {
+ CompletionRepeatingCallback callback) {
int rv = HandleRecvNow(buffer, size, address, callback);
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::BindOnce(std::move(*callback), rv));
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+ base::BindOnce(callback, rv));
return ERR_IO_PENDING;
}
-MockMDnsDatagramClientSocket::MockMDnsDatagramClientSocket() = default;
-
-MockMDnsDatagramClientSocket::~MockMDnsDatagramClientSocket() = default;
-
-int MockMDnsDatagramClientSocket::Write(
- IOBuffer* buf,
- int buf_len,
- CompletionOnceCallback callback,
- const NetworkTrafficAnnotationTag& traffic_annotation) {
- return WriteInternal(std::string(buf->data(), buf_len), &callback,
- traffic_annotation);
-}
-
MockMDnsSocketFactory::MockMDnsSocketFactory() = default;
MockMDnsSocketFactory::~MockMDnsSocketFactory() = default;
-void MockMDnsSocketFactory::CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) {
- CreateSocketPair(ADDRESS_FAMILY_IPV4, socket_pairs);
- CreateSocketPair(ADDRESS_FAMILY_IPV6, socket_pairs);
+void MockMDnsSocketFactory::CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) {
+ CreateSocket(ADDRESS_FAMILY_IPV4, sockets);
+ CreateSocket(ADDRESS_FAMILY_IPV6, sockets);
}
-void MockMDnsSocketFactory::CreateSocketPair(
+void MockMDnsSocketFactory::CreateSocket(
AddressFamily address_family,
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) {
- auto new_send_socket =
- std::make_unique<testing::NiceMock<MockMDnsDatagramClientSocket>>();
- auto new_recv_socket =
- std::make_unique<testing::NiceMock<MockMDnsDatagramServerSocket>>(
- address_family);
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) {
+ std::unique_ptr<testing::NiceMock<MockMDnsDatagramServerSocket>> new_socket(
+ new testing::NiceMock<MockMDnsDatagramServerSocket>(address_family));
- ON_CALL(*new_send_socket, WriteInternal(_, _, _))
- .WillByDefault(Invoke(this, &MockMDnsSocketFactory::WriteInternal));
+ ON_CALL(*new_socket, SendToInternal(_, _, _))
+ .WillByDefault(Invoke(
+ this,
+ &MockMDnsSocketFactory::SendToInternal));
- ON_CALL(*new_recv_socket, RecvFromInternal(_, _, _, _))
+ ON_CALL(*new_socket, RecvFromInternal(_, _, _, _))
.WillByDefault(Invoke(this, &MockMDnsSocketFactory::RecvFromInternal));
- socket_pairs->push_back(
- std::make_pair(std::move(new_send_socket), std::move(new_recv_socket)));
+ sockets->push_back(std::move(new_socket));
}
void MockMDnsSocketFactory::SimulateReceive(const uint8_t* packet, int size) {
@@ -126,20 +110,20 @@ void MockMDnsSocketFactory::SimulateReceive(const uint8_t* packet, int size) {
base::ResetAndReturn(&recv_callback_).Run(size);
}
-int MockMDnsSocketFactory::RecvFromInternal(IOBuffer* buffer,
- int size,
- IPEndPoint* address,
- CompletionOnceCallback* callback) {
+int MockMDnsSocketFactory::RecvFromInternal(
+ IOBuffer* buffer,
+ int size,
+ IPEndPoint* address,
+ CompletionRepeatingCallback callback) {
recv_buffer_ = buffer;
recv_buffer_size_ = size;
- recv_callback_ = std::move(*callback);
+ recv_callback_ = callback;
return ERR_IO_PENDING;
}
-int MockMDnsSocketFactory::WriteInternal(
- const std::string& packet,
- CompletionOnceCallback* callback,
- const NetworkTrafficAnnotationTag& traffic_annotation) {
+int MockMDnsSocketFactory::SendToInternal(const std::string& packet,
+ const std::string& address,
+ CompletionOnceCallback callback) {
OnSendTo(packet);
return packet.size();
}
diff --git a/chromium/net/dns/mock_mdns_socket_factory.h b/chromium/net/dns/mock_mdns_socket_factory.h
index 862058dec91..8f0d5b593a1 100644
--- a/chromium/net/dns/mock_mdns_socket_factory.h
+++ b/chromium/net/dns/mock_mdns_socket_factory.h
@@ -13,18 +13,13 @@
#include "net/base/completion_once_callback.h"
#include "net/base/completion_repeating_callback.h"
-#include "net/base/datagram_buffer.h"
-#include "net/base/network_change_notifier.h"
#include "net/dns/mdns_client_impl.h"
#include "net/log/net_log_with_source.h"
-#include "net/socket/datagram_client_socket.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace net {
class IPAddress;
-class SocketTag;
-struct NetworkTrafficAnnotationTag;
class MockMDnsDatagramServerSocket : public DatagramServerSocket {
public:
@@ -34,9 +29,8 @@ class MockMDnsDatagramServerSocket : public DatagramServerSocket {
// DatagramServerSocket implementation:
MOCK_METHOD1(Listen, int(const IPEndPoint& address));
- // GMock cannot handle move-only types like CompletionOnceCallback, so we use
- // delegate methods RecvFromInternal and SendToInternal below as the
- // respectively mocked methods for RecvFrom and SendTo.
+ // GMock cannot handle move-only types like CompletionOnceCallback, so it
+ // needs to be converted into the copyable type CompletionRepeatingCallback.
int RecvFrom(IOBuffer* buffer,
int size,
IPEndPoint* address,
@@ -46,7 +40,7 @@ class MockMDnsDatagramServerSocket : public DatagramServerSocket {
int(IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback));
+ CompletionRepeatingCallback callback));
int SendTo(IOBuffer* buf,
int buf_len,
@@ -56,7 +50,7 @@ class MockMDnsDatagramServerSocket : public DatagramServerSocket {
MOCK_METHOD3(SendToInternal,
int(const std::string& packet,
const std::string address,
- CompletionOnceCallback* callback));
+ CompletionRepeatingCallback callback));
MOCK_METHOD1(SetReceiveBufferSize, int(int32_t size));
MOCK_METHOD1(SetSendBufferSize, int(int32_t size));
@@ -93,108 +87,49 @@ class MockMDnsDatagramServerSocket : public DatagramServerSocket {
int HandleRecvNow(IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback);
+ CompletionRepeatingCallback callback);
int HandleRecvLater(IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback);
+ CompletionRepeatingCallback callback);
private:
std::string response_packet_;
IPEndPoint local_address_;
};
-class MockMDnsDatagramClientSocket : public DatagramClientSocket {
- public:
- MockMDnsDatagramClientSocket();
- ~MockMDnsDatagramClientSocket() override;
-
- // DatagramSocket implementation:
- MOCK_METHOD0(Close, void());
- MOCK_CONST_METHOD1(GetPeerAddress, int(IPEndPoint* address));
- MOCK_CONST_METHOD1(GetLocalAddress, int(IPEndPoint* address));
- MOCK_METHOD0(UseNonBlockingIO, void());
- MOCK_METHOD0(SetDoNotFragment, int());
- MOCK_METHOD1(SetMsgConfirm, void(bool confirm));
- MOCK_CONST_METHOD0(NetLog, const NetLogWithSource&());
-
- // Socket implementation:
- MOCK_METHOD3(Read, int(IOBuffer*, int, CompletionOnceCallback));
- MOCK_METHOD3(ReadIfReady, int(IOBuffer*, int, CompletionOnceCallback));
- MOCK_METHOD0(CancelReadIfReady, int());
- // GMock cannot handle move-only types like CompletionOnceCallback, so we use
- // a delegate method WriteInternal below as the mocked method for Write.
- int Write(IOBuffer* buf,
- int buf_len,
- CompletionOnceCallback callback,
- const NetworkTrafficAnnotationTag& traffic_annotation) override;
- MOCK_METHOD3(WriteInternal,
- int(const std::string,
- CompletionOnceCallback*,
- const NetworkTrafficAnnotationTag&));
- MOCK_METHOD1(SetReceiveBufferSize, int(int32_t));
- MOCK_METHOD1(SetSendBufferSize, int(int32_t));
-
- // DatagramClientSocket implementation:
- MOCK_METHOD1(Connect, int(const IPEndPoint& address));
- MOCK_METHOD2(ConnectUsingNetwork,
- int(NetworkChangeNotifier::NetworkHandle, const IPEndPoint&));
- MOCK_METHOD1(ConnectUsingDefaultNetwork, int(const IPEndPoint&));
-
- MOCK_CONST_METHOD0(GetBoundNetwork, NetworkChangeNotifier::NetworkHandle());
- MOCK_METHOD1(ApplySocketTag, void(const SocketTag&));
- MOCK_METHOD3(WriteAsync,
- int(DatagramBuffers,
- CompletionOnceCallback,
- const NetworkTrafficAnnotationTag&));
- MOCK_METHOD4(WriteAsync,
- int(const char*,
- size_t,
- CompletionOnceCallback,
- const NetworkTrafficAnnotationTag&));
- MOCK_METHOD0(GetUnwrittenBuffers, DatagramBuffers());
- MOCK_METHOD1(SetWriteAsyncEnabled, void(bool));
- MOCK_METHOD1(SetMaxPacketSize, void(size_t));
- MOCK_METHOD0(WriteAsyncEnabled, bool());
- MOCK_METHOD1(SetWriteMultiCoreEnabled, void(bool));
- MOCK_METHOD1(SetSendmmsgEnabled, void(bool));
- MOCK_METHOD1(SetWriteBatchingActive, void(bool));
- MOCK_METHOD1(SetMulticastInterface, int(uint32_t));
-};
-
class MockMDnsSocketFactory : public MDnsSocketFactory {
public:
MockMDnsSocketFactory();
~MockMDnsSocketFactory() override;
- void CreateSocketPairs(
- std::vector<MDnsSendRecvSocketPair>* socket_pairs) override;
+ void CreateSockets(
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override;
void SimulateReceive(const uint8_t* packet, int size);
MOCK_METHOD1(OnSendTo, void(const std::string&));
private:
- // The following two methods are the default implementations of
- // MockMDnsDatagramClientSocket::WriteInternal and
- // MockMDnsDatagramServerSocket::RecvFromInternal respectively.
- int WriteInternal(const std::string& packet,
- CompletionOnceCallback* callback,
- const NetworkTrafficAnnotationTag& traffic_annotation);
+ int SendToInternal(const std::string& packet,
+ const std::string& address,
+ CompletionOnceCallback callback);
+
// The latest receive callback is always saved, since the MDnsConnection
// does not care which socket a packet is received on.
int RecvFromInternal(IOBuffer* buffer,
int size,
IPEndPoint* address,
- CompletionOnceCallback* callback);
+ CompletionRepeatingCallback callback);
- void CreateSocketPair(AddressFamily address_family,
- std::vector<MDnsSendRecvSocketPair>* socket_pairs);
+ void CreateSocket(
+ AddressFamily address_family,
+ std::vector<std::unique_ptr<DatagramServerSocket>>* sockets);
scoped_refptr<IOBuffer> recv_buffer_;
int recv_buffer_size_;
- CompletionOnceCallback recv_callback_;
+ CompletionRepeatingCallback recv_callback_;
};
} // namespace net
diff --git a/chromium/net/dns/public/util.cc b/chromium/net/dns/public/util.cc
index ef40bc4db2d..69c911f57de 100644
--- a/chromium/net/dns/public/util.cc
+++ b/chromium/net/dns/public/util.cc
@@ -70,7 +70,12 @@ IPEndPoint GetMdnsGroupEndPoint(AddressFamily address_family) {
}
IPEndPoint GetMdnsReceiveEndPoint(AddressFamily address_family) {
-#if defined(OS_WIN) || defined(OS_FUCHSIA)
+// TODO(qingsi): MacOS should follow other POSIX platforms in the else-branch
+// after addressing crbug.com/899310. We have encountered a conflicting issue on
+// CrOS as described in crbug.com/931916, and the following is a temporary
+// mitigation to reconcile the two issues. Remove this after closing
+// crbug.com/899310.
+#if defined(OS_WIN) || defined(OS_FUCHSIA) || defined(OS_MACOSX)
// With Windows, binding to a mulitcast group address is not allowed.
// Multicast messages will be received appropriate to the multicast groups the
// socket has joined. Sockets intending to receive multicast messages should
@@ -86,12 +91,12 @@ IPEndPoint GetMdnsReceiveEndPoint(AddressFamily address_family) {
NOTREACHED();
return IPEndPoint();
}
-#else // !(defined(OS_WIN) || defined(OS_FUCHSIA))
+#else // !(defined(OS_WIN) || defined(OS_FUCHSIA)) || defined(OS_MACOSX)
// With POSIX, any socket can receive messages for multicast groups joined by
// any socket on the system. Sockets intending to receive messages for a
// specific multicast group should bind to that group address.
return GetMdnsGroupEndPoint(address_family);
-#endif // !(defined(OS_WIN) || defined(OS_FUCHSIA))
+#endif // !(defined(OS_WIN) || defined(OS_FUCHSIA)) || defined(OS_MACOSX)
}
} // namespace dns_util
diff --git a/chromium/net/dns/public/util.h b/chromium/net/dns/public/util.h
index f600d5b27c5..26b0aaa1ef5 100644
--- a/chromium/net/dns/public/util.h
+++ b/chromium/net/dns/public/util.h
@@ -25,13 +25,13 @@ NET_EXPORT bool IsValidDoHTemplate(const std::string& server_template,
// Gets the endpoint for the multicast group a socket should join to receive
// MDNS messages. Such sockets should also bind to the endpoint from
-// GetMdnsReceiveEndPoint().
+// GetMDnsReceiveEndPoint().
//
// This is also the endpoint messages should be sent to to send MDNS messages.
NET_EXPORT IPEndPoint GetMdnsGroupEndPoint(AddressFamily address_family);
// Gets the endpoint sockets should be bound to to receive MDNS messages. Such
-// sockets should also join the multicast group from GetMdnsGroupEndPoint().
+// sockets should also join the multicast group from GetMDnsGroupEndPoint().
NET_EXPORT IPEndPoint GetMdnsReceiveEndPoint(AddressFamily address_family);
} // namespace dns_util
diff --git a/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
index 55394a791a5..68ce32a136c 100644
--- a/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+++ b/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
@@ -34,12 +34,14 @@
#if !defined(OS_NACL_NONSFI)
#include <sys/ioctl.h>
#include <sys/ptrace.h>
-#if !defined(PTRACE_GET_THREAD_AREA) && defined(OS_LINUX) && \
- !defined(OS_CHROMEOS)
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(__arm__) && \
+ !defined(__aarch64__) && !defined(PTRACE_GET_THREAD_AREA)
// Also include asm/ptrace-abi.h since ptrace.h in older libc (for instance
// the one in Ubuntu 16.04 LTS) is missing PTRACE_GET_THREAD_AREA.
+// asm/ptrace-abi.h doesn't exist on arm32 and PTRACE_GET_THREAD_AREA isn't
+// defined on aarch64, so don't try to include this on those platforms.
#include <asm/ptrace-abi.h>
-#endif // !PTRACE_GET_THREAD_AREA && OS_LINUX && !OS_CHROMEOS
+#endif
#endif // !OS_NACL_NONSFI
#if defined(OS_ANDROID)
diff --git a/chromium/services/media_session/media_controller.cc b/chromium/services/media_session/media_controller.cc
index 4d48b5992f4..19afe2c0dc1 100644
--- a/chromium/services/media_session/media_controller.cc
+++ b/chromium/services/media_session/media_controller.cc
@@ -49,13 +49,11 @@ void MediaController::ToggleSuspendResume() {
}
}
-void MediaController::AddObserver(mojom::MediaSessionObserverPtr observer) {
+void MediaController::AddObserver(mojom::MediaControllerObserverPtr observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- // Flush the new observer with the state. We always flush the metadata as that
- // is optional so null is a valid value whereas the session info is required.
- if (!session_info_.is_null())
- observer->MediaSessionInfoChanged(session_info_.Clone());
+ // Flush the new observer with the current state.
+ observer->MediaSessionInfoChanged(session_info_.Clone());
observer->MediaSessionMetadataChanged(session_metadata_);
observer->MediaSessionActionsChanged(session_actions_);
@@ -65,7 +63,7 @@ void MediaController::AddObserver(mojom::MediaSessionObserverPtr observer) {
void MediaController::MediaSessionInfoChanged(mojom::MediaSessionInfoPtr info) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- observers_.ForAllPtrs([&info](mojom::MediaSessionObserver* observer) {
+ observers_.ForAllPtrs([&info](mojom::MediaControllerObserver* observer) {
observer->MediaSessionInfoChanged(info.Clone());
});
@@ -76,7 +74,7 @@ void MediaController::MediaSessionMetadataChanged(
const base::Optional<MediaMetadata>& metadata) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- observers_.ForAllPtrs([&metadata](mojom::MediaSessionObserver* observer) {
+ observers_.ForAllPtrs([&metadata](mojom::MediaControllerObserver* observer) {
observer->MediaSessionMetadataChanged(metadata);
});
@@ -87,7 +85,7 @@ void MediaController::MediaSessionActionsChanged(
const std::vector<mojom::MediaSessionAction>& actions) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- observers_.ForAllPtrs([&actions](mojom::MediaSessionObserver* observer) {
+ observers_.ForAllPtrs([&actions](mojom::MediaControllerObserver* observer) {
observer->MediaSessionActionsChanged(actions);
});
@@ -131,6 +129,15 @@ bool MediaController::SetMediaSession(mojom::MediaSession* session) {
mojom::MediaSessionObserverPtr observer;
session_binding_.Bind(mojo::MakeRequest(&observer));
session->AddObserver(std::move(observer));
+ } else {
+ // If we are no longer bound to a session we should flush the observers
+ // with empty data.
+ observers_.ForAllPtrs([](mojom::MediaControllerObserver* observer) {
+ observer->MediaSessionInfoChanged(nullptr);
+ observer->MediaSessionMetadataChanged(base::nullopt);
+ observer->MediaSessionActionsChanged(
+ std::vector<mojom::MediaSessionAction>());
+ });
}
}
diff --git a/chromium/services/media_session/media_controller.h b/chromium/services/media_session/media_controller.h
index 0cf05d70631..7cb0b0ec745 100644
--- a/chromium/services/media_session/media_controller.h
+++ b/chromium/services/media_session/media_controller.h
@@ -33,7 +33,7 @@ class MediaController : public mojom::MediaController,
void Resume() override;
void Stop() override;
void ToggleSuspendResume() override;
- void AddObserver(mojom::MediaSessionObserverPtr observer) override;
+ void AddObserver(mojom::MediaControllerObserverPtr observer) override;
void PreviousTrack() override;
void NextTrack() override;
void Seek(base::TimeDelta seek_time) override;
@@ -70,8 +70,8 @@ class MediaController : public mojom::MediaController,
// the underlying MediaSession.
mojom::MediaSession* session_ = nullptr;
- // Observers that are observing |session_|.
- mojo::InterfacePtrSet<mojom::MediaSessionObserver> observers_;
+ // Observers that are observing |this|.
+ mojo::InterfacePtrSet<mojom::MediaControllerObserver> observers_;
// Binding for |this| to act as an observer to |session_|.
mojo::Binding<mojom::MediaSessionObserver> session_binding_{this};
diff --git a/chromium/services/media_session/media_controller_unittest.cc b/chromium/services/media_session/media_controller_unittest.cc
index 16a15db88b3..9e2f0d28225 100644
--- a/chromium/services/media_session/media_controller_unittest.cc
+++ b/chromium/services/media_session/media_controller_unittest.cc
@@ -16,6 +16,7 @@
#include "services/media_session/media_session_service.h"
#include "services/media_session/public/cpp/media_metadata.h"
#include "services/media_session/public/cpp/test/mock_media_session.h"
+#include "services/media_session/public/cpp/test/test_media_controller.h"
#include "services/media_session/public/mojom/constants.mojom.h"
#include "services/service_manager/public/cpp/test/test_connector_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -416,18 +417,18 @@ TEST_F(MediaControllerTest, ActiveController_Observer_StateTransition) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
observer.WaitForState(mojom::MediaSessionInfo::SessionState::kActive);
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
controller()->Suspend();
observer.WaitForState(mojom::MediaSessionInfo::SessionState::kSuspended);
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
RequestAudioFocus(media_session_2, mojom::AudioFocusType::kGain);
observer.WaitForState(mojom::MediaSessionInfo::SessionState::kActive);
}
@@ -439,7 +440,7 @@ TEST_F(MediaControllerTest, ActiveController_Observer_StateTransition) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
observer.WaitForState(mojom::MediaSessionInfo::SessionState::kActive);
}
}
@@ -523,8 +524,8 @@ TEST_F(MediaControllerTest, ActiveController_Metadata_Observer_Abandoned) {
media_session.AbandonAudioFocusFromClient();
{
- test::MockMediaSessionMojoObserver observer(controller());
- EXPECT_FALSE(observer.WaitForMetadata());
+ test::TestMediaControllerObserver observer(controller());
+ observer.WaitForEmptyMetadata();
}
}
@@ -541,9 +542,9 @@ TEST_F(MediaControllerTest, ActiveController_Metadata_Observer_Empty) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
media_session.SimulateMetadataChanged(test_metadata);
- EXPECT_EQ(test_metadata, observer.WaitForMetadata());
+ observer.WaitForEmptyMetadata();
}
}
@@ -565,9 +566,10 @@ TEST_F(MediaControllerTest, ActiveController_Metadata_Observer_WithInfo) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
media_session.SimulateMetadataChanged(test_metadata);
- EXPECT_EQ(metadata, observer.WaitForNonEmptyMetadata());
+ observer.WaitForNonEmptyMetadata();
+ EXPECT_EQ(metadata, observer.session_metadata());
}
}
@@ -586,8 +588,8 @@ TEST_F(MediaControllerTest, ActiveController_Metadata_AddObserver_Empty) {
media_session.SimulateMetadataChanged(test_metadata);
{
- test::MockMediaSessionMojoObserver observer(controller());
- EXPECT_EQ(test_metadata, observer.WaitForMetadata());
+ test::TestMediaControllerObserver observer(controller());
+ observer.WaitForEmptyMetadata();
}
}
@@ -611,8 +613,9 @@ TEST_F(MediaControllerTest, ActiveController_Metadata_AddObserver_WithInfo) {
media_session.SimulateMetadataChanged(test_metadata);
{
- test::MockMediaSessionMojoObserver observer(controller());
- EXPECT_EQ(metadata, *observer.WaitForMetadata());
+ test::TestMediaControllerObserver observer(controller());
+ observer.WaitForNonEmptyMetadata();
+ EXPECT_EQ(metadata, observer.session_metadata());
}
}
@@ -740,7 +743,7 @@ TEST_F(MediaControllerTest, ActiveController_Actions_AddObserver_Empty) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
observer.WaitForActions();
EXPECT_TRUE(observer.actions().empty());
}
@@ -759,7 +762,7 @@ TEST_F(MediaControllerTest, ActiveController_Actions_AddObserver_WithInfo) {
media_session.EnableAction(mojom::MediaSessionAction::kPlay);
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
observer.WaitForActions();
EXPECT_EQ(1u, observer.actions().size());
@@ -779,9 +782,7 @@ TEST_F(MediaControllerTest, ActiveController_Actions_Observer_Empty) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
- observer.WaitForActions();
-
+ test::TestMediaControllerObserver observer(controller());
media_session.DisableAction(mojom::MediaSessionAction::kPlay);
observer.WaitForActions();
@@ -800,9 +801,7 @@ TEST_F(MediaControllerTest, ActiveController_Actions_Observer_WithInfo) {
}
{
- test::MockMediaSessionMojoObserver observer(controller());
- observer.WaitForActions();
-
+ test::TestMediaControllerObserver observer(controller());
media_session.EnableAction(mojom::MediaSessionAction::kPlay);
observer.WaitForActions();
@@ -825,7 +824,54 @@ TEST_F(MediaControllerTest, ActiveController_Actions_Observer_Abandoned) {
media_session.AbandonAudioFocusFromClient();
{
- test::MockMediaSessionMojoObserver observer(controller());
+ test::TestMediaControllerObserver observer(controller());
+ observer.WaitForActions();
+ EXPECT_TRUE(observer.actions().empty());
+ }
+}
+
+TEST_F(MediaControllerTest, ActiveController_Observer_Abandoned) {
+ test::MockMediaSession media_session;
+ media_session.SetIsControllable(true);
+
+ {
+ test::MockMediaSessionMojoObserver observer(media_session);
+ RequestAudioFocus(media_session, mojom::AudioFocusType::kGain);
+ observer.WaitForState(mojom::MediaSessionInfo::SessionState::kActive);
+ }
+
+ {
+ test::TestMediaControllerObserver observer(controller());
+ media_session.AbandonAudioFocusFromClient();
+
+ // We should see empty info, metadata and actions flushed since the active
+ // controller is no longer bound to a media session.
+ observer.WaitForEmptyInfo();
+ observer.WaitForEmptyMetadata();
+ observer.WaitForActions();
+ EXPECT_TRUE(observer.actions().empty());
+ }
+}
+
+TEST_F(MediaControllerTest, ActiveController_AddObserver_Abandoned) {
+ test::MockMediaSession media_session;
+ media_session.SetIsControllable(true);
+
+ {
+ test::MockMediaSessionMojoObserver observer(media_session);
+ RequestAudioFocus(media_session, mojom::AudioFocusType::kGain);
+ observer.WaitForState(mojom::MediaSessionInfo::SessionState::kActive);
+ }
+
+ media_session.AbandonAudioFocusFromClient();
+
+ {
+ test::TestMediaControllerObserver observer(controller());
+
+ // We should see empty info, metadata and actions since the active
+ // controller is no longer bound to a media session.
+ observer.WaitForEmptyInfo();
+ observer.WaitForEmptyMetadata();
observer.WaitForActions();
EXPECT_TRUE(observer.actions().empty());
}
diff --git a/chromium/services/media_session/public/cpp/media_metadata.cc b/chromium/services/media_session/public/cpp/media_metadata.cc
index 0d07d04e874..42ed11b67fd 100644
--- a/chromium/services/media_session/public/cpp/media_metadata.cc
+++ b/chromium/services/media_session/public/cpp/media_metadata.cc
@@ -36,4 +36,9 @@ bool MediaMetadata::operator!=(const MediaMetadata& other) const {
return !(*this == other);
}
+bool MediaMetadata::IsEmpty() const {
+ return title.empty() && artist.empty() && album.empty() &&
+ source_title.empty() && artwork.empty();
+}
+
} // namespace media_session
diff --git a/chromium/services/media_session/public/cpp/media_metadata.h b/chromium/services/media_session/public/cpp/media_metadata.h
index 6716521c684..f209927ceb6 100644
--- a/chromium/services/media_session/public/cpp/media_metadata.h
+++ b/chromium/services/media_session/public/cpp/media_metadata.h
@@ -80,6 +80,9 @@ struct COMPONENT_EXPORT(MEDIA_SESSION_CPP) MediaMetadata {
// session. This could be the name of the app or the name of the site playing
// media.
base::string16 source_title;
+
+ // Returns whether |this| contains no metadata.
+ bool IsEmpty() const;
};
} // namespace media_session
diff --git a/chromium/services/media_session/public/mojom/media_controller.mojom b/chromium/services/media_session/public/mojom/media_controller.mojom
index 07a854b3966..2aa9af7b738 100644
--- a/chromium/services/media_session/public/mojom/media_controller.mojom
+++ b/chromium/services/media_session/public/mojom/media_controller.mojom
@@ -40,7 +40,7 @@ interface MediaController {
// Adds an observer that will forward events from the active media session.
// If the active session changes then observers do not need to be readded.
// Adding the observer will update the observer with the latest state.
- AddObserver(MediaSessionObserver observer);
+ AddObserver(MediaControllerObserver observer);
// Skip to the previous track. If there is no previous track then this will be
// a no-op.
@@ -57,3 +57,22 @@ interface MediaController {
// few seconds.
Seek(mojo_base.mojom.TimeDelta seek_time);
};
+
+// The observer for observing media controller events. This is different to a
+// MediaSessionObserver because a media controller can have nullable session
+// info which will be null if it is not bound to a media session. This would
+// be invalid for a media session because it must always have some state.
+interface MediaControllerObserver {
+ // Called when the state of the bound media session changes. If |info| is
+ // empty then the controller is no longer bound to a media session.
+ MediaSessionInfoChanged(MediaSessionInfo? info);
+
+ // Called when the bound media session has changed metadata. If |metadata|
+ // is null then it can be reset, e.g. the media that ws being played has
+ // been stopped.
+ MediaSessionMetadataChanged(MediaMetadata? metadata);
+
+ // Called when the bound media session action list has changed. This tells
+ // the observer which actions can be used to control the session.
+ MediaSessionActionsChanged(array<MediaSessionAction> action);
+};
diff --git a/chromium/services/network/mdns_responder.cc b/chromium/services/network/mdns_responder.cc
index f1f8c0220bd..a3aadf776d4 100644
--- a/chromium/services/network/mdns_responder.cc
+++ b/chromium/services/network/mdns_responder.cc
@@ -29,9 +29,7 @@
#include "net/dns/public/util.h"
#include "net/dns/record_parsed.h"
#include "net/dns/record_rdata.h"
-#include "net/socket/datagram_client_socket.h"
#include "net/socket/datagram_server_socket.h"
-#include "net/socket/udp_client_socket.h"
#include "net/socket/udp_server_socket.h"
// TODO(qingsi): Several features to implement:
@@ -76,34 +74,6 @@ const uint8_t kMaxMdnsResponseRetries = 2;
// Maximum delay allowed for per-response rate-limited responses.
const base::TimeDelta kMaxScheduledDelay = base::TimeDelta::FromSeconds(10);
-constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation =
- net::DefineNetworkTrafficAnnotation("mdns_responder", R"(
- semantics {
- sender: "mDNS Responder"
- description:
- "mDNS responder implements a multicast DNS responder as defined in "
- "RFC 6762."
- trigger:
- "Any network request that may require name registration or "
- "deregistration, and also mDNS queries for name resolution from "
- "the local network."
- data:
- "DNS records of type A, AAAA or NSEC for name registration or "
- "resolution."
- destination: OTHER
- destination_other:
- "mDNS responses are sent to the mDNS multicast groups within the "
- "subnets where the user resides."
- }
- policy {
- cookies_allowed: NO
- setting:
- "No setting for this feature. Individual usages may have their own "
- "disabling flags."
- policy_exception_justification:
- "This is core networking functionality on local networks."
- })");
-
class RandomUuidNameGenerator
: public network::MdnsResponderManager::NameGenerator {
public:
@@ -282,12 +252,11 @@ scoped_refptr<net::IOBufferWithSize> CreateNegativeResponse(
class MdnsResponderManager::SocketHandler {
public:
SocketHandler(uint16_t id,
- net::MDnsSendRecvSocketPair socket_pair,
+ std::unique_ptr<net::DatagramServerSocket> socket,
MdnsResponderManager* responder_manager)
: id_(id),
scheduler_(std::make_unique<ResponseScheduler>(this)),
- send_socket_(std::move(socket_pair.first)),
- recv_socket_(std::move(socket_pair.second)),
+ socket_(std::move(socket)),
responder_manager_(responder_manager),
io_buffer_(base::MakeRefCounted<net::IOBufferWithSize>(
net::dns_protocol::kMaxUDPSize + 1)),
@@ -296,17 +265,14 @@ class MdnsResponderManager::SocketHandler {
int Start() {
net::IPEndPoint end_point;
- int rv = recv_socket_->GetLocalAddress(&end_point);
- if (rv != net::OK)
+ int rv = socket_->GetLocalAddress(&end_point);
+ if (rv != net::OK) {
return rv;
- const net::AddressFamily af = end_point.GetFamily();
-#ifdef DEBUG
- DCHECK(af == net::ADDRESS_FAMILY_IPV4 || af == net::ADDRESS_FAMILY_IPV6);
- net::IPEndPoint send_socket_end_point;
- DCHECK(send_socket_->GetLocalAddress(&send_socket_end_point));
- DCHECK_EQ(af, send_socket_end_point.GetFamily());
-#endif
- multicast_addr_ = net::dns_util::GetMdnsGroupEndPoint(af);
+ }
+ DCHECK(end_point.GetFamily() == net::ADDRESS_FAMILY_IPV4 ||
+ end_point.GetFamily() == net::ADDRESS_FAMILY_IPV6);
+ multicast_addr_ =
+ net::dns_util::GetMdnsGroupEndPoint(end_point.GetFamily());
int result = DoReadLoop();
if (result == net::ERR_IO_PENDING) {
// An in-progress read loop is considered a completed start.
@@ -338,9 +304,9 @@ class MdnsResponderManager::SocketHandler {
int result;
do {
// Using base::Unretained(this) is safe because the CompletionOnceCallback
- // is automatically cancelled when |recv_socket_| is destroyed, and the
- // latter is owned by |this|.
- result = recv_socket_->RecvFrom(
+ // is automatically cancelled when |socket_| is destroyed, and the latter
+ // is owned by |this|.
+ result = socket_->RecvFrom(
io_buffer_.get(), io_buffer_->size(), &recv_addr_,
base::BindOnce(&MdnsResponderManager::SocketHandler::OnRead,
base::Unretained(this)));
@@ -366,8 +332,7 @@ class MdnsResponderManager::SocketHandler {
uint16_t id_;
std::unique_ptr<ResponseScheduler> scheduler_;
- std::unique_ptr<net::DatagramClientSocket> send_socket_;
- std::unique_ptr<net::DatagramServerSocket> recv_socket_;
+ std::unique_ptr<net::DatagramServerSocket> socket_;
// A back pointer to the responder manager that owns this socket handler. The
// handler should be destroyed before |responder_manager_| becomes invalid or
// a weak reference should be used to access the manager when there is no such
@@ -521,11 +486,10 @@ void MdnsResponderManager::SocketHandler::DoSend(
scoped_refptr<MdnsResponseSendOption> option) {
auto* buf_data = buf.get();
size_t buf_size = buf->size();
- send_socket_->Write(buf_data, buf_size,
- base::BindOnce(&ResponseScheduler::OnResponseSent,
- scheduler_->GetWeakPtr(), std::move(buf),
- std::move(option)),
- kTrafficAnnotation);
+ socket_->SendTo(buf_data, buf_size, multicast_addr_,
+ base::BindOnce(&ResponseScheduler::OnResponseSent,
+ scheduler_->GetWeakPtr(), std::move(buf),
+ std::move(option)));
}
void MdnsResponderManager::SocketHandler::SetTickClockForTesting(
@@ -654,16 +618,16 @@ void MdnsResponderManager::Start() {
VLOG(1) << "Starting mDNS responder manager.";
DCHECK(start_result_ == SocketHandlerStartResult::UNSPECIFIED);
DCHECK(socket_handler_by_id_.empty());
- std::vector<net::MDnsSendRecvSocketPair> socket_pairs;
+ std::vector<std::unique_ptr<net::DatagramServerSocket>> sockets;
// Create and return only bound sockets.
- socket_factory_->CreateSocketPairs(&socket_pairs);
+ socket_factory_->CreateSockets(&sockets);
uint16_t next_available_id = 1;
- for (auto& send_recv_sockets : socket_pairs) {
+ for (std::unique_ptr<net::DatagramServerSocket>& socket : sockets) {
socket_handler_by_id_.emplace(
next_available_id,
std::make_unique<MdnsResponderManager::SocketHandler>(
- next_available_id, std::move(send_recv_sockets), this));
+ next_available_id, std::move(socket), this));
++next_available_id;
}
@@ -682,7 +646,7 @@ void MdnsResponderManager::Start() {
size_t num_started_socket_handlers = socket_handler_by_id_.size();
if (socket_handler_by_id_.empty()) {
start_result_ = SocketHandlerStartResult::ALL_FAILURE;
- LOG(ERROR) << "mDNS responder manager failed to start.";
+ LOG(ERROR) << "mDNS responder manager failed to started.";
return;
}
diff --git a/chromium/services/network/mdns_responder_unittest.cc b/chromium/services/network/mdns_responder_unittest.cc
index e324d07b333..f77370c54df 100644
--- a/chromium/services/network/mdns_responder_unittest.cc
+++ b/chromium/services/network/mdns_responder_unittest.cc
@@ -79,23 +79,22 @@ class MockFailingMdnsSocketFactory : public net::MDnsSocketFactory {
~MockFailingMdnsSocketFactory() override = default;
- MOCK_METHOD1(CreateSocketPairs,
- void(std::vector<net::MDnsSendRecvSocketPair>*));
+ MOCK_METHOD1(CreateSockets,
+ void(std::vector<std::unique_ptr<net::DatagramServerSocket>>*));
MOCK_METHOD1(OnSendTo, void(const std::string&));
// Emulates the asynchronous contract of invoking |callback| in the SendTo
// primitive but failed sending;
int FailToSend(const std::string& packet,
- net::CompletionOnceCallback* callback,
- const net::NetworkTrafficAnnotationTag& traffic_annotation) {
+ const std::string& address,
+ net::CompletionRepeatingCallback callback) {
OnSendTo(packet);
- task_runner_->PostTask(FROM_HERE,
- base::BindOnce(
- [](net::CompletionOnceCallback callback) {
- std::move(callback).Run(-1);
- },
- std::move(*callback)));
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ [](net::CompletionRepeatingCallback callback) { callback.Run(-1); },
+ callback));
return -1;
}
@@ -104,13 +103,12 @@ class MockFailingMdnsSocketFactory : public net::MDnsSocketFactory {
int FailToRecv(net::IOBuffer* buffer,
int size,
net::IPEndPoint* address,
- net::CompletionOnceCallback* callback) {
- task_runner_->PostTask(FROM_HERE,
- base::BindOnce(
- [](net::CompletionOnceCallback callback) {
- std::move(callback).Run(-1);
- },
- std::move(*callback)));
+ net::CompletionRepeatingCallback callback) {
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ [](net::CompletionRepeatingCallback callback) { callback.Run(-1); },
+ callback));
return -1;
}
@@ -613,7 +611,7 @@ TEST_F(MdnsResponderTest, ResponderHostDoesCleanUpAfterMojoConnectionError) {
// Test that the host generates a Mojo connection error when no socket handler
// is successfully started.
TEST_F(MdnsResponderTest, ClosesBindingWhenNoSocketHanlderStarted) {
- EXPECT_CALL(failing_socket_factory_, CreateSocketPairs(_)).WillOnce(Return());
+ EXPECT_CALL(failing_socket_factory_, CreateSockets(_)).WillOnce(Return());
Reset(true /* use_failing_socket_factory */);
RunUntilNoTasksRemain();
// MdnsResponderTest::OnMojoConnectionError.
@@ -624,30 +622,26 @@ TEST_F(MdnsResponderTest, ClosesBindingWhenNoSocketHanlderStarted) {
// Test that an announcement is retried after send failure.
TEST_F(MdnsResponderTest, AnnouncementRetriedAfterSendFailure) {
auto create_send_failing_socket =
- [this](std::vector<net::MDnsSendRecvSocketPair>* socket_pairs) {
- auto send_socket =
- std::make_unique<NiceMock<net::MockMDnsDatagramClientSocket>>();
-
- auto recv_socket =
+ [this](std::vector<std::unique_ptr<net::DatagramServerSocket>>* sockets) {
+ auto socket =
std::make_unique<NiceMock<net::MockMDnsDatagramServerSocket>>(
net::ADDRESS_FAMILY_IPV4);
- ON_CALL(*send_socket, WriteInternal(_, _, _))
+ ON_CALL(*socket, SendToInternal(_, _, _))
.WillByDefault(Invoke(&failing_socket_factory_,
&MockFailingMdnsSocketFactory::FailToSend));
- ON_CALL(*recv_socket, RecvFromInternal(_, _, _, _))
+ ON_CALL(*socket, RecvFromInternal(_, _, _, _))
.WillByDefault(Return(-1));
- socket_pairs->push_back(
- std::make_pair(std::move(send_socket), std::move(recv_socket)));
+ sockets->push_back(std::move(socket));
};
- EXPECT_CALL(failing_socket_factory_, CreateSocketPairs(_))
+ EXPECT_CALL(failing_socket_factory_, CreateSockets(_))
.WillOnce(Invoke(create_send_failing_socket));
Reset(true /* use_failing_socket_factory */);
const auto& addr = kPublicAddrs[0];
std::string expected_announcement =
CreateResolutionResponse(kDefaultTtl, {{"0.local", addr}});
- // Mocked CreateSocketPairs above only creates one pair of sockets.
+ // Mocked CreateSockets above only creates one socket.
EXPECT_CALL(failing_socket_factory_, OnSendTo(expected_announcement))
.Times(kNumAnnouncementsPerInterface + kNumMaxRetriesPerResponse);
const auto name = CreateNameForAddress(0, addr);
@@ -973,25 +967,22 @@ TEST_F(MdnsResponderTest, ScheduledSendsAreCancelledAfterManagerDestroyed) {
// Test that if all socket handlers fail to read, the manager restarts itself.
TEST_F(MdnsResponderTest, ManagerCanRestartAfterAllSocketHandlersFailToRead) {
auto create_read_failing_socket =
- [this](std::vector<net::MDnsSendRecvSocketPair>* socket_pairs) {
- auto send_socket =
- std::make_unique<NiceMock<net::MockMDnsDatagramClientSocket>>();
- auto recv_socket =
+ [this](std::vector<std::unique_ptr<net::DatagramServerSocket>>* sockets) {
+ auto socket =
std::make_unique<NiceMock<net::MockMDnsDatagramServerSocket>>(
net::ADDRESS_FAMILY_IPV4);
- ON_CALL(*send_socket, WriteInternal(_, _, _)).WillByDefault(Return(0));
- ON_CALL(*recv_socket, RecvFromInternal(_, _, _, _))
+ ON_CALL(*socket, SendToInternal(_, _, _)).WillByDefault(Return(0));
+ ON_CALL(*socket, RecvFromInternal(_, _, _, _))
.WillByDefault(Invoke(&failing_socket_factory_,
&MockFailingMdnsSocketFactory::FailToRecv));
- socket_pairs->push_back(
- std::make_pair(std::move(send_socket), std::move(recv_socket)));
+ sockets->push_back(std::move(socket));
};
- EXPECT_CALL(failing_socket_factory_, CreateSocketPairs(_))
+ EXPECT_CALL(failing_socket_factory_, CreateSockets(_))
.WillOnce(Invoke(create_read_failing_socket));
Reset(true /* use_failing_socket_factory */);
- EXPECT_CALL(failing_socket_factory_, CreateSocketPairs(_)).Times(1);
+ EXPECT_CALL(failing_socket_factory_, CreateSockets(_)).Times(1);
RunUntilNoTasksRemain();
}
diff --git a/chromium/services/network/network_service.cc b/chromium/services/network/network_service.cc
index ffa129c237e..15cfd697779 100644
--- a/chromium/services/network/network_service.cc
+++ b/chromium/services/network/network_service.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/command_line.h"
+#include "base/environment.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
@@ -261,6 +262,9 @@ void NetworkService::Initialize(mojom::NetworkServiceParamsPtr params) {
CRYPTO_needs_hwcap2_workaround());
#endif
+ if (!params->environment.empty())
+ SetEnvironment(std::move(params->environment));
+
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
// Set-up the global port overrides.
@@ -323,7 +327,9 @@ NetworkService::~NetworkService() {
file_net_log_observer_->StopObserving(nullptr /*polled_data*/,
base::OnceClosure());
}
- trace_net_log_observer_.StopWatchForTraceStart();
+
+ if (initialized_)
+ trace_net_log_observer_.StopWatchForTraceStart();
}
void NetworkService::set_os_crypt_is_configured() {
@@ -644,6 +650,13 @@ void NetworkService::OnApplicationStateChange(
}
#endif
+void NetworkService::SetEnvironment(
+ std::vector<mojom::EnvironmentVariablePtr> environment) {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ for (const auto& variable : environment)
+ env->SetVar(variable->name, variable->value);
+}
+
net::HttpAuthHandlerFactory* NetworkService::GetHttpAuthHandlerFactory() {
if (!http_auth_handler_factory_) {
http_auth_handler_factory_ = net::HttpAuthHandlerFactory::CreateDefault(
@@ -692,8 +705,10 @@ void NetworkService::DestroyNetworkContexts() {
// The SetDnsConfigOverrides() call will will fail any in-progress DNS
// lookups, but only if there are current config overrides (which there will
// be if DNS over HTTPS is currently enabled).
- host_resolver_->SetDnsConfigOverrides(net::DnsConfigOverrides());
- host_resolver_->SetRequestContext(nullptr);
+ if (host_resolver_) {
+ host_resolver_->SetDnsConfigOverrides(net::DnsConfigOverrides());
+ host_resolver_->SetRequestContext(nullptr);
+ }
DCHECK_LE(owned_network_contexts_.size(), 1u);
owned_network_contexts_.clear();
diff --git a/chromium/services/network/network_service.h b/chromium/services/network/network_service.h
index a04970001c2..b92827ce610 100644
--- a/chromium/services/network/network_service.h
+++ b/chromium/services/network/network_service.h
@@ -199,6 +199,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
#if defined(OS_ANDROID)
void OnApplicationStateChange(base::android::ApplicationState state) override;
#endif
+ void SetEnvironment(
+ std::vector<mojom::EnvironmentVariablePtr> environment) override;
// Returns the shared HttpAuthHandlerFactory for the NetworkService, creating
// one if needed.
diff --git a/chromium/services/network/public/mojom/network_service.mojom b/chromium/services/network/public/mojom/network_service.mojom
index a025436d949..ccccb45b34b 100644
--- a/chromium/services/network/public/mojom/network_service.mojom
+++ b/chromium/services/network/public/mojom/network_service.mojom
@@ -235,10 +235,20 @@ struct CryptConfig {
mojo_base.mojom.FilePath user_data_path;
};
+// Represents the value of a single environment variable.
+struct EnvironmentVariable {
+ string name;
+ string value;
+};
+
// Parameters needed to initialize the network service.
struct NetworkServiceParams {
ConnectionType initial_connection_type = CONNECTION_UNKNOWN;
ConnectionSubtype initial_connection_subtype = SUBTYPE_UNKNOWN;
+
+ // A set of environment variables that should be set in the network
+ // service when starting up.
+ array<EnvironmentVariable> environment;
};
// Browser interface to the network service.
@@ -381,4 +391,9 @@ interface NetworkService {
// Called on state changes of the Android application.
[EnableIf=is_android]
OnApplicationStateChange(mojo_base.mojom.ApplicationState state);
+
+ // Sets the given environment variables in the network service's process.
+ // This method won't modify variables that aren't present in the
+ // |environment| array.
+ SetEnvironment(array<EnvironmentVariable> environment);
};
diff --git a/chromium/services/tracing/public/cpp/traced_process_impl.cc b/chromium/services/tracing/public/cpp/traced_process_impl.cc
index e380d010dbc..7ae592a41fe 100644
--- a/chromium/services/tracing/public/cpp/traced_process_impl.cc
+++ b/chromium/services/tracing/public/cpp/traced_process_impl.cc
@@ -105,4 +105,10 @@ void TracedProcessImpl::ConnectToTracingService(
tracing::mojom::PerfettoServicePtr(std::move(request->perfetto_service)));
}
+void TracedProcessImpl::GetCategories(std::set<std::string>* category_set) {
+ for (auto* agent : agents_) {
+ agent->GetCategories(category_set);
+ }
+}
+
} // namespace tracing
diff --git a/chromium/services/tracing/public/cpp/traced_process_impl.h b/chromium/services/tracing/public/cpp/traced_process_impl.h
index 1522fdf9bf6..5d7a503a69b 100644
--- a/chromium/services/tracing/public/cpp/traced_process_impl.h
+++ b/chromium/services/tracing/public/cpp/traced_process_impl.h
@@ -35,6 +35,9 @@ class COMPONENT_EXPORT(TRACING_CPP) TracedProcessImpl
void RegisterAgent(BaseAgent* agent);
void UnregisterAgent(BaseAgent* agent);
+ // Populate categories from all of the registered agents.
+ void GetCategories(std::set<std::string>* category_set);
+
private:
friend class base::NoDestructor<TracedProcessImpl>;
TracedProcessImpl();
diff --git a/chromium/skia/ext/skia_commit_hash.h b/chromium/skia/ext/skia_commit_hash.h
index f430ab2e8d0..11a4c10bd82 100644
--- a/chromium/skia/ext/skia_commit_hash.h
+++ b/chromium/skia/ext/skia_commit_hash.h
@@ -3,6 +3,6 @@
#ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_
#define SKIA_EXT_SKIA_COMMIT_HASH_H_
-#define SKIA_COMMIT_HASH "84c5c846e543066678a8fd8391171fb730886852-"
+#define SKIA_COMMIT_HASH "636ee33902ddc27fd9683d250ceb23f65467488b-"
#endif // SKIA_EXT_SKIA_COMMIT_HASH_H_
diff --git a/chromium/testing/variations/fieldtrial_testing_config.json b/chromium/testing/variations/fieldtrial_testing_config.json
index 6d56ec0f533..80accc5ae53 100644
--- a/chromium/testing/variations/fieldtrial_testing_config.json
+++ b/chromium/testing/variations/fieldtrial_testing_config.json
@@ -2754,12 +2754,12 @@
],
"experiments": [
{
- "name": "EmailAppsThenEmailInterstitial",
+ "name": "AppsEmailThenNTPLaunched-002",
"params": {
- "new-user-modules": "nux-email,nux-google-apps,nux-set-as-default,signin-view",
- "onboarding-group": "EmailAppsThenEmailInterstitial-001",
+ "new-user-modules": "nux-google-apps,nux-email,nux-set-as-default,signin-view",
+ "onboarding-group": "AppsEmailThenNTPLaunchedSynthetic-002",
"returning-user-modules": "nux-set-as-default",
- "show-email-interstitial": "true"
+ "show-email-interstitial": "false"
},
"enable_features": [
"NuxOnboarding"
diff --git a/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index 2ef7a11feae..8d6ec61bf2a 100644
--- a/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/chromium/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -156,6 +156,9 @@ void HTMLCanvasElement::Dispose() {
if (PlaceholderFrame())
ReleasePlaceholderFrame();
+ // We need to drop frame dispatcher, to prevent mojo calls from completing.
+ frame_dispatcher_ = nullptr;
+
if (context_) {
context_->DetachHost();
context_ = nullptr;
diff --git a/chromium/third_party/blink/renderer/core/layout/layout_block_flow.cc b/chromium/third_party/blink/renderer/core/layout/layout_block_flow.cc
index 6c5b8516a05..1568f9c8f06 100644
--- a/chromium/third_party/blink/renderer/core/layout/layout_block_flow.cc
+++ b/chromium/third_party/blink/renderer/core/layout/layout_block_flow.cc
@@ -55,6 +55,7 @@
#include "third_party/blink/renderer/core/layout/line/line_width.h"
#include "third_party/blink/renderer/core/layout/logical_values.h"
#include "third_party/blink/renderer/core/layout/ng/inline/ng_line_height_metrics.h"
+#include "third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h"
#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h"
#include "third_party/blink/renderer/core/layout/ng/legacy_layout_tree_walking.h"
#include "third_party/blink/renderer/core/layout/ng/ng_absolute_utils.h"
@@ -446,6 +447,9 @@ void LayoutBlockFlow::UpdateBlockLayout(bool relayout_children) {
if (RuntimeEnabledFeatures::TrackLayoutPassesPerBlockEnabled())
IncrementLayoutPassCount();
+ if (rare_data_)
+ ClearOffsetMapping();
+
if (!relayout_children && SimplifiedLayout())
return;
@@ -4943,4 +4947,37 @@ int LayoutBlockFlow::GetLayoutPassCountForTesting() {
return GetLayoutPassCountMap().find(this)->value;
}
+LayoutBlockFlow::LayoutBlockFlowRareData::LayoutBlockFlowRareData(
+ const LayoutBlockFlow* block)
+ : margins_(PositiveMarginBeforeDefault(block),
+ NegativeMarginBeforeDefault(block),
+ PositiveMarginAfterDefault(block),
+ NegativeMarginAfterDefault(block)),
+ break_before_(static_cast<unsigned>(EBreakBetween::kAuto)),
+ break_after_(static_cast<unsigned>(EBreakBetween::kAuto)),
+ line_break_to_avoid_widow_(-1),
+ did_break_at_line_to_avoid_widow_(false),
+ discard_margin_before_(false),
+ discard_margin_after_(false) {}
+
+LayoutBlockFlow::LayoutBlockFlowRareData::~LayoutBlockFlowRareData() = default;
+
+void LayoutBlockFlow::ClearOffsetMapping() {
+ DCHECK(!IsLayoutNGObject());
+ DCHECK(rare_data_);
+ rare_data_->offset_mapping_.reset();
+}
+
+const NGOffsetMapping* LayoutBlockFlow::GetOffsetMapping() const {
+ DCHECK(!IsLayoutNGObject());
+ return rare_data_ ? rare_data_->offset_mapping_.get() : nullptr;
+}
+
+void LayoutBlockFlow::SetOffsetMapping(
+ std::unique_ptr<NGOffsetMapping> offset_mapping) {
+ DCHECK(!IsLayoutNGObject());
+ DCHECK(offset_mapping);
+ EnsureRareData().offset_mapping_ = std::move(offset_mapping);
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/layout/layout_block_flow.h b/chromium/third_party/blink/renderer/core/layout/layout_block_flow.h
index 14a179e2e71..7ca9232b862 100644
--- a/chromium/third_party/blink/renderer/core/layout/layout_block_flow.h
+++ b/chromium/third_party/blink/renderer/core/layout/layout_block_flow.h
@@ -63,6 +63,7 @@ class NGBlockBreakToken;
class NGBreakToken;
class NGConstraintSpace;
class NGLayoutResult;
+class NGOffsetMapping;
class NGPaintFragment;
class NGPhysicalFragment;
@@ -769,18 +770,8 @@ class CORE_EXPORT LayoutBlockFlow : public LayoutBlock {
USING_FAST_MALLOC(LayoutBlockFlowRareData);
public:
- LayoutBlockFlowRareData(const LayoutBlockFlow* block)
- : margins_(PositiveMarginBeforeDefault(block),
- NegativeMarginBeforeDefault(block),
- PositiveMarginAfterDefault(block),
- NegativeMarginAfterDefault(block)),
- multi_column_flow_thread_(nullptr),
- break_before_(static_cast<unsigned>(EBreakBetween::kAuto)),
- break_after_(static_cast<unsigned>(EBreakBetween::kAuto)),
- line_break_to_avoid_widow_(-1),
- did_break_at_line_to_avoid_widow_(false),
- discard_margin_before_(false),
- discard_margin_after_(false) {}
+ explicit LayoutBlockFlowRareData(const LayoutBlockFlow* block);
+ ~LayoutBlockFlowRareData();
static LayoutUnit PositiveMarginBeforeDefault(
const LayoutBlockFlow* block) {
@@ -802,7 +793,13 @@ class CORE_EXPORT LayoutBlockFlow : public LayoutBlock {
LayoutUnit first_forced_break_offset_;
- LayoutMultiColumnFlowThread* multi_column_flow_thread_;
+ LayoutMultiColumnFlowThread* multi_column_flow_thread_ = nullptr;
+
+ // |offset_mapping_| is used only for legacy layout tree for caching offset
+ // mapping for |NGInlineNode::GetOffsetMapping()|.
+ // TODO(yosin): Once we have no legacy support, we should get rid of
+ // |offset_mapping_| here.
+ std::unique_ptr<NGOffsetMapping> offset_mapping_;
unsigned break_before_ : 4;
unsigned break_after_ : 4;
@@ -813,6 +810,10 @@ class CORE_EXPORT LayoutBlockFlow : public LayoutBlock {
DISALLOW_COPY_AND_ASSIGN(LayoutBlockFlowRareData);
};
+ void ClearOffsetMapping();
+ const NGOffsetMapping* GetOffsetMapping() const;
+ void SetOffsetMapping(std::unique_ptr<NGOffsetMapping>);
+
const FloatingObjects* GetFloatingObjects() const {
return floating_objects_.get();
}
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
index 4154e5f1c01..78a603324f6 100644
--- a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+++ b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -487,22 +487,20 @@ const NGOffsetMapping* NGInlineNode::GetOffsetMapping(
// If |layout_block_flow| is LayoutNG, compute from |NGInlineNode|.
if (layout_block_flow->IsLayoutNGMixin()) {
NGInlineNode node(layout_block_flow);
- if (node.IsPrepareLayoutFinished())
- return node.ComputeOffsetMappingIfNeeded();
-
- // When this is not laid out yet, compute each time it is requested.
- // TODO(kojii): We could still keep the result for later uses but it would
- // add more states. Reconsider if this turned out to be needed.
+ CHECK(node.IsPrepareLayoutFinished());
+ return node.ComputeOffsetMappingIfNeeded();
}
- // If this is not LayoutNG, compute the offset mapping and store in |storage|.
- // The caller is responsible to keep |storage| for the life cycle.
+ // If this is not LayoutNG, compute the offset mapping and store into
+ // |LayoutBlockFlowRateData|.
+ if (const NGOffsetMapping* mapping = layout_block_flow->GetOffsetMapping())
+ return mapping;
DCHECK(storage);
NGInlineNodeData data;
ComputeOffsetMapping(layout_block_flow, &data);
- *storage = std::move(data.offset_mapping);
- DCHECK(*storage);
- return storage->get();
+ NGOffsetMapping* const mapping = data.offset_mapping.get();
+ layout_block_flow->SetOffsetMapping(std::move(data.offset_mapping));
+ return mapping;
}
// Depth-first-scan of all LayoutInline and LayoutText nodes that make up this
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h
index 0007417e25a..aa1fab7bc42 100644
--- a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h
+++ b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h
@@ -83,6 +83,8 @@ class CORE_EXPORT NGInlineNode : public NGLayoutInputNode {
// Otherwise, this function computes |NGOffsetMapping| and store in |storage|
// as well as returning the pointer. The caller is responsible for keeping
// |storage| for the life cycle of the returned |NGOffsetMapping|.
+ // TODO(yosin): We should get rid of |storage| parameter, since it is no
+ // longer used.
static const NGOffsetMapping* GetOffsetMapping(
LayoutBlockFlow* layout_block_flow,
std::unique_ptr<NGOffsetMapping>* storage);
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_test.cc b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_test.cc
index b6d5ace7e32..bf212e716df 100644
--- a/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_test.cc
+++ b/chromium/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_test.cc
@@ -1186,7 +1186,6 @@ TEST_P(NGOffsetMappingGetterTest, Get) {
const NGOffsetMapping* mapping =
NGInlineNode::GetOffsetMapping(layout_block_flow, &storage);
EXPECT_TRUE(mapping);
- EXPECT_EQ(!storage, GetParam()); // |storage| is used only for legacy.
const String& text_content = mapping->GetText();
EXPECT_EQ(text_content, "Whitespaces in this text should be collapsed.");
diff --git a/chromium/third_party/blink/renderer/core/loader/frame_loader.cc b/chromium/third_party/blink/renderer/core/loader/frame_loader.cc
index b6bdefc799a..24932e050bf 100644
--- a/chromium/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/chromium/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -730,6 +730,10 @@ bool FrameLoader::PrepareRequestForThisFrame(FrameLoadRequest& request) {
if (frame_->Owner() && frame_->Owner()->GetSandboxFlags() & kSandboxOrigin)
return false;
+
+ frame_->GetDocument()->ProcessJavaScriptUrl(
+ url, request.ShouldCheckMainWorldContentSecurityPolicy());
+ return false;
}
if (!request.OriginDocument()->GetSecurityOrigin()->CanDisplay(url)) {
@@ -964,12 +968,6 @@ void FrameLoader::StartNavigation(const FrameLoadRequest& passed_request,
LocalFrame::ConsumeTransientUserActivation(frame_);
}
- if (url.ProtocolIsJavaScript()) {
- frame_->GetDocument()->ProcessJavaScriptUrl(
- url, request.ShouldCheckMainWorldContentSecurityPolicy());
- return;
- }
-
Client()->BeginNavigation(
resource_request, origin_document, nullptr /* document_loader */,
navigation_type, policy, has_transient_activation, frame_load_type,
diff --git a/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
index abd95ee3b6e..90874dd5c8b 100644
--- a/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
+++ b/chromium/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -67,6 +67,9 @@ void OffscreenCanvas::Commit(scoped_refptr<CanvasResource> canvas_resource,
}
void OffscreenCanvas::Dispose() {
+ // We need to drop frame dispatcher, to prevent mojo calls from completing.
+ frame_dispatcher_ = nullptr;
+
if (context_) {
context_->DetachHost();
context_ = nullptr;
diff --git a/chromium/third_party/blink/renderer/core/streams/CommonOperations.js b/chromium/third_party/blink/renderer/core/streams/CommonOperations.js
index 9423a115435..24dc719f2be 100644
--- a/chromium/third_party/blink/renderer/core/streams/CommonOperations.js
+++ b/chromium/third_party/blink/renderer/core/streams/CommonOperations.js
@@ -13,6 +13,11 @@
const _queue = v8.createPrivateSymbol('[[queue]]');
const _queueTotalSize = v8.createPrivateSymbol('[[queueTotalSize]]');
+ // A symbol to protect against double-resolution of promises. This
+ // functionality is not explicit in the standard, but is implied in the way
+ // the operations are defined.
+ const _isSettled = v8.createPrivateSymbol('isSettled');
+
// Javascript functions. It is important to use these copies for security and
// robustness. See "V8 Extras Design Doc", section "Security Considerations".
// https://docs.google.com/document/d/1AT5-T0aHGp7Lt29vPWFr2-qG8r3l9CByyvKwEuA8Ec0/edit#heading=h.9yixony1a18r
@@ -68,20 +73,76 @@
throw new RangeError('Stream API Internal Error');
}
+ // For safety, this must always be used in place of calling v8.createPromise()
+ // directly.
+ function createPromise() {
+ const p = v8.createPromise();
+ p[_isSettled] = false;
+ return p;
+ }
+
+ // Calling v8.rejectPromise() directly is very dangerous. Always use this
+ // wrapper.
function rejectPromise(p, reason) {
if (!v8.isPromise(p)) {
streamInternalError();
}
+
+ // assert(typeof p[_isSettled] === 'boolean',
+ // 'Type(p.[[isSettled]]) is `"boolean"`');
+
+ // Note that this makes the function a no-op for promises that were not
+ // created via createPromise(). This is critical for security.
+ if (p[_isSettled] !== false) {
+ return;
+ }
+ p[_isSettled] = true;
+
v8.rejectPromise(p, reason);
}
+ // This must always be used instead of Promise.reject().
+ function createRejectedPromise(reason) {
+ const p = createPromise();
+ rejectPromise(p, reason);
+ return p;
+ }
+
+ // Calling v8.resolvePromise() directly is very dangerous. Always use this
+ // wrapper. If |value| is an object this will look up Object.prototype.then
+ // and so may be re-entrant.
function resolvePromise(p, value) {
if (!v8.isPromise(p)) {
streamInternalError();
}
+
+ // assert(typeof p[_isSettled] === 'boolean',
+ // 'Type(p.[[isSettled]]) is `"boolean"`');
+
+ // Note that this makes the function a no-op for promises that were not
+ // created via createPromise(). This is critical for security.
+ if (p[_isSettled] !== false) {
+ return;
+ }
+ p[_isSettled] = true;
+
v8.resolvePromise(p, value);
}
+ // This must always be used instead of Promise.resolve(). If |value| is an
+ // object this will look up Object.prototype.then and so may be re-entrant.
+ function createResolvedPromise(value) {
+ if (v8.isPromise(value)) {
+ // This case applies when an underlying method returns a promise. Promises
+ // that are passed through in this way are not used with resolvePromise()
+ // or rejectPromise().
+ return value;
+ }
+ const p = createPromise();
+ resolvePromise(p, value);
+ return p;
+ }
+
function markPromiseAsHandled(p) {
if (!v8.isPromise(p)) {
streamInternalError();
@@ -190,8 +251,6 @@
const callFunction = v8.uncurryThis(global.Function.prototype.call);
const errTmplMustBeFunctionOrUndefined = name =>
`${name} must be a function or undefined`;
- const Promise_resolve = Promise.resolve.bind(Promise);
- const Promise_reject = Promise.reject.bind(Promise);
const Function_bind = v8.uncurryThis(global.Function.prototype.bind);
function resolveMethod(O, P, nameForError) {
@@ -220,7 +279,7 @@
// The implementation uses bound functions rather than lambdas where
// possible to give the compiler the maximum opportunity to optimise.
if (method === undefined) {
- return () => Promise_resolve();
+ return () => createResolvedPromise();
}
if (algoArgCount === 0) {
@@ -246,7 +305,7 @@
const method =
resolveMethod(underlyingObject, methodName, methodNameForError);
if (method === undefined) {
- return () => Promise_resolve();
+ return () => createResolvedPromise();
}
if (algoArgCount === 0) {
@@ -271,9 +330,9 @@
// assert(typeof F === 'function', 'IsCallable(F) is true.');
// assert(V !== undefined, 'V is not undefined.');
try {
- return Promise_resolve(callFunction(F, V));
+ return createResolvedPromise(callFunction(F, V));
} catch (e) {
- return Promise_reject(e);
+ return createRejectedPromise(e);
}
}
@@ -281,9 +340,9 @@
// assert(typeof F === 'function', 'IsCallable(F) is true.');
// assert(V !== undefined, 'V is not undefined.');
try {
- return Promise_resolve(callFunction(F, V, arg0));
+ return createResolvedPromise(callFunction(F, V, arg0));
} catch (e) {
- return Promise_reject(e);
+ return createRejectedPromise(e);
}
}
@@ -291,9 +350,9 @@
// assert(typeof F === 'function', 'IsCallable(F) is true.');
// assert(V !== undefined, 'V is not undefined.');
try {
- return Promise_resolve(callFunction(F, V, arg0, arg1));
+ return createResolvedPromise(callFunction(F, V, arg0, arg1));
} catch (e) {
- return Promise_reject(e);
+ return createRejectedPromise(e);
}
}
@@ -391,7 +450,7 @@
}
function CreateCrossRealmTransformWritable(port) {
- let backpressurePromise = v8.createPromise();
+ let backpressurePromise = createPromise();
callFunction(binding.EventTarget_addEventListener, port, 'message', evt => {
const {type, value} = callFunction(binding.MessageEvent_data_get, evt);
@@ -429,7 +488,7 @@
callFunction(binding.MessagePort_start, port);
function doWrite(chunk) {
- backpressurePromise = v8.createPromise();
+ backpressurePromise = createPromise();
try {
callFunction(
binding.MessagePort_postMessage, port,
@@ -456,14 +515,14 @@
binding.MessagePort_postMessage, port,
{type: kClose, value: undefined});
callFunction(binding.MessagePort_close, port);
- return Promise_resolve();
+ return createResolvedPromise();
},
reason => {
callFunction(
binding.MessagePort_postMessage, port,
{type: kAbort, value: packReason(reason)});
callFunction(binding.MessagePort_close, port);
- return Promise_resolve();
+ return createResolvedPromise();
});
const controller = binding.getWritableStreamController(stream);
@@ -471,7 +530,7 @@
}
function CreateCrossRealmTransformReadable(port) {
- let backpressurePromise = v8.createPromise();
+ let backpressurePromise = createPromise();
let finished = false;
callFunction(binding.EventTarget_addEventListener, port, 'message', evt => {
@@ -485,7 +544,7 @@
case kChunk:
binding.ReadableStreamDefaultControllerEnqueue(controller, value);
resolvePromise(backpressurePromise);
- backpressurePromise = v8.createPromise();
+ backpressurePromise = createPromise();
break;
case kClose:
@@ -530,7 +589,7 @@
binding.MessagePort_postMessage, port,
{type: kCancel, value: packReason(reason)});
callFunction(binding.MessagePort_close, port);
- return Promise_resolve();
+ return createResolvedPromise();
},
/* highWaterMark = */ 0);
@@ -541,6 +600,9 @@
binding.streamOperations = {
_queue,
_queueTotalSize,
+ createPromise,
+ createRejectedPromise,
+ createResolvedPromise,
hasOwnPropertyNoThrow,
rejectPromise,
resolvePromise,
diff --git a/chromium/third_party/blink/renderer/core/streams/ReadableStream.js b/chromium/third_party/blink/renderer/core/streams/ReadableStream.js
index d28d8c076ed..797fe38d9b5 100644
--- a/chromium/third_party/blink/renderer/core/streams/ReadableStream.js
+++ b/chromium/third_party/blink/renderer/core/streams/ReadableStream.js
@@ -63,13 +63,14 @@
const Promise = global.Promise;
const thenPromise = v8.uncurryThis(Promise.prototype.then);
- const Promise_resolve = Promise.resolve.bind(Promise);
- const Promise_reject = Promise.reject.bind(Promise);
// From CommonOperations.js
const {
_queue,
_queueTotalSize,
+ createPromise,
+ createRejectedPromise,
+ createResolvedPromise,
hasOwnPropertyNoThrow,
rejectPromise,
resolvePromise,
@@ -175,7 +176,7 @@
const reader = AcquireReadableStreamDefaultReader(readable);
const writer = binding.AcquireWritableStreamDefaultWriter(dest);
let shuttingDown = false;
- const promise = v8.createPromise();
+ const promise = createPromise();
let reading = false;
let lastWrite;
@@ -366,7 +367,7 @@
// rejects.
return thenPromise(lastWrite, () => undefined, () => undefined);
}
- return Promise_resolve(undefined);
+ return createResolvedPromise(undefined);
}
return promise;
@@ -430,7 +431,7 @@
let canceled2 = false;
let reason1;
let reason2;
- const cancelPromise = v8.createPromise();
+ const cancelPromise = createPromise();
function pullAlgorithm() {
return thenPromise(
@@ -515,7 +516,7 @@
//
function ReadableStreamAddReadRequest(stream, forAuthorCode) {
- const promise = v8.createPromise();
+ const promise = createPromise();
stream[_reader][_readRequests].push({promise, forAuthorCode});
return promise;
}
@@ -525,10 +526,10 @@
const state = ReadableStreamGetState(stream);
if (state === STATE_CLOSED) {
- return Promise_resolve(undefined);
+ return createResolvedPromise(undefined);
}
if (state === STATE_ERRORED) {
- return Promise_reject(stream[_storedError]);
+ return createRejectedPromise(stream[_storedError]);
}
ReadableStreamClose(stream);
@@ -631,7 +632,8 @@
get closed() {
if (IsReadableStreamDefaultReader(this) === false) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
return this[_closedPromise];
@@ -639,11 +641,12 @@
cancel(reason) {
if (IsReadableStreamDefaultReader(this) === false) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
if (this[_ownerReadableStream] === undefined) {
- return Promise_reject(new TypeError(errCancelReleasedReader));
+ return createRejectedPromise(new TypeError(errCancelReleasedReader));
}
return ReadableStreamReaderGenericCancel(this, reason);
@@ -651,11 +654,12 @@
read() {
if (IsReadableStreamDefaultReader(this) === false) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
if (this[_ownerReadableStream] === undefined) {
- return Promise_reject(new TypeError(errReadReleasedReader));
+ return createRejectedPromise(new TypeError(errReadReleasedReader));
}
return ReadableStreamDefaultReaderRead(this, true);
@@ -707,13 +711,13 @@
switch (ReadableStreamGetState(stream)) {
case STATE_READABLE:
- reader[_closedPromise] = v8.createPromise();
+ reader[_closedPromise] = createPromise();
break;
case STATE_CLOSED:
- reader[_closedPromise] = Promise_resolve(undefined);
+ reader[_closedPromise] = createResolvedPromise(undefined);
break;
case STATE_ERRORED:
- reader[_closedPromise] = Promise_reject(stream[_storedError]);
+ reader[_closedPromise] = createRejectedPromise(stream[_storedError]);
markPromiseAsHandled(reader[_closedPromise]);
break;
}
@@ -738,7 +742,7 @@
new TypeError(errReleasedReaderClosedPromise));
} else {
reader[_closedPromise] =
- Promise_reject(new TypeError(errReleasedReaderClosedPromise));
+ createRejectedPromise(new TypeError(errReleasedReaderClosedPromise));
}
markPromiseAsHandled(reader[_closedPromise]);
@@ -752,11 +756,11 @@
switch (ReadableStreamGetState(stream)) {
case STATE_CLOSED:
- return Promise_resolve(ReadableStreamCreateReadResult(undefined, true,
- forAuthorCode));
+ return createResolvedPromise(
+ ReadableStreamCreateReadResult(undefined, true, forAuthorCode));
case STATE_ERRORED:
- return Promise_reject(stream[_storedError]);
+ return createRejectedPromise(stream[_storedError]);
default:
return ReadableStreamDefaultControllerPull(stream[_controller],
@@ -854,8 +858,8 @@
ReadableStreamDefaultControllerCallPullIfNeeded(controller);
}
- return Promise_resolve(ReadableStreamCreateReadResult(chunk, false,
- forAuthorCode));
+ return createResolvedPromise(
+ ReadableStreamCreateReadResult(chunk, false, forAuthorCode));
}
const pendingPromise = ReadableStreamAddReadRequest(stream, forAuthorCode);
@@ -1008,7 +1012,7 @@
controller[_cancelAlgorithm] = cancelAlgorithm;
stream[_controller] = controller;
- thenPromise(Promise_resolve(startAlgorithm()), () => {
+ thenPromise(createResolvedPromise(startAlgorithm()), () => {
controller[_readableStreamDefaultControllerBits] |= STARTED;
ReadableStreamDefaultControllerCallPullIfNeeded(controller);
}, r => ReadableStreamDefaultControllerError(controller, r));
diff --git a/chromium/third_party/blink/renderer/core/streams/TransformStream.js b/chromium/third_party/blink/renderer/core/streams/TransformStream.js
index cafce4170f1..a339a49bb5d 100644
--- a/chromium/third_party/blink/renderer/core/streams/TransformStream.js
+++ b/chromium/third_party/blink/renderer/core/streams/TransformStream.js
@@ -42,11 +42,12 @@
const Promise = global.Promise;
const thenPromise = v8.uncurryThis(Promise.prototype.then);
- const Promise_resolve = Promise.resolve.bind(Promise);
- const Promise_reject = Promise.reject.bind(Promise);
// From CommonOperations.js
const {
+ createPromise,
+ createRejectedPromise,
+ createResolvedPromise,
hasOwnPropertyNoThrow,
resolvePromise,
CreateAlgorithmFromUnderlyingMethod,
@@ -103,7 +104,7 @@
readableHighWaterMark =
ValidateAndNormalizeHighWaterMark(readableHighWaterMark);
- const startPromise = v8.createPromise();
+ const startPromise = createPromise();
InitializeTransformStream(
this, startPromise, writableHighWaterMark, writableSizeAlgorithm,
readableHighWaterMark, readableSizeAlgorithm);
@@ -159,7 +160,7 @@
// readableHighWaterMark >= 0,
// '! IsNonNegativeNumber(_readableHighWaterMark_) is true');
const stream = ObjectCreate(TransformStream_prototype);
- const startPromise = v8.createPromise();
+ const startPromise = createPromise();
InitializeTransformStream(
stream, startPromise, writableHighWaterMark, writableSizeAlgorithm,
readableHighWaterMark, readableSizeAlgorithm);
@@ -188,7 +189,7 @@
TransformStreamDefaultSourcePullAlgorithm(stream);
const cancelAlgorithm = reason => {
TransformStreamErrorWritableAndUnblockWrite(stream, reason);
- return Promise_resolve(undefined);
+ return createResolvedPromise(undefined);
};
stream[_readable] = binding.CreateReadableStream(
startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,
@@ -234,7 +235,7 @@
resolvePromise(stream[_backpressureChangePromise], undefined);
}
- stream[_backpressureChangePromise] = v8.createPromise();
+ stream[_backpressureChangePromise] = createPromise();
stream[_backpressure] = backpressure;
}
@@ -316,9 +317,9 @@
transformAlgorithm = chunk => {
try {
TransformStreamDefaultControllerEnqueue(controller, chunk);
- return Promise_resolve();
+ return createResolvedPromise();
} catch (resultValue) {
- return Promise_reject(resultValue);
+ return createRejectedPromise(resultValue);
}
};
}
@@ -415,7 +416,7 @@
function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {
TransformStreamError(stream, reason);
- return Promise_resolve();
+ return createResolvedPromise();
}
function TransformStreamDefaultSinkCloseAlgorithm(stream) {
@@ -458,7 +459,7 @@
// blink::TransformStream needs. |transformAlgorithm| and |flushAlgorithm| are
// passed the controller, unlike in the standard.
function createTransformStreamSimple(transformAlgorithm, flushAlgorithm) {
- return CreateTransformStream(() => Promise_resolve(),
+ return CreateTransformStream(() => createResolvedPromise(),
transformAlgorithm, flushAlgorithm);
}
function createTransformStream(
diff --git a/chromium/third_party/blink/renderer/core/streams/WritableStream.js b/chromium/third_party/blink/renderer/core/streams/WritableStream.js
index 8c3a75160fd..339a28fd470 100644
--- a/chromium/third_party/blink/renderer/core/streams/WritableStream.js
+++ b/chromium/third_party/blink/renderer/core/streams/WritableStream.js
@@ -73,13 +73,14 @@
const Promise = global.Promise;
const thenPromise = v8.uncurryThis(Promise.prototype.then);
- const Promise_resolve = Promise.resolve.bind(Promise);
- const Promise_reject = Promise.reject.bind(Promise);
// From CommonOperations.js
const {
_queue,
_queueTotalSize,
+ createPromise,
+ createRejectedPromise,
+ createResolvedPromise,
hasOwnPropertyNoThrow,
rejectPromise,
resolvePromise,
@@ -218,7 +219,7 @@
function WritableStreamAbort(stream, reason) {
const state = stream[_stateAndFlags] & STATE_MASK;
if (state === CLOSED || state === ERRORED) {
- return Promise_resolve(undefined);
+ return createResolvedPromise(undefined);
}
if (stream[_pendingAbortRequest] !== undefined) {
return stream[_pendingAbortRequest].promise;
@@ -232,7 +233,7 @@
reason = undefined;
}
- const promise = v8.createPromise();
+ const promise = createPromise();
stream[_pendingAbortRequest] = {promise, reason, wasAlreadyErroring};
if (!wasAlreadyErroring) {
@@ -248,7 +249,7 @@
// '! IsWritableStreamLocked(writer) is true.');
// assert((stream[_stateAndFlags] & STATE_MASK) === WRITABLE,
// 'stream.[[state]] is "writable".');
- const promise = v8.createPromise();
+ const promise = createPromise();
stream[_writeRequests].push(promise);
return promise;
}
@@ -455,7 +456,7 @@
if (writer !== undefined &&
backpressure !== Boolean(stream[_stateAndFlags] & BACKPRESSURE_FLAG)) {
if (backpressure) {
- writer[_readyPromise] = v8.createPromise();
+ writer[_readyPromise] = createPromise();
} else {
// assert(!backpressure, '_backpressure_ is *false*.');
resolvePromise(writer[_readyPromise], undefined);
@@ -559,33 +560,33 @@
case WRITABLE: {
if (!WritableStreamCloseQueuedOrInFlight(stream) &&
stream[_stateAndFlags] & BACKPRESSURE_FLAG) {
- this[_readyPromise] = v8.createPromise();
+ this[_readyPromise] = createPromise();
} else {
- this[_readyPromise] = Promise_resolve(undefined);
+ this[_readyPromise] = createResolvedPromise(undefined);
}
- this[_closedPromise] = v8.createPromise();
+ this[_closedPromise] = createPromise();
break;
}
case ERRORING: {
- this[_readyPromise] = Promise_reject(stream[_storedError]);
+ this[_readyPromise] = createRejectedPromise(stream[_storedError]);
markPromiseAsHandled(this[_readyPromise]);
- this[_closedPromise] = v8.createPromise();
+ this[_closedPromise] = createPromise();
break;
}
case CLOSED: {
- this[_readyPromise] = Promise_resolve(undefined);
- this[_closedPromise] = Promise_resolve(undefined);
+ this[_readyPromise] = createResolvedPromise(undefined);
+ this[_closedPromise] = createResolvedPromise(undefined);
break;
}
default: {
// assert(state === ERRORED, '_state_ is `"errored"`.');
const storedError = stream[_storedError];
- this[_readyPromise] = Promise_reject(storedError);
+ this[_readyPromise] = createRejectedPromise(storedError);
markPromiseAsHandled(this[_readyPromise]);
- this[_closedPromise] = Promise_reject(storedError);
+ this[_closedPromise] = createRejectedPromise(storedError);
markPromiseAsHandled(this[_closedPromise]);
break;
}
@@ -594,7 +595,8 @@
get closed() {
if (!IsWritableStreamDefaultWriter(this)) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
return this[_closedPromise];
}
@@ -611,31 +613,36 @@
get ready() {
if (!IsWritableStreamDefaultWriter(this)) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
return this[_readyPromise];
}
abort(reason) {
if (!IsWritableStreamDefaultWriter(this)) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
if (this[_ownerWritableStream] === undefined) {
- return Promise_reject(createWriterLockReleasedError(verbAborted));
+ return createRejectedPromise(
+ createWriterLockReleasedError(verbAborted));
}
return WritableStreamDefaultWriterAbort(this, reason);
}
close() {
if (!IsWritableStreamDefaultWriter(this)) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
const stream = this[_ownerWritableStream];
if (stream === undefined) {
- return Promise_reject(createWriterLockReleasedError(verbClosed));
+ return createRejectedPromise(createWriterLockReleasedError(verbClosed));
}
if (WritableStreamCloseQueuedOrInFlight(stream)) {
- return Promise_reject(new TypeError(errCloseCloseRequestedStream));
+ return createRejectedPromise(
+ new TypeError(errCloseCloseRequestedStream));
}
return WritableStreamDefaultWriterClose(this);
}
@@ -655,10 +662,12 @@
write(chunk) {
if (!IsWritableStreamDefaultWriter(this)) {
- return Promise_reject(new TypeError(streamErrors.illegalInvocation));
+ return createRejectedPromise(
+ new TypeError(streamErrors.illegalInvocation));
}
if (this[_ownerWritableStream] === undefined) {
- return Promise_reject(createWriterLockReleasedError(verbWrittenTo));
+ return createRejectedPromise(
+ createWriterLockReleasedError(verbWrittenTo));
}
return WritableStreamDefaultWriterWrite(this, chunk);
}
@@ -682,7 +691,7 @@
// assert(stream !== undefined, 'stream is not undefined.');
const state = stream[_stateAndFlags] & STATE_MASK;
if (state === CLOSED || state === ERRORED) {
- return Promise_reject(
+ return createRejectedPromise(
createCannotActionOnStateStreamError('close', state));
}
@@ -690,7 +699,7 @@
// '_state_ is `"writable"` or `"erroring"`.');
// assert(!WritableStreamCloseQueuedOrInFlight(stream),
// '! WritableStreamCloseQueuedOrInFlight(_stream_) is *false*.');
- const promise = v8.createPromise();
+ const promise = createPromise();
stream[_closeRequest] = promise;
if ((stream[_stateAndFlags] & BACKPRESSURE_FLAG) && state === WRITABLE) {
@@ -705,10 +714,10 @@
// assert(stream !== undefined, 'stream is not undefined.');
const state = stream[_stateAndFlags] & STATE_MASK;
if (WritableStreamCloseQueuedOrInFlight(stream) || state === CLOSED) {
- return Promise_resolve(undefined);
+ return createResolvedPromise(undefined);
}
if (state === ERRORED) {
- return Promise_reject(stream[_storedError]);
+ return createRejectedPromise(stream[_storedError]);
}
// assert(state === WRITABLE || state === ERRORING,
@@ -722,7 +731,7 @@
if (promiseState(writer[_closedPromise]) === v8.kPROMISE_PENDING) {
rejectPromise(writer[_closedPromise], error);
} else {
- writer[_closedPromise] = Promise_reject(error);
+ writer[_closedPromise] = createRejectedPromise(error);
}
markPromiseAsHandled(writer[_closedPromise]);
}
@@ -733,7 +742,7 @@
if (promiseState(writer[_readyPromise]) === v8.kPROMISE_PENDING) {
rejectPromise(writer[_readyPromise], error);
} else {
- writer[_readyPromise] = Promise_reject(error);
+ writer[_readyPromise] = createRejectedPromise(error);
}
markPromiseAsHandled(writer[_readyPromise]);
}
@@ -773,22 +782,23 @@
const chunkSize =
WritableStreamDefaultControllerGetChunkSize(controller, chunk);
if (stream !== writer[_ownerWritableStream]) {
- return Promise_reject(createWriterLockReleasedError(verbWrittenTo));
+ return createRejectedPromise(
+ createWriterLockReleasedError(verbWrittenTo));
}
const state = stream[_stateAndFlags] & STATE_MASK;
if (state === ERRORED) {
- return Promise_reject(stream[_storedError]);
+ return createRejectedPromise(stream[_storedError]);
}
if (WritableStreamCloseQueuedOrInFlight(stream)) {
- return Promise_reject(new TypeError(
+ return createRejectedPromise(new TypeError(
templateErrorCannotActionOnStateStream('write to', 'closing')));
}
if (state === CLOSED) {
- return Promise_reject(
+ return createRejectedPromise(
createCannotActionOnStateStreamError('write to', CLOSED));
}
if (state === ERRORING) {
- return Promise_reject(stream[_storedError]);
+ return createRejectedPromise(stream[_storedError]);
}
// assert(state === WRITABLE, '_state_ is `"writable"`');
const promise = WritableStreamAddWriteRequest(stream);
@@ -878,7 +888,7 @@
WritableStreamDefaultControllerGetBackpressure(controller);
WritableStreamUpdateBackpressure(stream, backpressure);
const startResult = startAlgorithm();
- const startPromise = Promise_resolve(startResult);
+ const startPromise = createResolvedPromise(startResult);
thenPromise(
startPromise,
() => {
diff --git a/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc b/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
index b5d3569cfe0..7630e19ff1c 100644
--- a/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
+++ b/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
@@ -607,6 +607,23 @@ ResourceLoadScheduler::ClientId ResourceLoadScheduler::GenerateClientId() {
return id;
}
+bool ResourceLoadScheduler::IsPendingRequestEffectivelyEmpty(
+ ThrottleOption option) {
+ for (const auto& client : pending_requests_[option]) {
+ // The request in |pending_request_| is erased when it is scheduled. So if
+ // the request is canceled, or Release() is called before firing its Run(),
+ // the entry for the request remains in |pending_request_| until it is
+ // popped in GetNextPendingRequest().
+ if (pending_request_map_.find(client.client_id) !=
+ pending_request_map_.end()) {
+ return false;
+ }
+ }
+ // There is no entry, or no existing entries are alive in
+ // |pending_request_map_|.
+ return true;
+}
+
bool ResourceLoadScheduler::GetNextPendingRequest(ClientId* id) {
bool needs_throttling =
running_throttleable_requests_.size() >= GetOutstandingLimit();
@@ -717,20 +734,23 @@ void ResourceLoadScheduler::ShowConsoleMessageIfNeeded() {
base::TimeTicks::Now() - base::TimeDelta::FromMinutes(1);
ThrottleOption target_option;
if (pending_queue_update_times_[ThrottleOption::kThrottleable] < limit &&
- !pending_requests_[ThrottleOption::kThrottleable].empty()) {
+ !IsPendingRequestEffectivelyEmpty(ThrottleOption::kThrottleable)) {
target_option = ThrottleOption::kThrottleable;
} else if (pending_queue_update_times_[ThrottleOption::kStoppable] < limit &&
- !pending_requests_[ThrottleOption::kStoppable].empty()) {
+ !IsPendingRequestEffectivelyEmpty(ThrottleOption::kStoppable)) {
target_option = ThrottleOption::kStoppable;
} else {
// At least, one of the top requests in pending queues was handled in the
// last 1 minutes, or there is no pending requests in the inactive queue.
return;
}
- auto client_it = pending_request_map_.find(
- pending_requests_[target_option].begin()->client_id);
- DCHECK_NE(pending_request_map_.end(), client_it);
- ConsoleLogger* logger = client_it->value->client->GetConsoleLogger();
+ ConsoleLogger* logger = nullptr;
+ for (const auto& client : pending_requests_[target_option]) {
+ auto client_it = pending_request_map_.find(client.client_id);
+ if (pending_request_map_.end() == client_it)
+ continue;
+ logger = client_it->value->client->GetConsoleLogger();
+ }
DCHECK(logger);
logger->AddInfoMessage(
diff --git a/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h b/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h
index 62814e13460..06cc6fa5b2d 100644
--- a/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h
+++ b/chromium/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h
@@ -250,6 +250,11 @@ class PLATFORM_EXPORT ResourceLoadScheduler final
int intra_priority;
};
+ // Checks if |pending_requests_| for the specified option is effectively
+ // empty, that means it does not contain any request that is still alive in
+ // |pending_request_map_|.
+ bool IsPendingRequestEffectivelyEmpty(ThrottleOption option);
+
// Gets the highest priority pending request that is allowed to be run.
bool GetNextPendingRequest(ClientId* id);
@@ -312,11 +317,13 @@ class PLATFORM_EXPORT ResourceLoadScheduler final
kStopped,
};
ThrottlingHistory throttling_history_ = ThrottlingHistory::kInitial;
+
scheduler::SchedulingLifecycleState frame_scheduler_lifecycle_state_ =
scheduler::SchedulingLifecycleState::kNotThrottled;
// Holds clients that haven't been granted, and are waiting for a grant.
HeapHashMap<ClientId, Member<ClientInfo>> pending_request_map_;
+
// We use std::set here because WTF doesn't have its counterpart.
// This tracks two sets of requests, throttleable and stoppable.
std::map<ThrottleOption,
diff --git a/chromium/third_party/skia/src/core/SkGlyphRunPainter.cpp b/chromium/third_party/skia/src/core/SkGlyphRunPainter.cpp
index 9ef9c05287f..4e497abc72d 100644
--- a/chromium/third_party/skia/src/core/SkGlyphRunPainter.cpp
+++ b/chromium/third_party/skia/src/core/SkGlyphRunPainter.cpp
@@ -266,7 +266,8 @@ void SkGlyphRunListPainter::processARGBFallback(
// If the situation that the matrix is simple, and all the glyphs are small enough. Go fast!
bool useFastPath =
- viewMatrix.isScaleTranslate() && conservativeMaxGlyphDimension <= maxGlyphDimension;
+ viewMatrix.isScaleTranslate()
+ && conservativeMaxGlyphDimension <= SkStrikeCommon::kSkSideTooBigForAtlas;
auto glyphIDs = SkSpan<const SkGlyphID>{fARGBGlyphsIDs};
diff --git a/chromium/third_party/skia/src/core/SkScalerContext.h b/chromium/third_party/skia/src/core/SkScalerContext.h
index 06ccce2ebb3..36fc882df70 100644
--- a/chromium/third_party/skia/src/core/SkScalerContext.h
+++ b/chromium/third_party/skia/src/core/SkScalerContext.h
@@ -96,6 +96,7 @@ public:
}
SkScalar getContrast() const {
+ sk_ignore_unused_variable(fReservedAlign);
return SkIntToScalar(fContrast) / ((1 << 8) - 1);
}
void setContrast(SkScalar c) {
@@ -206,11 +207,6 @@ public:
return static_cast<SkMask::Format>(fMaskFormat);
}
-private:
- // TODO: get rid of these bad friends.
- friend class SkScalerContext;
- friend class SkScalerContext_DW;
-
SkColor getLuminanceColor() const {
return fLumBits;
}
@@ -219,6 +215,10 @@ private:
void setLuminanceColor(SkColor c) {
fLumBits = c;
}
+
+private:
+ // TODO: remove
+ friend class SkScalerContext;
};
SK_END_REQUIRE_DENSE
diff --git a/chromium/third_party/skia/src/ports/SkFontHost_mac.cpp b/chromium/third_party/skia/src/ports/SkFontHost_mac.cpp
index 2f3aa34ff34..86578e5d31f 100644
--- a/chromium/third_party/skia/src/ports/SkFontHost_mac.cpp
+++ b/chromium/third_party/skia/src/ports/SkFontHost_mac.cpp
@@ -2227,7 +2227,7 @@ void SkTypeface_Mac::onFilterRec(SkScalerContextRec* rec) const {
rec->fFlags &= ~flagsWeDontSupport;
- SmoothBehavior smoothBehavior = smooth_behavior();
+ const SmoothBehavior smoothBehavior = smooth_behavior();
// Only two levels of hinting are supported.
// kNo_Hinting means avoid CoreGraphics outline dilation (smoothing).
@@ -2288,7 +2288,26 @@ void SkTypeface_Mac::onFilterRec(SkScalerContextRec* rec) const {
rec->ignorePreBlend();
#endif
} else {
- //CoreGraphics dialates smoothed text as needed.
+#ifndef SK_IGNORE_MAC_BLENDING_MATCH_FIX
+ SkColor color = rec->getLuminanceColor();
+ if (smoothBehavior == SmoothBehavior::some) {
+ // CoreGraphics smoothed text without subpixel coverage blitting goes from a gamma of
+ // 2.0 for black foreground to a gamma of 1.0 for white foreground. Emulate this
+ // through the mask gamma by reducing the color values to 1/2.
+ color = SkColorSetRGB(SkColorGetR(color) * 1/2,
+ SkColorGetG(color) * 1/2,
+ SkColorGetB(color) * 1/2);
+ } else if (smoothBehavior == SmoothBehavior::subpixel) {
+ // CoreGraphics smoothed text with subpixel coverage blitting goes from a gamma of
+ // 2.0 for black foreground to a gamma of ~1.4? for white foreground. Emulate this
+ // through the mask gamma by reducing the color values to 3/4.
+ color = SkColorSetRGB(SkColorGetR(color) * 3/4,
+ SkColorGetG(color) * 3/4,
+ SkColorGetB(color) * 3/4);
+ }
+ rec->setLuminanceColor(color);
+#endif
+ // CoreGraphics dialates smoothed text to provide contrast.
rec->setContrast(0);
}
}
diff --git a/chromium/tools/metrics/histograms/histograms.xml b/chromium/tools/metrics/histograms/histograms.xml
index 96056c0fac1..8b76451a55b 100644
--- a/chromium/tools/metrics/histograms/histograms.xml
+++ b/chromium/tools/metrics/histograms/histograms.xml
@@ -4337,6 +4337,19 @@ uploading your change for review.
</summary>
</histogram>
+<histogram name="Arc.EngagementTime.ArcTotal" units="ms">
+ <owner>maajid@google.com</owner>
+ <owner>shaochuan@google.com</owner>
+ <owner>shihuis@google.com</owner>
+ <summary>
+ Total of Arc.EngagementTime.Background and Arc.EngagementTime.Foreground.
+ Note that this differs from Arc.EngagementTime.Total in that this is the
+ ARC++ engagement time, while Arc.EngagementTime.Total is the CrOS total
+ engagement time on devices with ARC++ enabled. See Arc.EngagementTime.Total
+ for definition of engagement and further details.
+ </summary>
+</histogram>
+
<histogram name="Arc.EngagementTime.Background" units="ms">
<owner>maajid@google.com</owner>
<owner>shaochuan@google.com</owner>
@@ -4363,11 +4376,12 @@ uploading your change for review.
<owner>shaochuan@google.com</owner>
<owner>shihuis@google.com</owner>
<summary>
- Total user session time (from login to logout) excluding times when user
- &quot;disengages&quot;: screen is locked or dims down due to user idle.
+ Total CrOS user session time (from login to logout) excluding times when
+ user &quot;disengages&quot;: screen is locked or dims down due to user idle.
Engagement time metrics, along with foreground and background time, are only
- collected on users with ARC++ enabled. All three metrics are accumulated and
- recorded to UMA once a day.
+ collected on users with ARC++ enabled. All four metrics are accumulated and
+ recorded to UMA once a day. For Total ARC++ engagement time, please see
+ Arc.EngagementTime.ArcTotal.
</summary>
</histogram>
diff --git a/chromium/tools/traffic_annotation/summary/annotations.xml b/chromium/tools/traffic_annotation/summary/annotations.xml
index 192a1397845..af954deeb8b 100644
--- a/chromium/tools/traffic_annotation/summary/annotations.xml
+++ b/chromium/tools/traffic_annotation/summary/annotations.xml
@@ -146,8 +146,6 @@ Refer to README.md for content description and update process.
<item id="lib_address_input" hash_code="50816767" type="0" content_hash_code="57977576" os_list="linux,windows" file_path="third_party/libaddressinput/chromium/chrome_metadata_source.cc"/>
<item id="logo_service" hash_code="35473769" type="0" content_hash_code="20271299" os_list="linux,windows" file_path="components/search_provider_logos/logo_service_impl.cc"/>
<item id="logo_tracker" hash_code="36859107" type="0" deprecated="2018-12-07" content_hash_code="67588075" file_path=""/>
- <item id="mdns_client" hash_code="26832436" type="0" content_hash_code="133518607" os_list="linux,windows" file_path="net/dns/mdns_client_impl.cc"/>
- <item id="mdns_responder" hash_code="64387947" type="0" content_hash_code="54201453" os_list="linux,windows" file_path="services/network/mdns_responder.cc"/>
<item id="metrics_report_ukm" hash_code="727478" type="0" content_hash_code="40919254" os_list="linux,windows" file_path="components/metrics/net/net_metrics_log_uploader.cc"/>
<item id="metrics_report_uma" hash_code="727528" type="0" content_hash_code="10176197" os_list="linux,windows" file_path="components/metrics/net/net_metrics_log_uploader.cc"/>
<item id="mirroring_get_setup_info" hash_code="78447809" type="0" content_hash_code="112561099" os_list="linux,windows" file_path="components/mirroring/service/session_monitor.cc"/>
diff --git a/chromium/ui/android/delegated_frame_host_android.cc b/chromium/ui/android/delegated_frame_host_android.cc
index 78c270fb4b0..2d82cc8ad30 100644
--- a/chromium/ui/android/delegated_frame_host_android.cc
+++ b/chromium/ui/android/delegated_frame_host_android.cc
@@ -198,7 +198,7 @@ void DelegatedFrameHostAndroid::EvictDelegatedFrame() {
content_layer_->RemoveFromParent();
content_layer_ = nullptr;
}
- if (!HasSavedFrame())
+ if (!HasSavedFrame() || frame_evictor_->visible())
return;
std::vector<viz::SurfaceId> surface_ids = {
viz::SurfaceId(frame_sink_id_, local_surface_id_)};
diff --git a/chromium/ui/android/delegated_frame_host_android_unittest.cc b/chromium/ui/android/delegated_frame_host_android_unittest.cc
index 994438f3af1..8e27a479380 100644
--- a/chromium/ui/android/delegated_frame_host_android_unittest.cc
+++ b/chromium/ui/android/delegated_frame_host_android_unittest.cc
@@ -366,16 +366,15 @@ TEST_F(DelegatedFrameHostAndroidLegacyNonVizTest, TestBothCompositorLocks) {
// Make sure frame evictor is notified of the newly embedded surface after
// WasShown.
TEST_F(DelegatedFrameHostAndroidVizTest, EmbedWhileHidden) {
- {
- EXPECT_CALL(client_, WasEvicted());
- frame_host_->EvictDelegatedFrame();
- }
+ // Ensure there is currently no frame.
+ frame_host_->WasHidden();
+ frame_host_->EvictDelegatedFrame();
EXPECT_FALSE(frame_host_->HasSavedFrame());
+
allocator_.GenerateId();
viz::LocalSurfaceId id =
allocator_.GetCurrentLocalSurfaceIdAllocation().local_surface_id();
gfx::Size size(100, 100);
- frame_host_->WasHidden();
frame_host_->EmbedSurface(id, size, cc::DeadlinePolicy::UseDefaultDeadline());
EXPECT_FALSE(frame_host_->HasSavedFrame());
frame_host_->WasShown(id, size);
diff --git a/chromium/ui/gl/gl_image_io_surface_egl.mm b/chromium/ui/gl/gl_image_io_surface_egl.mm
index 690af44dffe..d0e762433bf 100644
--- a/chromium/ui/gl/gl_image_io_surface_egl.mm
+++ b/chromium/ui/gl/gl_image_io_surface_egl.mm
@@ -190,21 +190,23 @@ bool GLImageIOSurfaceEGL::CopyTexImage(unsigned target) {
EGLSurface y_surface = EGL_NO_SURFACE;
EGLSurface uv_surface = EGL_NO_SURFACE;
+ EGLSurface* y_surface_ptr = &y_surface;
+ EGLSurface* uv_surface_ptr = &uv_surface;
glGetIntegerv(target_getter, &rgb_texture);
base::ScopedClosureRunner destroy_resources_runner(
base::BindOnce(base::RetainBlock(^{
- if (y_surface != EGL_NO_SURFACE) {
+ if (*y_surface_ptr != EGL_NO_SURFACE) {
EGLBoolean result =
- eglReleaseTexImage(display_, y_surface, EGL_BACK_BUFFER);
+ eglReleaseTexImage(display_, *y_surface_ptr, EGL_BACK_BUFFER);
DCHECK(result == EGL_TRUE);
- result = eglDestroySurface(display_, y_surface);
+ result = eglDestroySurface(display_, *y_surface_ptr);
DCHECK(result == EGL_TRUE);
}
- if (uv_surface != EGL_NO_SURFACE) {
+ if (*uv_surface_ptr != EGL_NO_SURFACE) {
EGLBoolean result =
- eglReleaseTexImage(display_, uv_surface, EGL_BACK_BUFFER);
+ eglReleaseTexImage(display_, *uv_surface_ptr, EGL_BACK_BUFFER);
DCHECK(result == EGL_TRUE);
- result = eglDestroySurface(display_, uv_surface);
+ result = eglDestroySurface(display_, *uv_surface_ptr);
DCHECK(result == EGL_TRUE);
}
glBindTexture(target, rgb_texture);
diff --git a/chromium/ui/gl/yuv_to_rgb_converter.cc b/chromium/ui/gl/yuv_to_rgb_converter.cc
index bf6f8dd044e..0dc4d466106 100644
--- a/chromium/ui/gl/yuv_to_rgb_converter.cc
+++ b/chromium/ui/gl/yuv_to_rgb_converter.cc
@@ -126,6 +126,10 @@ YUVToRGBConverter::YUVToRGBConverter(const GLVersionInfo& gl_version_info,
glUniform1i(y_sampler_location, 0);
glUniform1i(uv_sampler_location, 1);
+
+ if (use_es3 || use_core_profile) {
+ glGenVertexArraysOES(1, &vertex_array_object_);
+ }
}
YUVToRGBConverter::~YUVToRGBConverter() {
@@ -136,6 +140,9 @@ YUVToRGBConverter::~YUVToRGBConverter() {
glDeleteShader(fragment_shader_);
glDeleteBuffersARB(1, &vertex_buffer_);
glDeleteFramebuffersEXT(1, &framebuffer_);
+ if (vertex_array_object_) {
+ glDeleteVertexArraysOES(1, &vertex_array_object_);
+ }
}
void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target,
@@ -171,7 +178,20 @@ void YUVToRGBConverter::CopyYUV420ToRGB(unsigned target,
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER));
ScopedUseProgram use_program(program_);
glUniform2f(size_location_, size.width(), size.height());
+ // User code may have set up the other vertex attributes in the
+ // context in unexpected ways, including setting vertex attribute
+ // divisors which may otherwise cause GL_INVALID_OPERATION during
+ // glDrawArrays. Avoid interference by binding our own VAO during
+ // the draw call. crbug.com/930479
+ GLint old_vertex_array_object_ = 0;
+ if (vertex_array_object_) {
+ glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vertex_array_object_);
+ glBindVertexArrayOES(vertex_array_object_);
+ }
GLHelper::DrawQuad(vertex_buffer_);
+ if (vertex_array_object_) {
+ glBindVertexArrayOES(old_vertex_array_object_);
+ }
// Restore previous state.
glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
diff --git a/chromium/ui/gl/yuv_to_rgb_converter.h b/chromium/ui/gl/yuv_to_rgb_converter.h
index 94fbf6a2edb..f706c13e77f 100644
--- a/chromium/ui/gl/yuv_to_rgb_converter.h
+++ b/chromium/ui/gl/yuv_to_rgb_converter.h
@@ -39,6 +39,7 @@ class YUVToRGBConverter {
unsigned vertex_buffer_ = 0;
unsigned y_texture_ = 0;
unsigned uv_texture_ = 0;
+ unsigned vertex_array_object_ = 0;
};
} // namespace gl
diff --git a/chromium/ui/strings/translations/ui_strings_te.xtb b/chromium/ui/strings/translations/ui_strings_te.xtb
index f35ea8f5ca2..6844d64501f 100644
--- a/chromium/ui/strings/translations/ui_strings_te.xtb
+++ b/chromium/ui/strings/translations/ui_strings_te.xtb
@@ -38,7 +38,7 @@
<translation id="2190355936436201913">(ఖాళీ)</translation>
<translation id="2192232475740621500">తక్కువ సాంద్రతను ఉపయోగించు</translation>
<translation id="219905428774326614">లాంచర్, అన్ని యాప్‌లు</translation>
-<translation id="2267918077332197517">ఈ సైట్ నుండి నోటిఫికేషన్‌లు అన్ని బ్లాక్ చేయండి</translation>
+<translation id="2267918077332197517">ఈ సైట్ నుండి నోటిఫికేషన్‌లన్నీ బ్లాక్ చేయండి</translation>
<translation id="2289052229480071835">మీ స్క్రీన్‌పై ఉన్న స్పర్శ లక్ష్యాలను నొక్కండి.</translation>
<translation id="2295140143284145483">సర్వే</translation>
<translation id="2297836609126180313"><ph name="QUANTITY" /> TB/s</translation>
diff --git a/chromium/ui/views_bridge_mac/views_nswindow_delegate.mm b/chromium/ui/views_bridge_mac/views_nswindow_delegate.mm
index 56869ebc18b..465b77adb7f 100644
--- a/chromium/ui/views_bridge_mac/views_nswindow_delegate.mm
+++ b/chromium/ui/views_bridge_mac/views_nswindow_delegate.mm
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/logging.h"
+#include "base/mac/mac_util.h"
#include "base/threading/thread_task_runner_handle.h"
#import "ui/views_bridge_mac/bridged_content_view.h"
#include "ui/views_bridge_mac/bridged_native_widget_host_helper.h"
@@ -179,6 +180,17 @@
}
- (void)windowDidExitFullScreen:(NSNotification*)notification {
+ if (base::mac::IsOS10_12()) {
+ // There is a window activation/fullscreen bug present only in macOS 10.12
+ // that might cause a security surface to appear over the wrong parent
+ // window. As much as this code appears to be a no-op, it is not; it causes
+ // AppKit to shuffle all the windows around to properly obey the
+ // relationships that they should already be obeying.
+ [[NSApp orderedWindows][0] performSelector:@selector(orderFront:)
+ withObject:self
+ afterDelay:0];
+ }
+
parent_->OnFullscreenTransitionComplete(false);
}
diff --git a/chromium/ui/webui/resources/cr_components/managed_footnote/managed_footnote.js b/chromium/ui/webui/resources/cr_components/managed_footnote/managed_footnote.js
index 09ce1cf2728..e969bc33803 100644
--- a/chromium/ui/webui/resources/cr_components/managed_footnote/managed_footnote.js
+++ b/chromium/ui/webui/resources/cr_components/managed_footnote/managed_footnote.js
@@ -16,8 +16,8 @@
* URL of the help article for the clickable link.
* @type {string}
*/
-// TODO(nicolaso): Use a p-link instead, once it's available. b/117655761
-const HELP_ARTICLE_URL = 'https://support.google.com/chromebook/answer/1331549';
+const HELP_ARTICLE_URL =
+ 'https://support.google.com/chromebook/?p=is_chrome_managed';
Polymer({
is: 'managed-footnote',
diff --git a/chromium/v8/include/v8-version.h b/chromium/v8/include/v8-version.h
index e1ffcf2a981..abf640228ff 100644
--- a/chromium/v8/include/v8-version.h
+++ b/chromium/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 7
#define V8_MINOR_VERSION 3
#define V8_BUILD_NUMBER 492
-#define V8_PATCH_LEVEL 19
+#define V8_PATCH_LEVEL 25
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/chromium/v8/src/arm64/assembler-arm64.cc b/chromium/v8/src/arm64/assembler-arm64.cc
index 5c55be24b2f..be0a4a95191 100644
--- a/chromium/v8/src/arm64/assembler-arm64.cc
+++ b/chromium/v8/src/arm64/assembler-arm64.cc
@@ -1097,6 +1097,12 @@ void Assembler::adr(const Register& rd, Label* label) {
}
+void Assembler::nop(NopMarkerTypes n) {
+ DCHECK((FIRST_NOP_MARKER <= n) && (n <= LAST_NOP_MARKER));
+ mov(Register::XRegFromCode(n), Register::XRegFromCode(n));
+}
+
+
void Assembler::add(const Register& rd,
const Register& rn,
const Operand& operand) {
diff --git a/chromium/v8/src/arm64/assembler-arm64.h b/chromium/v8/src/arm64/assembler-arm64.h
index 8c86a682914..54e46c74dd6 100644
--- a/chromium/v8/src/arm64/assembler-arm64.h
+++ b/chromium/v8/src/arm64/assembler-arm64.h
@@ -1089,10 +1089,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase {
LAST_NOP_MARKER = ADR_FAR_NOP
};
- void nop(NopMarkerTypes n) {
- DCHECK((FIRST_NOP_MARKER <= n) && (n <= LAST_NOP_MARKER));
- mov(Register::XRegFromCode(n), Register::XRegFromCode(n));
- }
+ void nop(NopMarkerTypes n);
// Add.
void add(const VRegister& vd, const VRegister& vn, const VRegister& vm);
diff --git a/chromium/v8/src/ast/ast-traversal-visitor.h b/chromium/v8/src/ast/ast-traversal-visitor.h
index 16102f5f490..21986789ba7 100644
--- a/chromium/v8/src/ast/ast-traversal-visitor.h
+++ b/chromium/v8/src/ast/ast-traversal-visitor.h
@@ -116,7 +116,6 @@ void AstTraversalVisitor<Subclass>::VisitStatements(
for (int i = 0; i < stmts->length(); ++i) {
Statement* stmt = stmts->at(i);
RECURSE(Visit(stmt));
- if (stmt->IsJump()) break;
}
}
diff --git a/chromium/v8/src/ast/ast.cc b/chromium/v8/src/ast/ast.cc
index 4f9b34f2b08..1c1802d602f 100644
--- a/chromium/v8/src/ast/ast.cc
+++ b/chromium/v8/src/ast/ast.cc
@@ -151,26 +151,6 @@ bool Expression::IsAccessorFunctionDefinition() const {
return IsFunctionLiteral() && IsAccessorFunction(AsFunctionLiteral()->kind());
}
-bool Statement::IsJump() const {
- switch (node_type()) {
-#define JUMP_NODE_LIST(V) \
- V(Block) \
- V(ExpressionStatement) \
- V(ContinueStatement) \
- V(BreakStatement) \
- V(ReturnStatement) \
- V(IfStatement)
-#define GENERATE_CASE(Node) \
- case k##Node: \
- return static_cast<const Node*>(this)->IsJump();
- JUMP_NODE_LIST(GENERATE_CASE)
-#undef GENERATE_CASE
-#undef JUMP_NODE_LIST
- default:
- return false;
- }
-}
-
VariableProxy::VariableProxy(Variable* var, int start_position)
: Expression(start_position, kVariableProxy),
raw_name_(var->raw_name()),
diff --git a/chromium/v8/src/ast/ast.h b/chromium/v8/src/ast/ast.h
index 3872819f8ee..4f9f083d123 100644
--- a/chromium/v8/src/ast/ast.h
+++ b/chromium/v8/src/ast/ast.h
@@ -180,9 +180,6 @@ class AstNode: public ZoneObject {
class Statement : public AstNode {
- public:
- bool IsJump() const;
-
protected:
Statement(int position, NodeType type) : AstNode(position, type) {}
@@ -342,11 +339,6 @@ class Block : public BreakableStatement {
inline ZonePtrList<const AstRawString>* labels() const;
- bool IsJump() const {
- return !statements_.is_empty() && statements_.last()->IsJump() &&
- labels() == nullptr; // Good enough as an approximation...
- }
-
Scope* scope() const { return scope_; }
void set_scope(Scope* scope) { scope_ = scope; }
@@ -689,7 +681,6 @@ class ExpressionStatement final : public Statement {
public:
void set_expression(Expression* e) { expression_ = e; }
Expression* expression() const { return expression_; }
- bool IsJump() const { return expression_->IsThrow(); }
private:
friend class AstNodeFactory;
@@ -702,9 +693,6 @@ class ExpressionStatement final : public Statement {
class JumpStatement : public Statement {
- public:
- bool IsJump() const { return true; }
-
protected:
JumpStatement(int pos, NodeType type) : Statement(pos, type) {}
};
@@ -850,11 +838,6 @@ class IfStatement final : public Statement {
void set_then_statement(Statement* s) { then_statement_ = s; }
void set_else_statement(Statement* s) { else_statement_ = s; }
- bool IsJump() const {
- return HasThenStatement() && then_statement()->IsJump()
- && HasElseStatement() && else_statement()->IsJump();
- }
-
private:
friend class AstNodeFactory;
@@ -2712,7 +2695,6 @@ class AstVisitor {
for (int i = 0; i < statements->length(); i++) {
Statement* stmt = statements->at(i);
Visit(stmt);
- if (stmt->IsJump()) break;
}
}
diff --git a/chromium/v8/src/ast/prettyprinter.cc b/chromium/v8/src/ast/prettyprinter.cc
index f2293ffd5de..a53d07064d5 100644
--- a/chromium/v8/src/ast/prettyprinter.cc
+++ b/chromium/v8/src/ast/prettyprinter.cc
@@ -783,6 +783,8 @@ const char* AstPrinter::PrintProgram(FunctionLiteral* program) {
{ IndentedScope indent(this, "FUNC", program->position());
PrintIndented("KIND");
Print(" %d\n", program->kind());
+ PrintIndented("LITERAL ID");
+ Print(" %d\n", program->function_literal_id());
PrintIndented("SUSPEND COUNT");
Print(" %d\n", program->suspend_count());
PrintLiteralIndented("NAME", program->raw_name(), true);
@@ -1034,6 +1036,8 @@ void AstPrinter::VisitDebuggerStatement(DebuggerStatement* node) {
void AstPrinter::VisitFunctionLiteral(FunctionLiteral* node) {
IndentedScope indent(this, "FUNC LITERAL", node->position());
+ PrintIndented("LITERAL ID");
+ Print(" %d\n", node->function_literal_id());
PrintLiteralIndented("NAME", node->raw_name(), false);
PrintLiteralIndented("INFERRED NAME", node->raw_inferred_name(), false);
// We don't want to see the function literal in this case: it
diff --git a/chromium/v8/src/heap/factory.cc b/chromium/v8/src/heap/factory.cc
index 2ffbf7d4a4a..f82d8937c32 100644
--- a/chromium/v8/src/heap/factory.cc
+++ b/chromium/v8/src/heap/factory.cc
@@ -489,9 +489,8 @@ Handle<ObjectBoilerplateDescription> Factory::NewObjectBoilerplateDescription(
Handle<FixedArrayBase> Factory::NewFixedDoubleArray(int length,
PretenureFlag pretenure) {
- DCHECK_LE(0, length);
if (length == 0) return empty_fixed_array();
- if (length > FixedDoubleArray::kMaxLength) {
+ if (length < 0 || length > FixedDoubleArray::kMaxLength) {
isolate()->heap()->FatalProcessOutOfMemory("invalid array length");
}
int size = FixedDoubleArray::SizeFor(length);
diff --git a/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc b/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc
index d205ac9bb42..b0f2de4dd7b 100644
--- a/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc
+++ b/chromium/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc
@@ -110,6 +110,9 @@ RegExpMacroAssemblerPPC::RegExpMacroAssemblerPPC(Isolate* isolate, Zone* zone,
internal_failure_label_() {
DCHECK_EQ(0, registers_to_save % 2);
+ // Because RegExp code respects C ABI, so needs a FD
+ __ function_descriptor();
+
__ b(&entry_label_); // We'll write the entry code later.
// If the code gets too big or corrupted, an internal exception will be
// raised, and we will exit right away.
diff --git a/chromium/v8/src/regexp/regexp-macro-assembler.cc b/chromium/v8/src/regexp/regexp-macro-assembler.cc
index 02f97bc0ee5..90f065e94fd 100644
--- a/chromium/v8/src/regexp/regexp-macro-assembler.cc
+++ b/chromium/v8/src/regexp/regexp-macro-assembler.cc
@@ -283,8 +283,9 @@ NativeRegExpMacroAssembler::Result NativeRegExpMacroAssembler::Execute(
int output_size, Address stack_base, int direct_call, Isolate* isolate);
auto fn = GeneratedCode<RegexpMatcherSig>::FromCode(code);
- int result = fn.Call(input.ptr(), start_offset, input_start, input_end,
- output, output_size, stack_base, direct_call, isolate);
+ int result =
+ fn.CallIrregexp(input.ptr(), start_offset, input_start, input_end, output,
+ output_size, stack_base, direct_call, isolate);
DCHECK(result >= RETRY);
if (result == EXCEPTION && !isolate->has_pending_exception()) {
diff --git a/chromium/v8/src/simulator.h b/chromium/v8/src/simulator.h
index 9342ac4987a..37e8fd4f12c 100644
--- a/chromium/v8/src/simulator.h
+++ b/chromium/v8/src/simulator.h
@@ -118,7 +118,10 @@ class GeneratedCode {
return Simulator::current(isolate_)->template Call<Return>(
reinterpret_cast<Address>(fn_ptr_), args...);
}
+
+ DISABLE_CFI_ICALL Return CallIrregexp(Args... args) { return Call(args...); }
#else
+
DISABLE_CFI_ICALL Return Call(Args... args) {
// When running without a simulator we call the entry directly.
#if V8_OS_AIX
@@ -135,7 +138,12 @@ class GeneratedCode {
return fn_ptr_(args...);
#endif // V8_OS_AIX
}
-#endif
+
+ DISABLE_CFI_ICALL Return CallIrregexp(Args... args) {
+ // When running without a simulator we call the entry directly.
+ return fn_ptr_(args...);
+ }
+#endif // USE_SIMULATOR
private:
friend class GeneratedCode<Return(Args...)>;
diff --git a/chromium/v8/src/snapshot/embedded-file-writer.cc b/chromium/v8/src/snapshot/embedded-file-writer.cc
index 63942878347..36a5f0e88b5 100644
--- a/chromium/v8/src/snapshot/embedded-file-writer.cc
+++ b/chromium/v8/src/snapshot/embedded-file-writer.cc
@@ -367,7 +367,7 @@ void PlatformDependentEmbeddedFileWriter::DeclareLabel(const char* name) {
void PlatformDependentEmbeddedFileWriter::SourceInfo(int fileid, int line) {
// TODO(mvstanton): output source information for MSVC.
- // It's syntax is #line <line> "<filename>"
+ // Its syntax is #line <line> "<filename>"
}
void PlatformDependentEmbeddedFileWriter::DeclareFunctionBegin(
@@ -471,6 +471,11 @@ void PlatformDependentEmbeddedFileWriter::DeclareLabel(const char* name) {
fprintf(fp_, "%s%s\n", SYMBOL_PREFIX, name);
}
+void PlatformDependentEmbeddedFileWriter::SourceInfo(int fileid, int line) {
+ // TODO(mvstanton): output source information for MSVC.
+ // Its syntax is #line <line> "<filename>"
+}
+
void PlatformDependentEmbeddedFileWriter::DeclareFunctionBegin(
const char* name) {
fprintf(fp_, "%s%s FUNCTION\n", SYMBOL_PREFIX, name);
@@ -486,6 +491,9 @@ int PlatformDependentEmbeddedFileWriter::HexLiteral(uint64_t value) {
void PlatformDependentEmbeddedFileWriter::FilePrologue() {}
+void PlatformDependentEmbeddedFileWriter::DeclareExternalFilename(
+ int fileid, const char* filename) {}
+
void PlatformDependentEmbeddedFileWriter::FileEpilogue() {
fprintf(fp_, " END\n");
}
diff --git a/chromium/v8/test/unittests/BUILD.gn b/chromium/v8/test/unittests/BUILD.gn
index 82a9f3a2735..77d503c7d4a 100644
--- a/chromium/v8/test/unittests/BUILD.gn
+++ b/chromium/v8/test/unittests/BUILD.gn
@@ -189,6 +189,7 @@ v8_source_set("unittests_sources") {
"parser/ast-value-unittest.cc",
"parser/preparser-unittest.cc",
"register-configuration-unittest.cc",
+ "regress/regress-crbug-938251-unittest.cc",
"run-all-unittests.cc",
"source-position-table-unittest.cc",
"strings-storage-unittest.cc",
diff --git a/chromium/v8/tools/whitespace.txt b/chromium/v8/tools/whitespace.txt
index c8a532697e8..1b70f466805 100644
--- a/chromium/v8/tools/whitespace.txt
+++ b/chromium/v8/tools/whitespace.txt
@@ -6,5 +6,5 @@ A Smi balks into a war and says:
"I'm so deoptimized today!"
The doubles heard this and started to unbox.
The Smi looked at them when a crazy v8-autoroll account showed up...
-The autoroller bought a round of Himbeerbrause. Suddenly.....
-The bartender starts to shake the bottles.....................
+The autoroller bought a round of Himbeerbrause. Suddenly.......
+The bartender starts to shake the bottles!