From 0078283f3cf586ae8a0d0df501a08e7440636b43 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 18 Mar 2019 14:18:40 +0100 Subject: BASELINE: Update Chromium to 73.0.3683.83 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie2948cebb1e9204f293fdf63c36d6215a5f5b507 Reviewed-by: Michael Brüning --- chromium/DEPS | 6 +- chromium/build/util/LASTCHANGE | 2 +- chromium/build/util/LASTCHANGE.committime | 2 +- chromium/chrome/VERSION | 2 +- .../chrome/app/resources/chromium_strings_te.xtb | 6 +- .../app/resources/generated_resources_ca.xtb | 2 +- .../app/resources/generated_resources_es-419.xtb | 4 +- .../app/resources/generated_resources_et.xtb | 2 +- .../app/resources/generated_resources_te.xtb | 214 ++++++++++----------- .../app/resources/google_chrome_strings_id.xtb | 2 +- .../app/resources/google_chrome_strings_ja.xtb | 2 +- .../app/resources/google_chrome_strings_te.xtb | 4 +- .../api/web_request/web_request_apitest.cc | 2 +- .../printing/print_preview_dialog_controller.cc | 24 ++- .../chrome/browser/printing/print_view_manager.cc | 26 ++- .../chrome/browser/printing/print_view_manager.h | 13 +- .../resources/plugin_metadata/plugins_linux.json | 6 +- .../resources/plugin_metadata/plugins_mac.json | 6 +- .../resources/plugin_metadata/plugins_win.json | 6 +- .../browser/resources/print_preview/new/app.js | 2 +- .../people_page/setup_fingerprint_dialog.html | 12 +- .../people_page/setup_fingerprint_dialog.js | 12 ++ .../resources/settings/settings_ui/settings_ui.js | 7 +- .../ui/webui/chromeos/login/gaia_screen_handler.cc | 4 +- .../browser/ui/webui/chromeos/login/oobe_ui.cc | 14 ++ .../browser/ui/webui/settings/md_settings_ui.cc | 13 +- .../browser/ui/webui/welcome/nux/constants.cc | 4 +- .../chrome/browser/ui/webui/welcome/nux_helper.cc | 3 +- .../common/extensions/api/_api_features.json | 2 +- chromium/chrome/common/url_constants.cc | 3 +- .../components/arc/metrics/arc_metrics_service.cc | 5 + .../arc/metrics/arc_metrics_service_unittest.cc | 14 ++ chromium/components/autofill_strings.grdp | 2 +- .../crash/content/app/crash_reporter_client.cc | 2 +- .../crash/content/app/crash_reporter_client.h | 2 +- .../components/crash/content/app/crashpad_linux.cc | 6 +- .../components/previews/content/previews_hints.cc | 12 +- .../previews/content/previews_hints_unittest.cc | 29 ++- .../content/previews_optimization_guide.cc | 17 +- .../previews_optimization_guide_unittest.cc | 22 ++- .../components/strings/components_strings_ca.xtb | 2 +- .../strings/components_strings_es-419.xtb | 2 +- .../components/strings/components_strings_te.xtb | 94 ++++----- .../frame_sinks/compositor_frame_sink_support.cc | 7 + .../frame_sinks/compositor_frame_sink_support.h | 9 +- .../browser/download/download_manager_impl.cc | 66 ++++++- .../browser/frame_host/render_frame_host_impl.cc | 6 +- .../browser/loader/navigation_url_loader_impl.cc | 26 +-- .../browser/media/hardware_key_media_controller.cc | 12 +- .../browser/media/hardware_key_media_controller.h | 13 +- .../content/browser/network_service_instance.cc | 25 +++ .../platform_notification_context_impl.cc | 2 +- .../renderer_host/render_process_host_impl.cc | 4 + .../renderer_host/render_process_host_impl.h | 1 + .../service_worker/embedded_worker_instance.cc | 5 +- .../browser/tracing/tracing_controller_impl.cc | 5 +- .../webrtc/webrtc_video_capture_browsertest.cc | 19 +- chromium/content/common/child.mojom | 6 +- .../common/service_manager/child_connection.cc | 13 ++ .../common/service_manager/child_connection.h | 3 + .../service_manager_connection_impl.cc | 3 + chromium/content/common/throttling_url_loader.cc | 8 +- .../public/browser/content_browser_client.cc | 1 + .../public/browser/content_browser_client.h | 12 +- .../content/public/browser/render_process_host.h | 3 + chromium/content/public/common/content_features.cc | 13 +- chromium/content/public/common/url_utils.cc | 3 +- .../stream/media_stream_constraints_util_audio.cc | 3 +- ...media_stream_constraints_util_audio_unittest.cc | 26 ++- chromium/device/fido/fido_test_data.h | 2 + chromium/device/fido/u2f_register_operation.cc | 1 + .../device/fido/u2f_register_operation_unittest.cc | 10 +- .../media_perception_api_manager.cc | 6 - .../browser/api/web_request/web_request_api.cc | 3 +- .../browser/api/web_request/web_request_api.h | 1 + .../browser/api/web_request/web_request_info.cc | 3 + .../browser/api/web_request/web_request_info.h | 1 + .../api/web_request/web_request_info_unittest.cc | 2 +- .../web_request_proxying_url_loader_factory.cc | 18 +- .../web_request_proxying_url_loader_factory.h | 5 + .../web_request/web_request_proxying_websocket.cc | 3 +- chromium/extensions/browser/extension_host.cc | 28 +-- .../browser/url_loader_factory_manager.cc | 71 +++++++ .../shell/browser/shell_content_browser_client.cc | 5 +- .../shell/browser/shell_content_browser_client.h | 1 + chromium/gpu/config/gpu_lists_version.h | 2 +- .../gpu/ipc/client/command_buffer_proxy_impl.cc | 5 +- chromium/gpu/ipc/service/gpu_channel.cc | 1 + .../video/chromeos/stream_buffer_manager.cc | 1 + .../ffmpeg_h265_to_annex_b_bitstream_converter.cc | 2 +- chromium/media/filters/gpu_video_decoder.cc | 4 + chromium/media/formats/mp4/avc.cc | 12 +- chromium/media/formats/mp4/avc.h | 2 +- .../client/gpu_video_decode_accelerator_host.cc | 1 + chromium/media/gpu/ipc/common/media_messages.h | 1 + .../ipc/service/gpu_video_decode_accelerator.cc | 1 + .../gpu/ipc/service/picture_buffer_manager.cc | 4 + .../media/gpu/ipc/service/vda_video_decoder.cc | 72 +++++-- chromium/media/gpu/ipc/service/vda_video_decoder.h | 5 +- .../gpu/ipc/service/vda_video_decoder_unittest.cc | 4 +- .../media/gpu/vt_video_decode_accelerator_mac.cc | 18 +- chromium/media/video/picture.cc | 1 + chromium/media/video/picture.h | 11 +- chromium/net/dns/fuzzed_host_resolver.cc | 18 +- chromium/net/dns/mdns_client.cc | 47 ++--- chromium/net/dns/mdns_client.h | 35 ++-- chromium/net/dns/mdns_client_impl.cc | 84 +++----- chromium/net/dns/mdns_client_impl.h | 11 +- chromium/net/dns/mdns_client_unittest.cc | 124 ++++++------ chromium/net/dns/mock_mdns_socket_factory.cc | 76 +++----- chromium/net/dns/mock_mdns_socket_factory.h | 99 ++-------- chromium/net/dns/public/util.cc | 11 +- chromium/net/dns/public/util.h | 4 +- .../syscall_parameters_restrictions.cc | 8 +- .../services/media_session/media_controller.cc | 23 ++- chromium/services/media_session/media_controller.h | 6 +- .../media_session/media_controller_unittest.cc | 92 ++++++--- .../media_session/public/cpp/media_metadata.cc | 5 + .../media_session/public/cpp/media_metadata.h | 3 + .../public/mojom/media_controller.mojom | 21 +- chromium/services/network/mdns_responder.cc | 80 +++----- .../services/network/mdns_responder_unittest.cc | 69 +++---- chromium/services/network/network_service.cc | 21 +- chromium/services/network/network_service.h | 2 + .../network/public/mojom/network_service.mojom | 15 ++ .../tracing/public/cpp/traced_process_impl.cc | 6 + .../tracing/public/cpp/traced_process_impl.h | 3 + chromium/skia/ext/skia_commit_hash.h | 2 +- .../variations/fieldtrial_testing_config.json | 8 +- .../core/html/canvas/html_canvas_element.cc | 3 + .../renderer/core/layout/layout_block_flow.cc | 37 ++++ .../blink/renderer/core/layout/layout_block_flow.h | 27 +-- .../core/layout/ng/inline/ng_inline_node.cc | 20 +- .../core/layout/ng/inline/ng_inline_node.h | 2 + .../layout/ng/inline/ng_offset_mapping_test.cc | 1 - .../blink/renderer/core/loader/frame_loader.cc | 10 +- .../core/offscreencanvas/offscreen_canvas.cc | 3 + .../renderer/core/streams/CommonOperations.js | 96 +++++++-- .../blink/renderer/core/streams/ReadableStream.js | 50 ++--- .../blink/renderer/core/streams/TransformStream.js | 21 +- .../blink/renderer/core/streams/WritableStream.js | 82 ++++---- .../loader/fetch/resource_load_scheduler.cc | 32 ++- .../loader/fetch/resource_load_scheduler.h | 7 + .../skia/src/core/SkGlyphRunPainter.cpp | 3 +- .../third_party/skia/src/core/SkScalerContext.h | 10 +- .../third_party/skia/src/ports/SkFontHost_mac.cpp | 23 ++- chromium/tools/metrics/histograms/histograms.xml | 22 ++- .../traffic_annotation/summary/annotations.xml | 2 - .../ui/android/delegated_frame_host_android.cc | 2 +- .../delegated_frame_host_android_unittest.cc | 9 +- chromium/ui/gl/gl_image_io_surface_egl.mm | 14 +- chromium/ui/gl/yuv_to_rgb_converter.cc | 20 ++ chromium/ui/gl/yuv_to_rgb_converter.h | 1 + chromium/ui/strings/translations/ui_strings_te.xtb | 2 +- .../ui/views_bridge_mac/views_nswindow_delegate.mm | 12 ++ .../managed_footnote/managed_footnote.js | 4 +- chromium/v8/include/v8-version.h | 2 +- chromium/v8/src/arm64/assembler-arm64.cc | 6 + chromium/v8/src/arm64/assembler-arm64.h | 5 +- chromium/v8/src/ast/ast-traversal-visitor.h | 1 - chromium/v8/src/ast/ast.cc | 20 -- chromium/v8/src/ast/ast.h | 18 -- chromium/v8/src/ast/prettyprinter.cc | 4 + chromium/v8/src/heap/factory.cc | 3 +- .../src/regexp/ppc/regexp-macro-assembler-ppc.cc | 3 + chromium/v8/src/regexp/regexp-macro-assembler.cc | 5 +- chromium/v8/src/simulator.h | 10 +- chromium/v8/src/snapshot/embedded-file-writer.cc | 10 +- chromium/v8/test/unittests/BUILD.gn | 1 + chromium/v8/tools/whitespace.txt | 4 +- 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 @@ మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున, Chromium OS, మీ డేటాను సింక్ చేయ‌లేక‌పోయింది. ఇది కనిపిస్తే, అయిన కూడా మార్చును క్లిక్ చేయండి Chromium నుండి మీ ఖాతాను తీసివేసిన తర్వాత, ప్రభావవంతం కావడానికి మీరు మీ తెరిచిన ట్యాబ్‌లను మళ్లీ లోడ్ చేయాల్సి రావచ్చు. -మీ వ్యక్తిగతీకరించిన బ్రౌజర్ ఫీచ‌ర్‌ల‌ను వెబ్‌లో సేవ్ చేయడానికి సమకాలీకణను సెటప్ చేయండి. వాటిని ఏదైనా కంప్యూటర్‌లోని Chromium నుండి యాక్సెస్‌ చేయండి. +వెబ్‌కు మీ వ్యక్తిగతీకరించిన బ్రౌజర్ ఫీచర్‌లను సేవ్ చేసి, వాటిని ఏదైనా కంప్యూటర్‌లోని Chromium నుండి యాక్సెస్ చేయడానికి సింక్‌ను సెటప్ చేయండి. Chromium యొక్క కొత్త సురక్షితమైన వెర్షన్ అందుబాటులో ఉంది. అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు నేపథ్యంలో Chromiumని అమలు చేయడానికి అనుమతించు @@ -207,7 +207,7 @@ దయచేసి తదుపరి సూచనల కోసం లో మీ ఇమెయిల్‌ను చూడండి. Chromium OSని మళ్లీ ప్రారంభించండి - Chromium Dev -ఈ సైట్ కోసం మీ కెమెరాని యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం +ఈ సైట్ కోసం మీ కెమెరాను యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం {0,plural, =1{ఒక రోజులో Chromium OSని మళ్లీ ప్రారంభించండి}other{# రోజుల్లో Chromium OSని మళ్లీ ప్రారంభించండి}} ప్రస్తుతం అమలు అవుతోన్న అదే Chromium వెర్షన్‌ను ఇన్‌స్టాల్ చేయలేరు. దయచేసి Chromiumను మూసివేసి, మళ్లీ ప్రయత్నించండి. Chromium OS గురించి @@ -266,7 +266,7 @@ Chromium కాలం చెల్లినది కొత్త Chromium &ట్యాబ్‌లో లింక్‌ని తెరువు మీ బ్రౌజింగ్ డేటాను కూడా తొలగించాలా? -ని డిస్‌కనెక్ట్ చేయడం వలన ఈ పరికరంలో నిల్వ చేయబడిన మీ చరిత్ర, బుక్‌మార్క్‌లు, సెట్టింగ్‌లు, ఇతర Chromium డేటా క్లియర్ చేయబడతాయి. మీ Google ఖాతాలో నిల్వ చేయబడిన డేటా క్లియర్ చేయబడదు. దాన్ని Google డాష్‌బోర్డ్లో నిర్వహించవచ్చు. +ను డిస్‌కనెక్ట్ చేయడం వలన ఈ పరికరంలో నిల్వ చేయబడిన మీ చరిత్ర, బుక్‌మార్క్‌లు, సెట్టింగ్‌లు మరియు ఇతర Chromium డేటా క్లియర్ చేయబడతాయి. మీ Google ఖాతాలో నిల్వ చేయబడిన డేటా క్లియర్ చేయబడదు మరియు దాన్ని Google డాష్‌బోర్డ్లో నిర్వహించవచ్చు. Chromium (mDNS-In) మీరు ఇప్పుడు Chromiumకు సైన్ ఇన్ చేసారు Chromiumకి ఇప్పుడు Windows XP లేదా Windows Vistaలో మద్దతు లేనందున ఇది సరిగ్గా పని చేయకపోవచ్చు 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 @@ Les galetes del domini s'esborraran en sortir-ne (iframe) Només les connexions segures dins del mateix lloc -Contacteu immediatament amb el fabricant del maquinari per enviar l'ordinador a un taller de reparació. +Contacteu immediatament amb el fabricant del maquinari per enviar l'ordinador a un centre de reparació. Dispositius MIDI Torna a iniciar ara Component actualitzat 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 @@ Accediste al modo de video Conservar Puntos de distribución de la CRL -Avanzada +Configuración avanzada Conectarse a una red Se puede editar Eliminar… @@ -1854,7 +1854,7 @@ {NUM_TABS,plural, =1{Silenciar pestaña}other{Silenciar pestañas}} Mostrar acceso directo a las aplicaciones Se guardaron contraseñas para este sitio -No estás conectado. +No tienes conexión. Podría: Instalar La tarjeta está vencida 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 @@ Võimaldab lubada/keelata funktsioonid Koputa klõpsamiseks ja Puudutusega lohistamine Peida pistikprogramm Keskmine (soovitatud) -Kasuta võimaluse korral riistvarakiirendust +Kasuta võimaluse korral riistvaralist kiirendust Hoiata enne väljumist () Kui kustutate ühe enda sertifikaatidest, ei saa te enam seda enda tuvastamiseks kasutada. Võta tagasi 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 @@ థీమ్‌ను ప్రారంభించు Microsoft Internet Explorer ఎల్లప్పుడూ కెమెరా యాక్సెస్‌ను బ్లాక్ చేయి - మీ Chrome సెట్టింగ్‌లను వాటి అసలు డిఫాల్ట్‌లకు పునరుద్ధరించాలనుకుంటోంది. ఇది మీ హోమ్ పేజీని, కొత్త ట్యాబ్ పేజీని, శోధన ఇంజిన్‌ను రీసెట్ చేస్తుంది. మీ ఎక్స్‌టెన్ష‌న్‌లను నిలిపివేస్తుంది. ట్యాబ్‌లన్నింటినీ అన్‌పిన్ చేస్తుంది. ఇది కుక్కీలు, కంటెంట్, సైట్ డేటా వంటి ఇతర తాత్కాలిక మరియు కాష్ చేసిన డేటాను కూడా తీసివేస్తుంది. + మీ Chrome సెట్టింగ్‌లను వాటి అసలు డిఫాల్ట్‌లకు పునరుద్ధరించాలనుకుంటోంది. ఇది మీ హోమ్ పేజీని, కొత్త ట్యాబ్ పేజీని మరియు శోధన ఇంజిన్‌ను రీసెట్ చేస్తుంది, మీ ఎక్స్‌టెన్షన్‌లను నిలిపివేస్తుంది మరియు ట్యాబ్‌లు అన్నింటినీ అన్‌పిన్ చేస్తుంది. ఇది కుక్కీలు, కంటెంట్ మరియు సైట్ డేటా వంటి ఇతర తాత్కాలిక మరియు కాష్ చేసిన డేటాను కూడా తీసివేస్తుంది. ఆఫ్‌లైన్ ఫైల్‌లు -లింక్ చిరు&నామాను కాపీ చెయ్యి +లింక్ చిరు&నామాను కాపీ చేయి వర్చువల్ మెషిన్‌ను ప్రారంభించడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి. పాస్‌వర్డ్‌ని మార్చు నేపథ్య అనువర్తనాలు ఏవి అమలులో లేవు @@ -77,7 +77,7 @@ బ్యాక్‌గ్రౌండ్‌ ట్యాబ్ బ్లూటూత్‌ను ఉపయోగిస్తోంది (USB) చతుర్భుజం -మీ కంప్యూటర్ ట్రస్టెడ్ ప్లాట్‌ఫారమ్ మాడ్యూల్ (TPM) భద్రతా పరికరాన్ని కలిగి ఉంది. ఇది Chrome OSలో అనేక కీలకమైన భద్రతా ఫీచ‌ర్‌ల‌ను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm +మీ కంప్యూటర్ ట్రస్టెడ్ ప్లాట్‌ఫారమ్ మాడ్యూల్ (TPM) భద్రతా పరికరాన్ని కలిగి ఉంది, ఇది Chrome OSలో అనేక కీలకమైన భద్రతా ఫీచ‌ర్‌ల‌ను అమలు చేయడానికి ఉపయోగించబడుతుంది. మరింత తెలుసుకోవడానికి Chromebook సహాయ కేంద్రాన్ని సందర్శించండి: https://support.google.com/chromebook/?p=tpm మూత మూసి ఉన్నప్పుడు స్లీప్ స్థితికి వెళ్లు మీ గుర్తింపును ధృవీకరించడం సాధ్యపడలేదు గురించి @@ -101,7 +101,7 @@ మీరు సందర్శించే ఏ పేజీలో అయినా కంటెంట్‌ని బ్లాక్ చేయండి సర్టిఫికెట్ సంతకందారు ప్లగ్ఇన్‌ బ్లాక్ చేయబడింది -మీ పరికరం, యాప్‌లు మరియు వెబ్‌ను వెతకండి. +మీ పరికరం, యాప్‌లు మరియు వెబ్‌ను శోధించండి. HTML ఫైల్ నుండి బుక్‌మార్క్‌లను దిగుమతి చేయి... Chromeలో Google స్మార్ట్‌లను పొందండి కనుగొనబడ్డాయి. @@ -137,7 +137,7 @@ హానికరమైన సాఫ్ట్‌వేర్‌ని తీసివేయండి ఇన్‌యాక్టివ్‌ మేల్కొలుపులు లాగ్ అప్‌లోడ్ కాలేదు. -మీ పరికరాన్ని సులభంగా ఉపయోగించడానికి యాక్సెస్‌ సౌల‌భ్య‌ ఫీచ‌ర్‌ల‌ను ప్రారంభించండి. +మీ పరికరాన్ని సులభంగా ఉపయోగించడానికి యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను ప్రారంభించండి. ఈ ఫైల్‌ను పొందడానికి మొబైల్ డేటాలో సుమారుగా ఉపయోగించబడుతుంది. {NUM_FILES,plural, =1{మీ కంప్యూటర్‌లో నిల్వ చేసిన ఫైల్‌ను యాక్సెస్ చేయండి}other{ మీ కంప్యూటర్‌లో నిల్వ చేసిన # ఫైల్‌లను యాక్సెస్ చేయండి}} ద్వారా సంస్థ నిర్వహణకు మీ విజయవంతంగా నమోదు చేయబడింది. @@ -155,11 +155,11 @@ అజ్ఞాత విండోలో మీ బ్రౌజింగ్ చరిత్రను సేవ్ చేయకుండానే వెబ్‌ని ఉపయోగించండి వేలిముద్రలు సెటప్ చేయబడ్డాయి కొత్త బ్యాక్‌గ్రౌండ్‌ యాప్ జోడించబడింది -మమ్మల్ని క్షమించండి. మేము మీ ప్రొఫైల్‌ను యాక్సెస్ చేయలేకపోయాము. ఈ పరికరంలో అయిన ఫైల్‌లు మరియు డేటా కోల్పోయి ఉండవచ్చు. +మమ్మల్ని క్షమించండి. మేము మీ ప్రొఫైల్‌ను యాక్సెస్‌ చేయలేకపోయాము. ఈ పరికరంలో నిల్వ చేయబడిన ఫైల్‌లు మరియు డేటా కోల్పోయి ఉండవచ్చు. మీరు మీ ప్రొఫైల్‌ను మళ్లీ సెటప్ చేయాల్సి ఉంటుంది. - ఈ సమస్యను పరిష్కరించడంలో మాకు సహాయపడటానికి, దయచేసి మీ అభిప్రాయాన్ని తర్వాతి స్క్రీన్‌లో పంపండి. + తదుపరి స్క్రీన్‌లో, దయచేసి ఈ సమస్యను పరిష్కరించడంలో మాకు సహాయపడటానికి అభిప్రాయాన్ని పంపండి. చర్య తర్వాత తిరిగి ఎడమ క్లిక్ వద్దకు మారు పాస్‌‌వర్డ్‌లు సరిపోలలేదు. ఈ పరికర స్థానాన్ని అంచనా వేయడంలో సహాయపడటానికి Wi‑Fi, మొబైల్ నెట్‌వర్క్‌లు మరియు సెన్సార్‌ల వంటి మూలాధారాలను Google స్థాన సేవ ఉపయోగిస్తుంది. @@ -200,7 +200,7 @@ మీ అన్ని విండోలను మూసివేయండి పరికర జాబితాను చూడండి మొబైల్ నెట్‌వర్క్‌ల కోసం వెతుకుతోంది -ఈ సైట్‌ను అనువదించవద్దు +ఈ సైట్‌ను ఎప్పటికీ అనువదించవద్దు మీ Google డిస్క్ ఖాతాలో డేటాను నిల్వ చేయండి సూర్యాస్తమయ సమయానికి రాత్రి కాంతి స్వయంచాలకంగా ఆన్ అవుతుంది ప్రసంగ లక్షణాలు @@ -215,7 +215,7 @@ HTML ఫైల్‌ని బుక్‌మార్క్ చేస్తుంది బ్లూటూత్ పరికరాలు ఏవీ కనుగొనబడలేదు సెట్టింగ్‌లను మార్చు -అయ్యో! సిస్టమ్ ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్ టోకెన్‌ను నిల్వ చేయడంలో విఫలమైంది. +అయ్యో! సిస్టమ్ ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్‌ టోకెన్‌ను నిల్వ చేయడంలో విఫలమైంది. Linux ఫైల్‌లను చూడటం సాధ్యపడలేదు ఆటోమేటిక్‌ ప్రాక్సీ కాన్ఫిగరేషన్ Caps Lock @@ -277,7 +277,7 @@ (పర్యవేక్షించబడేవారు) ధృవీకరిస్తోంది... మధ్యకు కత్తిరించు -ఫైల్‌ల‌ యాప్‌‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు. +ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. కంటెంట్‌ను నిర్వాహకులు పరిమితం చేశారు మరియు దాన్ని సవరించడం సాధ్యపడదు. అధునాతన... పర్యవేక్షించబడే వినియోగదారుని సృష్టించు యాప్ చిహ్నం @@ -285,7 +285,7 @@ VRలో Chromeను ఉపయోగించడానికి Daydream కీబోర్డ్‌ను ఇన్‌స్టాల్ చేయండి లేదా అప్‌డేట్ చేయండి మీరు యొక్క అస్థిర వెర్షన్‌కు అప్‌డేట్ చేస్తున్నారు, ఇందులో పురోగతిలో ఉన్న ఫీచర్‌లు ఉంటాయి. క్రాష్‌లు మరియు ఊహించని బగ్‌లు ఏర్పడవచ్చు. దయచేసి జాగ్రత్తగా కొనసాగండి. క్లిప్‌బోర్డ్‌ను చదివే యాక్సెస్ నిరాకరించబడింది - (ఎక్స్‌టెన్షన్‌ ID "") ఈ రకమైన సెషన్‌లో అనుమతించబడదు. + (ఎక్స్‌టెన్షన్ ID "")కు ఈ రకమైన సెషన్‌లో అనుమతి లేదు. EAP-MD5 మీడియా లైసెన్స్‌లు జత చేయడాన్ని అనుమతించడానికి @@ -471,7 +471,7 @@ సైట్ డేటాని క్లియర్ చేయాలా? అక్షరాన్ని టైప్ చేయండి సమీపంలోని ప్రింటర్‌ను జోడించండి -&URLని కాపీ చేయండి +&URLను కాపీ చేయండి మరో ఖాతాను ఉపయోగించు అయ్యో, ఏదో తప్పు జరిగింది బహుళ సైట్‌ల నుండి కుకీలు అనుమతించబడ్డాయి. @@ -575,7 +575,7 @@ శోధనను తీసివేయి Google సైట్ ఈ ఫైల్ భాగస్వామ్యం చేయబడే విధానాన్ని మార్చండి -పరికర నిర్వాహకుడు క్రింది వాటిని పర్యవేక్షించవచ్చు: +పరికర నిర్వాహకుడు కింది వాటిని పర్యవేక్షించవచ్చు: పరికర రికార్డ్ కనుగొనబడటం లేదు. నిలిపివేయబడింది మీరు ఖచ్చితంగా డెమో మోడ్‌ని ప్రారంభించాలనుకుంటున్నారా? @@ -653,7 +653,7 @@ అప్‌డేట్ కనుగొనబడింది షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మీ ఆధారాలను సరిచూసుకుని, మళ్లీ ప్రయత్నించండి. ఫైల్ బహుళ ప్రమాణపత్రాలను కలిగి ఉంది, వీటిలో ఏది దిగుమతి చెయ్యబడింది: -ఇది "" నుండి అన్ని ఫైల్‌లను అప్‌లోడ్ చేస్తుంది. మీరు సైట్‌ను విశ్వసిస్తే మాత్రమే దీన్ని చేయండి. +ఇది "" నుండి అన్ని ఫైల్‌లను అప్‌లోడ్ చేస్తుంది. మీరు సైట్‌ను విశ్వసిస్తే మాత్రమే దీనిని చేయండి. ఈ పేజీ మీ కంప్యూటర్‌లో పని చేయని స్థానిక క్లయింట్ యాప్‌ను ఉపయోగిస్తుంది. స్క్రీన్‌ను లాక్ చేయి అన్నీ తొలగించు @@ -670,7 +670,7 @@ బహుళ సైట్‌ల నుండి కుకీలు బ్లాక్ చేయబడ్డాయి. మీ ను అన్‌లాక్ చేయడానికి మీ ఫోన్‌ను సమీపంలోకి తీసుకురండి. మీరు పాత వెర్షన్ ఉన్న ఛానెల్‌కు మారుతున్నారు. ఈ ఛానెల్ వెర్షన్, మీ పరికరంలో ప్రస్తుతం ఇన్‌స్టాల్ అయిన వెర్షన్‌కు సరిపోలినప్పుడు ఛానెల్ మార్పు వర్తిస్తుంది. -మీరు క్రొత్త పర్యవేక్షించబడే వినియోగదారును సృష్టించిన తర్వాత, ఏ సమయంలో అయినా ఏ పరికరం నుండి అయినా లో సెట్టింగ్‌లను నిర్వహించవచ్చు. +మీరు కొత్త‌ పర్యవేక్షించబడే వినియోగదారును సృష్టించిన తర్వాత, ఏ సమయంలో అయినా ఏ పరికరం నుండి అయినా లో సెట్టింగ్‌లను నిర్వహించవచ్చు. ఖాతాలు బ్రౌజ్ చేయి సెట్ చెయ్యలేదు @@ -702,7 +702,7 @@ Microsoft సర్టిఫికెట్ టెంప్లేట్ పేరు కీబోర్డ్ షార్ట్‌కట్ సహాయం కుకీలను నిరోధించడాన్ని కొనసాగించండి -మీ పరికరం మునుపు ఇన్‌స్టాల్ చేసిన Chrome వెర్షన్‌కు తిరిగి మార్చబడింది. అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడతాయి. దీనిని రద్దు చేయడం సాధ్యపడదు. +మీ పరికరం మునుపు ఇన్‌స్టాల్ చేసిన Chrome వెర్షన్‌కు తిరిగి మార్చబడింది. అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడుతుంది. దీన్ని రద్దు చేయడం సాధ్యపడదు. మీ నెట్‌వర్క్ ట్రాఫిక్‌ను యాక్సెస్ చేయండి చర్య అందుబాటులో లేదు షార్ట్‌కట్‌ను సృష్టించు @@ -875,7 +875,7 @@ ఆటోకాన్ఫిగరేషన్ URL: యాప్‌లు వీడియో రికార్డర్‌కు మార్చు -ప్రాప్యత సెట్టింగ్‌లు +యాక్సెస్‌ సెట్టింగ్‌లు ఫైల్‌లను తెరుస్తోంది. ని ఒక సాధారణ వినియోగదారుగా దయచేసి ప్రారంభించండి. డెవలపర్‌గా వాడటానికి మీరు రూట్ లాగా అమలు చేయాలనుకుంటే, --no-sandbox ఫ్లాగ్‌తో మళ్లీ అమలు చేయండి. మీరు ను ఇన్‌స్టాల్ చేయాల‌నుకుంటున్నారా? @@ -1088,7 +1088,7 @@ రోజూ రిఫ్రెష్ అవుతుంది Google డిస్క్‌ను ఈ సమయంలో చేరుకోవడం సాధ్యపడదు. సిస్టమ్ -ప్రోటోకాల్స్ నిర్వహించడానికి ఏ సైట్‌ని అనుమతించవద్దు +ప్రోటోకాల్స్ నిర్వహించడానికి ఏ సైట్‌నూ అనుమతించవద్దు ఈ పేజీ మీ కెమెరా మరియు మైక్రోఫోన్‌ను ప్రాప్యత చేస్తోంది. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి. ప్రారంభించడానికి Wi-Fiకి కనెక్ట్ చేయండి @@ -1172,14 +1172,14 @@ కుదించు... తరువాత కాదు డీబగ్ -మీ ప్రాప్యత సెట్టింగ్‌లను మార్చడం +మీ యాక్సెస్‌ సెట్టింగ్‌లను మార్చడం పర్యవేక్షించబడే వినియోగదారు సందర్శించిన వెబ్‌సైట్‌లను సమీక్షించండి మరియు క్లిప్‌బోర్డ్‌కు కాపీ చేయి Microsoft Qualified Subordination కు సైన్ ఇన్ చేయండి స్పెల్ చెక్‌తో పాటు వ్యాకరణాన్ని కూడా తనిఖీ చేయి EAP 2వ దశ ప్రమాణీకరణ -ప్రాప్యత లక్షణాలను నిర్వహించండి +యాక్సెస్‌ ఫీచ‌ర్‌ల‌ను నిర్వహించండి మీ భద్రతా కీ కనుక జాబితా చేయబడకుంటే, కనీసం 5 సెకన్ల పాటు కీ బటన్‌ని నొక్కండి. స్క్రీన్ ఆఫ్‌లో ఉంది మరో ఖాతాను ఉపయోగించు @@ -1319,7 +1319,7 @@ ఫర్మ్‌వేర్ &పునరావృతం ముఖ్యమైన కంటెంట్‌ను మాత్రమే అమలు చేయి (సిఫార్సు చేస్తున్నాము) -సైట్‌ని మ్యూట్ చేయండి +సైట్‌ను మ్యూట్ చేయండి గుంపు నుండి తీసివేయి కొత్త విండోలో తెరువు పెద్ద మౌస్ కర్సర్‌ను చూపు @@ -1394,16 +1394,16 @@ మీ భద్రత నిమిత్తం తాత్కాలికంగా బ్లాక్ చేయబడింది ఇన్‌స్టాల్ చేయడానికి వదలండి Chrome మెమరీ దాటిపోయి ఉండవచ్చు లేదా వేరొక కారణంచేత ఆ వెబ్‌పేజీ ప్రాసెస్ ముగించబడి ఉండవచ్చు. కొనసాగించడానికి మళ్లీ లోడ్ చేయండి లేదా మరొక పేజీకి వెళ్ళండి. -సైట్ మీ కెమెరాని ఉపయోగించవచ్చు +సైట్ మీ కెమెరాను ఉపయోగించవచ్చు SOCKS హోస్ట్ &పేరుమార్చు... శోధన తీసివేయబడింది ఆడియో, వీడియో ఇన్‌పుట్ యాక్సెస్‌ చేయబడుతోంది -బాహ్య crx ఫైల్‌ను కి కాపీ చేయడం సాధ్యపడదు. +బాహ్య crx ఫైల్‌ను ‌కు కాపీ చేయడం సాధ్యపడదు. "" జత చేయబడింది తేదీ మరియు సమయం కార్యకలాప లాగ్ -సైట్, బ్లూటూత్‌ను ఉపయోగిస్తోంది +సైట్ బ్లూటూత్‌ను ఉపయోగిస్తోంది మీ ఫోన్‌ను కనుగొనలేము. అది చేతికి అందేంత దగ్గర్లో ఉందని, బ్లూటూత్ ఆన్ చేసి ఉన్నట్లు నిర్ధారించుకోండి. కాష్ కోసం వేచి ఉంది... సహాయం @@ -1413,7 +1413,7 @@ డేటా డైరెక్టరీని సృష్టించడంలో విఫలమైంది వినియోగదారు నిర్వహించేవి Ctrl -దీని వలన చూపబడిన అన్ని సైట్‌ల కోసం మీ పరికరంలో నిల్వ చేయబడిన ఏ డేటా అయినా తొలగిం +దీని వలన చూపబడిన అన్ని సైట్‌ల కోసం మీ పరికరంలో నిల్వ చేయబడిన ఏ డేటా అయినా తొలగించబడుతుంది. మీరు కొనసాగించదలిచారా? ప్రమాణీకరిస్తోంది... ఎడమ సరిహద్దు మీ పరికరం రీసెట్ చేయబడుతుంది మరియు అన్ని వినియోగదారు ఖాతాలు మరియు స్థానిక డేటా తీసివేయబడుతుంది. దీన్ని రద్దు చేయడం సాధ్యపడదు. @@ -1433,7 +1433,7 @@ ప్రారంభ సమయం చరిత్ర, కుక్కీలు, కాష్ మొదలైన వాటిని తీసివేస్తుంది దృగ్విన్యాసం -కార్డ్‌ని సేవ్ చేయండి +కార్డ్‌ను సేవ్ చేయండి పరికర నిర్వాహకుడు మీ బ్రౌజింగ్ కార్యకలాపాన్ని పర్యవేక్షించవచ్చు. నెలకు పైగా ఆఫ్‌లైన్‌లో ఉంది Chromeను ఉపయోగించడానికి, దయచేసి సైన్ ఇన్ చేయండి @@ -1465,7 +1465,7 @@ జిప్ ఆర్కైవర్ Linux అన్ఇన్‌స్టాలర్ కనెక్టర్ విధానం క్రాష్ అయ్యింది. పునఃప్రారంభించాలా? -ఫైల్స్ యాప్‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. +ఫైల్స్ యాప్‌‌లో పరికర కంటెంట్‌ను విశ్లేషించండి. ప్రిరెండర్: డిఫాల్ట్ ఊదా రంగు అవతార్ కోడ్ సైనింగ్ @@ -1493,14 +1493,14 @@ చిత్రాన్ని లోడ్ చేయి డిఫ్‌ను డౌన్‌లోడ్ చేస్తోంది మీ కంప్యూటర్‌లోని ఫోటోలు, సంగీతం మరియు ఇతర మీడియాని చదవడం, మార్చడం మరియు తొలగించడం -మొత్తం కుక్కీలు మరియు సైట్ డేటాని చూడండి +మొత్తం కుక్కీలు మరియు సైట్ డేటాను చూడండి దీనికి కనెక్ట్ చేయాలనుకుంటోంది మీరు పూర్తి స్క్రీన్‌కు వెళ్ళారు. విండో వలె తెరవండి మీ Google ఖాతా లేదా ఖాతాలను జాగ్రత్తగా గమనించాలి ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. వర్చ్యువల్ మెషీన్‌ను ప్రారంభిస్తోంది. ఇందులో పూర్తి స్క్రీన్ వీడియోలను చూపించండి -&ఇలా సేవ్ చెయ్యి +ఇలా సేవ్ &చేయి... Chromeలోనే కొనసాగించు సిద్ధం చేస్తోంది నిరోధించాల్సిన ఫైల్‌లు, ప్రోగ్రామ్‌లు: @@ -1567,7 +1567,7 @@ సైన్ ఇన్ చేయండి, ఇన్‌పుట్ అంశాలతో పరస్పర చర్య చేయడానికి ట్యాబ్ కీని నొక్కండి వ్యవస్థాపించబడుతుంది. తెలియని ఎర్రర్ -అయ్యో! ఈ పరికరం కోసం పరికర ఐడెంటిఫైయర్‌లను నిర్ణయించడంలో సిస్టమ్ విఫలమైంది. +అయ్యో! ఈ పరికరం కోసం పరికర ఐడెంటిఫైయర్‌లను నిశ్చయించడంలో సిస్టమ్ విఫలమైంది. మీరు నిర్వహించే ఖాతా త్వరలో తీసివేయబడుతుంది పర్యవేక్షణను ఆపివేస్తోంది... % @@ -1745,7 +1745,7 @@ Netscape సర్టిఫికెట్ పునరుద్ధరణ సమయం ను ఇన్‌స్టాల్ చేయి... మీ ఫోన్ -ఈ సైట్‌ని ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ అరకి జోడించండి +ఈ సైట్‌ను ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ 'అర'కు జోడించండి హాయ్, . % - మిగిలి ఉంది మీరు సరైన PIN అన్‌లాక్ కీని నమోదు చేయకపోతే, మీ SIM కార్డ్ శాశ్వతంగా నిలిపివేయబడుతుంది. @@ -1762,7 +1762,7 @@ నెట్‌వర్క్ ఫైల్ షేర్‌లు మీ అసిస్టెంట్‌ని Voice Match సాయంతో యాక్సెస్ చేసుకోండి మీ మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి కి అనుమతిని కొనసాగించండి -మీ ప్రాప్యత సెట్టింగ్‌లను చదవండి +మీ యాక్సెస్‌ సెట్టింగ్‌లను చదవండి {NUM_FILES,plural, =1{ఇది ఒక ఫైల్‌కు శాశ్వత యాక్సెస్‌ను కలిగి ఉంది.}other{ఇది # ఫైల్‌లకు శాశ్వత యాక్సెస్‌ను కలిగి ఉంది.}} అవిశ్వసనీయ ఎక్స్‌టెన్షన్ చిహ్నం @@ -1800,7 +1800,7 @@ లోడ్ అవుతోంది... డౌన్‌లోడ్ పూర్తి కావడానికి ముందే బ్రౌజర్ షట్‌డౌన్ చేయబడింది. మీ Google ఖాతాతో మొబైల్ డేటా కనెక్షన్‌ ఉన్న ఇతర పరికరాలను గుర్తించడానికి ఈ పరికరాన్ని అనుమతించండి -&వలె పేజీని సేవ్ చేయి +&లాగా పేజీని సేవ్ చేయి వెనుకకు/ముందుకు ఈ డెమో పరికరం కేటాయింపు తీసివేత స్థితిలో ఉంచబడింది. వెబ్ క్యాలెండర్ @@ -1831,7 +1831,7 @@ సరే... నా పరికరాలు మీ ఇప్పుడు ఈ ని కూడా అన్‌లాక్ చేయగలదు. -సైట్ మీ మైక్రోఫోన్‌ని ఉపయోగిస్తోంది +సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగిస్తోంది సైట్‌లు ఏవీ కనుగొనబడలేదు ప్రాక్సీ స్క్రిప్ట్‌ను డౌన్‌లోడ్ చేస్తోంది... కుక్కీలు సెట్ చేయబడ్డాయి @@ -1891,12 +1891,12 @@ ప్లేబ్యాక్ అందుబాటులో లేదు Google డిస్క్ శోధన సూచనలు విండో స్థూలదృష్టి మోడ్‌లోకి ప్రవేశించారు -ఈ పరికరం యొక్క యజమాని క్రొత్త వినియోగదారులను జోడించడం నిలిపివేసారు +ఈ పరికరం యొక్క యజమాని కొత్త‌ వినియోగదారులను జోడించడం నిలిపివేశారు యాప్ ""కి వైరుధ్యంగా ఉన్నందున దాన్ని జోడించలేరు. అయ్యో! ఈ సర్వర్ పంపిస్తున్న డేటా కు అర్థం కాలేదు. దయచేసి బగ్‌ను నివేదించి, అందులో అసలు జాబితాను చేర్చండి. ఎక్స్‌టెన్షన్‌ను లోడ్ చేయడం విఫలమైంది మరిన్ని -కుక్కీలు మరియు ఇతర సైట్ మరియు ప్లగ్ఇన్‌ డేటా +కుక్కీలు మరియు ఇతర సైట్ మరియు ప్లగిన్ డేటా సైట్‌లు ఏవీ దగ్గరకు లేదా దూరానికి జూమ్ చేయబడలేదు క్లిప్‌బోర్డ్‌ను చూడనీయకుండా ఎల్లప్పుడూ ని బ్లాక్ చేయి Serif ఫాంట్ @@ -1930,7 +1930,7 @@ డౌన్‌లోడ్ మేనేజ‌ర్‌ తో గమనికలు రూపొందిస్తున్నారు OpenVPN / L2TPని జోడించు... -మీ ప్రాప్యత సౌలభ్య సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి +మీ యాక్సెస్‌ సౌలభ్య సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి ChromeVox (చదవబడే అభిప్రాయం) ఫోల్డర్‌ను జోడించండి అతిథులతో భాగస్వామ్యం చేయండి @@ -1996,7 +1996,7 @@ పూర్తి చేస్తోంది... క్రొత్త పొడిగింపు జోడించబడింది () ను ప్రారంభించు -చెల్లని సేవ్ రకం ఎంటర్ చేయ‌బడింది. +చెల్లని సేవ్ రకం ఎంటర్ చేయబడింది. సులువైన కొద్ది దశలతో మీ బ్రౌజర్‌ని సెటప్ చేయండి కొన్ని యాప్‌ల డేటాని కోల్పోవచ్చు తెలియని విక్రేత అందించిన పరికరాలు @@ -2285,7 +2285,7 @@ డౌన్‌లోడ్‌లను వెతకండి అథ్లెట్ Ctrl, Alt లేదా ⌘ని చేర్చండి -లిం&క్‌ను ఇలా సేవ్ చెయ్యి... +లిం&క్‌ను ఇలా సేవ్ చేయి... కియోస్క్ అనువర్తనాలను నిర్వహించండి ఈథర్నెట్ Chrome మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్‌ని కనుగొని, తీసివేయగలదు @@ -2400,7 +2400,7 @@ '' యొక్క సభ్యులతో ఈ అంశాలను షేర్ చేస్తే మినహా వారు యాక్సెస్‌ను కోల్పోతారు. పేజీని డిస్టిల్ చేయి స్టైలస్‌ను బయటకు తీసినప్పుడు స్టైలస్ సాధనాలను తెరుస్తుంది -యాక్సెసిబిలిటీ ఈవెంట్‌లకు ప్రతిస్పందించాలనుకుంటోంది +యాక్సెసిబిలిటీ ఈవెంట్‌లకు ప్రతిస్పందించాలని అనుకుంటోంది GPU మెమరీ ఈ పేజీలో ధ్వని మ్యూట్ చేయబడింది అసలు &చిత్రాన్ని కొత్త ట్యాబ్‌లో తెరువు @@ -2423,7 +2423,7 @@ నిద్రావస్థ నుండి సక్రియం అవుతున్నప్పుడు లాక్ స్క్రీన్‌ని చూపు నిష్క్రమించు సెట్టింగ్‌లను పునరుద్ధరించు -ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలమైనది కాదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం Chrome వెబ్ స్టోర్లో వెతకండి.మరింత తెలుసుకోండి +ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలమైనది కాదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం Chrome వెబ్ స్టోర్లో శోధించండి.మరింత తెలుసుకోండి చాలా సంక్షిప్తం (0.8s) అదనపు భద్రత కోసం పవర్ వాష్ చేయండి పరికరాలను జోడించు @@ -2435,7 +2435,7 @@ ఈ ఎక్స్‌టెన్ష‌న్‌ను ఇన్‌స్టాల్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు హెచ్చరికలు చేయబడ్డాయి: ప్లాట్‌ఫారమ్ క్షమించండి, మీ cast పరికరం ఈ వీడియోకు మద్దతివ్వదు. - మీ పరికర స్థానాన్ని ఉపయోగించాలనుకుంటోంది + మీ పరికర స్థానాన్ని ఉపయోగించాలని అనుకుంటోంది స్థానం ఇన్‌పుట్ విలువ చెల్లదు. Smart Lockని ప్రారంభించడానికి మీ పాస్‌వర్డ్‌‌ను నమోదు చేయండి. తర్వాతిసారి, మీ ఫోన్ మీ ని అన్‌లాక్ చేస్తుంది. సెట్టింగ్‌లలో Smart Lockని ఆఫ్ చేయండి. @@ -2554,7 +2554,7 @@ బీటా ఫోరమ్ లేబుల్‌లు ఇవ్వు తో తెరవడం సాధ్యపడలేదు -దీని వ‌ల్ల‌ మీ బ్రౌజింగ్ డేటా ఈ పరికరం నుండి శాశ్వతంగా తొలగించబడుతుంది. +దీని వలన మీ బ్రౌజింగ్ డేటా ఈ పరికరం నుండి శాశ్వతంగా తొలగించబడుతుంది. లాక్ స్క్రీన్‌పై ప్రమాణపత్రం "" ప్రమాణపత్రాలను మంజూరు చేసే సంస్థను సూచిస్తోంది హానికరమైన సాఫ్ట్‌వేర్ తొలగింపును పూర్తి చేసేందుకు, మీ కంప్యూటర్‌ను పునఃప్రారంభించాలి @@ -2600,7 +2600,7 @@ అమరిక తనిఖీ చేస్తోంది... Hangouts Meetను అమలు చేసేలా ఈ పరికరాన్ని ఖచ్చితంగా సెటప్ చేయాలని అనుకుంటున్నారా? -ఫైల్‌ల యాప్ మీరు Google డిస్క్, బాహ్య నిల్వ లేదా మీ Chrome OS పరికరంలో సేవ్ చేసిన ఫైల్‌లకు శీఘ్ర యాక్సెస్‌ను అందిస్తుంది. +మీరు Google డిస్క్, బాహ్య నిల్వ లేదా మీ Chrome OS పరికరంలో సేవ్ చేసిన ఫైల్‌లకు ఫైల్స్ యాప్‌, శీఘ్ర యాక్సెస్‌ను అందిస్తుంది. ఆల్బమ్ పూర్తవగానే తెరువు ప్రింటర్‌ను సవరించండి @@ -2645,7 +2645,7 @@ కాపీని తీసివేయి వీరిచే జారీచేయబడింది మీ కెమెరాను మరియు మైక్రోఫోన్‌ను ఉపయోగించాలనుకుంటోంది -బహుళ ఫైల్‌లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడానికి ఏ సైట్‌ను అనుమతించవద్దు +బహుళ ఫైల్‌లను ఆటోమేటిక్‌గా డౌన్‌లోడ్ చేయడానికి ఏ సైట్‌నూ అనుమతించవద్దు అన్నీ ఎంచుకోండి మరింత చూడండి... ప్రారంభిస్తోంది... @@ -2697,7 +2697,7 @@ విజయవంతంగా ముద్రించబడింది సందర్శించిన URLలతో సహా ఇతర పొడిగింపుల యొక్క ప్రవర్తనను పర్యవేక్షించండి Mozilla Firefox -మీ హార్డ్ డిస్క్ నిండింది. దయచేసి మరొక స్థానానికి సేవ్ చేయండి లేదా హార్డ్ డిస్క్‌లో ఎక్కువ ఖాళీ చేయండి. +మీ హార్డ్ డిస్క్ నిండింది. దయచేసి మరొక స్థానానికి సేవ్ చేయండి లేదా హార్డ్ డిస్క్‌లోని నిల్వను ఖాళీ చేయండి. చెల్లని URL. సమకాలీకరణ ఆఫ్‌లో ఉంది నెట్‌వర్క్ కనెక్షన్‌లను నిర్వహించండి @@ -2879,7 +2879,7 @@ మైక్రోఫోన్ యాక్సెస్‌ను బ్లాక్ చేయడాన్ని కొనసాగించు తొలగింపు చర్య రద్దు చేయండి మద్దతు గల లింక్‌లను నిర్వహించండి -ఈ సైట్, అజ్ఞాత మోడ్ వెలుపల యాప్‌‌తో సమాచారాన్ని షేర్ చేయబోతోంది. +ఈ సైట్ అజ్ఞాత మోడ్ వెలుపల ఉన్న ఒక యాప్‌తో సమాచారాన్ని షేర్ చేయబోతోంది. జత చేయబడింది కొత్త వినియోగదారుని సృష్టించడం సాధ్యపడలేదు. దయచేసి మీ హార్డ్ డ్రైవ్ నిల్వ స్థలాన్ని, అనుమతులను తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి. ధ్వనిని ప్లే చేయడానికి సైట్‌లను అనుమతించండి @@ -2960,14 +2960,14 @@ ఈ ఫైల్ మీ కంప్యూటర్‌కు హానికరం కావచ్చు. Firefox నుండి దిగుమతి చెయ్యబడింది అంగీకరించడం -ఇలా &సేవ్ చేయి... +&ఇలా సేవ్ చేయి... జారీచేసినవారు: అతి చిన్నది -మీరు ఖచ్చితంగా ఈ పరికరాన్ని "షార్క్"గా సెటప్ చేయాలనుకుంటున్నారా? +మీరు ఖచ్చితంగా ఈ పరికరాన్ని "షార్క్"గా సెటప్ చేయాలని అనుకుంటున్నారా? వినియోగదారు సర్టిఫికెట్ ఖచ్చితంగా హార్డ్‌వేర్-బ్యాకెడ్ అయ్యుండాలి. మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు ఇతర సెట్టింగ్‌లను మీ అన్ని పరికరాలలో పొందడానికి మీ Google ఖాతాతో Chromeకు సైన్ ఇన్ చేయండి. మీ ఖాతాకు ప్రింటర్‌ను జోడిస్తోంది - దీనికి కొంత సమయం పట్టవచ్చు... -క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం మరియు చిత్రాలను సైట్ చూడాలన్నప్పుడు అనుమతి అడగాలి +క్లిప్‌బోర్డ్‌కు కాపీ చేసిన వచనం, చిత్రాలను సైట్ చూడాలన్నప్పుడు, అందుకు అనుమతి అడగాలి ఇమెయిల్ గుప్తీకరణ సర్టిఫికెట్ మీరు ఆశిస్తున్న హోమ్ పేజీ ఇదేనా? ఈ పొడిగింపు తీవ్రమైన భద్రతా భేద్యతలను కలిగి ఉంది. @@ -3012,7 +3012,7 @@ కొనసాగింపు చర్య అజ్ఞాత ఎక్స్‌టెన్‌షన్: డెమో నమోదు అభ్యర్థనకు సంబంధించి ఒక సమస్య ఏర్పడింది. -మీ పరికరాన్ని రీసెట్ చేయడం వలన మీ Google ఖాతాలపై లేదా ఈ ఖాతాలకు సమకాలీకరించబడిన ఏదైనా డేటాపై ఎటువంటి ప్రభావం ఉండదు. అయితే, మీ పరికరంలో స్థానికంగా సేవ్ చేయబడిన అన్ని ఫైల్‌లు తొలగించబడతాయి. +మీ పరికరాన్ని రీసెట్ చేయడం వలన మీ Google ఖాతాలపై లేదా ఈ ఖాతాలకు సింక్ చేయ‌బ‌డిన‌ ఏదైనా డేటాపై ఎటువంటి ప్రభావం ఉండదు. అయితే, మీ పరికరంలో స్థానికంగా సేవ్ చేయబడిన అన్ని ఫైల్‌లు తొలగించబడతాయి. ఆటోమేటిక్ సైన్-ఇన్ Microsoft Windows హార్డ్‌వేర్ డ్రైవర్ ధృవీకరణ ప్రధాన మెను @@ -3127,7 +3127,7 @@ చాలా పెద్దవిగా , మరియు మరో పిచ్ -PDF వలె సేవ్ చేయి +PDF లాగా సేవ్ చేయి గడువు ముగింపు డెవలపర్ - అస్థిరం దూరంగా ఉండాలి @@ -3184,7 +3184,7 @@ Safari ముద్రిస్తోంది... స్థాన సెట్టింగ్‌లను నిర్వహించు... -&లాగ పేజీని సేవ్ చెయ్యండి... +&లాగా పేజీని సేవ్ చేయి... వ్యక్తిని జోడించు తెలియని లాక్ చేయబడింది @@ -3226,7 +3226,7 @@ సరే, అర్థమైంది సేవ్ చేసిన పాస్‌వర్డ్‌లు మీ అన్ని విండోలను మూసివేయండి -యాక్సెస్ మెనూను మూసివేయండి +యాక్సెస్‌ మెనూను మూసివేయండి క్లిష్టమైన లోపాలు ఛానెల్ మార్చబడింది. మార్పులను వర్తింపజేయడానికి మీ పరికరాన్ని పునఃప్రారంభించండి. ఎంచుకున్న ప్రింటర్ అందుబాటులో లేదు లేదా సరిగ్గా ఇన్‌స్టాల్ చేయబడలేదు. మీ ప్రింటర్‌ను తనిఖీ చేయండి లేదా మరొక ప్రింటర్‌ను ఎంచుకోవడాన్ని ప్రయత్నించండి. @@ -3361,9 +3361,9 @@ వాల్‌పేపర్‌ని సెట్ చేయండి పాస్‌వర్డ్‌ను నిర్ధారించండి పరికరం ఇన్‌స్టాలేషన్-సమయ లక్షణాల లాక్‌ను ఏర్పాటు చేయడంలో సిస్టమ్ విఫలమైంది. -యాక్సెస్ ఫీచర్‌లను జోడించండి +యాక్సెస్‌ ఫీచర్‌లను జోడించండి Google ఫారమ్ -అయ్యో! ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్ టోకెన్‌ను పొందడంలో సిస్టమ్ విఫలమైంది. +అయ్యో! ఈ పరికరం కోసం దీర్ఘకాల API యాక్సెస్‌ టోకెన్‌ను పొందడంలో సిస్టమ్ విఫలమైంది. పేరు గల పరికరంతో డేటాను ఇచ్చిపుచ్చుకోవడానికి అనుమతి స్థానాన్ని ఉపయోగించండి. స్థాన అనుమతిని కలిగిన యాప్‌లు మరియు సేవలు మీ పరికర స్థానాన్ని ఉపయోగించడానికి అనుమతించండి. Google కాలానుగుణంగా స్థాన డేటాని సేకరించవచ్చు మరియు స్థాన ఖచ్చితత్వం మరియు స్థానం-ఆధారిత సేవలను మెరుగుపరచడం కోసం ఈ డేటాని అనామకంగా ఉపయోగించవచ్చు. మరింత తెలుసుకోండి ఈ స్క్రీన్‌షాట్‌ను చేర్చు @@ -3470,7 +3470,7 @@ వేగవంతమైన పేజీ లోడ్ అయింది ఈ సైట్ MIDI పరికరాలకు పూర్తి నియంత్రణను కలిగి ఉంది. Google Play సేవా నిబంధనలను లోడ్ చేయడం సాధ్యపడదు. దయచేసి మళ్లీ ప్రయత్నించండి. -పేజీని ఆటోమేటిక్‌గా రిఫ్రెష్ చేయడానికి URLలో ప్రశ్న పరామితిని జోడించండి: chrome://device-log/?refresh=<sec> +పేజీని ఆటోమేటిక్‌గా రిఫ్రెష్ చేయడానికి URLలో ప్రశ్న పారామీట‌ర్‌ను జోడించండి: chrome://device-log/?refresh=<sec> బ్యాటరీ కి కనెక్షన్ కోల్పోయింది కీబోర్డ్ బదులుగా వాయిస్‌ను డిఫాల్ట్‌గా ఉపయోగించండి @@ -3518,7 +3518,7 @@ ని&ష్క్రమించు సార్వజనీన విధానం: సిస్టమ్ బిజీగా ఉంది -లిం&క్‌ను ఇలా సేవ్ చెయ్యి... +లిం&క్‌ను ఇలా సేవ్ చేయి... మీ ప్రొఫైల్‌ను తెరుస్తున్నప్పుడు ఏదో తప్పు జరిగినందున Chromeను తెరవడం సాధ్యపడలేదు. Chromeను పునఃప్రారంభించడానికి ప్రయత్నించండి. తెలియని నెట్‌వర్క్ ఎర్రర్ మీరు ఈ వెబ్‌సైట్‌తో నమోదు కాని కీని ఉపయోగిస్తున్నారు @@ -3563,7 +3563,7 @@ '' అనే దానికి 1 ఫలితం మాత్రమే లభించింది అంగీకరించి, కొనసాగండి మీ శోధన సెట్టింగ్‌లను దీనికి మార్చండి: -సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు. చదవగలవు +సైట్‌లు కుక్కీ డేటాను సేవ్ చేయగలవు మరియు చదవగలవు ఇది అనూహ్యమైనదైతే, దయచేసి మద్దతును సంప్రదించండి. భాషలను వెతకండి మీరు ఈ విండో‌లో వీక్షించే పేజీలు బ్రౌజర్ చరిత్రలో కనిపించవు. తెరవబడిన అన్ని అతిథి విండోలను మీరు మూసివేసిన తర్వాత అవి కంప్యూటర్‌లో కుక్కీల వంటి ఇతర జాడలను వదిలిపెట్టవు. అయితే, మీరు డౌన్‌లోడ్ చేసే ఫైల్స్ భద్రపరచబడతాయి. @@ -3591,10 +3591,9 @@ మునుపు ఇన్‌స్టాల్ చేసిన వెర్షన్‌కు తిరిగి మారుస్తోంది అన్ని యాప్‌ల కోసం యాక్సెస్‌ను శాశ్వతంగా తీసివేయి కీలకమైన అప్‌డేట్‌ను ఇన్‌స్టాల్ చేయండి -ఈ పరికరం .ద్వారా నిర్వహించబడుతోంది. - +ఈ పరికరం ద్వారా నిర్వహించబడుతోంది. - దయచేసి మీ ఖాతాకి సైన్ ఇన్ చేయడం కొనసాగించడానికి "తరువాత" క్లిక్ చేయండి. + దయచేసి మీ ఖాతాకు సైన్ ఇన్ చేయడం కొనసాగించడానికి "తదుపరి" క్లిక్ చేయండి. ప్యాక్ చేయబడని ఎక్స్‌టెన్షన్‌ను లోడ్ చేయి ఈ పేరును ఫైల్ యొక్క ఫోల్డర్ పేరుగా ఉపయోగించలేము. ఈ (SN: ) పరికరం యజమానిచే లాక్ చేయబడింది. @@ -3662,7 +3661,7 @@ భాగస్వామ్యం చేయి -ఈ నెట్‌వర్క్‌ని ఉపయోగించడానికి ఈ పరికరం యొక్క ఇతర వినియోగదారులను అనుమతించండి +ఈ నెట్‌వర్క్‌ను ఉపయోగించడానికి ఈ పరికరం యొక్క ఇతర వినియోగదారులను అనుమతించండి Chrome చరిత్ర ఈ సెట్టింగ్‌లు మీ నిర్వాహకుడి ద్వారా అమలు చేయబడ్డాయి ని సమకాలీకరిస్తోంది... @@ -3680,13 +3679,13 @@ ఆదేశం అందుబాటులో లేదు. కొత్త విండోను తెరవడానికి control-N నొక్కండి. వినియోగదారులు మళ్లీ ప్రయత్నించు -అన్ని వినియోగదారు ఖాతాలను తీసివేయండి మరియు మీ పరికరాన్ని క్రొత్త దాని లాగా రీసెట్ చేయండి. +అన్ని వినియోగదారు ఖాతాలను తీసివేయండి మరియు మీ పరికరాన్ని కొత్త‌ దాని లాగా రీసెట్ చేయండి. క్లీనప్ ప్రస్తుతం అందుబాటులో లేదు మళ్లీ చేయి ఎర్రర్ ఏర్పడింది. కొన్ని అంశాలు తొలగించబడి ఉండకపోవచ్చు. {COUNT,plural, =0{ఏదీ వద్దు}=1{}=2{, }=3{, , }=4{, , , 1 ఇతర యాప్}other{, , , ఇతర యాప్‌లు}} enter -ఫైల్ పాథ్‌ లేదా పేరు చాలా పొడవుగా ఉంది. దయచేసి చిన్న పేరుతో లేదా మరొక స్థానానికి సేవ్ చేయండి. +ఫైల్ పాత్ లేదా పేరు చాలా పొడవుగా ఉంది. దయచేసి చిన్న పేరుతో, లేదా మరొక స్థానానికి సేవ్ చేయండి. ""ని తొలగిస్తోంది... పేజీ చర్య కోసం '' చిహ్నాన్ని లోడ్ చేయడం సాధ్యపడలేదు. మీ Chromebook నుండి మీ ఫోన్‌ని డిస్‌కనెక్ట్ చేయండి. అవి ఇకపై ఆటోమేటిక్‌గా కనెక్ట్ కావు. @@ -3736,8 +3735,8 @@ SQLite మెమరీ యాదృచ్ఛికంగా రూపొందించబడిన సురక్షిత మాడ్యూల్ పాస్‌వర్డ్ అందుబాటులో లేదు. పవర్‌వాష్ తర్వాత ఇలా జరగడం సాధారణం. క్లియర్ చేయి -పాస్‌వర్డ్‌లను సేవ్ చెయ్యడానికి ప్రతిపాదన -మీ పరికరం నవీకరించబడుతోంది () +పాస్‌వర్డ్‌లను సేవ్ చేయడానికి ప్రతిపాదించు +మీ పరికరం అప్‌డేట్ చేయబడుతోంది () ఎంచుకున్న Google క్లౌడ్ ప్రింట్ పరికరానికి ఇప్పుడు మద్దతు లేదు. మీ కంప్యూటర్ సిస్టమ్ సెట్టింగ్‌లలో ప్రింటర్‌ని సెటప్ చేయడాన్ని ప్రయత్నించండి. Netscape సర్టిఫికెట్ అధికార రద్దు URL ప్రస్తుతం లో ఉన్నారు @@ -3795,7 +3794,7 @@ వినియోగం & విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. ఈ సెట్టింగ్‌ని యజమాని అమలు చేసారు. మీ చిన్నారి కోసం అదనపు వెబ్ & యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. మరింత తెలుసుకోండి ప్రమాణపత్రాలు లోడ్ కాలేదు షార్ట్‌కట్‌ను తొలగించలేరు -కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు... +కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు... అయ్యో, పాస్‌వర్డ్‌లు సరిపోలలేదు! చిరునామా [] @@ -3850,7 +3849,7 @@ Gzip కుదించిన tar ఆర్కైవ్ డెస్క్‌టాప్‌ను ప్రసారం చేయండి మీరు మీ పరికరాలను చూడటానికి Chromeకు సైన్ ఇన్ చేయాలి -&ఇమెయిల్ చిరునామాను కాపీ చెయ్యి +&ఇమెయిల్ చిరునామాను కాపీ చేయండి &మూలకాలను పర్యవేక్షించు పేరు ద్వారా క్రమబద్ధీకరించు USB ద్వారా ధృవీకరించు @@ -3891,8 +3890,8 @@ కొత్త &ట్యాబ్‌లో లింక్‌ను తెరువు లింక్‌ను తరపున తెరువు ఈ క్లీన్అప్ సమయంలో మీ కంప్యూటర్‌లో గుర్తించిన హానికరమైన సాఫ్ట్‌వేర్, సిస్టమ్ సెట్టింగ్‌లు మరియు ప్రాసెస్‌ల గురించి Googleకు వివరాలను నివేదించండి -కాపీ చెయ్యి -కియోస్క్ యాప్‌లను ఇప్పుడు ఈ పరికరంలో ఆటోమేటిక్‌గా ప్రారంభించగలిగేలా కాన్ఫిగర్ చేయవచ్చు. +కాపీ చేయి +కియోస్క్ యాప్‌లను ఇప్పుడు ఈ పరికరంలో ఆటోమేటిక్‌గా ప్రారంభించడానికి కాన్ఫిగర్ చేయవచ్చు. సంస్థ (O) బ్యాక్‌గ్రౌండ్ యాప్: వాయిస్ యొక్క ప్రివ్యూ @@ -3911,14 +3910,13 @@ సాధారణ టాబ్‌ లాగా తెరువు కార్యకలాపాలను తీసివేయి ఈ పేజీలో డేటాను ఉపయోగించడం ఆపివేయండి -Google డేటా సేవర్‌ను ఉపయోగించి డేటాను ఆదా చేయండి. వేగంగా బ్రౌజ్ చేయండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి. +Google డేటా సేవర్‌ను ఉపయోగించి డేటాను ఆదా చేయండి, మరింత వేగంగా బ్రౌజ్ చేయండి. మరింత తెలుసుకోవడానికి క్లిక్ చేయండి. స్క్రోల్ / క్లిక్ షేర్‌ని మౌంట్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీరు కనెక్ట్ చేస్తున్న ఫైల్ సర్వర్‌లో SMBv2 లేదా అంతకంటే తాజా వెర్షన్‌కు మద్దతు ఉందో లేదో తనిఖీ చేయండి. వ్యవధి మీ మీడియా పరికరాన్ని స్కాన్ చేస్తోంది... - - కనుగొనబడ్డాయి + కనుగొనబడ్డాయి వ్రాసే చర్య దీనికి సంబంధించిన లక్షణం గరిష్ట పొడవును మించిపోయింది: "". మీ సర్టిఫికెట్‌తో ను ప్రమాణీకరించడానికి దయచేసి కు సైన్ ఇన్ చేయండి. ముద్రణను రద్దు చేయి @@ -3948,12 +3946,12 @@ ఆఫ్‌లైన్ డెమో మోడ్ ఫర్మ్‌వేర్ పునర్విమర్శ శోధన ఇంజిన్‌లు -ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం Chrome వెబ్ స్టోర్‌లో వెతకండి. +ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం Chrome వెబ్ స్టోర్‌లో శోధించండి. Google డిస్క్ మ్యూట్ (డిఫాల్ట్) మొత్తం సమయం శోధన, ప్రకటనలు మరియు ఇతర Google సేవలను వ్యక్తిగతీకరించడం కోసం Google మీ బ్రౌజింగ్ చరిత్రను ఉపయోగించవచ్చు -యాక్సెస్ సామర్థ్యం +యాక్సెస్‌ రిజిస్టర్ చేసిన OID సైన్-ఇన్ స్క్రీన్‌లో మీ ఖాతాకు ప్రదర్శించడానికి చిత్రాన్ని ఎంచుకోండి Microsoft Key Recovery Agent @@ -4094,7 +4092,7 @@ GB వేలిముద్ర జోడించబడింది. తెలియని ప్రింటర్ (USB) -దీని లాగా ఫైల్ సేవ్ చేయి +ఫైల్‌ను ఇలా సేవ్ చేయి కోసం పాస్‌వర్డ్‌లు సేవ్ చేయబడలేదు Google డిస్క్‌కు బ్యాకప్ చేయండి. ఏ సమయంలో అయినా సులభంగా మీ డేటాని పునరుద్ధరించండి లేదా పరికరాన్ని మార్చండి. ఈ బ్యాకప్‌లో యాప్ డేటా ఉంటుంది. బ్యాకప్‌లు Googleకి అప్‌లోడ్ చేయబడతాయి మరియు మీ Google ఖాతా పాస్‌వర్డ్‌ని ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడతాయి. మరింత తెలుసుకోండి మీరు బ్రౌజ్ చేసే ప్రతిసారి Google శోధన మరియు Google స్మార్ట్‌లను పొందండి @@ -4138,7 +4136,7 @@ ప్రస్తుతం, కేవలం ఈ పరికరంలో మాత్రమే ఉపయోగించగల ఒక కార్డ్ మీ వద్ద ఉంది ప్రసారం చేస్తోంది: వర్తింపజేయి -సైట్ మీ కెమెరాని ఉపయోగిస్తోంది +సైట్ మీ కెమెరాను ఉపయోగిస్తోంది గుర్తించబడని ఎర్రర్: ట్యాబ్‌లో తెరువు ముద్రణ సేవ @@ -4193,7 +4191,7 @@ టైప్ చేసేటప్పుడు స్పెల్ చెక్ చేయి కొత్త విండో ఇప్పుడు పూర్తి స్క్రీన్‌లో కనిపిస్తుంది. -సైట్ మీ స్క్రీన్‌ని షేర్ చేస్తోంది +సైట్ మీ స్క్రీన్‌ను షేర్ చేస్తోంది ఈ సైట్‌కు యాక్సెస్ కోరుతోంది మీ పాస్‌వర్డ్‌ను నిర్ధారించండి సరే, అర్థమైంది @@ -4383,7 +4381,7 @@ ఈ ఖాతా ఇప్పటికే ఈ కంప్యూటర్‌లో ఉపయోగించబడుతోంది. రద్దు చేయి ఈ పరికరాన్ని ఉపయోగించడానికి మీకు అధికారం లేదు. దయచేసి సైన్-ఇన్ అనుమతి కోసం నిర్వాహకుడిని సంప్రదించండి. -కుక్కీ డేటాను సేవ్ చేయడానికి, చదవడానికి సైట్‌లను అనుమతించు +కుక్కీ డేటాను సేవ్ చేయడానికి మరియు చదవడానికి సైట్‌లను అనుమతించు నమోదు ప్రమాణపత్రాన్ని పొందడం సాధ్యపడలేదు. కాన్ఫిగర్ చేయడానికి నొక్కండి స్వీకర్త: @@ -4440,7 +4438,7 @@ చర్య బార్‌లో మరిన్ని ఎంపికలు అందుబాటులో ఉంటాయి. చర్య బార్‌పై దృష్టి పెట్టడం కోసం Alt + A నొక్కండి. చిత్రంలో చిత్రం అన్నీ చూపించు -ప్రతి ఫైల్‌ను డౌన్‌లోడ్ చేసే ముందు ఎక్కడ సేవ్ చెయ్యాలో అడుగు +ప్రతి ఫైల్‌ను డౌన్‌లోడ్ చేసే ముందు ఎక్కడ సేవ్ చేయాలో అడుగు Family Link మీ ప్రదర్శన సరిహద్దులను సర్దుబాటు చేయండి మీరు ఆశిస్తున్న ప్రారంభ పేజీ ఇదేనా? @@ -4465,7 +4463,7 @@ అతిథిగా నిష్క్రమించు యాప్‌ను &మళ్లీ లోడ్ చేయి మరొక స్క్రీన్‌లో ప్రదర్శించు -ఆఫ్‌లైన్‌లో ""ని సేవ్ చేయడానికి మీరు అదనంగా ఖాళీ స్థలాన్ని తప్పనిసరిగా కలిగి ఉండాలి: +""ను ఆఫ్‌లైన్‌లో సేవ్ చేయడానికి మీ వద్ద అదనపు ఖాళీ స్థలం తప్పనిసరిగా ఉండాలి: మీరు ఆఫ్‌లైన్‌లో ఇకపై యాక్సెస్ చేయకూడదనుకునే ఫైల్‌లను అన్‌పిన్ చేయండి మీ డౌన్‌లోడ్‌ల ఫోల్డర్ నుండి ఫైల్‌లను తొలగించండి మీ కంప్యూటర్‌లోని మరొక ప్రోగ్రామ్ Chrome పని చేసే విధానాన్ని మార్చే యాప్‌ను జోడించింది. @@ -4477,7 +4475,7 @@ జోడించు సైన్ ఇన్ చేయడంలో ఏదో తప్పు జరిగింది భాగస్వామ్యం చేయడాన్ని ఆపివేయి -పరికరాన్ని ఆకృతీకరించు +ఈ పరికరాన్ని ఫార్మాట్ చేయి వాల్‌పేపర్ విజయవంతంగా సెట్ చేయబడింది HTML పత్రం అ&పసవ్యదిశలో తిప్పు @@ -4511,7 +4509,7 @@ డెవలపర్ మరియు సిస్టమ్ రూట్ లాగిన్ పాస్‌వర్డ్ రెండింటినీ అనుకూల విలువకు సెట్ చేయడం, తద్వారా మీరు పరికరంలోకి మ్యానువల్‌గా SSH చేయవచ్చు - ఒకసారి ఆరంభించబడితే, ఎంటర్‌ప్రైజ్ నిర్వాహిత‌ పరికరంలో పవర్‌వాష్ అమలు చేసిన తర్వాత లేదా డేటాను తుడిచివేసిన తర్వాత కూడా చాలా వరకు డీబగ్గింగ్ ఫీచర్‌లు అలాగే ఆరంభించబడి ఉంటాయి. అన్ని డీబగ్గింగ్ ఫీచర్‌లను పూర్తిగా నిలిపివేయడానికి, Chrome OS పునరుద్ధరణ ప్రక్రియ (https://support.google.com/chromebook/answer/1080595) పూర్తి చేయండి. + ఒకసారి ఆరంభించబడితే, ఎంటర్‌ప్రైజ్ నిర్వాహిత‌ పరికరంలో పవర్‌వాష్ అమలు చేసిన తర్వాత లేదా డేటాను తుడిచివేసిన తర్వాత కూడా చాలా వరకు డీబగ్గింగ్ ఫీచర్‌లు అలాగే ఆరంభించబడి ఉంటాయి. అన్ని డీబగ్గింగ్ ఫీచర్‌లను పూర్తిగా నిలిపివేయడానికి, Chrome OS పునరుద్ధరణ ప్రక్రియ పూర్తి చేయండి (https://support.google.com/chromebook/answer/1080595). డీబగ్గింగ్ ఫీచర్‌ల గురించి మరింత సమాచారం కోసం, ఈ లింక్‌ను చూడండి: @@ -4567,7 +4565,7 @@ మీ కంప్యూటర్ నుండి ఫోటోలు, సంగీతం మరియు ఇతర మీడియాను యాక్సెస్ చేయండి లో బ్లూటూత్ ఆఫ్‌లో ఉంది. మీ పాస్‌వర్డ్‌ను నమోదు చేసి బ్లూటూత్‌ను ఆన్ చేయండి. (డిఫాల్ట్) -భవిష్యత్తులో, మీ తీసివేయదగిన పరికరాన్ని అన్‌ప్లగ్ చేయడానికి ముందు ఫైల్స్ యాప్‌లో దాన్ని తొల‌గించ‌డం మర్చిపోవద్దు. లేదంటే, మీరు డేటాను కోల్పోయే అవకాశం ఉంటుంది. +భవిష్యత్తులో, మీ తీసివేయదగిన పరికరాన్ని అన్‌ప్లగ్ చేయడానికి ముందు ఫైల్స్ యాప్‌‌లో దాన్ని ఎజెక్ట్ చేయడం మర్చిపోవద్దు. లేదంటే, మీరు డేటాను కోల్పోయే అవకాశం ఉంటుంది. సాధనపట్టీలో ఉంచండి ఎల్లప్పుడూ అనువదించు గోప్యత సంబంధ సెట్టింగ్‌లను మ్యానిపులేట్ చేయండి @@ -4577,7 +4575,7 @@ యుటిలిటీ: ఈ ఖాతా నిర్వాహకులు బహుళ సైన్-ఇన్‌ను అనుమతించలేదు. ప్రామాణీకరిస్తోంది -క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజనను మౌంట్ చేయడం వీలుకాలేదు. +క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజన కూడా ఉంచబడదు. అజ్ఞాతంలో డౌన్‌లోడ్ చేయబడింది &క్రొత్త ఫోల్డర్ Linux @@ -4594,7 +4592,7 @@ తెలియదు Linuxలో లో షేర్ చేసిన ఫోల్డర్‌లు అందుబాటులో ఉన్నాయి. {NUM_TABS,plural, =1{సైట్‌ను అన్‌మ్యూట్ చేయి}other{సైట్‌లను అన్‌మ్యూట్ చేయి}} - రక్షిత కంటెంట్‌ని ప్లే చేయాలనుకుంటోంది. మీ పరికర గుర్తింపును Google ధృవీకరిస్తుంది. + రక్షిత కంటెంట్‌ను ప్లే చేయాలనుకుంటోంది. మీ పరికర గుర్తింపును Google ధృవీకరిస్తుంది. వర్చువల్ మెషిన్‌ను డౌన్‌లోడ్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి. ప్రస్తుతం ఆఫ్‌లైన్‌లో ఉంది అధునాతన ఎంపికలు @@ -4607,7 +4605,7 @@ వీడియో చిరునామాను కా&పీ చేయండి ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (HTTP) ఆశించిన ID "", కానీ ఉన్న ID "" -పరికరం తెరవడం సాధ్యం కాదు ఎందుకంటే దాని ఫైల్‌సిస్టమ్ గుర్తించబడలేదు. +పరికరం తెరవడం సాధ్యం కాదు. ఎందుకంటే దాని ఫైల్‌సిస్టమ్ గుర్తించబడలేదు. సత్వరమార్గాలను నిర్వహించండి పాప్-అప్‌ను నిరోధించడాన్ని నిర్వహించు... కీబోర్డ్ పరికర సెట్టింగ్‌లను తెరవండి @@ -4634,7 +4632,7 @@ సేవ్ చేసిన పాస్‌వర్డ్ సెట్టింగ్‌లను చదవడానికి మరియు మార్చడానికి అనుమతి ఎల్లప్పుడూ ఈ VPN ద్వారా కనెక్ట్ చేయి మీ Chromebook నుండి వచన సందేశాలను పంపండి లేదా స్వీకరించండి. మరింత తెలుసుకోండి -సులభంగా యాక్సెస్‌ చేసే ఫీచ‌ర్‌ల‌ను ప్రారంభించు +సులభంగా యాక్సెస్‌ చేసే ఫీచ‌ర్‌లను ప్రారంభించు EAP పద్ధతి షార్ట్‌కట్‌ను తీసివేయి ప్రాసెస్ ప్రాధాన్యత @@ -4684,7 +4682,7 @@ ఈ ఫైల్ Windows సాఫ్ట్‌వేర్‌ను ఉపయోగించే PC కోసం రూపొందించినది. ఇది Chrome OSను అమలు చేసే మీ పరికరానికి అనుకూలంగా లేదు. మరింత తెలుసుకోండి PKCS #12 ఫైళ్ళు ఈ పేజీని మళ్లీ లోడ్ చేయి -ఈ రకమైన ఫైల్ మీ పరికరానికి హాని కలిగించవచ్చు. ఏదేమైనా ని ఉంచాలనుకుంటున్నారా? +ఈ రకమైన ఫైల్ మీ పరికరానికి హాని కలిగించవచ్చు. ఏది ఏమైనా ను ఉంచాలని అనుకుంటున్నారా? దయచేసి చెల్లుబాటు అయ్యే ఇమెయిల్ చిరునామాను నమోదు చేయండి USB కీబోర్డ్ కనెక్ట్ చేయబడింది గడువు ముగింపు సంవత్సరం @@ -4731,7 +4729,7 @@ Google Payకి చెందిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు ఇందులో ఉండవు. పసుపు మరియు తెలుపు రంగు పుష్పం నిర్వహిత ONC -సైట్ సమాచారాన్ని వీక్షించండి +సైట్ సమాచారాన్ని చూడండి నిర్ధారించు &ఫోల్డర్‌లో చూపించు K @@ -4789,11 +4787,11 @@ పర్యవేక్షించబడే వినియోగదారు మీ మార్గదర్శకత్వంతో వెబ్‌ను విశ్లేషించవచ్చు. Chromeలో పర్యవేక్షించబడే వినియోగదారు యొక్క నిర్వాహకునిగా మీరు వీటిని చేయవచ్చు: {NUM_DOWNLOAD,plural, =1{డౌన్‌లోడ్ ప్రోగ్రెస్‌లో ఉంది}other{డౌన్‌లోడ్‌లు ప్రోగ్రెస్‌లో ఉన్నాయి}} ఫోటో మోడ్‌లోకి ప్రవేశించింది -ఒక ఇతర పరికరం అందుబాటులో ఉంది. +ఇతర పరికరం ఒక‌టి అందుబాటులో ఉంది. ఫైల్‌ను తెరువు... ఈ వ్యక్తిని తీసివేయి బహుళ ఫైల్‌ల యొక్క స్వయంచాలక డౌన్‌లోడ్‌లను బ్లాక్ చేయడాన్ని కొనసాగించు -ఈ ఫైల్స్‌ను ఆఫ్‌లైన్‌లో ఉపయోగించేందుకు వాటిని సేవ్ చేయడానికి, తిరిగి ఆన్‌లైన్‌లోకి వచ్చి, ఫైల్స్‌పై కుడి-క్లిక్ చేసి, ఆపై ఎంపికను ఎంచుకోండి. +ఈ ఫైల్‌లను ఆఫ్‌లైన్‌లో ఉపయోగించేందుకు వాటిని సేవ్ చేయడానికి, తిరిగి ఆన్‌లైన్‌లోకి వచ్చి, ఫైల్‌లపై కుడి-క్లిక్ చేసి, ఎంపికను ఎంచుకోండి. మీ ఆఫర్‌లను రీడీమ్ చేయండి నిషేధించబడింది క్రమ వరుస @@ -4840,7 +4838,7 @@ కాష్‌ను ఖాళీ చేసి, నిర్బంధంగా మళ్లీ లోడ్ చేయి దాటవేయి మీ ఇమెయిల్‌కు కొనసాగించాలా? -మీ ప్రత్యేక పరికర ఐడెంటిఫైయర్‌ని తెలుసుకోవడానికి అనుమతి +మీ ప్రత్యేక పరికర ఐడెంటిఫైయర్‌ను తెలుసుకోవడానికి అనుమతి ""కు కనెక్ట్ చేస్తున్నప్పుడు ప్రామాణీకరణ కోడ్ తిరస్కరించబడింది. అన్ని వెబ్‌సైట్‌లు సైన్ ఇన్ చేయండి @@ -4889,7 +4887,7 @@ తప్పుడు WEP కీ మీ సంస్థ ద్వారా నిర్వహించబడుతున్నవి ఈ వెబ్‌సైట్ అభ్యర్థించిన భద్రతా కీ రకానికి ఈ పరికరం మద్దతు ఇవ్వదు -&ఇమెయిల్ చిరునామాను కాపీ చెయ్యి +&ఇమెయిల్ చిరునామాను కాపీ చేయండి విధానం కనుగొనబడలేదు. స్కాన్ పూర్తయింది మీరు సందర్శించే వెబ్‌సైట్‌లలో ఉన్న మీ డేటా మొత్తాన్ని చదవడం లేదా మార్చడం కోసం ఈ ఎక్స్‌టెన్షన్‌ను అనుమతించండి: @@ -4958,13 +4956,13 @@ Google డిస్క్ ప్రస్తుతం ""ని సమకాలీకరించలేకపోయింది. Google డిస్క్ తర్వాత మళ్లీ ప్రయత్నిస్తుంది. బదులు పెట్టు &సాధారణ -మీరు ఇంతకుముందు ఈ సైట్ నుండి ఫైల్‌లను డౌన్‌లోడ్ చేసినప్పటికీ, సైట్ తాత్కాలికంగా అసురక్షితం కావచ్చు (హ్యాకింగ్‌కి గురై ఉండవచ్చు). ఈ ఫైల్‌ను తర్వాత డౌన్‌లోడ్ చేయడానికి ప్రయత్నించండి. +మీరు ఇంతకుముందు ఈ సైట్ నుండి ఫైల్‌లను డౌన్‌లోడ్ చేసినప్పటికీ, సైట్ తాత్కాలికంగా అసురక్షితం కావచ్చు (హ్యాకింగ్‌కు గురై ఉండవచ్చు). ఈ ఫైల్‌ను తర్వాత డౌన్‌లోడ్ చేయడానికి ప్రయత్నించండి. నుండి తెలియని పరికరం USB అనుమతిని నిర్ధారించండి IP చిరునామా దగ్గరికి జూమ్ చెయ్యి ఆఫ్‌లైన్‌లో అందుబాటు -కింది కియోస్క్ యాప్‌లు "" అప్‌డేట్ అయ్యాయి. దయచేసి అప్‌డేట్‌ ప్రాసెస్‌ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి. +కింది కియోస్క్ యాప్‌లు "" అప్‌డేట్ అయ్యాయి. దయచేసి అప్‌డేట్ ప్రాసెస్‌ను పూర్తి చేయడానికి పరికరాన్ని రీబూట్ చేయండి. మైక్రోఫోన్: ఈ ప్లగ్ఇన్‌ను అమలు చేయి Windows వినియోగాలు @@ -5127,7 +5125,7 @@ గోప్యత, భద్రత మరియు డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్‌లు ఈ సెట్టింగ్‌ను ప్రారంభించడం వలన కియోస్క్ యాప్‌లు ప్రారంభంలో ఆటోమేటిక్‌గా ప్రారంభించడానికి అనుమతించబడతాయి. ను అప్‌డేట్ చేయడం పూర్తయినప్పుడు, దానిని యాక్టివేట్ చేయడానికి పేజీని మళ్లీ లోడ్ చేయండి -ఈ సైట్ నేపథ్యంలో నవీకరించబడింది. +ఈ సైట్ నేపథ్యంలో అప్‌డేట్ చేయబడింది. కి బదులుగా లింక్‌లను తెరవాలనుకుంటోంది షిల్ పూర్తిస్క్రీన్ జూమ్ స్థాయి: @@ -5152,7 +5150,7 @@ వ్యక్తులను నిర్వహించు ఎగువ అంచు URL చెల్లదు -మీ సవరణలు ఆటోమేటిక్‌గా సేవ్ చేయబడతాయి.అసలు చిత్రం యొక్క నకలును ఉంచడానికి, "అసలును అధిగ‌మించు" ఎంపికను తీసివేయండి +మీ సవరణలు ఆటోమేటిక్‌గా సేవ్ చేయబడతాయి.అసలు చిత్రం యొక్క నకలును ఉంచడానికి, "అసలును భర్తీ చేయి" ఎంపికను తీసివేయండి మూల పాస్‌వర్డ్ వాయిస్ శోధన ఆపివేయబడింది. ఈ సర్టిఫికెట్ క్రింది ఉపయోగాలకు ధృవీకరించబడింది: @@ -5228,7 +5226,7 @@ మూలాధారాలు అంతా పూర్తయింది! అన్ఇన్‌స్టాల్ పూర్తయింది -క్షమించండి, పరికరం గుర్తించబడలేదు. +క్షమించండి, పరికరం గుర్తించబడలేదు. బుక్‌మార్క్‌ జాబితా తదుపరి టాబ్‌ను ఎంచుకో సిగ్నల్ సామర్థ్యం @@ -5246,7 +5244,7 @@ అజ్ఞాత సబ్‌ఫ్రేమ్: మీ అన్ని పరికరాలలో మీ అన్ని పాస్‌వర్డ్‌‌లను పొందడానికి, సైన్ ఇన్ చేసి, సింక్‌ను ఆన్ చేయండి. మీ భద్రతా కీని ధృవీకరిస్తోంది... -ఎల్లప్పుడూ ఈ సైట్‌లోని ప్రకటనలను అనుమతించు +ప్రకటనలను ఈ సైట్‌లో ఎప్పుడూ అనుమతించు &సెట్టింగ్‌లు మళ్ళి అడగవద్దు కొన్ని సెట్టింగ్‌లు రీసెట్ చేయబడ్డాయి @@ -5275,7 +5273,7 @@ ఎస్కేప్ దయచేసి Google సర్వర్‌ల నుండి డౌన్‌లోడ్‌లను ఫైర్‌వాల్ బ్లాక్ చేయడం లేదని నిర్ధారించుకోవడానికి మీ నెట్‌వర్క్ నిర్వాహకుడిని సంప్రదించండి. జూమ్ స్థాయిని తీసివేయి -మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్ ఫీచర్‌లను సెట్టింగ్‌లలో తర్వాత మార్చవచ్చు. +మీరు మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్‌ ఫీచర్‌లను సెట్టింగ్‌ల్లో తర్వాత మార్చవచ్చు. కనెక్షన్ సమస్య కారణంగా గమ్యస్థాన ఫైల్ సంపూర్ణంగా లేదు. ఈ పేజీలో ఫ్లాష్ బ్లాక్ చేయబడింది. పాస్‌వర్డ్ తప్పు లేదా ఫైల్ పాడైంది @@ -5287,7 +5285,7 @@ మరిచిపోయారా Googleకు ఆటోమేటిక్‌గా వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను పంపు నెల -సైట్ మీ మైక్రోఫోన్‌ని ఉపయోగించవచ్చు +సైట్ మీ మైక్రోఫోన్‌ను ఉపయోగించవచ్చు Netscape సర్టిఫికెట్ ఆధార URL ద్వారా నిర్వహించబడుతోంది ఖాతాను జోడించండి... @@ -5305,7 +5303,7 @@ 4x వైరస్ కనుగొనబడింది ఈ ఖాతా ఈ కంప్యూటర్‌లో ఇప్పటికే ద్వారా ఉపయోగించబడుతోంది. -ఈ పరికరం యొక్క ఇతర వినియోగదారులు ఈ నెట్‌వర్క్‌ని ఉపయోగించగలరు. +ఈ పరికరం యొక్క ఇతర వినియోగదారులు ఈ నెట్‌వర్క్‌ను ఉపయోగించగలరు. &కొత్త‌ ట్యాబ్‌లో తెరువు షేర్‌ను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. ఫైల్ షేర్ URLని తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి. సరే, నన్ను తిరిగి సైన్-ఇన్ స్క్రీన్‌కు తీసుకువెళ్లు @@ -5384,7 +5382,7 @@ దయచేసి ఒకటి లేదా మరిన్ని ఫైళ్ళను ఎంచుకోండి జిప్ చేయడంలో విఫలమైంది. అవును, నాకు సమ్మతమే. -ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. Chrome OS అమలయ్యే మీ పరికరానికి ఇది అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్ కోసం Chrome వెబ్ స్టోర్‌లో వెతకండి. +ఈ ఫైల్ Macintosh సాఫ్ట్‌వేర్‌ను ఉపయోగించే కంప్యూటర్ కోసం రూపొందించబడింది. ఇది Chrome OS అమలయ్యే మీ పరికరానికి అనుకూలంగా లేదు. దయచేసి తగిన ప్రత్యామ్నాయ యాప్‌ కోసం Chrome వెబ్ స్టోర్‌లో శోధించండి. అసలును చూపించు లింక్‌ను తరపున తెరువు కింది స్థలాలకు షార్ట్‌కట్‌లను జోడించండి: @@ -5395,7 +5393,7 @@ మళ్ళీ సైన్ ఇన్ చేయండి సవరించు... మీ కెమెరాను ఉపయోగించండి -గుర్తింపు మరియు పాస్‌వర్డ్‌ సేవ్ చెయ్యి +గుర్తింపు మరియు పాస్‌వర్డ్‌ సేవ్ చేయి నవీకరించబడింది ఈ చిత్రం ఆఫ్‌లైన్‌లో అందుబాటులో లేదు. షార్ట్‌కట్‌ను సృష్టించు... @@ -5413,7 +5411,7 @@ మీరు ప్రస్తుతానికి నెట్‌వర్క్‌కు కనెక్ట్ చేయబడ్డారు. మీ లో Linux (బీటా)ను సెటప్ చేయండి ఈ ప్రాసెస్‌కు కొన్ని నిమిషాలు పట్టవచ్చు. Linux కంటైనర్ ప్రారంభం అవుతోంది. -సైట్ మీ స్క్రీన్‌ని షేర్ చేయవచ్చు +సైట్ మీ స్క్రీన్‌ను షేర్ చేయవచ్చు దయచేసి ఈ ను అన్‌లాక్ చేయడానికి మీ ఫోన్‌ను Android తాజా వెర్షన్‌కు అప్‌డేట్ చేయండి. వినియోగం & విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ & యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. మరింత తెలుసుకోండి L2TP/IPsec + ముందుగా భాగస్వామ్యం చేసిన కీ @@ -5477,7 +5475,7 @@ చిత్రాలు ఏమీ అందుబాటులో లేవు "" పేరు గల ఫైల్ ఇప్పటికే వినియోగంలో ఉంది. మీరు దీనిని భర్తీ చేయాలనుకుంటున్నారా? రహస్య పదబంధం ఖాళీగా ఉంటే అనుమతించబడదు -పొడిగింపులు, అనువర్తనాలు మరియు థీమ్‌లు మీ పరికరానికి హాని కలిగించవచ్చు. మీరు ఖచ్చితంగా కొనసాగాలనుకుంటున్నారా? +ఎక్స్‌టెన్ష‌న్‌లు, యాప్‌లు మరియు థీమ్‌లు మీ పరికరానికి హాని కలిగించవచ్చు. మీరు ఖచ్చితంగా కొనసాగాలని అనుకుంటున్నారా? ChromeVox (చదవబడే అభిప్రాయం)ను నిలిపివేయి ఇన్‌స్టాలేషన్ జరుగుతోంది &లూప్ 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 untuk petunjuk lebih lanjut.{0,plural, =1{Chrome akan diluncurkan ulang dalam 1 menit}other{Chrome akan diluncurkan ulang dalam # menit}} Komputer ini tidak akan menerima update Google Chrome lagi karena Mac OS X 10.9 sudah tidak didukung. Google Chrome tidak dapat menyinkronkan data karena detail ID masuk akun Anda belum diperbarui. -Selamat Menggunakan Chrome +Selamat Datang di Chrome Logo Chrome Enterprise Pemasang tidak dapat membuat direktori sementara. Periksa kapasitas kosong pada disk dan izin untuk memasang software. Klik nama Anda untuk membuka Chrome dan mulai menjelajah. 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 @@ {0,plural, =1{Chrome は 1 分後に再起動されます}other{Chrome は # 分後に再起動されます}} Mac OS X 10.9 はサポートされなくなったため、このパソコンでは今後 Google Chrome のアップデートは受信されません。 アカウントのログイン情報が最新ではないため、Google Chrome はデータを同期できませんでした。 -Chrome にようこそ +Chrome へようこそ Chrome Enterprise ロゴ インストーラーの一時ディレクトリを作成できませんでした。ディスクの空き領域とソフトウェアのインストール許可があることを確認してください。 Chrome を開いてブラウジングを始めるには、名前をクリックしてください。 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 @@ Chrome OSను ఉపయోగించడం గురించి సహాయాన్ని పొందండి మీ ఫోన్‌లో Chromeను ఇన్‌స్టాల్ చేయండి. మేము మీ ఫోన్ నంబర్‌కు SMS పంపుతాము: దీనిని ఆఫ్ చేయడం ద్వారా, మీరు Chromeకి సైన్ ఇన్ చేయకుండానే Gmail లాంటి Google సైట్‌లలో సైన్ ఇన్ చేయగలరు -ఈ సైట్ కోసం మీ కెమెరాని ఉపయోగించడానికి Chromeకి అనుమతి అవసరం +ఈ సైట్ కోసం మీ కెమెరాను ఉపయోగించడానికి Chromeకు అనుమతి అవసరం Google Chrome మీ డిఫాల్ట్ బ్రౌజర్ కాదు Google Chrome బీటా (mDNS-In) Chrome కాలం చెల్లినది @@ -221,7 +221,7 @@ మీరు గా Chromeకు సైన్ ఇన్ చేసారు. మళ్లీ సైన్ ఇన్ చేయడానికి, దయచేసి ఇదే ఖాతాను ఉపయోగించండి. Chrome OS నిబంధనలు మీ డొమైన్ కోసం సింక్‌ అందుబాటులో లేనందున Chrome OS మీ డేటాను సింక్ చేయ‌లేక‌పోయింది. -వెబ్‌కు మీ వ్యక్తిగతీకరించిన‌ బ్రౌజర్ ఫీచ‌ర్‌ల‌ను సేవ్ చేయడానికి, ఏదైనా కంప్యూటర్‌లోని Google Chrome నుండి అయినా వాటిని యాక్సెస్‌ చేయడానికి సింక్‌ను సెటప్ చేయండి. +వెబ్‌కు మీ వ్యక్తిగతీకరించి బ్రౌజర్ ఫీచర్‌లను సేవ్ చేయడానికి, ఏదైనా కంప్యూటర్‌లోని Google Chrome నుండి అయినా వాటిని యాక్సెస్ చేయడానికి సింక్‌ను సెటప్ చేయండి. Chrome ఆటోమేటిక్‌గా అప్‌డేట్ అవుతుంది కాబట్టి మీ వద్ద ఎప్పుడూ తాజా వెర్షన్ ఉంటుంది. చిరునామా బార్‌లో సూచనలను చేయడానికి Chrome మీ డిస్క్‌ను యాక్సెస్ చేస్తుంది Google Chrome డెవలపర్ 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); }, // 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 @@ [[getInstructionMessage_(step_, problemMessage_)]] 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 #include +#include #include #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 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 kNuxOnboardingReturningUserModules{ &kNuxOnboardingFeature, "returning-user-modules", "nux-set-as-default"}; const base::FeatureParam 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 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 kNuxOnboardingForceEnabledReturningUserModules = { &kNuxOnboardingForceEnabled, "returning-user-modules", "nux-set-as-default"}; +// TODO(hcarmona): remove this flag and all code behind it. const base::FeatureParam 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 @@ -423,6 +423,11 @@ void ArcMetricsService::RecordEngagementTimeToUmaIfNeeded() { "Arc.EngagementTime.Total", engagement_time_total_, 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), 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 @@ Save card? - + Save card 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(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 -#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 @@ Has decidit desactivar els advertiments de seguretat en aquest lloc. &Refés el canvi d'ordre Adreces d'interès de -Torna a l'àrea de seguretat +Torna a una pàgina segura Verd blavós clar Les pàgines de la teva llista de lectura es mostren aquí Perquè la propera vegada puguis pagar més ràpidament, desa la targeta i l'adreça de facturació al compte de Google. 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 @@ Tarjetas de prepago aceptadas Favoritos de Error de serialización -Avanzada +Configuración avanzada Versión de firmware Borrar datos del historial de navegación de Chrome {COUNT,plural, =1{y 1 más}other{y # más}} 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 @@ -సెషన్ పేరుని మార్చడం విఫలమైంది. +సెషన్ పేరును మార్చడం విఫలమైంది. ఇప్పుడు కాదు పేజీని తర్వాత లోడ్ చేయి అదనపు వివరాలను అందించండి @@ -20,7 +20,7 @@ పాస్‌వర్డ్‌ని మార్చు Chrome సెట్టింగ్‌లలో పాస్‌వర్డ్‌లను నిర్వహించండి ఎల్లప్పుడూ ను అనువదించు -ఎంచుకున్నట్లయితే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chrome మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది. +ఎంచుకున్నట్లయితే, Chrome వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది. కోసం అనుమతిని ఎంచుకోండి ఇటీవలి బుక్‌మార్క్‌లు &మళ్లీ క్రమం చేయడాన్ని రద్దు చేయి @@ -29,7 +29,7 @@ విధాన కాష్ సరిపోయింది ఈ సర్వర్ అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని మీ కంప్యూటర్ ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కి అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు. పాస్‌వర్డ్ అవసరం - యొక్క కాష్ చేయబడిన కాపీని యాక్సెస్ చేయండి + యొక్క కాష్ చేయబడిన కాపీని యాక్సెస్‌ చేయండి మీరు స్థానిక లేదా షేర్ చేసిన ఫైల్‌ను చూస్తున్నారు ఊహించని విధంగా కనెక్షన్‌ను మూసివేసింది. Wi-Fiకి మళ్లీ కనెక్ట్ చేయడం @@ -39,7 +39,7 @@ తీసివేయి నారింజ రంగు తరువాత -ఈ సైట్ నుండి మరింత +ఈ సైట్ నుండి మరికొన్ని తప్పు ప్రారంభ సంతకం ప్రస్తుతానికి దాచు మీరు ను చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ బలహీన కీని కలిగి ఉన్న ప్రమాణపత్రాన్ని అందించింది. దాడి చేసేవారు ప్రైవేట్ కీని విచ్ఛిన్నం చేశారు మరియు సర్వర్ మీరు ఊహించిన సర్వర్ కాకపోవచ్చు (మీరు దాడి చేసే వారితో కమ్యూనికేట్ చేస్తుండవచ్చు). @@ -57,11 +57,11 @@ <li>మీ ఇంటర్నెట్ కనెక్షన్ సరిగ్గానే పని చేస్తున్నట్లు నిర్ధారించుకోండి.</li> <li>వెబ్‌సైట్ యజమానిని సంప్రదించండి.</li> </ol> -మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేసారు. మీ ఖాతాని రక్షించడం కోసం, మీ పాస్‌వర్డ్‌ని ఇతర యాప్‌లు మరియు సైట్‌లలో తిరిగి ఉపయోగించవద్దు. +మీ సంస్థ నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ను నమోదు చేసారు. మీ ఖాతాను రక్షించడం కోసం, ఇతర యాప్‌లు మరియు సైట్‌లలో మీ పాస్‌వర్డ్‌ను తిరిగి ఉపయోగించవద్దు. పఠన జాబితా క్రాష్ నివేదిక కి క్యాప్చర్ చేయబడింది (ఇంకా అప్‌లోడ్ చేయలేదు లేదా విస్మరించబడింది) పికప్ పద్ధతి -ఈ సైట్‌ను అనువదించవద్దు +ఈ సైట్‌ను ఎప్పటికీ అనువదించవద్దు "మీ కంప్యూటర్‌లో ఉన్న సాఫ్ట్‌వేర్ కారణంగా Chrome సురక్షితంగా వెబ్‌కి కనెక్ట్ కాలేకపోతోంది" (Windows కంప్యూటర్‌లకు మాత్రమే) ఆదేశ-పంక్తి వ్యత్యాసాలు ఇటీవల మూసివెయ్యబడినవి @@ -69,7 +69,7 @@ ఎంచుకోబడిన సెషన్ ఉనికిలో లేదు. మరింత చూపు చిరునామాలను సేవ్ చేసి, పూరించండి -మీ కార్యాచరణ వీరికి ఇప్పటికీ కనిపించవచ్చు : +మీ కార్యకలాపం వీరికి ఇప్పటికీ కనిపించవచ్చు: మీరు సందర్శించే వెబ్‌సైట్‌లు మీ యజమాని లేదా పాఠశాల నిర్వాహకులు @@ -136,7 +136,7 @@ {1,plural, =1{ఈ సర్వర్ ఇది అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం రేపటిది కావచ్చు. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్‌కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు.}other{ఈ సర్వర్ ఇది అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం భవిష్యత్తులో # రోజుల తదుపరిది కావచ్చు. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్‌కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు.}} OS పత్రం అదనపు గమనికలను జోడించడానికి వీలు లేకుండా చాలా అధిక పరిమాణంలో ఉంది -ఈ సైట్‌ని సందర్శించడానికి మీకు నుండి అనుమతి అవసరం +ఈ సైట్‌ను సందర్శించడానికి మీకు నుండి అనుమతి అవసరం * అవసరమైన ఫీల్డ్ చెల్లుబాటయ్యే కార్డ్ నంబర్‌ను జోడించండి మీరు వెబ్ పేజీ యొక్క మూలాధారాన్ని వీక్షిస్తున్నారు @@ -147,7 +147,7 @@ తర్వాతిసారి మరింత వేగంగా చెల్లించడానికి, మీ కార్డ్, పేరు మరియు బిల్లింగ్ చిరునామాను మీ Google ఖాతాకు మరియు ఈ పరికరానికి సేవ్ చేయండి. తెరిచిన ట్యాబ్‍లు పేజీ సంఖ్య -ఈ సర్వర్ అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని మీ పరికర ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు. +ఈ సర్వర్ అని నిరూపించుకోలేకపోయింది; దీని భద్రతా సర్టిఫికెట్‌ను మీ పరికర ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడి చేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు. Windows నెట్‌వర్క్ సమస్య విశ్లేషణలను అమలు చేయడం ప్రయత్నించండి. దయచేసి మీ సింక్‌ ర‌హ‌స్య ప‌ద‌బంధాన్ని అప్‌డేట్ చేయండి. మీ తెరవబడిన ట్యాబ్‌లు ఇక్కడ కనిపిస్తాయి @@ -155,7 +155,7 @@ కార్డుదారుని పేరు చెల్లని అభ్యర్థన లేదా అభ్యర్థన పారామీట‌ర్‌లు తనిఖీ చేస్తోంది -ఈ సైట్ హానికరమైన ప్రోగ్రామ్‌లను కలిగి ఉంది +ఈ సైట్‌లో హానికరమైన ప్రోగ్రామ్‌లు ఉన్నాయి విధాన విలువల క్రమబద్ధీకరణ ఎర్రర్‌లతో విఫలమైంది చెల్లింపు .pac స్క్రిప్ట్ URLను కాకుండా, స్థిరమైన ప్రాక్సీ సర్వర్‌లను ఉపయోగించేలా ప్రాక్సీ సెట్ చేయబడింది. @@ -165,7 +165,7 @@ ప్రారంభ పేజీలను తెరువు జాబితాను కుదించు ఫిల్టరింగ్ -ఈ సైట్‌కు మీ అప్‌డేట్ చేసిన సెట్టింగ్‌లను వర్తింపజేయడానికి, ఈ పేజీని మళ్లీ లోడ్ చేయండి +ఈ సైట్ విషయంలో మీరు అప్‌డేట్ చేసిన సెట్టింగ్‌లను వర్తింపజేయడానికి, ఈ పేజీని మళ్లీ లోడ్ చేయండి ప్రకటనలు నిర్దిష్ట ఎర్రర్ సందేశానికి సంబంధించిన సహాయం పొందండి {COUNT,plural, =0{ఏమీ లేవు}=1{1 సైట్}other{# సైట్‌లు}} @@ -205,7 +205,7 @@ సింక్‌ మీ డొమైన్‌కు అందుబాటులో లేదు కార్డ్‌ను సవరించండి పూర్తి నిర్వాహక యాక్సెస్ -ఈ సైట్ సురక్షితమైన కనెక్షన్‌ను అందించలేదు +ఈ సైట్ సురక్షితమైన కనెక్షన్‌ను అందించలేకపోయింది విధానాలు ఫోన్ నంబర్ {COUNT,plural, =1{1 చిరునామా}other{# చిరునామాలు}} @@ -213,7 +213,7 @@ చెల్లుబాటు అయ్యే గడువు ముగింపు సంవత్సరాన్ని నమోదు చేయండి విధానం కనుగొనబడలేదు నమోదులను పొందుతోంది... -లోని హ్యాకర్‌లు మీ పరికరంలో హానికరమైన యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు మరియు మీ మొబైల్ బిల్‌లో అదృశ్య ఛార్జీలకు కారణం కావచ్చు లేదా మీ వ్యక్తిగత సమాచారాన్ని దొంగిలించవచ్చు. మరింత తెలుసుకోండి +లోని హ్యాకర్‌లు మీ పరికరంలో హానికరమైన యాప్‌లను ఇన్‌స్టాల్ చేయవచ్చు. మీ మొబైల్ బిల్‌లో అదృశ్య ఛార్జీలకు కారణం కావచ్చు లేదా మీ వ్యక్తిగత సమాచారాన్ని దొంగిలించవచ్చు. మరింత తెలుసుకోండి ఇంటర్నెట్ లేదు విశ్లేషణల యాప్‌ను ఉపయోగించి మీ కనెక్షన్‌ను సరి చేయండి ఇప్పుడే పంపండి @@ -231,7 +231,7 @@ VR సెషన్ యాక్టివ్‌లో ఉంది ఇతర బుక్‌మార్క్‌లు Google సురక్షిత బ్రౌజింగ్ ఇటీవల లో హానికర యాప్‌లను కనుగొంది. -దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలగవచ్చు మరియు వాటిని సవరించడం ద్వారా మిమ్మల్ని మోసగించవచ్చు. +దాడికి పాల్పడేవారు ఈ సైట్‌లో మీరు చూస్తున్న చిత్రాలను చూడగలరు, వాటిని సవరించడం ద్వారా మిమ్మల్ని మోసగించవచ్చు. అడుగు అనేకం కొనసాగించు @@ -256,7 +256,7 @@ మెషీన్ విధానాలు సర్వర్ యొక్క ప్రమాణపత్రంలో లోపాలు ఉన్నాయి. JSON పార్సర్ -ఎంచుకుంటే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని Chromium నిల్వ చేస్తుంది. +ఎంచుకుంటే, Chromium వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది. కొత్త కార్డ్‌ను స్కాన్ చేయండి వెనుకకు వెళ్ళు ఆమోదించబడిన డెబిట్ మరియు ప్రీపెయిడ్ కార్డ్‌లు @@ -304,7 +304,7 @@ కనెక్షన్ మళ్ళీ సెట్ చేయబడింది. ఆమోదించబడిన క్రెడిట్ కార్డ్‌లు సైట్ బ్లాక్ చేయబడింది -రాబోయే సైట్ హానికరమైన యాప్‌లను కలిగి ఉంది +రాబోయే సైట్‌లో హానికరమైన యాప్‌లు ఉన్నాయి మళ్లీ ప్రారంభించు Google సురక్షిత బ్రౌజింగ్ ఇటీవల లో మాల్వేర్‌ను గుర్తించింది. సాధారణంగా సురక్షితమైన వెబ్‌సైట్‌‌లకు కూడా కొన్నిసార్లు మాల్వేర్ సోకుతుంది. చిరునామా మరియు శోధన బార్ @@ -325,11 +325,11 @@ ఈ సర్వర్ అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం నుండి జారీ చేయబడింది. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు. మీరు సెట్టింగ్‌ల పేజీ నుండి కనెక్షన్ కోసం కాన్ఫిగర్ చేయబడిన ఏ ప్రాక్సీలను అయినా నిలిపివేయవచ్చు. కనుగొను పట్టీని మూసివేయి -సురక్షిత కనెక్షన్‌ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్‌సైట్‌లు వాటిని గుర్తించడానికి ఉపయోగించే ప్రమాణపత్రాలు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ ప్రమాణపత్రాలను ధృవీకరించలేదు. +సురక్షిత కనెక్షన్‌ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్‌సైట్‌లు వాటిని గుర్తించడానికి ఉపయోగించే స‌ర్టిఫికెట్‌లు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ స‌ర్టిఫికెట్‌లను ధృవీకరించలేదు. &పునరావృతం , ప్రస్తుతం ఎంచుకోబడింది. డేటాను తీసివేయి -ప్రారంభిస్తే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chromium మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది. +ప్రారంభిస్తే, Chromium వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది. చెల్లుబాటు అయ్యే చిరునామాని నమోదు చేయండి ఈ పికప్ పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి. వెబ్‌సైట్‌లతో భాగస్వామ్యం @@ -364,13 +364,13 @@ లో చెల్లింపును రద్దు చేయండి బుక్‌మార్క్ చేయబడింది -దయచేసి చెల్లుబాటు అయ్యే సెషన్ పేరుని నమోదు చేయండి. +దయచేసి చెల్లుబాటు అయ్యే సెషన్ పేరును నమోదు చేయండి. అంతర్గత అంచనాలకు సరిపోలని ఒక ధృవీకరణ పత్రాన్ని సర్వర్ సమర్పించింది. మిమ్మల్ని సంరక్షించే దిశగా నిర్దిష్ట, ఉన్నత స్ధాయి భద్రతా వెబ్‌సైట్‌ల కోసం ఈ అంచనాలు చేర్చబడ్డాయి. పేజీని లోడ్ చేయడానికి అవసరమైన డేటాను మళ్లీ సమర్పించడం కోసం 'మళ్లీ లోడ్ చేయి' బటన్ క్లిక్ చేయండి. మైక్రోఫోన్ పేజీ ఇప్పటికే లో ఉన్నందున అనువాదం విఫలమైంది. కార్డ్ CVCని నమోదు చేయండి -ఈ సైట్‌లో ఎల్లప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు +ఈ సైట్‌లో ఎప్పుడూ ముఖ్యమైన కంటెంట్‌ను గుర్తించు ఈ పేజీని బుక్‌మార్క్ చేయి &మళ్లీ క్రమం చేయడాన్ని రద్దు చేయి కార్డ్‌లో పేరుని జోడించండి @@ -381,7 +381,7 @@ బిల్లింగ్ చిరునామాను జోడించండి ముదురు ఎరుపు రంగు సురక్షితం -ఈ సైట్‌ని యాక్సెస్ చేయడానికి మీరు చేసిన అభ్యర్థన కి పంపబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి. +ఈ సైట్‌ను యాక్సెస్ చేయడానికి మీరు చేసిన అభ్యర్థన కు పంపబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి. ప్రాక్సీ సెట్టింగ్‌లను మార్చు... Chrome ఈ కింది సమాచారాన్ని సేవ్ చేయదు: @@ -465,7 +465,7 @@ మీకు ఇటీవల నివేదించిన క్రాష్‌లు లేవు. క్రాష్‌ నివేదన నిలిపివేసినపుడు ఏర్పడే క్రాష్‌లు ఇక్కడ కనిపించవు. స్థితిని దాచు సురక్షిత బ్రౌజింగ్ పేజీ నిర్మాణంలో ఉంది. -ఈ కార్డ్‌ని మీ Google ఖాతాకు మరియు ఈ పరికరంలో సేవ్ చేయాలనుకుంటున్నారా? +ఈ కార్డ్‌ను మీ Google ఖాతాకు మరియు ఈ పరికరంలో సేవ్ చేయాలని అనుకుంటున్నారా? ముదురు గులాబి రంగు Mastercard గడువు ముగింపు / @@ -478,7 +478,7 @@ తేదీని, సమయాన్ని అప్‌డేట్ చేయి వైరుధ్యమైన పరికరం ఐడెంటిఫైయర్ పారిష్ -మీరు ఈ సైట్‌ను యాక్సెస్ చేయడానికి చేసిన అభ్యర్థన కి పంపబడింది +మీరు ఈ సైట్‌ను యాక్సెస్ చేయడానికి చేసిన అభ్యర్థన కు పంపబడింది ఇమెయిల్‌ను జోడించండి కార్డ్ గడువు సమయం ముగిసింది @@ -500,7 +500,7 @@ మీ ఆర్డర్‌ను ప్రాసెస్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి. క్లయింట్ మరియు సర్వర్ ఒకే SSL ప్రోటోకాల్ వెర్ష‌న్‌ లేదా సైఫర్ సూట్‌కు మద్దతివ్వవు. స్థిరమైన ప్రాక్సీ సర్వర్‌లను కాకుండా, ఒక .pac స్క్రిప్ట్ URLను ఉపయోగించేలా ప్రాక్సీ కాన్ఫిగరేషన్ సెట్ చేయబడింది. -ముందు వంచనాత్మక సైట్ ఉంది +ముందున్న సైట్ మోసపూరితమైనది పరికర క్రమ సంఖ్య చెల్లదు స్వీయ ప్లే బ్లాక్‌లిస్ట్‌లో ఉన్న URLల జాబితాను మరియు మీ సిస్టమ్ నిర్వాహకుని ద్వారా అమలు చేయబడిన ఇతర విధానాలను చూడటానికి <strong>chrome://policy</strong>ని సందర్శించండి. @@ -540,7 +540,7 @@ <p>ఇప్పటికీ మీకు ఎర్రర్ కనిపిస్తున్నట్లయితే, వెబ్‌సైట్ యజమానిని సంప్రదించండి.</p> నెట్‌వర్క్ సమస్య విశ్లేషణలను అమలు చేయడం ప్రయత్నించండి. చెల్లుతుంది -ఈ సైట్‌కి మీ కనెక్షన్ పూర్తి స్థాయిలో సురక్షితంగా లేదు +ఈ సైట్‌కు మీ కనెక్షన్ పూర్తి స్థాయిలో సురక్షితంగా లేదు కాదు మీరు చేసిన మార్పులు సేవ్ అయ్యి ఉండకపోవచ్చు. చెల్లని సంతకం @@ -602,7 +602,7 @@ శోధన సూచన పాస్‌వర్డ్‌లను నిర్వహించు… అమలు చేయగల పాథ్‌ -మీ సమాచారాన్ని (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్ నంబర్‌లు) ఈ సైట్‌కి పంపినప్పుడు అది ప్రైవేట్‌గా ఉంచబడుతుంది. +మీ సమాచారాన్ని (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్ నంబర్‌లు) ఈ సైట్‌కు పంపినప్పుడు అది ప్రైవేట్‌గా ఉంచబడుతుంది. &చరిత్ర సంప్రదింపు సమాచారాన్ని జోడించు చెల్లింపు స్వీయపూరణ నిలిపివేయబడింది @@ -618,7 +618,7 @@ పేజీకి తగినట్లు అమర్చు వీక్షణ ఈ బట్వాడా పద్ధతి అందుబాటులో లేదు. వేరే పద్ధతిని ప్రయత్నించండి. -ఈ సైట్‌ను సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లిదండ్రులకు అభ్యర్థన పంపారు +ఈ సైట్‌ను సందర్శించడానికి అనుమతిని కోరుతూ మీరు మీ తల్లిదండ్రులకు అభ్యర్థన పంపారు వినియోగదారు పేరు లేదు శోధన ఆటోమేటిక్ (డిఫాల్ట్) @@ -641,7 +641,7 @@ అన్నీ చూడండి ఈ ప్లగ్ఇన్‌‌కు మద్దతు లేదు నివేదన -ప్రారంభిస్తే, మరింత వేగవంతమైన ఫారమ్ పూరింపు కోసం Chrome మీ కార్డ్ కాపీని ఈ పరికరంలో నిల్వ చేస్తుంది. +ప్రారంభిస్తే, వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది. Chromeలో Google అసిస్టెంట్ మొదటి అమలు స్క్రీన్ చూపబడింది మెషీన్ పేరు: ఈ పేజీని తెరవడం సాధ్యపడదు @@ -663,7 +663,7 @@ ప్రావిన్స్ మీ పరికరం ద్వారా నిర్వహించబడుతుంది, అలాగే ద్వారా మీ ఖాతా నిర్వహించబడుతుంది. దీని ప్రకారం, మీ నిర్వాహకులు రిమోట్ విధానం ద్వారా మీ పరికరం, ఖాతాను కాన్ఫిగర్ చేయవచ్చు . (64-బిట్) -ఈ పేరు కలిగిన సెషన్‌ని తొలగించలేరు. +ఈ పేరు కలిగిన సెషన్‌ను తొలగించలేరు. చిరునామాలను నిర్వహించండి... మీ Google ఆధారాలతో సింక్ చేయ‌బ‌డిన పాస్‌వర్డ్‌లను ఎన్‌క్రిప్ట్ చేయండి విధాన ప్రతిస్పందనలో ఎర్రర్ కోడ్ ఉంది @@ -700,7 +700,7 @@ కార్డ్‌ని అప్‌డేట్ చేయండి "మీ గడియారం ఆలస్యంగా నడుస్తోంది" లేదా "మీ గడియారం ముందుగా ఉంది" లేదా "<span class="error-code">NET::ERR_CERT_DATE_INVALID</span>" మీ కార్డ్‌ల‌ను అన్ని పరికరాలలో ఉపయోగించాలంటే, సైన్ ఇన్ చేసి, సమకాలీకరణను ఆన్ చేయండి. -ఈ సైట్ ప్రమాణపత్రం గొలుసులో SHA-1 ఉపయోగించి సంతకం చేసిన ప్రమాణపత్రం ఉంది. +ఈ సైట్ సర్టిఫికెట్ గొలుసులో SHA-1 ఉపయోగించి సంతకం చేసిన సర్టిఫికెట్ ఉంది. ఈ సర్వర్ అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం ప్రస్తుతం చెల్లదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడి చేసే వ్యక్తి మీ కనెక్షన్‌కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు. బ్రౌజింగ్ డేటాను క్లియర్ చేయి... బుక్‌మార్క్‌ను తీసివేయండి @@ -714,7 +714,7 @@ ఈ కంటెంట్ మీ సమాచారాన్ని దొంగిలించగల లేదా తొలగించగల హానికరమైన సాఫ్ట్‌వేర్‌ను మీ పరికరంలో ఇన్‌స్టాల్ చేయడానికి ప్రయత్నించవచ్చు. ఏదేమైనా చూపు చెల్లుబాటు అయ్యే చిరునామాను జోడించండి చిరునామాలు మరియు మరిన్ని -కంపెనీ, సంస్థ లేదా పాఠశాల ఇంట్రానెట్‌లోని ఈ సైట్- బాహ్య వెబ్‌సైట్ కలిగి ఉన్న అదే URLను కలిగి ఉంది. +కంపెనీ, సంస్థ లేదా పాఠశాల ఇంట్రానెట్‌లోని ఈ సైట్ URL, బాహ్య వెబ్‌సైట్‌కు ఉన్న URL ఒకేలా ఉంది. మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించడానికి ప్రయత్నించండి. పరిమాణం 3 @@ -770,7 +770,7 @@ అనుమతులు కు గల మీ కనెక్షన్ వాడుకలో లేని సైఫర్ సూట్ ఉపయోగించి ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది. &జోడించడాన్ని పునరావృతం చేయి -మీరు ఈ సైట్‌లో ఎలాంటి గోప్యమైన సమాచారాన్ని నమోదు చేయకూడదు (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్‌లు), దాడికి పాల్పడే వారు ఆ సమాచారం దొంగిలించే అవకాశం ఉంటుంది. +మీరు ఈ సైట్‌లో ఎలాంటి గోప్యమైన సమాచారాన్ని నమోదు చేయకూడదు (ఉదాహరణకు, పాస్‌వర్డ్‌లు లేదా క్రెడిట్ కార్డ్‌లు), దాడికి పాల్పడేవారు ఆ సమాచారం దొంగిలించే అవకాశం ఉంటుంది. మీరు చూడబోతున్న పేజీ మీకు డబ్బు ఛార్జ్ చేయడానికి ప్రయత్నించవచ్చు ఫోన్ నంబర్‌ను జోడించండి ఈ సైట్‌ను చేరుకోలేకపోయాము @@ -823,8 +823,8 @@ సర్వర్ ప్రమాణపత్రం చెల్లుబాటు వ్యవధి చాలా ఎక్కువ కాలం ఉంది. రవాణా పద్ధతులు మరియు అవసరాలను చూడాలంటే, చిరునామాని ఎంచుకోండి మరింత తెలుసుకోండి -‌ఇప్పుడు మీరు వ్యక్తిగతంగా బ్రౌజ్ చేయవచ్చు. ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులకు మీ కార్య‌క‌లాపం కనిపించదు. అయినప్పటికీ, డౌన్‌లోడ్‌లు, బుక్‌మార్క్‌లు సేవ్ చేయబడతాయి. -ఈ సైట్‌కి మీ కనెక్షన్ సురక్షితంగా లేదు +‌ఇప్పుడు మీరు వ్యక్తిగతంగా బ్రౌజ్ చేయవచ్చు మరియు ఈ పరికరాన్ని ఉపయోగించే ఇతర వ్యక్తులకు మీ కార్య‌క‌లాపం కనిపించదు. అయినప్పటికీ, డౌన్‌లోడ్‌లు మరియు బుక్‌మార్క్‌లు సేవ్ చేయబడతాయి. +ఈ సైట్‌తో మీకున్న కనెక్షన్ సురక్షితంగా లేదు మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి Chromium నుండి చిరునామాను తీసివేయాలా? Google సురక్షిత బ్రౌజింగ్ ఇటీవల లో మాల్వేర్‌ను గుర్తించింది. సాధారణంగా సురక్షితమైన వెబ్‌సైట్‌‌లకు కూడా కొన్నిసార్లు మాల్వేర్ సోకుతుంది. ఈ హానికరమైన కంటెంట్, మాల్వేర్ పంపిణీదారుగా ప్రసిద్ధిగాంచిన నుండి సంక్రమిస్తుంది. @@ -855,7 +855,7 @@ తర్వాతిసారి మరింత వేగంగా చెల్లించడానికి, మీ కార్డ్ మరియు బిల్లింగ్ చిరునామాను మీ Google ఖాతాకు మరియు ఈ పరికరానికి సేవ్ చేయండి. బుక్‌మార్క్‌ను సవరించండి గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి -మీరు ఈ సైట్‌ని సందర్శించడానికి అనుమతించమని కోరుతూ మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు +ఈ సైట్‌ను సందర్శించడానికి అనుమతి కోరుతూ మీరు మీ తల్లి/తండ్రికి అభ్యర్థన పంపారు ప్రమాణపత్రం రద్దు చెయ్యబడిందా అని తనిఖీ చెయ్యడం సాధ్యం కాలేదు. సంప్రదింపు సమాచారాన్ని సవరించండి కనెక్ట్ కావడానికి నిరాకరించింది. @@ -894,7 +894,7 @@ తెలియని సర్వర్ ప్రమాణపత్రం లోపం. కనెక్షన్ కోసం వేచి ఉన్నప్పుడు, మీరు ఆఫ్‌లైన్ కథనాలను చదవడానికి డౌన్‌లోడ్‌లను సందర్శించవచ్చు. విధానం విలువ -మీ పరికరం నిద్రావస్థకి వెళ్లింది. +మీ పరికరం నిద్రావస్థకు వెళ్లింది. మీ తల్లి/తండ్రి దీన్ని ఇంకా ఆమోదించలేదు నీలి ఊదా రంగు విధానం ప్రకారం, డిఫాల్ట్ శోధనను ప్రారంభించలేదు కాబట్టి, విస్మరించబడింది. @@ -969,8 +969,8 @@ కనెక్షన్ ని ఉపయోగిస్తుంది. ప్రాసెస్ చేస్తోంది ; -మీరు చేరుకోబోయే సైట్‌లో మాల్వేర్ ఉంది -మీ కార్డ్ వివరాలను అప్‌డేట్ చేయ‌డానికి కార్డ్ గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్‌ చేయబడతాయి. +ముందున్న సైట్‌లో మాల్వేర్ ఉంది +మీ కార్డ్ వివరాలను అప్‌డేట్ చేయడానికి కార్డ్ గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి. నెట్‌వర్క్ కాన్ఫిగరేషన్ ONC ప్రమాణానికి అనుకూలంగా లేదు. కాన్ఫిగరేషన్‌లోని భాగాలు దిగుమతి కాకపోయి ఉండకపోవచ్చు. అదనపు వివరాలు: @@ -1027,7 +1027,7 @@ డౌన్‌లోడ్ చేయి వెబ్ చిరునామాకు వెబ్‌పేజీ కనుగొనబడలేదు: JavaScript -ఈ సైట్‌కి మీ కనెక్షన్ ప్రైవేట్ కాదు +ఈ సైట్‌తో మీకున్న కనెక్షన్ ప్రైవేట్‌గా లేదు తప్పనిసరి మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్‌తో షేర్ చేయబడతాయి. ఈ ఫారమ్ సురక్షిత కనెక్షన్‌ను ఉపయోగించనందున క్రెడిట్ కార్డ్ వివరాలను ఆటోమేటిక్‌గా పూర్తి చేయడం ఆపివేయబడింది. @@ -1057,7 +1057,7 @@ సర్టిఫికెట్ అందించిన విధాన టోకెన్ ఖాళీగా ఉంది లేదా ప్రస్తుత టోకెన్‌తో సరిపోలలేదు తెలియని పరికరం -ఈ సైట్‌లోని దాడి చేసేవారు మీ బ్రౌజింగ్ అనుభవానికి హాని కలిగించే ప్రోగ్రామ్‌లను ఇన్‌స్టాల్ చేసే విధంగా (ఉదాహరణకు, మీ హోమ్ పేజీని మార్చడం లేదా మీరు సందర్శించే సైట్‌లలో అదనపు ప్రకటనలను చూపడం ద్వారా) మిమ్మల్ని మోసగించడానికి ప్రయత్నించవచ్చు. +ఈ సైట్‌లోని దాడి చేసేవారు మీ బ్రౌజింగ్ అనుభవానికి హాని కలిగించే (ఉదాహరణకు, మీ హోమ్ పేజీని మార్చడం లేదా మీరు సందర్శించే సైట్‌లలో అదనపు ప్రకటనలను చూపడం ద్వారా) ప్రోగ్రామ్‌లను ఇన్‌స్టాల్ చేసే విధంగా మిమ్మల్ని మోసగించడానికి ప్రయత్నించవచ్చు. శోధన ఇంజిన్‌ను మార్చు ఓడ రవాణా సేవ్ చేయబడిన మీ చెల్లింపు పద్ధతులతో చెల్లింపు ఫారమ్‌లను పూరిస్తుంది @@ -1091,7 +1091,7 @@ విధాన నిర్వహణ మీరు ఉపయోగిస్తున్న Wi-Fi అయిన (), దాని లాగిన్ పేజీని మీరు సందర్శించాల్సిందిగా కోరవచ్చు. {COUNT,plural, =0{ఏదీ వద్దు}=1{1 యాప్ ()}=2{2 యాప్‌లు (, )}other{# యాప్‌లు (, , )}} -అయినప్పటికీ, మీరు అదృశ్యంగా ఉండరు. అజ్ఞాతంలోకి వెళ్లడం వ‌ల్ల‌ మీ బ్రౌజింగ్- మీ యజమానికి, మీ ఇంటర్నెట్ సేవా ప్రదాతకు లేదా మీరు సందర్శించే వెబ్‌సైట్‌లకు కనిపించకుండా దాచబడదు. +అయితే, మీరు అదృశ్యంగా ఉండరు. అజ్ఞాతంలోకి వెళ్లడం వలన మీ బ్రౌజింగ్ మీ యజమానికి, మీ ఇంటర్నెట్ సేవా ప్రదాతకు లేదా మీరు సందర్శించే వెబ్‌సైట్‌లకు కనిపించకుండా దాచబడదు. సైట్ నుండి నిష్క్రమించాలా? డెబిట్ మరియు ప్రీపెయిడ్ కార్డ్‌లు ఆమోదించబడతాయి. @@ -1147,7 +1147,7 @@ ఆర్డర్ సారాంశం కనెక్షన్ సురక్షితంగా ఉంది కేటాయించిన స్థానం: -ఈ కంప్యూటర్‌ను సెటప్ చేసిన వ్యక్తి ఈ సైట్‌ను బ్లాక్ చేయడానికి ఎంచుకున్నారు. +ఈ కంప్యూటర్‌ను సెటప్ చేసిన వ్యక్తి ఈ సైట్‌ను బ్లాక్ చేయడం ఎంచుకున్నారు. , కొత్త అజ్ఞాత ట్యాబ్‌లో పేజీని తెరవండి మీరు వెతికే పేజీ మీరు ఎంటర్ చేసిన సమాచారాన్ని ఉపయోగించుకుంది. ఆ పేజీకి తిరిగి వెళ్ల‌డం ద్వారా మీరు చేసిన ఏ చర్య అయినా పునరావృతం చేయ‌వలసి వస్తుంది. మీరు కొనసాగాలని అనుకుంటున్నారా? @@ -1168,7 +1168,7 @@ సెషన్‌ను లోడ్ చేయి కి యాక్సెస్ నిరాకరించబడింది / -మీ భద్రతకు వాటిల్లే ఆపదల గురించి మీకు అర్థం అయ్యి ఉంటే, హానికర ప్రోగ్రామ్‌లు తీసివేయబడటానికి ముందే మీరు ఈ సైట్‌ను సందర్శించవచ్చు. +మీ భద్రతకు వాటిల్లే ఆపదలు మీకు అర్థం అయ్యి ఉంటే, హానికర ప్రోగ్రామ్‌లు తీసివేయబడటానికి ముందే మీరు ఈ సైట్‌ను సందర్శించవచ్చు. బుక్‌మార్క్‌ల పట్టీ ఎయిర్‌ప్లైన్ మోడ్‌ను ఆఫ్ చేయడం సెట్ చేయలేదు. @@ -1198,11 +1198,11 @@ Chrome పాస్‌వర్డ్‌లు యూజర్‌పేరు శోధన చిహ్నం -మీరు గుర్తింపు సమస్యను నివేదించవచ్చు లేదా మీకు మీ భద్రతకు పొంచి ఉన్న ప్రమాదాలు అర్థం అయ్యి ఉంటే, మఈ అసురక్షిత సైట్‌ను సందర్శించండి. +మీరు గుర్తింపు సమస్యను నివేదించవచ్చు లేదా మీకు మీ భద్రతకు పొంచి ఉన్న ప్రమాదాలు అర్థం అయ్యి ఉంటే, ఈ అసురక్షిత సైట్‌ను సందర్శించండి. ప్రశ్నలు ఏమైనా ఉన్నాయా? మీ ప్రొఫైల్‌ను పర్యవేక్షించే వ్యక్తిని సంప్రదించండి. పేజీ భాష నిర్థారించలేకపోయినందున అనువాదం విఫలమైంది. మీ కార్డు వెనుకవైపు CVC ఉంటుంది. -మీ పరికరం తేదీ మరియు సమయం () తప్పుగా ఉన్నందున కి ప్రైవేట్ కనెక్షన్ ఏర్పాటు చేయబడదు. +మీ పరికరం తేదీ మరియు సమయం తప్పుగా ఉన్నందున ()కు ప్రైవేట్ కనెక్షన్ ఏర్పాటు చేయబడదు. మీరు మీ పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించినట్లయితే దీనిని రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది. పేజీని కు అనువదిస్తోంది... ఫోన్ నం. జోడిం. @@ -1255,7 +1255,7 @@ నెల ఏదో తప్పు జరిగింది. మీరు వెబ్‌సైట్‌లో మీ ఆర్డర్‌ని పూర్తి చేయవచ్చు. [] -ఈ సైట్ హానికర ప్రోగ్రామ్‌లను కలిగి ఉంది +ఈ సైట్‌లో హానికర ప్రోగ్రామ్‌లు ఉన్నాయి సర్వర్ ప్రమాణపత్ర పారదర్శకత విధానాన్ని ఉపయోగించి పబ్లిక్‌గా బహిరంగపరచబడని ప్రమాణపత్రాన్ని అందించింది. కొన్ని ప్రమాణపత్రాలకు, అవి విశ్వసనీయమైనవని మరియు దాడి చేసేవారి నుండి రక్షణ కల్పించగలవని నిర్ధారించడానికి, ఇది ఆవశ్యకం. ప్రాక్సీకి వినియోగదారు పేరు మరియు పాస్‌వర్డ్ అవసరం. PDF పత్రాన్ని లోడ్ చేయడం విఫలమైంది. @@ -1288,7 +1288,7 @@ నవీకరించబడింది అమర్చుతోంది... మీ వద్ద సేవ్ చేయబడిన చెల్లింపు పద్ధతులు ఉన్నాయో లేదో తనిఖీ చేయడానికి సైట్‌లను అనుమతించండి -ఈ సైట్‌లో ఎల్లప్పుడూ బ్లాక్ చేయి +ఈ సైట్‌లో ఎప్పుడూ బ్లాక్ చేయి &అన్డు యాప్ నుండి నిష్క్రమించాలా? సర్వర్ యొక్క ప్రమాణపత్రం చెల్లుబాటు కాదు. 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; 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& - 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 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(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(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( 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( 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 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( + std::move(factory_ptr_info)); + url_loader_factory_getter = + base::MakeRefCounted( + std::move(wrapper_factory)); + } } else { StoragePartitionImpl* storage_partition = static_cast( 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 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 actions_; - // Used to receive updates to the active MediaSession. - mojo::Binding - media_session_observer_binding_{this}; + // Used to receive updates to the active media controller. + mojo::Binding + 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 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 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 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; @@ -101,6 +108,8 @@ class ChildConnection::IOThreadContext pid_receiver_.reset(); } + void ForceCrashOnIOThread() { child_->Crash(); } + scoped_refptr io_task_runner_; // Usable from the IO thread only. std::unique_ptr 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(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 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(); 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::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 #include #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 request_id_generator, std::unique_ptr 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 request_id_generator, std::unique_ptr navigation_ui_data, InfoMap* info_map, @@ -752,7 +758,7 @@ void WebRequestProxyingURLLoaderFactory::StartProxying( WebRequestAPI::ProxySet::GetFromResourceContext(resource_context); auto proxy = std::make_unique( - 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( - 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( + 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 request_id_generator, std::unique_ptr 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 request_id_generator, std::unique_ptr 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 request_id_generator_; std::unique_ptr 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::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* 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& buffer, } // static -bool AVC::ConvertFrameToAnnexB(int length_size, +bool AVC::ConvertFrameToAnnexB(size_t length_size, std::vector* buffer, std::vector* 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* buffer, std::vector* 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 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()>; using CreateAndInitializeVdaCB = - base::OnceCallback( + base::RepeatingCallback( scoped_refptr, 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 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 vda_; + scoped_refptr 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 { 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* 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(data_provider_); - auto recv_socket = std::make_unique(data_provider_); - socket_pairs->push_back( - std::make_pair(std::move(send_socket), std::move(recv_socket))); - } + void CreateSockets( + std::vector>* sockets) override { + int num_sockets = data_provider_->ConsumeIntegralInRange(1, 4); + for (int i = 0; i < num_sockets; ++i) + sockets->push_back(std::make_unique(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 - #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( - 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 CreateAndBindMDnsSocket( + AddressFamily address_family, + uint32_t interface_index, + NetLog* net_log) { + std::unique_ptr socket( + new UDPServerSocket(net_log, NetLogSource())); - auto recv_socket = std::make_unique(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> - 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* socket_pairs) = 0; + virtual void CreateSockets( + std::vector>* sockets) = 0; static std::unique_ptr CreateDefault(); }; @@ -186,19 +181,31 @@ class NET_EXPORT MDnsClient { static std::unique_ptr 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> 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 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* socket_pairs) { +void MDnsSocketFactoryImpl::CreateSockets( + std::vector>* 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 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 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& 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 socket_pairs; - socket_factory->CreateSocketPairs(&socket_pairs); + std::vector> sockets; + socket_factory->CreateSockets(&sockets); - for (auto& send_recv_sockets : socket_pairs) { + for (std::unique_ptr& socket : sockets) { socket_handlers_.push_back(std::make_unique( - 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* socket_pairs) override; + void CreateSockets( + std::vector>* 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 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 send_socket_; - std::unique_ptr recv_socket_; + std::unique_ptr 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(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* socket_pairs) override { - socket_pairs->clear(); - socket_pairs->swap(socket_pairs_); + void CreateSockets( + std::vector>* 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 socket) { + sockets_.push_back(std::move(socket)); } private: - std::vector socket_pairs_; + std::vector> 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(); - auto recv_socket_ipv4 = - std::make_unique(ADDRESS_FAMILY_IPV4); - auto send_socket_ipv6 = std::make_unique(); - auto recv_socket_ipv6 = - std::make_unique(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(sample_packet_); } @@ -1166,10 +1149,8 @@ class MDnsConnectionTest : public TestWithScopedTaskEnvironment { StrictMock 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)); 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* socket_pairs) { - CreateSocketPair(ADDRESS_FAMILY_IPV4, socket_pairs); - CreateSocketPair(ADDRESS_FAMILY_IPV6, socket_pairs); +void MockMDnsSocketFactory::CreateSockets( + std::vector>* sockets) { + CreateSocket(ADDRESS_FAMILY_IPV4, sockets); + CreateSocket(ADDRESS_FAMILY_IPV6, sockets); } -void MockMDnsSocketFactory::CreateSocketPair( +void MockMDnsSocketFactory::CreateSocket( AddressFamily address_family, - std::vector* socket_pairs) { - auto new_send_socket = - std::make_unique>(); - auto new_recv_socket = - std::make_unique>( - address_family); + std::vector>* sockets) { + std::unique_ptr> new_socket( + new testing::NiceMock(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* socket_pairs) override; + void CreateSockets( + std::vector>* 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* socket_pairs); + void CreateSocket( + AddressFamily address_family, + std::vector>* sockets); scoped_refptr 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 #include -#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 -#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& 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& 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()); + }); } } 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 observers_; + // Observers that are observing |this|. + mojo::InterfacePtrSet observers_; // Binding for |this| to act as an observer to |session_|. mojo::Binding 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 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 CreateNegativeResponse( class MdnsResponderManager::SocketHandler { public: SocketHandler(uint16_t id, - net::MDnsSendRecvSocketPair socket_pair, + std::unique_ptr socket, MdnsResponderManager* responder_manager) : id_(id), scheduler_(std::make_unique(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::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 scheduler_; - std::unique_ptr send_socket_; - std::unique_ptr recv_socket_; + std::unique_ptr 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 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 socket_pairs; + std::vector> 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& socket : sockets) { socket_handler_by_id_.emplace( next_available_id, std::make_unique( - 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*)); + MOCK_METHOD1(CreateSockets, + void(std::vector>*)); 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* socket_pairs) { - auto send_socket = - std::make_unique>(); - - auto recv_socket = + [this](std::vector>* sockets) { + auto socket = std::make_unique>( 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* socket_pairs) { - auto send_socket = - std::make_unique>(); - auto recv_socket = + [this](std::vector>* sockets) { + auto socket = std::make_unique>( 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 environment) { + std::unique_ptr 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 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 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 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* 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* category_set); + private: friend class base::NoDestructor; 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(EBreakBetween::kAuto)), + break_after_(static_cast(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 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(EBreakBetween::kAuto)), - break_after_(static_cast(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 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); + 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* 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 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> 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{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(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. + + maajid@google.com + shaochuan@google.com + shihuis@google.com + + 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. + + + maajid@google.com shaochuan@google.com @@ -4363,11 +4376,12 @@ uploading your change for review. shaochuan@google.com shihuis@google.com - Total user session time (from login to logout) excluding times when user - "disengages": screen is locked or dims down due to user idle. + Total CrOS user session time (from login to logout) excluding times when + user "disengages": 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. 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. - - 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 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 @@ (ఖాళీ) తక్కువ సాంద్రతను ఉపయోగించు లాంచర్, అన్ని యాప్‌లు -ఈ సైట్ నుండి నోటిఫికేషన్‌లు అన్ని బ్లాక్ చేయండి +ఈ సైట్ నుండి నోటిఫికేషన్‌లన్నీ బ్లాక్ చేయండి మీ స్క్రీన్‌పై ఉన్న స్పర్శ లక్ష్యాలను నొక్కండి. సర్వే TB/s 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::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(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* 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 Factory::NewObjectBoilerplateDescription( Handle 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::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( reinterpret_cast
(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; 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 "" + // Its syntax is #line "" } 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 "" +} + 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! -- cgit v1.2.3