diff --git a/DEPS b/DEPS index 2ba3113..828304e 100644 --- a/DEPS +++ b/DEPS
@@ -167,11 +167,11 @@ # 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': '9e951cd782c4dd3cec36c05dd7448ebfc415a389', + 'skia_revision': '4c82a9fc83a5b2a18c1daa251121f8cb324f2d9d', # 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': '35874570ba6306d2d41a6b0a468ab7e41c99ed2e', + 'v8_revision': '14b4bc0d0f1dfa2c7e420c60f86443ffbb301286', # 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. @@ -179,11 +179,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '6b60dfd80e3dc3fe13eb1b9bcaf8b36f30e20b45', + 'angle_revision': '1ba72546da4ce83b340fdd965655010b75c749db', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': 'a580e2d761c1994a42e01866cfca5e318a67d12c', + 'swiftshader_revision': '23463e8bb77fbc536ae4621ae28e328e8715103d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -306,7 +306,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'quiche_revision': 'f518a2641c6d0b2e6cc130024e3f8a45771393c4', + 'quiche_revision': 'ef79a5fa1b2c3303dc1dae969482ead934be85a8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ios_webkit # and whatever else without interference from each other. @@ -862,7 +862,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '34ff91ec6f44e0fc5d90c70f2ed1a4d117d8c009', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'bd5145058235319ea6d2652b1f1d2daf785502cf', 'condition': 'checkout_linux', }, @@ -877,7 +877,7 @@ # For Linux and Chromium OS. 'src/third_party/cros_system_api': { - 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '9b9ccf7ac88ac67a2fe88bf9beeb0b07cf163d76', + 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '61297bd64bfd78f9d4288ab44e28976b53f369f2', 'condition': 'checkout_linux', }, @@ -887,7 +887,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'aa4d8a75604db8a824c82cca0e6f8001e6b11723', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd696f201295e38d907b4d8c03f9f270581b0e07c', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -1087,6 +1087,17 @@ 'condition': 'checkout_android', }, + 'src/third_party/jdk': { + 'packages': [ + { + 'package': 'chromium/third_party/jdk', + 'version': 'rfJtuH296mzs7BYOgmQkpz-7ydXtpLKeO15qDDMaa5cC', + }, + ], + 'condition': 'host_os == "linux" and checkout_android', + 'dep_type': 'cipd', + }, + 'src/third_party/jsoncpp/source': Var('chromium_git') + '/external/github.com/open-source-parsers/jsoncpp.git' + '@' + '645250b6690785be60ab6780ce4b58698d884d11', # release 1.9.1 @@ -1521,7 +1532,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@40ba239931e22de2d9e066fa3b8095062816120a', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d1f79f968fc009d6ae76f0f231863432649ef3d5', 'condition': 'checkout_src_internal', },
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 4d792e8..6f5b5b8 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -1357,7 +1357,6 @@ 'net/tools/testserver/testserver.pydeps', 'testing/scripts/run_android_wpt.pydeps', 'third_party/android_platform/development/scripts/stack.pydeps', - 'tools/android/avd/avd.pydeps', ]
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 9317afe..738efb1 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn
@@ -57,8 +57,6 @@ "java/src/org/chromium/android_webview/AwFeatureList.java", "java/src/org/chromium/android_webview/AwFormDatabase.java", "java/src/org/chromium/android_webview/AwHttpAuthHandler.java", - "java/src/org/chromium/android_webview/AwMetricsLogUploader.java", - "java/src/org/chromium/android_webview/AwMetricsServiceClient.java", "java/src/org/chromium/android_webview/AwPdfExporter.java", "java/src/org/chromium/android_webview/AwProxyController.java", "java/src/org/chromium/android_webview/AwQuotaManagerBridge.java", @@ -77,6 +75,8 @@ "java/src/org/chromium/android_webview/gfx/AwGLFunctor.java", "java/src/org/chromium/android_webview/gfx/AwPicture.java", "java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java", + "java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java", + "java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java", "java/src/org/chromium/android_webview/permission/AwPermissionRequest.java", ] @@ -537,8 +537,6 @@ "java/src/org/chromium/android_webview/AwHistogramRecorder.java", "java/src/org/chromium/android_webview/AwHttpAuthHandler.java", "java/src/org/chromium/android_webview/AwLayoutSizer.java", - "java/src/org/chromium/android_webview/AwMetricsLogUploader.java", - "java/src/org/chromium/android_webview/AwMetricsServiceClient.java", "java/src/org/chromium/android_webview/AwNetworkChangeNotifierRegistrationPolicy.java", "java/src/org/chromium/android_webview/AwPdfExporter.java", "java/src/org/chromium/android_webview/AwPrintDocumentAdapter.java", @@ -594,6 +592,8 @@ "java/src/org/chromium/android_webview/gfx/AwGLFunctor.java", "java/src/org/chromium/android_webview/gfx/AwPicture.java", "java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java", + "java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java", + "java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java", "java/src/org/chromium/android_webview/permission/AwGeolocationCallback.java", "java/src/org/chromium/android_webview/permission/AwPermissionRequest.java", "java/src/org/chromium/android_webview/policy/AwPolicyProvider.java",
diff --git a/android_webview/browser/BUILD.gn b/android_webview/browser/BUILD.gn index ef9748c..c7773448 100644 --- a/android_webview/browser/BUILD.gn +++ b/android_webview/browser/BUILD.gn
@@ -68,10 +68,6 @@ "aw_javascript_dialog_manager.h", "aw_media_url_interceptor.cc", "aw_media_url_interceptor.h", - "aw_metrics_log_uploader.cc", - "aw_metrics_log_uploader.h", - "aw_metrics_service_client.cc", - "aw_metrics_service_client.h", "aw_pdf_exporter.cc", "aw_pdf_exporter.h", "aw_permission_manager.cc", @@ -119,8 +115,6 @@ "js_java_interaction/js_reply_proxy.h", "js_java_interaction/js_to_java_messaging.cc", "js_java_interaction/js_to_java_messaging.h", - "memory_metrics_logger.cc", - "memory_metrics_logger.h", "network_service/android_stream_reader_url_loader.cc", "network_service/android_stream_reader_url_loader.h", "network_service/aw_network_change_notifier.cc", @@ -189,6 +183,7 @@ "//android_webview:browser_jni_headers", "//android_webview:generate_components_strings", "//android_webview/browser/gfx", + "//android_webview/browser/metrics", "//android_webview/common", "//android_webview/common:common_mojom", "//base", @@ -203,9 +198,6 @@ "//components/google/core/common", "//components/heap_profiling", "//components/metrics", - "//components/metrics:gpu", - "//components/metrics:net", - "//components/metrics:ui", "//components/minidump_uploader", "//components/navigation_interception", "//components/page_load_metrics/browser", @@ -244,7 +236,6 @@ "//media/mojo:buildflags", "//printing", "//services/preferences/tracked", - "//services/resource_coordinator/public/cpp/memory_instrumentation:browser", "//third_party/crashpad/crashpad/client", "//ui/android", "//ui/gl",
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc index 8c7a368..8b476e0 100644 --- a/android_webview/browser/aw_browser_context.cc +++ b/android_webview/browser/aw_browser_context.cc
@@ -12,12 +12,12 @@ #include "android_webview/browser/aw_content_browser_client.h" #include "android_webview/browser/aw_download_manager_delegate.h" #include "android_webview/browser/aw_form_database_service.h" -#include "android_webview/browser/aw_metrics_service_client.h" #include "android_webview/browser/aw_permission_manager.h" #include "android_webview/browser/aw_quota_manager_bridge.h" #include "android_webview/browser/aw_resource_context.h" #include "android_webview/browser/aw_web_ui_controller_factory.h" #include "android_webview/browser/cookie_manager.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" #include "android_webview/browser/network_service/net_helpers.h" #include "android_webview/browser/safe_browsing/aw_safe_browsing_whitelist_manager.h" #include "android_webview/browser_jni_headers/AwBrowserContext_jni.h"
diff --git a/android_webview/browser/aw_browser_main_parts.cc b/android_webview/browser/aw_browser_main_parts.cc index abf1cca..a607a10 100644 --- a/android_webview/browser/aw_browser_main_parts.cc +++ b/android_webview/browser/aw_browser_main_parts.cc
@@ -12,9 +12,9 @@ #include "android_webview/browser/aw_browser_context.h" #include "android_webview/browser/aw_browser_terminator.h" #include "android_webview/browser/aw_content_browser_client.h" -#include "android_webview/browser/aw_metrics_service_client.h" #include "android_webview/browser/aw_web_ui_controller_factory.h" -#include "android_webview/browser/memory_metrics_logger.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" +#include "android_webview/browser/metrics/memory_metrics_logger.h" #include "android_webview/browser/network_service/aw_network_change_notifier_factory.h" #include "android_webview/common/aw_descriptors.h" #include "android_webview/common/aw_paths.h"
diff --git a/android_webview/browser/aw_feature_list_creator.cc b/android_webview/browser/aw_feature_list_creator.cc index 225599e..21d08d1 100644 --- a/android_webview/browser/aw_feature_list_creator.cc +++ b/android_webview/browser/aw_feature_list_creator.cc
@@ -12,8 +12,8 @@ #include "android_webview/browser/aw_browser_context.h" #include "android_webview/browser/aw_browser_process.h" -#include "android_webview/browser/aw_metrics_service_client.h" #include "android_webview/browser/aw_variations_seed_bridge.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" #include "base/base_switches.h" #include "base/bind.h" #include "base/bind_helpers.h"
diff --git a/android_webview/browser/metrics/BUILD.gn b/android_webview/browser/metrics/BUILD.gn new file mode 100644 index 0000000..3283d27 --- /dev/null +++ b/android_webview/browser/metrics/BUILD.gn
@@ -0,0 +1,28 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("metrics") { + sources = [ + "aw_metrics_log_uploader.cc", + "aw_metrics_log_uploader.h", + "aw_metrics_service_client.cc", + "aw_metrics_service_client.h", + "memory_metrics_logger.cc", + "memory_metrics_logger.h", + ] + deps = [ + "//android_webview:browser_jni_headers", + "//android_webview/common", + "//base", + "//components/metrics", + "//components/metrics:gpu", + "//components/metrics:net", + "//components/metrics:ui", + "//components/prefs", + "//components/version_info", + "//components/version_info/android:channel_getter", + "//content/public/browser", + "//services/resource_coordinator/public/cpp/memory_instrumentation:browser", + ] +}
diff --git a/android_webview/browser/metrics/OWNERS b/android_webview/browser/metrics/OWNERS new file mode 100644 index 0000000..bb91825 --- /dev/null +++ b/android_webview/browser/metrics/OWNERS
@@ -0,0 +1,4 @@ +ntfschr@chromium.org + +# TEAM: android-webview-dev@chromium.org +# COMPONENT: Mobile>WebView
diff --git a/android_webview/browser/aw_metrics_log_uploader.cc b/android_webview/browser/metrics/aw_metrics_log_uploader.cc similarity index 96% rename from android_webview/browser/aw_metrics_log_uploader.cc rename to android_webview/browser/metrics/aw_metrics_log_uploader.cc index 3230508..ec34e4e 100644 --- a/android_webview/browser/aw_metrics_log_uploader.cc +++ b/android_webview/browser/metrics/aw_metrics_log_uploader.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "android_webview/browser/aw_metrics_log_uploader.h" +#include "android_webview/browser/metrics/aw_metrics_log_uploader.h" #include "android_webview/browser_jni_headers/AwMetricsLogUploader_jni.h" #include "base/android/jni_array.h"
diff --git a/android_webview/browser/aw_metrics_log_uploader.h b/android_webview/browser/metrics/aw_metrics_log_uploader.h similarity index 85% rename from android_webview/browser/aw_metrics_log_uploader.h rename to android_webview/browser/metrics/aw_metrics_log_uploader.h index b57aedb..4a7e457d 100644 --- a/android_webview/browser/aw_metrics_log_uploader.h +++ b/android_webview/browser/metrics/aw_metrics_log_uploader.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ANDROID_WEBVIEW_BROWSER_AW_METRICS_LOG_UPLOADER_H_ -#define ANDROID_WEBVIEW_BROWSER_AW_METRICS_LOG_UPLOADER_H_ +#ifndef ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_LOG_UPLOADER_H_ +#define ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_LOG_UPLOADER_H_ #include <jni.h> #include <string> @@ -37,4 +37,4 @@ } // namespace android_webview -#endif // ANDROID_WEBVIEW_BROWSER_AW_METRICS_LOG_UPLOADER_H_ +#endif // ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_LOG_UPLOADER_H_
diff --git a/android_webview/browser/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc similarity index 98% rename from android_webview/browser/aw_metrics_service_client.cc rename to android_webview/browser/metrics/aw_metrics_service_client.cc index 717a88a..e117d98 100644 --- a/android_webview/browser/aw_metrics_service_client.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "android_webview/browser/aw_metrics_service_client.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" #include <jni.h> #include <cstdint> #include <memory> -#include "android_webview/browser/aw_metrics_log_uploader.h" +#include "android_webview/browser/metrics/aw_metrics_log_uploader.h" #include "android_webview/browser_jni_headers/AwMetricsServiceClient_jni.h" #include "android_webview/common/aw_features.h" #include "base/android/jni_android.h"
diff --git a/android_webview/browser/aw_metrics_service_client.h b/android_webview/browser/metrics/aw_metrics_service_client.h similarity index 95% rename from android_webview/browser/aw_metrics_service_client.h rename to android_webview/browser/metrics/aw_metrics_service_client.h index 38ce133..1c8b4e1 100644 --- a/android_webview/browser/aw_metrics_service_client.h +++ b/android_webview/browser/metrics/aw_metrics_service_client.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_H_ -#define ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_H_ +#ifndef ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_SERVICE_CLIENT_H_ +#define ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_SERVICE_CLIENT_H_ #include <memory> #include <string> @@ -91,7 +91,7 @@ void Initialize(PrefService* pref_service); void SetHaveMetricsConsent(bool user_consent, bool app_consent); std::unique_ptr<const base::FieldTrial::EntropyProvider> - CreateLowEntropyProvider(); + CreateLowEntropyProvider(); // metrics::EnabledStateProvider bool IsConsentGiven() const override; @@ -141,4 +141,4 @@ } // namespace android_webview -#endif // ANDROID_WEBVIEW_BROWSER_AW_METRICS_SERVICE_CLIENT_H_ +#endif // ANDROID_WEBVIEW_BROWSER_METRICS_AW_METRICS_SERVICE_CLIENT_H_
diff --git a/android_webview/browser/aw_metrics_service_client_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc similarity index 98% rename from android_webview/browser/aw_metrics_service_client_unittest.cc rename to android_webview/browser/metrics/aw_metrics_service_client_unittest.cc index d75a5e0..cb937e9 100644 --- a/android_webview/browser/aw_metrics_service_client_unittest.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "android_webview/browser/aw_metrics_service_client.h" +#include "android_webview/browser/metrics/aw_metrics_service_client.h" #include "base/command_line.h" #include "base/macros.h"
diff --git a/android_webview/browser/memory_metrics_logger.cc b/android_webview/browser/metrics/memory_metrics_logger.cc similarity index 98% rename from android_webview/browser/memory_metrics_logger.cc rename to android_webview/browser/metrics/memory_metrics_logger.cc index ef1ec918..71a6930 100644 --- a/android_webview/browser/memory_metrics_logger.cc +++ b/android_webview/browser/metrics/memory_metrics_logger.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "android_webview/browser/memory_metrics_logger.h" +#include "android_webview/browser/metrics/memory_metrics_logger.h" #include "base/bind.h" #include "base/bind_helpers.h"
diff --git a/android_webview/browser/memory_metrics_logger.h b/android_webview/browser/metrics/memory_metrics_logger.h similarity index 89% rename from android_webview/browser/memory_metrics_logger.h rename to android_webview/browser/metrics/memory_metrics_logger.h index 33cf80a..0e8c198f 100644 --- a/android_webview/browser/memory_metrics_logger.h +++ b/android_webview/browser/metrics/memory_metrics_logger.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ANDROID_WEBVIEW_BROWSER_MEMORY_METRICS_LOGGER_H_ -#define ANDROID_WEBVIEW_BROWSER_MEMORY_METRICS_LOGGER_H_ +#ifndef ANDROID_WEBVIEW_BROWSER_METRICS_MEMORY_METRICS_LOGGER_H_ +#define ANDROID_WEBVIEW_BROWSER_METRICS_MEMORY_METRICS_LOGGER_H_ #include <jni.h> #include <memory> @@ -56,4 +56,4 @@ } // namespace android_webview -#endif // ANDROID_WEBVIEW_BROWSER_MEMORY_METRICS_LOGGER_H_ +#endif // ANDROID_WEBVIEW_BROWSER_METRICS_MEMORY_METRICS_LOGGER_H_
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java index e3b8ace..82b16eb 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -17,6 +17,7 @@ import org.chromium.android_webview.common.CommandLineUtil; import org.chromium.android_webview.common.PlatformServiceBridge; import org.chromium.android_webview.common.ServiceNames; +import org.chromium.android_webview.metrics.AwMetricsServiceClient; import org.chromium.android_webview.policy.AwPolicyProvider; import org.chromium.android_webview.services.ICrashReceiverService; import org.chromium.base.CommandLine;
diff --git a/android_webview/java/src/org/chromium/android_webview/WebMessageListenerHolder.java b/android_webview/java/src/org/chromium/android_webview/WebMessageListenerHolder.java index b730e16..abbdbad9 100644 --- a/android_webview/java/src/org/chromium/android_webview/WebMessageListenerHolder.java +++ b/android_webview/java/src/org/chromium/android_webview/WebMessageListenerHolder.java
@@ -5,7 +5,8 @@ package org.chromium.android_webview; import android.net.Uri; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwMetricsLogUploader.java b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java similarity index 94% rename from android_webview/java/src/org/chromium/android_webview/AwMetricsLogUploader.java rename to android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java index 43122da..b75f8edd 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwMetricsLogUploader.java +++ b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.android_webview; +package org.chromium.android_webview.metrics; import org.chromium.android_webview.common.PlatformServiceBridge; import org.chromium.base.annotations.CalledByNative;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java similarity index 98% rename from android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java rename to android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java index ce44aacf..02c9e85 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwMetricsServiceClient.java +++ b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.android_webview; +package org.chromium.android_webview.metrics; import android.content.Context; import android.content.pm.ApplicationInfo;
diff --git a/android_webview/java/src/org/chromium/android_webview/metrics/OWNERS b/android_webview/java/src/org/chromium/android_webview/metrics/OWNERS new file mode 100644 index 0000000..f4b67ee --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/metrics/OWNERS
@@ -0,0 +1 @@ +file://android_webview/browser/metrics/OWNERS
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/memory_metrics_logger_test.cc b/android_webview/javatests/src/org/chromium/android_webview/test/memory_metrics_logger_test.cc index d9ae9e32..e97ad2d3 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/memory_metrics_logger_test.cc +++ b/android_webview/javatests/src/org/chromium/android_webview/test/memory_metrics_logger_test.cc
@@ -4,7 +4,7 @@ #include "android_webview/test/webview_instrumentation_test_native_jni/MemoryMetricsLoggerTest_jni.h" -#include "android_webview/browser/memory_metrics_logger.h" +#include "android_webview/browser/metrics/memory_metrics_logger.h" #include "base/run_loop.h" #include "base/test/bind_test_util.h" #include "base/test/task_environment.h"
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index edcbb600..e810a83 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -337,6 +337,7 @@ } generate_jni("webview_instrumentation_test_native_jni") { + testonly = true sources = [ "../javatests/src/org/chromium/android_webview/test/MemoryMetricsLoggerTest.java", ] @@ -350,6 +351,7 @@ deps = [ ":webview_instrumentation_test_native_jni", "//android_webview/browser", + "//android_webview/browser/metrics", "//base", "//base/test:test_support", ] @@ -362,6 +364,7 @@ ":android_webview_unittests_jni", "//android_webview/browser", "//android_webview/browser/gfx", + "//android_webview/browser/metrics", "//base/test:test_support", "//components/autofill/core/browser", "//components/metrics", @@ -384,7 +387,6 @@ "../browser/aw_contents_client_bridge_unittest.cc", "../browser/aw_form_database_service_unittest.cc", "../browser/aw_media_url_interceptor_unittest.cc", - "../browser/aw_metrics_service_client_unittest.cc", "../browser/aw_permission_manager_unittest.cc", "../browser/gfx/browser_view_renderer_unittest.cc", "../browser/gfx/test/fake_window.cc", @@ -392,6 +394,7 @@ "../browser/gfx/test/rendering_test.cc", "../browser/gfx/test/rendering_test.h", "../browser/input_stream_unittest.cc", + "../browser/metrics/aw_metrics_service_client_unittest.cc", "../browser/network_service/android_stream_reader_url_loader_unittest.cc", "../browser/network_service/input_stream_reader_unittest.cc", "../browser/permission/media_access_permission_request_unittest.cc", @@ -424,6 +427,7 @@ } generate_jni("android_webview_unittests_jni") { + testonly = true sources = [ "../unittestjava/src/org/chromium/android_webview/unittest/InputStreamUnittest.java", "../unittestjava/src/org/chromium/android_webview/unittest/MockAwContentsClientBridge.java",
diff --git a/android_webview/test/embedded_test_server/BUILD.gn b/android_webview/test/embedded_test_server/BUILD.gn index 297c3a8d..e6252b6 100644 --- a/android_webview/test/embedded_test_server/BUILD.gn +++ b/android_webview/test/embedded_test_server/BUILD.gn
@@ -23,6 +23,7 @@ } generate_jni("aw_net_jni_headers") { + testonly = true sources = [ "java/src/org/chromium/android_webview/test/AwEmbeddedTestServerImpl.java", ]
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc index e70eb96..b3b481c 100644 --- a/ash/app_list/views/apps_container_view.cc +++ b/ash/app_list/views/apps_container_view.cc
@@ -213,6 +213,10 @@ if (app_list_state == ash::AppListViewState::kClosed) return; + set_can_process_events_within_subtree( + app_list_state == ash::AppListViewState::kFullscreenAllApps || + app_list_state == ash::AppListViewState::kPeeking); + apps_grid_view_->UpdateControlVisibility(app_list_state, is_in_drag); page_switcher_->SetVisible( is_in_drag ||
diff --git a/ash/home_screen/home_launcher_gesture_handler.cc b/ash/home_screen/home_launcher_gesture_handler.cc index 84c908a..31df4476 100644 --- a/ash/home_screen/home_launcher_gesture_handler.cc +++ b/ash/home_screen/home_launcher_gesture_handler.cc
@@ -32,6 +32,7 @@ #include "base/metrics/user_metrics.h" #include "base/numerics/ranges.h" #include "ui/aura/client/window_types.h" +#include "ui/aura/scoped_window_event_targeting_blocker.h" #include "ui/base/hit_test.h" #include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/gfx/animation/tween.h" @@ -228,15 +229,14 @@ public: explicit ScopedWindowModifier(aura::Window* window) : window_(window) { DCHECK(window_); - original_event_targeting_policy_ = window_->event_targeting_policy(); - window_->SetEventTargetingPolicy(aura::EventTargetingPolicy::kNone); + event_targeting_blocker_ = + std::make_unique<aura::ScopedWindowEventTargetingBlocker>(window_); } ~ScopedWindowModifier() override { for (const auto& descendant : transient_descendants_values_) descendant.first->RemoveObserver(this); ResetOpacityAndTransform(); - window_->SetEventTargetingPolicy(original_event_targeting_policy_); } bool IsAnimating() const { @@ -324,7 +324,8 @@ // For the duration of this object |window_| event targeting policy will be // sent to kNone. Store the original so we can change it back when destroying // this object. - aura::EventTargetingPolicy original_event_targeting_policy_; + std::unique_ptr<aura::ScopedWindowEventTargetingBlocker> + event_targeting_blocker_; DISALLOW_COPY_AND_ASSIGN(ScopedWindowModifier); };
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc index dff9bd9..4d13894 100644 --- a/ash/wm/overview/overview_session.cc +++ b/ash/wm/overview/overview_session.cc
@@ -996,10 +996,9 @@ grid->SetBoundsAndUpdatePositions( GetGridBoundsInScreen(const_cast<aura::Window*>(grid->root_window()), /*divider_changed=*/true), - /*ignored_items=*/{}, /*animate=*/true); + /*ignored_items=*/{}, /*animate=*/false); } - PositionWindows(/*animate=*/false); - UpdateNoWindowsWidget(); + RefreshNoWindowsWidgetBounds(/*animate=*/false); } void OverviewSession::ResetFocusRestoreWindow(bool focus) { @@ -1084,7 +1083,7 @@ /*divider_changed=*/false), /*ignored_items=*/{}, /*animate=*/false); } - UpdateNoWindowsWidget(); + RefreshNoWindowsWidgetBounds(/*animate=*/false); } void OverviewSession::UpdateNoWindowsWidget() {
diff --git a/ash/wm/overview/scoped_overview_transform_window.cc b/ash/wm/overview/scoped_overview_transform_window.cc index b59cf355..25d4339 100644 --- a/ash/wm/overview/scoped_overview_transform_window.cc +++ b/ash/wm/overview/scoped_overview_transform_window.cc
@@ -29,6 +29,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/transient_window_client.h" +#include "ui/aura/scoped_window_event_targeting_blocker.h" #include "ui/aura/window.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_observer.h" @@ -111,8 +112,9 @@ std::vector<aura::Window*> transient_children_to_hide; for (auto* transient : GetTransientTreeIterator(window)) { - targeting_policy_map_[transient] = transient->event_targeting_policy(); - transient->SetEventTargetingPolicy(aura::EventTargetingPolicy::kNone); + event_targeting_blocker_map_[transient] = + std::make_unique<aura::ScopedWindowEventTargetingBlocker>(transient); + transient->SetProperty(kIsShowingInOverviewKey, true); // Hide transient children which have been specified to be hidden in @@ -160,10 +162,8 @@ ScopedOverviewTransformWindow::~ScopedOverviewTransformWindow() { for (auto* transient : GetTransientTreeIterator(window_)) { transient->ClearProperty(kIsShowingInOverviewKey); - DCHECK(targeting_policy_map_.contains(transient)); - auto it = targeting_policy_map_.find(transient); - transient->SetEventTargetingPolicy(it->second); - targeting_policy_map_.erase(it); + DCHECK(event_targeting_blocker_map_.contains(transient)); + event_targeting_blocker_map_.erase(transient); } // No need to update the clip since we're about to restore it to @@ -425,10 +425,11 @@ if (parent != window_ && !::wm::HasTransientAncestor(parent, window_)) return; - DCHECK(!targeting_policy_map_.contains(transient_child)); - targeting_policy_map_[transient_child] = - transient_child->event_targeting_policy(); - transient_child->SetEventTargetingPolicy(aura::EventTargetingPolicy::kNone); + DCHECK(!event_targeting_blocker_map_.contains(transient_child)); + event_targeting_blocker_map_[transient_child] = + std::make_unique<aura::ScopedWindowEventTargetingBlocker>( + transient_child); + transient_child->SetProperty(kIsShowingInOverviewKey, true); } void ScopedOverviewTransformWindow::OnTransientChildWindowRemoved( @@ -437,10 +438,9 @@ if (parent != window_ && !::wm::HasTransientAncestor(parent, window_)) return; - DCHECK(targeting_policy_map_.contains(transient_child)); - auto it = targeting_policy_map_.find(transient_child); - transient_child->SetEventTargetingPolicy(it->second); - targeting_policy_map_.erase(it); + transient_child->ClearProperty(kIsShowingInOverviewKey); + DCHECK(event_targeting_blocker_map_.contains(transient_child)); + event_targeting_blocker_map_.erase(transient_child); } void ScopedOverviewTransformWindow::CloseWidget() {
diff --git a/ash/wm/overview/scoped_overview_transform_window.h b/ash/wm/overview/scoped_overview_transform_window.h index d283d6b8..7f5827ec 100644 --- a/ash/wm/overview/scoped_overview_transform_window.h +++ b/ash/wm/overview/scoped_overview_transform_window.h
@@ -21,9 +21,11 @@ #include "ui/gfx/transform.h" namespace aura { + class Window; -enum class EventTargetingPolicy; -} +class ScopedWindowEventTargetingBlocker; + +} // namespace aura namespace ui { class Layer; @@ -182,8 +184,6 @@ // The original opacity of the window before entering overview mode. float original_opacity_; - aura::EventTargetingPolicy original_event_targeting_policy_; - // Specifies how the window is laid out in the grid. GridWindowFillMode type_ = GridWindowFillMode::kNormal; @@ -200,8 +200,9 @@ // For the duration of this object |window_| and its transient childrens' // event targeting policy will be sent to NONE. Store the originals so we can // change it back when destroying |this|. - base::flat_map<aura::Window*, aura::EventTargetingPolicy> - targeting_policy_map_; + base::flat_map<aura::Window*, + std::unique_ptr<aura::ScopedWindowEventTargetingBlocker>> + event_targeting_blocker_map_; // The original mask layer of the window before entering overview mode. ui::Layer* original_mask_layer_ = nullptr;
diff --git a/base/android/java/templates/BuildConfig.template b/base/android/java/templates/BuildConfig.template index 32bddbc..64dbe44a 100644 --- a/base/android/java/templates/BuildConfig.template +++ b/base/android/java/templates/BuildConfig.template
@@ -68,4 +68,10 @@ #else public static MAYBE_FINAL int MIN_SDK_VERSION = 1; #endif + +#if defined(_IS_BUNDLE) + public static MAYBE_FINAL boolean IS_BUNDLE = true; +#else + public static MAYBE_FINAL boolean IS_BUNDLE MAYBE_FALSE; +#endif }
diff --git a/base/file_version_info_win_unittest.cc b/base/file_version_info_win_unittest.cc index 6c81bb7..0bab8568 100644 --- a/base/file_version_info_win_unittest.cc +++ b/base/file_version_info_win_unittest.cc
@@ -16,6 +16,7 @@ #include "base/path_service.h" #include "base/scoped_native_library.h" #include "base/strings/string_util.h" +#include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" using base::FilePath; @@ -157,6 +158,9 @@ version_info_win->GetFileVersion()); } +#if defined(ARCH_CPU_64_BITS) +// TODO(bug_1011439): Change no_version_info.dll to 32 bit, so this test will +// work for 32-bit Windows as well. TYPED_TEST(FileVersionInfoTest, NoVersionInfo) { FilePath dll_path = GetTestDataPath(); dll_path = dll_path.AppendASCII("no_version_info.dll"); @@ -164,3 +168,4 @@ TypeParam factory(dll_path); ASSERT_FALSE(factory.Create()); } +#endif
diff --git a/base/test/BUILD.gn b/base/test/BUILD.gn index ad5af73d..53ea803 100644 --- a/base/test/BUILD.gn +++ b/base/test/BUILD.gn
@@ -456,6 +456,7 @@ if (is_android) { generate_jni("base_unittests_jni_headers") { + testonly = true sources = [ "android/java/src/org/chromium/base/ContentUriTestUtils.java", "android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java", @@ -463,6 +464,7 @@ } generate_jni("test_support_jni_headers") { + testonly = true sources = [ "android/java/src/org/chromium/base/MainReturnCodeResult.java", "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java",
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index 8abd1a72..4f36326 100644 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn
@@ -93,15 +93,11 @@ data += [ "//third_party/android_build_tools/bundletool/bundletool-all-0.10.3.jar", ] - data_deps += [ - "//third_party/android_platform/development/scripts:stack_py", - "//tools/android/avd:avd_py", - ] + data_deps += + [ "//third_party/android_platform/development/scripts:stack_py" ] if (is_asan) { data_deps += [ "//tools/android/asan/third_party:asan_device_setup" ] } - } else { - pydeps_sources_assignment_filters = [ "../../tools/android/*" ] } # Proguard is needed only when using apks (rather than native executables).
diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py index 32ccfac..8eb0792 100644 --- a/build/android/PRESUBMIT.py +++ b/build/android/PRESUBMIT.py
@@ -10,8 +10,6 @@ def CommonChecks(input_api, output_api): - output = [] - build_android_dir = input_api.PresubmitLocalPath() def J(*dirs): @@ -19,32 +17,38 @@ return input_api.os_path.join(build_android_dir, *dirs) build_pys = [ + r'gn/.*\.py$', r'gyp/.*\.py$', - r'gn/.*\.py', ] - output.extend(input_api.canned_checks.RunPylint( - input_api, - output_api, - pylintrc='pylintrc', - black_list=build_pys, - extra_paths_list=[ - J(), - J('gyp'), - J('buildbot'), - J('..', 'util', 'lib', 'common'), - J('..', '..', 'third_party', 'catapult', 'common', 'py_trace_event'), - J('..', '..', 'third_party', 'catapult', 'common', 'py_utils'), - J('..', '..', 'third_party', 'catapult', 'devil'), - J('..', '..', 'third_party', 'catapult', 'tracing'), - J('..', '..', 'third_party', 'depot_tools'), - J('..', '..', 'third_party', 'colorama', 'src'), - J('..', '..', 'third_party', 'pymock'), - ])) - output.extend(input_api.canned_checks.RunPylint( - input_api, - output_api, - white_list=build_pys, - extra_paths_list=[J('gyp'), J('gn')])) + tests = [] + tests.extend( + input_api.canned_checks.GetPylint( + input_api, + output_api, + pylintrc='pylintrc', + black_list=[ + r'.*_pb2\.py', + ] + build_pys, + extra_paths_list=[ + J(), + J('gyp'), + J('buildbot'), + J('..', 'util', 'lib', 'common'), + J('..', '..', 'third_party', 'catapult', 'common', + 'py_trace_event'), + J('..', '..', 'third_party', 'catapult', 'common', 'py_utils'), + J('..', '..', 'third_party', 'catapult', 'devil'), + J('..', '..', 'third_party', 'catapult', 'tracing'), + J('..', '..', 'third_party', 'depot_tools'), + J('..', '..', 'third_party', 'colorama', 'src'), + J('..', '..', 'third_party', 'pymock'), + ])) + tests.extend( + input_api.canned_checks.GetPylint( + input_api, + output_api, + white_list=build_pys, + extra_paths_list=[J('gyp'), J('gn')])) # Disabled due to http://crbug.com/410936 #output.extend(input_api.canned_checks.RunUnitTestsInDirectory( @@ -55,8 +59,8 @@ 'PYTHONPATH': build_android_dir, 'PYTHONDONTWRITEBYTECODE': '1', }) - output.extend( - input_api.canned_checks.RunUnitTests( + tests.extend( + input_api.canned_checks.GetUnitTests( input_api, output_api, unit_tests=[ @@ -88,7 +92,7 @@ ], env=pylib_test_env)) - return output + return input_api.RunTests(tests) def CheckChangeOnUpload(input_api, output_api):
diff --git a/build/android/pylib/local/emulator/avd.py b/build/android/pylib/local/emulator/avd.py new file mode 100644 index 0000000..cbc72c48 --- /dev/null +++ b/build/android/pylib/local/emulator/avd.py
@@ -0,0 +1,469 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import contextlib +import json +import logging +import os +import socket +import stat +import subprocess +import threading + +from google.protobuf import text_format # pylint: disable=import-error + +from devil.android import device_utils +from devil.android.sdk import adb_wrapper +from devil.utils import cmd_helper +from devil.utils import timeout_retry +from py_utils import tempfile_ext +from pylib import constants +from pylib.local.emulator.proto import avd_pb2 + +_ALL_PACKAGES = object() +_DEFAULT_AVDMANAGER_PATH = os.path.join(constants.ANDROID_SDK_ROOT, 'tools', + 'bin', 'avdmanager') + + +class AvdException(Exception): + """Raised when this module has a problem interacting with an AVD.""" + + def __init__(self, summary, command=None, stdout=None, stderr=None): + message_parts = [summary] + if command: + message_parts.append(' command: %s' % ' '.join(command)) + if stdout: + message_parts.append(' stdout:') + message_parts.extend(' %s' % line for line in stdout.splitlines()) + if stderr: + message_parts.append(' stderr:') + message_parts.extend(' %s' % line for line in stderr.splitlines()) + + super(AvdException, self).__init__('\n'.join(message_parts)) + + +def _Load(avd_proto_path): + """Loads an Avd proto from a textpb file at the given path. + + Should not be called outside of this module. + + Args: + avd_proto_path: path to a textpb file containing an Avd message. + """ + with open(avd_proto_path) as avd_proto_file: + return text_format.Merge(avd_proto_file.read(), avd_pb2.Avd()) + + +class _AvdManagerAgent(object): + """Private utility for interacting with avdmanager.""" + + def __init__(self, avd_home, sdk_root): + """Create an _AvdManagerAgent. + + Args: + avd_home: path to ANDROID_AVD_HOME directory. + Typically something like /path/to/dir/.android/avd + sdk_root: path to SDK root directory. + """ + self._avd_home = avd_home + self._sdk_root = sdk_root + + self._env = dict(os.environ) + + # avdmanager, like many tools that have evolved from `android` + # (http://bit.ly/2m9JiTx), uses toolsdir to find the SDK root. + # Pass avdmanager a fake directory under the directory in which + # we install the system images s.t. avdmanager can find the + # system images. + fake_tools_dir = os.path.join(self._sdk_root, 'non-existent-tools') + self._env.update({ + 'ANDROID_AVD_HOME': + self._avd_home, + 'AVDMANAGER_OPTS': + '-Dcom.android.sdkmanager.toolsdir=%s' % fake_tools_dir, + }) + + def Create(self, avd_name, system_image, force=False): + """Call `avdmanager create`. + + Args: + avd_name: name of the AVD to create. + system_image: system image to use for the AVD. + force: whether to force creation, overwriting any existing + AVD with the same name. + """ + create_cmd = [ + _DEFAULT_AVDMANAGER_PATH, + '-v', + 'create', + 'avd', + '-n', + avd_name, + '-k', + system_image, + ] + if force: + create_cmd += ['--force'] + + create_proc = cmd_helper.Popen( + create_cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=self._env) + output, error = create_proc.communicate(input='\n') + if create_proc.returncode != 0: + raise AvdException( + 'AVD creation failed', + command=create_cmd, + stdout=output, + stderr=error) + + for line in output.splitlines(): + logging.info(' %s', line) + + def Delete(self, avd_name): + """Call `avdmanager delete`. + + Args: + avd_name: name of the AVD to delete. + """ + delete_cmd = [ + _DEFAULT_AVDMANAGER_PATH, + '-v', + 'delete', + 'avd', + '-n', + avd_name, + ] + try: + for line in cmd_helper.IterCmdOutputLines(delete_cmd, env=self._env): + logging.info(' %s', line) + except subprocess.CalledProcessError as e: + raise AvdException('AVD deletion failed: %s' % str(e), command=delete_cmd) + + +class AvdConfig(object): + """Represents a particular AVD configuration. + + This class supports creation, installation, and execution of an AVD + from a given Avd proto message, as defined in + //build/android/pylib/local/emulator/proto/avd.proto. + """ + + def __init__(self, avd_proto_path): + """Create an AvdConfig object. + + Args: + avd_proto_path: path to a textpb file containing an Avd message. + """ + self._config = _Load(avd_proto_path) + + self._emulator_home = os.path.join(constants.DIR_SOURCE_ROOT, + self._config.avd_package.dest_path) + self._emulator_sdk_root = os.path.join( + constants.DIR_SOURCE_ROOT, self._config.emulator_package.dest_path) + self._emulator_path = os.path.join(self._emulator_sdk_root, 'emulator', + 'emulator') + + self._initialized = False + self._initializer_lock = threading.Lock() + + def Create(self, + force=False, + snapshot=False, + keep=False, + cipd_json_output=None): + """Create an instance of the AVD CIPD package. + + This method: + - installs the requisite system image + - creates the AVD + - modifies the AVD's ini files to support running chromium tests + in chromium infrastructure + - optionally starts & stops the AVD for snapshotting (default no) + - creates and uploads an instance of the AVD CIPD package + - optionally deletes the AVD (default yes) + + Args: + force: bool indicating whether to force create the AVD. + snapshot: bool indicating whether to snapshot the AVD before creating + the CIPD package. + keep: bool indicating whether to keep the AVD after creating + the CIPD package. + cipd_json_output: string path to pass to `cipd create` via -json-output. + """ + logging.info('Installing required packages.') + self.Install(packages=[ + self._config.emulator_package, + self._config.system_image_package, + ]) + + android_avd_home = os.path.join(self._emulator_home, 'avd') + + if not os.path.exists(android_avd_home): + os.makedirs(android_avd_home) + + avd_manager = _AvdManagerAgent( + avd_home=android_avd_home, sdk_root=self._emulator_sdk_root) + + logging.info('Creating AVD.') + avd_manager.Create( + avd_name=self._config.avd_name, + system_image=self._config.system_image_name, + force=force) + + try: + logging.info('Modifying AVD configuration.') + + root_ini = os.path.join(android_avd_home, + '%s.ini' % self._config.avd_name) + avd_dir = os.path.join(android_avd_home, '%s.avd' % self._config.avd_name) + config_ini = os.path.join(avd_dir, 'config.ini') + + with open(root_ini, 'a') as root_ini_file: + root_ini_file.write('path.rel=avd/%s.avd\n' % self._config.avd_name) + + with open(config_ini, 'a') as config_ini_file: + config_ini_file.write('disk.dataPartition.size=4G\n') + + # Start & stop the AVD. + self._Initialize() + instance = _AvdInstance(self._emulator_path, self._config.avd_name, + self._emulator_home) + instance.Start(read_only=not snapshot) + device_utils.DeviceUtils(instance.serial).WaitUntilFullyBooted( + timeout=180, retries=0) + instance.Stop() + + package_def_content = { + 'package': + self._config.avd_package.package_name, + 'root': + self._emulator_home, + 'install_mode': + 'copy', + 'data': [ + { + 'dir': os.path.relpath(avd_dir, self._emulator_home) + }, + { + 'file': os.path.relpath(root_ini, self._emulator_home) + }, + ], + } + + logging.info('Creating AVD CIPD package.') + logging.debug('ensure file content: %s', + json.dumps(package_def_content, indent=2)) + + with tempfile_ext.TemporaryFileName(suffix='.json') as package_def_path: + with open(package_def_path, 'w') as package_def_file: + json.dump(package_def_content, package_def_file) + + logging.info(' %s', self._config.avd_package.package_name) + cipd_create_cmd = [ + 'cipd', + 'create', + '-pkg-def', + package_def_path, + ] + if cipd_json_output: + cipd_create_cmd.extend([ + '-json-output', + cipd_json_output, + ]) + try: + for line in cmd_helper.IterCmdOutputLines(cipd_create_cmd): + logging.info(' %s', line) + except subprocess.CalledProcessError as e: + raise AvdException( + 'CIPD package creation failed: %s' % str(e), + command=cipd_create_cmd) + + finally: + if not keep: + logging.info('Deleting AVD.') + avd_manager.Delete(avd_name=self._config.avd_name) + + def Install(self, packages=_ALL_PACKAGES): + """Installs the requested CIPD packages. + + Returns: None + Raises: AvdException on failure to install. + """ + pkgs_by_dir = {} + if packages is _ALL_PACKAGES: + packages = [ + self._config.avd_package, + self._config.emulator_package, + self._config.system_image_package, + ] + for pkg in packages: + if not pkg.dest_path in pkgs_by_dir: + pkgs_by_dir[pkg.dest_path] = [] + pkgs_by_dir[pkg.dest_path].append(pkg) + + for pkg_dir, pkgs in pkgs_by_dir.iteritems(): + logging.info('Installing packages in %s', pkg_dir) + cipd_root = os.path.join(constants.DIR_SOURCE_ROOT, pkg_dir) + if not os.path.exists(cipd_root): + os.makedirs(cipd_root) + ensure_path = os.path.join(cipd_root, '.ensure') + with open(ensure_path, 'w') as ensure_file: + # Make CIPD ensure that all files are present, even if + # it thinks the package is installed. + ensure_file.write('$ParanoidMode CheckPresence\n\n') + for pkg in pkgs: + ensure_file.write('%s %s\n' % (pkg.package_name, pkg.version)) + logging.info(' %s %s', pkg.package_name, pkg.version) + ensure_cmd = [ + 'cipd', + 'ensure', + '-ensure-file', + ensure_path, + '-root', + cipd_root, + ] + try: + for line in cmd_helper.IterCmdOutputLines(ensure_cmd): + logging.info(' %s', line) + except subprocess.CalledProcessError as e: + raise AvdException( + 'Failed to install CIPD package %s: %s' % (pkg.package_name, + str(e)), + command=ensure_cmd) + + # The emulator requires that some files are writable. + for dirname, _, filenames in os.walk(self._emulator_home): + for f in filenames: + path = os.path.join(dirname, f) + if (os.lstat(path).st_mode & + (stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) == stat.S_IRUSR): + os.chmod(path, stat.S_IRUSR | stat.S_IWUSR) + + def _Initialize(self): + if self._initialized: + return + + with self._initializer_lock: + if self._initialized: + return + + # Emulator start-up looks for the adb daemon. Make sure it's running. + adb_wrapper.AdbWrapper.StartServer() + + # Emulator start-up tries to check for the SDK root by looking for + # platforms/ and platform-tools/. Ensure they exist. + # See http://bit.ly/2YAkyFE for context. + required_dirs = [ + os.path.join(self._emulator_sdk_root, 'platforms'), + os.path.join(self._emulator_sdk_root, 'platform-tools'), + ] + for d in required_dirs: + if not os.path.exists(d): + os.makedirs(d) + + def CreateInstance(self): + """Creates an AVD instance without starting it. + + Returns: + An _AvdInstance. + """ + self._Initialize() + return _AvdInstance(self._emulator_path, self._config.avd_name, + self._emulator_home) + + def StartInstance(self): + """Starts an AVD instance. + + Returns: + An _AvdInstance. + """ + instance = self.CreateInstance() + instance.Start() + return instance + + +class _AvdInstance(object): + """Represents a single running instance of an AVD. + + This class should only be created directly by AvdConfig.StartInstance, + but its other methods can be freely called. + """ + + def __init__(self, emulator_path, avd_name, emulator_home): + """Create an _AvdInstance object. + + Args: + emulator_path: path to the emulator binary. + avd_name: name of the AVD to run. + emulator_home: path to the emulator home directory. + """ + self._avd_name = avd_name + self._emulator_home = emulator_home + self._emulator_path = emulator_path + self._emulator_proc = None + self._emulator_serial = None + self._sink = None + + def __str__(self): + return '%s|%s' % (self._avd_name, (self._emulator_serial or id(self))) + + def Start(self, read_only=True): + """Starts the emulator running an instance of the given AVD.""" + with tempfile_ext.TemporaryFileName() as socket_path, (contextlib.closing( + socket.socket(socket.AF_UNIX))) as sock: + sock.bind(socket_path) + emulator_cmd = [ + self._emulator_path, '-avd', self._avd_name, '-report-console', + 'unix:%s' % socket_path, '-no-window' + ] + if read_only: + emulator_cmd += [ + '-read-only', + ] + emulator_env = {} + if self._emulator_home: + emulator_env['ANDROID_EMULATOR_HOME'] = self._emulator_home + sock.listen(1) + + logging.info('Starting emulator.') + + # TODO(jbudorick): Add support for logging emulator stdout & stderr at + # higher logging levels. + self._sink = open('/dev/null', 'w') + self._emulator_proc = cmd_helper.Popen( + emulator_cmd, stdout=self._sink, stderr=self._sink, env=emulator_env) + + # Waits for the emulator to report its serial as requested via + # -report-console. See http://bit.ly/2lK3L18 for more. + def listen_for_serial(s): + logging.info('Waiting for connection from emulator.') + with contextlib.closing(s.accept()[0]) as conn: + val = conn.recv(1024) + return 'emulator-%d' % int(val) + + try: + self._emulator_serial = timeout_retry.Run( + listen_for_serial, timeout=30, retries=0, args=[sock]) + logging.info('%s started', self._emulator_serial) + except Exception as e: + self.Stop() + raise AvdException('Emulator failed to start: %s' % str(e)) + + def Stop(self): + """Stops the emulator process.""" + if self._emulator_proc: + if self._emulator_proc.poll() is None: + self._emulator_proc.terminate() + self._emulator_proc.wait() + self._emulator_proc = None + if self._sink: + self._sink.close() + self._sink = None + + @property + def serial(self): + return self._emulator_serial
diff --git a/build/android/pylib/local/emulator/local_emulator_environment.py b/build/android/pylib/local/emulator/local_emulator_environment.py index c39827e..24eed16 100644 --- a/build/android/pylib/local/emulator/local_emulator_environment.py +++ b/build/android/pylib/local/emulator/local_emulator_environment.py
@@ -3,17 +3,10 @@ # found in the LICENSE file. import logging -import os from devil.utils import parallelizer -from pylib.constants import host_paths from pylib.local.device import local_device_environment - -AVD_DIR_PATH = os.path.join(host_paths.DIR_SOURCE_ROOT, 'tools', 'android', - 'avd') -with host_paths.SysPath(AVD_DIR_PATH): - import avd # pylint: disable=import-error - +from pylib.local.emulator import avd # Mirroring https://bit.ly/2OjuxcS#23 _MAX_ANDROID_EMULATORS = 16
diff --git a/tools/android/avd/proto/__init__.py b/build/android/pylib/local/emulator/proto/__init__.py similarity index 100% rename from tools/android/avd/proto/__init__.py rename to build/android/pylib/local/emulator/proto/__init__.py
diff --git a/tools/android/avd/proto/avd.proto b/build/android/pylib/local/emulator/proto/avd.proto similarity index 100% rename from tools/android/avd/proto/avd.proto rename to build/android/pylib/local/emulator/proto/avd.proto
diff --git a/build/android/pylib/local/emulator/proto/avd_pb2.py b/build/android/pylib/local/emulator/proto/avd_pb2.py new file mode 100644 index 0000000..c264e6d1 --- /dev/null +++ b/build/android/pylib/local/emulator/proto/avd_pb2.py
@@ -0,0 +1,218 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: avd.proto + +import sys +_b = sys.version_info[0] < 3 and (lambda x: x) or (lambda x: x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + +DESCRIPTOR = _descriptor.FileDescriptor( + name='avd.proto', + package='tools.android.avd.proto', + syntax='proto3', + serialized_pb=_b( + '\n\tavd.proto\x12\x17tools.android.avd.proto\"G\n\x0b\x43IPDPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x11\n\tdest_path\x18\x03 \x01(\t\"\xf1\x01\n\x03\x41vd\x12>\n\x10\x65mulator_package\x18\x01 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x42\n\x14system_image_package\x18\x02 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x19\n\x11system_image_name\x18\x03 \x01(\t\x12\x39\n\x0b\x61vd_package\x18\x04 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x10\n\x08\x61vd_name\x18\x05 \x01(\tb\x06proto3' + )) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_CIPDPACKAGE = _descriptor.Descriptor( + name='CIPDPackage', + full_name='tools.android.avd.proto.CIPDPackage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='package_name', + full_name='tools.android.avd.proto.CIPDPackage.package_name', + index=0, + number=1, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=_b("").decode('utf-8'), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', + full_name='tools.android.avd.proto.CIPDPackage.version', + index=1, + number=2, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=_b("").decode('utf-8'), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dest_path', + full_name='tools.android.avd.proto.CIPDPackage.dest_path', + index=2, + number=3, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=_b("").decode('utf-8'), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + ], + extensions=[], + nested_types=[], + enum_types=[], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[], + serialized_start=38, + serialized_end=109, +) + +_AVD = _descriptor.Descriptor( + name='Avd', + full_name='tools.android.avd.proto.Avd', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='emulator_package', + full_name='tools.android.avd.proto.Avd.emulator_package', + index=0, + number=1, + type=11, + cpp_type=10, + label=1, + has_default_value=False, + default_value=None, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='system_image_package', + full_name='tools.android.avd.proto.Avd.system_image_package', + index=1, + number=2, + type=11, + cpp_type=10, + label=1, + has_default_value=False, + default_value=None, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='system_image_name', + full_name='tools.android.avd.proto.Avd.system_image_name', + index=2, + number=3, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=_b("").decode('utf-8'), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='avd_package', + full_name='tools.android.avd.proto.Avd.avd_package', + index=3, + number=4, + type=11, + cpp_type=10, + label=1, + has_default_value=False, + default_value=None, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='avd_name', + full_name='tools.android.avd.proto.Avd.avd_name', + index=4, + number=5, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=_b("").decode('utf-8'), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + options=None), + ], + extensions=[], + nested_types=[], + enum_types=[], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[], + serialized_start=112, + serialized_end=353, +) + +_AVD.fields_by_name['emulator_package'].message_type = _CIPDPACKAGE +_AVD.fields_by_name['system_image_package'].message_type = _CIPDPACKAGE +_AVD.fields_by_name['avd_package'].message_type = _CIPDPACKAGE +DESCRIPTOR.message_types_by_name['CIPDPackage'] = _CIPDPACKAGE +DESCRIPTOR.message_types_by_name['Avd'] = _AVD + +CIPDPackage = _reflection.GeneratedProtocolMessageType( + 'CIPDPackage', + (_message.Message, ), + dict( + DESCRIPTOR=_CIPDPACKAGE, + __module__='avd_pb2' + # @@protoc_insertion_point(class_scope:tools.android.avd.proto.CIPDPackage) + )) +_sym_db.RegisterMessage(CIPDPackage) + +Avd = _reflection.GeneratedProtocolMessageType( + 'Avd', + (_message.Message, ), + dict( + DESCRIPTOR=_AVD, + __module__='avd_pb2' + # @@protoc_insertion_point(class_scope:tools.android.avd.proto.Avd) + )) +_sym_db.RegisterMessage(Avd) + +# @@protoc_insertion_point(module_scope)
diff --git a/build/android/test_runner.pydeps b/build/android/test_runner.pydeps index f19d9b9..e4b118c 100644 --- a/build/android/test_runner.pydeps +++ b/build/android/test_runner.pydeps
@@ -118,9 +118,6 @@ ../../third_party/markupsafe/__init__.py ../../third_party/markupsafe/_compat.py ../../third_party/markupsafe/_native.py -../../tools/android/avd/avd.py -../../tools/android/avd/proto/__init__.py -../../tools/android/avd/proto/avd_pb2.py ../../tools/swarming_client/libs/__init__.py ../../tools/swarming_client/libs/logdog/__init__.py ../../tools/swarming_client/libs/logdog/bootstrap.py @@ -172,7 +169,10 @@ pylib/local/device/local_device_monkey_test_run.py pylib/local/device/local_device_test_run.py pylib/local/emulator/__init__.py +pylib/local/emulator/avd.py pylib/local/emulator/local_emulator_environment.py +pylib/local/emulator/proto/__init__.py +pylib/local/emulator/proto/avd_pb2.py pylib/local/local_test_server_spawner.py pylib/local/machine/__init__.py pylib/local/machine/local_machine_environment.py
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index e74291a..0fa7024 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -1985,6 +1985,10 @@ defines += [ "_IS_CHROME_BRANDED" ] } + if (defined(invoker.is_bundle_module) && invoker.is_bundle_module) { + defines += [ "_IS_BUNDLE" ] + } + if (invoker.use_final_fields) { forward_variables_from(invoker, [ @@ -2698,7 +2702,11 @@ if (_generate_buildconfig_java) { generate_build_config_srcjar("${_template_name}__build_config_srcjar") { - forward_variables_from(invoker, [ "min_sdk_version" ]) + forward_variables_from(invoker, + [ + "is_bundle_module", + "min_sdk_version", + ]) use_final_fields = true enable_multidex = _enable_multidex if (defined(invoker.product_version_resources_dep)) {
diff --git a/build/config/fuchsia/BUILD.gn b/build/config/fuchsia/BUILD.gn index 888be8c..9a0ca69 100644 --- a/build/config/fuchsia/BUILD.gn +++ b/build/config/fuchsia/BUILD.gn
@@ -3,7 +3,7 @@ # found in the LICENSE file. import("//build/config/fuchsia/config.gni") -import("//build/config/fuchsia/rules.gni") +import("//build/config/fuchsia/generate_runner_scripts.gni") import("//build/config/sysroot.gni") assert(is_fuchsia)
diff --git a/build/config/fuchsia/generate_runner_scripts.gni b/build/config/fuchsia/generate_runner_scripts.gni new file mode 100644 index 0000000..2a8bc0a6 --- /dev/null +++ b/build/config/fuchsia/generate_runner_scripts.gni
@@ -0,0 +1,195 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) + +import("//build/config/chromecast_build.gni") +import("//build/config/fuchsia/config.gni") +import("//build/config/fuchsia/package.gni") +import("//build/config/sysroot.gni") +import("//build/util/generate_wrapper.gni") + +declare_args() { + # Sets the Fuchsia Amber repository which will be used by default by the + # generated installation scripts. If not specified, then no default directory + # will be used. + default_fuchsia_build_dir_for_installation = "" +} + +# Generates a script which deploys and optionally executes a package on a +# device. +# +# Parameters: +# package: The package() target which will be run. +# package_name_override: Specifies the name of the generated package, if its +# name is different than the |package| target name. This value must match +# package_name_override in the |package| target. +# package_deps: An array of [package, package_name_override] array pairs +# which specify additional dependency packages to be installed +# prior to execution. +# runner_script: The runner script implementation to use, relative to +# "build/fuchsia". Defaults to "test_runner.py". +# install_only: If true, executing the script will only install the package +# on the device, but not run it. +template("fuchsia_package_runner") { + forward_variables_from(invoker, [ "runner_script" ]) + + if (defined(invoker.package_name_override)) { + _pkg_shortname = invoker.package_name_override + } else { + _pkg_shortname = get_label_info(invoker.package, "name") + } + + _pkg_dir = "$root_out_dir/gen/" + get_label_info(invoker.package, "dir") + + "/" + _pkg_shortname + _manifest_path = "$_pkg_dir/${_pkg_shortname}.archive_manifest" + _package_path = "$_pkg_dir/${_pkg_shortname}.far" + + generated_run_pkg_script_path = "$root_build_dir/bin/run_${_pkg_shortname}" + generated_install_pkg_script_path = + "$root_build_dir/bin/install_$_pkg_shortname" + + _generate_runner_target = "${target_name}__generate_runner" + _generate_installer_target = "${target_name}__generate_installer" + + # Generates a script which installs and runs a test. + generate_wrapper(_generate_runner_target) { + forward_variables_from(invoker, + [ + "target", + "testonly", + ]) + + if (defined(runner_script)) { + executable = rebase_path(runner_script) + } else { + executable = rebase_path("//build/fuchsia/test_runner.py") + } + wrapper_script = generated_run_pkg_script_path + + deps = [ + invoker.package, + ] + if (defined(invoker.deps)) { + deps += invoker.deps + } + + data_deps = [ + invoker.package, + ] + + # Declares the files that are needed for test execution on the + # swarming test client. + data = [ + _manifest_path, + "//build/fuchsia/", + "//build/util/lib/", + "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer", + "${qemu_root}/", + "${fuchsia_sdk}/tools/fvm", + "${fuchsia_sdk}/tools/pm", + "${fuchsia_sdk}/tools/symbolize", + "${fuchsia_sdk}/tools/zbi", + "${fuchsia_sdk}/.build-id/", + "${boot_image_root}/qemu/qemu-kernel.kernel", + "${boot_image_root}/qemu/storage-full.blk", + "${boot_image_root}/qemu/zircon-a.zbi", + ] + + executable_args = [] + + package_paths = [ rebase_path(_package_path, root_build_dir) ] + if (defined(invoker.package_deps)) { + foreach(package_dep, invoker.package_deps) { + package_dep_target = package_dep[0] + package_dep_name = package_dep[1] + + deps += [ package_dep_target ] + package_dep_path = rebase_path( + get_label_info(package_dep_target, "target_gen_dir") + "/" + + package_dep_name + "/" + package_dep_name + ".far", + root_build_dir) + package_paths += [ package_dep_path ] + } + } + + foreach(package_path, package_paths) { + executable_args += [ + "--package", + "@WrappedPath(${package_path})", + ] + } + + executable_args += [ + "--output-directory", + "@WrappedPath(.)", + "--target-cpu", + target_cpu, + "--package-name", + _pkg_shortname, + ] + + if (defined(invoker.use_test_server) && invoker.use_test_server) { + executable_args += [ "--enable-test-server" ] + } + } + + # Produces a script which installs a package and its dependencies into the + # Amber repository of a pre-existing Fuchsia build directory. + generate_wrapper(_generate_installer_target) { + forward_variables_from(invoker, [ "testonly" ]) + + executable = rebase_path("//build/fuchsia/deploy_to_amber_repo.py") + wrapper_script = generated_install_pkg_script_path + + deps = [ + invoker.package, + ] + if (defined(invoker.deps)) { + deps += invoker.deps + } + + # Build a list of all packages to install, and pass the list to the runner + # script. + package_paths = [ rebase_path(_package_path, root_build_dir) ] + if (defined(invoker.package_deps)) { + foreach(package_dep, invoker.package_deps) { + package_dep_target = package_dep[0] + package_dep_name = package_dep[1] + + deps += [ package_dep_target ] + package_dep_path = rebase_path( + get_label_info(package_dep_target, "target_gen_dir") + "/" + + package_dep_name + "/" + package_dep_name + ".far", + root_build_dir) + package_paths += [ package_dep_path ] + } + } + executable_args = [] + foreach(package_path, package_paths) { + executable_args += [ + "--package", + "@WrappedPath(${package_path})", + ] + + if (default_fuchsia_build_dir_for_installation != "") { + executable_args += [ + "--fuchsia-out-dir", + default_fuchsia_build_dir_for_installation, + ] + } + } + } + + group(target_name) { + forward_variables_from(invoker, [ "testonly" ]) + deps = [ + ":${_generate_installer_target}", + ] + + if (!defined(invoker.install_only) || invoker.install_only == false) { + deps += [ ":${_generate_runner_target}" ] + } + } +}
diff --git a/build/config/fuchsia/rules.gni b/build/config/fuchsia/rules.gni index f7edfdc..689e130b 100644 --- a/build/config/fuchsia/rules.gni +++ b/build/config/fuchsia/rules.gni
@@ -1,163 +1,5 @@ -# Copyright 2018 The Chromium Authors. All rights reserved. +# Copyright 2019 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -assert(is_fuchsia) - -import("//build/config/chromecast_build.gni") -import("//build/config/fuchsia/config.gni") -import("//build/config/fuchsia/package.gni") -import("//build/config/sysroot.gni") -import("//build/util/generate_wrapper.gni") - -# Generates a script which deploys and executes a package on a device. -# -# Parameters: -# package: The package() target which will be run. -# package_name_override: Specifies the name of the generated package, if its -# name is different than the |package| target name. This value must match -# package_name_override in the |package| target. -# package_deps: An array of [package, package_name_override] array pairs -# which specify additional dependency packages to be installed -# prior to execution. -# runner_script: The runner script implementation to use, relative to -# "build/fuchsia". Defaults to "exe_runner.py". -# install_only: If true, executing the script will only install the package -# on the device, but not run it. -template("fuchsia_package_runner") { - forward_variables_from(invoker, [ "runner_script" ]) - - if (defined(invoker.package_name_override)) { - _pkg_shortname = invoker.package_name_override - } else { - _pkg_shortname = get_label_info(invoker.package, "name") - } - - _pkg_dir = "$root_out_dir/gen/" + get_label_info(invoker.package, "dir") + - "/" + _pkg_shortname - _manifest_path = "$_pkg_dir/${_pkg_shortname}.archive_manifest" - _package_path = "$_pkg_dir/${_pkg_shortname}.far" - - if (!defined(runner_script)) { - runner_script = "//build/fuchsia/exe_runner.py" - } - - generated_run_pkg_script_path = "$root_build_dir/bin/run_${_pkg_shortname}" - generated_install_pkg_script_path = - "$root_build_dir/bin/install_$_pkg_shortname" - - _generate_runner_target = "${target_name}__generate_runner" - _generate_installer_target = "${target_name}__generate_installer" - _generate_template = "${target_name}__generate_template" - - # Generates a script to install and optionally run a package. - # - # Parameters: - # |install_only|: If true, builds a script that only installs a package. - # |script_path|: The path of the script to generate. - template(_generate_template) { - generate_wrapper(target_name) { - forward_variables_from(invoker, - [ - "install_only", - "script_path", - "target", - "testonly", - ]) - - executable = runner_script - wrapper_script = script_path - - deps = [ - invoker.package, - ] - - if (defined(invoker.deps)) { - deps += invoker.deps - } - - # Declares the files that are needed for test execution on the - # swarming test client. - data = [ - _manifest_path, - "//build/fuchsia/", - "//build/util/lib/", - "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer", - "${qemu_root}/", - "${fuchsia_sdk}/tools/fvm", - "${fuchsia_sdk}/tools/pm", - "${fuchsia_sdk}/tools/symbolize", - "${fuchsia_sdk}/tools/zbi", - "${fuchsia_sdk}/.build-id/", - "${boot_image_root}/qemu/qemu-kernel.kernel", - "${boot_image_root}/qemu/storage-full.blk", - "${boot_image_root}/qemu/zircon-a.zbi", - ] - - data_deps = [ - invoker.package, - ] - - executable_args = [] - - if (defined(invoker.package_deps)) { - foreach(cur_package, invoker.package_deps) { - deps += [ cur_package[0] ] - dep_package_path = - get_label_info(cur_package[0], "target_gen_dir") + "/" + - cur_package[1] + "/" + cur_package[1] + ".far" - _rebased_dep_package_path = - rebase_path(dep_package_path, root_build_dir) - executable_args += [ - "--package-dep", - "@WrappedPath(${_rebased_dep_package_path})", - ] - } - } - - _rebased_package_path = rebase_path(_package_path, root_build_dir) - executable_args += [ - "--output-directory", - "@WrappedPath(.)", - "--target-cpu", - target_cpu, - "--package", - "@WrappedPath(${_rebased_package_path})", - "--package-name", - _pkg_shortname, - ] - - if (defined(invoker.use_test_server) && invoker.use_test_server) { - executable_args += [ "--enable-test-server" ] - } - - if (defined(install_only) && install_only) { - executable_args += [ "--install-only" ] - } - } - } - - target(_generate_template, _generate_runner_target) { - forward_variables_from(invoker, "*") - script_path = generated_run_pkg_script_path - } - - target(_generate_template, _generate_installer_target) { - forward_variables_from(invoker, "*") - script_path = generated_install_pkg_script_path - install_only = true - } - - # Build the installer script, and the runner for non-|install_only| targets. - group(target_name) { - forward_variables_from(invoker, [ "testonly" ]) - deps = [ - ":${_generate_installer_target}", - ] - - # Generate a runner script if the target is not install-only. - if (!defined(invoker.install_only)) { - deps += [ ":${_generate_runner_target}" ] - } - } -} +import("//build/config/fuchsia/generate_runner_scripts.gni")
diff --git a/build/config/python.gni b/build/config/python.gni index 15c4574..0fb8bd4 100644 --- a/build/config/python.gni +++ b/build/config/python.gni
@@ -22,9 +22,6 @@ # # Variables # pydeps_file: Path to .pydeps file to read sources from (optional). -# pydeps_sources_assignment_filters: Additional sources_assignment_filters to -# use when reading the contents of the pydeps file. Unused if pydeps_file -# isn't set. (optional) # data: Additional files to include in data. E.g. non-.py files needed by the # library, or .py files that are conditionally / lazily imported. # @@ -47,12 +44,7 @@ _py_files = read_file(invoker.pydeps_file, "list lines") # Filter out comments. - pydeps_sources_assignment_filters = [ "#*" ] - if (defined(invoker.pydeps_sources_assignment_filters)) { - pydeps_sources_assignment_filters += - invoker.pydeps_sources_assignment_filters - } - set_sources_assignment_filter(pydeps_sources_assignment_filters) + set_sources_assignment_filter([ "#*" ]) sources = _py_files # Dependencies are listed relative to the pydeps file directory, but data
diff --git a/build/fuchsia/common.py b/build/fuchsia/common.py index b9ef6ae..7dd3d52c 100644 --- a/build/fuchsia/common.py +++ b/build/fuchsia/common.py
@@ -15,6 +15,8 @@ IMAGES_ROOT = os.path.join(DIR_SOURCE_ROOT, 'third_party', 'fuchsia-sdk', 'images') +_PM = os.path.join(SDK_ROOT, 'tools', 'pm') + def EnsurePathExists(path): """Checks that the file |path| exists on the filesystem and returns the path if it does, raising an exception otherwise.""" @@ -86,3 +88,11 @@ port = sock.getsockname()[1] sock.close() return port + + +def PublishPackage(package_path, tuf_root): + """Publishes a combined FAR package to a TUF repository root.""" + + subprocess.check_call( + [_PM, 'publish', '-a', '-f', package_path, '-r', tuf_root, '-vt', '-v'], + stderr=subprocess.STDOUT)
diff --git a/build/fuchsia/common_args.py b/build/fuchsia/common_args.py index 4430182..7716771 100644 --- a/build/fuchsia/common_args.py +++ b/build/fuchsia/common_args.py
@@ -15,16 +15,12 @@ across test and executable target types.""" common_args = arg_parser.add_argument_group('common', 'Common arguments') - common_args.add_argument('--package', - type=os.path.realpath, required=True, - help='Path to the package to execute.') + common_args.add_argument('--package', action='append', required=True, + help='Paths of the packages to install, including ' + 'all dependencies.') common_args.add_argument('--package-name', required=True, help='Name of the package to execute, defined in ' + 'package metadata.') - common_args.add_argument('--package-dep', action='append', default=[], - help='Path to an additional package to install.') - common_args.add_argument('--install-only', action='store_true', default=False, - help='Install the packages but do not run them.') common_args.add_argument('--output-directory', type=os.path.realpath, required=True, help=('Path to the directory in which build files '
diff --git a/build/fuchsia/deploy_to_amber_repo.py b/build/fuchsia/deploy_to_amber_repo.py new file mode 100755 index 0000000..6f36e0a6 --- /dev/null +++ b/build/fuchsia/deploy_to_amber_repo.py
@@ -0,0 +1,47 @@ +#!/usr/bin/env python +# +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Deploys Fuchsia packages to an Amber repository in a Fuchsia +build output directory.""" + +import argparse +import os +import sys + +from common import PublishPackage + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--package', action='append', required=True, + help='Paths to packages to install.') + parser.add_argument('--fuchsia-out-dir', nargs='+', + help='Path to a Fuchsia build output directory. ' + 'If more than one outdir is supplied, the last one ' + 'in the sequence will be used.') + args = parser.parse_args() + assert args.package + + if not args.fuchsia_out_dir or len(args.fuchsia_out_dir) == 0: + sys.stderr.write('No Fuchsia build output directory was specified.\n' + + 'To resolve this, Use the commandline argument ' + + '--fuchsia-out-dir\nor set the GN arg ' + + '"default_fuchsia_build_dir_for_installation".\n') + return 1 + + fuchsia_out_dir = args.fuchsia_out_dir.pop() + tuf_root = os.path.join(fuchsia_out_dir, 'amber-files') + print('Installing packages in Amber repo %s...' % tuf_root) + for package in args.package: + PublishPackage(package, os.path.expanduser(tuf_root)) + + print('Installation success.') + + return 0 + + +if __name__ == '__main__': + sys.exit(main())
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index d6cb689..5f30743 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8900518552241941952 \ No newline at end of file +8900492300904953840 \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 1faa8072..057cb8f 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -8900523953382962080 \ No newline at end of file +8900493005257945968 \ No newline at end of file
diff --git a/build/fuchsia/run_package.py b/build/fuchsia/run_package.py index 6e3a5d2..2e0846d 100644 --- a/build/fuchsia/run_package.py +++ b/build/fuchsia/run_package.py
@@ -117,7 +117,6 @@ class RunPackageArgs: """RunPackage() configuration arguments structure. - install_only: If set, skips the package execution step. symbolizer_config: A newline delimited list of source files contained in the package. Omitting this parameter will disable symbolization. system_logging: If set, connects a system log reader to the target. @@ -125,7 +124,6 @@ installation. Defaults to staging into '/data'. """ def __init__(self): - self.install_only = False self.symbolizer_config = None self.system_logging = False self.target_staging_path = '/data' @@ -133,7 +131,6 @@ @staticmethod def FromCommonArgs(args): run_package_args = RunPackageArgs() - run_package_args.install_only = args.install_only run_package_args.system_logging = args.include_system_logs run_package_args.target_staging_path = args.target_staging_path return run_package_args @@ -151,15 +148,15 @@ print(line.rstrip()) -def RunPackage(output_dir, target, package_path, package_name, - package_deps, package_args, args): +def RunPackage(output_dir, target, package_paths, package_name, + package_args, args): """Installs the Fuchsia package at |package_path| on the target, executes it with |package_args|, and symbolizes its output. output_dir: The path containing the build output files. target: The deployment Target object that will run the package. - package_path: The path to the .far package file. - package_name: The name of app specified by package metadata. + package_paths: The paths to the .far packages to be installed. + package_name: The name of the primary package to run. package_args: The arguments which will be passed to the Fuchsia process. args: Structure of arguments to configure how the package will be run. @@ -178,16 +175,12 @@ log_output_thread.daemon = True log_output_thread.start() - target.InstallPackage(package_path, package_name, package_deps) + target.InstallPackage(package_paths) if system_logger: log_output_quit_event.set() log_output_thread.join(timeout=_JOIN_TIMEOUT_SECS) - if args.install_only: - logging.info('Installation complete.') - return - logging.info('Running application.') command = ['run', _GetComponentUri(package_name)] + package_args process = target.RunCommandPiped(command, @@ -205,7 +198,7 @@ build_ids_paths = map( lambda package_path: os.path.join( os.path.dirname(package_path), 'ids.txt'), - [package_path] + package_deps) + package_paths) output_stream = SymbolizerFilter(output_stream, build_ids_paths) for next_line in output_stream:
diff --git a/build/fuchsia/target.py b/build/fuchsia/target.py index 0d29cd1b..b2e1505 100644 --- a/build/fuchsia/target.py +++ b/build/fuchsia/target.py
@@ -40,14 +40,6 @@ return (package_info['name'], package_info['version']) -def _PublishPackage(tuf_root, package_path): - """Publishes a combined FAR package to a TUF repository root.""" - - subprocess.check_call( - [_PM, 'publish', '-a', '-f', package_path, '-r', tuf_root, '-vt', '-v'], - stderr=subprocess.STDOUT) - - class _MapIsolatedPathsForPackage: """Callable object which remaps /data and /tmp paths to their package-specific locations.""" @@ -266,15 +258,12 @@ return 'x86_64' raise Exception('Unknown target_cpu %s:' % self._target_cpu) - def InstallPackage(self, package_path, package_name, package_deps): + def InstallPackage(self, package_paths): """Installs a package and it's dependencies on the device. If the package is already installed then it will be updated to the new version. - package_path: Path to the .far file to be installed. - package_name: Package name. - package_deps: List of .far files with the packages that the main package - depends on. These packages are installed or updated as well. - """ + package_paths: Paths to the .far files to install.""" + try: tuf_root = tempfile.mkdtemp() pm_serve_task = None @@ -289,9 +278,8 @@ ':%d' % serve_port, '-q']) # Publish all packages to the serving TUF repository under |tuf_root|. - all_packages = [package_path] + package_deps - for next_package_path in all_packages: - _PublishPackage(tuf_root, next_package_path) + for next_package_path in package_paths: + common.PublishPackage(next_package_path, tuf_root) _WaitForPmServeToBeReady(serve_port) @@ -299,7 +287,7 @@ self._RegisterAmberRepository(tuf_root, remote_port) # Install all packages. - for next_package_path in all_packages: + for next_package_path in package_paths: install_package_name, package_version = \ _GetPackageInfo(next_package_path) logging.info('Installing %s version %s.' %
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 669de83..6efa46f 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -123,7 +123,7 @@ run_package_args = RunPackageArgs.FromCommonArgs(args) returncode = RunPackage( args.output_directory, target, args.package, args.package_name, - args.package_dep, child_args, run_package_args) + child_args, run_package_args) if test_server: test_server.Stop()
diff --git a/chrome/VERSION b/chrome/VERSION index 311b0f3..1ae5797 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=79 MINOR=0 -BUILD=3933 +BUILD=3934 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index c466072d8..1030494 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -738,9 +738,6 @@ "//testing/buildbot/filters:chrome_junit_tests_filters", ] - srcjar_deps = - [ "//components/module_installer/android:module_installer_build_config" ] - package_name = chrome_public_manifest_package } @@ -1531,6 +1528,7 @@ ] generate_jni("test_support_jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/chrome/browser/ServicificationBackgroundService.java", "javatests/src/org/chromium/chrome/browser/offlinepages/OfflineTestUtil.java",
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index 17797eb..1023e174 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -232,24 +232,18 @@ } } - # Only bundles can install modules. Therefore, include stub implementation - # for all other targets to save some binary size. - if (_target_type == "android_app_bundle_module") { - srcjar_deps = [ "//components/module_installer/android:module_installer_bundle_build_config" ] - } else { # |_target_type| is "android_apk" or "instrumentation_test_apk". - if (dfmify_dev_ui) { - # Native resource split moves resources out of resources.pak, but this - # is a DFM feature, which APKs don't use. To make the resources split - # available for APKs, add dependencies to (1) Java classes, (2) - # resources of the resource split's DFM (e.g., DevUI DFM). The Java - # classes tells Chrome that the DFM is installed, which then causes the - # included resources to be loaded when needed. - deps += [ - "//chrome/android/features/dev_ui:java", # (1) from above. - "//chrome/android/features/dev_ui:pak_assets", # (2) from above. - ] - } - srcjar_deps = [ "//components/module_installer/android:module_installer_apk_build_config" ] + if (dfmify_dev_ui && (_target_type == "android_apk" || + _target_type == "instrumentation_test_apk")) { + # Native resource split moves resources out of resources.pak, but this + # is a DFM feature, which APKs don't use. To make the resources split + # available for APKs, add dependencies to (1) Java classes, (2) + # resources of the resource split's DFM (e.g., DevUI DFM). The Java + # classes tells Chrome that the DFM is installed, which then causes the + # included resources to be loaded when needed. + deps += [ + "//chrome/android/features/dev_ui:java", # (1) from above. + "//chrome/android/features/dev_ui:pak_assets", # (2) from above. + ] } if (!is_java_debug) {
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn index 49c8c00..8e62f8e 100644 --- a/chrome/android/features/autofill_assistant/BUILD.gn +++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -164,6 +164,7 @@ } generate_jni("test_support_jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTestService.java", ]
diff --git a/chrome/android/features/keyboard_accessory/BUILD.gn b/chrome/android/features/keyboard_accessory/BUILD.gn index bad4404..8170c50 100644 --- a/chrome/android/features/keyboard_accessory/BUILD.gn +++ b/chrome/android/features/keyboard_accessory/BUILD.gn
@@ -102,7 +102,4 @@ "//third_party/junit", "//third_party/mockito:mockito_java", ] - - srcjar_deps = - [ "//components/module_installer/android:module_installer_build_config" ] }
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java index 74db206..1eb2e558 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.features.start_surface; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE; +import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.MORE_TABS_CLICK_LISTENER; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.MV_TILES_VISIBLE; import static org.chromium.chrome.features.start_surface.StartSurfaceProperties.BOTTOM_BAR_CLICKLISTENER; @@ -123,6 +124,7 @@ updateIncognitoMode(newModel.isIncognito()); } }); + mPropertyModel.set(IS_INCOGNITO, mIsIncognito); mPropertyModel.set( BOTTOM_BAR_CLICKLISTENER, new StartSurfaceProperties.BottomBarClickListener() { @@ -193,6 +195,7 @@ void setSecondaryTasksSurfacePropertyModel(PropertyModel propertyModel) { mSecondaryTasksSurfacePropertyModel = propertyModel; + mSecondaryTasksSurfacePropertyModel.set(IS_INCOGNITO, mIsIncognito); // Secondary tasks surface is used for more Tabs or incognito mode single pane, where MV // tiles should be invisible. @@ -395,6 +398,11 @@ if (mIsIncognito) setExploreSurfaceVisibility(false); } + mPropertyModel.set(IS_INCOGNITO, mIsIncognito); + if (mSecondaryTasksSurfacePropertyModel != null) { + mSecondaryTasksSurfacePropertyModel.set(IS_INCOGNITO, mIsIncognito); + } + notifyStateChange(); }
diff --git a/chrome/android/features/tab_ui/java/res/drawable-v21/fake_search_box_bg_incognito.xml b/chrome/android/features/tab_ui/java/res/drawable-v21/fake_search_box_bg_incognito.xml new file mode 100644 index 0000000..895fb81 --- /dev/null +++ b/chrome/android/features/tab_ui/java/res/drawable-v21/fake_search_box_bg_incognito.xml
@@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. +--> +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="@color/toolbar_text_box_background_incognito" > + + <item + android:drawable="@drawable/fake_search_box_text_box_bg_incognito"/> + +</ripple>
diff --git a/chrome/android/features/tab_ui/java/res/drawable/fake_search_box_text_box_bg_incognito.xml b/chrome/android/features/tab_ui/java/res/drawable/fake_search_box_text_box_bg_incognito.xml new file mode 100644 index 0000000..737f4ee --- /dev/null +++ b/chrome/android/features/tab_ui/java/res/drawable/fake_search_box_text_box_bg_incognito.xml
@@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2017 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle" > + <solid android:color="@color/toolbar_text_box_background_incognito" /> + <size + android:width="@dimen/modern_toolbar_background_size" + android:height="@dimen/modern_toolbar_background_size" /> + <corners android:radius="@dimen/modern_toolbar_background_corner_radius" /> +</shape>
diff --git a/chrome/android/features/tab_ui/java/res/values/drawables.xml b/chrome/android/features/tab_ui/java/res/values/drawables.xml new file mode 100644 index 0000000..5edf473 --- /dev/null +++ b/chrome/android/features/tab_ui/java/res/values/drawables.xml
@@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2019 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<resources> + <drawable name="fake_search_box_bg_incognito">@drawable/fake_search_box_text_box_bg_incognito</drawable> +</resources>
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java index e0c2a9f..d52ebc6d4 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java
@@ -43,6 +43,6 @@ // TODO(crbug.com/982018): Enable voice recognition button in the fake search box. // TODO(crbug.com/982018): Enable long press and paste search in the fake search box. - // TODO(crbug.com/982018): Change the fake search box in incognito and dark mode. + // TODO(crbug.com/982018): Change the fake search box in dark mode. } }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java index 826ff36..6cc4c9e 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java
@@ -17,6 +17,8 @@ public static final PropertyModel.WritableBooleanPropertyKey IS_FAKE_SEARCH_BOX_VISIBLE = new PropertyModel.WritableBooleanPropertyKey(); + public static final PropertyModel.WritableBooleanPropertyKey IS_INCOGNITO = + new PropertyModel.WritableBooleanPropertyKey(); public static final PropertyModel.WritableBooleanPropertyKey IS_TAB_CAROUSEL = new PropertyModel.WritableBooleanPropertyKey(); public static final PropertyModel @@ -30,6 +32,6 @@ new PropertyModel.WritableObjectPropertyKey<View.OnClickListener>(); public static final PropertyModel.WritableBooleanPropertyKey MV_TILES_VISIBLE = IS_VISIBLE; public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_FAKE_SEARCH_BOX_VISIBLE, - IS_TAB_CAROUSEL, IS_VOICE_RECOGNITION_BUTTON_VISIBLE, FAKE_SEARCH_BOX_CLICK_LISTENER, - MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE}; + IS_INCOGNITO, IS_TAB_CAROUSEL, IS_VOICE_RECOGNITION_BUTTON_VISIBLE, + FAKE_SEARCH_BOX_CLICK_LISTENER, MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE}; }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java index f1809a9..24a083d 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java
@@ -5,21 +5,27 @@ package org.chromium.chrome.browser.tasks; import android.content.Context; +import android.content.res.Resources; import android.support.v4.view.MarginLayoutParamsCompat; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; +import android.widget.TextView; import androidx.annotation.Nullable; +import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.tab_ui.R; // The view of the tasks surface. class TasksView extends LinearLayout { private final Context mContext; private FrameLayout mTabSwitcherContainer; + private View mSearchBox; + private TextView mSearchBoxText; /** Default constructor needed to inflate via XML. */ public TasksView(Context context, AttributeSet attrs) { @@ -32,6 +38,8 @@ super.onFinishInflate(); mTabSwitcherContainer = (FrameLayout) findViewById(R.id.tab_switcher_container); + mSearchBox = findViewById(R.id.search_box); + mSearchBoxText = (TextView) mSearchBox.findViewById(R.id.search_box_text); } ViewGroup getTabSwitcherContainer() { @@ -64,7 +72,7 @@ * @param listener The given listener. */ void setFakeSearchBoxClickListener(@Nullable View.OnClickListener listener) { - findViewById(R.id.search_box_text).setOnClickListener(listener); + mSearchBoxText.setOnClickListener(listener); } /** @@ -72,7 +80,7 @@ * @param isVisible Whether it's visible. */ void setFakeSearchBoxVisibility(boolean isVisible) { - findViewById(R.id.search_box).setVisibility(isVisible ? View.VISIBLE : View.GONE); + mSearchBox.setVisibility(isVisible ? View.VISIBLE : View.GONE); } /** @@ -96,4 +104,19 @@ void setMoreTabsOnClickListener(@Nullable View.OnClickListener listener) { findViewById(R.id.more_tabs).setOnClickListener(listener); } -} \ No newline at end of file + + /** + * Set the incognito state. + * @param isIncognito Whether it's in incognito mode. + */ + void setIncognitoMode(boolean isIncognito) { + Resources resources = mContext.getResources(); + setBackgroundColor(ColorUtils.getPrimaryBackgroundColor(resources, isIncognito)); + mSearchBox.setBackgroundResource( + isIncognito ? R.drawable.fake_search_box_bg_incognito : R.drawable.ntp_search_box); + int hintTextColor = isIncognito + ? ApiCompatibilityUtils.getColor(resources, R.color.locationbar_light_hint_text) + : ApiCompatibilityUtils.getColor(resources, R.color.locationbar_dark_hint_text); + mSearchBoxText.setHintTextColor(hintTextColor); + } +}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java index fb2b2d5e..8c2becd 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java
@@ -6,6 +6,7 @@ import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE; +import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_TAB_CAROUSEL; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_VOICE_RECOGNITION_BUTTON_VISIBLE; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.MORE_TABS_CLICK_LISTENER; @@ -23,6 +24,8 @@ view.setFakeSearchBoxClickListener(model.get(FAKE_SEARCH_BOX_CLICK_LISTENER)); } else if (propertyKey == IS_FAKE_SEARCH_BOX_VISIBLE) { view.setFakeSearchBoxVisibility(model.get(IS_FAKE_SEARCH_BOX_VISIBLE)); + } else if (propertyKey == IS_INCOGNITO) { + view.setIncognitoMode(model.get(IS_INCOGNITO)); } else if (propertyKey == IS_TAB_CAROUSEL) { view.setIsTabCarousel(model.get(IS_TAB_CAROUSEL)); } else if (propertyKey == IS_VOICE_RECOGNITION_BUTTON_VISIBLE) {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java index f78447f..058b01e 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java
@@ -37,6 +37,10 @@ /** Default value for whether to consumer synthetic tokens on restore. */ public static final boolean CONSUME_SYNTHETIC_TOKENS_WHILE_RESTORING_DEFAULT = false; + private static final String DEFAULT_ACTION_TTL_SECONDS = "default_action_ttl_seconds"; + /** Default value for the TTL of default action (3 days). */ + public static final long DEFAULT_ACTION_TTL_SECONDS_DEFAULT = 259200; + private static final String FEED_ACTION_SERVER_ENDPOINT = "feed_action_server_endpoint"; /** Default value for the endpoint used for recording uploaded actions to the server. */ public static final String FEED_ACTION_SERVER_ENDPOINT_DEFAULT = @@ -185,6 +189,14 @@ CONSUME_SYNTHETIC_TOKENS_WHILE_RESTORING_DEFAULT); } + /** @return The TTL (in seconds) for the default action. */ + @VisibleForTesting + static long getDefaultActionTtlSeconds() { + return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( + ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, DEFAULT_ACTION_TTL_SECONDS, + (int) DEFAULT_ACTION_TTL_SECONDS_DEFAULT); + } + /** @return The endpoint used for recording uploaded actions to the server. */ @VisibleForTesting static String getFeedActionServerEndpoint() { @@ -418,6 +430,8 @@ FeedConfiguration.getConsumeSyntheticTokens()) .put(ConfigKey.CONSUME_SYNTHETIC_TOKENS_WHILE_RESTORING, FeedConfiguration.getConsumeSyntheticTokensWhileRestoring()) + .put(ConfigKey.DEFAULT_ACTION_TTL_SECONDS, + FeedConfiguration.getDefaultActionTtlSeconds()) .put(ConfigKey.FEED_ACTION_SERVER_ENDPOINT, FeedConfiguration.getFeedActionServerEndpoint()) .put(ConfigKey.FEED_ACTION_SERVER_MAX_ACTIONS_PER_REQUEST,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index daca55a..d81b4075 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -2016,6 +2016,10 @@ TextBubble.dismissBubbles(); if (VrModuleProvider.getDelegate().onBackPressed()) return; + + ArDelegate arDelegate = ArDelegateProvider.getDelegate(); + if (arDelegate != null && arDelegate.onBackPressed()) return; + if (mCompositorViewHolder != null) { LayoutManager layoutManager = mCompositorViewHolder.getLayoutManager(); if (layoutManager != null && layoutManager.onBackPressed()) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerUiDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerUiDelegateAndroid.java index 1c27991..ba4518c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerUiDelegateAndroid.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerUiDelegateAndroid.java
@@ -16,6 +16,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.webapps.addtohomescreen.AddToHomescreenDialogView; import org.chromium.chrome.browser.webapps.addtohomescreen.AddToHomescreenProperties; @@ -137,13 +138,22 @@ } @CalledByNative - private boolean showWebAppDialog(String title, Bitmap iconBitmap, String url) { + private boolean showWebAppDialog( + String title, Bitmap iconBitmap, String url, boolean maskable) { mViewModel = createViewModel(); mViewModel.set(AddToHomescreenProperties.TITLE, title); - mViewModel.set(AddToHomescreenProperties.ICON, new Pair<>(iconBitmap, false)); mViewModel.set(AddToHomescreenProperties.TYPE, AddToHomescreenProperties.AppType.WEB_APK); mViewModel.set(AddToHomescreenProperties.CAN_SUBMIT, true); mViewModel.set(AddToHomescreenProperties.URL, url); + + // Because web standards specify the circular mask's radius to be 40% of icon dimension, + // while Android specifies it to be around 30%, we can't simply let Android mask it. We'll + // need to mask the bitmap ourselves and pass it as a non-maskable icon. + boolean shouldMaskIcon = maskable && ShortcutHelper.doesAndroidSupportMaskableIcons(); + if (shouldMaskIcon) { + iconBitmap = ShortcutHelper.createHomeScreenIconFromWebIcon(iconBitmap, shouldMaskIcon); + } + mViewModel.set(AddToHomescreenProperties.ICON, new Pair<>(iconBitmap, shouldMaskIcon)); return true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java index 481391a..3fe71bf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
@@ -344,6 +344,16 @@ // We do know that if we do get one, then it will be for the surface that we just requested. } + /** + * Enables/disables immersive AR overlay mode, a variant of overlay video mode. + * @param enabled Whether to enter or leave overlay immersive ar mode. + */ + public void setOverlayImmersiveArMode(boolean enabled) { + setOverlayVideoMode(enabled); + CompositorViewJni.get().setOverlayImmersiveArMode( + mNativeCompositorView, CompositorView.this, enabled); + } + private int getSurfacePixelFormat() { if (mOverlayVideoEnabled || mAlwaysTranslucent) { return PixelFormat.TRANSLUCENT; @@ -620,6 +630,8 @@ void setNeedsComposite(long nativeCompositorView, CompositorView caller); void setLayoutBounds(long nativeCompositorView, CompositorView caller); void setOverlayVideoMode(long nativeCompositorView, CompositorView caller, boolean enabled); + void setOverlayImmersiveArMode( + long nativeCompositorView, CompositorView caller, boolean enabled); void setSceneLayer(long nativeCompositorView, CompositorView caller, SceneLayer sceneLayer); void setCompositorWindow( long nativeCompositorView, CompositorView caller, WindowAndroid window);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java index 1b1cced..b725dec 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadActivity.java
@@ -13,6 +13,7 @@ import org.chromium.chrome.browser.download.home.DownloadManagerCoordinator; import org.chromium.chrome.browser.download.home.DownloadManagerCoordinatorFactory; import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig; +import org.chromium.chrome.browser.download.home.filter.Filters; import org.chromium.chrome.browser.download.items.OfflineContentAggregatorNotificationBridgeUiFactory; import org.chromium.chrome.browser.modaldialog.AppModalPresenter; import org.chromium.chrome.browser.util.IntentUtils; @@ -74,8 +75,8 @@ mCurrentUrl = savedInstanceState == null ? UrlConstants.DOWNLOADS_URL : savedInstanceState.getString(BUNDLE_KEY_CURRENT_URL); + if (showPrefetchContent) mCurrentUrl = Filters.toUrl(Filters.FilterType.PREFETCHED); mDownloadCoordinator.updateForUrl(mCurrentUrl); - if (showPrefetchContent) mDownloadCoordinator.showPrefetchSection(); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinator.java index c2b57d5..3f3f6ad 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinator.java
@@ -37,12 +37,6 @@ /** To be called to push the url containing internal state to the coordinator. */ void updateForUrl(String url); - /** - * To be called to automatically show the prefetched content section of the download manager. - * TODO(dtrainor): This should be deprecated in place of {@link #updateForUrl(String)}. - */ - void showPrefetchSection(); - /** Adds {@code observer} to be notified of url state changes. */ void addObserver(Observer observer);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorImpl.java index 9a0ca517..e4d3e896 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/DownloadManagerCoordinatorImpl.java
@@ -141,11 +141,6 @@ } @Override - public void showPrefetchSection() { - updateForUrl(Filters.toUrl(Filters.FilterType.PREFETCHED)); - } - - @Override public void addObserver(Observer observer) { mObservers.addObserver(observer); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InstallableAmbientBadgeInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InstallableAmbientBadgeInfoBar.java index 43f833a..47f02f6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InstallableAmbientBadgeInfoBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InstallableAmbientBadgeInfoBar.java
@@ -6,18 +6,25 @@ import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO; +import android.annotation.TargetApi; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.AdaptiveIconDrawable; +import android.graphics.drawable.Icon; +import android.os.Build; import android.view.Gravity; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.ContextUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.NativeMethods; import org.chromium.chrome.R; import org.chromium.chrome.browser.ResourceId; +import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.ui.widget.text.AccessibleTextView; /** @@ -29,10 +36,33 @@ private boolean mIsHiding; @CalledByNative - private static InfoBar show( - int enumeratedIconId, Bitmap iconBitmap, String messageText, String url) { + private static InfoBar show(int enumeratedIconId, Bitmap iconBitmap, String messageText, + String url, boolean isIconAdaptive) { int drawableId = ResourceId.mapToDrawableId(enumeratedIconId); - return new InstallableAmbientBadgeInfoBar(drawableId, iconBitmap, messageText, url); + + Bitmap iconBitmapToUse = iconBitmap; + if (isIconAdaptive && ShortcutHelper.doesAndroidSupportMaskableIcons()) { + iconBitmapToUse = fetchAdaptiveIconBitmap(iconBitmap); + } + + return new InstallableAmbientBadgeInfoBar(drawableId, iconBitmapToUse, messageText, url); + } + + @TargetApi(Build.VERSION_CODES.O) + private static Bitmap fetchAdaptiveIconBitmap(Bitmap bitmap) { + Bitmap padded = ShortcutHelper.createHomeScreenIconFromWebIcon(bitmap, true); + Icon adaptiveIcon = Icon.createWithAdaptiveBitmap(padded); + AdaptiveIconDrawable adaptiveIconDrawable = + (AdaptiveIconDrawable) adaptiveIcon.loadDrawable( + ContextUtils.getApplicationContext()); + + Bitmap result = Bitmap.createBitmap(adaptiveIconDrawable.getIntrinsicWidth(), + adaptiveIconDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(result); + adaptiveIconDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + adaptiveIconDrawable.draw(canvas); + + return result; } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 8b49fee..e7f9b5d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -1116,7 +1116,7 @@ private void forceOnTextChanged() { String textWithoutAutocomplete = mUrlCoordinator.getTextWithoutAutocomplete(); - String textWithAutocomplete = mUrlCoordinator.getTextWithoutAutocomplete(); + String textWithAutocomplete = mUrlCoordinator.getTextWithAutocomplete(); mAutocompleteCoordinator.onTextChanged(textWithoutAutocomplete, textWithAutocomplete); mStatusViewCoordinator.onTextChanged(textWithoutAutocomplete, textWithAutocomplete); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java index 512cc6f..90b0c25 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreJavaUtils.java
@@ -20,6 +20,9 @@ /** * Provides ARCore classes access to java-related app functionality. + * + * <p>This class provides static methods called by ArDelegateImpl via ArDelegateProvider, + * and provides JNI interfaces to/from the C++ AR code.</p> */ @JNINamespace("vr") public class ArCoreJavaUtils { @@ -28,8 +31,19 @@ private long mNativeArCoreJavaUtils; + // The native ArCoreDevice runtime creates a ArCoreJavaUtils instance in its constructor, + // and keeps a strong reference to it for the lifetime of the device. It creates and + // owns an ArImmersiveOverlay for the duration of an immersive-ar session, which in + // turn contains a reference to ArCoreJavaUtils for making JNI calls back to the device. private ArImmersiveOverlay mArImmersiveOverlay; + // ArDelegateImpl needs to know if there's an active immersive session so that it can handle + // back button presses from ChromeActivity's onBackPressed(). It's only set while a session is + // in progress, and reset to null on session end. The ArImmersiveOverlay member has a strong + // reference to the ChromeActivity, and that shouldn't be retained beyond the duration of a + // session. + private static ArCoreJavaUtils sActiveSessionInstance; + @CalledByNative private static ArCoreJavaUtils create(long nativeArCoreJavaUtils) { ThreadUtils.assertOnUiThread(); @@ -60,18 +74,33 @@ } @CalledByNative - private void startSession(final Tab tab) { + private void startSession(final Tab tab, boolean useOverlay) { if (DEBUG_LOGS) Log.i(TAG, "startSession"); mArImmersiveOverlay = new ArImmersiveOverlay(); - mArImmersiveOverlay.show(tab.getActivity(), this); + sActiveSessionInstance = this; + mArImmersiveOverlay.show(tab.getActivity(), this, useOverlay); } @CalledByNative private void endSession() { if (DEBUG_LOGS) Log.i(TAG, "endSession"); - if (mArImmersiveOverlay != null) { - mArImmersiveOverlay.cleanupAndExit(); + if (mArImmersiveOverlay == null) return; + + mArImmersiveOverlay.cleanupAndExit(); + mArImmersiveOverlay = null; + sActiveSessionInstance = null; + } + + // Called from ArDelegateImpl + public static boolean onBackPressed() { + if (DEBUG_LOGS) Log.i(TAG, "onBackPressed"); + // If there's an active immersive session, consume the "back" press and shut down the + // session. + if (sActiveSessionInstance != null) { + sActiveSessionInstance.endSession(); + return true; } + return false; } public void onDrawingSurfaceReady(Surface surface, int rotation, int width, int height) { @@ -91,13 +120,16 @@ public void onDrawingSurfaceDestroyed() { if (DEBUG_LOGS) Log.i(TAG, "onDrawingSurfaceDestroyed"); if (mNativeArCoreJavaUtils == 0) return; - mArImmersiveOverlay = null; ArCoreJavaUtilsJni.get().onDrawingSurfaceDestroyed( mNativeArCoreJavaUtils, ArCoreJavaUtils.this); } @CalledByNative private void onNativeDestroy() { + // ArCoreDevice's destructor ends sessions before destroying its native ArCoreSessionUtils + // object. + assert sActiveSessionInstance == null : "unexpected active session in onNativeDestroy"; + mNativeArCoreJavaUtils = 0; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegate.java index 6e7015e..2b30786 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegate.java
@@ -21,4 +21,9 @@ * to notify AR that the activity was resumed. **/ public void registerOnResumeActivity(Activity activity); + + /** + * Used to let AR immersive mode intercept the Back button to exit immersive mode. + */ + public boolean onBackPressed(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java index 500cb1c..b3bc916 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArDelegateImpl.java
@@ -26,4 +26,9 @@ public void registerOnResumeActivity(Activity activity) { ArCoreInstallUtils.onResumeActivityWithNative(activity); } + + @Override + public boolean onBackPressed() { + return ArCoreJavaUtils.onBackPressed(); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArImmersiveOverlay.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArImmersiveOverlay.java index 0b8f550..c3eda20 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/ArImmersiveOverlay.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/ArImmersiveOverlay.java
@@ -8,9 +8,13 @@ import android.app.Dialog; import android.content.DialogInterface; import android.content.pm.ActivityInfo; +import android.graphics.PixelFormat; +import android.graphics.Point; +import android.view.Display; import android.view.Gravity; import android.view.MotionEvent; import android.view.SurfaceHolder; +import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; @@ -19,6 +23,9 @@ import org.chromium.base.Log; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.compositor.CompositorView; +import org.chromium.chrome.browser.tab.EmptyTabObserver; +import org.chromium.chrome.browser.tab.Tab; import org.chromium.content_public.browser.ScreenOrientationDelegate; import org.chromium.content_public.browser.ScreenOrientationProvider; import org.chromium.ui.widget.Toast; @@ -38,14 +45,19 @@ private boolean mCleanupInProgress; private SurfaceUiWrapper mSurfaceUi; - public void show(@NonNull ChromeActivity activity, @NonNull ArCoreJavaUtils caller) { + public void show( + @NonNull ChromeActivity activity, @NonNull ArCoreJavaUtils caller, boolean useOverlay) { if (DEBUG_LOGS) Log.i(TAG, "constructor"); mArCoreJavaUtils = caller; mActivity = activity; // Choose a concrete implementation to create a drawable Surface and make it fullscreen. // It forwards SurfaceHolder callbacks and touch events to this ArImmersiveOverlay object. - mSurfaceUi = new SurfaceUiDialog(this); + if (useOverlay) { + mSurfaceUi = new SurfaceUiCompositor(); + } else { + mSurfaceUi = new SurfaceUiDialog(); + } } private interface SurfaceUiWrapper { @@ -64,14 +76,14 @@ | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - public SurfaceUiDialog(ArImmersiveOverlay parent) { + public SurfaceUiDialog() { // Create a fullscreen dialog and use its backing Surface for drawing. mDialog = new Dialog(mActivity, android.R.style.Theme_NoTitleBar_Fullscreen); mDialog.getWindow().setBackgroundDrawable(null); - mDialog.getWindow().takeSurface(parent); + mDialog.getWindow().takeSurface(ArImmersiveOverlay.this); View view = mDialog.getWindow().getDecorView(); view.setSystemUiVisibility(VISIBILITY_FLAGS_IMMERSIVE); - view.setOnTouchListener(parent); + view.setOnTouchListener(ArImmersiveOverlay.this); mDialog.setOnCancelListener(this); mDialog.getWindow().setLayout( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); @@ -103,6 +115,52 @@ } } + private class SurfaceUiCompositor extends EmptyTabObserver implements SurfaceUiWrapper { + private SurfaceView mSurfaceView; + private CompositorView mCompositorView; + + public SurfaceUiCompositor() { + mSurfaceView = new SurfaceView(mActivity); + // Keep the camera layer at "default" Z order. Chrome's compositor SurfaceView is in + // OverlayVideoMode, putting it in front of that, but behind other non-SurfaceView UI. + mSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); + mSurfaceView.getHolder().addCallback(ArImmersiveOverlay.this); + + View content = mActivity.getWindow().findViewById(android.R.id.content); + ViewGroup group = (ViewGroup) content.getParent(); + group.addView(mSurfaceView); + + mCompositorView = mActivity.getCompositorViewHolder().getCompositorView(); + + // Enable alpha channel for the compositor and make the background + // transparent. (A variant of CompositorView::SetOverlayVideoMode.) + if (DEBUG_LOGS) Log.i(TAG, "calling mCompositorView.setOverlayImmersiveArMode(true)"); + mCompositorView.setOverlayImmersiveArMode(true); + + // Watch for fullscreen exit triggered from JS, this needs to end the session. + mActivity.getActivityTab().addObserver(this); + } + + @Override // SurfaceUiWrapper + public void onSurfaceVisible() {} + + @Override // SurfaceUiWrapper + public void destroy() { + mActivity.getActivityTab().removeObserver(this); + View content = mActivity.getWindow().findViewById(android.R.id.content); + ViewGroup group = (ViewGroup) content.getParent(); + group.removeView(mSurfaceView); + mSurfaceView = null; + mCompositorView.setOverlayImmersiveArMode(false); + } + + @Override // TabObserver + public void onExitFullscreenMode(Tab tab) { + if (DEBUG_LOGS) Log.i(TAG, "onExitFullscreenMode"); + cleanupAndExit(); + } + } + @Override // View.OnTouchListener public boolean onTouch(View v, MotionEvent ev) { // Only forward primary actions, ignore more complex events such as secondary pointer @@ -143,32 +201,70 @@ @Override // SurfaceHolder.Callback2 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - // WebXR immersive sessions don't support resize, so use the first reported size. - // We shouldn't get resize events since we're using FLAG_LAYOUT_STABLE and are - // locking screen orientation. + // The surface may not immediately start out at the expected fullscreen size due to + // animations or not-yet-hidden navigation bars. WebXR immersive sessions use a fixed-size + // frame transport that can't be resized, so we need to pick a single size and stick with it + // for the duration of the session. Use the expected fullscreen size for WebXR frame + // transport even if the currently-visible part in the surface view is smaller than this. We + // shouldn't get resize events since we're using FLAG_LAYOUT_STABLE and are locking screen + // orientation. if (mSurfaceReportedReady) { int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); - if (DEBUG_LOGS) + if (DEBUG_LOGS) { Log.i(TAG, "surfaceChanged ignoring change to width=" + width + " height=" + height + " rotation=" + rotation); + } return; } - // Save current orientation mode, and then lock current orientation. + // Need to ensure orientation is locked at this point to avoid race conditions. Save current + // orientation mode, and then lock current orientation. It's unclear if there's still a risk + // of races, for example if an orientation change was already in progress at this point but + // wasn't fully processed yet. In that case the user may need to exit and re-enter the + // session to get the intended layout. ScreenOrientationProvider.getInstance().setOrientationDelegate(this); if (mRestoreOrientation == null) { mRestoreOrientation = mActivity.getRequestedOrientation(); } mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); + // Display.getRealSize "gets the real size of the display without subtracting any window + // decor or applying any compatibility scale factors", and "the size is adjusted based on + // the current rotation of the display". This is what we want since the surface and WebXR + // frame sizes also use the same current rotation which is now locked, so there's no need to + // separately adjust for portrait vs landscape modes. + // + // While it would be preferable to wait until the surface is at the desired fullscreen + // resolution, i.e. via mActivity.getFullscreenManager().getPersistentFullscreenMode(), that + // causes a chicken-and-egg problem for SurfaceUiCompositor mode as used for DOM overlay. + // Chrome's fullscreen mode is triggered by the Blink side setting an element fullscreen + // after the session starts, but the session doesn't start until we report the drawing + // surface being ready (including a configured size), so we use this reported size assuming + // that's what the fullscreen mode will use. + Display display = mActivity.getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getRealSize(size); + + if (width < size.x || height < size.y) { + if (DEBUG_LOGS) { + Log.i(TAG, + "surfaceChanged adjusting size from " + width + "x" + height + " to " + + size.x + "x" + size.y); + } + width = size.x; + height = size.y; + } + int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); - if (DEBUG_LOGS) + if (DEBUG_LOGS) { Log.i(TAG, "surfaceChanged size=" + width + "x" + height + " rotation=" + rotation); + } mArCoreJavaUtils.onDrawingSurfaceReady(holder.getSurface(), rotation, width, height); mSurfaceReportedReady = true; - // Show a toast with instructions how to exit fullscreen mode now if necessary. + // Show the toast with instructions how to exit fullscreen mode now if necessary. + // Not needed in DOM overlay mode which uses FullscreenHtmlApiHandler to do so. mSurfaceUi.onSurfaceVisible(); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java index 2f504c1..dddde2a5 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java
@@ -42,6 +42,8 @@ FeedConfiguration.getConsumeSyntheticTokens()); Assert.assertEquals(FeedConfiguration.CONSUME_SYNTHETIC_TOKENS_WHILE_RESTORING_DEFAULT, FeedConfiguration.getConsumeSyntheticTokensWhileRestoring()); + Assert.assertEquals(FeedConfiguration.DEFAULT_ACTION_TTL_SECONDS_DEFAULT, + FeedConfiguration.getDefaultActionTtlSeconds()); Assert.assertEquals(FeedConfiguration.FEED_ACTION_SERVER_ENDPOINT_DEFAULT, FeedConfiguration.getFeedActionServerEndpoint()); Assert.assertEquals(FeedConfiguration.FEED_ACTION_SERVER_MAX_ACTIONS_PER_REQUEST_DEFAULT, @@ -139,6 +141,16 @@ @Feature({"Feed"}) @CommandLineFlags. Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group", + "force-fieldtrial-params=Trial.Group:default_action_ttl_seconds/42"}) + public void + testDefaultActionTTLSeconds() { + Assert.assertEquals(42, FeedConfiguration.getDefaultActionTtlSeconds()); + } + + @Test + @Feature({"Feed"}) + @CommandLineFlags. + Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group", "force-fieldtrial-params=Trial.Group:feed_action_server_endpoint/" + "https%3A%2F%2Ffeed%2Egoogle%2Ecom%2Fpath"}) public void @@ -401,6 +413,8 @@ configuration.getValueOrDefault(ConfigKey.CONSUME_SYNTHETIC_TOKENS, true)); Assert.assertFalse(configuration.getValueOrDefault( ConfigKey.CONSUME_SYNTHETIC_TOKENS_WHILE_RESTORING, true)); + Assert.assertEquals((long) FeedConfiguration.DEFAULT_ACTION_TTL_SECONDS_DEFAULT, + configuration.getValueOrDefault(ConfigKey.DEFAULT_ACTION_TTL_SECONDS, 0)); Assert.assertEquals(FeedConfiguration.FEED_ACTION_SERVER_ENDPOINT_DEFAULT, configuration.getValueOrDefault(ConfigKey.FEED_ACTION_SERVER_ENDPOINT, "")); Assert.assertEquals(
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 16fc89eb..d15eb8d 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -3100,7 +3100,7 @@ Related info </message> <message name="IDS_ASSISTANT_SCREEN_CONTEXT_DESC" desc="Description for assistant screen context optin. This is also used as the sub label for context-enable toggle in Assistant settings page."> - Let the Assistant show you info related to what's on your screen + Let your Assistant show you info related to what's on your screen </message> <message name="IDS_ASSISTANT_READY_SCREEN_TITLE" desc="Title for assistant ready screen."> Your Assistant is ready
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index 09818d4..ad44b29 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -2,6 +2,11 @@ <!-- Settings-specific strings (included from generated_resources.grd). --> <grit-part> <if expr="chromeos"> + <!-- About (OS Settings) --> + <message name="IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS" desc="Label of the row button that clicks into Build details"> + Build Details + </message> + <!-- People (OS settings) --> <message name="IDS_OS_SETTINGS_PROFILE_LABEL" desc="Label underneath the profile's real name, listing the email address and optionally the number of additional accounts"> {COUNT, plural,
diff --git a/chrome/app/printing_strings.grdp b/chrome/app/printing_strings.grdp index c7533c1..498470ec 100644 --- a/chrome/app/printing_strings.grdp +++ b/chrome/app/printing_strings.grdp
@@ -88,10 +88,10 @@ <message name="IDS_PRINT_PREVIEW_SCALING_LABEL" desc="Scaling option label."> Scale </message> - <message name="IDS_PRINT_PREVIEW_OPTION_DEFAULT_SCALING" desc="Option to print with default (100%) scaling."> + <message name="IDS_PRINT_PREVIEW_OPTION_DEFAULT_SCALING" desc="Dropdown option to print with default (100%) scaling."> Default </message> - <message name="IDS_PRINT_PREVIEW_OPTION_CUSTOM_SCALING" desc="Option to print with custom scaling."> + <message name="IDS_PRINT_PREVIEW_OPTION_CUSTOM_SCALING" desc="Dropdown option to print with custom scaling."> Custom </message> <message name="IDS_PRINT_PREVIEW_PAGES_PER_SHEET_LABEL" desc="Pages per sheet option label."> @@ -147,9 +147,12 @@ <message name="IDS_PRINT_PREVIEW_OPTION_HEADER_FOOTER" desc="Checkbox label that provides a choice to print the headers and footers."> Headers and footers </message> - <message name="IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE" desc="Checkbox label shown in print preview page to auto fit the PDF page."> + <message name="IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE" desc="Dropdown option shown in print preview page to auto fit the PDF page to the paper's printable area."> Fit to page </message> + <message name="IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAPER" desc="Dropdown option shown in print preview page to auto fit the PDF page to the paper size."> + Fit to paper size + </message> <message name="IDS_PRINT_PREVIEW_OPTION_BACKGROUND_COLORS_AND_IMAGES" desc="Checkbox label shown in print preview page to print webpage backgrounds."> Background graphics </message>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index a85099a..ab5e2dc 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -27,10 +27,7 @@ </message> <if expr="chromeos"> <message name="IDS_SETTINGS_ABOUT_PAGE_DETAILED_BUILD_INFO" desc="Label describing the section that shows detailed information about the current Chrome build."> - Detailed build information - </message> - <message name="IDS_SETTINGS_ABOUT_PAGE_ARC_VERSION" desc="Label for ARC version"> - ARC Version + Additional details </message> <message name="IDS_SETTINGS_ABOUT_PAGE_CHANNEL" desc="The channel label under Detailed build info."> Channel @@ -62,12 +59,6 @@ Learn more <ph name="LINK_END"></a></ph> </message> - <message name="IDS_SETTINGS_ABOUT_PAGE_FIRMWARE" desc="Label used for Chrome OS BIOS firmware version."> - Firmware - </message> - <message name="IDS_SETTINGS_ABOUT_PAGE_PLATFORM" desc="Label for Platform"> - Platform - </message> <message name="IDS_SETTINGS_ABOUT_PAGE_RELAUNCH" desc="The label for the relaunch button that relaunches the browser once update is complete"> Restart </message> @@ -3152,10 +3143,10 @@ "Ok Google" </message> <message name="IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_DESCRIPTION" desc="Sub label for hotword-enable toggle."> - Access your Assistant any time you say "Ok Google" + Access your Assistant when you say "Ok Google." </message> <message name="IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_DESCRIPTION" desc="Sub label for hotword-enable dropdown without DSP support."> - Activate the Assistant when anyone says “Ok Google”. To save battery, “Ok Google” is on only when your device is connected to a power source. + Access your Assistant when you say "Ok Google." To save battery, choose “On (Recommended.)” Your Assistant will respond only when your device is plugged in or charging. </message> <message name="IDS_SETTINGS_GOOGLE_ASSISTANT_ENABLE_HOTWORD_WITHOUT_DSP_RECOMMENDED" desc="Default label for hotword-enable dropdown without DSP support."> On (Recommended) @@ -3271,6 +3262,12 @@ <message name="IDS_SETTINGS_SITE_SETTINGS_IMAGES" desc="Label for the images site settings."> Images </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT" desc="Label for the insecure content site settings. This setting controls whether HTTP content will be displayed on HTTPS sites."> + Insecure content + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCK" desc="Label explaining that insecure content is blocked by default in secure sites. Insecure content refers to content served over HTTP, secure sites refers to sites served over HTTPS."> + Insecure content is blocked by default on secure sites + </message> <message name="IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT" desc="Label for the javascript site settings."> JavaScript </message>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 54b17eb..c6f80ac 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -5381,6 +5381,7 @@ if (is_win || is_mac || is_desktop_linux || is_chromeos) { deps += [ + "//chrome/browser/resources/management:polymer3_elements", "//chrome/browser/resources/discards:discards_resources_gen", "//chrome/browser/ui/webui/discards:mojo_bindings_js", "//services/resource_coordinator/public/mojom:mojom_js",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 9b7f081..46c5fa3 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2207,6 +2207,9 @@ {"webxr-ar-module", flag_descriptions::kWebXrArModuleName, flag_descriptions::kWebXrArModuleDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWebXrArModule)}, + {"webxr-ar-dom-overlay", flag_descriptions::kWebXrArDOMOverlayName, + flag_descriptions::kWebXrArDOMOverlayDescription, kOsAndroid, + FEATURE_VALUE_TYPE(features::kWebXrArDOMOverlay)}, {"webxr-hit-test", flag_descriptions::kWebXrHitTestName, flag_descriptions::kWebXrHitTestDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWebXrHitTest)}, @@ -2347,6 +2350,12 @@ flag_descriptions::kCrosRegionsModeDescription, kOsCrOS, MULTI_VALUE_TYPE(kCrosRegionsModeChoices)}, #endif // OS_CHROMEOS +#if defined(OS_WIN) + {"enable-aura-tooltips-on-windows", + flag_descriptions::kEnableAuraTooltipsOnWindowsName, + flag_descriptions::kEnableAuraTooltipsOnWindowsDescription, kOsWin, + FEATURE_VALUE_TYPE(views::features::kEnableAuraTooltipsOnWindows)}, +#endif // OS_WIN #if defined(TOOLKIT_VIEWS) || defined(OS_ANDROID) {"enable-autofill-credit-card-upload", flag_descriptions::kAutofillCreditCardUploadName,
diff --git a/chrome/browser/android/compositor/compositor_view.cc b/chrome/browser/android/compositor/compositor_view.cc index 0366163..6dca5748 100644 --- a/chrome/browser/android/compositor/compositor_view.cc +++ b/chrome/browser/android/compositor/compositor_view.cc
@@ -83,7 +83,8 @@ current_surface_format_(0), content_width_(0), content_height_(0), - overlay_video_mode_(false) { + overlay_video_mode_(false), + overlay_immersive_ar_mode_(false) { content::BrowserChildProcessObserver::Add(this); obj_.Reset(env, obj); compositor_.reset(content::Compositor::Create(this, window_android)); @@ -224,6 +225,24 @@ SetNeedsComposite(env, object); } +void CompositorView::SetOverlayImmersiveArMode( + JNIEnv* env, + const JavaParamRef<jobject>& object, + bool enabled) { + // This mode is a variant of overlay video mode, the Java code is responsible + // for calling SetOverlayVideoMode(enabled) first to ensure consistent state. + // Check to make sure this didn't get bypassed. + DCHECK_EQ(enabled, overlay_video_mode_) << "missing SetOverlayVideoMode call"; + + overlay_immersive_ar_mode_ = enabled; + // This mode needs a transparent background color. + // ContentViewRenderView::SetOverlayVideoMode applies this, but the + // CompositorView::SetOverlayVideoMode version in this file doesn't. + compositor_->SetBackgroundColor(enabled ? SK_ColorTRANSPARENT + : SK_ColorWHITE); + compositor_->SetNeedsComposite(); +} + void CompositorView::SetSceneLayer(JNIEnv* env, const JavaParamRef<jobject>& object, const JavaParamRef<jobject>& jscene_layer) { @@ -248,7 +267,21 @@ root_layer_->InsertChild(scene_layer->layer(), 0); } - if (scene_layer) { + if (overlay_immersive_ar_mode_) { + // Suppress the scene background's default background which breaks + // transparency. TODO(https://crbug.com/1002270): Remove this workaround + // once the issue with StaticTabSceneLayer's unexpected background is + // resolved. + bool should_show_background = scene_layer->ShouldShowBackground(); + SkColor color = scene_layer->GetBackgroundColor(); + if (should_show_background && color != SK_ColorTRANSPARENT) { + DVLOG(1) << "override non-transparent background 0x" << std::hex << color; + SetBackground(false, SK_ColorTRANSPARENT); + } else { + // No override needed, scene doesn't provide an opaque background. + SetBackground(should_show_background, color); + } + } else if (scene_layer) { SetBackground(scene_layer->ShouldShowBackground(), scene_layer->GetBackgroundColor()); } else {
diff --git a/chrome/browser/android/compositor/compositor_view.h b/chrome/browser/android/compositor/compositor_view.h index 6552a86..35f261a 100644 --- a/chrome/browser/android/compositor/compositor_view.h +++ b/chrome/browser/android/compositor/compositor_view.h
@@ -80,6 +80,10 @@ void SetOverlayVideoMode(JNIEnv* env, const base::android::JavaParamRef<jobject>& object, bool enabled); + void SetOverlayImmersiveArMode( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& object, + bool enabled); void SetSceneLayer(JNIEnv* env, const base::android::JavaParamRef<jobject>& object, const base::android::JavaParamRef<jobject>& jscene_layer); @@ -124,6 +128,7 @@ int content_width_; int content_height_; bool overlay_video_mode_; + bool overlay_immersive_ar_mode_; base::WeakPtrFactory<CompositorView> weak_factory_{this};
diff --git a/chrome/browser/android/metrics/BUILD.gn b/chrome/browser/android/metrics/BUILD.gn index cdb8fca..97f500d 100644 --- a/chrome/browser/android/metrics/BUILD.gn +++ b/chrome/browser/android/metrics/BUILD.gn
@@ -19,6 +19,7 @@ } generate_jni("jni_headers") { + testonly = true sources = [ "../../../android/java/src/org/chromium/chrome/browser/metrics/UkmUtilsForTest.java", ]
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.cc b/chrome/browser/android/vr/arcore_device/arcore_device.cc index 5f78246..62edd69 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_device.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_device.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/android/vr/arcore_device/arcore_device.h" +#include <algorithm> + #include "base/bind.h" #include "base/numerics/math_constants.h" #include "base/optional.h" @@ -101,7 +103,16 @@ std::make_unique<vr::ArCoreJavaUtils>()) {} ArCoreDevice::~ArCoreDevice() { + // If there's still a pending session request, reject it. CallDeferredRequestSessionCallback(/*success=*/false); + + // Ensure that any active sessions are terminated. Terminating the GL thread + // would normally do so via its session_shutdown_callback_, but that happens + // asynchronously via CreateMainThreadCallback, and it doesn't seem safe to + // depend on all posted tasks being handled before the thread is shut down. + // Repeated EndSession calls are a no-op, so it's OK to do this redundantly. + OnSessionEnded(); + // The GL thread must be terminated since it uses our members. For example, // there might still be a posted Initialize() call in flight that uses // arcore_session_utils_ and arcore_factory_. Ensure that the thread is @@ -151,10 +162,14 @@ } session_state_->pending_request_session_callback_ = std::move(callback); + bool use_dom_overlay = base::Contains( + options->enabled_features, + device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR); + if (session_state_->is_arcore_gl_thread_initialized_) { // First session on a new ArCoreDevice, and it's ready to proceed now. - RequestSessionAfterInitialization(options->render_process_id, - options->render_frame_id); + RequestSessionAfterInitialization( + options->render_process_id, options->render_frame_id, use_dom_overlay); } else { if (mailbox_bridge_) { // This is a new ArCoreDevice, but its mailbox_bridge_ hasn't finished @@ -173,12 +188,13 @@ session_state_->pending_request_session_after_gl_thread_initialized_ = base::BindOnce(&ArCoreDevice::RequestSessionAfterInitialization, GetWeakPtr(), options->render_process_id, - options->render_frame_id); + options->render_frame_id, use_dom_overlay); } } void ArCoreDevice::RequestSessionAfterInitialization(int render_process_id, - int render_frame_id) { + int render_frame_id, + bool use_overlay) { auto ready_callback = base::BindRepeating(&ArCoreDevice::OnDrawingSurfaceReady, GetWeakPtr()); auto touch_callback = @@ -187,8 +203,9 @@ base::BindOnce(&ArCoreDevice::OnDrawingSurfaceDestroyed, GetWeakPtr()); arcore_session_utils_->RequestArSession( - render_process_id, render_frame_id, std::move(ready_callback), - std::move(touch_callback), std::move(destroyed_callback)); + render_process_id, render_frame_id, use_overlay, + std::move(ready_callback), std::move(touch_callback), + std::move(destroyed_callback)); } void ArCoreDevice::OnDrawingSurfaceReady(gfx::AcceleratedWidget window,
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.h b/chrome/browser/android/vr/arcore_device/arcore_device.h index 81b01fb..ef7cd4d 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_device.h +++ b/chrome/browser/android/vr/arcore_device/arcore_device.h
@@ -85,7 +85,8 @@ bool IsOnMainThread(); void RequestSessionAfterInitialization(int render_process_id, - int render_frame_id); + int render_frame_id, + bool use_overlay); void CallDeferredRequestSessionCallback(bool success); void RequestArCoreGlInitialization(gfx::AcceleratedWidget window, int rotation,
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc index 738403a..63974d1 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_device_unittest.cc
@@ -89,6 +89,7 @@ void RequestArSession( int render_process_id, int render_frame_id, + bool use_overlay, vr::SurfaceReadyCallback ready_callback, vr::SurfaceTouchCallback touch_callback, vr::SurfaceDestroyedCallback destroyed_callback) override {
diff --git a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc index e8f1dc0..dce5c25 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_java_utils.cc
@@ -42,6 +42,7 @@ void ArCoreJavaUtils::RequestArSession( int render_process_id, int render_frame_id, + bool use_overlay, SurfaceReadyCallback ready_callback, SurfaceTouchCallback touch_callback, SurfaceDestroyedCallback destroyed_callback) { @@ -54,7 +55,7 @@ Java_ArCoreJavaUtils_startSession( env, j_arcore_java_utils_, - getTabFromRenderer(render_process_id, render_frame_id)); + getTabFromRenderer(render_process_id, render_frame_id), use_overlay); } void ArCoreJavaUtils::EndSession() {
diff --git a/chrome/browser/android/vr/arcore_device/arcore_java_utils.h b/chrome/browser/android/vr/arcore_device/arcore_java_utils.h index ecd5e2d6..0f47db4 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_java_utils.h +++ b/chrome/browser/android/vr/arcore_device/arcore_java_utils.h
@@ -23,6 +23,7 @@ // ArCoreSessionUtils: void RequestArSession(int render_process_id, int render_frame_id, + bool use_overlay, SurfaceReadyCallback ready_callback, SurfaceTouchCallback touch_callback, SurfaceDestroyedCallback destroyed_callback) override;
diff --git a/chrome/browser/android/vr/arcore_device/arcore_session_utils.h b/chrome/browser/android/vr/arcore_device/arcore_session_utils.h index e22027f..37d52d48 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_session_utils.h +++ b/chrome/browser/android/vr/arcore_device/arcore_session_utils.h
@@ -39,6 +39,7 @@ virtual void RequestArSession( int render_process_id, int render_frame_id, + bool use_overlay, SurfaceReadyCallback ready_callback, SurfaceTouchCallback touch_callback, SurfaceDestroyedCallback destroyed_callback) = 0;
diff --git a/chrome/browser/banners/app_banner_manager_android.cc b/chrome/browser/banners/app_banner_manager_android.cc index c274203..34abf55 100644 --- a/chrome/browser/banners/app_banner_manager_android.cc +++ b/chrome/browser/banners/app_banner_manager_android.cc
@@ -370,7 +370,7 @@ if (GetVisibleAmbientBadgeInfoBar(infobar_service) == nullptr) { InstallableAmbientBadgeInfoBarDelegate::Create( web_contents(), weak_factory_.GetWeakPtr(), GetAppName(), primary_icon_, - manifest_.start_url); + has_maskable_primary_icon_, manifest_.start_url); } }
diff --git a/chrome/browser/banners/app_banner_ui_delegate_android.cc b/chrome/browser/banners/app_banner_ui_delegate_android.cc index accd879..a733b0c 100644 --- a/chrome/browser/banners/app_banner_ui_delegate_android.cc +++ b/chrome/browser/banners/app_banner_ui_delegate_android.cc
@@ -209,7 +209,8 @@ url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); return Java_AppBannerUiDelegateAndroid_showWebAppDialog( - env, java_delegate_, java_app_title, java_bitmap, java_app_url); + env, java_delegate_, java_app_title, java_bitmap, java_app_url, + has_primary_maskable_icon_); } bool AppBannerUiDelegateAndroid::ShowNativeAppDetails() {
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index d2d42ae..5f864a3b 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -324,11 +324,9 @@ <include name="IDR_POLICY_JS" file="resources\policy\policy.js" type="BINDATA" compress="gzip" /> <if expr="not is_android"> <include name="IDR_MANAGEMENT_HTML" file="resources\management\management.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" /> - <include name="IDR_MANAGEMENT_UI_HTML" file="resources\management\management_ui.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" /> - <include name="IDR_MANAGEMENT_UI_JS" file="resources\management\management_ui.js" type="BINDATA" compress="gzip" preprocess="true" /> - <include name="IDR_MANAGEMENT_BROWSER_PROXY_HTML" file="resources\management\management_browser_proxy.html" allowexternalscript="true" type="BINDATA" compress="gzip" /> + <include name="IDR_MANAGEMENT_UI_JS" file="${root_gen_dir}/chrome/browser/resources/management/management_ui.js" use_base_dir="false" type="BINDATA" compress="gzip" preprocess="true" /> <include name="IDR_MANAGEMENT_BROWSER_PROXY_JS" file="resources\management\management_browser_proxy.js" type="BINDATA" compress="gzip" preprocess="true" /> - <include name="IDR_MANAGEMENT_ICONS_HTML" file="resources\management\icons.html" type="BINDATA" compress="gzip" preprocess="true" /> + <include name="IDR_MANAGEMENT_ICONS_JS" file="${root_gen_dir}/chrome/browser/resources/management/icons.js" use_base_dir="false" type="BINDATA" compress="gzip" preprocess="true" /> </if> <include name="IDR_SITE_ENGAGEMENT_HTML" file="resources\engagement\site_engagement.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" /> <include name="IDR_SITE_ENGAGEMENT_JS" file="resources\engagement\site_engagement.js" flattenhtml="true" type="BINDATA" compress="gzip" />
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index b6733d9d..489eeb22 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -451,12 +451,6 @@ "arc/arc_migration_guide_notification.h", "arc/arc_optin_uma.cc", "arc/arc_optin_uma.h", - "arc/arc_play_store_enabled_preference_handler.cc", - "arc/arc_play_store_enabled_preference_handler.h", - "arc/arc_service_launcher.cc", - "arc/arc_service_launcher.h", - "arc/arc_session_manager.cc", - "arc/arc_session_manager.h", "arc/arc_support_host.cc", "arc/arc_support_host.h", "arc/arc_util.cc", @@ -618,6 +612,12 @@ "arc/screen_capture/arc_screen_capture_bridge.h", "arc/screen_capture/arc_screen_capture_session.cc", "arc/screen_capture/arc_screen_capture_session.h", + "arc/session/arc_play_store_enabled_preference_handler.cc", + "arc/session/arc_play_store_enabled_preference_handler.h", + "arc/session/arc_service_launcher.cc", + "arc/session/arc_service_launcher.h", + "arc/session/arc_session_manager.cc", + "arc/session/arc_session_manager.h", "arc/tracing/arc_app_performance_tracing.cc", "arc/tracing/arc_app_performance_tracing.h", "arc/tracing/arc_app_performance_tracing_session.cc", @@ -2432,8 +2432,6 @@ "arc/app_shortcuts/arc_app_shortcuts_menu_builder_unittest.cc", "arc/app_shortcuts/arc_app_shortcuts_request_unittest.cc", "arc/arc_migration_guide_notification_unittest.cc", - "arc/arc_play_store_enabled_preference_handler_unittest.cc", - "arc/arc_session_manager_unittest.cc", "arc/arc_support_host_unittest.cc", "arc/arc_util_unittest.cc", "arc/bluetooth/arc_bluetooth_bridge_unittest.cc", @@ -2474,6 +2472,8 @@ "arc/pip/arc_pip_bridge_unittest.cc", "arc/policy/arc_policy_bridge_unittest.cc", "arc/process/arc_process_unittest.cc", + "arc/session/arc_play_store_enabled_preference_handler_unittest.cc", + "arc/session/arc_session_manager_unittest.cc", "arc/tracing/arc_app_performance_tracing_unittest.cc", "arc/tracing/arc_cpu_event_unittest.cc", "arc/tracing/arc_graphics_jank_detector_unittest.cc",
diff --git a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc index 9ec5f9c..a3d51e6b 100644 --- a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc +++ b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc
@@ -21,9 +21,9 @@ #include "base/timer/timer.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/account_manager/account_manager_util.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_service.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/account_reconcilor_factory.h"
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h index 2586309..d4e2780a 100644 --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h
@@ -10,9 +10,9 @@ #include "base/timer/timer.h" #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_launcher.h" #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/kiosk/arc_kiosk_bridge.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_icon.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc b/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc index 1b7cc04..c4c8d79 100644 --- a/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc +++ b/chrome/browser/chromeos/apps/apk_web_app_installer_browsertest.cc
@@ -16,8 +16,8 @@ #include "base/test/bind_test_util.h" #include "chrome/browser/chromeos/apps/apk_web_app_installer.h" #include "chrome/browser/chromeos/apps/apk_web_app_service.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
diff --git a/chrome/browser/chromeos/arc/arc_app_id_provider_impl.cc b/chrome/browser/chromeos/arc/arc_app_id_provider_impl.cc index caf9ae44..fbcbfef 100644 --- a/chrome/browser/chromeos/arc/arc_app_id_provider_impl.cc +++ b/chrome/browser/chromeos/arc/arc_app_id_provider_impl.cc
@@ -4,7 +4,7 @@ #include "chrome/browser/chromeos/arc/arc_app_id_provider_impl.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
diff --git a/chrome/browser/chromeos/arc/arc_util.cc b/chrome/browser/chromeos/arc/arc_util.cc index e2d2006..55b2380 100644 --- a/chrome/browser/chromeos/arc/arc_util.cc +++ b/chrome/browser/chromeos/arc/arc_util.cc
@@ -22,9 +22,9 @@ #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/threading/scoped_blocking_call.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_web_contents_data.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/configuration_keys.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h"
diff --git a/chrome/browser/chromeos/arc/arc_util_unittest.cc b/chrome/browser/chromeos/arc/arc_util_unittest.cc index 7c4e8b8..16bb25b 100644 --- a/chrome/browser/chromeos/arc/arc_util_unittest.cc +++ b/chrome/browser/chromeos/arc/arc_util_unittest.cc
@@ -14,7 +14,7 @@ #include "base/test/scoped_feature_list.h" #include "base/values.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/oobe_configuration.h" #include "chrome/browser/chromeos/login/ui/fake_login_display_host.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service.cc b/chrome/browser/chromeos/arc/auth/arc_auth_service.cc index ec92827f..340c263 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_service.cc +++ b/chrome/browser/chromeos/arc/auth/arc_auth_service.cc
@@ -16,11 +16,11 @@ #include "chrome/browser/chromeos/account_manager/account_manager_migrator.h" #include "chrome/browser/chromeos/account_manager/account_manager_util.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.h" #include "chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/lifetime/application_lifetime.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service.h b/chrome/browser/chromeos/arc/auth/arc_auth_service.h index d66eb89..f7f8adb 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_service.h +++ b/chrome/browser/chromeos/arc/auth/arc_auth_service.h
@@ -14,8 +14,8 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/arc/mojom/auth.mojom.h" #include "components/arc/session/connection_observer.h" #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc index becec50..d6d594b 100644 --- a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc +++ b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
@@ -19,12 +19,12 @@ #include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_context.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_service.h" #include "chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service_factory.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc b/chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc index a22e6c8..585ef94 100644 --- a/chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc +++ b/chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc
@@ -13,9 +13,9 @@ #include "base/task/post_task.h" #include "base/test/bind_test_util.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_service.h" #include "chrome/browser/chromeos/arc/auth/arc_robot_auth_code_fetcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h b/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h index 1d92912..8b96b5d 100644 --- a/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h +++ b/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h
@@ -13,7 +13,7 @@ #include "base/observer_list_types.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/sessions/session_restore_observer.h" #include "components/account_id/account_id.h" #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
diff --git a/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.cc b/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.cc index 31b73a2..35c05f3 100644 --- a/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.cc +++ b/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.cc
@@ -9,7 +9,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/memory/singleton.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/arc/arc_browser_context_keyed_service_factory_base.h" #include "components/arc/arc_service_manager.h" #include "components/arc/session/arc_bridge_service.h"
diff --git a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc index b0134b1..7df6808 100644 --- a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc +++ b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc
@@ -12,8 +12,8 @@ #include "base/json/json_writer.h" #include "base/run_loop.h" #include "base/threading/thread_restrictions.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" #include "chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/login/test/local_policy_test_server_mixin.h" #include "chrome/browser/chromeos/platform_keys/key_permissions.h" #include "chrome/browser/chromeos/platform_keys/platform_keys.h"
diff --git a/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc b/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc index 64c16803..9c5d9c10 100644 --- a/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc +++ b/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc
@@ -10,8 +10,8 @@ #include "base/json/json_writer.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_support_host.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" namespace arc {
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h index aa561d7e..f3d3bfc 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h +++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h
@@ -16,8 +16,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/arc/mojom/file_system.mojom.h" #include "components/arc/session/connection_observer.h" #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer.h b/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer.h index 0947e6f..f823869 100644 --- a/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer.h +++ b/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer.h
@@ -6,8 +6,8 @@ #define CHROME_BROWSER_CHROMEOS_ARC_INSTANCE_THROTTLE_ARC_BOOT_PHASE_THROTTLE_OBSERVER_H_ #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/throttle_observer.h" #include "chrome/browser/sessions/session_restore_observer.h"
diff --git a/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc b/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc index b932992..b2afccbb 100644 --- a/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc +++ b/chrome/browser/chromeos/arc/instance_throttle/arc_boot_phase_throttle_observer_unittest.cc
@@ -8,8 +8,8 @@ #include "base/command_line.h" #include "base/values.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/test/base/testing_profile.h" #include "components/arc/arc_prefs.h"
diff --git a/chrome/browser/chromeos/arc/instance_throttle/arc_instance_throttle_unittest.cc b/chrome/browser/chromeos/arc/instance_throttle/arc_instance_throttle_unittest.cc index a075646..27c5f24 100644 --- a/chrome/browser/chromeos/arc/instance_throttle/arc_instance_throttle_unittest.cc +++ b/chrome/browser/chromeos/arc/instance_throttle/arc_instance_throttle_unittest.cc
@@ -11,8 +11,8 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/test/task_environment.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/throttle_observer.h" #include "chrome/test/base/testing_profile.h" #include "components/arc/arc_prefs.h"
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h index 63b9fff..026de17 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h +++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/arc/mojom/intent_helper.mojom.h" #include "components/arc/session/connection_observer.h" #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_unittest.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_unittest.cc index e1715b9..32a02c2 100644 --- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_unittest.cc +++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_unittest.cc
@@ -10,7 +10,7 @@ #include "base/command_line.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/settings/stats_reporting_controller.h" #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
diff --git a/chrome/browser/chromeos/arc/notification/arc_boot_error_notification.h b/chrome/browser/chromeos/arc/notification/arc_boot_error_notification.h index 12ab395..1a25116 100644 --- a/chrome/browser/chromeos/arc/notification/arc_boot_error_notification.h +++ b/chrome/browser/chromeos/arc/notification/arc_boot_error_notification.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_CHROMEOS_ARC_NOTIFICATION_ARC_BOOT_ERROR_NOTIFICATION_H_ #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service.h b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service.h index 6a50843..1465edff 100644 --- a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service.h +++ b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/keyed_service/core/keyed_service.h" namespace content {
diff --git a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc index bed021a..be2cc07 100644 --- a/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc +++ b/chrome/browser/chromeos/arc/notification/arc_provision_notification_service_unittest.cc
@@ -11,8 +11,8 @@ #include "base/command_line.h" #include "base/values.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/ui/fake_login_display_host.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/notifications/notification_display_service_tester.h"
diff --git a/chrome/browser/chromeos/arc/notification/arc_supervision_transition_notification.cc b/chrome/browser/chromeos/arc/notification/arc_supervision_transition_notification.cc index ee7286f..28dd2f0 100644 --- a/chrome/browser/chromeos/arc/notification/arc_supervision_transition_notification.cc +++ b/chrome/browser/chromeos/arc/notification/arc_supervision_transition_notification.cc
@@ -8,8 +8,8 @@ #include "base/bind.h" #include "base/macros.h" #include "chrome/app/vector_icons/vector_icons.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/notifications/notification_display_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
diff --git a/chrome/browser/chromeos/arc/policy/arc_policy_bridge.cc b/chrome/browser/chromeos/arc/policy/arc_policy_bridge.cc index 778b2ce..d0ce31b 100644 --- a/chrome/browser/chromeos/arc/policy/arc_policy_bridge.cc +++ b/chrome/browser/chromeos/arc/policy/arc_policy_bridge.cc
@@ -17,8 +17,8 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/values.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/enterprise/cert_store/arc_smart_card_manager_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/policy/developer_tools_policy_handler.h" #include "chrome/browser/policy/profile_policy_connector.h"
diff --git a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.cc similarity index 97% rename from chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc rename to chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.cc index 0f087b2..972f133 100644 --- a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.cc +++ b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h" +#include "chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h" #include <string> @@ -10,8 +10,8 @@ #include "base/command_line.h" #include "base/logging.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/consent_auditor/consent_auditor_factory.h" #include "chrome/browser/prefs/pref_service_syncable_util.h" #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h similarity index 85% rename from chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h rename to chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h index 91e8329..e655e67 100644 --- a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h +++ b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_ -#define CHROME_BROWSER_CHROMEOS_ARC_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_ +#ifndef CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_ #include <memory> @@ -55,4 +55,4 @@ } // namespace arc -#endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_ +#endif // CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_PLAY_STORE_ENABLED_PREFERENCE_HANDLER_H_
diff --git a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler_unittest.cc similarity index 97% rename from chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc rename to chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler_unittest.cc index 406f831..b1b31bcc 100644 --- a/chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h" +#include "chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h" #include <memory> #include <string> @@ -11,8 +11,8 @@ #include "base/command_line.h" #include "base/files/scoped_temp_dir.h" #include "base/run_loop.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/consent_auditor/consent_auditor_factory.h"
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/session/arc_service_launcher.cc similarity index 97% rename from chrome/browser/chromeos/arc/arc_service_launcher.cc rename to chrome/browser/chromeos/arc/session/arc_service_launcher.cc index 7b52e7f..ad709ae 100644 --- a/chrome/browser/chromeos/arc/arc_service_launcher.cc +++ b/chrome/browser/chromeos/arc/session/arc_service_launcher.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include <utility> @@ -14,8 +14,6 @@ #include "chrome/browser/apps/app_service/arc_apps_factory.h" #include "chrome/browser/chromeos/apps/apk_web_app_service.h" #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h" -#include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_service.h" #include "chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h" @@ -41,6 +39,8 @@ #include "chrome/browser/chromeos/arc/print_spooler/arc_print_spooler_bridge.h" #include "chrome/browser/chromeos/arc/process/arc_process_service.h" #include "chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" #include "chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h" #include "chrome/browser/chromeos/arc/tts/arc_tts_service.h"
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.h b/chrome/browser/chromeos/arc/session/arc_service_launcher.h similarity index 91% rename from chrome/browser/chromeos/arc/arc_service_launcher.h rename to chrome/browser/chromeos/arc/session/arc_service_launcher.h index 02660cb..d9251e05 100644 --- a/chrome/browser/chromeos/arc/arc_service_launcher.h +++ b/chrome/browser/chromeos/arc/session/arc_service_launcher.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_SERVICE_LAUNCHER_H_ -#define CHROME_BROWSER_CHROMEOS_ARC_ARC_SERVICE_LAUNCHER_H_ +#ifndef CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SERVICE_LAUNCHER_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SERVICE_LAUNCHER_H_ #include <memory> @@ -70,4 +70,4 @@ } // namespace arc -#endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SERVICE_LAUNCHER_H_ +#endif // CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SERVICE_LAUNCHER_H_
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.cc b/chrome/browser/chromeos/arc/session/arc_session_manager.cc similarity index 99% rename from chrome/browser/chromeos/arc/arc_session_manager.cc rename to chrome/browser/chromeos/arc/session/arc_session_manager.cc index 9f9db38..2742271 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include <string> #include <utility>
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.h b/chrome/browser/chromeos/arc/session/arc_session_manager.h similarity index 98% rename from chrome/browser/chromeos/arc/arc_session_manager.h rename to chrome/browser/chromeos/arc/session/arc_session_manager.h index d002e682..5ad9eb0 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager.h +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ -#define CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ +#ifndef CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SESSION_MANAGER_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SESSION_MANAGER_H_ #include <memory> #include <ostream> @@ -396,4 +396,4 @@ } // namespace arc -#endif // CHROME_BROWSER_CHROMEOS_ARC_ARC_SESSION_MANAGER_H_ +#endif // CHROME_BROWSER_CHROMEOS_ARC_SESSION_ARC_SESSION_MANAGER_H_
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc similarity index 98% rename from chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc rename to chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc index a0800fee6..43c457b 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager_browsertest.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager_browsertest.cc
@@ -16,9 +16,9 @@ #include "base/strings/stringprintf.h" #include "base/time/time.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service_factory.h"
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc similarity index 99% rename from chrome/browser/chromeos/arc/arc_session_manager_unittest.cc rename to chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc index 2b05ed9f..12bd43a 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc
@@ -20,10 +20,10 @@ #include "base/test/scoped_feature_list.h" #include "base/values.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/optin/arc_terms_of_service_oobe_negotiator.h" +#include "chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h" #include "chrome/browser/chromeos/login/ui/fake_login_display_host.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
diff --git a/chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h b/chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h index 2dfd804..6e85601a 100644 --- a/chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h +++ b/chrome/browser/chromeos/arc/test/arc_data_removed_waiter.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" namespace base { class RunLoop;
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 573dc08..ea21add 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -40,7 +40,7 @@ #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/boot_times_recorder.h" #include "chrome/browser/chromeos/crostini/crostini_unsupported_action_notifier.h" #include "chrome/browser/chromeos/crostini/crosvm_metrics.h"
diff --git a/chrome/browser/chromeos/dbus/libvda_service_provider.cc b/chrome/browser/chromeos/dbus/libvda_service_provider.cc index ad05658..855acc7 100644 --- a/chrome/browser/chromeos/dbus/libvda_service_provider.cc +++ b/chrome/browser/chromeos/dbus/libvda_service_provider.cc
@@ -8,7 +8,7 @@ #include <utility> #include "base/bind.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.h" #include "chrome/browser/profiles/profile.h" #include "dbus/bus.h"
diff --git a/chrome/browser/chromeos/dbus/virtual_file_request_service_provider.cc b/chrome/browser/chromeos/dbus/virtual_file_request_service_provider.cc index 43f7481..137ef9f 100644 --- a/chrome/browser/chromeos/dbus/virtual_file_request_service_provider.cc +++ b/chrome/browser/chromeos/dbus/virtual_file_request_service_provider.cc
@@ -12,8 +12,8 @@ #include "base/bind.h" #include "base/files/scoped_file.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "dbus/message.h" #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index 0fc0d91..8bc59f0d 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -41,8 +41,8 @@ #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" #include "chrome/browser/chromeos/crostini/crostini_export_import.h" #include "chrome/browser/chromeos/crostini/crostini_installer.h"
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc index 9dbea84..3ac9eb4 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
@@ -5,8 +5,8 @@ #include "base/macros.h" #include "build/build_config.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
diff --git a/chrome/browser/chromeos/file_manager/volume_manager.h b/chrome/browser/chromeos/file_manager/volume_manager.h index 4587bd1..fecd3cb 100644 --- a/chrome/browser/chromeos/file_manager/volume_manager.h +++ b/chrome/browser/chromeos/file_manager/volume_manager.h
@@ -16,7 +16,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/drive/drive_integration_service.h" #include "chrome/browser/chromeos/file_manager/documents_provider_root_manager.h" #include "chrome/browser/chromeos/file_system_provider/icon_set.h"
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc index f05b659..fabb7ae 100644 --- a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc
@@ -18,7 +18,7 @@ #include "base/test/scoped_command_line.h" #include "base/test/simple_test_tick_clock.h" #include "base/values.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/lock_screen_apps/fake_lock_screen_profile_creator.h" #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" #include "chrome/browser/chromeos/note_taking_helper.h"
diff --git a/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc index 8d7943b6..ccd7410 100644 --- a/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc +++ b/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc
@@ -17,7 +17,7 @@ #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/simple_test_tick_clock.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" #include "chrome/browser/chromeos/note_taking_helper.h" #include "chrome/browser/chromeos/profiles/profile_helper.h"
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc index ab0e18f..1bfe869 100644 --- a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc +++ b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
@@ -20,7 +20,7 @@ #include "base/test/scoped_command_line.h" #include "base/test/simple_test_tick_clock.h" #include "base/time/time.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/lock_screen_apps/app_manager.h" #include "chrome/browser/chromeos/lock_screen_apps/fake_lock_screen_profile_creator.h" #include "chrome/browser/chromeos/lock_screen_apps/first_app_run_toast_manager.h"
diff --git a/chrome/browser/chromeos/login/arc_terms_of_service_browsertest.cc b/chrome/browser/chromeos/login/arc_terms_of_service_browsertest.cc index ba917309..5052c5a 100644 --- a/chrome/browser/chromeos/login/arc_terms_of_service_browsertest.cc +++ b/chrome/browser/chromeos/login/arc_terms_of_service_browsertest.cc
@@ -6,8 +6,8 @@ #include "base/command_line.h" #include "base/guid.h" #include "base/hash/sha1.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/login/login_wizard.h" #include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/screens/arc_terms_of_service_screen.h"
diff --git a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc index 81c5b5b4..bbdeb7a 100644 --- a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc +++ b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
@@ -17,8 +17,8 @@ #include "build/buildflag.h" #include "chrome/browser/chrome_browser_main.h" #include "chrome/browser/chrome_browser_main_extra_parts.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/extensions/quick_unlock_private/quick_unlock_private_api.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps_fetcher.h"
diff --git a/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc index cc75e327..aec86c5 100644 --- a/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/screens/supervision_transition_screen_browsertest.cc
@@ -8,9 +8,9 @@ #include "ash/public/cpp/login_screen_test_api.h" #include "base/run_loop.h" #include "base/timer/timer.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h"
diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager.cc b/chrome/browser/chromeos/login/session/chrome_session_manager.cc index a72a50c9..a309d33 100644 --- a/chrome/browser/chromeos/login/session/chrome_session_manager.cc +++ b/chrome/browser/chromeos/login/session/chrome_session_manager.cc
@@ -15,7 +15,7 @@ #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/boot_times_recorder.h" #include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h" #include "chrome/browser/chromeos/child_accounts/screen_time_controller_factory.h"
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index c9bfbb2..0075785 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -39,8 +39,8 @@ #include "chrome/browser/chromeos/account_manager/account_manager_migrator.h" #include "chrome/browser/chromeos/account_manager/account_manager_util.h" #include "chrome/browser/chromeos/arc/arc_migration_guide_notification.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/base/locale_util.h" #include "chrome/browser/chromeos/boot_times_recorder.h" #include "chrome/browser/chromeos/child_accounts/child_policy_observer.h"
diff --git a/chrome/browser/chromeos/note_taking_helper.h b/chrome/browser/chromeos/note_taking_helper.h index 489980f..e2f087c5 100644 --- a/chrome/browser/chromeos/note_taking_helper.h +++ b/chrome/browser/chromeos/note_taking_helper.h
@@ -15,7 +15,7 @@ #include "base/observer_list.h" #include "base/optional.h" #include "base/scoped_observer.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile_manager_observer.h" #include "components/arc/intent_helper/arc_intent_helper_observer.h" #include "components/arc/mojom/intent_helper.mojom.h"
diff --git a/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler.cc b/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler.cc index 46cad2a..84a5e6a 100644 --- a/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler.cc +++ b/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler.cc
@@ -16,8 +16,7 @@ namespace { base::WeakPtr<chromeos::BulkPrintersCalculator> GetBulkPrintersCalculator() { - return chromeos::BulkPrintersCalculatorFactory::Get()->GetForDevice( - /*create_if_not_exists=*/true); + return chromeos::BulkPrintersCalculatorFactory::Get()->GetForDevice(); } } // namespace
diff --git a/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler_unittest.cc b/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler_unittest.cc index 5e3893e..7e2ca52 100644 --- a/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler_unittest.cc +++ b/chrome/browser/chromeos/policy/external_data_handlers/device_native_printers_external_data_handler_unittest.cc
@@ -74,7 +74,7 @@ std::make_unique<DeviceNativePrintersExternalDataHandler>( &policy_service_); external_printers_ = - chromeos::BulkPrintersCalculatorFactory::Get()->GetForDevice(true); + chromeos::BulkPrintersCalculatorFactory::Get()->GetForDevice(); external_printers_->SetAccessMode( chromeos::BulkPrintersCalculator::ALL_ACCESS); }
diff --git a/chrome/browser/chromeos/policy/external_data_handlers/native_printers_external_data_handler.cc b/chrome/browser/chromeos/policy/external_data_handlers/native_printers_external_data_handler.cc index c6a1734..db5ed4c 100644 --- a/chrome/browser/chromeos/policy/external_data_handlers/native_printers_external_data_handler.cc +++ b/chrome/browser/chromeos/policy/external_data_handlers/native_printers_external_data_handler.cc
@@ -19,8 +19,7 @@ base::WeakPtr<chromeos::BulkPrintersCalculator> GetBulkPrintersCalculator( const std::string& user_id) { return chromeos::BulkPrintersCalculatorFactory::Get()->GetForAccountId( - CloudExternalDataPolicyHandler::GetAccountId(user_id), - /*create_if_not_exists=*/true); + CloudExternalDataPolicyHandler::GetAccountId(user_id)); } } // namespace
diff --git a/chrome/browser/chromeos/policy/lock_to_single_user_manager.h b/chrome/browser/chromeos/policy/lock_to_single_user_manager.h index cb41811..e8ee289 100644 --- a/chrome/browser/chromeos/policy/lock_to_single_user_manager.h +++ b/chrome/browser/chromeos/policy/lock_to_single_user_manager.h
@@ -9,7 +9,7 @@ #include "base/memory/weak_ptr.h" #include "base/optional.h" #include "base/scoped_observer.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "components/user_manager/user_manager.h"
diff --git a/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc b/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc index 9ce6bf7..3ea9100 100644 --- a/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc +++ b/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc
@@ -8,7 +8,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h"
diff --git a/chrome/browser/chromeos/policy/unaffiliated_arc_allowed_browsertest.cc b/chrome/browser/chromeos/policy/unaffiliated_arc_allowed_browsertest.cc index d34d10c0..501c3fe 100644 --- a/chrome/browser/chromeos/policy/unaffiliated_arc_allowed_browsertest.cc +++ b/chrome/browser/chromeos/policy/unaffiliated_arc_allowed_browsertest.cc
@@ -9,8 +9,8 @@ #include "base/macros.h" #include "base/run_loop.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/policy/affiliation_test_helper.h" #include "chrome/browser/chromeos/policy/device_policy_builder.h"
diff --git a/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.cc b/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.cc index d0d2283..fd0fbba 100644 --- a/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.cc +++ b/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.cc
@@ -20,27 +20,23 @@ } base::WeakPtr<BulkPrintersCalculator> -BulkPrintersCalculatorFactory::GetForAccountId(const AccountId& account_id, - bool create_if_not_exists) { +BulkPrintersCalculatorFactory::GetForAccountId(const AccountId& account_id) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto it = printers_by_user_.find(account_id); if (it != printers_by_user_.end()) return it->second->AsWeakPtr(); - if (!create_if_not_exists) - return nullptr; printers_by_user_.emplace(account_id, BulkPrintersCalculator::Create()); return printers_by_user_[account_id]->AsWeakPtr(); } base::WeakPtr<BulkPrintersCalculator> -BulkPrintersCalculatorFactory::GetForProfile(Profile* profile, - bool create_if_not_exists) { +BulkPrintersCalculatorFactory::GetForProfile(Profile* profile) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); const user_manager::User* user = ProfileHelper::Get()->GetUserByProfile(profile); if (!user) return nullptr; - return GetForAccountId(user->GetAccountId(), create_if_not_exists); + return GetForAccountId(user->GetAccountId()); } void BulkPrintersCalculatorFactory::RemoveForUserId( @@ -50,12 +46,10 @@ } base::WeakPtr<BulkPrintersCalculator> -BulkPrintersCalculatorFactory::GetForDevice(bool create_if_not_exists) { +BulkPrintersCalculatorFactory::GetForDevice() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (device_printers_) return device_printers_->AsWeakPtr(); - if (!create_if_not_exists) - return nullptr; device_printers_ = BulkPrintersCalculator::Create(); return device_printers_->AsWeakPtr(); }
diff --git a/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.h b/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.h index 00af1c1..a30cc0a 100644 --- a/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.h +++ b/chrome/browser/chromeos/printing/bulk_printers_calculator_factory.h
@@ -30,32 +30,24 @@ // Returns a WeakPtr to the BulkPrintersCalculator registered for // |account_id|. - // If requested BulkPrintersCalculator does not exist, the output depends on - // the given parameter |create_if_not_exists|. If it is true, the object is - // created and registered, otherwise nullptr is returned. - // The returned object remains valid until RemoveForUserId or Shutdown is - // called. + // If requested BulkPrintersCalculator does not exist, the object is + // created and registered. The returned object remains valid until + // RemoveForUserId or Shutdown is called. base::WeakPtr<BulkPrintersCalculator> GetForAccountId( - const AccountId& account_id, - bool create_if_not_exists); + const AccountId& account_id); // Returns a WeakPtr to the BulkPrintersCalculator registered for |profile| // which could be nullptr if |profile| does not map to a valid AccountId. - // If requested BulkPrintersCalculator does not exist, the output depends on - // the given parameter |create_if_not_exists|. If it is true, the object is - // created and registered, otherwise nullptr is returned. - // The returned object remains valid until RemoveForUserId or Shutdown is - // called. - base::WeakPtr<BulkPrintersCalculator> GetForProfile( - Profile* profile, - bool create_if_not_exists); + // If requested BulkPrintersCalculator does not exist, the object is + // created and registered. The returned object remains valid until + // RemoveForUserId or Shutdown is called. + base::WeakPtr<BulkPrintersCalculator> GetForProfile(Profile* profile); // Returns a WeakPtr to the BulkPrintersCalculator registered for the device. - // If requested BulkPrintersCalculator does not exist, the output depends on - // the given parameter |create_if_not_exists|. If it is true, the object is - // created and registered, otherwise nullptr is returned. - // The returned object remains valid until Shutdown is called. - base::WeakPtr<BulkPrintersCalculator> GetForDevice(bool create_if_not_exists); + // If requested BulkPrintersCalculator does not exist, the object is + // created and registered. The returned object remains valid until Shutdown is + // called. + base::WeakPtr<BulkPrintersCalculator> GetForDevice(); // Deletes the BulkPrintersCalculator registered for |account_id|. void RemoveForUserId(const AccountId& account_id);
diff --git a/chrome/browser/chromeos/printing/calculators_policies_binder.cc b/chrome/browser/chromeos/printing/calculators_policies_binder.cc index 3577ed92..8a5f474 100644 --- a/chrome/browser/chromeos/printing/calculators_policies_binder.cc +++ b/chrome/browser/chromeos/printing/calculators_policies_binder.cc
@@ -60,8 +60,7 @@ : settings_(settings), profile_(profile) { pref_change_registrar_.Init(profile->GetPrefs()); // Bind device policies to corresponding instance of BulkPrintersCalculator. - device_printers_ = BulkPrintersCalculatorFactory::Get()->GetForDevice( - /*create_if_not_exists=*/false); + device_printers_ = BulkPrintersCalculatorFactory::Get()->GetForDevice(); if (device_printers_ && ++(BindingsCount()[device_printers_.get()]) == 1) { BindSettings(kDeviceNativePrintersAccessMode, &CalculatorsPoliciesBinderImpl::UpdateDeviceAccessMode); @@ -71,9 +70,8 @@ &CalculatorsPoliciesBinderImpl::UpdateDeviceWhitelist); } // Bind user policies to corresponding instance of BulkPrintersCalculator. - user_printers_ = BulkPrintersCalculatorFactory::Get()->GetForProfile( - profile, - /*create_if_not_exists=*/false); + user_printers_ = + BulkPrintersCalculatorFactory::Get()->GetForProfile(profile); if (user_printers_ && ++(BindingsCount()[user_printers_.get()]) == 1) { BindPref(prefs::kRecommendedNativePrintersAccessMode, &CalculatorsPoliciesBinderImpl::UpdateUserAccessMode);
diff --git a/chrome/browser/chromeos/printing/enterprise_printers_provider.cc b/chrome/browser/chromeos/printing/enterprise_printers_provider.cc index 9610922..d96fb78 100644 --- a/chrome/browser/chromeos/printing/enterprise_printers_provider.cc +++ b/chrome/browser/chromeos/printing/enterprise_printers_provider.cc
@@ -49,16 +49,14 @@ // Binds instances of BulkPrintersCalculator to policies. policies_binder_ = CalculatorsPoliciesBinder::Create(settings, profile); // Get instance of BulkPrintersCalculator for device policies. - device_printers_ = BulkPrintersCalculatorFactory::Get()->GetForDevice( - /*create_if_not_exists=*/false); + device_printers_ = BulkPrintersCalculatorFactory::Get()->GetForDevice(); if (device_printers_) { device_printers_->AddObserver(this); RecalculateCompleteFlagForDevicePrinters(); } // Get instance of BulkPrintersCalculator for user policies. - user_printers_ = BulkPrintersCalculatorFactory::Get()->GetForProfile( - profile, - /*create_if_not_exists=*/false); + user_printers_ = + BulkPrintersCalculatorFactory::Get()->GetForProfile(profile); if (user_printers_) { user_printers_->AddObserver(this); RecalculateCompleteFlagForUserPrinters();
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc index bafb52e..fdbd0c3 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
@@ -101,7 +101,7 @@ TestingBrowserProcess::GetGlobal()->SetSafeBrowsingService( safe_browsing_service); g_browser_process->safe_browsing_service()->Initialize(); - safe_browsing_service->AddPrefService(profile()->GetPrefs()); + safe_browsing_service->OnProfileAdded(profile()); } void SafeBrowsingPrivateApiUnitTest::TearDown() {
diff --git a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc index 34f303f..9a4b177 100644 --- a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc +++ b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
@@ -9,8 +9,8 @@ #include "ash/public/cpp/window_properties.h" #include "base/metrics/histogram_macros.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" #include "chrome/browser/ui/ash/chrome_screenshot_grabber.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index b4a42dd..ba1e866 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -944,6 +944,11 @@ "expiry_milestone": 76 }, { + "name": "enable-aura-tooltips-on-windows", + "owners": [ "cliffsmo" ], + "expiry_milestone": 78 + }, + { "name": "enable-autofill-account-wallet-storage", "owners": [ "treib", "jsaul@google.com", "butter-team@google.com" ], "expiry_milestone": 81 @@ -3449,6 +3454,11 @@ "expiry_milestone": 82 }, { + "name": "webxr-ar-dom-overlay", + "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@chromium.org" ], + "expiry_milestone": 81 + }, + { "name": "webxr-ar-module", "owners": [ "//third_party/blink/renderer/modules/xr/OWNERS", "xr-dev@chromium.org" ], "expiry_milestone": 82
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 64bf5c2..bfdf7fd 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2266,6 +2266,10 @@ "Enables access to Augmented Reality features defined in the WebXR AR " "Module"; +const char kWebXrArDOMOverlayName[] = "WebXR AR DOM Overlay"; +const char kWebXrArDOMOverlayDescription[] = + "Enables experimental use of a DOM overlay in WebXR AR sessions"; + const char kWebXrAnchorsName[] = "WebXR Anchors"; const char kWebXrAnchorsDescription[] = "Enables access to anchors via WebXR API."; @@ -3010,6 +3014,11 @@ const char kD3D11VideoDecoderDescription[] = "Enables D3D11VideoDecoder for hardware accelerated video decoding."; +const char kEnableAuraTooltipsOnWindowsName[] = + "Enable aura tooltips on Windows"; +const char kEnableAuraTooltipsOnWindowsDescription[] = + "Enables aura tooltips instead of the native comctl32 tooltips on Windows."; + const char kEnableGpuAppcontainerName[] = "Enable GPU AppContainer Lockdown."; const char kEnableGpuAppcontainerDescription[] = "Enables the use of an AppContainer for the GPU sandboxed processes to "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 39689454..6079115 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1333,6 +1333,9 @@ extern const char kWebXrArModuleName[]; extern const char kWebXrArModuleDescription[]; +extern const char kWebXrArDOMOverlayName[]; +extern const char kWebXrArDOMOverlayDescription[]; + extern const char kWebXrHitTestName[]; extern const char kWebXrHitTestDescription[]; @@ -1765,6 +1768,9 @@ extern const char kD3D11VideoDecoderName[]; extern const char kD3D11VideoDecoderDescription[]; +extern const char kEnableAuraTooltipsOnWindowsName[]; +extern const char kEnableAuraTooltipsOnWindowsDescription[]; + extern const char kEnableGpuAppcontainerName[]; extern const char kEnableGpuAppcontainerDescription[];
diff --git a/chrome/browser/installable/installable_ambient_badge_infobar_delegate.cc b/chrome/browser/installable/installable_ambient_badge_infobar_delegate.cc index d973b28e..0ec1864 100644 --- a/chrome/browser/installable/installable_ambient_badge_infobar_delegate.cc +++ b/chrome/browser/installable/installable_ambient_badge_infobar_delegate.cc
@@ -23,12 +23,14 @@ base::WeakPtr<Client> weak_client, const base::string16& app_name, const SkBitmap& primary_icon, + const bool is_primary_icon_maskable, const GURL& start_url) { InfoBarService::FromWebContents(web_contents) ->AddInfoBar(std::make_unique<InstallableAmbientBadgeInfoBar>( std::unique_ptr<InstallableAmbientBadgeInfoBarDelegate>( new InstallableAmbientBadgeInfoBarDelegate( - weak_client, app_name, primary_icon, start_url)))); + weak_client, app_name, primary_icon, is_primary_icon_maskable, + start_url)))); } void InstallableAmbientBadgeInfoBarDelegate::AddToHomescreen() { @@ -58,15 +60,21 @@ return primary_icon_; } +bool InstallableAmbientBadgeInfoBarDelegate::GetIsPrimaryIconMaskable() const { + return is_primary_icon_maskable_; +} + InstallableAmbientBadgeInfoBarDelegate::InstallableAmbientBadgeInfoBarDelegate( base::WeakPtr<Client> weak_client, const base::string16& app_name, const SkBitmap& primary_icon, + const bool is_primary_icon_maskable, const GURL& start_url) : infobars::InfoBarDelegate(), weak_client_(weak_client), app_name_(app_name), primary_icon_(primary_icon), + is_primary_icon_maskable_(is_primary_icon_maskable), start_url_(start_url) {} infobars::InfoBarDelegate::InfoBarIdentifier
diff --git a/chrome/browser/installable/installable_ambient_badge_infobar_delegate.h b/chrome/browser/installable/installable_ambient_badge_infobar_delegate.h index c78da41..9263cd1 100644 --- a/chrome/browser/installable/installable_ambient_badge_infobar_delegate.h +++ b/chrome/browser/installable/installable_ambient_badge_infobar_delegate.h
@@ -39,17 +39,21 @@ base::WeakPtr<Client> weak_client, const base::string16& app_name, const SkBitmap& primary_icon, + const bool is_primary_icon_maskable, + const GURL& start_url); void AddToHomescreen(); const base::string16 GetMessageText() const; const SkBitmap& GetPrimaryIcon() const; + bool GetIsPrimaryIconMaskable() const; const GURL& GetUrl() const { return start_url_; } private: InstallableAmbientBadgeInfoBarDelegate(base::WeakPtr<Client> weak_client, const base::string16& app_name, const SkBitmap& primary_icon, + const bool is_primary_icon_maskable, const GURL& start_url); // InfoBarDelegate overrides: @@ -59,6 +63,7 @@ base::WeakPtr<Client> weak_client_; const base::string16 app_name_; const SkBitmap primary_icon_; + const bool is_primary_icon_maskable_; const GURL& start_url_; DISALLOW_COPY_AND_ASSIGN(InstallableAmbientBadgeInfoBarDelegate);
diff --git a/chrome/browser/lookalikes/safety_tips/reputation_web_contents_observer.cc b/chrome/browser/lookalikes/safety_tips/reputation_web_contents_observer.cc index 2ef9247..24c87d33 100644 --- a/chrome/browser/lookalikes/safety_tips/reputation_web_contents_observer.cc +++ b/chrome/browser/lookalikes/safety_tips/reputation_web_contents_observer.cc
@@ -44,6 +44,9 @@ action_suffix = "DismissWithIgnore"; warning_dismissed = true; break; + case safety_tips::SafetyTipInteraction::kLearnMore: + action_suffix = "LearnMore"; + break; } if (warning_dismissed) { base::UmaHistogramCustomTimes(
diff --git a/chrome/browser/lookalikes/safety_tips/safety_tip_infobar_delegate.cc b/chrome/browser/lookalikes/safety_tips/safety_tip_infobar_delegate.cc index 28147b3..89fb95d 100644 --- a/chrome/browser/lookalikes/safety_tips/safety_tip_infobar_delegate.cc +++ b/chrome/browser/lookalikes/safety_tips/safety_tip_infobar_delegate.cc
@@ -119,6 +119,5 @@ } base::string16 SafetyTipInfoBarDelegate::GetDescriptionText() const { - return l10n_util::GetStringUTF16( - GetSafetyTipDescriptionId(safety_tip_status_)); + return GetSafetyTipDescription(safety_tip_status_, suggested_url_); }
diff --git a/chrome/browser/lookalikes/safety_tips/safety_tip_ui.h b/chrome/browser/lookalikes/safety_tips/safety_tip_ui.h index baa3260..f34a9518 100644 --- a/chrome/browser/lookalikes/safety_tips/safety_tip_ui.h +++ b/chrome/browser/lookalikes/safety_tips/safety_tip_ui.h
@@ -19,7 +19,7 @@ // Represents the different user interactions with a Safety Tip dialog. // // These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. +// numeric values should never be reused. Keep in sync with SafetyTipStatus. enum class SafetyTipInteraction { // The user dismissed the safety tip. Every time the user dismisses the // dialog, a histogram will be recorded once with this value, and again with a @@ -33,7 +33,9 @@ kDismissWithEsc = 3, kDismissWithClose = 4, kDismissWithIgnore = 5, - kMaxValue = kDismissWithIgnore, + // The user clicked the 'learn more' button. + kLearnMore = 6, + kMaxValue = kLearnMore, }; // Shows Safety Tip UI using the specified information if it is not already
diff --git a/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.cc b/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.cc index ea1b25f..238f63e 100644 --- a/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.cc +++ b/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.cc
@@ -7,6 +7,7 @@ #include "base/metrics/histogram_functions.h" #include "build/build_config.h" #include "chrome/browser/ssl/security_state_tab_helper.h" +#include "chrome/common/url_constants.h" #include "components/security_interstitials/core/common_string_util.h" #include "components/security_state/core/security_state.h" #include "components/strings/grit/components_strings.h" @@ -40,6 +41,15 @@ web_contents->OpenURL(params); } +void OpenHelpCenter(content::WebContents* web_contents) { + RecordSafetyTipInteractionHistogram(web_contents, + SafetyTipInteraction::kLearnMore); + web_contents->OpenURL(content::OpenURLParams( + GURL(chrome::kSafetyTipHelpCenterURL), content::Referrer(), + WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, + false /*is_renderer_initiated*/)); +} + base::string16 GetSafetyTipTitle( security_state::SafetyTipStatus safety_tip_status, const GURL& url) { @@ -48,10 +58,14 @@ return l10n_util::GetStringUTF16( IDS_PAGE_INFO_SAFETY_TIP_BAD_REPUTATION_TITLE); case security_state::SafetyTipStatus::kLookalike: +#if defined(OS_ANDROID) + return l10n_util::GetStringUTF16(IDS_SAFETY_TIP_ANDROID_LOOKALIKE_TITLE); +#else return l10n_util::GetStringFUTF16( IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_TITLE, security_interstitials::common_string_util::GetFormattedHostName( url)); +#endif case security_state::SafetyTipStatus::kUnknown: case security_state::SafetyTipStatus::kNone: NOTREACHED(); @@ -61,33 +75,36 @@ return base::string16(); } -int GetSafetyTipDescriptionId(security_state::SafetyTipStatus warning_type) { +base::string16 GetSafetyTipDescription( + security_state::SafetyTipStatus warning_type, + const GURL& url) { switch (warning_type) { case security_state::SafetyTipStatus::kBadReputation: - return IDS_PAGE_INFO_SAFETY_TIP_BAD_REPUTATION_DESCRIPTION; + return l10n_util::GetStringUTF16( + IDS_PAGE_INFO_SAFETY_TIP_BAD_REPUTATION_DESCRIPTION); case security_state::SafetyTipStatus::kLookalike: - return IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION; + return l10n_util::GetStringFUTF16( + IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION, + security_interstitials::common_string_util::GetFormattedHostName( + url)); case security_state::SafetyTipStatus::kNone: case security_state::SafetyTipStatus::kUnknown: NOTREACHED(); - return 0; } NOTREACHED(); - return 0; + return base::string16(); } int GetSafetyTipLeaveButtonId(security_state::SafetyTipStatus warning_type) { switch (warning_type) { #if defined(OS_ANDROID) case security_state::SafetyTipStatus::kBadReputation: - return IDS_SAFETY_TIP_ANDROID_LEAVE_BUTTON; case security_state::SafetyTipStatus::kLookalike: - return IDS_SAFETY_TIP_ANDROID_GO_TO_SITE_BUTTON; + return IDS_SAFETY_TIP_ANDROID_LEAVE_BUTTON; #else case security_state::SafetyTipStatus::kBadReputation: - return IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON; case security_state::SafetyTipStatus::kLookalike: - return IDS_PAGE_INFO_SAFETY_TIP_GO_TO_SITE_BUTTON; + return IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON; #endif case security_state::SafetyTipStatus::kUnknown: case security_state::SafetyTipStatus::kNone:
diff --git a/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.h b/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.h index 7485d2d..483818e 100644 --- a/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.h +++ b/chrome/browser/lookalikes/safety_tips/safety_tip_ui_helper.h
@@ -24,16 +24,23 @@ void RecordSafetyTipInteractionHistogram(content::WebContents* web_contents, SafetyTipInteraction interaction); -// Invoke action when 'leave site' button is clicked, and records a histogram. +// Invokes action when 'leave site' button is clicked, and records a histogram. // Navigates to a safe URL, replacing the current page in the process. void LeaveSite(content::WebContents* web_contents, const GURL& safe_url); +// Invoke action when 'Learn more' button is clicked, and records a histogram. +// Navigates to the help center URL. +void OpenHelpCenter(content::WebContents* web_contents); + // Get the titles, descriptions, and button strings or IDs needed to describe // the applicable warning type. Handles both Android and desktop warnings. -// |url| is used in formatting some strings. +// |url| is the suggested URL to navigate to, and is used in formatting some +// strings. base::string16 GetSafetyTipTitle(security_state::SafetyTipStatus warning_type, const GURL& url); -int GetSafetyTipDescriptionId(security_state::SafetyTipStatus warning_type); +base::string16 GetSafetyTipDescription( + security_state::SafetyTipStatus warning_type, + const GURL& url); int GetSafetyTipLeaveButtonId(security_state::SafetyTipStatus warning_type); } // namespace safety_tips
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index f531072..d0a2d47 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc
@@ -226,7 +226,7 @@ #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/magnification_manager.h" #include "chrome/browser/chromeos/accessibility/magnifier_type.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/drive/drive_integration_service.h" #include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/note_taking_helper.h"
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index fd5b9c66..09949f2d 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -238,8 +238,8 @@ #include "ash/public/cpp/ash_prefs.h" #include "chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_manager.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/child_accounts/parent_access_code/parent_access_service.h" #include "chrome/browser/chromeos/child_accounts/screen_time_controller.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h"
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index ebadc1b..ecdc9b0 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -171,7 +171,7 @@ #include "chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.h" #include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h" #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.h" #include "chrome/browser/chromeos/cryptauth/gcm_device_info_provider_impl.h" #include "chrome/browser/chromeos/device_sync/device_sync_client_factory.h"
diff --git a/chrome/browser/profiles/renderer_updater.cc b/chrome/browser/profiles/renderer_updater.cc index e0e76c1a..07e6f8d 100644 --- a/chrome/browser/profiles/renderer_updater.cc +++ b/chrome/browser/profiles/renderer_updater.cc
@@ -29,7 +29,8 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) -// By default, JavaScript, images and autoplay are enabled in guest content. +// By default, JavaScript, images and autoplay are enabled, and blockable mixed +// content is blocked in guest content void GetGuestViewDefaultContentSettingRules( bool incognito, RendererContentSettingRules* rules) { @@ -54,6 +55,11 @@ base::Value::FromUniquePtrValue( content_settings::ContentSettingToValue(CONTENT_SETTING_BLOCK)), std::string(), incognito)); + rules->mixed_content_rules.push_back(ContentSettingPatternSource( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + base::Value::FromUniquePtrValue( + content_settings::ContentSettingToValue(CONTENT_SETTING_BLOCK)), + std::string(), incognito)); } #endif // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs index b06bb83d..478dc922 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
@@ -2088,3 +2088,18 @@ mockFeedback.replay(); }); }); + +TEST_F('ChromeVoxBackgroundTest', 'TableWithAriaRowCol', function() { + var mockFeedback = this.createMockFeedback(); + this.runWithLoadedTree(function() {/*! + <div role="table"> + <div role="row" aria-rowindex=3> + <div role="cell">test</div> + </div> + </div> + */}, function(root) { + mockFeedback.call(doCmd('fullyDescribe')) + .expectSpeech('test', 'row 3 column 1', 'Table , 1 by 1') + .replay(); + }); +});
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js index 81acba5..29075cf 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
@@ -1492,10 +1492,10 @@ } else { ruleStr.write(token); this.format_( - node, ` @cell_summary($if($ariaCellRowIndex, $ariaCellRowIndex, - $tableCellRowIndex), - $if($ariaCellColumnIndex, $ariaCellColumnIndex, - $tableCellColumnIndex))`, + node, `@cell_summary($if($tableCellAriaRowIndex, + $tableCellAriaRowIndex, $tableCellRowIndex), + $if($tableCellAriaColumnIndex, $tableCellAriaColumnIndex, + $tableCellColumnIndex))`, buff, ruleStr); } } else if (token == 'node') {
diff --git a/chrome/browser/resources/local_ntp/customize.js b/chrome/browser/resources/local_ntp/customize.js index 5ac3fa5..c691b823 100644 --- a/chrome/browser/resources/local_ntp/customize.js +++ b/chrome/browser/resources/local_ntp/customize.js
@@ -930,7 +930,7 @@ if (tile.id === customize.IDS.BACKGROUNDS_DEFAULT_ICON) { preview.dataset.hasImage = false; preview.style.backgroundImage = ''; - preview.style.backgroundColor = document.body.style.backgroundColor; + preview.style.backgroundColor = 'transparent'; } else if (tile.id === customize.IDS.BACKGROUNDS_UPLOAD_ICON) { // No previews for uploaded images. return; @@ -940,6 +940,9 @@ const re = /w\d+\-h\d+/; preview.style.backgroundImage = tile.style.backgroundImage.replace(re, 'w1280-h720'); + preview.dataset.attributionLine1 = tile.dataset.attributionLine1; + preview.dataset.attributionLine2 = tile.dataset.attributionLine2; + preview.dataset.attributionActionUrl = tile.dataset.attributionActionUrl; } background.style.opacity = 0; preview.style.opacity = 1;
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css index 40de873..3aa33a8 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.css +++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -1868,6 +1868,7 @@ border: 1px solid rgb(var(--GG200-rgb)); border-radius: 4px; display: none; + font-size: 13px; height: 64px; margin-bottom: 24px; max-width: 544px; @@ -1882,7 +1883,6 @@ #colors-theme.visible { display: flex; - font-size: small; } #colors-theme > * {
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js index 2c3183c..22bda43 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.js +++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -604,6 +604,12 @@ // backgroundImage is in the form: url("actual url"). Remove everything // except the actual url. info.imageUrl = preview.style.backgroundImage.slice(5, -2); + + if (preview.dataset.hasImage === 'true') { + info.attribution1 = preview.dataset.attributionLine1; + info.attribution2 = preview.dataset.attributionLine2; + info.attributionActionUrl = preview.dataset.attributionActionUrl; + } } return info; }
diff --git a/chrome/browser/resources/management/BUILD.gn b/chrome/browser/resources/management/BUILD.gn index 82dfd3d..4e27e41 100644 --- a/chrome/browser/resources/management/BUILD.gn +++ b/chrome/browser/resources/management/BUILD.gn
@@ -3,8 +3,10 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") +import("//tools/polymer/polymer.gni") js_type_check("closure_compile") { + is_polymer3 = true deps = [ ":management_browser_proxy", ":management_ui", @@ -13,15 +15,34 @@ js_library("management_ui") { deps = [ - "//ui/webui/resources/js:cr", - "//ui/webui/resources/js:i18n_behavior", - "//ui/webui/resources/js:load_time_data", - "//ui/webui/resources/js:web_ui_listener_behavior", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/js:i18n_behavior.m", + "//ui/webui/resources/js:load_time_data.m", + "//ui/webui/resources/js:web_ui_listener_behavior.m", ] } js_library("management_browser_proxy") { deps = [ - "//ui/webui/resources/js:cr", + "//ui/webui/resources/js:cr.m", + ] +} + +polymer_modulizer("management_ui") { + js_file = "management_ui.js" + html_file = "management_ui.html" + html_type = "v3-ready" +} + +polymer_modulizer("icons") { + js_file = "icons.js" + html_file = "icons.html" + html_type = "v3-ready" +} + +group("polymer3_elements") { + deps = [ + ":icons_module", + ":management_ui_module", ] }
diff --git a/chrome/browser/resources/management/icons.html b/chrome/browser/resources/management/icons.html index 2311bf2..e6a0757 100644 --- a/chrome/browser/resources/management/icons.html +++ b/chrome/browser/resources/management/icons.html
@@ -1,9 +1,4 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html"> - <!-- Set of the management specific icons --> - <iron-iconset-svg name="management" size="24"> <svg> <defs>
diff --git a/chrome/browser/resources/management/icons.js b/chrome/browser/resources/management/icons.js new file mode 100644 index 0000000..02ab37aa --- /dev/null +++ b/chrome/browser/resources/management/icons.js
@@ -0,0 +1,10 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; + +import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +const template = html`{__html_template__}`; +document.head.appendChild(template.content);
diff --git a/chrome/browser/resources/management/management.html b/chrome/browser/resources/management/management.html index 8b4f155..aea7f12b 100644 --- a/chrome/browser/resources/management/management.html +++ b/chrome/browser/resources/management/management.html
@@ -7,7 +7,6 @@ <link rel="stylesheet" href="chrome://resources/css/md_colors.css"> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> - <link rel="import" href="chrome://resources/html/cr.html"> <style> html { background: var(--md-background-color); @@ -30,8 +29,7 @@ } </style> - <link rel="import" href="management_ui.html"> - <script src="strings.js"></script> + <script type="module" src="management_ui.js"></script> </head> <body> <management-ui></management-ui>
diff --git a/chrome/browser/resources/management/management_browser_proxy.html b/chrome/browser/resources/management/management_browser_proxy.html deleted file mode 100644 index abaff42..0000000 --- a/chrome/browser/resources/management/management_browser_proxy.html +++ /dev/null
@@ -1,2 +0,0 @@ -<link rel="import" href="chrome://resources/html/cr.html"> -<script src="management_browser_proxy.js"></script>
diff --git a/chrome/browser/resources/management/management_browser_proxy.js b/chrome/browser/resources/management/management_browser_proxy.js index a86bbaa7..9c56140 100644 --- a/chrome/browser/resources/management/management_browser_proxy.js +++ b/chrome/browser/resources/management/management_browser_proxy.js
@@ -2,166 +2,156 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -cr.define('management', function() { - /** - * @typedef {{ - * name: string, - * permissions: !Array<string> - * }} - */ - let Extension; +import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js'; - /** @enum {string} */ - const ReportingType = { - SECURITY: 'security', - DEVICE: 'device', - USER: 'user', - USER_ACTIVITY: 'user-activity', - EXTENSIONS: 'extensions' - }; +/** + * @typedef {{ + * name: string, + * permissions: !Array<string> + * }} + */ +export let Extension; - /** - * @typedef {{ - * messageId: string, - * reportingType: !management.ReportingType, - * }} - */ - let BrowserReportingResponse; +/** @enum {string} */ +export const ReportingType = { + SECURITY: 'security', + DEVICE: 'device', + USER: 'user', + USER_ACTIVITY: 'user-activity', + EXTENSIONS: 'extensions' +}; - /** - * @typedef {{ - * browserManagementNotice: string, - * extensionReportingTitle: string, - * pageSubtitle: string, - * managed: boolean, - * overview: string, - * customerLogo: string, - * threatProtectionDescription: string - * }} - */ - let ManagedDataResponse; +/** + * @typedef {{ + * messageId: string, + * reportingType: !ReportingType, + * }} + */ +export let BrowserReportingResponse; - /** - * @typedef {{ - * title: string, - * permission: string - * }} - */ - let ThreatProtectionPermission; +/** + * @typedef {{ + * browserManagementNotice: string, + * extensionReportingTitle: string, + * pageSubtitle: string, + * managed: boolean, + * overview: string, + * customerLogo: string, + * threatProtectionDescription: string + * }} + */ +let ManagedDataResponse; - /** - * @typedef {{ - * info: !Array<!ThreatProtectionPermission>, - * description: string - * }} - */ - let ThreatProtectionInfo; +/** + * @typedef {{ + * title: string, + * permission: string + * }} + */ +let ThreatProtectionPermission; + +/** + * @typedef {{ + * info: !Array<!ThreatProtectionPermission>, + * description: string + * }} + */ +export let ThreatProtectionInfo; + +// <if expr="chromeos"> +/** + * @enum {string} Look at ToJSDeviceReportingType usage in + * management_ui_handler.cc for more details. + */ +export const DeviceReportingType = { + SUPERVISED_USER: 'supervised user', + DEVICE_ACTIVITY: 'device activity', + STATISTIC: 'device statistics', + DEVICE: 'device', + LOGS: 'logs', + PRINT: 'print', + CROSTINI: 'crostini' +}; + + +/** + * @typedef {{ + * messageId: string, + * reportingType: !DeviceReportingType, + * }} + */ +export let DeviceReportingResponse; +// </if> + +/** @interface */ +export class ManagementBrowserProxy { + /** @return {!Promise<!Array<!Extension>>} */ + getExtensions() {} // <if expr="chromeos"> /** - * @enum {string} Look at ToJSDeviceReportingType usage in - * management_ui_handler.cc for more details. + * @return {!Promise<boolean>} Boolean describing trust root configured + * or not. */ - const DeviceReportingType = { - SUPERVISED_USER: 'supervised user', - DEVICE_ACTIVITY: 'device activity', - STATISTIC: 'device statistics', - DEVICE: 'device', - LOGS: 'logs', - PRINT: 'print', - CROSTINI: 'crostini' - }; - + getLocalTrustRootsInfo() {} /** - * @typedef {{ - * messageId: string, - * reportingType: !management.DeviceReportingType, - * }} + * @return {!Promise<!Array<DeviceReportingResponse>>} List of + * items to display in device reporting section. */ - let DeviceReportingResponse; + getDeviceReportingInfo() {} // </if> - /** @interface */ - class ManagementBrowserProxy { - /** @return {!Promise<!Array<!management.Extension>>} */ - getExtensions() {} + /** @return {!Promise<!ManagedDataResponse>} */ + getContextualManagedData() {} - // <if expr="chromeos"> - /** - * @return {!Promise<boolean>} Boolean describing trust root configured - * or not. - */ - getLocalTrustRootsInfo() {} + /** @return {!Promise<!ThreatProtectionInfo>} */ + getThreatProtectionInfo() {} - /** - * @return {!Promise<!Array<management.DeviceReportingResponse>>} List of - * items to display in device reporting section. - */ - getDeviceReportingInfo() {} - // </if> + /** + * @return {!Promise<!Array<!BrowserReportingResponse>>} The list + * of browser reporting info messages. + */ + initBrowserReportingInfo() {} +} - /** @return {!Promise<!management.ManagedDataResponse>} */ - getContextualManagedData() {} - - /** @return {!Promise<!management.ThreatProtectionInfo>} */ - getThreatProtectionInfo() {} - - /** - * @return {!Promise<!Array<!management.BrowserReportingResponse>>} The list - * of browser reporting info messages. - */ - initBrowserReportingInfo() {} +/** @implements {ManagementBrowserProxy} */ +export class ManagementBrowserProxyImpl { + /** @override */ + getExtensions() { + return sendWithPromise('getExtensions'); } - /** @implements {management.ManagementBrowserProxy} */ - class ManagementBrowserProxyImpl { - /** @override */ - getExtensions() { - return cr.sendWithPromise('getExtensions'); - } - - // <if expr="chromeos"> - /** @override */ - getLocalTrustRootsInfo() { - return cr.sendWithPromise('getLocalTrustRootsInfo'); - } - - /** @override */ - getDeviceReportingInfo() { - return cr.sendWithPromise('getDeviceReportingInfo'); - } - // </if> - - /** @override */ - getContextualManagedData() { - return cr.sendWithPromise('getContextualManagedData'); - } - - /** @override */ - getThreatProtectionInfo() { - return cr.sendWithPromise('getThreatProtectionInfo'); - } - - /** @override */ - initBrowserReportingInfo() { - return cr.sendWithPromise('initBrowserReportingInfo'); - } + // <if expr="chromeos"> + /** @override */ + getLocalTrustRootsInfo() { + return sendWithPromise('getLocalTrustRootsInfo'); } - cr.addSingletonGetter(ManagementBrowserProxyImpl); + /** @override */ + getDeviceReportingInfo() { + return sendWithPromise('getDeviceReportingInfo'); + } + // </if> - return { - BrowserReportingResponse: BrowserReportingResponse, - // <if expr="chromeos"> - DeviceReportingResponse: DeviceReportingResponse, - DeviceReportingType: DeviceReportingType, - // </if> - Extension: Extension, - ManagedDataResponse: ManagedDataResponse, - ManagementBrowserProxyImpl: ManagementBrowserProxyImpl, - ManagementBrowserProxy: ManagementBrowserProxy, - ReportingType: ReportingType, - ThreatProtectionInfo: ThreatProtectionInfo, - }; -}); + /** @override */ + getContextualManagedData() { + return sendWithPromise('getContextualManagedData'); + } + + /** @override */ + getThreatProtectionInfo() { + return sendWithPromise('getThreatProtectionInfo'); + } + + /** @override */ + initBrowserReportingInfo() { + return sendWithPromise('initBrowserReportingInfo'); + } +} + +addSingletonGetter(ManagementBrowserProxyImpl); + +// Export |ManagementBrowserProxyImpl| on |window| so that it can be accessed by +// management_ui_browsertest.cc +window.ManagementBrowserProxyImpl = ManagementBrowserProxyImpl;
diff --git a/chrome/browser/resources/management/management_ui.html b/chrome/browser/resources/management/management_ui.html index f52326d..93ecc899 100644 --- a/chrome/browser/resources/management/management_ui.html +++ b/chrome/browser/resources/management/management_ui.html
@@ -1,20 +1,4 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_page_host_style_css.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar.html"> -<link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html"> -<link rel="import" href="chrome://resources/cr_elements/icons.html"> -<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> -<link rel="import" href="chrome://resources/html/load_time_data.html"> -<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> -<link rel="import" href="icons.html"> -<link rel="import" href="management_browser_proxy.html"> - -<dom-module id="management-ui"> - <template> <style include="cr-icons cr-hidden-style cr-page-host-style cr-shared-style"> :host { @@ -324,6 +308,3 @@ </div> </div> </main> - </template> - <script src="management_ui.js"></script> -</dom-module>
diff --git a/chrome/browser/resources/management/management_ui.js b/chrome/browser/resources/management/management_ui.js index a04d5ed..fe3aa23e 100644 --- a/chrome/browser/resources/management/management_ui.js +++ b/chrome/browser/resources/management/management_ui.js
@@ -2,294 +2,308 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -cr.define('management', function() { - /** - * @typedef {{ - * messageIds: !Array<string>, - * icon: string, - * }} - */ - let BrowserReportingData; +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js'; +import 'chrome://resources/cr_elements/cr_icons_css.m.js'; +import 'chrome://resources/cr_elements/cr_page_host_style_css.m.js'; +import 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar.m.js'; +import 'chrome://resources/cr_elements/hidden_style_css.m.js'; +import 'chrome://resources/cr_elements/icons.m.js'; +import 'chrome://resources/cr_elements/shared_style_css.m.js'; +import './icons.js'; - Polymer({ - is: 'management-ui', +import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; +import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; - behaviors: [ - I18nBehavior, - WebUIListenerBehavior, - ], +import {BrowserReportingResponse, Extension, ManagementBrowserProxy, ManagementBrowserProxyImpl, ReportingType, ThreatProtectionInfo} from './management_browser_proxy.js'; +// <if expr="chromeos"> +import {DeviceReportingResponse, DeviceReportingType} from './management_browser_proxy.js'; +// </if> - properties: { - /** - * List of messages related to browser reporting. - * @private {?Array<!management.BrowserReportingData>} - */ - browserReportingInfo_: Array, +/** + * @typedef {{ + * messageIds: !Array<string>, + * icon: string, + * }} + */ +let BrowserReportingData; - /** - * List of messages related to browser reporting. - * @private {?Array<!management.Extension>} - */ - extensions_: Array, +Polymer({ + is: 'management-ui', - // <if expr="chromeos"> - /** - * List of messages related to device reporting. - * @private {?Array<!management.DeviceReportingResponse>} - */ - deviceReportingInfo_: Array, + _template: html`{__html_template__}`, - /** - * Message stating if the Trust Roots are configured. - * @private - */ - localTrustRoots_: String, + behaviors: [ + I18nBehavior, + WebUIListenerBehavior, + ], - /** @private */ - customerLogo_: String, - - /** @private */ - managementOverview_: String, - - // </if> - - /** @private */ - subtitle_: String, - - // <if expr="not chromeos"> - /** @private */ - managementNoticeHtml_: String, - // </if> - - /** @private */ - managed_: Boolean, - - /** @private */ - extensionReportingSubtitle_: String, - - /** @private {!management.ThreatProtectionInfo} */ - threatProtectionInfo_: Object, - }, - - /** @private {?management.ManagementBrowserProxy} */ - browserProxy_: null, - - /** @override */ - attached() { - document.documentElement.classList.remove('loading'); - this.browserProxy_ = management.ManagementBrowserProxyImpl.getInstance(); - this.updateManagedFields_(); - this.initBrowserReportingInfo_(); - this.getThreatProtectionInfo_(); - - this.addWebUIListener( - 'browser-reporting-info-updated', - reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo)); - - this.addWebUIListener('managed_data_changed', () => { - this.updateManagedFields_(); - }); - - this.addWebUIListener( - 'threat-protection-info-updated', - info => this.threatProtectionInfo_ = info); - - this.getExtensions_(); - // <if expr="chromeos"> - this.getDeviceReportingInfo_(); - this.getLocalTrustRootsInfo_(); - // </if> - }, - - /** @private */ - initBrowserReportingInfo_() { - this.browserProxy_.initBrowserReportingInfo().then( - reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo)); - }, + properties: { + /** + * List of messages related to browser reporting. + * @private {?Array<!BrowserReportingData>} + */ + browserReportingInfo_: Array, /** - * @param {!Array<!management.BrowserReportingResponse>} reportingInfo - * @private + * List of messages related to browser reporting. + * @private {?Array<!Extension>} */ - onBrowserReportingInfoReceived_(reportingInfo) { - const reportingInfoMap = reportingInfo.reduce((info, response) => { - info[response.reportingType] = info[response.reportingType] || { - icon: this.getIconForReportingType_(response.reportingType), - messageIds: [] - }; - info[response.reportingType].messageIds.push(response.messageId); - return info; - }, {}); - - const reportingTypeOrder = { - [management.ReportingType.SECURITY]: 1, - [management.ReportingType.EXTENSIONS]: 2, - [management.ReportingType.USER]: 3, - [management.ReportingType.USER_ACTIVITY]: 4, - [management.ReportingType.DEVICE]: 5, - }; - - this.browserReportingInfo_ = - Object.keys(reportingInfoMap) - .sort((a, b) => reportingTypeOrder[a] - reportingTypeOrder[b]) - .map(reportingType => reportingInfoMap[reportingType]); - }, - - /** @private */ - getExtensions_() { - this.browserProxy_.getExtensions().then(extensions => { - this.extensions_ = extensions; - }); - }, - - /** @private */ - getThreatProtectionInfo_() { - this.browserProxy_.getThreatProtectionInfo().then(info => { - this.threatProtectionInfo_ = info; - }); - }, - - /** - * @return {boolean} True if there is threat protection info to show. - * @private - */ - showThreatProtectionInfo_() { - return !!this.threatProtectionInfo_ && - this.threatProtectionInfo_.info.length > 0; - }, + extensions_: Array, // <if expr="chromeos"> - /** @private */ - getLocalTrustRootsInfo_() { - this.browserProxy_.getLocalTrustRootsInfo().then(trustRootsConfigured => { - this.localTrustRoots_ = trustRootsConfigured ? - loadTimeData.getString('managementTrustRootsConfigured') : - ''; - }); - }, - - /** @private */ - getDeviceReportingInfo_() { - this.browserProxy_.getDeviceReportingInfo().then(reportingInfo => { - this.deviceReportingInfo_ = reportingInfo; - }); - }, + /** + * List of messages related to device reporting. + * @private {?Array<!DeviceReportingResponse>} + */ + deviceReportingInfo_: Array, /** - * @return {boolean} True of there are device reporting info to show. + * Message stating if the Trust Roots are configured. * @private */ - showDeviceReportingInfo_() { - return !!this.deviceReportingInfo_ && - this.deviceReportingInfo_.length > 0; - }, + localTrustRoots_: String, - /** - * @param {management.DeviceReportingType} reportingType - * @return {string} The associated icon. - * @private - */ - getIconForDeviceReportingType_(reportingType) { - switch (reportingType) { - case management.DeviceReportingType.SUPERVISED_USER: - return 'management:supervised-user'; - case management.DeviceReportingType.DEVICE_ACTIVITY: - return 'management:timelapse'; - case management.DeviceReportingType.STATISTIC: - return 'management:bar-chart'; - case management.DeviceReportingType.DEVICE: - return 'cr:computer'; - case management.DeviceReportingType.LOGS: - return 'management:report'; - case management.DeviceReportingType.PRINT: - return 'cr:print'; - case management.DeviceReportingType.CROSTINI: - return 'management:linux'; - default: - return 'cr:computer'; - } - }, + /** @private */ + customerLogo_: String, + + /** @private */ + managementOverview_: String, + // </if> - /** - * @return {boolean} True of there are browser reporting info to show. - * @private - */ - showBrowserReportingInfo_() { - return !!this.browserReportingInfo_ && - this.browserReportingInfo_.length > 0; - }, + /** @private */ + subtitle_: String, - /** - * @return {boolean} True of there are extension reporting info to show. - * @private - */ - showExtensionReportingInfo_() { - return !!this.extensions_ && this.extensions_.length > 0; - }, - - /** - * @param {management.ReportingType} reportingType - * @returns {string} The associated icon. - * @private - */ - getIconForReportingType_(reportingType) { - switch (reportingType) { - case management.ReportingType.SECURITY: - return 'cr:security'; - case management.ReportingType.DEVICE: - return 'cr:computer'; - case management.ReportingType.EXTENSIONS: - return 'cr:extension'; - case management.ReportingType.USER: - return 'management:account-circle'; - case management.ReportingType.USER_ACTIVITY: - return 'management:public'; - default: - return 'cr:security'; - } - }, - - /** - * Handles the 'search-changed' event fired from the toolbar. - * Redirects to the settings page initialized the the current - * search query. - * @param {!CustomEvent<string>} e - * @private - */ - onSearchChanged_: function(e) { - const query = e.detail; - window.location.href = - `chrome://settings?search=${encodeURIComponent(query)}`; - }, + // <if expr="not chromeos"> + /** @private */ + managementNoticeHtml_: String, + // </if> /** @private */ - onTapBack_() { - if (history.length > 1) { - history.back(); - } else { - window.location.href = 'chrome://settings/help'; - } - }, + managed_: Boolean, /** @private */ - updateManagedFields_() { - this.browserProxy_.getContextualManagedData().then(data => { - this.managed_ = data.managed; - this.extensionReportingSubtitle_ = data.extensionReportingTitle; - this.subtitle_ = data.pageSubtitle; - // <if expr="chromeos"> - this.customerLogo_ = data.customerLogo; - this.managementOverview_ = data.overview; - // </if> - // <if expr="not chromeos"> - this.managementNoticeHtml_ = data.browserManagementNotice; - // </if> - }); - }, - }); + extensionReportingSubtitle_: String, - return { - BrowserReportingData: BrowserReportingData, - }; + /** @private {!ThreatProtectionInfo} */ + threatProtectionInfo_: Object, + }, + + /** @private {?ManagementBrowserProxy} */ + browserProxy_: null, + + /** @override */ + attached() { + document.documentElement.classList.remove('loading'); + this.browserProxy_ = ManagementBrowserProxyImpl.getInstance(); + this.updateManagedFields_(); + this.initBrowserReportingInfo_(); + this.getThreatProtectionInfo_(); + + this.addWebUIListener( + 'browser-reporting-info-updated', + reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo)); + + this.addWebUIListener('managed_data_changed', () => { + this.updateManagedFields_(); + }); + + this.addWebUIListener( + 'threat-protection-info-updated', + info => this.threatProtectionInfo_ = info); + + this.getExtensions_(); + // <if expr="chromeos"> + this.getDeviceReportingInfo_(); + this.getLocalTrustRootsInfo_(); + // </if> + }, + + /** @private */ + initBrowserReportingInfo_() { + this.browserProxy_.initBrowserReportingInfo().then( + reportingInfo => this.onBrowserReportingInfoReceived_(reportingInfo)); + }, + + /** + * @param {!Array<!BrowserReportingResponse>} reportingInfo + * @private + */ + onBrowserReportingInfoReceived_(reportingInfo) { + const reportingInfoMap = reportingInfo.reduce((info, response) => { + info[response.reportingType] = info[response.reportingType] || { + icon: this.getIconForReportingType_(response.reportingType), + messageIds: [] + }; + info[response.reportingType].messageIds.push(response.messageId); + return info; + }, {}); + + const reportingTypeOrder = { + [ReportingType.SECURITY]: 1, + [ReportingType.EXTENSIONS]: 2, + [ReportingType.USER]: 3, + [ReportingType.USER_ACTIVITY]: 4, + [ReportingType.DEVICE]: 5, + }; + + this.browserReportingInfo_ = + Object.keys(reportingInfoMap) + .sort((a, b) => reportingTypeOrder[a] - reportingTypeOrder[b]) + .map(reportingType => reportingInfoMap[reportingType]); + }, + + /** @private */ + getExtensions_() { + this.browserProxy_.getExtensions().then(extensions => { + this.extensions_ = extensions; + }); + }, + + /** @private */ + getThreatProtectionInfo_() { + this.browserProxy_.getThreatProtectionInfo().then(info => { + this.threatProtectionInfo_ = info; + }); + }, + + /** + * @return {boolean} True if there is threat protection info to show. + * @private + */ + showThreatProtectionInfo_() { + return !!this.threatProtectionInfo_ && + this.threatProtectionInfo_.info.length > 0; + }, + + // <if expr="chromeos"> + /** @private */ + getLocalTrustRootsInfo_() { + this.browserProxy_.getLocalTrustRootsInfo().then(trustRootsConfigured => { + this.localTrustRoots_ = trustRootsConfigured ? + loadTimeData.getString('managementTrustRootsConfigured') : + ''; + }); + }, + + /** @private */ + getDeviceReportingInfo_() { + this.browserProxy_.getDeviceReportingInfo().then(reportingInfo => { + this.deviceReportingInfo_ = reportingInfo; + }); + }, + + /** + * @return {boolean} True of there are device reporting info to show. + * @private + */ + showDeviceReportingInfo_() { + return !!this.deviceReportingInfo_ && this.deviceReportingInfo_.length > 0; + }, + + /** + * @param {DeviceReportingType} reportingType + * @return {string} The associated icon. + * @private + */ + getIconForDeviceReportingType_(reportingType) { + switch (reportingType) { + case DeviceReportingType.SUPERVISED_USER: + return 'management:supervised-user'; + case DeviceReportingType.DEVICE_ACTIVITY: + return 'management:timelapse'; + case DeviceReportingType.STATISTIC: + return 'management:bar-chart'; + case DeviceReportingType.DEVICE: + return 'cr:computer'; + case DeviceReportingType.LOGS: + return 'management:report'; + case DeviceReportingType.PRINT: + return 'cr:print'; + case DeviceReportingType.CROSTINI: + return 'management:linux'; + default: + return 'cr:computer'; + } + }, + // </if> + + /** + * @return {boolean} True of there are browser reporting info to show. + * @private + */ + showBrowserReportingInfo_() { + return !!this.browserReportingInfo_ && + this.browserReportingInfo_.length > 0; + }, + + /** + * @return {boolean} True of there are extension reporting info to show. + * @private + */ + showExtensionReportingInfo_() { + return !!this.extensions_ && this.extensions_.length > 0; + }, + + /** + * @param {ReportingType} reportingType + * @returns {string} The associated icon. + * @private + */ + getIconForReportingType_(reportingType) { + switch (reportingType) { + case ReportingType.SECURITY: + return 'cr:security'; + case ReportingType.DEVICE: + return 'cr:computer'; + case ReportingType.EXTENSIONS: + return 'cr:extension'; + case ReportingType.USER: + return 'management:account-circle'; + case ReportingType.USER_ACTIVITY: + return 'management:public'; + default: + return 'cr:security'; + } + }, + + /** + * Handles the 'search-changed' event fired from the toolbar. + * Redirects to the settings page initialized the the current + * search query. + * @param {!CustomEvent<string>} e + * @private + */ + onSearchChanged_: function(e) { + const query = e.detail; + window.location.href = + `chrome://settings?search=${encodeURIComponent(query)}`; + }, + + /** @private */ + onTapBack_() { + if (history.length > 1) { + history.back(); + } else { + window.location.href = 'chrome://settings/help'; + } + }, + + /** @private */ + updateManagedFields_() { + this.browserProxy_.getContextualManagedData().then(data => { + this.managed_ = data.managed; + this.extensionReportingSubtitle_ = data.extensionReportingTitle; + this.subtitle_ = data.pageSubtitle; + // <if expr="chromeos"> + this.customerLogo_ = data.customerLogo; + this.managementOverview_ = data.overview; + // </if> + // <if expr="not chromeos"> + this.managementNoticeHtml_ = data.browserManagementNotice; + // </if> + }); + }, });
diff --git a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js index d73d4ba..1d5eeb72 100644 --- a/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js +++ b/chrome/browser/resources/settings/about_page/about_page_browser_proxy.js
@@ -27,15 +27,6 @@ /** * @typedef {{ - * arcVersion: string, - * osFirmware: string, - * osVersion: string, - * }} - */ -let VersionInfo; - -/** - * @typedef {{ * version: (string|undefined), * size: (string|undefined), * }} @@ -208,9 +199,6 @@ /** @return {!Promise<!ChannelInfo>} */ getChannelInfo() {} - /** @return {!Promise<!VersionInfo>} */ - getVersionInfo() {} - /** @return {!Promise<?RegulatoryInfo>} */ getRegulatoryInfo() {} @@ -317,11 +305,6 @@ } /** @override */ - getVersionInfo() { - return cr.sendWithPromise('getVersionInfo'); - } - - /** @override */ getRegulatoryInfo() { return cr.sendWithPromise('getRegulatoryInfo'); }
diff --git a/chrome/browser/resources/settings/about_page/detailed_build_info.html b/chrome/browser/resources/settings/about_page/detailed_build_info.html index ba6bbc5..fa1ae5f8 100644 --- a/chrome/browser/resources/settings/about_page/detailed_build_info.html +++ b/chrome/browser/resources/settings/about_page/detailed_build_info.html
@@ -24,15 +24,6 @@ width: 100%; } </style> - <div class="settings-box two-line single-column"> - <div>$i18n{aboutPlatformLabel}</div> - <div class="secondary" id="osVersion">[[versionInfo_.osVersion]]</div> - </div> - <div class="settings-box two-line single-column" - hidden$="[[!shouldShowVersion_(versionInfo_.osFirmware)]]"> - <div>$i18n{aboutFirmwareLabel}</div> - <div class="secondary" id="osFirmware">[[versionInfo_.osFirmware]]</div> - </div> <div class="settings-box two-line"> <div class="start"> <div>$i18n{aboutChannelLabel}</div> @@ -64,29 +55,10 @@ <div class="secondary" inner-h-t-m-l="[[eolMessageWithMonthAndYear]]"> </div> </div> - <div class="settings-box two-line single-column" - hidden$="[[!shouldShowVersion_(versionInfo_.arcVersion)]]"> - <div>$i18n{aboutArcVersionLabel}</div> - <div class="secondary" id="arcVersion">[[versionInfo_.arcVersion]]</div> - </div> - <div class="settings-box two-line single-column"> - <div>V8</div> - <div class="secondary">$i18n{aboutJsEngineVersion}</div> - </div> - <div class="settings-box two-line single-column"> - <div>$i18n{aboutUserAgentLabel}</div> - <div class="secondary">$i18n{aboutUserAgent}</div> - </div> - <div class="settings-box two-line single-column"> - <div>$i18n{aboutCommandLineLabel}</div> - <div id="command-line" class="secondary"> - [[i18n('aboutCommandLine')]] - </div> - </div> - <div class="settings-box two-line single-column"> - <div>$i18n{aboutBuildDateLabel}</div> - <div class="secondary">$i18n{aboutBuildDate}</div> - </div> + <cr-link-row class="hr" label="$i18n{aboutBuildDetailsTitle}" + on-click="onBuildDetailsTap_" external> + </cr-link-row> + <div class="hr"></div> </template> <script src="detailed_build_info.js"></script> </dom-module>
diff --git a/chrome/browser/resources/settings/about_page/detailed_build_info.js b/chrome/browser/resources/settings/about_page/detailed_build_info.js index c82072cd..ba47cf9 100644 --- a/chrome/browser/resources/settings/about_page/detailed_build_info.js +++ b/chrome/browser/resources/settings/about_page/detailed_build_info.js
@@ -13,9 +13,6 @@ behaviors: [I18nBehavior], properties: { - /** @private {!VersionInfo} */ - versionInfo_: Object, - /** @private */ currentlyOnChannelText_: String, @@ -35,11 +32,6 @@ ready: function() { const browserProxy = settings.AboutPageBrowserProxyImpl.getInstance(); browserProxy.pageReady(); - - browserProxy.getVersionInfo().then(versionInfo => { - this.versionInfo_ = versionInfo; - }); - this.updateChannelInfo_(); }, @@ -56,15 +48,6 @@ }, /** - * @param {string} version - * @return {boolean} - * @private - */ - shouldShowVersion_: function(version) { - return version.length > 0; - }, - - /** * @param {boolean} canChangeChannel * @return {string} * @private @@ -98,6 +81,15 @@ this.showChannelSwitcherDialog_ = true; }, + /** + * @param {!Event} e + * @private + */ + onBuildDetailsTap_: function(e) { + e.preventDefault(); + window.open('chrome://version'); + }, + /** @private */ onChannelSwitcherDialogClosed_: function() { this.showChannelSwitcherDialog_ = false;
diff --git a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html index 97c29a0..52053aae 100644 --- a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html +++ b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html
@@ -58,12 +58,9 @@ <div class="label"> $i18n{googleAssistantEnableHotword} </div> - <div class="secondary label" hidden="[[!hotwordDefaultOn_]]"> + <div class="secondary label"> $i18n{googleAssistantEnableHotwordWithoutDspDescription} </div> - <div class="secondary label" hidden="[[hotwordDefaultOn_]]"> - $i18n{googleAssistantEnableHotwordDescription} - </div> </div> <template is="dom-if" if="[[hotwordEnforced_]]" restamp> <cr-policy-pref-indicator id="hotword-policy-pref-indicator"
diff --git a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.js b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.js index c3bc172..5a91841 100644 --- a/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.js +++ b/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.js
@@ -97,12 +97,6 @@ }, /** @private */ - hotwordDefaultOn_: { - type: Boolean, - value: false, - }, - - /** @private */ dspHotwordState_: { type: DspHotwordState, } @@ -166,20 +160,17 @@ this.setPrefValue('settings.voice_interaction.hotword.enabled', true); this.setPrefValue( 'settings.voice_interaction.hotword.always_on', false); - this.hotwordDefaultOn_ = true; this.browserProxy_.syncVoiceModelStatus(); break; case DspHotwordState.ALWAYS_ON: this.setPrefValue('settings.voice_interaction.hotword.enabled', true); this.setPrefValue('settings.voice_interaction.hotword.always_on', true); - this.hotwordDefaultOn_ = false; this.browserProxy_.syncVoiceModelStatus(); break; case DspHotwordState.OFF: this.setPrefValue('settings.voice_interaction.hotword.enabled', false); this.setPrefValue( 'settings.voice_interaction.hotword.always_on', false); - this.hotwordDefaultOn_ = false; break; default: console.error('Invalid Dsp hotword settings state'); @@ -220,14 +211,11 @@ /** @private */ refreshDspHotwordState_: function() { if (!this.getPref('settings.voice_interaction.hotword.enabled.value')) { - this.hotwordDefaultOn_ = false; this.dspHotwordState_ = DspHotwordState.OFF; } else if (this.getPref( 'settings.voice_interaction.hotword.always_on.value')) { - this.hotwordDefaultOn_ = false; this.dspHotwordState_ = DspHotwordState.ALWAYS_ON; } else { - this.hotwordDefaultOn_ = true; this.dspHotwordState_ = DspHotwordState.DEFAULT_ON; }
diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html index ad72212..595f018 100644 --- a/chrome/browser/resources/settings/icons.html +++ b/chrome/browser/resources/settings/icons.html
@@ -74,6 +74,7 @@ <g id="pdf"><path d="M7 11.5h1v-1H7v1zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9.5 8.5c0 .83-.67 1.5-1.5 1.5H7v2H5.5V9H8c.83 0 1.5.67 1.5 1.5v1zm10-1H17v1h1.5V13H17v2h-1.5V9h4v1.5zm-5 3c0 .83-.67 1.5-1.5 1.5h-2.5V9H13c.83 0 1.5.67 1.5 1.5v3zm-2.5 0h1v-3h-1v3z"></path><path fill="none" d="M0 0h24v24H0z"></path></g> <g id="palette"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g> <g id="payment-handler"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path></g> + <g id="insecure-content"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></path></g> <g id="photo"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></g> <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"></path></g> <g id="protocol-handler"><path d="M21.72 11.33l-6.644-7.035a.97.97 0 0 0-1.38-.01l-1.67 1.72-1.617-1.712a.97.97 0 0 0-1.38-.01l-6.737 6.935c-.187.191-.29.447-.292.719-.002.272.099.529.28.722l6.644 7.034a.949.949 0 0 0 1.38.011l1.671-1.718 1.615 1.71a.949.949 0 0 0 1.381.01l6.74-6.935a1.054 1.054 0 0 0 .01-1.44zM6.947 12.464l3.657 3.785-.974.98-5.273-5.456 5.349-5.378.929.962-3.677 3.7a.998.998 0 0 0-.292.702 1 1 0 0 0 .28.705zm7.35 4.768l-.931-.963 3.68-3.7a1.012 1.012 0 0 0 .007-1.407l-3.656-3.784.974-.98 5.273 5.456-5.348 5.378z"></path></g>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index 11c6038..9b9618c 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -303,6 +303,23 @@ </category-setting-exceptions> </settings-subpage> </template> + <template is="dom-if" if="[[enableInsecureContentContentSetting_]]"> + <template is="dom-if" route-path="/content/insecureContent" no-search> + <settings-subpage + page-title="$i18n{siteSettingsCategoryInsecureContent}" + search-label="$i18n{siteSettingsAllSitesSearch}" + search-term="{{searchFilter_}}"> + <div class="settings-box first"> + $i18n{siteSettingsInsecureContentBlock} + </div> + <category-setting-exceptions + category="[[ContentSettingsTypes.MIXEDSCRIPT]]" + block-header="$i18n{siteSettingsBlock}" + search-filter="[[searchFilter_]]"> + </category-setting-exceptions> + </settings-subpage> + </template> + </template> <template is="dom-if" route-path="/content/location" no-search> <settings-subpage page-title="$i18n{siteSettingsCategoryLocation}" search-label="$i18n{siteSettingsAllSitesSearch}"
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js index e3d4481..a7b63fd 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.js +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -136,6 +136,14 @@ }, /** @private */ + enableInsecureContentContentSetting_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('enableInsecureContentContentSetting'); + } + }, + + /** @private */ enableNativeFileSystemWriteContentSetting_: { type: Boolean, value: function() {
diff --git a/chrome/browser/resources/settings/route.js b/chrome/browser/resources/settings/route.js index ecb8f8267..26e34c9c 100644 --- a/chrome/browser/resources/settings/route.js +++ b/chrome/browser/resources/settings/route.js
@@ -98,6 +98,7 @@ * SITE_SETTINGS_FLASH: (undefined|!settings.Route), * SITE_SETTINGS_HANDLERS: (undefined|!settings.Route), * SITE_SETTINGS_IMAGES: (undefined|!settings.Route), + * SITE_SETTINGS_MIXEDSCRIPT: (undefined|!settings.Route), * SITE_SETTINGS_JAVASCRIPT: (undefined|!settings.Route), * SITE_SETTINGS_SENSORS: (undefined|!settings.Route), * SITE_SETTINGS_SOUND: (undefined|!settings.Route), @@ -329,6 +330,10 @@ r.SITE_SETTINGS_DATA_DETAILS = r.SITE_SETTINGS_SITE_DATA.createChild('/cookies/detail'); r.SITE_SETTINGS_IMAGES = r.SITE_SETTINGS.createChild('images'); + if (loadTimeData.getBoolean('enableInsecureContentContentSetting')) { + r.SITE_SETTINGS_MIXEDSCRIPT = + r.SITE_SETTINGS.createChild('insecureContent'); + } r.SITE_SETTINGS_JAVASCRIPT = r.SITE_SETTINGS.createChild('javascript'); r.SITE_SETTINGS_SOUND = r.SITE_SETTINGS.createChild('sound'); r.SITE_SETTINGS_SENSORS = r.SITE_SETTINGS.createChild('sensors');
diff --git a/chrome/browser/resources/settings/site_settings/category_default_setting.js b/chrome/browser/resources/settings/site_settings/category_default_setting.js index 554bc699..5426cf0 100644 --- a/chrome/browser/resources/settings/site_settings/category_default_setting.js +++ b/chrome/browser/resources/settings/site_settings/category_default_setting.js
@@ -103,6 +103,7 @@ case settings.ContentSettingsTypes.BACKGROUND_SYNC: case settings.ContentSettingsTypes.IMAGES: case settings.ContentSettingsTypes.JAVASCRIPT: + case settings.ContentSettingsTypes.MIXEDSCRIPT: case settings.ContentSettingsTypes.SOUND: case settings.ContentSettingsTypes.SENSORS: case settings.ContentSettingsTypes.PAYMENT_HANDLER:
diff --git a/chrome/browser/resources/settings/site_settings/constants.js b/chrome/browser/resources/settings/site_settings/constants.js index f65608a..f073aa9 100644 --- a/chrome/browser/resources/settings/site_settings/constants.js +++ b/chrome/browser/resources/settings/site_settings/constants.js
@@ -36,6 +36,7 @@ CLIPBOARD: 'clipboard', SENSORS: 'sensors', PAYMENT_HANDLER: 'payment-handler', + MIXEDSCRIPT: 'mixed-script', BLUETOOTH_SCANNING: 'bluetooth-scanning', NATIVE_FILE_SYSTEM_WRITE: 'native-file-system-write', };
diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b/chrome/browser/resources/settings/site_settings/site_details.html index 24e293d..fb24557 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chrome/browser/resources/settings/site_settings/site_details.html
@@ -214,6 +214,13 @@ label="$i18n{siteSettingsBluetoothScanning}"> </site-details-permission> </template> + <template is="dom-if" if="[[enableInsecureContentContentSetting_]]"> + <site-details-permission + category="{{ContentSettingsTypes.MIXEDSCRIPT}}" + icon="settings:insecure-content" id="mixed-script" + label="$i18n{siteSettingsInsecureContent}"> + </site-details-permission> + </template> </div> <website-usage-private-api id="usageApi"
diff --git a/chrome/browser/resources/settings/site_settings/site_details.js b/chrome/browser/resources/settings/site_settings/site_details.js index 6e85996..df765e0 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.js +++ b/chrome/browser/resources/settings/site_settings/site_details.js
@@ -70,6 +70,14 @@ 'enableNativeFileSystemWriteContentSetting'); } }, + + /** @private */ + enableInsecureContentContentSetting_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('enableInsecureContentContentSetting'); + } + }, }, listeners: {
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_behavior.js b/chrome/browser/resources/settings/site_settings/site_settings_behavior.js index a87ec9a..545c49a 100644 --- a/chrome/browser/resources/settings/site_settings/site_settings_behavior.js +++ b/chrome/browser/resources/settings/site_settings/site_settings_behavior.js
@@ -207,6 +207,9 @@ addOrRemoveSettingWithFlag( settings.ContentSettingsTypes.NATIVE_FILE_SYSTEM_WRITE, 'enableNativeFileSystemWriteContentSetting'); + addOrRemoveSettingWithFlag( + settings.ContentSettingsTypes.MIXEDSCRIPT, + 'enableInsecureContentContentSetting'); return this.contentTypes_.slice(0); },
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.html b/chrome/browser/resources/settings/site_settings_page/site_settings_page.html index b65889b..3db16d2 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.html +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.html
@@ -247,6 +247,15 @@ '$i18nPolymer{siteSettingsPaymentHandlerBlock}')]]"></cr-link-row> </template> + <template is="dom-if" if="[[enableInsecureContentContentSetting_]]"> + <cr-link-row class="hr two-line" data-route="SITE_SETTINGS_MIXEDSCRIPT" + label="$i18n{siteSettingsInsecureContent}" + on-click="onTapNavigate_" + start-icon="settings:insecure-content" + sub-label="$i18n{siteSettingsInsecureContentBlock}" + </cr-link-row> + </template> + <template is="dom-if" if="[[enableExperimentalWebPlatformFeatures_]]"> <cr-link-row class="hr two-line" data-route="SITE_SETTINGS_BLUETOOTH_SCANNING"
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.js b/chrome/browser/resources/settings/site_settings_page/site_settings_page.js index b04a5ac..588b6d0 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.js +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.js
@@ -60,6 +60,14 @@ }, /** @private */ + enableInsecureContentContentSetting_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('enableInsecureContentContentSetting'); + } + }, + + /** @private */ enableNativeFileSystemWriteContentSetting_: { type: Boolean, value: function() { @@ -132,6 +140,10 @@ ]); } + if (this.enableInsecureContentContentSetting_) { + pairs.push([R.SITE_SETTINGS_MIXEDSCRIPT, 'mixed-script']); + } + pairs.forEach(([route, id]) => { this.focusConfig.set(route.path, () => this.async(() => { cr.ui.focusWithoutInk(assert(this.$$(`#${id}`)));
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc index 0c8119e0..20b9f10b 100644 --- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc +++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc
@@ -301,7 +301,7 @@ // get notified of it, so include that notification now. Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); - safe_browsing_service->AddPrefService(profile->GetPrefs()); + safe_browsing_service->OnProfileAdded(profile); content::BrowserThread::RunAllPendingTasksOnThreadForTesting( content::BrowserThread::IO); #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -1105,10 +1105,10 @@ auto* safe_browsing_service = sb_service_factory.CreateSafeBrowsingService(); // A profile was created already but SafeBrowsingService wasn't around to - // get notified of it, so include that notification now. - safe_browsing_service->AddPrefService( - Profile::FromBrowserContext(web_contents()->GetBrowserContext()) - ->GetPrefs()); + // get notified of it (and it wasn't associated with a ProfileManager), so + // include that profile now. + safe_browsing_service->OnProfileAdded( + Profile::FromBrowserContext(web_contents()->GetBrowserContext())); TestingBrowserProcess::GetGlobal()->SetSafeBrowsingService( safe_browsing_service); g_browser_process->safe_browsing_service()->Initialize();
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc index 5ee096c9..9b6629db 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc
@@ -128,6 +128,8 @@ CreateTriggerManager(); // Track profile creation and destruction. + if (g_browser_process->profile_manager()) + g_browser_process->profile_manager()->AddObserver(this); profiles_registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED, content::NotificationService::AllSources()); profiles_registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, @@ -143,6 +145,8 @@ shutdown_ = true; // Remove Profile creation/destruction observers. + if (g_browser_process->profile_manager()) + g_browser_process->profile_manager()->RemoveObserver(this); profiles_registrar_.RemoveAll(); // Delete the PrefChangeRegistrars, whose dtors also unregister |this| as an @@ -341,8 +345,6 @@ services_delegate_->CreateVerdictCacheManager(profile); services_delegate_->CreatePasswordProtectionService(profile); services_delegate_->CreateTelemetryService(profile); - if (!profile->IsOffTheRecord()) - AddPrefService(profile->GetPrefs()); services_delegate_->CreateBinaryUploadService(profile); break; } @@ -352,8 +354,6 @@ services_delegate_->RemoveVerdictCacheManager(profile); services_delegate_->RemovePasswordProtectionService(profile); services_delegate_->RemoveTelemetryService(); - if (!profile->IsOffTheRecord()) - RemovePrefService(profile->GetPrefs()); services_delegate_->RemoveBinaryUploadService(profile); break; } @@ -362,7 +362,9 @@ } } -void SafeBrowsingService::AddPrefService(PrefService* pref_service) { +void SafeBrowsingService::OnProfileAdded(Profile* profile) { + // Start following the safe browsing preference on |pref_service|. + PrefService* pref_service = profile->GetPrefs(); DCHECK(prefs_map_.find(pref_service) == prefs_map_.end()); std::unique_ptr<PrefChangeRegistrar> registrar = std::make_unique<PrefChangeRegistrar>(); @@ -388,15 +390,6 @@ RecordExtendedReportingMetrics(*pref_service); } -void SafeBrowsingService::RemovePrefService(PrefService* pref_service) { - if (prefs_map_.find(pref_service) != prefs_map_.end()) { - prefs_map_.erase(pref_service); - RefreshState(); - } else { - NOTREACHED(); - } -} - std::unique_ptr<SafeBrowsingService::StateSubscription> SafeBrowsingService::RegisterStateCallback( const base::Callback<void(void)>& callback) {
diff --git a/chrome/browser/safe_browsing/safe_browsing_service.h b/chrome/browser/safe_browsing/safe_browsing_service.h index 9160cb8..7f8bc8e 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.h +++ b/chrome/browser/safe_browsing/safe_browsing_service.h
@@ -20,6 +20,7 @@ #include "base/observer_list.h" #include "base/sequenced_task_runner_helpers.h" #include "chrome/browser/net/proxy_config_monitor.h" +#include "chrome/browser/profiles/profile_manager_observer.h" #include "chrome/browser/safe_browsing/services_delegate.h" #include "components/safe_browsing/buildflags.h" #include "components/safe_browsing/common/safe_browsing_prefs.h" @@ -79,7 +80,8 @@ // alive until SafeBrowsingService is destroyed, however, they are disabled // permanently when Shutdown method is called. class SafeBrowsingService : public SafeBrowsingServiceInterface, - public content::NotificationObserver { + public content::NotificationObserver, + public ProfileManagerObserver { public: static base::FilePath GetCookieFilePathForTesting(); @@ -243,11 +245,8 @@ const content::NotificationSource& source, const content::NotificationDetails& details) override; - // Starts following the safe browsing preference on |pref_service|. - void AddPrefService(PrefService* pref_service); - - // Stop following the safe browsing preference on |pref_service|. - void RemovePrefService(PrefService* pref_service); + // ProfileManagerObserver overrides: + void OnProfileAdded(Profile* profile) override; // Checks if any profile is currently using the safe browsing service, and // starts or stops the service accordingly.
diff --git a/chrome/browser/safe_browsing/ui_manager_unittest.cc b/chrome/browser/safe_browsing/ui_manager_unittest.cc index f323b3e6..d8903e3 100644 --- a/chrome/browser/safe_browsing/ui_manager_unittest.cc +++ b/chrome/browser/safe_browsing/ui_manager_unittest.cc
@@ -96,9 +96,8 @@ g_browser_process->safe_browsing_service()->Initialize(); // A profile was created already but SafeBrowsingService wasn't around to // get notified of it, so include that notification now. - safe_browsing_service->AddPrefService( - Profile::FromBrowserContext(web_contents()->GetBrowserContext()) - ->GetPrefs()); + safe_browsing_service->OnProfileAdded( + Profile::FromBrowserContext(web_contents()->GetBrowserContext())); content::BrowserThread::RunAllPendingTasksOnThreadForTesting( content::BrowserThread::IO); }
diff --git a/chrome/browser/sync/test/integration/sync_arc_package_helper.cc b/chrome/browser/sync/test/integration/sync_arc_package_helper.cc index 2c79e3b..b809f4c6 100644 --- a/chrome/browser/sync/test/integration/sync_arc_package_helper.cc +++ b/chrome/browser/sync/test/integration/sync_arc_package_helper.cc
@@ -9,8 +9,8 @@ #include "base/command_line.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h"
diff --git a/chrome/browser/touch_to_fill/android/BUILD.gn b/chrome/browser/touch_to_fill/android/BUILD.gn index 29da6b2..d225aec 100644 --- a/chrome/browser/touch_to_fill/android/BUILD.gn +++ b/chrome/browser/touch_to_fill/android/BUILD.gn
@@ -55,9 +55,6 @@ "//third_party/junit", "//third_party/mockito:mockito_java", ] - - srcjar_deps = - [ "//components/module_installer/android:module_installer_build_config" ] } android_library("test_java") {
diff --git a/chrome/browser/ui/android/infobars/installable_ambient_badge_infobar.cc b/chrome/browser/ui/android/infobars/installable_ambient_badge_infobar.cc index a468795..8f47af4 100644 --- a/chrome/browser/ui/android/infobars/installable_ambient_badge_infobar.cc +++ b/chrome/browser/ui/android/infobars/installable_ambient_badge_infobar.cc
@@ -41,8 +41,11 @@ base::android::ScopedJavaLocalRef<jobject> java_bitmap = gfx::ConvertToJavaBitmap(&delegate->GetPrimaryIcon()); + jboolean java_is_primary_icon_maskable = delegate->GetIsPrimaryIconMaskable(); + return Java_InstallableAmbientBadgeInfoBar_show( - env, delegate->GetIconId(), java_bitmap, java_message_text, java_url); + env, delegate->GetIconId(), java_bitmap, java_message_text, java_url, + java_is_primary_icon_maskable); } void InstallableAmbientBadgeInfoBar::ProcessButton(int action) {}
diff --git a/chrome/browser/ui/app_list/arc/arc_app_icon.cc b/chrome/browser/ui/app_list/arc/arc_app_icon.cc index 541e2dd..b6fa7fe 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_icon.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_icon.cc
@@ -305,7 +305,7 @@ base::PostTaskAndReplyWithResult( FROM_HERE, - {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}, + {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE}, base::BindOnce( &ArcAppIcon::ReadOnFileThread, scale_factor, path, prefs->MaybeGetIconPathForDefaultApp(mapped_app_id_, descriptor)),
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc index e08a5cf..590853986 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
@@ -19,9 +19,9 @@ #include "base/strings/string_number_conversions.h" #include "base/task/post_task.h" #include "base/values.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/session/user_session_manager.h" #include "chrome/browser/image_decoder.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h index 7daf9f8e..71f9e0b 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h +++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
@@ -23,8 +23,8 @@ #include "base/optional.h" #include "base/time/time.h" #include "base/timer/timer.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_icon_descriptor.h" #include "components/arc/mojom/app.mojom.h" #include "components/arc/session/connection_observer.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_test.cc b/chrome/browser/ui/app_list/arc/arc_app_test.cc index 86f7877..1efec68 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_test.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_test.cc
@@ -11,9 +11,9 @@ #include "base/stl_util.h" #include "base/strings/stringprintf.h" #include "chrome/browser/apps/app_service/arc_apps_factory.h" -#include "chrome/browser/chromeos/arc/arc_play_store_enabled_preference_handler.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_play_store_enabled_preference_handler.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc index 1ab669a..c493f8e4 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -28,9 +28,9 @@ #include "build/build_config.h" #include "chrome/browser/apps/app_service/arc_icon_once_loader.h" #include "chrome/browser/chromeos/arc/arc_optin_uma.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_support_host.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service_test_base.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc index 72c47cb4..bded51ff 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -19,10 +19,10 @@ #include "base/values.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/arc/arc_migration_guide_notification.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h" #include "chrome/browser/chromeos/arc/notification/arc_supervision_transition_notification.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/ash/launcher/arc_app_shelf_id.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_package_sync_model_type_controller.h b/chrome/browser/ui/app_list/arc/arc_package_sync_model_type_controller.h index 536c4993..1e2a1df 100644 --- a/chrome/browser/ui/app_list/arc/arc_package_sync_model_type_controller.h +++ b/chrome/browser/ui/app_list/arc/arc_package_sync_model_type_controller.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_UI_APP_LIST_ARC_ARC_PACKAGE_SYNC_MODEL_TYPE_CONTROLLER_H_ #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "components/sync/driver/syncable_service_based_model_type_controller.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc b/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc index 57d7195..3e56d1d 100644 --- a/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc +++ b/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc
@@ -9,8 +9,8 @@ #include "base/macros.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
diff --git a/chrome/browser/ui/app_list/crostini/crostini_app_icon.cc b/chrome/browser/ui/app_list/crostini/crostini_app_icon.cc index 4d7c5ca..6c30ad7 100644 --- a/chrome/browser/ui/app_list/crostini/crostini_app_icon.cc +++ b/chrome/browser/ui/app_list/crostini/crostini_app_icon.cc
@@ -217,7 +217,7 @@ base::PostTaskAndReplyWithResult( FROM_HERE, - {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}, + {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE}, base::BindOnce(&CrostiniAppIcon::ReadOnFileThread, scale_factor, path), base::BindOnce(&CrostiniAppIcon::OnIconRead, weak_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/ui/ash/assistant/assistant_state_client.h b/chrome/browser/ui/ash/assistant/assistant_state_client.h index 4e20b42..1160aa4d 100644 --- a/chrome/browser/ui/ash/assistant/assistant_state_client.h +++ b/chrome/browser/ui/ash/assistant/assistant_state_client.h
@@ -7,7 +7,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "components/user_manager/user_manager.h" class PrefChangeRegistrar;
diff --git a/chrome/browser/ui/ash/assistant/assistant_state_client_unittest.cc b/chrome/browser/ui/ash/assistant/assistant_state_client_unittest.cc index ff47047..5587fcf 100644 --- a/chrome/browser/ui/ash/assistant/assistant_state_client_unittest.cc +++ b/chrome/browser/ui/ash/assistant/assistant_state_client_unittest.cc
@@ -8,7 +8,7 @@ #include "ash/public/mojom/assistant_state_controller.mojom.h" #include "base/bind.h" #include "base/files/scoped_temp_dir.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/test/base/chrome_ash_test_base.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc index a9596556..bfb5219f 100644 --- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc +++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -137,6 +137,14 @@ chromeos::input_method::InputMethodManager::Get()); ime_controller_client_->Init(); + // NOTE: The WallpaperControllerClient must be initialized before the + // session controller, because the session controller triggers the loading + // of users, which itself calls a code path which eventually reaches the + // WallpaperControllerClient singleton instance via + // chromeos::ChromeUserManagerImpl. + wallpaper_controller_client_ = std::make_unique<WallpaperControllerClient>(); + wallpaper_controller_client_->Init(); + session_controller_client_ = std::make_unique<SessionControllerClientImpl>(); session_controller_client_->Init(); @@ -144,9 +152,6 @@ tablet_mode_page_behavior_ = std::make_unique<TabletModePageBehavior>(); vpn_list_forwarder_ = std::make_unique<VpnListForwarder>(); - wallpaper_controller_client_ = std::make_unique<WallpaperControllerClient>(); - wallpaper_controller_client_->Init(); - chrome_launcher_controller_initializer_ = std::make_unique<internal::ChromeLauncherControllerInitializer>();
diff --git a/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc b/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc index 11b12ee2..f5c500b 100644 --- a/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc +++ b/chrome/browser/ui/ash/launcher/arc_app_launcher_browsertest.cc
@@ -16,9 +16,9 @@ #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
diff --git a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h index 7f98768b..0a5ad03 100644 --- a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h +++ b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/scoped_observer.h" #include "base/time/time.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/ash/launcher/app_window_launcher_controller.h" #include "chrome/browser/ui/ash/launcher/arc_app_shelf_id.h"
diff --git a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h index 5dfc65f..07a160d 100644 --- a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h +++ b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/ash/launcher/shelf_spinner_item_controller.h"
diff --git a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc index e12fa69..c745221 100644 --- a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc +++ b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
@@ -11,8 +11,8 @@ #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/apps/launch_service/launch_service.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/crostini/crostini_registry_service.h" #include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h" #include "chrome/browser/chromeos/crostini/crostini_util.h"
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index f8a956d..e6ad9f0 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -153,6 +153,7 @@ #include "chrome/browser/ui/window_sizer/window_sizer.h" #include "chrome/browser/vr/vr_tab_helper.h" #include "chrome/common/chrome_constants.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/custom_handlers/protocol_handler.h" #include "chrome/common/pref_names.h" @@ -1289,24 +1290,34 @@ // ContentSettingsObserver::allowRunningInsecureContent. FilteredReportInsecureContentRan(resource_url); + if (allowed_per_prefs) + return true; + + if (base::FeatureList::IsEnabled(features::kMixedContentSiteSetting)) { + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + HostContentSettingsMap* content_settings = + HostContentSettingsMapFactory::GetForProfile(profile); + return content_settings->GetContentSetting( + web_contents->GetLastCommittedURL(), GURL(), + CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, + std::string()) == CONTENT_SETTING_ALLOW; + } MixedContentSettingsTabHelper* mixed_content_settings = MixedContentSettingsTabHelper::FromWebContents(web_contents); DCHECK(mixed_content_settings); - if (allowed_per_prefs || - mixed_content_settings->is_running_insecure_content_allowed()) { - return true; - } - - // Note: this is a browser-side-translation of the call to DidBlockContentType - // from inside ContentSettingsObserver::allowRunningInsecureContent. - if (!origin.host().empty()) { + bool allowed = mixed_content_settings->is_running_insecure_content_allowed(); + if (!allowed && !origin.host().empty()) { + // Note: this is a browser-side-translation of the call to + // DidBlockContentType from inside + // ContentSettingsObserver::allowRunningInsecureContent. TabSpecificContentSettings* tab_settings = TabSpecificContentSettings::FromWebContents(web_contents); DCHECK(tab_settings); tab_settings->OnContentBlockedWithDetail(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, base::UTF8ToUTF16(origin.host())); } - return false; + return allowed; } void Browser::OnDidBlockNavigation(content::WebContents* web_contents,
diff --git a/chrome/browser/ui/tabs/tab_renderer_data.cc b/chrome/browser/ui/tabs/tab_renderer_data.cc index 4116dda..0a210a5d 100644 --- a/chrome/browser/ui/tabs/tab_renderer_data.cc +++ b/chrome/browser/ui/tabs/tab_renderer_data.cc
@@ -6,6 +6,39 @@ #include "base/process/kill.h" #include "build/build_config.h" +#include "chrome/browser/favicon/favicon_utils.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/tab_ui_helper.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h" +#include "content/public/browser/web_contents.h" + +// static +TabRendererData TabRendererData::FromTabInModel(TabStripModel* model, + int index) { + content::WebContents* const contents = model->GetWebContentsAt(index); + + TabRendererData data; + TabUIHelper* const tab_ui_helper = TabUIHelper::FromWebContents(contents); + data.favicon = tab_ui_helper->GetFavicon().AsImageSkia(); + ThumbnailTabHelper* const thumbnail_tab_helper = + ThumbnailTabHelper::FromWebContents(contents); + if (thumbnail_tab_helper) + data.thumbnail = thumbnail_tab_helper->thumbnail(); + data.network_state = TabNetworkStateForWebContents(contents); + data.title = tab_ui_helper->GetTitle(); + data.visible_url = contents->GetVisibleURL(); + data.last_committed_url = contents->GetLastCommittedURL(); + data.crashed_status = contents->GetCrashedStatus(); + data.incognito = contents->GetBrowserContext()->IsOffTheRecord(); + data.pinned = model->IsTabPinned(index); + data.show_icon = data.pinned || favicon::ShouldDisplayFavicon(contents); + data.blocked = model->IsTabBlocked(index); + data.alert_state = + chrome::GetHighestPriorityTabAlertStateForContents(contents); + data.should_hide_throbber = tab_ui_helper->ShouldHideThrobber(); + return data; +} TabRendererData::TabRendererData() = default; TabRendererData::TabRendererData(const TabRendererData& other) = default;
diff --git a/chrome/browser/ui/tabs/tab_renderer_data.h b/chrome/browser/ui/tabs/tab_renderer_data.h index 392426b..f449640 100644 --- a/chrome/browser/ui/tabs/tab_renderer_data.h +++ b/chrome/browser/ui/tabs/tab_renderer_data.h
@@ -12,8 +12,12 @@ #include "ui/gfx/image/image_skia.h" #include "url/gurl.h" +class TabStripModel; + // Wraps the state needed by the renderers. struct TabRendererData { + static TabRendererData FromTabInModel(TabStripModel* model, int index); + TabRendererData(); TabRendererData(const TabRendererData& other); TabRendererData(TabRendererData&& other);
diff --git a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc index 801896c8..b69f533 100644 --- a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc
@@ -10,8 +10,8 @@ #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
diff --git a/chrome/browser/ui/views/arc_data_removal_dialog_view.cc b/chrome/browser/ui/views/arc_data_removal_dialog_view.cc index 4009c4fb..e6e269d 100644 --- a/chrome/browser/ui/views/arc_data_removal_dialog_view.cc +++ b/chrome/browser/ui/views/arc_data_removal_dialog_view.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/ui/app_list/arc/arc_data_removal_dialog.h" #include "base/macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_icon_loader.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "chrome/browser/ui/browser_dialogs.h"
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc index 93451abb..3f3583c8 100644 --- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc +++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/toolbar/toolbar_button.h" +#include "chrome/browser/ui/webui/tab_strip/tab_strip_ui.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" @@ -44,6 +45,10 @@ web_view_->web_contents()); task_manager::WebContentsTags::CreateForTabContents( web_view_->web_contents()); + + TabStripUI* tab_strip_ui = static_cast<TabStripUI*>( + web_view_->GetWebContents()->GetWebUI()->GetController()); + tab_strip_ui->Initialize(browser_); } views::NativeViewHost* WebUITabStripContainerView::GetNativeViewHost() {
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc index 135ae73..8461d34 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -67,6 +67,24 @@ omnibox::kKeywordSearchIcon, GetLayoutConstant(LOCATION_BAR_ICON_SIZE), GetColor(OmniboxPart::RESULTS_ICON))); keyword_view_->icon()->SizeToPreferredSize(); + + if (base::FeatureList::IsEnabled( + omnibox::kOmniboxSuggestionTransparencyOptions)) { + // This is intentionally not in the tab order by default, but should be + // if the user has full-acessibility mode on. This is because this is a + // tertiary priority button, which already has a Shift+Delete shortcut. + // TODO(tommycli): Make sure we announce the Shift+Delete capability in the + // accessibility node data for removable suggestions. + AddChildView(remove_suggestion_button_ = + views::CreateVectorImageButton(this).release()); + + views::InstallCircleHighlightPathGenerator(remove_suggestion_button_); + + // TODO(tommycli): We may need to update the color for theme changes. + views::SetImageFromVectorIcon(remove_suggestion_button_, + vector_icons::kCloseRoundedIcon, + GetColor(OmniboxPart::RESULTS_ICON)); + } } OmniboxResultView::~OmniboxResultView() {} @@ -95,30 +113,10 @@ suggestion_tab_switch_button_.reset(); } - if (match_.SupportsDeletion() && - base::FeatureList::IsEnabled( - omnibox::kOmniboxSuggestionTransparencyOptions)) { - // This is intentionally not in the tab order by default, but should be - // if the user has full-acessibility mode on. This is because this is a - // tertiary priority button, which already has a Shift+Delete shortcut. - // TODO(tommycli): Make sure we announce the Shift+Delete capability in the - // accessibility node data for removable suggestions. - if (!remove_suggestion_button_) { - remove_suggestion_button_ = views::CreateVectorImageButton(this); - remove_suggestion_button_->set_owned_by_client(); - - views::InstallCircleHighlightPathGenerator( - remove_suggestion_button_.get()); - - // TODO(tommycli): Make sure this is visible in Dark Mode. - views::SetImageFromVectorIcon(remove_suggestion_button_.get(), - vector_icons::kCloseRoundedIcon, - GetColor(OmniboxPart::RESULTS_ICON)); - - AddChildView(remove_suggestion_button_.get()); - } - } else { - remove_suggestion_button_.reset(); + if (remove_suggestion_button_) { + // To avoid clutter, don't show the Remove button for matches with keyword. + remove_suggestion_button_->SetVisible(match.SupportsDeletion() && + !match.associated_keyword); } Invalidate(); @@ -257,7 +255,7 @@ const ui::Event& event) { if (button == suggestion_tab_switch_button_.get()) { OpenMatch(WindowOpenDisposition::SWITCH_TO_TAB, event.time_stamp()); - } else if (button == remove_suggestion_button_.get()) { + } else if (button == remove_suggestion_button_) { // Temporarily inhibit the popup closing on blur while we open the remove // suggestion confirmation bubble. popup_contents_view_->model()->set_popup_closes_on_blur(false); @@ -298,7 +296,7 @@ // Add buttons from right to left, shrinking the suggestion width as we go. // TODO(tommycli): We should probably use a layout manager here. - if (remove_suggestion_button_) { + if (remove_suggestion_button_ && remove_suggestion_button_->GetVisible()) { const gfx::Size button_size = remove_suggestion_button_->GetPreferredSize(); suggestion_width -= button_size.width() + OmniboxMatchCellView::kMarginRight; @@ -309,7 +307,6 @@ remove_suggestion_button_->SetBounds(suggestion_width, vertical_margin, button_size.width(), button_size.height()); - remove_suggestion_button_->SetVisible(true); } if (suggestion_tab_switch_button_) { suggestion_tab_switch_button_->ProvideWidthHint(suggestion_width);
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h index 24ec719..e7d8927 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -145,7 +145,9 @@ OmniboxMatchCellView* suggestion_view_; // The leading (or left) view. OmniboxMatchCellView* keyword_view_; // The trailing (or right) view. std::unique_ptr<OmniboxTabSwitchButton> suggestion_tab_switch_button_; - std::unique_ptr<views::ImageButton> remove_suggestion_button_; + + // The "X" button at the end of the match cell, used to remove suggestions. + views::ImageButton* remove_suggestion_button_ = nullptr; base::WeakPtrFactory<OmniboxResultView> weak_factory_{this};
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.h b/chrome/browser/ui/views/page_info/page_info_bubble_view.h index adc3c93..c1381d4 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.h +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.h
@@ -87,6 +87,7 @@ VIEW_ID_PAGE_INFO_BUTTON_END_VR, VIEW_ID_PAGE_INFO_HOVER_BUTTON_VR_PRESENTATION, VIEW_ID_PAGE_INFO_BUTTON_LEAVE_SITE, + VIEW_ID_PAGE_INFO_BUTTON_IGNORE_WARNING, }; // Creates the appropriate page info bubble for the given |url|.
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.cc index 4a04884..d56289355 100644 --- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.cc
@@ -10,18 +10,22 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h" #include "chrome/browser/ui/views/bubble_anchor_util_views.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h" +#include "chrome/grit/theme_resources.h" #include "components/security_state/core/security_state.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" #include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/label.h" #include "ui/views/controls/styled_label.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/style/typography.h" #include "ui/views/widget/widget.h" #include "ui/views/window/dialog_client_view.h" #include "url/gurl.h" @@ -75,40 +79,109 @@ ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); + gfx::Insets insets = + layout_provider->GetDialogInsetsForContentType(views::TEXT, views::TEXT); + set_margins(gfx::Insets(0, 0, insets.bottom(), 0)); + // Configure layout. - views::GridLayout* layout = + views::GridLayout* bubble_layout = SetLayoutManager(std::make_unique<views::GridLayout>()); constexpr int kColumnId = 0; - views::ColumnSet* label_col_set = layout->AddColumnSet(kColumnId); - label_col_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, - 1.0, views::GridLayout::USE_PREF, 0, 0); + views::ColumnSet* bubble_col_set = bubble_layout->AddColumnSet(kColumnId); + bubble_col_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, + 1.0, views::GridLayout::USE_PREF, 0, 0); + + // TODO(crbug/996731): Add banner once available. See crrev/c/1816805/7. + + auto bottom_view = std::make_unique<views::View>(); + views::GridLayout* bottom_layout = + bottom_view->SetLayoutManager(std::make_unique<views::GridLayout>()); + views::ColumnSet* bottom_column_set = bottom_layout->AddColumnSet(0); + bottom_column_set->AddPaddingColumn(views::GridLayout::kFixedSize, + insets.left()); + bottom_column_set->AddColumn(views::GridLayout::LEADING, + views::GridLayout::FILL, 1.0, + views::GridLayout::USE_PREF, 0, 0); + bottom_column_set->AddPaddingColumn(views::GridLayout::kFixedSize, + insets.right()); // Add text description. - layout->StartRow(views::GridLayout::kFixedSize, kColumnId); - auto text_label = std::make_unique<views::Label>(l10n_util::GetStringUTF16( - safety_tips::GetSafetyTipDescriptionId(safety_tip_status))); + const int spacing = + layout_provider->GetDistanceMetric(DISTANCE_CONTROL_LIST_VERTICAL); + bottom_layout->StartRowWithPadding(views::GridLayout::kFixedSize, kColumnId, + views::GridLayout::kFixedSize, spacing); + auto text_label = std::make_unique<views::Label>( + safety_tips::GetSafetyTipDescription(safety_tip_status, suggested_url_)); text_label->SetMultiLine(true); text_label->SetLineHeight(20); text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); text_label->SizeToFit( - layout_provider->GetDistanceMetric(DISTANCE_BUBBLE_PREFERRED_WIDTH)); - layout->AddView(std::move(text_label)); + layout_provider->GetDistanceMetric(DISTANCE_BUBBLE_PREFERRED_WIDTH) - + insets.left() - insets.right()); + bottom_layout->AddView(std::move(text_label)); - // Add leave site button. - const int hover_list_spacing = layout_provider->GetDistanceMetric( - DISTANCE_RELATED_CONTROL_VERTICAL_SMALL); - layout->StartRowWithPadding(views::GridLayout::kFixedSize, kColumnId, - views::GridLayout::kFixedSize, - hover_list_spacing); - std::unique_ptr<views::Button> button( + // Add buttons. + // To make the rest of the layout simpler, they live in their own grid layout. + auto button_view = std::make_unique<views::View>(); + views::GridLayout* button_layout = + button_view->SetLayoutManager(std::make_unique<views::GridLayout>()); + views::ColumnSet* button_column_set = button_layout->AddColumnSet(0); + button_column_set->AddColumn(views::GridLayout::LEADING, + views::GridLayout::CENTER, 0.0, + views::GridLayout::USE_PREF, 0, 0); + button_column_set->AddPaddingColumn(1.f, 1); + button_column_set->AddColumn(views::GridLayout::TRAILING, + views::GridLayout::FILL, 0.0, + views::GridLayout::USE_PREF, 0, 0); + button_column_set->AddPaddingColumn( + views::GridLayout::kFixedSize, + layout_provider->GetDistanceMetric( + views::DISTANCE_RELATED_BUTTON_HORIZONTAL)); + button_column_set->AddColumn(views::GridLayout::TRAILING, + views::GridLayout::FILL, 0.0, + views::GridLayout::USE_PREF, 0, 0); + + button_layout->StartRow(views::GridLayout::kFixedSize, kColumnId); + + // More info button. + auto info_text = + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SAFETY_TIP_MORE_INFO_LINK); + auto info_link = std::make_unique<views::StyledLabel>(info_text, this); + views::StyledLabel::RangeStyleInfo link_style = + views::StyledLabel::RangeStyleInfo::CreateForLink(); + gfx::Range details_range(0, info_text.length()); + info_link->AddStyleRange(details_range, link_style); + info_link->SizeToFit(0); + info_button_ = button_layout->AddView(std::move(info_link)); + + // Ignore button. + std::unique_ptr<views::Button> ignore_button( + views::MdTextButton::CreateSecondaryUiButton( + this, + l10n_util::GetStringUTF16(IDS_PAGE_INFO_SAFETY_TIP_IGNORE_BUTTON))); + ignore_button->SetID( + PageInfoBubbleView::VIEW_ID_PAGE_INFO_BUTTON_IGNORE_WARNING); + ignore_button_ = button_layout->AddView(std::move(ignore_button)); + + // Leave site button. + std::unique_ptr<views::Button> leave_button( views::MdTextButton::CreateSecondaryUiBlueButton( this, l10n_util::GetStringUTF16( safety_tips::GetSafetyTipLeaveButtonId(safety_tip_status)))); - button->SetID(PageInfoBubbleView::VIEW_ID_PAGE_INFO_BUTTON_LEAVE_SITE); - leave_button_ = - layout->AddView(std::move(button), 1, 1, views::GridLayout::TRAILING, - views::GridLayout::LEADING); + leave_button->SetID(PageInfoBubbleView::VIEW_ID_PAGE_INFO_BUTTON_LEAVE_SITE); + leave_button_ = button_layout->AddView(std::move(leave_button)); + + bottom_layout->StartRowWithPadding(views::GridLayout::kFixedSize, kColumnId, + views::GridLayout::kFixedSize, spacing); + bottom_layout->AddView( + std::move(button_view), 1, 1, views::GridLayout::LEADING, + views::GridLayout::LEADING, + layout_provider->GetDistanceMetric(DISTANCE_BUBBLE_PREFERRED_WIDTH) - + insets.left() - insets.right(), + 0); + bubble_layout->StartRow(views::GridLayout::kFixedSize, kColumnId); + bubble_layout->AddView(std::move(bottom_view)); Layout(); SizeToContents(); @@ -159,15 +232,29 @@ switch (button->GetID()) { case PageInfoBubbleView::VIEW_ID_PAGE_INFO_BUTTON_LEAVE_SITE: action_taken_ = safety_tips::SafetyTipInteraction::kLeaveSite; - auto url = safety_tip_status_ == SafetyTipStatus::kLookalike - ? suggested_url_ - : GURL(safety_tips::kSafeUrl); - safety_tips::LeaveSite(web_contents(), url); + safety_tips::LeaveSite(web_contents(), + safety_tip_status_ == SafetyTipStatus::kLookalike + ? suggested_url_ + : GURL(safety_tips::kSafeUrl)); + return; + + case PageInfoBubbleView::VIEW_ID_PAGE_INFO_BUTTON_IGNORE_WARNING: + action_taken_ = safety_tips::SafetyTipInteraction::kDismiss; + GetWidget()->CloseWithReason( + views::Widget::ClosedReason::kCancelButtonClicked); return; } NOTREACHED(); } +void SafetyTipPageInfoBubbleView::StyledLabelLinkClicked( + views::StyledLabel* label, + const gfx::Range& range, + int event_flags) { + action_taken_ = safety_tips::SafetyTipInteraction::kLearnMore; + safety_tips::OpenHelpCenter(web_contents()); +} + namespace safety_tips { void ShowSafetyTipDialog(
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.h b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.h index 69e0fb9..4ade5f03 100644 --- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.h +++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view.h
@@ -9,6 +9,8 @@ #include "chrome/browser/ui/views/page_info/page_info_bubble_view_base.h" #include "components/security_state/core/security_state.h" #include "ui/views/controls/button/button.h" +#include "ui/views/controls/styled_label.h" +#include "ui/views/controls/styled_label_listener.h" namespace content { class WebContents; @@ -19,7 +21,6 @@ } // namespace gfx namespace views { -class Button; class View; class Widget; } // namespace views @@ -28,7 +29,8 @@ // without all of the details. Safety tip info is still displayed in the usual // PageInfoBubbleView, just less prominently. class SafetyTipPageInfoBubbleView : public PageInfoBubbleViewBase, - public views::ButtonListener { + public views::ButtonListener, + public views::StyledLabelListener { public: // If |anchor_view| is nullptr, or has no Widget, |parent_window| may be // provided to ensure this bubble is closed when the parent closes. @@ -53,9 +55,16 @@ // views::ButtonListener: void ButtonPressed(views::Button* button, const ui::Event& event) override; + // views::StyledLabelListener: + void StyledLabelLinkClicked(views::StyledLabel* label, + const gfx::Range& range, + int event_flags) override; + private: friend class SafetyTipPageInfoBubbleViewBrowserTest; + views::StyledLabel* GetLearnMoreLinkForTesting() { return info_button_; } + views::Button* GetIgnoreButtonForTesting() { return ignore_button_; } views::Button* GetLeaveButtonForTesting() { return leave_button_; } const security_state::SafetyTipStatus safety_tip_status_; @@ -67,6 +76,8 @@ // applicable (for SafetyTipStatus::kLookalike). const GURL suggested_url_; + views::StyledLabel* info_button_; + views::Button* ignore_button_; views::Button* leave_button_; base::OnceCallback<void(safety_tips::SafetyTipInteraction)> close_callback_; safety_tips::SafetyTipInteraction action_taken_ =
diff --git a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc index f45f06f3..a5532da2 100644 --- a/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/page_info/safety_tip_page_info_bubble_view_browsertest.cc
@@ -44,6 +44,7 @@ #include "ui/accessibility/ax_enums.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/window_open_disposition.h" +#include "ui/gfx/range/range.h" #include "ui/views/test/widget_test.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" @@ -200,6 +201,14 @@ PerformMouseClickOnView(bubble->GetLeaveButtonForTesting()); } + void ClickLearnMoreLink() { + // This class is a friend to SafetyTipPageInfoBubbleView. + auto* bubble = static_cast<SafetyTipPageInfoBubbleView*>( + PageInfoBubbleViewBase::GetPageInfoBubbleForTesting()); + bubble->StyledLabelLinkClicked(bubble->GetLearnMoreLinkForTesting(), + gfx::Range(), 0); + } + void CloseWarningLeaveSite(Browser* browser) { if (ui_status() == UIStatus::kDisabled) { return; @@ -301,6 +310,21 @@ ASSERT_NO_FATAL_FAILURE(CheckPageInfoDoesNotShowSafetyTipInfo(browser())); } +// Test that clicking 'learn more' opens a help center article. +IN_PROC_BROWSER_TEST_P(SafetyTipPageInfoBubbleViewBrowserTest, + LearnMoreOpensHelpCenter) { + if (ui_status() == UIStatus::kDisabled) { + return; + } + + auto kNavigatedUrl = GetURL("site1.com"); + TriggerWarning(browser(), kNavigatedUrl, WindowOpenDisposition::CURRENT_TAB); + + content::WebContentsAddedObserver new_tab_observer; + ClickLearnMoreLink(); + EXPECT_NE(kNavigatedUrl, new_tab_observer.GetWebContents()->GetURL()); +} + // If the user clicks 'leave site', the warning should re-appear when the user // re-visits the page. IN_PROC_BROWSER_TEST_P(SafetyTipPageInfoBubbleViewBrowserTest,
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc index 2030d18..91d51116 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
@@ -30,7 +30,6 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" #include "chrome/browser/ui/tabs/tab_utils.h" -#include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h" #include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab_drag_controller.h" #include "chrome/browser/ui/views/tabs/tab_strip.h" @@ -482,9 +481,9 @@ // A move may have resulted in the pinned state changing, so pass in a // TabRendererData. - tabstrip_->MoveTab(move->from_index, move->to_index, - TabRendererDataFromModel( - move->contents, move->to_index, EXISTING_TAB)); + tabstrip_->MoveTab( + move->from_index, move->to_index, + TabRendererData::FromTabInModel(model_, move->to_index)); break; } case TabStripModelChange::kReplaced: { @@ -560,37 +559,10 @@ return browser_view_->frame()->GetFrameView(); } -TabRendererData BrowserTabStripController::TabRendererDataFromModel( - WebContents* contents, - int model_index, - TabStatus tab_status) { - TabRendererData data; - TabUIHelper* const tab_ui_helper = TabUIHelper::FromWebContents(contents); - data.favicon = tab_ui_helper->GetFavicon().AsImageSkia(); - ThumbnailTabHelper* const thumbnail_tab_helper = - ThumbnailTabHelper::FromWebContents(contents); - if (thumbnail_tab_helper) - data.thumbnail = thumbnail_tab_helper->thumbnail(); - data.network_state = TabNetworkStateForWebContents(contents); - data.title = tab_ui_helper->GetTitle(); - data.visible_url = contents->GetVisibleURL(); - data.last_committed_url = contents->GetLastCommittedURL(); - data.crashed_status = contents->GetCrashedStatus(); - data.incognito = contents->GetBrowserContext()->IsOffTheRecord(); - data.pinned = model_->IsTabPinned(model_index); - data.show_icon = data.pinned || favicon::ShouldDisplayFavicon(contents); - data.blocked = model_->IsTabBlocked(model_index); - data.alert_state = - chrome::GetHighestPriorityTabAlertStateForContents(contents); - data.should_hide_throbber = tab_ui_helper->ShouldHideThrobber(); - return data; -} - void BrowserTabStripController::SetTabDataAt(content::WebContents* web_contents, int model_index) { - tabstrip_->SetTabData( - model_index, - TabRendererDataFromModel(web_contents, model_index, EXISTING_TAB)); + tabstrip_->SetTabData(model_index, + TabRendererData::FromTabInModel(model_, model_index)); } void BrowserTabStripController::AddTab(WebContents* contents, @@ -599,7 +571,7 @@ // Cancel any pending tab transition. hover_tab_selector_.CancelTabTransition(); - tabstrip_->AddTabAt(index, TabRendererDataFromModel(contents, index, NEW_TAB), + tabstrip_->AddTabAt(index, TabRendererData::FromTabInModel(model_, index), is_active); }
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h index 1212ebd..2118a35 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
@@ -20,7 +20,6 @@ class Browser; class BrowserNonClientFrameView; class Tab; -struct TabRendererData; namespace content { class WebContents; @@ -113,20 +112,9 @@ private: class TabContextMenuContents; - // The context in which TabRendererDataFromModel is being called. - enum TabStatus { - NEW_TAB, - EXISTING_TAB - }; - BrowserNonClientFrameView* GetFrameView(); const BrowserNonClientFrameView* GetFrameView() const; - // Returns the TabRendererData for the specified tab. - TabRendererData TabRendererDataFromModel(content::WebContents* contents, - int model_index, - TabStatus tab_status); - // Invokes tabstrip_->SetTabData. void SetTabDataAt(content::WebContents* web_contents, int model_index);
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc index 7d4b407..626b2d4 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc
@@ -11,7 +11,7 @@ #include "base/stl_util.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/supervised_user/supervised_user_service.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc index d8a5fa1..c88297b 100644 --- a/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h" #include "base/metrics/histogram_macros.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/screens/recommend_apps_screen.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc index 3542f432e..311bd57 100644 --- a/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc
@@ -9,8 +9,8 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/screens/supervision_transition_screen.h" #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/ui/webui/management_ui.cc b/chrome/browser/ui/webui/management_ui.cc index cf98a0cd..c7aa92a 100644 --- a/chrome/browser/ui/webui/management_ui.cc +++ b/chrome/browser/ui/webui/management_ui.cc
@@ -115,14 +115,12 @@ #endif // defined(OS_CHROMEOS) source->UseStringsJs(); + source->EnableReplaceI18nInJS(); // Add required resources. - source->AddResourcePath("management_browser_proxy.html", - IDR_MANAGEMENT_BROWSER_PROXY_HTML); source->AddResourcePath("management_browser_proxy.js", IDR_MANAGEMENT_BROWSER_PROXY_JS); - source->AddResourcePath("management_ui.html", IDR_MANAGEMENT_UI_HTML); source->AddResourcePath("management_ui.js", IDR_MANAGEMENT_UI_JS); - source->AddResourcePath("icons.html", IDR_MANAGEMENT_ICONS_HTML); + source->AddResourcePath("icons.js", IDR_MANAGEMENT_ICONS_JS); source->SetDefaultResource(IDR_MANAGEMENT_HTML); return source; }
diff --git a/chrome/browser/ui/webui/management_ui_browsertest.cc b/chrome/browser/ui/webui/management_ui_browsertest.cc index 8cd3f96..e358945 100644 --- a/chrome/browser/ui/webui/management_ui_browsertest.cc +++ b/chrome/browser/ui/webui/management_ui_browsertest.cc
@@ -59,7 +59,7 @@ // The browser is not managed. const std::string javascript = - "management.ManagementBrowserProxyImpl.getInstance()" + "window.ManagementBrowserProxyImpl.getInstance()" " .getContextualManagedData()" " .then(managed_result => " " domAutomationController.send(JSON.stringify(managed_result)));";
diff --git a/chrome/browser/ui/webui/settings/about_handler.cc b/chrome/browser/ui/webui/settings/about_handler.cc index 8c98365c..f4e4940 100644 --- a/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chrome/browser/ui/webui/settings/about_handler.cc
@@ -55,7 +55,6 @@ #if defined(OS_CHROMEOS) #include "base/i18n/time_formatting.h" -#include "base/system/sys_info.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" @@ -71,7 +70,6 @@ #include "chromeos/constants/chromeos_switches.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/update_engine_client.h" -#include "chromeos/dbus/util/version_loader.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/system/statistics_provider.h" @@ -228,21 +226,6 @@ return std::string(); } -std::unique_ptr<base::DictionaryValue> GetVersionInfo() { - std::unique_ptr<base::DictionaryValue> version_info( - new base::DictionaryValue); - - version_info->SetString("osVersion", - chromeos::version_loader::GetVersion( - chromeos::version_loader::VERSION_FULL)); - version_info->SetString("arcVersion", - chromeos::version_loader::GetARCVersion()); - version_info->SetString("osFirmware", - chromeos::version_loader::GetFirmware()); - - return version_info; -} - #endif // defined(OS_CHROMEOS) std::string UpdateStatusToString(VersionUpdater::Status status) { @@ -356,16 +339,6 @@ os_with_linux_license); html_source->AddBoolean("aboutEnterpriseManaged", IsEnterpriseManaged()); - base::Time build_time = base::SysInfo::GetLsbReleaseTime(); - base::string16 build_date = base::TimeFormatFriendlyDate(build_time); - html_source->AddString("aboutBuildDate", build_date); - - base::CommandLine::StringType command_line = - base::CommandLine::ForCurrentProcess()->GetCommandLineString(); - html_source->AddString("aboutCommandLine", command_line); - - html_source->AddString("aboutUserAgent", GetUserAgent()); - html_source->AddString("aboutJsEngineVersion", V8_VERSION_STRING); html_source->AddString("endOfLifeMessage", l10n_util::GetStringFUTF16( IDS_EOL_NOTIFICATION_EOL, ui::GetChromeOSDeviceName())); @@ -406,9 +379,6 @@ base::BindRepeating(&AboutHandler::HandleRequestUpdateOverCellular, base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getVersionInfo", base::BindRepeating(&AboutHandler::HandleGetVersionInfo, - base::Unretained(this))); - web_ui()->RegisterMessageCallback( "getRegulatoryInfo", base::BindRepeating(&AboutHandler::HandleGetRegulatoryInfo, base::Unretained(this))); @@ -601,25 +571,6 @@ } } -void AboutHandler::HandleGetVersionInfo(const base::ListValue* args) { - CHECK_EQ(1U, args->GetSize()); - std::string callback_id; - CHECK(args->GetString(0, &callback_id)); - - base::PostTaskAndReplyWithResult( - FROM_HERE, - {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE}, - base::Bind(&GetVersionInfo), - base::Bind(&AboutHandler::OnGetVersionInfoReady, - weak_factory_.GetWeakPtr(), callback_id)); -} - -void AboutHandler::OnGetVersionInfoReady( - std::string callback_id, - std::unique_ptr<base::DictionaryValue> version_info) { - ResolveJavascriptCallback(base::Value(callback_id), *version_info); -} - void AboutHandler::HandleGetRegulatoryInfo(const base::ListValue* args) { CHECK_EQ(1U, args->GetSize()); std::string callback_id;
diff --git a/chrome/browser/ui/webui/settings/about_handler.h b/chrome/browser/ui/webui/settings/about_handler.h index d585960..679bad2 100644 --- a/chrome/browser/ui/webui/settings/about_handler.h +++ b/chrome/browser/ui/webui/settings/about_handler.h
@@ -25,7 +25,6 @@ #endif // defined(OS_CHROMEOS) namespace base { -class DictionaryValue; class FilePath; class ListValue; } @@ -100,12 +99,6 @@ // Sets the release track version. void HandleSetChannel(const base::ListValue* args); - // Retrieves OS, ARC and firmware versions. - void HandleGetVersionInfo(const base::ListValue* args); - void OnGetVersionInfoReady( - std::string callback_id, - std::unique_ptr<base::DictionaryValue> version_info); - // Retrieves combined channel info. void HandleGetChannelInfo(const base::ListValue* args); // Callbacks for version_updater_->GetChannel calls.
diff --git a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h index 3a7d0549e..db3d375 100644 --- a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
@@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h index e4b5023c..4c901c99 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
@@ -16,7 +16,7 @@ #include "base/optional.h" #include "base/scoped_observer.h" #include "chrome/browser/browsing_data/site_data_size_collector.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "chromeos/disks/disk_mount_manager.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 4582dae..9b2af53 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -430,21 +430,17 @@ {"aboutUpgradeUpdatingPercent", IDS_SETTINGS_UPGRADE_UPDATING_PERCENT}, #if defined(OS_CHROMEOS) - {"aboutArcVersionLabel", IDS_SETTINGS_ABOUT_PAGE_ARC_VERSION}, - {"aboutBuildDateLabel", IDS_VERSION_UI_BUILD_DATE}, + {"aboutBuildDetailsTitle", IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS}, {"aboutChannelBeta", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_BETA}, {"aboutChannelCanary", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_CANARY}, {"aboutChannelDev", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_DEV}, {"aboutChannelLabel", IDS_SETTINGS_ABOUT_PAGE_CHANNEL}, {"aboutChannelStable", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE}, {"aboutCheckForUpdates", IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES}, - {"aboutCommandLineLabel", IDS_VERSION_UI_COMMAND_LINE}, {"aboutCurrentlyOnChannel", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL}, {"aboutDetailedBuildInfo", IDS_SETTINGS_ABOUT_PAGE_DETAILED_BUILD_INFO}, - {"aboutFirmwareLabel", IDS_SETTINGS_ABOUT_PAGE_FIRMWARE}, {"aboutOSBanner", IDS_SETTINGS_ABOUT_OS_BANNER}, {"aboutEndOfLifeTitle", IDS_SETTINGS_ABOUT_PAGE_END_OF_LIFE_TITLE}, - {"aboutPlatformLabel", IDS_SETTINGS_ABOUT_PAGE_PLATFORM}, {"aboutRelaunchAndPowerwash", IDS_SETTINGS_ABOUT_PAGE_RELAUNCH_AND_POWERWASH}, {"aboutRollbackInProgress", IDS_SETTINGS_UPGRADE_ROLLBACK_IN_PROGRESS}, @@ -453,7 +449,6 @@ IDS_SETTINGS_UPGRADE_UPDATING_CHANNEL_SWITCH}, {"aboutUpgradeSuccessChannelSwitch", IDS_SETTINGS_UPGRADE_SUCCESSFUL_CHANNEL_SWITCH}, - {"aboutUserAgentLabel", IDS_VERSION_UI_USER_AGENT}, {"aboutTPMFirmwareUpdateTitle", IDS_SETTINGS_ABOUT_TPM_FIRMWARE_UPDATE_TITLE}, {"aboutTPMFirmwareUpdateDescription", @@ -2783,6 +2778,8 @@ {"siteSettingsCategoryCookies", IDS_SETTINGS_SITE_SETTINGS_COOKIES}, {"siteSettingsCategoryHandlers", IDS_SETTINGS_SITE_SETTINGS_HANDLERS}, {"siteSettingsCategoryImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES}, + {"siteSettingsCategoryInsecureContent", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT}, {"siteSettingsCategoryLocation", IDS_SETTINGS_SITE_SETTINGS_LOCATION}, {"siteSettingsCategoryJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT}, {"siteSettingsCategoryMicrophone", IDS_SETTINGS_SITE_SETTINGS_MIC}, @@ -2819,6 +2816,10 @@ {"siteSettingsMic", IDS_SETTINGS_SITE_SETTINGS_MIC}, {"siteSettingsNotifications", IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS}, {"siteSettingsImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES}, + {"siteSettingsInsecureContent", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT}, + {"siteSettingsInsecureContentBlock", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCK}, {"siteSettingsJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT}, {"siteSettingsSound", IDS_SETTINGS_SITE_SETTINGS_SOUND}, {"siteSettingsSoundAllow", IDS_SETTINGS_SITE_SETTINGS_SOUND_ALLOW}, @@ -3113,6 +3114,10 @@ "enableRemovingAllThirdPartyCookies", base::FeatureList::IsEnabled( browsing_data::features::kEnableRemovingAllThirdPartyCookies)); + + html_source->AddBoolean( + "enableInsecureContentContentSetting", + base::FeatureList::IsEnabled(features::kMixedContentSiteSetting)); } #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/site_settings_helper.cc b/chrome/browser/ui/webui/site_settings_helper.cc index 2e949140..0cacb0b 100644 --- a/chrome/browser/ui/webui/site_settings_helper.cc +++ b/chrome/browser/ui/webui/site_settings_helper.cc
@@ -92,13 +92,13 @@ {CONTENT_SETTINGS_TYPE_HID_CHOOSER_DATA, kHidChooserDataGroupType}, {CONTENT_SETTINGS_TYPE_NATIVE_FILE_SYSTEM_WRITE_GUARD, "native-file-system-write"}, + {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script"}, // Add new content settings here if a corresponding Javascript string // representation for it is not required. Note some exceptions do have UI in // Content Settings but do not require a separate string. {CONTENT_SETTINGS_TYPE_DEFAULT, nullptr}, {CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, nullptr}, - {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, nullptr}, {CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, nullptr}, {CONTENT_SETTINGS_TYPE_APP_BANNER, nullptr}, {CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, nullptr},
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc index 3f88e89c..321ba9d 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -16,6 +16,9 @@ #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/themes/theme_service.h" #include "chrome/browser/themes/theme_service_factory.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/webui/favicon_source.h" #include "chrome/browser/ui/webui/theme_handler.h" #include "chrome/common/webui_url_constants.h" @@ -57,15 +60,27 @@ std::vector<unsigned char> result_; }; -class TabStripUIHandler : public content::WebUIMessageHandler { +class TabStripUIHandler : public content::WebUIMessageHandler, + public TabStripModelObserver { public: - explicit TabStripUIHandler(Profile* profile) - : profile_(profile), + explicit TabStripUIHandler(Browser* browser) + : browser_(browser), thumbnail_tracker_(base::Bind(&TabStripUIHandler::HandleThumbnailUpdate, - base::Unretained(this))) {} + base::Unretained(this))) { + browser_->tab_strip_model()->AddObserver(this); + } ~TabStripUIHandler() override = default; + // TabStripModelObserver: + void TabChangedAt(content::WebContents* contents, + int index, + TabChangeType change_type) override { + // TODO(crbug.com/1006946): re-fetch the TabRendererData using + // |TabRendererData::FromTabInModel()|. + } + protected: + // content::WebUIMessageHandler: void RegisterMessages() override { web_ui()->RegisterMessageCallback( "getThemeColors", base::Bind(&TabStripUIHandler::HandleGetThemeColors, @@ -84,7 +99,7 @@ const base::Value& callback_id = args->GetList()[0]; const ui::ThemeProvider& tp = - ThemeService::GetThemeProviderForProfile(profile_); + ThemeService::GetThemeProviderForProfile(browser_->profile()); // This should return an object of CSS variables to rgba values so that // the WebUI can use the CSS variables to color the tab strip @@ -115,10 +130,6 @@ colors.SetString("--tabstrip-indicator-capturing-color", color_utils::SkColorToRgbaString(tp.GetColor( ThemeProperties::COLOR_TAB_ALERT_CAPTURING))); - colors.SetString("--tabstrip-tab-blocked-color", - color_utils::SkColorToRgbaString( - ui::NativeTheme::GetInstanceForWeb()->GetSystemColor( - ui::NativeTheme::kColorId_ProminentButtonColor))); ResolveJavascriptCallback(callback_id, colors); } @@ -131,8 +142,8 @@ return; content::WebContents* tab = nullptr; - if (!extensions::ExtensionTabUtil::GetTabById(tab_id, profile_, true, - &tab)) { + if (!extensions::ExtensionTabUtil::GetTabById(tab_id, browser_->profile(), + true, &tab)) { // ID didn't refer to a valid tab. DVLOG(1) << "Invalid tab ID"; return; @@ -180,7 +191,7 @@ base::Value(encoded_image)); } - Profile* profile_; + Browser* const browser_; ThumbnailTracker thumbnail_tracker_; DISALLOW_COPY_AND_ASSIGN(TabStripUIHandler); @@ -222,7 +233,10 @@ profile, chrome::FaviconUrlFormat::kFavicon2)); web_ui->AddMessageHandler(std::make_unique<ThemeHandler>()); - web_ui->AddMessageHandler(std::make_unique<TabStripUIHandler>(profile)); } TabStripUI::~TabStripUI() {} + +void TabStripUI::Initialize(Browser* browser) { + web_ui()->AddMessageHandler(std::make_unique<TabStripUIHandler>(browser)); +}
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h index 8e8b31d..c677074 100644 --- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h +++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
@@ -9,6 +9,8 @@ #include "chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h" #include "content/public/browser/web_ui_controller.h" +class Browser; + // The WebUI version of the tab strip in the browser. It is currently only // supported on ChromeOS in tablet mode. class TabStripUI : public content::WebUIController { @@ -16,6 +18,10 @@ explicit TabStripUI(content::WebUI* web_ui); ~TabStripUI() override; + // Initialize TabStripUI with the Browser it is running in. Must be called + // exactly once. The WebUI won't work until this is called. + void Initialize(Browser* browser); + private: void HandleThumbnailUpdate(int extension_tab_id, gfx::ImageSkia image);
diff --git a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc index 432e378..07850fd 100644 --- a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc +++ b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
@@ -31,6 +31,7 @@ #include "base/time/default_tick_clock.h" #include "base/time/tick_clock.h" #include "base/time/time.h" +#include "build/branding_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/google/google_brand.h" #include "chrome/browser/obsolete_system/obsolete_system.h" @@ -74,6 +75,14 @@ // The number of days after which we identify a build/install as outdated. constexpr base::TimeDelta kOutdatedBuildAge = base::TimeDelta::FromDays(12 * 7); +constexpr bool ShouldDetectOutdatedBuilds() { +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + return true; +#else // BUILDFLAG(GOOGLE_CHROME_BRANDING) + return false; +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) +} + // Return the string that was passed as a value for the // kCheckForUpdateIntervalSec switch. std::string CmdLineInterval() { @@ -414,6 +423,9 @@ return false; } #endif + + if (!ShouldDetectOutdatedBuilds()) + return false; } base::Time network_time;
diff --git a/chrome/browser/vr/service/browser_xr_runtime.cc b/chrome/browser/vr/service/browser_xr_runtime.cc index 5f8dbbe..12bf6e8 100644 --- a/chrome/browser/vr/service/browser_xr_runtime.cc +++ b/chrome/browser/vr/service/browser_xr_runtime.cc
@@ -13,6 +13,7 @@ #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/content_features.h" #include "device/vr/buildflags/buildflags.h" #include "device/vr/vr_device.h" #include "ui/gfx/transform.h" @@ -167,6 +168,13 @@ device::mojom::XRSessionFeature::REF_SPACE_LOCAL_FLOOR, }; +constexpr device::mojom::XRSessionFeature kARCoreDeviceFeatures[] = { + device::mojom::XRSessionFeature::REF_SPACE_VIEWER, + device::mojom::XRSessionFeature::REF_SPACE_LOCAL, + device::mojom::XRSessionFeature::REF_SPACE_LOCAL_FLOOR, + device::mojom::XRSessionFeature::REF_SPACE_UNBOUNDED, +}; + #if BUILDFLAG(ENABLE_OPENVR) constexpr device::mojom::XRSessionFeature kOpenVRFeatures[] = { device::mojom::XRSessionFeature::REF_SPACE_VIEWER, @@ -241,11 +249,17 @@ bool BrowserXRRuntime::SupportsFeature( device::mojom::XRSessionFeature feature) const { switch (id_) { - // TODO(crbug.com/995370): Add ARCore feature support. - case device::mojom::XRDeviceId::ARCORE_DEVICE_ID: + // Test/fake devices support all features. case device::mojom::XRDeviceId::WEB_TEST_DEVICE_ID: case device::mojom::XRDeviceId::FAKE_DEVICE_ID: return true; + case device::mojom::XRDeviceId::ARCORE_DEVICE_ID: + // Only support DOM overlay if the feature flag is enabled. + if (feature == + device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR) { + return base::FeatureList::IsEnabled(features::kWebXrArDOMOverlay); + } + return ContainsFeature(kARCoreDeviceFeatures, feature); case device::mojom::XRDeviceId::ORIENTATION_DEVICE_ID: return ContainsFeature(kOrientationDeviceFeatures, feature); case device::mojom::XRDeviceId::GVR_DEVICE_ID:
diff --git a/chrome/browser/vr/service/vr_service_impl.cc b/chrome/browser/vr/service/vr_service_impl.cc index c9af49d..18006eb 100644 --- a/chrome/browser/vr/service/vr_service_impl.cc +++ b/chrome/browser/vr/service/vr_service_impl.cc
@@ -496,6 +496,11 @@ runtime_options->render_frame_id = render_frame_host_->GetRoutingID(); } #endif + // Make the resolved enabled features available to the runtime. + runtime_options->enabled_features.reserve(enabled_features.size()); + for (const auto& feature : enabled_features) { + runtime_options->enabled_features.push_back(feature); + } if (runtime_options->immersive) { GetSessionMetricsHelper()->ReportRequestPresent(*runtime_options);
diff --git a/chrome/browser/vr/service/xr_runtime_manager.cc b/chrome/browser/vr/service/xr_runtime_manager.cc index c4c545b..01c5491 100644 --- a/chrome/browser/vr/service/xr_runtime_manager.cc +++ b/chrome/browser/vr/service/xr_runtime_manager.cc
@@ -155,8 +155,11 @@ DVLOG(1) << __func__ << ": non-immersive AR mode is unsupported"; return nullptr; } - // Return the ARCore runtime. - return GetRuntime(device::mojom::XRDeviceId::ARCORE_DEVICE_ID); + // Return the ARCore runtime, but only if it supports all required features. + auto* runtime = GetRuntime(device::mojom::XRDeviceId::ARCORE_DEVICE_ID); + return runtime && runtime->SupportsAllFeatures(options->required_features) + ? runtime + : nullptr; } if (options->immersive) {
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index f74c4a9c..af5c5c4 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -493,6 +493,13 @@ "AcknowledgeNtpOverrideOnDeactivate", base::FEATURE_DISABLED_BY_DEFAULT}; #endif +// Enables showing an entry for mixed content in site settings, which controls +// allowing blockable mixed content. When enabled, the mixed content shield is +// not shown on the omnibox, since its functionality is replaced by the +// setting. +const base::Feature kMixedContentSiteSetting{"MixedContentSiteSetting", + base::FEATURE_DISABLED_BY_DEFAULT}; + #if !defined(OS_ANDROID) const base::Feature kOnConnectNative{"OnConnectNative", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 106e4ca..692b6fe 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -319,9 +319,11 @@ extern const base::Feature kAcknowledgeNtpOverrideOnDeactivate; #endif -#if !defined(OS_ANDROID) COMPONENT_EXPORT(CHROME_FEATURES) -extern const base::Feature kOnConnectNative; +extern const base::Feature kMixedContentSiteSetting; + +#if !defined(OS_ANDROID) +COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kOnConnectNative; #endif #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS)
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index f9f75d4..b625959 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc
@@ -222,6 +222,9 @@ const char kResetProfileSettingsLearnMoreURL[] = "https://support.google.com/chrome/?p=ui_reset_settings"; +const char kSafetyTipHelpCenterURL[] = + "https://support.google.com/chrome/?p=safety_tip"; + const char kSettingsSearchHelpURL[] = #if defined(OS_CHROMEOS) "https://support.google.com/chromebook/?p=settings_search_help";
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h index bfec16e..e839c1fb 100644 --- a/chrome/common/url_constants.h +++ b/chrome/common/url_constants.h
@@ -189,6 +189,9 @@ // "Learn more" URL for resetting profile preferences. extern const char kResetProfileSettingsLearnMoreURL[]; +// "Learn more" URL for safety tip bubble. +extern const char kSafetyTipHelpCenterURL[]; + // Help URL for the settings page's search feature. extern const char kSettingsSearchHelpURL[];
diff --git a/chrome/installer/gcapi_mac/gcapi.mm b/chrome/installer/gcapi_mac/gcapi.mm index 5ab1bbe..8052cb63 100644 --- a/chrome/installer/gcapi_mac/gcapi.mm +++ b/chrome/installer/gcapi_mac/gcapi.mm
@@ -58,8 +58,8 @@ // 10.2. int mac_os_x_minor_version = darwin_major_version - 4; - // Chrome is known to work on 10.9 - 10.13. - return mac_os_x_minor_version >= 9 && mac_os_x_minor_version <= 13; + // Chrome is known to work on 10.10 - 10.15. + return mac_os_x_minor_version >= 10 && mac_os_x_minor_version <= 15; } // Returns the pid/gid of the logged-in user, even if getuid() claims that the
diff --git a/chrome/renderer/content_settings_observer.cc b/chrome/renderer/content_settings_observer.cc index 87b2be2..e45e69f51 100644 --- a/chrome/renderer/content_settings_observer.cc +++ b/chrome/renderer/content_settings_observer.cc
@@ -8,8 +8,10 @@ #include <vector> #include "base/bind.h" +#include "base/feature_list.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_number_conversions.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/client_hints.mojom.h" #include "chrome/common/client_hints/client_hints.h" #include "chrome/common/render_messages.h" @@ -446,16 +448,27 @@ bool allowed_per_settings, const blink::WebSecurityOrigin& origin, const blink::WebURL& resource_url) { + bool allow = allowed_per_settings; + + if (base::FeatureList::IsEnabled(features::kMixedContentSiteSetting)) { + if (content_setting_rules_) { + auto setting = GetContentSettingFromRules( + content_setting_rules_->mixed_content_rules, + render_frame()->GetWebFrame(), GURL()); + allow |= (setting == CONTENT_SETTING_ALLOW); + } + } else { + allow |= allow_running_insecure_content_; + if (!allow) { + DidBlockContentType(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT); + } + } + // Note: this implementation is a mirror of // Browser::ShouldAllowRunningInsecureContent. FilteredReportInsecureContentRan(GURL(resource_url)); - if (!allow_running_insecure_content_ && !allowed_per_settings) { - DidBlockContentType(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT); - return false; - } - - return true; + return allow; } bool ContentSettingsObserver::AllowAutoplay(bool default_value) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 22bd7ec..f2c8788 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -81,6 +81,7 @@ } generate_jni("test_support_jni_headers") { + testonly = true sources = [ "android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java", ] @@ -606,9 +607,6 @@ "android/browsertests_apk/src/org/chromium/android_browsertests_apk/ChromeBrowserTestsActivity.java", "android/browsertests_apk/src/org/chromium/android_browsertests_apk/ChromeBrowserTestsApplication.java", ] - srcjar_deps = [ - "//components/module_installer/android:module_installer_build_config", - ] } jinja_template("android_browsertests_manifest") { @@ -2010,12 +2008,12 @@ "../browser/chromeos/app_mode/kiosk_crash_restore_browsertest.cc", "../browser/chromeos/apps/apk_web_app_installer_browsertest.cc", "../browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_browsertest.cc", - "../browser/chromeos/arc/arc_session_manager_browsertest.cc", "../browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher_browsertest.cc", "../browser/chromeos/arc/auth/arc_auth_service_browsertest.cc", "../browser/chromeos/arc/auth/arc_robot_auth_code_fetcher_browsertest.cc", "../browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc", "../browser/chromeos/arc/intent_helper/arc_settings_service_browsertest.cc", + "../browser/chromeos/arc/session/arc_session_manager_browsertest.cc", "../browser/chromeos/arc/user_session/arc_user_session_service_browsertest.cc", "../browser/chromeos/attestation/attestation_policy_browsertest.cc", "../browser/chromeos/base/locale_util_browsertest.cc", @@ -3671,10 +3669,6 @@ "//chrome/android/modules/dev_ui/provider:java", ] } - - srcjar_deps = [ - "//components/module_installer/android:module_installer_build_config", - ] } else { # !is_android sources += [
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc index 68a2a83..06b05c5 100644 --- a/chrome/test/base/testing_profile.cc +++ b/chrome/test/base/testing_profile.cc
@@ -142,7 +142,7 @@ #endif #if defined(OS_CHROMEOS) -#include "chrome/browser/chromeos/arc/arc_service_launcher.h" +#include "chrome/browser/chromeos/arc/session/arc_service_launcher.h" #include "chrome/browser/chromeos/net/delay_network_call.h" #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chromeos/components/account_manager/account_manager.h"
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js index 0325249..fd5dc748 100644 --- a/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js +++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/attributes.js
@@ -24,10 +24,10 @@ 'ariaRowCount', 'ariaColumnCount' ]; var TableCellAttributes = [ 'tableCellColumnIndex', - 'ariaCellColumnIndex', + 'tableCellAriaColumnIndex', 'tableCellColumnSpan', 'tableCellRowIndex', - 'ariaCellRowIndex', + 'tableCellAriaRowIndex', 'tableCellRowSpan' ]; var disabledTests = [ @@ -204,60 +204,60 @@ var row1 = table.firstChild; var cell1 = row1.firstChild; assertEq(0, cell1.tableCellColumnIndex); - assertEq(51, cell1.ariaCellColumnIndex); + assertEq(51, cell1.tableCellAriaColumnIndex); assertEq(1, cell1.tableCellColumnSpan); assertEq(0, cell1.tableCellRowIndex); - assertEq(101, cell1.ariaCellRowIndex); + assertEq(101, cell1.tableCellAriaRowIndex); assertEq(1, cell1.tableCellRowSpan); var cell2 = cell1.nextSibling; assertEq(1, cell2.tableCellColumnIndex); - assertEq(52, cell2.ariaCellColumnIndex); + assertEq(52, cell2.tableCellAriaColumnIndex); assertEq(1, cell2.tableCellColumnSpan); assertEq(0, cell2.tableCellRowIndex); - assertEq(101, cell2.ariaCellRowIndex); + assertEq(101, cell2.tableCellAriaRowIndex); assertEq(1, cell2.tableCellRowSpan); var cell3 = cell2.nextSibling; assertEq(2, cell3.tableCellColumnIndex); - assertEq(53, cell3.ariaCellColumnIndex); + assertEq(53, cell3.tableCellAriaColumnIndex); assertEq(1, cell3.tableCellColumnSpan); assertEq(0, cell3.tableCellRowIndex); - assertEq(101, cell3.ariaCellRowIndex); + assertEq(101, cell3.tableCellAriaRowIndex); assertEq(1, cell3.tableCellRowSpan); var row2 = row1.nextSibling; var cell4 = row2.firstChild; assertEq(0, cell4.tableCellColumnIndex); - assertEq(51, cell4.ariaCellColumnIndex); + assertEq(51, cell4.tableCellAriaColumnIndex); assertEq(2, cell4.tableCellColumnSpan); assertEq(1, cell4.tableCellRowIndex); - assertEq(102, cell4.ariaCellRowIndex); + assertEq(102, cell4.tableCellAriaRowIndex); assertEq(1, cell4.tableCellRowSpan); var cell5 = cell4.nextSibling; assertEq(2, cell5.tableCellColumnIndex); - assertEq(53, cell5.ariaCellColumnIndex); + assertEq(53, cell5.tableCellAriaColumnIndex); assertEq(1, cell5.tableCellColumnSpan); assertEq(1, cell5.tableCellRowIndex); - assertEq(102, cell5.ariaCellRowIndex); + assertEq(102, cell5.tableCellAriaRowIndex); assertEq(2, cell5.tableCellRowSpan); var row3 = row2.nextSibling; var cell6 = row3.firstChild; assertEq(0, cell6.tableCellColumnIndex); - assertEq(51, cell6.ariaCellColumnIndex); + assertEq(51, cell6.tableCellAriaColumnIndex); assertEq(1, cell6.tableCellColumnSpan); assertEq(2, cell6.tableCellRowIndex); - assertEq(103, cell6.ariaCellRowIndex); + assertEq(103, cell6.tableCellAriaRowIndex); assertEq(1, cell6.tableCellRowSpan); var cell7 = cell6.nextSibling; assertEq(1, cell7.tableCellColumnIndex); - assertEq(52, cell7.ariaCellColumnIndex); + assertEq(52, cell7.tableCellAriaColumnIndex); assertEq(1, cell7.tableCellColumnSpan); assertEq(2, cell7.tableCellRowIndex); - assertEq(103, cell7.ariaCellRowIndex); + assertEq(103, cell7.tableCellAriaRowIndex); assertEq(1, cell7.tableCellRowSpan); chrome.test.succeed();
diff --git a/chrome/test/data/local_ntp/customize_menu_browsertest.js b/chrome/test/data/local_ntp/customize_menu_browsertest.js index f71392a..21b86e5 100644 --- a/chrome/test/data/local_ntp/customize_menu_browsertest.js +++ b/chrome/test/data/local_ntp/customize_menu_browsertest.js
@@ -30,6 +30,9 @@ COLORS_THEME_UNINSTALL: 'colors-theme-uninstall', CUSTOMIZATION_MENU: 'customization-menu', CUSTOM_BG: 'custom-bg', + CUSTOM_BG_ATTR: 'custom-bg-attr', + CUSTOM_BG_ATTR_LINE1: 'attr1', + CUSTOM_BG_ATTR_LINE2: 'attr2', CUSTOM_BG_PREVIEW: 'custom-bg-preview', EDIT_BG: 'edit-bg', MENU_BACK: 'menu-back', @@ -338,13 +341,29 @@ $(test.customizeMenu.IDS.EDIT_BG).click(); - // Select a background. setupFakeAsyncImageLoad('coll_tile_0'); $('coll_tile_0').click(); - $('coll_0_img_tile_0').click(); - // Check that correct styling is applied to the page. + // Check styling and attribution for default background. + assertFalse(document.body.classList.contains('alternate-logo')); + assertEquals(null, $(test.customizeMenu.IDS.CUSTOM_BG_ATTR_LINE1)); + assertEquals(null, $(test.customizeMenu.IDS.CUSTOM_BG_ATTR_LINE2)); + assertEquals('', $(test.customizeMenu.IDS.CUSTOM_BG_ATTR).href); + + // Select a background and check that correct styling and attributes are + // applied to the page. + const image_tile = $('coll_0_img_tile_0'); + image_tile.click(); assertTrue(document.body.classList.contains('alternate-logo')); + assertEquals( + image_tile.dataset.attributionLine1, + $(test.customizeMenu.IDS.CUSTOM_BG_ATTR_LINE1).innerText); + assertEquals( + image_tile.dataset.attributionLine2, + $(test.customizeMenu.IDS.CUSTOM_BG_ATTR_LINE2).innerText); + assertEquals( + image_tile.dataset.attributionActionUrl, + $(test.customizeMenu.IDS.CUSTOM_BG_ATTR).href); }; /** @@ -1209,28 +1228,28 @@ oldImageLoader(event); collImg = [ { - attributionActionUrl: 'https://www.google.com', + attributionActionUrl: 'https://www.google.com/', attributions: ['test1', 'attribution1'], collectionId: 'collection1', imageUrl: 'chrome-search://local-ntp/background1.jpg', thumbnailImageUrl: 'chrome-search://local-ntp/background_thumbnail.jpg1' }, { - attributionActionUrl: 'https://www.google.com', + attributionActionUrl: 'https://www.google.com/', attributions: ['test2', 'attribution2'], collectionId: 'collection1', imageUrl: 'chrome-search://local-ntp/background2.jpg', thumbnailImageUrl: 'chrome-search://local-ntp/background_thumbnail.jpg2' }, { - attributionActionUrl: 'https://www.google.com', + attributionActionUrl: 'https://www.google.com/', attributions: ['test3', 'attribution3'], collectionId: 'collection1', imageUrl: 'chrome-search://local-ntp/background3.jpg', thumbnailImageUrl: 'chrome-search://local-ntp/background_thumbnail.jpg3' }, { - attributionActionUrl: 'https://www.google.com', + attributionActionUrl: 'https://www.google.com/', attributions: ['test4', 'attribution4'], collectionId: 'collection1', imageUrl: 'chrome-search://local-ntp/background4.jpg',
diff --git a/chrome/test/data/webui/cr_elements/cr_dialog_test.js b/chrome/test/data/webui/cr_elements/cr_dialog_test.js index f07cace..079e005 100644 --- a/chrome/test/data/webui/cr_elements/cr_dialog_test.js +++ b/chrome/test/data/webui/cr_elements/cr_dialog_test.js
@@ -238,27 +238,43 @@ <cr-dialog> <div slot="title">title</div> <div slot="body"> - <input></input> - <input type="text"></input> - <input type="password"></input> - <input type="checkbox"></input> <foobar></foobar> + <input type="checkbox"> + <input type="text"> + + <cr-input type="search"></cr-input> + <cr-input type="text"></cr-input> + + <div id="withShadow"></div> <button class="action-button">active</button> - <cr-input></cr-input> </div> </cr-dialog>`; const dialog = document.body.querySelector('cr-dialog'); - const inputElement = document.body.querySelector('input:not([type])'); - const inputTextElement = document.body.querySelector('input[type="text"]'); - const inputPasswordElement = - document.body.querySelector('input[type="password"]'); + const otherElement = document.body.querySelector('foobar'); const inputCheckboxElement = document.body.querySelector('input[type="checkbox"]'); - const otherElement = document.body.querySelector('foobar'); + const inputTextElement = document.body.querySelector('input[type="text"]'); + + // Manually set the |type| property since cr-input is not actually imported + // as part of this test, and therefore the element is not upgraded, as it + // would normally. + const crTextInputElement = + document.body.querySelector('cr-input[type="text"]'); + crTextInputElement.type = 'text'; + const crSearchInputElement = + document.body.querySelector('cr-input[type="search"]'); + crSearchInputElement.type = 'search'; + + // Attach a cr-input element nested within another element. + const containerElement = document.body.querySelector('#withShadow'); + const shadow = containerElement.attachShadow({mode: 'open'}); + const crInputNested = document.createElement('cr-input'); + crInputNested.type = 'text'; + shadow.appendChild(crInputNested); + const actionButton = document.body.querySelector('.action-button'); - const crInputElement = document.body.querySelector('cr-input'); // MockInteractions triggers event listeners synchronously. let clickedCounter = 0; @@ -266,62 +282,25 @@ clickedCounter++; }); - // Only certain types of <input> trigger a dialog submit. + // Enter on anything other than cr-input should not be accepted. pressEnter(otherElement); assertEquals(0, clickedCounter); - // "type" defaults to text, which triggers the click. - pressEnter(inputElement); - assertEquals(1, clickedCounter); - pressEnter(inputTextElement); - assertEquals(2, clickedCounter); - pressEnter(inputPasswordElement); - assertEquals(3, clickedCounter); pressEnter(inputCheckboxElement); - assertEquals(3, clickedCounter); - // Also trigger dialog submit if code synthesizes enter on a cr-input - // without targeting the underlying input. - pressEnter(crInputElement); - assertEquals(4, clickedCounter); - }); + assertEquals(0, clickedCounter); + pressEnter(inputTextElement); + assertEquals(0, clickedCounter); - // Test that enter key presses trigger an action button click, even if the - // even was retargeted, e.g. because the input was really a cr-input, the - // cr-input was part of another custom element, etc. - test('enter keys are processed even if event was retargeted', function() { - document.body.innerHTML = ` - <dom-module id="test-element"> - <template><input></input></template> - </dom-module> + // Enter on a cr-input with type "search" should not be accepted. + pressEnter(crSearchInputElement); + assertEquals(0, clickedCounter); - <cr-dialog> - <div slot="title">title</div> - <div slot="body"> - <test-element></test-element> - <button class="action-button">active</button> - </div> - </cr-dialog>`; - - Polymer({ - is: 'test-element', - }); - - const dialog = document.body.querySelector('cr-dialog'); - - const inputWrapper = document.body.querySelector('test-element'); - assertTrue(!!inputWrapper); - const inputElement = inputWrapper.shadowRoot.querySelector('input'); - const actionButton = document.body.querySelector('.action-button'); - assertTrue(!!inputElement); - assertTrue(!!actionButton); - - // MockInteractions triggers event listeners synchronously. - let clickedCounter = 0; - actionButton.addEventListener('click', function() { - clickedCounter++; - }); - - pressEnter(inputElement); + // Enter on a cr-input with type "text" should be accepted. + pressEnter(crTextInputElement); assertEquals(1, clickedCounter); + + // Enter on a nested <cr-input> should be accepted. + pressEnter(crInputNested); + assertEquals(2, clickedCounter); }); test('focuses [autofocus] instead of title when present', function() {
diff --git a/chrome/test/data/webui/settings/about_page_tests.js b/chrome/test/data/webui/settings/about_page_tests.js index f2bbc226..88a25c7 100644 --- a/chrome/test/data/webui/settings/about_page_tests.js +++ b/chrome/test/data/webui/settings/about_page_tests.js
@@ -678,24 +678,13 @@ }); test('Initialization', async () => { - const versionInfo = { - arcVersion: 'dummyArcVersion', - osFirmware: 'dummyOsFirmware', - osVersion: 'dummyOsVersion', - }; - browserProxy.setVersionInfo(versionInfo); - page = document.createElement('settings-detailed-build-info'); document.body.appendChild(page); await Promise.all([ browserProxy.whenCalled('pageReady'), - browserProxy.whenCalled('getVersionInfo'), browserProxy.whenCalled('getChannelInfo'), ]); - assertEquals(versionInfo.arcVersion, page.$.arcVersion.textContent); - assertEquals(versionInfo.osVersion, page.$.osVersion.textContent); - assertEquals(versionInfo.osFirmware, page.$.osFirmware.textContent); }); /**
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js index 87f0ca2..4c081383 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -13,7 +13,7 @@ // Only run in release builds because we frequently see test timeouts in debug. // We suspect this is because the settings page loads slowly in debug. // https://crbug.com/1003483 -GEN('#if defined(NDEBUG)'); +// GEN('#if defined(NDEBUG)'); GEN('#include "ash/public/cpp/ash_features.h"'); GEN('#include "build/branding_buildflags.h"'); @@ -1069,4 +1069,4 @@ mocha.run(); }); -GEN('#endif // defined(NDEBUG)'); +// GEN('#endif // defined(NDEBUG)');
diff --git a/chrome/test/data/webui/settings/site_details_tests.js b/chrome/test/data/webui/settings/site_details_tests.js index e886e50..8e3354702 100644 --- a/chrome/test/data/webui/settings/site_details_tests.js +++ b/chrome/test/data/webui/settings/site_details_tests.js
@@ -97,6 +97,9 @@ [test_util.createRawSiteException('https://foo.com:443', { setting: settings.ContentSetting.BLOCK, })]), + test_util.createContentSettingTypeToValuePair( + settings.ContentSettingsTypes.MIXEDSCRIPT, + [test_util.createRawSiteException('https://foo.com:443')]), ], [ test_util.createContentSettingTypeToValuePair( settings.ContentSettingsTypes.USB_DEVICES, @@ -151,6 +154,9 @@ optionalSiteDetailsContentSettingsTypes[settings.ContentSettingsTypes .NATIVE_FILE_SYSTEM_WRITE] = 'enableNativeFileSystemWriteContentSetting'; + optionalSiteDetailsContentSettingsTypes[settings.ContentSettingsTypes + .MIXEDSCRIPT] = + 'enableInsecureContentContentSetting'; browserProxy.setPrefs(prefs);
diff --git a/chrome/test/data/webui/settings/test_about_page_browser_proxy.js b/chrome/test/data/webui/settings/test_about_page_browser_proxy.js index fa00087d..979ca59 100644 --- a/chrome/test/data/webui/settings/test_about_page_browser_proxy.js +++ b/chrome/test/data/webui/settings/test_about_page_browser_proxy.js
@@ -14,10 +14,9 @@ if (cr.isChromeOS) { methodNames.push( - 'getChannelInfo', 'getVersionInfo', 'getRegulatoryInfo', - 'checkInternetConnection', 'getEnabledReleaseNotes', - 'getEndOfLifeInfo', 'launchReleaseNotes', 'openOsHelpPage', - 'refreshTPMFirmwareUpdateStatus', 'setChannel'); + 'getChannelInfo', 'getRegulatoryInfo', 'checkInternetConnection', + 'getEnabledReleaseNotes', 'getEndOfLifeInfo', 'launchReleaseNotes', + 'openOsHelpPage', 'refreshTPMFirmwareUpdateStatus', 'setChannel'); } if (cr.isMac) { @@ -30,13 +29,6 @@ this.updateStatus_ = UpdateStatus.UPDATED; if (cr.isChromeOS) { - /** @private {!VersionInfo} */ - this.versionInfo_ = { - arcVersion: '', - osFirmware: '', - osVersion: '', - }; - /** @private {!ChannelInfo} */ this.channelInfo_ = { currentChannel: BrowserChannel.BETA, @@ -106,10 +98,6 @@ } if (cr.isChromeOS) { - /** @param {!VersionInfo} */ - TestAboutPageBrowserProxy.prototype.setVersionInfo = function(versionInfo) { - this.versionInfo_ = versionInfo; - }; /** @param {boolean} canChangeChannel */ TestAboutPageBrowserProxy.prototype.setCanChangeChannel = function( @@ -157,12 +145,6 @@ }; /** @override */ - TestAboutPageBrowserProxy.prototype.getVersionInfo = function() { - this.methodCalled('getVersionInfo'); - return Promise.resolve(this.versionInfo_); - }; - - /** @override */ TestAboutPageBrowserProxy.prototype.getEnabledReleaseNotes = function() { this.methodCalled('getEnabledReleaseNotes'); return Promise.resolve(this.hasReleaseNotes_);
diff --git a/chromecast/bindings/BUILD.gn b/chromecast/bindings/BUILD.gn index 0e6e643..0405012 100644 --- a/chromecast/bindings/BUILD.gn +++ b/chromecast/bindings/BUILD.gn
@@ -5,7 +5,7 @@ import("//tools/grit/grit_rule.gni") if (is_fuchsia) { - import("//build/config/fuchsia/rules.gni") + import("//build/config/fuchsia/generate_runner_scripts.gni") } source_set("named_message_port_connector_resources") {
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java index f09b25e..f794749 100644 --- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java +++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
@@ -40,8 +40,10 @@ } private void initView() { + FrameLayout.LayoutParams matchParent = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); addView(LayoutInflater.from(getContext()) - .inflate(R.layout.cast_web_contents_activity, null)); + .inflate(R.layout.cast_web_contents_activity, null), matchParent); } public void onStart(Bundle startArgumentsBundle) {
diff --git a/chromecast/browser/webview/webview_grpc_service.cc b/chromecast/browser/webview/webview_grpc_service.cc index 0822b4a..3d4e4be7 100644 --- a/chromecast/browser/webview/webview_grpc_service.cc +++ b/chromecast/browser/webview/webview_grpc_service.cc
@@ -157,7 +157,9 @@ base::Passed(std::move(request_)))); request_ = std::make_unique<webview::WebviewRequest>(); - io_.Read(request_.get(), &read_callback_); + std::unique_lock<std::mutex> l(send_lock_); + if (!errored_) + io_.Read(request_.get(), &read_callback_); } else if (!Initialize()) { io_.Finish(grpc::Status(grpc::FAILED_PRECONDITION, "Failed initialization"), &destroy_callback_);
diff --git a/chromecast/external_mojo/external_service_support/external_connector.h b/chromecast/external_mojo/external_service_support/external_connector.h index 9c8fd6c5..bae3e60 100644 --- a/chromecast/external_mojo/external_service_support/external_connector.h +++ b/chromecast/external_mojo/external_service_support/external_connector.h
@@ -14,6 +14,7 @@ #include "chromecast/external_mojo/public/mojom/connector.mojom.h" #include "mojo/public/cpp/bindings/interface_ptr.h" #include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/system/message_pipe.h" @@ -61,6 +62,13 @@ mojo::MakeRequest(ptr).PassMessagePipe()); } + template <typename Interface> + void BindInterface(const std::string& service_name, + mojo::PendingRemote<Interface>* ptr) { + BindInterface(service_name, Interface::Name_, + ptr->InitWithNewPipeAndPassReceiver().PassPipe()); + } + virtual void BindInterface(const std::string& service_name, const std::string& interface_name, mojo::ScopedMessagePipeHandle interface_pipe) = 0;
diff --git a/chromecast/media/audio/cast_audio_device_factory.cc b/chromecast/media/audio/cast_audio_device_factory.cc index 898f085..0d106b4 100644 --- a/chromecast/media/audio/cast_audio_device_factory.cc +++ b/chromecast/media/audio/cast_audio_device_factory.cc
@@ -21,10 +21,15 @@ public: explicit NonSwitchableAudioRendererSink( scoped_refptr<::media::AudioOutputDevice> output_device) - : output_device_(std::move(output_device)) {} + : output_device_(std::move(output_device)), is_initialized_(false) {} void Initialize(const ::media::AudioParameters& params, RenderCallback* callback) override { + // NonSwitchableAudioRendererSink derives from RestartableRenderSink which + // does allow calling Initialize and Play again after stopping. + if (is_initialized_) + return; + is_initialized_ = true; output_device_->Initialize(params, callback); } @@ -69,6 +74,7 @@ private: scoped_refptr<::media::AudioOutputDevice> output_device_; + bool is_initialized_; }; scoped_refptr<::media::AudioOutputDevice> NewOutputDevice(
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 7e5bb6be9..0efc17b8 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -12566.0.0 \ No newline at end of file +12567.0.0 \ No newline at end of file
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index 41685be..49de5f4 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -1376,35 +1376,6 @@ Refresh(); } -void PersonalDataManager::MoveJapanCityToStreetAddress() { - if (!database_helper_->GetLocalDatabase()) - return; - - // Don't run if the migration has already been performed. - if (pref_service_->GetBoolean(prefs::kAutofillJapanCityFieldMigrated)) - return; - - base::string16 japan_country_code = base::ASCIIToUTF16("JP"); - base::string16 line_separator = base::ASCIIToUTF16("\n"); - for (AutofillProfile* profile : GetProfiles()) { - base::string16 country_code = profile->GetRawInfo(ADDRESS_HOME_COUNTRY); - base::string16 city = profile->GetRawInfo(ADDRESS_HOME_CITY); - if (country_code == japan_country_code && !city.empty()) { - base::string16 street_address = - profile->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS); - street_address = street_address.empty() - ? city - : street_address + line_separator + city; - profile->SetRawInfo(ADDRESS_HOME_STREET_ADDRESS, street_address); - profile->SetRawInfo(ADDRESS_HOME_CITY, base::string16()); - UpdateProfileInDB(*profile, /*enforced=*/true); - } - } - - // Set the pref so that this migration is never run again. - pref_service_->SetBoolean(prefs::kAutofillJapanCityFieldMigrated, true); -} - void PersonalDataManager::OnValidated(const AutofillProfile* profile) { if (!profile) return; @@ -2417,9 +2388,6 @@ // Ran everytime it is called. ClearProfileNonSettingsOrigins(); - - // One-time fix, otherwise NOP. - MoveJapanCityToStreetAddress(); } void PersonalDataManager::ApplyCardFixesAndCleanups() {
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index 60af2d7..0a83a6f 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -461,8 +461,6 @@ FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, ClearCreditCardNonSettingsOrigins); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, - MoveJapanCityToStreetAddress); - FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, RequestProfileServerValidity); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, GetProfileSuggestions_Validity); @@ -550,12 +548,6 @@ void ClearProfileNonSettingsOrigins(); void ClearCreditCardNonSettingsOrigins(); - // Appends the value of the city field of a JP address to its street address - // field, separated by a newline, and clears the city field. - // TODO(rouslan): Remove this migration in or after October 2019. See bug: - // https://crbug.com/871301 - void MoveJapanCityToStreetAddress(); - // Called when the |profile| is validated by the AutofillProfileValidator, // updates the profiles on the |ongoing_profile_changes_| and the DB. virtual void OnValidated(const AutofillProfile* profile);
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index a1123b2..78caa79 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -286,17 +286,6 @@ return account_info; } - void MoveJapanCityToStreetAddress(PersonalDataManager* personal_data, - int move_times) { - base::RunLoop run_loop; - EXPECT_CALL(personal_data_observer_, OnPersonalDataFinishedProfileTasks()) - .WillRepeatedly(QuitMessageLoop(&run_loop)); - EXPECT_CALL(personal_data_observer_, OnPersonalDataChanged()) - .Times(move_times); - personal_data->MoveJapanCityToStreetAddress(); - run_loop.Run(); - } - base::test::SingleThreadTaskEnvironment task_environment_{ base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; std::unique_ptr<PrefService> prefs_; @@ -6881,108 +6870,6 @@ personal_data_->GetCreditCardsToSuggest(false)[3]->origin()); } -// Tests that all city fields in a Japan profile are moved to the street address -// field. -TEST_F(PersonalDataManagerTest, MoveJapanCityToStreetAddress) { - // Turn on sync feature to avoid calling MoveJapanCityToStreetAddress on - // adding the profiles implicitly. - ASSERT_TRUE(TurnOnSyncFeature()); - // A US profile with both street address and a city. - std::string guid0 = base::GenerateGUID(); - { - AutofillProfile profile0(guid0, test::kEmptyOrigin); - test::SetProfileInfo(&profile0, "Homer", "J", "Simpson", - "homer.simpson@abc.com", "", "742. Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", ""); - AddProfileToPersonalDataManager(profile0); - } - - // A JP profile with both street address and a city. - std::string guid1 = base::GenerateGUID(); - { - AutofillProfile profile1(guid1, test::kEmptyOrigin); - test::SetProfileInfo(&profile1, "Homer", "J", "Simpson", - "homer.simpson@abc.com", "", "742. Evergreen Terrace", - "", "Springfield", "IL", "91601", "JP", ""); - AddProfileToPersonalDataManager(profile1); - } - - // A JP profile with only a city. - std::string guid2 = base::GenerateGUID(); - { - AutofillProfile profile2(guid2, test::kEmptyOrigin); - test::SetProfileInfo(&profile2, "Homer", "J", "Simpson", - "homer.simpson@abc.com", "", "", "", "Springfield", - "IL", "91601", "JP", ""); - AddProfileToPersonalDataManager(profile2); - } - - // A JP profile with only a street address. - std::string guid3 = base::GenerateGUID(); - { - AutofillProfile profile3(guid3, test::kEmptyOrigin); - test::SetProfileInfo(&profile3, "Homer", "J", "Simpson", - "homer.simpson@abc.com", "", "742. Evergreen Terrace", - "", "", "IL", "91601", "JP", ""); - AddProfileToPersonalDataManager(profile3); - } - - // A JP profile with neither a street address nor a city. - std::string guid4 = base::GenerateGUID(); - { - AutofillProfile profile4(guid4, test::kEmptyOrigin); - test::SetProfileInfo(&profile4, "Homer", "J", "Simpson", - "homer.simpson@abc.com", "", "", "", "", "IL", "91601", - "JP", ""); - AddProfileToPersonalDataManager(profile4); - } - auto profiles = personal_data_->GetProfiles(); - ASSERT_EQ(5U, profiles.size()); - - MoveJapanCityToStreetAddress( - personal_data_.get(), - 2); // For the japan profiles where the city is not empty. - - { - AutofillProfile* profile0 = personal_data_->GetProfileByGUID(guid0); - EXPECT_EQ(base::ASCIIToUTF16("742. Evergreen Terrace"), - profile0->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); - EXPECT_EQ(base::ASCIIToUTF16("Springfield"), - profile0->GetRawInfo(ADDRESS_HOME_CITY)); - } - - { - AutofillProfile* profile1 = personal_data_->GetProfileByGUID(guid1); - EXPECT_EQ(base::ASCIIToUTF16("742. Evergreen Terrace\nSpringfield"), - profile1->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); - EXPECT_EQ(base::ASCIIToUTF16("742. Evergreen Terrace"), - profile1->GetRawInfo(ADDRESS_HOME_LINE1)); - EXPECT_EQ(base::ASCIIToUTF16("Springfield"), - profile1->GetRawInfo(ADDRESS_HOME_LINE2)); - EXPECT_TRUE(profile1->GetRawInfo(ADDRESS_HOME_CITY).empty()); - } - - { - AutofillProfile* profile2 = personal_data_->GetProfileByGUID(guid2); - EXPECT_EQ(base::ASCIIToUTF16("Springfield"), - profile2->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); - EXPECT_TRUE(profile2->GetRawInfo(ADDRESS_HOME_CITY).empty()); - } - - { - AutofillProfile* profile3 = personal_data_->GetProfileByGUID(guid3); - EXPECT_EQ(base::ASCIIToUTF16("742. Evergreen Terrace"), - profile3->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); - EXPECT_TRUE(profile3->GetRawInfo(ADDRESS_HOME_CITY).empty()); - } - - { - AutofillProfile* profile4 = personal_data_->GetProfileByGUID(guid4); - EXPECT_TRUE(profile4->GetRawInfo(ADDRESS_HOME_STREET_ADDRESS).empty()); - EXPECT_TRUE(profile4->GetRawInfo(ADDRESS_HOME_CITY).empty()); - } -} - // Tests that all the non settings origins of autofill profiles are cleared even // if sync is disabled. TEST_F(
diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc index 3872d01..1607b0d 100644 --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc
@@ -18,7 +18,6 @@ // was found. int GetSyncTransportOptInBitFieldForAccount(const PrefService* prefs, const std::string& account_hash) { - auto* dictionary = prefs->GetDictionary(prefs::kAutofillSyncTransportOptIn); // If there is no dictionary it means the account didn't opt-in. Use 0 because @@ -62,9 +61,8 @@ // Boolean that is true if Autofill is enabled and allowed to save data. const char kAutofillEnabledDeprecated[] = "autofill.enabled"; -// Boolean that is true if Japan address city field has been migrated to be a -// part of the street field. -const char kAutofillJapanCityFieldMigrated[] = +// Deprecated 10/2019. +const char kAutofillJapanCityFieldMigratedDeprecated[] = "autofill.japan_city_field_migrated_to_street_address"; // Integer that is set to the last version where the profile deduping routine @@ -167,7 +165,6 @@ prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true); registry->RegisterIntegerPref( prefs::kAutofillCreditCardSigninPromoImpressionCount, 0); - registry->RegisterBooleanPref(prefs::kAutofillJapanCityFieldMigrated, false); registry->RegisterBooleanPref(prefs::kAutofillWalletImportEnabled, true); registry->RegisterBooleanPref( prefs::kAutofillWalletImportStorageCheckboxState, true); @@ -186,6 +183,10 @@ registry->RegisterTimePref(prefs::kAutofillUploadEventsLastResetTimestamp, base::Time()); registry->RegisterDictionaryPref(prefs::kAutofillSyncTransportOptIn); + + // Deprecated prefs registered for migration. + registry->RegisterBooleanPref(kAutofillJapanCityFieldMigratedDeprecated, + false); } void MigrateDeprecatedAutofillPrefs(PrefService* prefs) { @@ -216,6 +217,9 @@ prefs->SetBoolean(kAutofillProfileEnabled, prefs->GetBoolean(kAutofillEnabledDeprecated)); } + + // Added 10/2019. + prefs->ClearPref(kAutofillJapanCityFieldMigratedDeprecated); } bool IsAutocompleteEnabled(const PrefService* prefs) {
diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h index 01679b97..7558441a2 100644 --- a/components/autofill/core/common/autofill_prefs.h +++ b/components/autofill/core/common/autofill_prefs.h
@@ -26,7 +26,7 @@ extern const char kAutofillCreditCardSigninPromoImpressionCount[]; // Please use kAutofillCreditCardEnabled and kAutofillProfileEnabled instead. extern const char kAutofillEnabledDeprecated[]; -extern const char kAutofillJapanCityFieldMigrated[]; +extern const char kAutofillJapanCityFieldMigratedDeprecated[]; extern const char kAutofillLastVersionDeduped[]; extern const char kAutofillLastVersionValidated[]; extern const char kAutofillLastVersionDisusedAddressesDeleted[];
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc index b60c49a9..6c4ff4b 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -378,9 +378,10 @@ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); Register(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script", - CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, - WhitelistedSchemes(), ValidSettings(), - WebsiteSettingsInfo::SINGLE_ORIGIN_WITH_EMBEDDED_EXCEPTIONS_SCOPE, + CONTENT_SETTING_BLOCK, WebsiteSettingsInfo::UNSYNCABLE, + WhitelistedSchemes(), + ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK), + WebsiteSettingsInfo::SINGLE_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE, ContentSettingsInfo::PERSISTENT,
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc index 4cba738..6b22ca5 100644 --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -124,6 +124,9 @@ CONTENT_SETTINGS_TYPE_IMAGES, ResourceIdentifier(), &(rules->image_rules)); + map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, + ResourceIdentifier(), + &(rules->mixed_content_rules)); #else // Android doesn't use image content settings, so ALLOW rule is added for // all origins. @@ -132,6 +135,13 @@ base::Value::FromUniquePtrValue( ContentSettingToValue(CONTENT_SETTING_ALLOW)), std::string(), map->IsOffTheRecord())); + // In Android active mixed content is hard blocked, with no option to allow + // it. + rules->mixed_content_rules.push_back(ContentSettingPatternSource( + ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), + base::Value::FromUniquePtrValue( + ContentSettingToValue(CONTENT_SETTING_BLOCK)), + std::string(), map->IsOffTheRecord())); #endif map->GetSettingsForOneType( CONTENT_SETTINGS_TYPE_JAVASCRIPT,
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc index 5fc4d9f..e1aca34 100644 --- a/components/content_settings/core/common/content_settings.cc +++ b/components/content_settings/core/common/content_settings.cc
@@ -156,7 +156,8 @@ content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT || content_type == CONTENT_SETTINGS_TYPE_AUTOPLAY || content_type == CONTENT_SETTINGS_TYPE_CLIENT_HINTS || - content_type == CONTENT_SETTINGS_TYPE_POPUPS; + content_type == CONTENT_SETTINGS_TYPE_POPUPS || + content_type == CONTENT_SETTINGS_TYPE_MIXEDSCRIPT; } RendererContentSettingRules::RendererContentSettingRules() {}
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h index 0565046..824c421 100644 --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h
@@ -75,6 +75,7 @@ ContentSettingsForOneType autoplay_rules; ContentSettingsForOneType client_hints_rules; ContentSettingsForOneType popup_redirect_rules; + ContentSettingsForOneType mixed_content_rules; }; namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom index 3635caf..771b4db 100644 --- a/components/content_settings/core/common/content_settings.mojom +++ b/components/content_settings/core/common/content_settings.mojom
@@ -73,4 +73,5 @@ array<ContentSettingPatternSource> autoplay_rules; array<ContentSettingPatternSource> client_hints_rules; array<ContentSettingPatternSource> popup_redirect_rules; + array<ContentSettingPatternSource> mixed_content_rules; };
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc index e4faf6a2..84eceac 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.cc +++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -101,7 +101,8 @@ data.ReadScriptRules(&out->script_rules) && data.ReadAutoplayRules(&out->autoplay_rules) && data.ReadClientHintsRules(&out->client_hints_rules) && - data.ReadPopupRedirectRules(&out->popup_redirect_rules); + data.ReadPopupRedirectRules(&out->popup_redirect_rules) && + data.ReadMixedContentRules(&out->mixed_content_rules); } } // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h index c8b57f67..13cae30 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.h +++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -145,6 +145,11 @@ return r.popup_redirect_rules; } + static const std::vector<ContentSettingPatternSource>& mixed_content_rules( + const RendererContentSettingRules& r) { + return r.mixed_content_rules; + } + static bool Read( content_settings::mojom::RendererContentSettingRulesDataView data, RendererContentSettingRules* out);
diff --git a/components/download/internal/common/download_file_impl.cc b/components/download/internal/common/download_file_impl.cc index 5b3951a..890efd8 100644 --- a/components/download/internal/common/download_file_impl.cc +++ b/components/download/internal/common/download_file_impl.cc
@@ -566,9 +566,8 @@ for (auto& stream : source_streams_) { SourceStream* source_stream = stream.second.get(); - if (!source_stream->is_finished()) { - ActivateStream(source_stream); - } + if (!source_stream->is_finished()) + StreamActive(source_stream, MOJO_RESULT_OK); } } @@ -591,7 +590,6 @@ DownloadInterruptReason reason = DOWNLOAD_INTERRUPT_REASON_NONE; base::TimeDelta delta( base::TimeDelta::FromMilliseconds(kMaxTimeBlockingFileThreadMs)); - // Take care of any file local activity required. do { state = source_stream->Read(&incoming_data, &incoming_data_size); @@ -649,6 +647,10 @@ FROM_HERE, base::BindOnce(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr(), source_stream, MOJO_RESULT_OK)); + } else if (state == InputStream::EMPTY && !should_terminate) { + source_stream->RegisterDataReadyCallback( + base::Bind(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr(), + source_stream)); } if (state == InputStream::COMPLETE) @@ -731,13 +733,6 @@ received_slice.offset, received_slice.received_bytes); } num_active_streams_++; - ActivateStream(source_stream); -} - -void DownloadFileImpl::ActivateStream(SourceStream* source_stream) { - source_stream->RegisterDataReadyCallback( - base::Bind(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr(), - source_stream)); StreamActive(source_stream, MOJO_RESULT_OK); }
diff --git a/components/download/internal/common/download_file_unittest.cc b/components/download/internal/common/download_file_unittest.cc index 2140f1d..a2a5883 100644 --- a/components/download/internal/common/download_file_unittest.cc +++ b/components/download/internal/common/download_file_unittest.cc
@@ -581,6 +581,9 @@ EXPECT_FALSE(base::PathExists(initial_path)); EXPECT_TRUE(base::PathExists(path_1)); + EXPECT_CALL(*input_stream_, RegisterDataReadyCallback(_)) + .Times(1) + .RetiresOnSaturation(); // Download the data. const char* chunks1[] = {kTestData1, kTestData2}; AppendDataToFile(chunks1, 2); @@ -596,6 +599,9 @@ EXPECT_FALSE(base::PathExists(path_1)); EXPECT_TRUE(base::PathExists(path_2)); + EXPECT_CALL(*input_stream_, RegisterDataReadyCallback(_)) + .Times(1) + .RetiresOnSaturation(); const char* chunks2[] = {kTestData3}; AppendDataToFile(chunks2, 1); @@ -833,6 +839,9 @@ // Test that calling the sink_callback_ on an empty stream shouldn't // do anything. + EXPECT_CALL(*input_stream_, RegisterDataReadyCallback(_)) + .Times(1) + .RetiresOnSaturation(); AppendDataToFile(nullptr, 0); // Finish the download this way and make sure we see it on the observer. @@ -984,8 +993,6 @@ PrepareStream(&additional_streams_[0], stream_0_length, true, true, kTestData7, 2); - EXPECT_CALL(*additional_streams_[0], RegisterDataReadyCallback(_)) - .RetiresOnSaturation(); EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); // Activate the streams. @@ -1005,7 +1012,7 @@ } // 3 streams write to one sink, the second stream has a limited length. -TEST_F(DownloadFileTest, MutipleStreamsLimitedLength) { +TEST_F(DownloadFileTest, MultipleStreamsLimitedLength) { int64_t stream_0_length = GetBuffersLength(kTestData6, 2); // The second stream has a limited length and should be partially written @@ -1025,17 +1032,10 @@ PrepareStream(&additional_streams_[1], stream_0_length + stream_1_length, true, true, kTestData6, 2); - EXPECT_CALL(*additional_streams_[0], RegisterDataReadyCallback(_)) - .Times(1) - .RetiresOnSaturation(); - EXPECT_CALL(*additional_streams_[0], ClearDataReadyCallback()) .Times(1) .RetiresOnSaturation(); - EXPECT_CALL(*additional_streams_[1], RegisterDataReadyCallback(_)) - .RetiresOnSaturation(); - EXPECT_CALL(*(observer_.get()), MockDestinationCompleted(_, _)); // Activate all the streams. @@ -1111,13 +1111,13 @@ .InSequence(seq) .WillOnce(Return(InputStream::EMPTY)) .RetiresOnSaturation(); + EXPECT_CALL(*input_stream_, RegisterDataReadyCallback(_)) + .Times(1) + .RetiresOnSaturation(); sink_callback_.Run(MOJO_RESULT_OK); base::RunLoop().RunUntilIdle(); additional_streams_[0] = new StrictMock<MockInputStream>(); - EXPECT_CALL(*additional_streams_[0], RegisterDataReadyCallback(_)) - .WillRepeatedly(Invoke(this, &DownloadFileTest::RegisterCallback)) - .RetiresOnSaturation(); EXPECT_CALL(*additional_streams_[0], ClearDataReadyCallback()) .WillRepeatedly(Invoke(this, &DownloadFileTest::ClearCallback)) .RetiresOnSaturation(); @@ -1152,6 +1152,9 @@ .InSequence(seq) .WillOnce(Return(InputStream::EMPTY)) .RetiresOnSaturation(); + EXPECT_CALL(*input_stream_, RegisterDataReadyCallback(_)) + .Times(2) + .RetiresOnSaturation(); sink_callback_.Run(MOJO_RESULT_OK); base::RunLoop().RunUntilIdle();
diff --git a/components/download/internal/common/download_utils.cc b/components/download/internal/common/download_utils.cc index d428833..023f695 100644 --- a/components/download/internal/common/download_utils.cc +++ b/components/download/internal/common/download_utils.cc
@@ -4,6 +4,9 @@ #include "components/download/public/common/download_utils.h" +#include <memory> +#include <string> + #include "base/files/file_util.h" #include "base/format_macros.h" #include "base/i18n/file_util_icu.h" @@ -27,7 +30,7 @@ #if defined(OS_ANDROID) #include "base/android/content_uri_utils.h" #include "components/download/internal/common/android/download_collection_bridge.h" -#endif +#endif // defined(OS_ANDROID) namespace download { @@ -261,7 +264,7 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest( DownloadUrlParameters* params) { - DCHECK(params->offset() >= 0); + DCHECK_GE(params->offset(), 0); std::unique_ptr<network::ResourceRequest> request( new network::ResourceRequest); @@ -570,7 +573,7 @@ case DownloadItem::INTERRUPTED: return GetDownloadResumeMode(url, reason, false /* restart_required */, false /* user_action_required */) == - download::ResumeMode::INVALID; + ResumeMode::INVALID; default: return false; }
diff --git a/components/download/internal/common/stream_handle_input_stream.cc b/components/download/internal/common/stream_handle_input_stream.cc index fc1ddd6..bdfe62e 100644 --- a/components/download/internal/common/stream_handle_input_stream.cc +++ b/components/download/internal/common/stream_handle_input_stream.cc
@@ -45,6 +45,8 @@ const mojo::SimpleWatcher::ReadyCallback& callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (handle_watcher_) { + if (handle_watcher_->IsWatching()) + ClearDataReadyCallback(); handle_watcher_->Watch(stream_handle_->stream.get(), MOJO_HANDLE_SIGNAL_READABLE, callback); }
diff --git a/components/download/public/common/download_file_impl.h b/components/download/public/common/download_file_impl.h index 59ef5d5..4f6c60c 100644 --- a/components/download/public/common/download_file_impl.h +++ b/components/download/public/common/download_file_impl.h
@@ -277,9 +277,6 @@ // Register callback and start to read data from the stream. void RegisterAndActivateStream(SourceStream* source_stream); - // Helper method to activate a stream and start reading from it. - void ActivateStream(SourceStream* source_stream); - // Called when a stream completes. void OnStreamCompleted(SourceStream* source_stream);
diff --git a/components/download/public/common/download_utils.h b/components/download/public/common/download_utils.h index 7107c34..737c193 100644 --- a/components/download/public/common/download_utils.h +++ b/components/download/public/common/download_utils.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_UTILS_H_ #define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_UTILS_H_ +#include <memory> + #include "components/download/database/download_db_entry.h" #include "components/download/database/in_progress/download_entry.h" #include "components/download/public/common/download_export.h"
diff --git a/components/exo/client_controlled_shell_surface.cc b/components/exo/client_controlled_shell_surface.cc index 1187362..b230ee7 100644 --- a/components/exo/client_controlled_shell_surface.cc +++ b/components/exo/client_controlled_shell_surface.cc
@@ -38,6 +38,7 @@ #include "components/exo/surface.h" #include "components/exo/wm_helper.h" #include "ui/aura/client/aura_constants.h" +#include "ui/aura/scoped_window_event_targeting_blocker.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_observer.h" @@ -214,8 +215,9 @@ DISALLOW_COPY_AND_ASSIGN(CaptionButtonModel); }; -// EventTargetingBlocker blocks the event targeting by settnig NONE targeting -// policy to the window subtrees. It resets to the origial policy upon deletion. +// EventTargetingBlocker blocks the event targeting by setting NONE targeting +// policy to the window subtrees. It resets to the original policy upon +// deletion. class EventTargetingBlocker : aura::WindowObserver { public: EventTargetingBlocker() = default; @@ -233,29 +235,28 @@ private: void Register(aura::Window* window) { window->AddObserver(this); - auto policy = window->event_targeting_policy(); - window->SetEventTargetingPolicy(aura::EventTargetingPolicy::kNone); - policy_map_.emplace(window, policy); + event_targeting_blocker_map_[window] = + std::make_unique<aura::ScopedWindowEventTargetingBlocker>(window); for (auto* child : window->children()) Register(child); } void Unregister(aura::Window* window) { window->RemoveObserver(this); - DCHECK(policy_map_.find(window) != policy_map_.end()); - window->SetEventTargetingPolicy(policy_map_[window]); + event_targeting_blocker_map_.erase(window); for (auto* child : window->children()) Unregister(child); } void OnWindowDestroying(aura::Window* window) override { - auto it = policy_map_.find(window); - DCHECK(it != policy_map_.end()); - policy_map_.erase(it); - window->RemoveObserver(this); + Unregister(window); + if (window_ == window) + window_ = nullptr; } - std::map<aura::Window*, aura::EventTargetingPolicy> policy_map_; + std::map<aura::Window*, + std::unique_ptr<aura::ScopedWindowEventTargetingBlocker>> + event_targeting_blocker_map_; aura::Window* window_ = nullptr; DISALLOW_COPY_AND_ASSIGN(EventTargetingBlocker);
diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm_driver/instance_id/android/BUILD.gn index 1d9ee84..2f17143 100644 --- a/components/gcm_driver/instance_id/android/BUILD.gn +++ b/components/gcm_driver/instance_id/android/BUILD.gn
@@ -11,6 +11,7 @@ } generate_jni("test_support_jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/components/gcm_driver/instance_id/FakeInstanceIDWithSubtype.java", ]
diff --git a/components/gwp_asan/buildflags/buildflags.gni b/components/gwp_asan/buildflags/buildflags.gni index 08ed1d4..f1cc47f8 100644 --- a/components/gwp_asan/buildflags/buildflags.gni +++ b/components/gwp_asan/buildflags/buildflags.gni
@@ -4,11 +4,15 @@ import("//base/allocator/allocator.gni") import("//build/config/allocator.gni") +import("//build/config/compiler/compiler.gni") # Windows/x86 is disabled due to https://crbug.com/969146 # Android component builds are disabled due to https://crbug.com/976399 -supported_platform = is_mac || (is_win && current_cpu == "x64") || - (is_android && !is_component_build) +# Android requires frame pointers for unwinding, unwind tables aren't shipped in +# official builds. +supported_platform = + is_mac || (is_win && current_cpu == "x64") || + (is_android && !is_component_build && enable_frame_pointers) declare_args() { # Is GWP-ASan malloc/PartitionAlloc hooking enabled for chrome/ on a given
diff --git a/components/heap_profiling/BUILD.gn b/components/heap_profiling/BUILD.gn index 19cada14..a00697c 100644 --- a/components/heap_profiling/BUILD.gn +++ b/components/heap_profiling/BUILD.gn
@@ -25,6 +25,7 @@ if (is_android) { generate_jni("jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/components/heap_profiling/HeapProfilingTestShim.java", ]
diff --git a/components/leveldb_proto/internal/shared_proto_database.cc b/components/leveldb_proto/internal/shared_proto_database.cc index 3bb60ece..d247668 100644 --- a/components/leveldb_proto/internal/shared_proto_database.cc +++ b/components/leveldb_proto/internal/shared_proto_database.cc
@@ -60,7 +60,11 @@ const base::FilePath& db_dir) : task_runner_(base::CreateSequencedTaskRunner( {base::ThreadPool(), base::MayBlock(), - base::TaskPriority::BEST_EFFORT, + // crbug/1006954 and crbug/976223 explain why one of the clients + // needs run in visible priority. Download DB is always loaded to + // check for in progress downloads at startup. So, always load shared + // db in USER_VISIBLE priority. + base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), db_dir_(db_dir), db_(std::make_unique<LevelDB>(client_db_id.c_str())),
diff --git a/components/module_installer/android/BUILD.gn b/components/module_installer/android/BUILD.gn index 7f173c9..beafbe8 100644 --- a/components/module_installer/android/BUILD.gn +++ b/components/module_installer/android/BUILD.gn
@@ -37,8 +37,6 @@ "//third_party/google_android_play_core:com_google_android_play_core_java", ] - srcjar_deps = [ ":module_installer_build_config" ] - jar_excluded_patterns = [ "*/ModuleInstallerConfig.class" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] @@ -46,12 +44,18 @@ junit_binary("module_installer_junit_tests") { java_files = [ + "junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java", "junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java", + "junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java", + "junit/src/org/chromium/components/module_installer/logger/PlayCoreLoggerTest.java", + "junit/src/org/chromium/components/module_installer/logger/SplitInstallFailureLoggerTest.java", + "junit/src/org/chromium/components/module_installer/logger/SplitInstallStatusLoggerTest.java", "junit/src/org/chromium/components/module_installer/observer/ActivityObserverTest.java", ] deps = [ ":module_installer_java", "//base:base_java", + "//base:base_java_test_support", "//base:base_junit_test_support", ] } @@ -75,28 +79,13 @@ # Use this one if your target needs to depend on ModuleInstallerConfig. The # other two targets are automatically added to build targets. java_cpp_template("module_installer_build_config") { + # TODO(fredmello): Temporary code to keep downstream unbroken. package_path = "org/chromium/components/module_installer/builder" sources = [ "build/ModuleInstallerConfig.template", ] } -java_cpp_template("module_installer_bundle_build_config") { - package_path = "org/chromium/components/module_installer/builder" - sources = [ - "build/ModuleInstallerConfig.template", - ] - defines = [ "IS_BUNDLE_BUILD" ] -} - -java_cpp_template("module_installer_apk_build_config") { - package_path = "org/chromium/components/module_installer/builder" - sources = [ - "build/ModuleInstallerConfig.template", - ] - defines = [ "IS_APK_BUILD" ] -} - source_set("native") { sources = [ "module.cc",
diff --git a/components/module_installer/android/build/ModuleInstallerConfig.template b/components/module_installer/android/build/ModuleInstallerConfig.template index b23b3472..c07cf004 100644 --- a/components/module_installer/android/build/ModuleInstallerConfig.template +++ b/components/module_installer/android/build/ModuleInstallerConfig.template
@@ -4,16 +4,8 @@ package org.chromium.components.module_installer.builder; -/** Build config for DFMs. */ -public class ModuleInstallerConfig { - -#if defined(IS_BUNDLE_BUILD) - public static final boolean IS_BUNDLE = true; -#elif defined(IS_APK_BUILD) - public static final boolean IS_BUNDLE = false; -#else - // This needs to not be final in order to avoid being inlined. - public static boolean IS_BUNDLE; -#endif - -} +/** + * Build config for DFMs. + * TODO(fredmello): Temporary code to keep downstream unbroken + */ +public class ModuleInstallerConfig { }
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java index 4afcf5fd..e72e19b07 100644 --- a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java +++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/EngineFactory.java
@@ -4,15 +4,15 @@ package org.chromium.components.module_installer.engine; +import org.chromium.base.BuildConfig; import org.chromium.base.CommandLine; -import org.chromium.components.module_installer.builder.ModuleInstallerConfig; /** * Factory used to build concrete engines. */ public class EngineFactory { public InstallEngine getEngine() { - if (!ModuleInstallerConfig.IS_BUNDLE) { + if (!BuildConfig.IS_BUNDLE) { return new ApkEngine(); } if (CommandLine.getInstance().hasSwitch("fake-feature-module-install")) {
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java index 3de119b..62023a0 100644 --- a/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java +++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/util/ModuleUtil.java
@@ -4,8 +4,8 @@ package org.chromium.components.module_installer.util; +import org.chromium.base.BuildConfig; import org.chromium.base.annotations.MainDex; -import org.chromium.components.module_installer.builder.ModuleInstallerConfig; import org.chromium.components.module_installer.logger.SplitAvailabilityLogger; /** @@ -20,7 +20,7 @@ * unnecessary code (modules are not supported in APKs). */ public static void recordStartupTime() { - if (!ModuleInstallerConfig.IS_BUNDLE) return; + if (!BuildConfig.IS_BUNDLE) return; Timer.recordStartupTime(); } @@ -29,7 +29,7 @@ * Records the start time in order to later report the install duration via UMA. */ public static void recordModuleAvailability() { - if (!ModuleInstallerConfig.IS_BUNDLE) return; + if (!BuildConfig.IS_BUNDLE) return; try (Timer timer = new Timer()) { initApplication(); @@ -41,7 +41,7 @@ * Updates the CrashKey report containing modules currently present. */ public static void updateCrashKeys() { - if (!ModuleInstallerConfig.IS_BUNDLE) return; + if (!BuildConfig.IS_BUNDLE) return; try (Timer timer = new Timer()) { CrashKeyRecorder.updateCrashKeys(); @@ -52,7 +52,7 @@ * Initializes the PlayCore SplitCompat framework. */ public static void initApplication() { - if (!ModuleInstallerConfig.IS_BUNDLE) return; + if (!BuildConfig.IS_BUNDLE) return; try (Timer timer = new Timer()) { SplitCompatInitializer.initApplication();
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java new file mode 100644 index 0000000..403e89f --- /dev/null +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/ApkEngineTest.java
@@ -0,0 +1,43 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.module_installer.engine; + +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; + +import org.chromium.base.test.BaseRobolectricTestRunner; + +/** + * Test suite for the ApkEngine class. + */ +@RunWith(BaseRobolectricTestRunner.class) +public class ApkEngineTest { + private ApkEngine mEngine; + + @Before + public void setUp() { + mEngine = new ApkEngine(); + } + + @Test + public void whenInstalling_verifyCompleteWithFailure() { + // Arrange. + String moduleName = "whenInstalling_verifyCompleteWithFailure"; + InstallListener listener = mock(InstallListener.class); + InOrder inOrder = inOrder(listener); + + // Act. + mEngine.install(moduleName, listener); + + // Assert. + inOrder.verify(listener).onComplete(false); + inOrder.verifyNoMoreInteractions(); + } +}
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java index f28f694..b7779ae 100644 --- a/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java
@@ -219,15 +219,33 @@ verify(mLogger, times(2)).logRequestStart(moduleName); } + @Test(expected = UnsupportedOperationException.class) + public void whenInstallingWithMoreThanOneModule_verifyException() { + // Arrange. + String moduleName = "whenInstallingWithMoreThanOneModule_verifyException"; + InstallListener listener = mock(InstallListener.class); + + // Mock SplitInstallSessionState. + SplitInstallSessionState state = mock(SplitInstallSessionState.class); + doReturn(Arrays.asList("m1", "m2")).when(state).moduleNames(); + + ArgumentCaptor<SplitInstallStateUpdatedListener> arg = + ArgumentCaptor.forClass(SplitInstallStateUpdatedListener.class); + + // Act & Assert. + mInstaller.install(moduleName, listener); + verify(mManager).registerListener(arg.capture()); + arg.getValue().onStateUpdate(state); + } + @Test public void whenInstalled_verifyListenerAndLogger() { // Arrange. String moduleName = "whenInstalled_verifyListenerAndLogger"; Integer status = SplitInstallSessionStatus.INSTALLED; - String message = String.format("Module '%s' Installed", moduleName); InstallListener listener = mock(InstallListener.class); - // Mock SplitInstallSessionState + // Mock SplitInstallSessionState. SplitInstallSessionState state = mock(SplitInstallSessionState.class); doReturn(status).when(state).status(); doReturn(Arrays.asList(moduleName)).when(state).moduleNames(); @@ -254,7 +272,6 @@ String moduleName = "whenFailureToInstall_verifyListenerAndLogger"; Integer status = SplitInstallSessionStatus.FAILED; Integer errorCode = SplitInstallErrorCode.NO_ERROR; - String message = String.format("Failed with code: %d", errorCode); InstallListener listener = mock(InstallListener.class); // Mock SplitInstallSessionState.
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java new file mode 100644 index 0000000..153cd15 --- /dev/null +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/LoggerTestUtil.java
@@ -0,0 +1,40 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.module_installer.logger; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.verify; + +import org.mockito.ArgumentCaptor; + +import org.chromium.base.metrics.CachedMetrics; +import org.chromium.base.metrics.RecordHistogram; + +/** + * Util class for supporting logger testing. + */ +public class LoggerTestUtil { + public static int getHistogramStatus( + RecordHistogram.Natives mockHistogram, String expectedName, Integer expectedBoundary) { + ArgumentCaptor<String> name = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<Long> key = ArgumentCaptor.forClass(Long.class); + ArgumentCaptor<Integer> sample = ArgumentCaptor.forClass(Integer.class); + ArgumentCaptor<Integer> boundary = ArgumentCaptor.forClass(Integer.class); + + // Make sure the metrics are flushed. + // Needed by the EnumeratedHistogramSample but not for RecordHistogram. + CachedMetrics.commitCachedMetrics(); + + verify(mockHistogram, atLeast(1)) + .recordEnumeratedHistogram( + name.capture(), key.capture(), sample.capture(), boundary.capture()); + + assertEquals(expectedName, name.getValue()); + assertEquals(expectedBoundary, boundary.getValue()); + + return sample.getValue(); + } +} \ No newline at end of file
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/PlayCoreLoggerTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/PlayCoreLoggerTest.java new file mode 100644 index 0000000..4a0da28 --- /dev/null +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/PlayCoreLoggerTest.java
@@ -0,0 +1,158 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.module_installer.logger; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.verify; + +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.test.BaseRobolectricTestRunner; + +/** + * Test suite for the PlayCoreLogger class. + */ +@RunWith(BaseRobolectricTestRunner.class) +public class PlayCoreLoggerTest { + @Mock + private SplitInstallFailureLogger mFailureLogger; + + @Mock + private SplitInstallStatusLogger mStatusLogger; + + @Mock + private SplitAvailabilityLogger mAvailabilityLogger; + + private PlayCoreLogger mPlayCoreLogger; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mPlayCoreLogger = new PlayCoreLogger(mFailureLogger, mStatusLogger, mAvailabilityLogger); + } + + @Test + public void whenLogRequestFailure_verifyLogged() { + // Arrange. + String moduleName = "whenLogRequestFailure_verifyLogged"; + Integer errorCode = 1; + + // Act. + mPlayCoreLogger.logRequestFailure(moduleName, errorCode); + + // Assert. + verify(mFailureLogger).logRequestFailure(moduleName, errorCode); + } + + @Test + public void whenLogStatusFailure_verifyLogged() { + // Arrange. + String moduleName = "whenLogStatusFailure_verifyLogged"; + Integer errorCode = 1; + + // Act. + mPlayCoreLogger.logStatusFailure(moduleName, errorCode); + + // Assert. + verify(mFailureLogger).logStatusFailure(moduleName, errorCode); + } + + @Test + public void whenLogInstalledStatus_verifyLogged() { + // Arrange. + String moduleName = "whenLogInstalledStatus_verifyLogged"; + Integer status = SplitInstallSessionStatus.INSTALLED; + InOrder inOrder = inOrder(mStatusLogger, mAvailabilityLogger, mFailureLogger); + + // Act. + mPlayCoreLogger.logStatus(moduleName, status); + + // Assert. + inOrder.verify(mStatusLogger).logStatusChange(moduleName, status); + inOrder.verify(mAvailabilityLogger).storeModuleInstalled(moduleName, status); + inOrder.verify(mAvailabilityLogger).logInstallTimes(moduleName); + inOrder.verify(mFailureLogger).logStatusSuccess(moduleName); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void whenLogCanceledStatus_verifyLogged() { + // Arrange. + String moduleName = "whenLogCanceledStatus_verifyLogged"; + Integer status = SplitInstallSessionStatus.CANCELED; + InOrder inOrder = inOrder(mStatusLogger, mFailureLogger); + + // Act. + mPlayCoreLogger.logStatus(moduleName, status); + + // Assert. + inOrder.verify(mStatusLogger).logStatusChange(moduleName, status); + inOrder.verify(mFailureLogger).logStatusCanceled(moduleName); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void whenLogDownloadedStatus_verifyLogged() { + // Arrange. + String moduleName = "whenLogDownloadedStatus_verifyLogged"; + Integer status = SplitInstallSessionStatus.DOWNLOADED; + InOrder inOrder = inOrder(mStatusLogger, mFailureLogger); + + // Act. + mPlayCoreLogger.logStatus(moduleName, status); + + // Assert. + inOrder.verify(mStatusLogger).logStatusChange(moduleName, status); + inOrder.verify(mFailureLogger).logStatusNoSplitCompat(moduleName); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void whenLogRequestStart_verifyLogged() { + // Arrange. + String moduleName = "whenLogRequestStart_verifyLogged"; + + // Act. + mPlayCoreLogger.logRequestStart(moduleName); + + // Assert. + verify(mStatusLogger).logRequestStart(moduleName); + verify(mAvailabilityLogger).storeRequestStart(moduleName); + } + + @Test + public void whenLogRequestDeferredStart_verifyLogged() { + // Arrange. + String moduleName = "whenLogRequestDeferredStart_verifyLogged"; + + // Act. + mPlayCoreLogger.logRequestDeferredStart(moduleName); + + // Assert. + verify(mStatusLogger).logRequestDeferredStart(moduleName); + verify(mAvailabilityLogger).storeRequestDeferredStart(moduleName); + } + + @Test + public void whenGetUnknownRequest_verifyCorrectErrorCode() { + // Arrange. + Integer expectedCode = SplitInstallFailureLogger.UNKNOWN_REQUEST_ERROR; + + // Act. + Integer actualCode = mPlayCoreLogger.getUnknownRequestErrorCode(); + + // Assert. + assertEquals(actualCode, expectedCode); + } +}
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallFailureLoggerTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallFailureLoggerTest.java new file mode 100644 index 0000000..9189974 --- /dev/null +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallFailureLoggerTest.java
@@ -0,0 +1,145 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.module_installer.logger; + +import static org.junit.Assert.assertEquals; + +import com.google.android.play.core.splitinstall.model.SplitInstallErrorCode; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.metrics.RecordHistogramJni; +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.JniMocker; + +/** + * Test suite for the SplitInstallFailureLogger class. + */ +@RunWith(BaseRobolectricTestRunner.class) +public class SplitInstallFailureLoggerTest { + @Mock + private RecordHistogram.Natives mRecordHistogramMock; + + @Rule + public JniMocker mocker = new JniMocker(); + + private SplitInstallFailureLogger mFailureLogger; + + private int mErrorCodeMapping[][] = { + {4, SplitInstallErrorCode.ACCESS_DENIED}, + {5, SplitInstallErrorCode.ACTIVE_SESSIONS_LIMIT_EXCEEDED}, + {6, SplitInstallErrorCode.API_NOT_AVAILABLE}, + {7, SplitInstallErrorCode.INCOMPATIBLE_WITH_EXISTING_SESSION}, + {8, SplitInstallErrorCode.INSUFFICIENT_STORAGE}, + {9, SplitInstallErrorCode.INVALID_REQUEST}, + {10, SplitInstallErrorCode.MODULE_UNAVAILABLE}, + {11, SplitInstallErrorCode.NETWORK_ERROR}, + {12, SplitInstallErrorCode.NO_ERROR}, + {13, SplitInstallErrorCode.SERVICE_DIED}, + {14, SplitInstallErrorCode.SESSION_NOT_FOUND}, + {15, SplitInstallErrorCode.SPLITCOMPAT_COPY_ERROR}, + {16, SplitInstallErrorCode.SPLITCOMPAT_EMULATION_ERROR}, + {17, SplitInstallErrorCode.SPLITCOMPAT_VERIFICATION_ERROR}, + {18, SplitInstallErrorCode.INTERNAL_ERROR}, + }; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mocker.mock(RecordHistogramJni.TEST_HOOKS, mRecordHistogramMock); + + mFailureLogger = new SplitInstallFailureLogger(); + } + + @Test + public void whenLogSuccess_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogSuccess_verifyHistogramCode"; + int expectedCode = 0; + + // Act. + mFailureLogger.logStatusSuccess(moduleName); + + // Assert. + assertEquals(expectedCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogCancelation_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogCancelation_verifyHistogramCode"; + int expectedCode = 3; + + // Act. + mFailureLogger.logStatusCanceled(moduleName); + + // Assert. + assertEquals(expectedCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogNoSplitCompat_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogNoSplitCompat_verifyHistogramCode"; + int expectedCode = 21; + + // Act. + mFailureLogger.logStatusNoSplitCompat(moduleName); + + // Assert. + assertEquals(expectedCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogStatusFailure_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogStatusFailure_verifyHistogramCode"; + int unknownCode = 999; + int expectedUnknownCode = 19; + + // Act & Assert. + for (int[] tuple : mErrorCodeMapping) { + int expectedOutputCode = tuple[0]; + int inputCode = tuple[1]; + mFailureLogger.logStatusFailure(moduleName, inputCode); + assertEquals(expectedOutputCode, getHistogramStatus(moduleName)); + } + + mFailureLogger.logStatusFailure(moduleName, unknownCode); + assertEquals(expectedUnknownCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogRequestFailure_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogRequestFailure_verifyHistogramCode"; + int unknownCode = 999; + int expectedUnknownCode = 20; + + // Act & Assert. + for (int[] tuple : mErrorCodeMapping) { + int expectedOutputCode = tuple[0]; + int inputCode = tuple[1]; + mFailureLogger.logRequestFailure(moduleName, inputCode); + assertEquals(expectedOutputCode, getHistogramStatus(moduleName)); + } + + mFailureLogger.logRequestFailure(moduleName, unknownCode); + assertEquals(expectedUnknownCode, getHistogramStatus(moduleName)); + } + + private int getHistogramStatus(String moduleName) { + String expName = "Android.FeatureModules.InstallStatus." + moduleName; + Integer expBoundary = 22; + return LoggerTestUtil.getHistogramStatus(mRecordHistogramMock, expName, expBoundary); + } +}
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallStatusLoggerTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallStatusLoggerTest.java new file mode 100644 index 0000000..d6f91c7 --- /dev/null +++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/logger/SplitInstallStatusLoggerTest.java
@@ -0,0 +1,101 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.module_installer.logger; + +import static org.junit.Assert.assertEquals; + +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.metrics.RecordHistogramJni; +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.JniMocker; + +/** + * Test suite for the SplitInstallStatusLogger class. + */ +@RunWith(BaseRobolectricTestRunner.class) +public class SplitInstallStatusLoggerTest { + @Mock + private RecordHistogram.Natives mRecordHistogramMock; + + @Rule + public JniMocker mocker = new JniMocker(); + + private SplitInstallStatusLogger mStatusLogger; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mocker.mock(RecordHistogramJni.TEST_HOOKS, mRecordHistogramMock); + + mStatusLogger = new SplitInstallStatusLogger(); + } + + @Test + public void whenLogRequestStart_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogRequestStart_verifyHistogramCode"; + int expectedCode = 1; + + // Act. + mStatusLogger.logRequestStart(moduleName); + + // Assert. + assertEquals(expectedCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogRequestDeferredStart_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogRequestDeferredStart_verifyHistogramCode"; + int expectedCode = 11; + + // Act. + mStatusLogger.logRequestDeferredStart(moduleName); + + // Assert. + assertEquals(expectedCode, getHistogramStatus(moduleName)); + } + + @Test + public void whenLogStatusChange_verifyHistogramCode() { + // Arrange. + String moduleName = "whenLogStatusChange_verifyHistogramCode"; + int unknownCode = 999; + + // Act & Assert. + assertEquals(0, logStatusChange(moduleName, unknownCode)); + assertEquals(2, logStatusChange(moduleName, SplitInstallSessionStatus.PENDING)); + assertEquals(3, logStatusChange(moduleName, SplitInstallSessionStatus.DOWNLOADING)); + assertEquals(4, logStatusChange(moduleName, SplitInstallSessionStatus.DOWNLOADED)); + assertEquals(5, logStatusChange(moduleName, SplitInstallSessionStatus.INSTALLING)); + assertEquals(6, logStatusChange(moduleName, SplitInstallSessionStatus.INSTALLED)); + assertEquals(7, logStatusChange(moduleName, SplitInstallSessionStatus.FAILED)); + assertEquals(8, logStatusChange(moduleName, SplitInstallSessionStatus.CANCELING)); + assertEquals(9, logStatusChange(moduleName, SplitInstallSessionStatus.CANCELED)); + assertEquals(10, + logStatusChange(moduleName, SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION)); + } + + private int logStatusChange(String moduleName, int status) { + mStatusLogger.logStatusChange(moduleName, status); + return getHistogramStatus(moduleName); + } + + private int getHistogramStatus(String moduleName) { + String expName = "Android.FeatureModules.InstallingStatus." + moduleName; + Integer expBoundary = 12; + return LoggerTestUtil.getHistogramStatus(mRecordHistogramMock, expName, expBoundary); + } +}
diff --git a/components/neterror/resources/offline.js b/components/neterror/resources/offline.js index f170440..3cdea7d 100644 --- a/components/neterror/resources/offline.js +++ b/components/neterror/resources/offline.js
@@ -98,8 +98,8 @@ // but navigator.userAgent includes /Safari/. // TODO(crbug.com/998999): Fix navigator.userAgent such that it reliably // returns an agent string containing "CriOS". -var IS_IOS = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform) && - !(/Safari/.test(navigator.userAgent)); +var IS_IOS = /iPad|iPhone|iPod|MacIntel/.test(window.navigator.platform) && + !(/Safari/.test(window.navigator.userAgent)); /** @const */
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp index 87a1e7a8..ce5891d 100644 --- a/components/page_info_strings.grdp +++ b/components/page_info_strings.grdp
@@ -39,17 +39,20 @@ <message name="IDS_PAGE_INFO_SAFETY_TIP_BAD_REPUTATION_DESCRIPTION" desc="Body of message to display in the page info bubble when you are viewing a page that triggered a safety tip."> This site could be fake or fraudulent. Chrome recommends leaving now. </message> - <message name="IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON" desc="Text of button to leave a suspicious page shown on the safety tip page info bubble."> - Leave this site + <message name="IDS_PAGE_INFO_SAFETY_TIP_MORE_INFO_LINK" desc="Text of link to Help Center page on safety tip page info bubble."> + Learn more </message> - <message name="IDS_PAGE_INFO_SAFETY_TIP_GO_TO_SITE_BUTTON" desc="Text of button to leave a suspicious page shown on the safety tip page info bubble."> - Yes. Go there. + <message name="IDS_PAGE_INFO_SAFETY_TIP_IGNORE_BUTTON" desc="Text of button to ignore a safety tip page info bubble."> + Ignore + </message> + <message name="IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON" desc="Text of button to leave a suspicious page shown on the safety tip page info bubble."> + Leave site </message> <message name="IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_TITLE" desc="Title of Safety Tip infobar on a domain that looks like another domain."> Did you mean <ph name='LOOKALIKE_DOMAIN'>$1<ex>google.com</ex></ph>? </message> <message name="IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION" desc="Body of an infobar warning when the user visits a page that triggered a Safety Tip because the domain looked like another domain."> - This site's name looks similar to that of another site. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name. + This site's name looks similar to <ph name='LOOKALIKE_DOMAIN'>$1<ex>google.com</ex></ph>. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name. </message> <!-- Viewing file strings -->
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_IGNORE_BUTTON.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_IGNORE_BUTTON.png.sha1 new file mode 100644 index 0000000..0f1eae2 --- /dev/null +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_IGNORE_BUTTON.png.sha1
@@ -0,0 +1 @@ +df14c960857c08e55816d0cd50445988f337be8a \ No newline at end of file
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON.png.sha1 index db9fb7b..0f1eae2 100644 --- a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON.png.sha1 +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LEAVE_BUTTON.png.sha1
@@ -1 +1 @@ -286691c1acd6ead1593fb72f3bc054fb607a67ed \ No newline at end of file +df14c960857c08e55816d0cd50445988f337be8a \ No newline at end of file
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION.png.sha1 index e68090a..e2295a9f 100644 --- a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION.png.sha1 +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_LOOKALIKE_DESCRIPTION.png.sha1
@@ -1 +1 @@ -f0b39b6ee075f05cb44cae77812ac7e185a57581 \ No newline at end of file +aa71f67fa4b2adea131a4862a5b639f7e12b69e0 \ No newline at end of file
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_MORE_INFO_LINK.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_MORE_INFO_LINK.png.sha1 new file mode 100644 index 0000000..0f1eae2 --- /dev/null +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_SAFETY_TIP_MORE_INFO_LINK.png.sha1
@@ -0,0 +1 @@ +df14c960857c08e55816d0cd50445988f337be8a \ No newline at end of file
diff --git a/components/printing/test/print_mock_render_thread.cc b/components/printing/test/print_mock_render_thread.cc index b126747b..8ee41919 100644 --- a/components/printing/test/print_mock_render_thread.cc +++ b/components/printing/test/print_mock_render_thread.cc
@@ -6,8 +6,6 @@ #include <stddef.h> -#include <vector> - #include "base/values.h" #include "build/build_config.h" #include "components/printing/test/mock_printer.h" @@ -24,10 +22,7 @@ PrintMockRenderThread::PrintMockRenderThread() #if BUILDFLAG(ENABLE_PRINTING) - : printer_(new MockPrinter), - print_dialog_user_response_(true), - print_preview_cancel_page_number_(-1), - print_preview_pages_remaining_(0) + : printer_(std::make_unique<MockPrinter>()) #endif { }
diff --git a/components/printing/test/print_mock_render_thread.h b/components/printing/test/print_mock_render_thread.h index 695da05..7e175b8 100644 --- a/components/printing/test/print_mock_render_thread.h +++ b/components/printing/test/print_mock_render_thread.h
@@ -9,6 +9,8 @@ #include <memory> #include <string> +#include <utility> +#include <vector> #include "base/compiler_specific.h" #include "base/macros.h" @@ -96,14 +98,14 @@ std::unique_ptr<MockPrinter> printer_; // True to simulate user clicking print. False to cancel. - bool print_dialog_user_response_; + bool print_dialog_user_response_ = true; // Simulates cancelling print preview if |print_preview_pages_remaining_| // equals this. - int print_preview_cancel_page_number_; + int print_preview_cancel_page_number_ = -1; // Number of pages to generate for print preview. - int print_preview_pages_remaining_; + int print_preview_pages_remaining_ = 0; // Vector of <page_number, content_data_size> that were previewed. std::vector<std::pair<int, uint32_t>> print_preview_pages_;
diff --git a/components/printing/test/print_render_frame_helper_browsertest.cc b/components/printing/test/print_render_frame_helper_browsertest.cc index 49939078..2fe59f8 100644 --- a/components/printing/test/print_render_frame_helper_browsertest.cc +++ b/components/printing/test/print_render_frame_helper_browsertest.cc
@@ -800,7 +800,6 @@ base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); dict.SetBoolean(kSettingPrintToPDF, false); - dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); OnPrintPreview(dict); EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining()); @@ -845,7 +844,6 @@ // Fill in some dummy values. base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); - dict.SetBoolean(kSettingPrintToPDF, true); dict.SetInteger(kSettingMarginsType, PRINTABLE_AREA_MARGINS); OnPrintPreview(dict); @@ -971,7 +969,6 @@ base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); dict.SetBoolean(kSettingPrintToPDF, false); - dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); OnPrintPreview(dict); EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining()); @@ -1005,8 +1002,6 @@ // Fill in some dummy values. base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); - dict.SetBoolean(kSettingPrintToPDF, true); - dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); OnPrintPreview(dict); EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining()); @@ -1030,7 +1025,6 @@ base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); dict.SetBoolean(kSettingPrintToPDF, false); - dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); OnPrintPreview(dict); EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining()); @@ -1063,7 +1057,6 @@ base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); dict.SetBoolean(kSettingPrintToPDF, false); - dict.SetInteger(kSettingMarginsType, DEFAULT_MARGINS); OnPrintPreview(dict); EXPECT_EQ(0, print_render_thread()->print_preview_pages_remaining()); @@ -1108,7 +1101,6 @@ // Fill in some dummy values. base::DictionaryValue dict; CreatePrintSettingsDictionary(&dict); - dict.SetBoolean(kSettingPrintToPDF, true); dict.SetInteger(kSettingMarginsType, CUSTOM_MARGINS); OnPrintPreview(dict);
diff --git a/components/safe_browsing/features.cc b/components/safe_browsing/features.cc index c016215..66d7f41188 100644 --- a/components/safe_browsing/features.cc +++ b/components/safe_browsing/features.cc
@@ -45,7 +45,7 @@ "ForceUseAPDownloadProtection", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kPasswordProtectionForSavedPasswords{ - "SafeBrowsingPasswordProtectionForSignedInUsers", + "SafeBrowsingPasswordProtectionForSavedPasswords", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kPasswordProtectionForSignedInUsers{
diff --git a/components/safe_browsing/triggers/ad_popup_trigger_unittest.cc b/components/safe_browsing/triggers/ad_popup_trigger_unittest.cc index f388596b..f344c4d 100644 --- a/components/safe_browsing/triggers/ad_popup_trigger_unittest.cc +++ b/components/safe_browsing/triggers/ad_popup_trigger_unittest.cc
@@ -172,7 +172,7 @@ AdPopupTriggerAction::POPUP_COULD_NOT_START_REPORT, 2); } -TEST_F(AdPopupTriggerTest, PopupWithNoAds) { +TEST_F(AdPopupTriggerTest, DISABLED_PopupWithNoAds) { // Make sure the trigger doesn't fire when there are no ads on the page. CreateTrigger(); EXPECT_CALL(*get_trigger_manager(),
diff --git a/components/security_interstitials_strings.grdp b/components/security_interstitials_strings.grdp index b3920e5..c072689 100644 --- a/components/security_interstitials_strings.grdp +++ b/components/security_interstitials_strings.grdp
@@ -461,7 +461,7 @@ <message name="IDS_SAFETY_TIP_ANDROID_LEAVE_BUTTON" desc="Text of button to ignore the warning on a suspicious page. Shown on the safety tip infobar."> Leave site </message> - <message name="IDS_SAFETY_TIP_ANDROID_GO_TO_SITE_BUTTON" desc="Text of button to ignore the warning on a suspicious page. Shown on the safety tip infobar when we suggest an alternate (safe) destination."> - Yes. Go there. + <message name="IDS_SAFETY_TIP_ANDROID_LOOKALIKE_TITLE" desc="Title of Safety Tip infobar on a domain that looks like another domain."> + Is this the right site? </message> </grit-part>
diff --git a/components/security_interstitials_strings_grdp/IDS_SAFETY_TIP_ANDROID_LOOKALIKE_TITLE.png.sha1 b/components/security_interstitials_strings_grdp/IDS_SAFETY_TIP_ANDROID_LOOKALIKE_TITLE.png.sha1 new file mode 100644 index 0000000..48073e1c --- /dev/null +++ b/components/security_interstitials_strings_grdp/IDS_SAFETY_TIP_ANDROID_LOOKALIKE_TITLE.png.sha1
@@ -0,0 +1 @@ +c25e67e85068abb61bdb2e4e17f836429c4b9a04 \ No newline at end of file
diff --git a/components/variations/BUILD.gn b/components/variations/BUILD.gn index a11a63e..3d36206 100644 --- a/components/variations/BUILD.gn +++ b/components/variations/BUILD.gn
@@ -130,6 +130,7 @@ sources = [ "active_field_trials_unittest.cc", "child_process_field_trial_syncer_unittest.cc", + "client_filterable_state_unittest.cc", "entropy_provider_unittest.cc", "hashing_unittest.cc", "net/variations_command_line_unittest.cc",
diff --git a/components/variations/client_filterable_state.cc b/components/variations/client_filterable_state.cc index 6fda4f4..f39123e 100644 --- a/components/variations/client_filterable_state.cc +++ b/components/variations/client_filterable_state.cc
@@ -31,7 +31,15 @@ #endif } -ClientFilterableState::ClientFilterableState() {} +ClientFilterableState::ClientFilterableState( + IsEnterpriseFunction is_enterprise_function) + : is_enterprise_function_(std::move(is_enterprise_function)) {} ClientFilterableState::~ClientFilterableState() {} +bool ClientFilterableState::IsEnterprise() const { + if (!is_enterprise_.has_value()) + is_enterprise_ = std::move(is_enterprise_function_).Run(); + return is_enterprise_.value(); +} + } // namespace variations
diff --git a/components/variations/client_filterable_state.h b/components/variations/client_filterable_state.h index 44cc17b..6a3bdd1 100644 --- a/components/variations/client_filterable_state.h +++ b/components/variations/client_filterable_state.h
@@ -7,20 +7,29 @@ #include <string> +#include "base/callback.h" #include "base/macros.h" +#include "base/optional.h" #include "base/time/time.h" #include "base/version.h" #include "components/variations/proto/study.pb.h" namespace variations { +using IsEnterpriseFunction = base::OnceCallback<bool()>; + // A container for all of the client state which is used for filtering studies. struct ClientFilterableState { static Study::Platform GetCurrentPlatform(); - ClientFilterableState(); + ClientFilterableState(IsEnterpriseFunction is_enterprise_function); ~ClientFilterableState(); + // Whether this is an enterprise client. Always false on android, iOS, and + // linux. Determined by VariationsServiceClient::IsEnterprise for windows, + // chromeOs, and mac. + bool IsEnterprise() const; + // The system locale. std::string locale; @@ -51,11 +60,6 @@ // Based on base::SysInfo::IsLowEndDevice(). bool is_low_end_device = false; - // Whether this is an enterprise client. Always false on android, iOS, and - // linux. Determined by VariationsServiceClient::IsEnterprise for windows, - // chromeOs, and mac. - bool is_enterprise = false; - // The country code to use for studies configured with session consistency. std::string session_consistency_country; @@ -63,6 +67,12 @@ std::string permanent_consistency_country; private: + // Evaluating enterprise status negatively affects performance, so we only + // evaluate it if needed (i.e. if a study is filtering by enterprise) and at + // most once. + mutable IsEnterpriseFunction is_enterprise_function_; + mutable base::Optional<bool> is_enterprise_; + DISALLOW_COPY_AND_ASSIGN(ClientFilterableState); };
diff --git a/components/variations/client_filterable_state_unittest.cc b/components/variations/client_filterable_state_unittest.cc new file mode 100644 index 0000000..2c0173a --- /dev/null +++ b/components/variations/client_filterable_state_unittest.cc
@@ -0,0 +1,25 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/variations/client_filterable_state.h" + +#include "base/bind.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace variations { + +TEST(VariationsClientFilterableStateTest, IsEnterprise) { + // Test, for non enterprise clients, is_enterprise_function_ is called once. + ClientFilterableState client_non_enterprise( + base::BindOnce([] { return false; })); + EXPECT_FALSE(client_non_enterprise.IsEnterprise()); + EXPECT_FALSE(client_non_enterprise.IsEnterprise()); + + // Test, for enterprise clients, is_enterprise_function_ is called once. + ClientFilterableState client_enterprise(base::BindOnce([] { return true; })); + EXPECT_TRUE(client_enterprise.IsEnterprise()); + EXPECT_TRUE(client_enterprise.IsEnterprise()); +} + +} // namespace variations
diff --git a/components/variations/service/safe_seed_manager_unittest.cc b/components/variations/service/safe_seed_manager_unittest.cc index 28f28d6..40d3b11 100644 --- a/components/variations/service/safe_seed_manager_unittest.cc +++ b/components/variations/service/safe_seed_manager_unittest.cc
@@ -81,7 +81,7 @@ // |safe_seed_manager|. void SetDefaultActiveState(SafeSeedManager* safe_seed_manager) { std::unique_ptr<ClientFilterableState> client_state = - std::make_unique<ClientFilterableState>(); + std::make_unique<ClientFilterableState>(base::OnceCallback<bool()>()); client_state->locale = kTestLocale; client_state->permanent_consistency_country = kTestPermanentConsistencyCountry;
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc index 6744746..01d097f 100644 --- a/components/variations/service/variations_field_trial_creator.cc +++ b/components/variations/service/variations_field_trial_creator.cc
@@ -234,8 +234,12 @@ std::unique_ptr<ClientFilterableState> VariationsFieldTrialCreator::GetClientFilterableStateForVersion( const base::Version& version) { + // Note that passing base::Unretained(client_) is safe here because |client_| + // lives until Chrome exits. + auto IsEnterpriseCallback = base::Bind(&VariationsServiceClient::IsEnterprise, + base::Unretained(client_)); std::unique_ptr<ClientFilterableState> state = - std::make_unique<ClientFilterableState>(); + std::make_unique<ClientFilterableState>(IsEnterpriseCallback); state->locale = application_locale_; state->reference_date = GetReferenceDateForExpiryChecks(local_state()); state->version = version; @@ -252,7 +256,6 @@ // evaluated, that field trial would not be able to apply for this case. state->is_low_end_device = base::SysInfo::IsLowEndDevice(); #endif - state->is_enterprise = client_->IsEnterprise(); state->session_consistency_country = GetLatestCountry(); state->permanent_consistency_country = LoadPermanentConsistencyCountry( version, state->session_consistency_country);
diff --git a/components/variations/study_filtering.cc b/components/variations/study_filtering.cc index 8338088..51fddcf 100644 --- a/components/variations/study_filtering.cc +++ b/components/variations/study_filtering.cc
@@ -119,8 +119,10 @@ filter.is_low_end_device() == is_low_end_device; } -bool CheckStudyEnterprise(const Study::Filter& filter, bool is_enterprise) { - return !filter.has_is_enterprise() || filter.is_enterprise() == is_enterprise; +bool CheckStudyEnterprise(const Study::Filter& filter, + const ClientFilterableState& client_state) { + return !filter.has_is_enterprise() || + filter.is_enterprise() == client_state.IsEnterprise(); } bool CheckStudyStartDate(const Study::Filter& filter, @@ -278,7 +280,7 @@ return false; } - if (!CheckStudyEnterprise(study.filter(), client_state.is_enterprise)) { + if (!CheckStudyEnterprise(study.filter(), client_state)) { DVLOG(1) << "Filtered out study " << study.name() << " due to enterprise state."; return false;
diff --git a/components/variations/study_filtering.h b/components/variations/study_filtering.h index c1cf9c3..fd8ffdf 100644 --- a/components/variations/study_filtering.h +++ b/components/variations/study_filtering.h
@@ -46,7 +46,8 @@ bool is_low_end_device); // Checks whether a study is applicable given |is_enterprise| per |filter|. -bool CheckStudyEnterprise(const Study::Filter& filter, bool is_enterprise); +bool CheckStudyEnterprise(const Study::Filter& filter, + const ClientFilterableState& client_state); // Checks whether a study is applicable for the given date/time per |filter|. bool CheckStudyStartDate(const Study::Filter& filter,
diff --git a/components/variations/study_filtering_unittest.cc b/components/variations/study_filtering_unittest.cc index f17149a..30e0305 100644 --- a/components/variations/study_filtering_unittest.cc +++ b/components/variations/study_filtering_unittest.cc
@@ -10,6 +10,8 @@ #include <vector> +#include "base/bind.h" +#include "base/bind_helpers.h" #include "base/macros.h" #include "base/stl_util.h" #include "base/strings/string_split.h" @@ -272,19 +274,22 @@ TEST(VariationsStudyFilteringTest, CheckStudyEnterprise) { Study::Filter filter; + ClientFilterableState client_non_enterprise( + base::BindOnce([] { return false; })); + ClientFilterableState client_enterprise(base::BindOnce([] { return true; })); // Check that if the filter is not set, study applies to both enterprise and // non-enterprise clients. - EXPECT_TRUE(internal::CheckStudyEnterprise(filter, true)); - EXPECT_TRUE(internal::CheckStudyEnterprise(filter, false)); + EXPECT_TRUE(internal::CheckStudyEnterprise(filter, client_enterprise)); + EXPECT_TRUE(internal::CheckStudyEnterprise(filter, client_non_enterprise)); filter.set_is_enterprise(true); - EXPECT_TRUE(internal::CheckStudyEnterprise(filter, true)); - EXPECT_FALSE(internal::CheckStudyEnterprise(filter, false)); + EXPECT_TRUE(internal::CheckStudyEnterprise(filter, client_enterprise)); + EXPECT_FALSE(internal::CheckStudyEnterprise(filter, client_non_enterprise)); filter.set_is_enterprise(false); - EXPECT_FALSE(internal::CheckStudyEnterprise(filter, true)); - EXPECT_TRUE(internal::CheckStudyEnterprise(filter, false)); + EXPECT_FALSE(internal::CheckStudyEnterprise(filter, client_enterprise)); + EXPECT_TRUE(internal::CheckStudyEnterprise(filter, client_non_enterprise)); } TEST(VariationsStudyFilteringTest, CheckStudyStartDate) { @@ -637,7 +642,7 @@ AddExperiment("A", 10, study3); AddExperiment("Default", 25, study3); - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-CA"; client_state.reference_date = base::Time::Now(); client_state.version = base::Version("20.0.0.0"); @@ -696,7 +701,7 @@ if (test.filter_exclude_country) study->mutable_filter()->add_exclude_country(test.filter_exclude_country); - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-CA"; client_state.reference_date = base::Time::Now(); client_state.version = base::Version("20.0.0.0"); @@ -714,7 +719,7 @@ } TEST(VariationsStudyFilteringTest, GetClientCountryForStudy_Session) { - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.session_consistency_country = "session_country"; client_state.permanent_consistency_country = "permanent_country"; @@ -725,7 +730,7 @@ } TEST(VariationsStudyFilteringTest, GetClientCountryForStudy_Permanent) { - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.session_consistency_country = "session_country"; client_state.permanent_consistency_country = "permanent_country";
diff --git a/components/variations/variations_seed_processor_unittest.cc b/components/variations/variations_seed_processor_unittest.cc index 5a6e7bbd..6d39a69 100644 --- a/components/variations/variations_seed_processor_unittest.cc +++ b/components/variations/variations_seed_processor_unittest.cc
@@ -13,6 +13,7 @@ #include <vector> #include "base/bind.h" +#include "base/bind_helpers.h" #include "base/command_line.h" #include "base/feature_list.h" #include "base/format_macros.h" @@ -266,7 +267,7 @@ const base::Time year_ago = base::Time::Now() - base::TimeDelta::FromDays(365); - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-CA"; client_state.reference_date = base::Time::Now(); client_state.version = base::Version("20.0.0.0"); @@ -548,7 +549,7 @@ AddExperiment("Default", 0, study3); study3->set_activation_type(Study_ActivationType_ACTIVATE_ON_QUERY); - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-CA"; client_state.reference_date = base::Time::Now(); client_state.version = base::Version("20.0.0.0");
diff --git a/components/variations/variations_seed_store_unittest.cc b/components/variations/variations_seed_store_unittest.cc index 4c9e957..df0bbe5d 100644 --- a/components/variations/variations_seed_store_unittest.cc +++ b/components/variations/variations_seed_store_unittest.cc
@@ -108,7 +108,7 @@ // for testing. std::unique_ptr<ClientFilterableState> CreateTestClientFilterableState() { std::unique_ptr<ClientFilterableState> client_state = - std::make_unique<ClientFilterableState>(); + std::make_unique<ClientFilterableState>(base::OnceCallback<bool()>()); client_state->locale = "es-MX"; client_state->reference_date = WrapTime(1234554321); client_state->version = base::Version("1.2.3.4"); @@ -568,7 +568,7 @@ // Loading an empty seed should return false. TestVariationsSeedStore seed_store(&prefs); VariationsSeed loaded_seed; - ClientFilterableState client_state; + ClientFilterableState client_state({}); base::Time fetch_time; EXPECT_FALSE( seed_store.LoadSafeSeed(&loaded_seed, &client_state, &fetch_time)); @@ -578,7 +578,7 @@ const VariationsSeed seed = CreateTestSeed(); const std::string serialized_seed = SerializeSeed(seed); const std::string signature = "a completely ignored signature"; - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-US"; client_state.reference_date = WrapTime(12345); client_state.session_consistency_country = "US"; @@ -618,7 +618,7 @@ TEST(VariationsSeedStoreTest, StoreSafeSeed_EmptySeed) { const std::string serialized_seed; const std::string signature = "a completely ignored signature"; - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-US"; client_state.reference_date = WrapTime(54321); client_state.session_consistency_country = "US"; @@ -663,7 +663,7 @@ TEST(VariationsSeedStoreTest, StoreSafeSeed_InvalidSeed) { const std::string serialized_seed = "a nonsense seed"; const std::string signature = "a completely ignored signature"; - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-US"; client_state.reference_date = WrapTime(12345); client_state.session_consistency_country = "US"; @@ -711,7 +711,7 @@ const std::string serialized_seed = SerializeSeed(seed); // A valid signature, but for a different seed. const std::string signature = kBase64SeedSignature; - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-US"; client_state.reference_date = WrapTime(12345); client_state.session_consistency_country = "US"; @@ -762,7 +762,7 @@ ASSERT_TRUE( base::Base64Decode(kUncompressedBase64SeedData, &serialized_seed)); const std::string signature = kBase64SeedSignature; - ClientFilterableState client_state; + ClientFilterableState client_state({}); client_state.locale = "en-US"; client_state.reference_date = WrapTime(12345); client_state.session_consistency_country = "US"; @@ -807,7 +807,7 @@ const std::string serialized_seed = SerializeSeed(seed); const std::string base64_seed = SerializeSeedBase64(seed); const std::string signature = "a completely ignored signature"; - ClientFilterableState unused_client_state; + ClientFilterableState unused_client_state({}); const base::Time fetch_time = WrapTime(12345); TestingPrefServiceSimple prefs; @@ -865,7 +865,7 @@ const std::string base64_new_seed = SerializeSeedBase64(new_seed); const std::string signature = "a completely ignored signature"; const base::Time fetch_time = WrapTime(12345); - ClientFilterableState unused_client_state; + ClientFilterableState unused_client_state({}); TestingPrefServiceSimple prefs; VariationsSeedStore::RegisterPrefs(prefs.registry());
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc index 5e1bdff..fb11dd1 100644 --- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc +++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -1537,7 +1537,7 @@ /*expected_count*/ -1); text_range_provider->ExpandToEnclosingUnit(TextUnit_Line); - EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Text in iframe\n"); + EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Text in iframe"); text_range_provider->ExpandToEnclosingUnit(TextUnit_Document); EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, @@ -1703,7 +1703,7 @@ ASSERT_HRESULT_SUCCEEDED( text_range_provider->ExpandToEnclosingUnit(TextUnit_Format)); - EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"plain\ntext\n"); + EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"plain\ntext"); EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT( text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character,
diff --git a/content/browser/appcache/appcache_storage.h b/content/browser/appcache/appcache_storage.h index 50515fa..9d9aed4 100644 --- a/content/browser/appcache/appcache_storage.h +++ b/content/browser/appcache/appcache_storage.h
@@ -49,36 +49,38 @@ Delegate(const Delegate&) = delete; Delegate& operator=(const Delegate&) = delete; - // If retrieval fails, 'collection' will be NULL. + // If retrieval fails, |collection| will be null. virtual void OnAllInfo(AppCacheInfoCollection* collection) {} - // If a load fails the 'cache' will be NULL. + // If the load fails, |cache| will be null. virtual void OnCacheLoaded(AppCache* cache, int64_t cache_id) {} - // If a load fails the 'group' will be NULL. + // If the load fails, |group| will be null. virtual void OnGroupLoaded( AppCacheGroup* group, const GURL& manifest_url) {} - // If successfully stored 'success' will be true. + // If successfully stored, |success| will be true. virtual void OnGroupAndNewestCacheStored( AppCacheGroup* group, AppCache* newest_cache, bool success, bool would_exceed_quota) {} - // If the operation fails, success will be false. + // If the operation fails, |success| will be false. virtual void OnGroupMadeObsolete(AppCacheGroup* group, bool success, int response_code) {} - // If a load fails the 'response_info' will be NULL. + // If a load fails, |response_info| will be null. virtual void OnResponseInfoLoaded(AppCacheResponseInfo* response_info, int64_t response_id) {} - // If no response is found, entry.response_id() and - // fallback_entry.response_id() will be kAppCacheNoResponseId. - // If the response is the entry for an intercept or fallback - // namespace, the url of the namespece entry is returned. - // If a response is found, the cache id and manifest url of the - // containing cache and group are also returned. + // If no response is found, |entry|'s response_id() and |fallback_entry|'s + // response_id() will be kAppCacheNoResponseId. + // + // If the response is the entry for an intercept or fallback namespace, + // |namespace_entry_url| refers to the entry. Otherwise, it is empty. + // + // If a response is found, |cache_id|, |group_id|, and |manifest_url| + // identify the cache containing the response. virtual void OnMainResponseFound(const GURL& url, const AppCacheEntry& entry, const GURL& namespace_entry_url,
diff --git a/content/browser/frame_host/back_forward_cache_impl.cc b/content/browser/frame_host/back_forward_cache_impl.cc index 67a146d..8db526d 100644 --- a/content/browser/frame_host/back_forward_cache_impl.cc +++ b/content/browser/frame_host/back_forward_cache_impl.cc
@@ -49,6 +49,9 @@ // // See: https://developers.google.com/web/updates/2018/07/page-lifecycle-api int rvh_routing_id = render_view_host->GetRoutingID(); + // TODO(dcheng): Page messages should be used in conjunction with + // SendPageMessage(). Having it used to directly route a message to a + // RenderView is somewhat unusual. Figure out why this is needed. if (frozen) { render_view_host->Send( new PageMsg_PutPageIntoBackForwardCache(rvh_routing_id));
diff --git a/content/browser/frame_host/mixed_content_navigation_throttle_unittest.cc b/content/browser/frame_host/mixed_content_navigation_throttle_unittest.cc index 244a4a5f..06f53c2 100644 --- a/content/browser/frame_host/mixed_content_navigation_throttle_unittest.cc +++ b/content/browser/frame_host/mixed_content_navigation_throttle_unittest.cc
@@ -55,4 +55,4 @@ } } -} // content \ No newline at end of file +} // namespace content
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index b1be2765..2973d39 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -2874,7 +2874,13 @@ SiteInstance* instance_to_skip) { DCHECK(IPC_MESSAGE_CLASS(*msg) == PageMsgStart); - // We should always deliver page messages through the main frame. + // We should always deliver page messages through the main frame. This is done + // because at the time, we wanted to avoid routing messages to swapped-out + // RenderViews. The idea was that we might introduce a separate RenderPage + // interface. + // + // TODO(dcheng): Now that RenderView and RenderWidget are increasingly + // separated, it might be possible/desirable to just route to the view. DCHECK(!frame_tree_node_->parent()); if ((IPC_MESSAGE_CLASS(*msg) != PageMsgStart) || frame_tree_node_->parent()) {
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index f26cab9..a02393b 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -27,7 +27,6 @@ #include "base/debug/dump_without_crashing.h" #include "base/feature_list.h" #include "base/files/file.h" -#include "base/lazy_instance.h" #include "base/location.h" #include "base/logging.h" #include "base/memory/memory_pressure_monitor.h" @@ -326,8 +325,10 @@ bool has_done_stun_trials = false; // the global list of all renderer processes -base::LazyInstance<base::IDMap<RenderProcessHost*>>::Leaky g_all_hosts = - LAZY_INSTANCE_INITIALIZER; +base::IDMap<RenderProcessHost*>& GetAllHosts() { + static base::NoDestructor<base::IDMap<RenderProcessHost*>> s_all_hosts; + return *s_all_hosts; +} // Returns the global list of RenderProcessHostCreationObserver objects. std::vector<RenderProcessHostCreationObserver*>& GetAllCreationObservers() { @@ -483,7 +484,7 @@ // This class manages spare RenderProcessHosts. // // There is a singleton instance of this class which manages a single spare -// renderer (g_spare_render_process_host_manager, below). This class +// renderer (SpareRenderProcessHostManager::GetInstance(), below). This class // encapsulates the implementation of // RenderProcessHost::WarmupSpareRenderProcessHost() // @@ -503,6 +504,11 @@ public: SpareRenderProcessHostManager() {} + static SpareRenderProcessHostManager& GetInstance() { + static base::NoDestructor<SpareRenderProcessHostManager> s_instance; + return *s_instance; + } + void WarmupSpareRenderProcessHost(BrowserContext* browser_context) { if (spare_render_process_host_ && spare_render_process_host_->GetBrowserContext() == browser_context) { @@ -517,7 +523,7 @@ // got too many processes. See also ShouldTryToUseExistingProcessHost in // this file. if (RenderProcessHost::run_renderer_in_process() || - g_all_hosts.Get().size() >= + GetAllHosts().size() >= RenderProcessHostImpl::GetMaxRendererProcessCount()) return; @@ -599,7 +605,7 @@ // If the spare shouldn't be kept around, then discard it as soon as we // find that the current spare was mismatched. CleanupSpareRenderProcessHost(); - } else if (g_all_hosts.Get().size() >= + } else if (GetAllHosts().size() >= RenderProcessHostImpl::GetMaxRendererProcessCount()) { // Drop the spare if we are at a process limit and the spare wasn't taken. // This helps avoid process reuse. @@ -670,15 +676,12 @@ } // This is a bare pointer, because RenderProcessHost manages the lifetime of - // all its instances; see g_all_hosts, above. + // all its instances; see GetAllHosts(). RenderProcessHost* spare_render_process_host_ = nullptr; DISALLOW_COPY_AND_ASSIGN(SpareRenderProcessHostManager); }; -base::LazyInstance<SpareRenderProcessHostManager>::Leaky - g_spare_render_process_host_manager = LAZY_INSTANCE_INITIALIZER; - const void* const kDefaultSubframeProcessHostHolderKey = &kDefaultSubframeProcessHostHolderKey; @@ -1418,8 +1421,10 @@ // static void RenderProcessHost::SetMaxRendererProcessCount(size_t count) { g_max_renderer_count_override = count; - if (g_all_hosts.Get().size() > count) - g_spare_render_process_host_manager.Get().CleanupSpareRenderProcessHost(); + if (GetAllHosts().size() > count) { + SpareRenderProcessHostManager::GetInstance() + .CleanupSpareRenderProcessHost(); + } } // static @@ -1530,7 +1535,7 @@ CHECK(!BrowserMainRunner::ExitedMainMessageLoop()); RegisterHost(GetID(), this); - g_all_hosts.Get().set_check_on_null_data(true); + GetAllHosts().set_check_on_null_data(true); // Initialize |child_process_activity_time_| to a reasonable value. mark_child_process_activity_time(); @@ -1570,7 +1575,7 @@ void RenderProcessHostImpl::ShutDownInProcessRenderer() { DCHECK(g_run_renderer_in_process); - switch (g_all_hosts.Pointer()->size()) { + switch (GetAllHosts().size()) { case 0: return; case 1: { @@ -2849,19 +2854,20 @@ // static void RenderProcessHostImpl::NotifySpareManagerAboutRecentlyUsedBrowserContext( BrowserContext* browser_context) { - g_spare_render_process_host_manager.Get().PrepareForFutureRequests( + SpareRenderProcessHostManager::GetInstance().PrepareForFutureRequests( browser_context); } // static RenderProcessHost* RenderProcessHostImpl::GetSpareRenderProcessHostForTesting() { - return g_spare_render_process_host_manager.Get().spare_render_process_host(); + return SpareRenderProcessHostManager::GetInstance() + .spare_render_process_host(); } // static void RenderProcessHostImpl::DiscardSpareRenderProcessHostForTesting() { - g_spare_render_process_host_manager.Get().CleanupSpareRenderProcessHost(); + SpareRenderProcessHostManager::GetInstance().CleanupSpareRenderProcessHost(); } // static @@ -3688,16 +3694,16 @@ // static void RenderProcessHostImpl::RegisterHost(int host_id, RenderProcessHost* host) { - g_all_hosts.Get().AddWithID(host, host_id); + GetAllHosts().AddWithID(host, host_id); } // static void RenderProcessHostImpl::UnregisterHost(int host_id) { - RenderProcessHost* host = g_all_hosts.Get().Lookup(host_id); + RenderProcessHost* host = GetAllHosts().Lookup(host_id); if (!host) return; - g_all_hosts.Get().Remove(host_id); + GetAllHosts().Remove(host_id); // Look up the map of site to process for the given browser_context, // in case we need to remove this process from it. It will be registered @@ -3857,7 +3863,7 @@ // static void RenderProcessHost::WarmupSpareRenderProcessHost( content::BrowserContext* browser_context) { - g_spare_render_process_host_manager.Get().WarmupSpareRenderProcessHost( + SpareRenderProcessHostManager::GetInstance().WarmupSpareRenderProcessHost( browser_context); } @@ -3889,13 +3895,13 @@ // static RenderProcessHost::iterator RenderProcessHost::AllHostsIterator() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - return iterator(g_all_hosts.Pointer()); + return iterator(&GetAllHosts()); } // static RenderProcessHost* RenderProcessHost::FromID(int render_process_id) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - return g_all_hosts.Get().Lookup(render_process_id); + return GetAllHosts().Lookup(render_process_id); } // static @@ -3922,7 +3928,7 @@ // a renderer process for a browser context that has no existing // renderers. This is OK in moderation, since the // GetMaxRendererProcessCount() is conservative. - if (g_all_hosts.Get().size() >= GetMaxRendererProcessCount()) + if (GetAllHosts().size() >= GetMaxRendererProcessCount()) return true; return GetContentClient()->browser()->ShouldTryToUseExistingProcessHost( @@ -3934,7 +3940,7 @@ SiteInstanceImpl* site_instance) { // First figure out which existing renderers we can use. std::vector<RenderProcessHost*> suitable_renderers; - suitable_renderers.reserve(g_all_hosts.Get().size()); + suitable_renderers.reserve(GetAllHosts().size()); iterator iter(AllHostsIterator()); while (!iter.IsAtEnd()) { @@ -3945,7 +3951,7 @@ site_instance->lock_url())) { // The spare is always considered before process reuse. DCHECK_NE(iter.GetCurrentValue(), - g_spare_render_process_host_manager.Get() + SpareRenderProcessHostManager::GetInstance() .spare_render_process_host()); suitable_renderers.push_back(iter.GetCurrentValue()); @@ -4096,8 +4102,7 @@ } // See if the spare RenderProcessHost can be used. - SpareRenderProcessHostManager& spare_process_manager = - g_spare_render_process_host_manager.Get(); + auto& spare_process_manager = SpareRenderProcessHostManager::GetInstance(); bool spare_was_taken = false; if (!render_process_host) { render_process_host = spare_process_manager.MaybeTakeSpareRenderProcessHost(
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm index 5eead918..e0810387 100644 --- a/content/browser/sandbox_parameters_mac.mm +++ b/content/browser/sandbox_parameters_mac.mm
@@ -53,8 +53,8 @@ return std::to_string(final_os_version); } -// Retrieves the users shared cache and adds it to the profile. -void AddDarwinUserCache(sandbox::SeatbeltExecClient* client) { +// Retrieves the users shared darwin dirs and adds it to the profile. +void AddDarwinDirs(sandbox::SeatbeltExecClient* client) { char dir_path[PATH_MAX + 1]; size_t rv = confstr(_CS_DARWIN_USER_CACHE_DIR, dir_path, sizeof(dir_path)); @@ -63,6 +63,20 @@ "DARWIN_USER_CACHE_DIR", service_manager::SandboxMac::GetCanonicalPath(base::FilePath(dir_path)) .value())); + + rv = confstr(_CS_DARWIN_USER_DIR, dir_path, sizeof(dir_path)); + PCHECK(rv != 0); + CHECK(client->SetParameter( + "DARWIN_USER_DIR", + service_manager::SandboxMac::GetCanonicalPath(base::FilePath(dir_path)) + .value())); + + rv = confstr(_CS_DARWIN_USER_TEMP_DIR, dir_path, sizeof(dir_path)); + PCHECK(rv != 0); + CHECK(client->SetParameter( + "DARWIN_USER_TEMP_DIR", + service_manager::SandboxMac::GetCanonicalPath(base::FilePath(dir_path)) + .value())); } // All of the below functions populate the |client| with the parameters that the @@ -128,7 +142,7 @@ std::vector<base::FilePath> storage_paths = GetContentClient()->browser()->GetNetworkContextsParentDirectory(); - AddDarwinUserCache(client); + AddDarwinDirs(client); CHECK(client->SetParameter("NETWORK_SERVICE_STORAGE_PATHS_COUNT", base::NumberToString(storage_paths.size()))); @@ -204,7 +218,7 @@ break; case service_manager::SANDBOX_TYPE_GPU: SetupCommonSandboxParameters(client); - AddDarwinUserCache(client); + AddDarwinDirs(client); break; case service_manager::SANDBOX_TYPE_CDM: SetupCDMSandboxParameters(client);
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index e7b15abb2..bd104ed 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -156,6 +156,9 @@ if (base::FeatureList::IsEnabled(features::kWebXr)) WebRuntimeFeatures::EnableWebXR(true); + if (base::FeatureList::IsEnabled(features::kWebXrArDOMOverlay)) + WebRuntimeFeatures::EnableWebXRARDOMOverlay(true); + if (base::FeatureList::IsEnabled(features::kWebXrArModule)) WebRuntimeFeatures::EnableWebXRARModule(true); @@ -383,11 +386,6 @@ true); } - if (!base::FeatureList::IsEnabled( - features::kPauseExecutionContextOnBackgroundFreeze)) { - WebRuntimeFeatures::EnablePauseExecutionContextOnBackgroundFreeze(false); - } - WebRuntimeFeatures::EnableConsolidatedMovementXY( base::FeatureList::IsEnabled(features::kConsolidatedMovementXY));
diff --git a/content/child/webthemeengine_impl_default_browsertest.cc b/content/child/webthemeengine_impl_default_browsertest.cc index 4fb934b..30ae37df 100644 --- a/content/child/webthemeengine_impl_default_browsertest.cc +++ b/content/child/webthemeengine_impl_default_browsertest.cc
@@ -6,6 +6,10 @@ #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" +#if defined(OS_WIN) +#include "base/win/windows_version.h" +#endif // defined (OS_WIN) + namespace content { class WebThemeEngineImplDefaultBrowserTest : public ContentBrowserTest { @@ -14,8 +18,7 @@ }; #if defined(OS_WIN) -IN_PROC_BROWSER_TEST_F(WebThemeEngineImplDefaultBrowserTest, - DISABLED_GetSystemColor) { +IN_PROC_BROWSER_TEST_F(WebThemeEngineImplDefaultBrowserTest, GetSystemColor) { GURL url( "data:text/html," "<!doctype html><html>" @@ -91,17 +94,32 @@ "window", "windowFrame", "windowText"}; - std::vector<std::string> expected_colors = { - "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(255, 255, 255)", - "rgb(99, 99, 206)", "rgb(240, 240, 240)", "rgb(221, 221, 221)", - "rgb(136, 136, 136)", "rgb(0, 0, 0)", "rgb(0, 0, 0)", - "rgb(109, 109, 109)", "rgb(0, 120, 215)", "rgb(255, 255, 255)", - "rgb(255, 255, 255)", "rgb(255, 255, 255)", "rgb(127, 127, 127)", - "rgb(251, 252, 197)", "rgb(0, 0, 0)", "rgb(0, 102, 204)", - "rgb(247, 247, 247)", "rgb(0, 0, 0)", "rgb(255, 255, 255)", - "rgb(102, 102, 102)", "rgb(192, 192, 192)", "rgb(221, 221, 221)", - "rgb(192, 192, 192)", "rgb(136, 136, 136)", "rgb(0, 102, 204)", - "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(0, 0, 0)"}; + std::vector<std::string> expected_colors; + if (base::win::GetVersion() <= base::win::Version::WIN8_1) { + expected_colors = { + "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(255, 255, 255)", + "rgb(99, 99, 206)", "rgb(240, 240, 240)", "rgb(221, 221, 221)", + "rgb(136, 136, 136)", "rgb(0, 0, 0)", "rgb(0, 0, 0)", + "rgb(109, 109, 109)", "rgb(51, 153, 255)", "rgb(255, 255, 255)", + "rgb(255, 255, 255)", "rgb(255, 255, 255)", "rgb(127, 127, 127)", + "rgb(251, 252, 197)", "rgb(0, 0, 0)", "rgb(0, 102, 204)", + "rgb(247, 247, 247)", "rgb(0, 0, 0)", "rgb(255, 255, 255)", + "rgb(102, 102, 102)", "rgb(192, 192, 192)", "rgb(221, 221, 221)", + "rgb(192, 192, 192)", "rgb(136, 136, 136)", "rgb(0, 102, 204)", + "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(0, 0, 0)"}; + } else { + expected_colors = { + "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(255, 255, 255)", + "rgb(99, 99, 206)", "rgb(240, 240, 240)", "rgb(221, 221, 221)", + "rgb(136, 136, 136)", "rgb(0, 0, 0)", "rgb(0, 0, 0)", + "rgb(109, 109, 109)", "rgb(0, 120, 215)", "rgb(255, 255, 255)", + "rgb(255, 255, 255)", "rgb(255, 255, 255)", "rgb(127, 127, 127)", + "rgb(251, 252, 197)", "rgb(0, 0, 0)", "rgb(0, 102, 204)", + "rgb(247, 247, 247)", "rgb(0, 0, 0)", "rgb(255, 255, 255)", + "rgb(102, 102, 102)", "rgb(192, 192, 192)", "rgb(221, 221, 221)", + "rgb(192, 192, 192)", "rgb(136, 136, 136)", "rgb(0, 102, 204)", + "rgb(255, 255, 255)", "rgb(204, 204, 204)", "rgb(0, 0, 0)"}; + } ASSERT_EQ(ids.size(), expected_colors.size());
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 1efa61ee1..5ca2dba5 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -344,11 +344,6 @@ const base::Feature kPassiveEventListenersDueToFling{ "PassiveEventListenersDueToFling", base::FEATURE_ENABLED_BY_DEFAULT}; -// Whether ExecutionContext is paused (and workers) on background freeze. -const base::Feature kPauseExecutionContextOnBackgroundFreeze = { - "PauseExecutionContextOnBackgroundFreeze", - base::FEATURE_ENABLED_BY_DEFAULT}; - // Whether web apps can run periodic tasks upon network connectivity. const base::Feature kPeriodicBackgroundSync{"PeriodicBackgroundSync", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -711,6 +706,10 @@ const base::Feature kWebXrPlaneDetection{"WebXRPlaneDetection", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables access to planes detected in the user's environment. +const base::Feature kWebXrArDOMOverlay{"WebXRARDOMOverlay", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Start streaming scripts on script preload. const base::Feature kScriptStreamingOnPreload{"ScriptStreamingOnPreload", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index 5e321d5..8874f58 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -81,8 +81,6 @@ CONTENT_EXPORT extern const base::Feature kPassiveDocumentEventListeners; CONTENT_EXPORT extern const base::Feature kPassiveDocumentWheelEventListeners; CONTENT_EXPORT extern const base::Feature kPassiveEventListenersDueToFling; -CONTENT_EXPORT extern const base::Feature - kPauseExecutionContextOnBackgroundFreeze; CONTENT_EXPORT extern const base::Feature kPeriodicBackgroundSync; CONTENT_EXPORT extern const base::Feature kPerNavigationMojoInterface; CONTENT_EXPORT extern const base::Feature kPepper3DImageChromium; @@ -149,6 +147,7 @@ CONTENT_EXPORT extern const base::Feature kWebXr; CONTENT_EXPORT extern const base::Feature kWebXrArModule; CONTENT_EXPORT extern const base::Feature kWebXrAnchors; +CONTENT_EXPORT extern const base::Feature kWebXrArDOMOverlay; CONTENT_EXPORT extern const base::Feature kWebXrHitTest; CONTENT_EXPORT extern const base::Feature kWebXrPlaneDetection; CONTENT_EXPORT extern const base::Feature kScriptStreamingOnPreload;
diff --git a/content/public/test/android/BUILD.gn b/content/public/test/android/BUILD.gn index 4cd17c4..d2a6025e 100644 --- a/content/public/test/android/BUILD.gn +++ b/content/public/test/android/BUILD.gn
@@ -2,6 +2,7 @@ import("//build/config/android/rules.gni") generate_jni("test_support_content_jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/content_public/browser/test/NestedSystemMessageHandler.java", ]
diff --git a/content/renderer/input/frame_input_handler_impl.cc b/content/renderer/input/frame_input_handler_impl.cc index 7a9098c..2b3feaa 100644 --- a/content/renderer/input/frame_input_handler_impl.cc +++ b/content/renderer/input/frame_input_handler_impl.cc
@@ -286,7 +286,7 @@ if (!render_frame_) return; - RenderWidget* window_widget = render_frame_->render_view()->GetWidget(); + RenderWidget* window_widget = render_frame_->GetLocalRootRenderWidget(); HandlingState handling_state(render_frame_, UpdateState::kIsSelectingRange); render_frame_->GetWebFrame()->SelectRange( window_widget->ConvertWindowPointToViewport(base), @@ -383,7 +383,7 @@ return; HandlingState handling_state(render_frame_, UpdateState::kIsSelectingRange); render_frame_->GetWebFrame()->MoveRangeSelectionExtent( - render_frame_->render_view()->GetWidget()->ConvertWindowPointToViewport( + render_frame_->GetLocalRootRenderWidget()->ConvertWindowPointToViewport( extent)); } @@ -418,7 +418,7 @@ return; render_frame_->GetWebFrame()->MoveCaretSelection( - render_frame_->render_view()->GetWidget()->ConvertWindowPointToViewport( + render_frame_->GetLocalRootRenderWidget()->ConvertWindowPointToViewport( point)); }
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index f98f1689..63be2c1 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2239,7 +2239,9 @@ #endif bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { - // Forward Page IPCs to the RenderView. + // Page IPCs are routed via the main frame (both local and remote) and then + // forwarded to the RenderView. See comment in + // RenderFrameHostManager::SendPageMessage() for more information. if ((IPC_MESSAGE_CLASS(msg) == PageMsgStart)) { if (render_view()) return render_view()->OnMessageReceived(msg); @@ -4231,11 +4233,17 @@ // popup. So from the user perspective, only the first one will show, and // will have to close the first one before another one can be shown. if (external_popup_menu_) - return NULL; - external_popup_menu_.reset( - new ExternalPopupMenu(this, popup_menu_info, popup_menu_client)); - render_view_->GetWidget()->SetExternalPopupOriginAdjustmentsForEmulation( - external_popup_menu_.get()); + return nullptr; + external_popup_menu_ = std::make_unique<ExternalPopupMenu>( + this, popup_menu_info, popup_menu_client); + + // Emulation has never worked appropriately for subframes. Don't bother + // applying them if this is not a main frame. + if (IsMainFrame() && + render_view_->page_properties()->ScreenMetricsEmulator()) { + external_popup_menu_->SetOriginScaleForEmulation( + render_view_->page_properties()->ScreenMetricsEmulator()->scale()); + } return external_popup_menu_.get(); #else return nullptr;
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc index a4892fc..3368d7d 100644 --- a/content/renderer/render_frame_proxy.cc +++ b/content/renderer/render_frame_proxy.cc
@@ -375,7 +375,9 @@ } bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) { - // Forward Page IPCs to the RenderView. + // Page IPCs are routed via the main frame (both local and remote) and then + // forwarded to the RenderView. See comment in + // RenderFrameHostManager::SendPageMessage() for more information. if ((IPC_MESSAGE_CLASS(msg) == PageMsgStart)) { if (render_view()) return render_view()->OnMessageReceived(msg);
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index e6d5b700d..c6ad6ff 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -1823,11 +1823,17 @@ void RenderViewImpl::SetEditCommandForNextKeyEvent(const std::string& name, const std::string& value) { - render_widget_->SetEditCommandForNextKeyEvent(name, value); + // This is test-only code. Only propagate the command if there is a main + // render frame. + if (main_render_frame_) + render_widget_->SetEditCommandForNextKeyEvent(name, value); } void RenderViewImpl::ClearEditCommands() { - render_widget_->ClearEditCommands(); + // This is test-only code. Only propagate the command if there is a main + // render frame. + if (main_render_frame_) + render_widget_->ClearEditCommands(); } const std::string& RenderViewImpl::GetAcceptLanguages() {
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 669d6a0b..a61ad9e6b 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -590,15 +590,6 @@ RenderThread::Get()->AddRoute(routing_id_, this); } -#if BUILDFLAG(USE_EXTERNAL_POPUP_MENU) -void RenderWidget::SetExternalPopupOriginAdjustmentsForEmulation( - ExternalPopupMenu* popup) { - if (page_properties_->ScreenMetricsEmulator()) - popup->SetOriginScaleForEmulation( - page_properties_->ScreenMetricsEmulator()->scale()); -} -#endif - bool RenderWidget::OnMessageReceived(const IPC::Message& message) { // TODO(https://crbug.com/1000502): Don't process IPC messages on undead // RenderWidgets. We would like to eventually remove them altogether, so they
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index caa53d5..42c6dd9 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h
@@ -112,7 +112,6 @@ namespace content { class BrowserPlugin; class CompositorDependencies; -class ExternalPopupMenu; class FrameSwapMessageQueue; class ImeEventGuard; class LayerTreeView; @@ -739,10 +738,6 @@ // is always in physical pixels. gfx::Rect CompositorViewportRect() const; -#if BUILDFLAG(USE_EXTERNAL_POPUP_MENU) - void SetExternalPopupOriginAdjustmentsForEmulation(ExternalPopupMenu* popup); -#endif - // RenderWidget IPC message handlers. void OnHandleInputEvent( const blink::WebInputEvent* event,
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index c9e4a7c..fef7219 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -2449,6 +2449,7 @@ ] generate_jni("content_unittests_jni_headers") { + testonly = true sources = content_java_sources_needing_jni }
diff --git a/content/test/web_test_support.cc b/content/test/web_test_support.cc index 46891a4..2b6187c2 100644 --- a/content/test/web_test_support.cc +++ b/content/test/web_test_support.cc
@@ -206,7 +206,9 @@ } void ForceResizeRenderView(RenderView* render_view, const WebSize& new_size) { - auto* render_view_impl = static_cast<RenderViewImpl*>(render_view); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; RenderWidget* render_widget = render_view_impl->GetWidget(); gfx::Rect window_rect(render_widget->WindowRect().x, render_widget->WindowRect().y, new_size.width, @@ -215,14 +217,17 @@ } void SetDeviceScaleFactor(RenderView* render_view, float factor) { - RenderWidget* render_widget = - static_cast<RenderViewImpl*>(render_view)->GetWidget(); - render_widget->SetDeviceScaleFactorForTesting(factor); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; + render_view_impl->GetWidget()->SetDeviceScaleFactorForTesting(factor); } float GetWindowToViewportScale(RenderView* render_view) { - return GetWindowToViewportScale( - static_cast<RenderViewImpl*>(render_view)->GetWidget()); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + blink::WebFloatRect rect(0, 0, 1.0f, 0.0); + render_view_impl->page_properties()->ConvertWindowToViewport(&rect); + return rect.width; } std::unique_ptr<blink::WebInputEvent> TransformScreenToWidgetCoordinates( @@ -256,9 +261,10 @@ void SetDeviceColorSpace(RenderView* render_view, const gfx::ColorSpace& color_space) { - RenderWidget* render_widget = - static_cast<RenderViewImpl*>(render_view)->GetWidget(); - render_widget->SetDeviceColorSpaceForTesting(color_space); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; + render_view_impl->GetWidget()->SetDeviceColorSpaceForTesting(color_space); } void SetTestBluetoothScanDuration(BluetoothTestScanDurationSetting setting) { @@ -277,23 +283,26 @@ } void UseSynchronousResizeMode(RenderView* render_view, bool enable) { - RenderWidget* render_widget = - static_cast<RenderViewImpl*>(render_view)->GetWidget(); - render_widget->UseSynchronousResizeModeForTesting(enable); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; + render_view_impl->GetWidget()->UseSynchronousResizeModeForTesting(enable); } void EnableAutoResizeMode(RenderView* render_view, const WebSize& min_size, const WebSize& max_size) { - RenderWidget* render_widget = - static_cast<RenderViewImpl*>(render_view)->GetWidget(); - render_widget->EnableAutoResizeForTesting(min_size, max_size); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; + render_view_impl->GetWidget()->EnableAutoResizeForTesting(min_size, max_size); } void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) { - RenderWidget* render_widget = - static_cast<RenderViewImpl*>(render_view)->GetWidget(); - render_widget->DisableAutoResizeForTesting(new_size); + RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); + if (!render_view_impl->GetMainRenderFrame()) + return; + render_view_impl->GetWidget()->DisableAutoResizeForTesting(new_size); } void SchedulerRunIdleTasks(base::OnceClosure callback) {
diff --git a/device/BUILD.gn b/device/BUILD.gn index ea1d749e5..3ddcd149 100644 --- a/device/BUILD.gn +++ b/device/BUILD.gn
@@ -366,6 +366,7 @@ ] generate_jni("bluetooth_test_jni_headers") { + testonly = true sources = bluetooth_java_sources_needing_jni }
diff --git a/device/vr/public/mojom/isolated_xr_service.mojom b/device/vr/public/mojom/isolated_xr_service.mojom index 7754ce5..45cf27b 100644 --- a/device/vr/public/mojom/isolated_xr_service.mojom +++ b/device/vr/public/mojom/isolated_xr_service.mojom
@@ -46,6 +46,10 @@ bool immersive; bool environment_integration; + // The enabled features combine the active required and optional features as + // resolved by BrowserXRRuntime and VRServiceImpl. + array<XRSessionFeature> enabled_features; + // The following options are used for permission requests and showing module // install UI. // TODO(crbug.com/854655): Remove these fields, and do permission checks, show
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom index 63f3fdc..361143f 100644 --- a/device/vr/public/mojom/vr_service.mojom +++ b/device/vr/public/mojom/vr_service.mojom
@@ -52,6 +52,9 @@ REF_SPACE_LOCAL_FLOOR = 3, REF_SPACE_BOUNDED_FLOOR = 4, REF_SPACE_UNBOUNDED = 5, + + // Experimental or not-yet-standardized feature names. + DOM_OVERLAY_FOR_HANDHELD_AR = 6, }; struct XRSessionOptions {
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl index 0099eff..4f07a25d 100644 --- a/extensions/common/api/automation.idl +++ b/extensions/common/api/automation.idl
@@ -822,7 +822,7 @@ long? tableCellColumnIndex; // The ARIA column index as specified by the page author. - long? ariaCellColumnIndex; + long? tableCellAriaColumnIndex; // The number of columns that this cell spans (default is 1). long? tableCellColumnSpan; @@ -832,7 +832,7 @@ long? tableCellRowIndex; // The ARIA row index as specified by the page author. - long? ariaCellRowIndex; + long? tableCellAriaRowIndex; // The number of rows that this cell spans (default is 1). long? tableCellRowSpan;
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index 90dc3ef3..ad6e32a 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -1394,6 +1394,20 @@ if (node->GetTableCellRowIndex()) result.Set(*node->GetTableCellRowIndex()); }); + RouteNodeIDFunction( + "GetTableCellAriaColumnIndex", + [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, + AutomationAXTreeWrapper* tree_wrapper, ui::AXNode* node) { + if (node->GetTableCellAriaColIndex()) + result.Set(*node->GetTableCellAriaColIndex()); + }); + RouteNodeIDFunction( + "GetTableCellAriaRowIndex", + [](v8::Isolate* isolate, v8::ReturnValue<v8::Value> result, + AutomationAXTreeWrapper* tree_wrapper, ui::AXNode* node) { + if (node->GetTableCellAriaRowIndex()) + result.Set(*node->GetTableCellAriaRowIndex()); + }); } void AutomationInternalCustomBindings::Invalidate() {
diff --git a/extensions/renderer/resources/automation/automation_node.js b/extensions/renderer/resources/automation/automation_node.js index 61c4551..a2310bd7 100644 --- a/extensions/renderer/resources/automation/automation_node.js +++ b/extensions/renderer/resources/automation/automation_node.js
@@ -450,6 +450,20 @@ var GetTableCellRowIndex = natives.GetTableCellRowIndex; /** + * @param {string} axTreeID The id of the accessibility tree. + * @param {number} nodeID The id of a node. + * @return {number} Column index for this cell. + */ +var GetTableCellAriaColumnIndex = natives.GetTableCellAriaColumnIndex; + +/** + * @param {string} axTreeID The id of the accessibility tree. + * @param {number} nodeID The id of a node. + * @return {number} Row index for this cell. + */ +var GetTableCellAriaRowIndex = natives.GetTableCellAriaRowIndex; + +/** * @param {string} axTreeId The id of the accessibility tree. * @param {number} nodeID The id of a node. * @return {string} Detected language for this node. @@ -721,6 +735,15 @@ return GetTableCellRowIndex(this.treeID, this.id); }, + + get tableCellAriaColumnIndex() { + return GetTableCellAriaColumnIndex(this.treeID, this.id); + }, + + get tableCellAriaRowIndex() { + return GetTableCellAriaRowIndex(this.treeID, this.id); + }, + get nonInlineTextWordStarts() { return GetWordStartOffsets(this.treeID, this.id); }, @@ -1162,9 +1185,7 @@ 'scrollYMax', 'scrollYMin', 'setSize', - 'ariaCellColumnIndex', 'tableCellColumnSpan', - 'ariaCellRowIndex', 'tableCellRowSpan', 'tableColumnCount', 'ariaColumnCount', @@ -1739,6 +1760,8 @@ 'tableCellRowHeaders', 'tableCellColumnIndex', 'tableCellRowIndex', + 'tableCellAriaRowIndex', + 'tableCellAriaColumnIndex', 'nonInlineTextWordStarts', 'nonInlineTextWordEnds', ]),
diff --git a/fuchsia/base/BUILD.gn b/fuchsia/base/BUILD.gn index ccb22a144..686741d 100644 --- a/fuchsia/base/BUILD.gn +++ b/fuchsia/base/BUILD.gn
@@ -5,7 +5,7 @@ assert(is_fuchsia) import("//build/config/fuchsia/fidl_library.gni") -import("//build/config/fuchsia/rules.gni") +import("//build/config/fuchsia/generate_runner_scripts.gni") import("//testing/test.gni") # Integration helpers for commonly used fuchsia.* APIs.
diff --git a/fuchsia/engine/BUILD.gn b/fuchsia/engine/BUILD.gn index 5edf7431..e2f1395 100644 --- a/fuchsia/engine/BUILD.gn +++ b/fuchsia/engine/BUILD.gn
@@ -4,7 +4,7 @@ assert(is_fuchsia) -import("//build/config/fuchsia/rules.gni") +import("//build/config/fuchsia/generate_runner_scripts.gni") import("//build/config/fuchsia/symbol_archive.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//testing/test.gni")
diff --git a/fuchsia/engine/renderer/web_engine_content_renderer_client.cc b/fuchsia/engine/renderer/web_engine_content_renderer_client.cc index 17c53ae9..141f41b 100644 --- a/fuchsia/engine/renderer/web_engine_content_renderer_client.cc +++ b/fuchsia/engine/renderer/web_engine_content_renderer_client.cc
@@ -104,6 +104,11 @@ supported_video_codecs |= media::EME_CODEC_AVC1; } + media::SupportedCodecs supported_audio_codecs = media::EME_CODEC_AUDIO_ALL; + + media::SupportedCodecs supported_codecs = + supported_video_codecs | supported_audio_codecs; + base::flat_set<media::EncryptionMode> encryption_schemes{ media::EncryptionMode::kCenc, media::EncryptionMode::kCbcs}; @@ -111,10 +116,10 @@ // Chromium. Hardware secured decoders are only available for supported // video codecs. key_systems->emplace_back(new cdm::WidevineKeySystemProperties( - media::EME_CODEC_AUDIO_ALL | supported_video_codecs, // codecs - encryption_schemes, // encryption schemes - supported_video_codecs, // hw secure codecs - encryption_schemes, // hw secure encryption schemes + supported_codecs, // codecs + encryption_schemes, // encryption schemes + supported_codecs, // hw secure codecs + encryption_schemes, // hw secure encryption schemes cdm::WidevineKeySystemProperties::Robustness:: HW_SECURE_CRYPTO, // max audio robustness cdm::WidevineKeySystemProperties::Robustness::
diff --git a/fuchsia/http/BUILD.gn b/fuchsia/http/BUILD.gn index 27ec910..60087cc 100644 --- a/fuchsia/http/BUILD.gn +++ b/fuchsia/http/BUILD.gn
@@ -5,7 +5,7 @@ assert(is_fuchsia) import("//build/config/fuchsia/fidl_library.gni") -import("//build/config/fuchsia/rules.gni") +import("//build/config/fuchsia/generate_runner_scripts.gni") import("//build/config/fuchsia/symbol_archive.gni") import("//build/util/process_version.gni") import("//testing/test.gni")
diff --git a/fuchsia/runners/BUILD.gn b/fuchsia/runners/BUILD.gn index 32a63fa..38c4cc9 100644 --- a/fuchsia/runners/BUILD.gn +++ b/fuchsia/runners/BUILD.gn
@@ -5,7 +5,7 @@ assert(is_fuchsia) import("//build/buildflag_header.gni") -import("//build/config/fuchsia/rules.gni") +import("//build/config/fuchsia/generate_runner_scripts.gni") import("//build/config/fuchsia/symbol_archive.gni") import("//testing/test.gni")
diff --git a/gpu/command_buffer/service/external_vk_image_backing.cc b/gpu/command_buffer/service/external_vk_image_backing.cc index 054b174..cc0af9d 100644 --- a/gpu/command_buffer/service/external_vk_image_backing.cc +++ b/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -9,6 +9,7 @@ #include "base/memory/unsafe_shared_memory_region.h" #include "base/posix/eintr_wrapper.h" +#include "base/stl_util.h" #include "base/system/sys_info.h" #include "build/build_config.h" #include "components/viz/common/resources/resource_sizes.h" @@ -41,6 +42,35 @@ namespace { +static const struct { + GLenum gl_format; + GLenum gl_type; + GLuint bytes_per_pixel; +} kFormatTable[] = { + {GL_RGBA, GL_UNSIGNED_BYTE, 4}, // RGBA_8888 + {GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 2}, // RGBA_4444 + {GL_BGRA, GL_UNSIGNED_BYTE, 4}, // BGRA_8888 + {GL_RED, GL_UNSIGNED_BYTE, 1}, // ALPHA_8 + {GL_RED, GL_UNSIGNED_BYTE, 1}, // LUMINANCE_8 + {GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 2}, // RGB_565 + {GL_BGR, GL_UNSIGNED_SHORT_5_6_5, 2}, // BGR_565 + {GL_ZERO, GL_ZERO, 0}, // ETC1 + {GL_RED, GL_UNSIGNED_BYTE, 1}, // RED_8 + {GL_RG, GL_UNSIGNED_BYTE, 2}, // RG_88 + {GL_RED, GL_HALF_FLOAT_OES, 2}, // LUMINANCE_F16 + {GL_RGBA, GL_HALF_FLOAT_OES, 8}, // RGBA_F16 + {GL_RED, GL_UNSIGNED_SHORT, 2}, // R16_EXT + {GL_RGBA, GL_UNSIGNED_BYTE, 4}, // RGBX_8888 + {GL_BGRA, GL_UNSIGNED_BYTE, 4}, // BGRX_8888 + {GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, 4}, // RGBX_1010102 + {GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV, 4}, // BGRX_1010102 + {GL_ZERO, GL_ZERO, 0}, // YVU_420 + {GL_ZERO, GL_ZERO, 0}, // YUV_420_BIPLANAR + {GL_ZERO, GL_ZERO, 0}, // P010 +}; +static_assert(base::size(kFormatTable) == (viz::RESOURCE_FORMAT_MAX + 1), + "kFormatTable does not handle all cases."); + GrVkImageInfo CreateGrVkImageInfo( VkImage image, VkFormat vk_format, @@ -690,13 +720,17 @@ return; } if ((latest_content_ & kInGLTexture) && use_separate_gl_texture()) { - CopyPixelsFromGLTexture(); + CopyPixelsFromGLTextureToVkImage(); latest_content_ |= kInVkImage; return; } } else if (content_flags == kInGLTexture) { - // TODO(penghuang): support updating content in gl texture. - NOTIMPLEMENTED_LOG_ONCE(); + DCHECK(use_separate_gl_texture()); + if (latest_content_ & kInSharedMemory) { + CopyPixelsFromShmToGLTexture(); + } else if (latest_content_ & kInVkImage) { + NOTIMPLEMENTED_LOG_ONCE(); + } } else if (content_flags == kInSharedMemory) { // TODO(penghuang): read pixels back from VkImage to shared memory GMB, if // this feature is needed. @@ -843,57 +877,19 @@ return true; } -void ExternalVkImageBacking::CopyPixelsFromGLTexture() { +void ExternalVkImageBacking::CopyPixelsFromGLTextureToVkImage() { DCHECK(use_separate_gl_texture()); DCHECK(texture_); - GLenum gl_format = GL_NONE; - GLenum gl_type = GL_NONE; - size_t bytes_per_pixel = 0; - switch (ToVkFormat(format())) { - case VK_FORMAT_R8G8B8A8_UNORM: - gl_format = GL_RGBA; - gl_type = GL_UNSIGNED_BYTE; - bytes_per_pixel = 4; - break; - case VK_FORMAT_B8G8R8A8_UNORM: - gl_format = GL_BGRA; - gl_type = GL_UNSIGNED_BYTE; - bytes_per_pixel = 4; - break; - case VK_FORMAT_R8_UNORM: - gl_format = GL_RED; - gl_type = GL_UNSIGNED_BYTE; - bytes_per_pixel = 1; - break; - case VK_FORMAT_R4G4B4A4_UNORM_PACK16: - gl_format = GL_RGBA; - gl_type = GL_UNSIGNED_SHORT_4_4_4_4; - bytes_per_pixel = 2; - break; - case VK_FORMAT_R5G6B5_UNORM_PACK16: - gl_format = GL_RGB; - gl_type = GL_UNSIGNED_SHORT_5_6_5; - bytes_per_pixel = 2; - break; - case VK_FORMAT_R16_UNORM: - gl_format = GL_RED; - gl_type = GL_UNSIGNED_SHORT; - bytes_per_pixel = 2; - break; - case VK_FORMAT_A2B10G10R10_UNORM_PACK32: - gl_format = GL_RGBA; - gl_type = GL_UNSIGNED_INT_2_10_10_10_REV; - bytes_per_pixel = 4; - break; - case VK_FORMAT_R16G16B16A16_SFLOAT: - gl_format = GL_RGBA; - gl_type = GL_HALF_FLOAT; - bytes_per_pixel = 8; - break; - default: - NOTREACHED() << "Not supported resource format=" << format(); - return; + DCHECK_GE(format(), 0); + DCHECK_LE(format(), viz::RESOURCE_FORMAT_MAX); + auto gl_format = kFormatTable[format()].gl_format; + auto gl_type = kFormatTable[format()].gl_type; + auto bytes_per_pixel = kFormatTable[format()].bytes_per_pixel; + + if (gl_format == GL_ZERO) { + NOTREACHED() << "Not supported resource format=" << format(); + return; } // Make sure GrContext is not using GL. So we don't need reset GrContext @@ -941,6 +937,50 @@ api->glDeleteFramebuffersEXTFn(1, &framebuffer); } +void ExternalVkImageBacking::CopyPixelsFromShmToGLTexture() { + DCHECK(use_separate_gl_texture()); + DCHECK(texture_); + + DCHECK_GE(format(), 0); + DCHECK_LE(format(), viz::RESOURCE_FORMAT_MAX); + auto gl_format = kFormatTable[format()].gl_format; + auto gl_type = kFormatTable[format()].gl_type; + auto bytes_per_pixel = kFormatTable[format()].bytes_per_pixel; + + if (gl_format == GL_ZERO) { + NOTREACHED() << "Not supported resource format=" << format(); + return; + } + + // Make sure GrContext is not using GL. So we don't need reset GrContext + DCHECK(!context_state_->GrContextIsGL()); + + // Make sure a gl context is current, since textures are shared between all gl + // contexts, we don't care which gl context is current. + if (!gl::GLContext::GetCurrent() && + !context_state_->MakeCurrent(nullptr, true /* needs_gl */)) + return; + + gl::GLApi* api = gl::g_current_gl_context; + GLint old_texture; + api->glGetIntegervFn(GL_TEXTURE_BINDING_2D, &old_texture); + api->glBindTextureFn(GL_TEXTURE_2D, texture_->service_id()); + + base::CheckedNumeric<size_t> checked_size = bytes_per_pixel; + checked_size *= size().width(); + checked_size *= size().height(); + DCHECK(checked_size.IsValid()); + + auto pixel_data = + shared_memory_mapping_.GetMemoryAsSpan<const uint8_t>().subspan( + memory_offset_); + api->glTexSubImage2DFn(GL_TEXTURE_2D, 0, 0, 0, size().width(), + size().height(), gl_format, gl_type, + pixel_data.data()); + DCHECK_EQ(api->glGetErrorFn(), static_cast<GLenum>(GL_NO_ERROR)); + api->glBindTextureFn(GL_TEXTURE_2D, old_texture); +} + bool ExternalVkImageBacking::BeginAccessInternal( bool readonly, std::vector<SemaphoreHandle>* semaphore_handles) {
diff --git a/gpu/command_buffer/service/external_vk_image_backing.h b/gpu/command_buffer/service/external_vk_image_backing.h index 7e89c89..fb5d8590 100644 --- a/gpu/command_buffer/service/external_vk_image_backing.h +++ b/gpu/command_buffer/service/external_vk_image_backing.h
@@ -146,7 +146,8 @@ bool WritePixels(size_t data_size, size_t stride, FillBufferCallback callback); - void CopyPixelsFromGLTexture(); + void CopyPixelsFromGLTextureToVkImage(); + void CopyPixelsFromShmToGLTexture(); SharedContextState* const context_state_; GrBackendTexture backend_texture_;
diff --git a/gpu/command_buffer/service/shared_image_factory.cc b/gpu/command_buffer/service/shared_image_factory.cc index 3a29bec2..4e5ec471 100644 --- a/gpu/command_buffer/service/shared_image_factory.cc +++ b/gpu/command_buffer/service/shared_image_factory.cc
@@ -105,7 +105,10 @@ workarounds, gpu_feature_info, use_gl); #else // Others - DCHECK(!using_vulkan_); + if (using_vulkan_) + LOG(ERROR) << "ERROR: using_vulkan_ = true and interop_backing_factory_ is " + "not set"; + #endif if (enable_wrapped_sk_image && context_state) { wrapped_sk_image_factory_ =
diff --git a/ios/build/bots/chromium.clang/ToTiOS.json b/ios/build/bots/chromium.clang/ToTiOS.json index c26b2f37..d18da56 100644 --- a/ios/build/bots/chromium.clang/ToTiOS.json +++ b/ios/build/bots/chromium.clang/ToTiOS.json
@@ -22,119 +22,119 @@ { "app": "base_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "boringssl_crypto_tests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "boringssl_ssl_tests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "components_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "crypto_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "gfx_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "google_apis_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ios_chrome_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ios_net_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ios_web_inttests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ios_web_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ios_web_view_inttests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "net_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "skia_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "sql_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "ui_base_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }, { "app": "url_unittests", "device type": "iPhone 6s", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "os": "12.2" }
diff --git a/ios/build/bots/chromium.fyi/ios-simulator-cronet.json b/ios/build/bots/chromium.fyi/ios-simulator-cronet.json index cdca8e66..ecb0680 100644 --- a/ios/build/bots/chromium.fyi/ios-simulator-cronet.json +++ b/ios/build/bots/chromium.fyi/ios-simulator-cronet.json
@@ -27,14 +27,14 @@ "app": "cronet_test", "device type": "iPhone X", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { "app": "cronet_test", "device type": "iPhone X", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" } ]
diff --git a/ios/build/bots/chromium.fyi/ios-simulator.json b/ios/build/bots/chromium.fyi/ios-simulator.json index 21be940f..7e80ce6 100644 --- a/ios/build/bots/chromium.fyi/ios-simulator.json +++ b/ios/build/bots/chromium.fyi/ios-simulator.json
@@ -21,7 +21,7 @@ ], "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -32,7 +32,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -43,7 +43,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -54,7 +54,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -65,7 +65,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -76,7 +76,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -87,7 +87,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" }, { @@ -98,7 +98,7 @@ "device type": "iPhone 6s", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome" } ]
diff --git a/ios/build/bots/chromium.fyi/ios13-beta-simulator.json b/ios/build/bots/chromium.fyi/ios13-beta-simulator.json index a1a73c9..44acd764 100644 --- a/ios/build/bots/chromium.fyi/ios13-beta-simulator.json +++ b/ios/build/bots/chromium.fyi/ios13-beta-simulator.json
@@ -24,12 +24,7 @@ "os": "13.0", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -38,12 +33,7 @@ "os": "13.0", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -52,12 +42,7 @@ "os": "12.2", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -66,116 +51,71 @@ "os": "12.2", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "include": "common_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_cq_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_cq_tests.json", "device type": "iPad Pro (12.9-inch)", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_tests.json", "device type": "iPad Air (3rd generation)", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPhone 6s Plus", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPad Air 2", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" } ] }
diff --git a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json index 69bdf19e..5bdafed9 100644 --- a/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json +++ b/ios/build/bots/chromium.fyi/ios13-sdk-simulator.json
@@ -23,12 +23,7 @@ "device type": "iPhone 6s Plus", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -36,12 +31,7 @@ "device type": "iPhone 6s", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -49,12 +39,7 @@ "device type": "iPhone 6s", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -62,12 +47,7 @@ "device type": "iPhone 7", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -75,12 +55,7 @@ "device type": "iPad Air 2", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -88,12 +63,7 @@ "device type": "iPhone X", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -101,12 +71,7 @@ "device type": "iPhone X", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -114,12 +79,7 @@ "device type": "iPad Air 2", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 } ]
diff --git a/ios/build/bots/chromium.mac/ios-simulator-cronet.json b/ios/build/bots/chromium.mac/ios-simulator-cronet.json index a5938f92d..348a2fa 100644 --- a/ios/build/bots/chromium.mac/ios-simulator-cronet.json +++ b/ios/build/bots/chromium.mac/ios-simulator-cronet.json
@@ -25,7 +25,7 @@ "app": "cronet_unittests_ios", "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "priority": 30 }, @@ -33,7 +33,7 @@ "app": "cronet_unittests_ios", "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "priority": 30 }, @@ -41,7 +41,7 @@ "app": "cronet_test", "device type": "iPad Air 2", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "priority": 30 }, @@ -49,7 +49,7 @@ "app": "cronet_test", "device type": "iPad Air 2", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome", "priority": 30 }
diff --git a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json b/ios/build/bots/chromium.mac/ios-simulator-full-configs.json index 04a7977c..da3b9fb 100644 --- a/ios/build/bots/chromium.mac/ios-simulator-full-configs.json +++ b/ios/build/bots/chromium.mac/ios-simulator-full-configs.json
@@ -22,7 +22,7 @@ "include": "eg_tests.json", "device type": "iPad Air 2", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -30,7 +30,7 @@ "include": "eg_tests.json", "device type": "iPhone X", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -38,7 +38,7 @@ "include": "eg_cq_tests.json", "device type": "iPad Air 2", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -46,7 +46,7 @@ "include": "eg_tests.json", "device type": "iPhone 7", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -54,7 +54,7 @@ "include": "eg_tests.json", "device type": "iPad Air 2", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -62,7 +62,7 @@ "include": "eg_tests.json", "device type": "iPhone X", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -70,7 +70,7 @@ "include": "eg_cq_tests.json", "device type": "iPhone X", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -78,7 +78,7 @@ "include": "eg_cq_tests.json", "device type": "iPad Air 2", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }
diff --git a/ios/build/bots/chromium.mac/ios-simulator.json b/ios/build/bots/chromium.mac/ios-simulator.json index 556e4f7..28446d92 100644 --- a/ios/build/bots/chromium.mac/ios-simulator.json +++ b/ios/build/bots/chromium.mac/ios-simulator.json
@@ -23,7 +23,7 @@ "include": "common_tests.json", "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -31,7 +31,7 @@ "include": "eg_cq_tests.json", "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -39,7 +39,7 @@ "include": "screen_size_dependent_tests.json", "device type": "iPhone 6s Plus", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -47,7 +47,7 @@ "include": "screen_size_dependent_tests.json", "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -55,7 +55,7 @@ "include": "screen_size_dependent_tests.json", "device type": "iPhone SE", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -63,7 +63,7 @@ "include": "common_tests.json", "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -71,7 +71,7 @@ "include": "screen_size_dependent_tests.json", "device type": "iPad Air 2", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -79,7 +79,7 @@ "include": "eg_cq_tests.json", "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }
diff --git a/ios/build/bots/chromium.mac/ios-slimnav.json b/ios/build/bots/chromium.mac/ios-slimnav.json index 66ef88e..ddafa20 100644 --- a/ios/build/bots/chromium.mac/ios-slimnav.json +++ b/ios/build/bots/chromium.mac/ios-slimnav.json
@@ -21,7 +21,7 @@ ], "device type": "iPhone 6s Plus", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -32,7 +32,7 @@ ], "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -43,7 +43,7 @@ ], "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -54,7 +54,7 @@ ], "device type": "iPad Air 2", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -65,7 +65,7 @@ ], "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -79,7 +79,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -91,7 +91,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -103,7 +103,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -115,7 +115,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -127,7 +127,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -139,7 +139,7 @@ "device type": "iPad Air 2", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -153,7 +153,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -165,7 +165,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -177,7 +177,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -189,7 +189,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -201,7 +201,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -213,7 +213,7 @@ "device type": "iPhone X", "os": "12.2", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -224,7 +224,7 @@ ], "device type": "iPhone X", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -235,7 +235,7 @@ ], "device type": "iPhone 6s Plus", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -246,7 +246,7 @@ ], "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -257,7 +257,7 @@ ], "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -268,7 +268,7 @@ ], "device type": "iPad Air 2", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -279,7 +279,7 @@ ], "device type": "iPhone 6s", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -293,7 +293,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -305,7 +305,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -317,7 +317,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -329,7 +329,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -341,7 +341,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -353,7 +353,7 @@ "device type": "iPad Air 2", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -367,7 +367,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -379,7 +379,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -391,7 +391,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -403,7 +403,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -415,7 +415,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -427,7 +427,7 @@ "device type": "iPhone X", "os": "13.0", "xctest": true, - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }, @@ -438,7 +438,7 @@ ], "device type": "iPhone X", "os": "13.0", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool":"Chrome", "priority": 30 }
diff --git a/ios/build/bots/chromium.mac/ios12-beta-simulator.json b/ios/build/bots/chromium.mac/ios12-beta-simulator.json index 4088f07..f9f6224 100644 --- a/ios/build/bots/chromium.mac/ios12-beta-simulator.json +++ b/ios/build/bots/chromium.mac/ios12-beta-simulator.json
@@ -16,213 +16,5 @@ "use_goma=true" ], "tests": [ - { - "include": "common_tests.json", - "device type": "iPhone X", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_cq_tests.json", - "device type": "iPhone X", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_cq_tests.json", - "device type": "iPhone 6 Plus", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_cq_tests.json", - "device type": "iPhone 5s", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_cq_tests.json", - "device type": "iPad Pro (12.9-inch)", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_tests.json", - "device type": "iPhone X", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_tests.json", - "device type": "iPhone 6 Plus", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_tests.json", - "device type": "iPad Air", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "eg_tests.json", - "device type": "iPhone 5s", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "screen_size_dependent_tests.json", - "device type": "iPhone 6s Plus", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "screen_size_dependent_tests.json", - "device type": "iPhone X", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "screen_size_dependent_tests.json", - "device type": "iPhone 5s", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - }, - { - "include": "screen_size_dependent_tests.json", - "device type": "iPad Air 2", - "os": "12.1", - "xcode build version": "10o45e", - "host os": "Mac-10.13.6", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.4" - }], - "120": [{ - "host os": "Mac-10.14.3" - }] - } - } ] }
diff --git a/ios/build/bots/chromium.mac/ios13-beta-simulator.json b/ios/build/bots/chromium.mac/ios13-beta-simulator.json index 55b4dc0..5ed874f 100644 --- a/ios/build/bots/chromium.mac/ios13-beta-simulator.json +++ b/ios/build/bots/chromium.mac/ios13-beta-simulator.json
@@ -26,12 +26,7 @@ "os": "13.0", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -40,12 +35,7 @@ "os": "13.0", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -54,12 +44,7 @@ "os": "12.2", "xcode build version": "11a420a", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6" }, { "xcode parallelization": true, @@ -67,117 +52,71 @@ "device type": "iPad (6th generation)", "os": "12.2", "xcode build version": "11a420a", - "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "pool":"Chrome" }, { "include": "common_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_cq_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_cq_tests.json", "device type": "iPad Pro (12.9-inch)", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "eg_tests.json", "device type": "iPad Air (3rd generation)", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPhone 6s Plus", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPhone X", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" }, { "include": "screen_size_dependent_tests.json", "device type": "iPad Air 2", "os": "13.0", "xcode build version": "11a420a", - "host os": "Mac-10.14.4", - "pool":"Chrome", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - } + "host os": "Mac-10.14.6", + "pool":"Chrome" } ] }
diff --git a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json index 11508be..6341195a 100644 --- a/ios/build/bots/chromium.mac/ios13-sdk-simulator.json +++ b/ios/build/bots/chromium.mac/ios13-sdk-simulator.json
@@ -26,12 +26,7 @@ "device type": "iPhone 6s Plus", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -39,12 +34,7 @@ "device type": "iPhone 6s", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -52,12 +42,7 @@ "device type": "iPhone 6s", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -65,12 +50,7 @@ "device type": "iPhone 7", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -78,12 +58,7 @@ "device type": "iPad Air 2", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -91,12 +66,7 @@ "device type": "iPhone X", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -104,12 +74,7 @@ "device type": "iPhone X", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 }, { @@ -117,12 +82,7 @@ "device type": "iPad Air 2", "os": "13.0", "pool":"Chrome", - "host os": "Mac-10.14.4", - "optional_dimensions": { - "60": [{ - "host os": "Mac-10.14.5" - }] - }, + "host os": "Mac-10.14.6", "priority": 30 } ]
diff --git a/ios/build/bots/chromium.webrtc.fyi/WebRTC Chromium FYI ios-simulator.json b/ios/build/bots/chromium.webrtc.fyi/WebRTC Chromium FYI ios-simulator.json index 131d2a0..551e1dd 100644 --- a/ios/build/bots/chromium.webrtc.fyi/WebRTC Chromium FYI ios-simulator.json +++ b/ios/build/bots/chromium.webrtc.fyi/WebRTC Chromium FYI ios-simulator.json
@@ -23,21 +23,21 @@ "include": "webrtc_tests.json", "device type": "iPhone 6s Plus", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome" }, { "include": "webrtc_tests.json", "device type": "iPhone 6s", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome" }, { "include": "webrtc_tests.json", "device type": "iPad Air 2", "os": "12.2", - "host os": "Mac-10.14.4", + "host os": "Mac-10.14.6", "pool": "Chrome" } ]
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index ad3ac22..985611705 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1801,9 +1801,12 @@ // by the |completion| block below. UIView* launchScreenView = launchScreenController.view; launchScreenView.userInteractionEnabled = NO; - UIWindow* window = UIApplication.sharedApplication.keyWindow; - launchScreenView.frame = window.bounds; - [window addSubview:launchScreenView]; + // TODO(crbug.com/1011155): Displaying the launch screen is a hack to hide + // the build up of the UI from the user. To implement the hack, this view + // controller uses information that it should not know or care about: this + // BVC is contained and its parent bounds to the full screen. + launchScreenView.frame = self.parentViewController.view.bounds; + [self.parentViewController.view addSubview:launchScreenView]; // Replace the completion handler sent to the superclass with one which // removes |launchScreenView| and resets the status bar. If |completion|
diff --git a/media/base/waiting.h b/media/base/waiting.h index 2b0cc47..93d1889 100644 --- a/media/base/waiting.h +++ b/media/base/waiting.h
@@ -20,9 +20,15 @@ // https://www.w3.org/TR/html5/semantics-embedded-content.html#eventdef-media-waiting enum class WaitingReason { + // The playback cannot start because "Media Data May Contain Encrypted Blocks" + // and no CDM is available. The playback will start after a CDM is set. See + // https://www.w3.org/TR/encrypted-media/#media-may-contain-encrypted-blocks + kNoCdm, + // The playback cannot proceed because some decryption key is not available. // This could happen when the license exchange is delayed or failed. The // playback will resume after the decryption key becomes available. + // See https://www.w3.org/TR/encrypted-media/#encrypted-block-encountered kNoDecryptionKey, // The playback cannot proceed because the decoder has lost its state, e.g.
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index ab05ee8e..0734cc1 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -2180,6 +2180,7 @@ DCHECK(main_task_runner_->BelongsToCurrentThread()); switch (reason) { + case WaitingReason::kNoCdm: case WaitingReason::kNoDecryptionKey: encrypted_client_->DidBlockPlaybackWaitingForKey(); // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index 94b782eb..6edb274 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc
@@ -136,10 +136,7 @@ base::AutoLock auto_lock(lock_); DCHECK_NE(state_, SHUTDOWN); - if (!stream_->Append(buffers)) { - DVLOG(1) << "ChunkDemuxerStream::Append() : stream append failed"; - return false; - } + stream_->Append(buffers); if (read_cb_) CompletePendingReadIfPossible_Locked();
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc index 44a2d71..80053cc 100644 --- a/media/filters/source_buffer_stream.cc +++ b/media/filters/source_buffer_stream.cc
@@ -246,7 +246,7 @@ } } -bool SourceBufferStream::Append(const BufferQueue& buffers) { +void SourceBufferStream::Append(const BufferQueue& buffers) { TRACE_EVENT2("media", "SourceBufferStream::Append", "stream type", GetStreamTypeName(), "buffers to append", buffers.size()); @@ -269,9 +269,8 @@ << buffers.front()->timestamp().InMicroseconds() << "us"; // New coded frame groups emitted by the coded frame processor must begin with - // a keyframe. TODO(wolenetz): Change this to [DCHECK + MEDIA_LOG(ERROR...) + - // return false] once the CHECK has baked in a stable release. See - // https://crbug.com/580621. + // a keyframe. Avoid propagating with escalating impact if this assumption is + // broken. CHECK(!new_coded_frame_group_ || buffers.front()->is_key_frame()); // Buffers within each GOP in a coded frame group must be monotonically @@ -358,7 +357,7 @@ " Skipping further processing."; DVLOG(1) << __func__ << " " << GetStreamTypeName() << ": done. ranges_=" << RangesToString(ranges_); - return true; + return; } else if (itr != buffers.begin()) { // Copy the first key frame and everything after it into // |trimmed_buffers|. @@ -434,7 +433,6 @@ << ": done. ranges_=" << RangesToString(ranges_); DCHECK(IsRangeListSorted(ranges_)); DCHECK(OnlySelectedRangeIsSeeked()); - return true; } void SourceBufferStream::Remove(base::TimeDelta start,
diff --git a/media/filters/source_buffer_stream.h b/media/filters/source_buffer_stream.h index d771151..fa70e48 100644 --- a/media/filters/source_buffer_stream.h +++ b/media/filters/source_buffer_stream.h
@@ -77,8 +77,7 @@ // expected to be in order, but multiple calls to Append() may add buffers out // of order or overlapping. Assumes all buffers within |buffers| are in // presentation order and are non-overlapping. - // Returns true if Append() was successful, false if |buffers| are not added. - bool Append(const BufferQueue& buffers); + void Append(const BufferQueue& buffers); // Removes buffers between |start| and |end| according to the steps // in the "Coded Frame Removal Algorithm" in the Media Source
diff --git a/media/filters/source_buffer_stream_unittest.cc b/media/filters/source_buffer_stream_unittest.cc index c028858..8364ab7d 100644 --- a/media/filters/source_buffer_stream_unittest.cc +++ b/media/filters/source_buffer_stream_unittest.cc
@@ -106,15 +106,15 @@ } void NewCodedFrameGroupAppend(int starting_position, int number_of_buffers) { - AppendBuffers(starting_position, number_of_buffers, true, - base::TimeDelta(), true, &kDataA, kDataSize); + AppendBuffers(starting_position, number_of_buffers, true, base::TimeDelta(), + &kDataA, kDataSize); } void NewCodedFrameGroupAppend(int starting_position, int number_of_buffers, const uint8_t* data) { - AppendBuffers(starting_position, number_of_buffers, true, - base::TimeDelta(), true, data, kDataSize); + AppendBuffers(starting_position, number_of_buffers, true, base::TimeDelta(), + data, kDataSize); } void NewCodedFrameGroupAppend_OffsetFirstBuffer( @@ -122,40 +122,40 @@ int number_of_buffers, base::TimeDelta first_buffer_offset) { AppendBuffers(starting_position, number_of_buffers, true, - first_buffer_offset, true, &kDataA, kDataSize); + first_buffer_offset, &kDataA, kDataSize); } void AppendBuffers(int starting_position, int number_of_buffers) { AppendBuffers(starting_position, number_of_buffers, false, - base::TimeDelta(), true, &kDataA, kDataSize); + base::TimeDelta(), &kDataA, kDataSize); } void AppendBuffers(int starting_position, int number_of_buffers, const uint8_t* data) { AppendBuffers(starting_position, number_of_buffers, false, - base::TimeDelta(), true, data, kDataSize); + base::TimeDelta(), data, kDataSize); } void NewCodedFrameGroupAppend(const std::string& buffers_to_append) { - AppendBuffers(buffers_to_append, true, kNoTimestamp, false, true); + AppendBuffers(buffers_to_append, true, kNoTimestamp, false); } void NewCodedFrameGroupAppend(base::TimeDelta start_timestamp, const std::string& buffers_to_append) { - AppendBuffers(buffers_to_append, true, start_timestamp, false, true); + AppendBuffers(buffers_to_append, true, start_timestamp, false); } void AppendBuffers(const std::string& buffers_to_append) { - AppendBuffers(buffers_to_append, false, kNoTimestamp, false, true); + AppendBuffers(buffers_to_append, false, kNoTimestamp, false); } void NewCodedFrameGroupAppendOneByOne(const std::string& buffers_to_append) { - AppendBuffers(buffers_to_append, true, kNoTimestamp, true, true); + AppendBuffers(buffers_to_append, true, kNoTimestamp, true); } void AppendBuffersOneByOne(const std::string& buffers_to_append) { - AppendBuffers(buffers_to_append, false, kNoTimestamp, true, true); + AppendBuffers(buffers_to_append, false, kNoTimestamp, true); } void Seek(int position) { stream_->Seek(position * frame_duration_); } @@ -457,7 +457,6 @@ int number_of_buffers, bool begin_coded_frame_group, base::TimeDelta first_buffer_offset, - bool expect_success, const uint8_t* data, int size) { if (begin_coded_frame_group) { @@ -499,7 +498,7 @@ queue.push_back(buffer); } if (!queue.empty()) - EXPECT_EQ(expect_success, stream_->Append(queue)); + stream_->Append(queue); } void UpdateLastBufferDuration(DecodeTimestamp current_dts, @@ -666,8 +665,7 @@ void AppendBuffers(const std::string& buffers_to_append, bool start_new_coded_frame_group, base::TimeDelta coded_frame_group_start_timestamp, - bool one_by_one, - bool expect_success) { + bool one_by_one) { BufferQueue buffers = StringToBufferQueue(buffers_to_append); if (start_new_coded_frame_group) { @@ -684,7 +682,7 @@ } if (!one_by_one) { - EXPECT_EQ(expect_success, stream_->Append(buffers)); + stream_->Append(buffers); return; } @@ -692,7 +690,7 @@ for (size_t i = 0; i < buffers.size(); i++) { BufferQueue wrapper; wrapper.push_back(buffers[i]); - EXPECT_TRUE(stream_->Append(wrapper)); + stream_->Append(wrapper); } }
diff --git a/media/fuchsia/cdm/fuchsia_decryptor.cc b/media/fuchsia/cdm/fuchsia_decryptor.cc index e1c8ba7..8666cfb 100644 --- a/media/fuchsia/cdm/fuchsia_decryptor.cc +++ b/media/fuchsia/cdm/fuchsia_decryptor.cc
@@ -40,7 +40,7 @@ } void FuchsiaDecryptor::CancelDecrypt(StreamType stream_type) { - if (stream_type == StreamType::kAudio) { + if (stream_type == StreamType::kAudio && audio_decryptor_) { audio_decryptor_->CancelDecrypt(); } }
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc index 8a12f77..9fad1576 100644 --- a/media/renderers/renderer_impl.cc +++ b/media/renderers/renderer_impl.cc
@@ -157,6 +157,7 @@ if (HasEncryptedStream() && !cdm_context_) { DVLOG(1) << __func__ << ": Has encrypted stream but CDM is not set."; state_ = STATE_INIT_PENDING_CDM; + OnWaiting(WaitingReason::kNoCdm); return; }
diff --git a/media/renderers/renderer_impl_unittest.cc b/media/renderers/renderer_impl_unittest.cc index 27e074f..89667c1 100644 --- a/media/renderers/renderer_impl_unittest.cc +++ b/media/renderers/renderer_impl_unittest.cc
@@ -126,7 +126,8 @@ void InitializeAndExpect(PipelineStatus start_status) { EXPECT_CALL(callbacks_, OnInitialize(start_status)) .WillOnce(SaveArg<0>(&initialization_status_)); - EXPECT_CALL(callbacks_, OnWaiting(_)).Times(0); + if (is_encrypted_ && !is_cdm_set_) + EXPECT_CALL(callbacks_, OnWaiting(WaitingReason::kNoCdm)); if (start_status == PIPELINE_OK && audio_stream_) { EXPECT_CALL(*audio_renderer_, GetTimeSource()) @@ -171,6 +172,7 @@ } void CreateVideoStream(bool is_encrypted = false) { + is_encrypted_ = is_encrypted; video_stream_ = CreateStream(DemuxerStream::VIDEO); video_stream_->set_video_decoder_config( is_encrypted ? TestVideoConfig::NormalEncrypted() @@ -303,7 +305,8 @@ } void SetCdmAndExpect(bool expected_result) { - EXPECT_CALL(callbacks_, OnCdmAttached(expected_result)); + EXPECT_CALL(callbacks_, OnCdmAttached(expected_result)) + .WillOnce(SaveArg<0>(&is_cdm_set_)); renderer_impl_->SetCdm(cdm_context_.get(), base::Bind(&CallbackHelper::OnCdmAttached, base::Unretained(&callbacks_))); @@ -364,6 +367,8 @@ RendererClient* audio_renderer_client_; VideoDecoderConfig video_decoder_config_; PipelineStatus initialization_status_; + bool is_encrypted_ = false; + bool is_cdm_set_ = false; private: DISALLOW_COPY_AND_ASSIGN(RendererImplTest);
diff --git a/mojo/public/java/system/BUILD.gn b/mojo/public/java/system/BUILD.gn index 2984d4b..b669abc7 100644 --- a/mojo/public/java/system/BUILD.gn +++ b/mojo/public/java/system/BUILD.gn
@@ -14,6 +14,7 @@ } generate_jni("jni_headers") { + testonly = true sources = [ "javatests/src/org/chromium/mojo/MojoTestRule.java", "javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java",
diff --git a/net/BUILD.gn b/net/BUILD.gn index 5b8409e9..8c6bd3c9 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -1722,6 +1722,8 @@ "third_party/quiche/src/quic/platform/api/quic_text_utils.h", "third_party/quiche/src/quic/platform/api/quic_thread.h", "third_party/quiche/src/quic/platform/api/quic_uint128.h", + "third_party/quiche/src/quic/quic_transport/quic_transport_client_session.cc", + "third_party/quiche/src/quic/quic_transport/quic_transport_client_session.h", "third_party/quiche/src/spdy/core/fifo_write_scheduler.h", "third_party/quiche/src/spdy/core/hpack/hpack_constants.cc", "third_party/quiche/src/spdy/core/hpack/hpack_constants.h", @@ -3300,6 +3302,7 @@ ] } generate_jni("net_test_jni_headers") { + testonly = true sources = [ "android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java", "android/javatests/src/org/chromium/net/AndroidNetworkLibraryTestUtil.java", @@ -5620,6 +5623,7 @@ "third_party/quiche/src/quic/platform/api/quic_str_cat_test.cc", "third_party/quiche/src/quic/platform/api/quic_string_utils_test.cc", "third_party/quiche/src/quic/platform/api/quic_text_utils_test.cc", + "third_party/quiche/src/quic/quic_transport/quic_transport_client_session_test.cc", "third_party/quiche/src/quic/test_tools/crypto_test_utils_test.cc", "third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.cc", "third_party/quiche/src/quic/test_tools/mock_quic_time_wait_list_manager.h",
diff --git a/net/cert/cert_verifier.cc b/net/cert/cert_verifier.cc index d29b77d..fbf17c71 100644 --- a/net/cert/cert_verifier.cc +++ b/net/cert/cert_verifier.cc
@@ -8,6 +8,7 @@ #include "base/strings/string_util.h" #include "build/build_config.h" +#include "net/base/features.h" #include "net/cert/cert_verify_proc.h" #include "net/cert/crl_set.h" #include "third_party/boringssl/src/include/openssl/pool.h" @@ -82,9 +83,25 @@ NOTIMPLEMENTED(); return std::unique_ptr<CertVerifier>(); #else + scoped_refptr<CertVerifyProc> verify_proc; +#if defined(OS_FUCHSIA) + verify_proc = + CertVerifyProc::CreateBuiltinVerifyProc(std::move(cert_net_fetcher)); +#elif BUILDFLAG(BUILTIN_CERT_VERIFIER_FEATURE_SUPPORTED) + if (base::FeatureList::IsEnabled(features::kCertVerifierBuiltinFeature)) { + verify_proc = + CertVerifyProc::CreateBuiltinVerifyProc(std::move(cert_net_fetcher)); + } else { + verify_proc = + CertVerifyProc::CreateSystemVerifyProc(std::move(cert_net_fetcher)); + } +#else + verify_proc = + CertVerifyProc::CreateSystemVerifyProc(std::move(cert_net_fetcher)); +#endif + return std::make_unique<CachingCertVerifier>( - std::make_unique<MultiThreadedCertVerifier>( - CertVerifyProc::CreateDefault(std::move(cert_net_fetcher)))); + std::make_unique<MultiThreadedCertVerifier>(std::move(verify_proc))); #endif }
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc index 551de06..0d0bfee6 100644 --- a/net/cert/cert_verify_proc.cc +++ b/net/cert/cert_verify_proc.cc
@@ -17,7 +17,6 @@ #include "base/strings/stringprintf.h" #include "base/threading/scoped_blocking_call.h" #include "base/time/time.h" -#include "build/build_config.h" #include "crypto/sha2.h" #include "net/base/features.h" #include "net/base/net_errors.h" @@ -43,7 +42,8 @@ #include "third_party/boringssl/src/include/openssl/pool.h" #include "url/url_canon.h" -#if BUILDFLAG(BUILTIN_CERT_VERIFIER_FEATURE_SUPPORTED) +#if defined(OS_FUCHSIA) || defined(USE_NSS_CERTS) || \ + (defined(OS_MACOSX) && !defined(OS_IOS)) #include "net/cert/cert_verify_proc_builtin.h" #endif @@ -58,10 +58,6 @@ #elif defined(OS_WIN) #include "base/win/windows_version.h" #include "net/cert/cert_verify_proc_win.h" -#elif defined(OS_FUCHSIA) -#include "net/cert/cert_verify_proc_builtin.h" -#else -#error Implement certificate verification. #endif namespace net { @@ -457,16 +453,10 @@ } // namespace +#if !defined(OS_FUCHSIA) // static -scoped_refptr<CertVerifyProc> CertVerifyProc::CreateDefault( +scoped_refptr<CertVerifyProc> CertVerifyProc::CreateSystemVerifyProc( scoped_refptr<CertNetFetcher> cert_net_fetcher) { -#if BUILDFLAG(BUILTIN_CERT_VERIFIER_FEATURE_SUPPORTED) - if (base::FeatureList::IsEnabled(features::kCertVerifierBuiltinFeature)) { - return CreateCertVerifyProcBuiltin( - std::move(cert_net_fetcher), - SystemTrustStoreProvider::CreateDefaultForSSL()); - } -#endif #if defined(USE_NSS_CERTS) return new CertVerifyProcNSS(); #elif defined(OS_ANDROID) @@ -477,14 +467,22 @@ return new CertVerifyProcMac(); #elif defined(OS_WIN) return new CertVerifyProcWin(); -#elif defined(OS_FUCHSIA) - return CreateCertVerifyProcBuiltin( - std::move(cert_net_fetcher), - SystemTrustStoreProvider::CreateDefaultForSSL()); #else #error Unsupported platform #endif } +#endif + +#if defined(OS_FUCHSIA) || defined(USE_NSS_CERTS) || \ + (defined(OS_MACOSX) && !defined(OS_IOS)) +// static +scoped_refptr<CertVerifyProc> CertVerifyProc::CreateBuiltinVerifyProc( + scoped_refptr<CertNetFetcher> cert_net_fetcher) { + return CreateCertVerifyProcBuiltin( + std::move(cert_net_fetcher), + SystemTrustStoreProvider::CreateDefaultForSSL()); +} +#endif CertVerifyProc::CertVerifyProc() {}
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h index af2219d8..ed812373 100644 --- a/net/cert/cert_verify_proc.h +++ b/net/cert/cert_verify_proc.h
@@ -12,6 +12,7 @@ #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "build/build_config.h" #include "net/base/net_export.h" #include "net/cert/x509_cert_types.h" @@ -64,10 +65,19 @@ kMaxValue = kChainLengthOne }; - // Creates and returns the default CertVerifyProc. |cert_net_fetcher| may not - // be used, depending on the implementation. - static scoped_refptr<CertVerifyProc> CreateDefault( +#if !defined(OS_FUCHSIA) + // Creates and returns a CertVerifyProc that uses the system verifier. + // |cert_net_fetcher| may not be used, depending on the implementation. + static scoped_refptr<CertVerifyProc> CreateSystemVerifyProc( scoped_refptr<CertNetFetcher> cert_net_fetcher); +#endif + +#if defined(OS_FUCHSIA) || defined(USE_NSS_CERTS) || \ + (defined(OS_MACOSX) && !defined(OS_IOS)) + // Creates and returns a CertVerifyProcBuiltin using the SSL SystemTrustStore. + static scoped_refptr<CertVerifyProc> CreateBuiltinVerifyProc( + scoped_refptr<CertNetFetcher> cert_net_fetcher); +#endif // Verifies the certificate against the given hostname as an SSL server // certificate. Returns OK if successful or an error code upon failure.
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index 03e7dbf..5835917 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -139,8 +139,8 @@ // This enum identifies a concrete implemenation of CertVerifyProc. // -// The type is erased by CertVerifyProc::CreateDefault(), however -// needs to be known for some of the test expectations. +// The type is erased by CreateCertVerifyProc(), however needs to be known for +// some of the test expectations. enum CertVerifyProcType { CERT_VERIFY_PROC_NSS, CERT_VERIFY_PROC_ANDROID, @@ -212,7 +212,8 @@ } // The set of all CertVerifyProcTypes that tests should be parameterized on. -// This needs to be kept in sync with CertVerifyProc::CreateDefault(). +// This needs to be kept in sync with CertVerifyProc::CreateSystemVerifyProc() +// and the platforms where CreateSslSystemTrustStore() is not a dummy store. // TODO(crbug.com/649017): Enable CERT_VERIFY_PROC_BUILTIN everywhere. Right // now this is gated on having CertVerifyProcBuiltin understand the roots added // via TestRootCerts.
diff --git a/net/cert/test_root_certs_unittest.cc b/net/cert/test_root_certs_unittest.cc index 62e2365..5740686 100644 --- a/net/cert/test_root_certs_unittest.cc +++ b/net/cert/test_root_certs_unittest.cc
@@ -6,6 +6,7 @@ #include "base/files/file_path.h" #include "build/build_config.h" +#include "net/base/features.h" #include "net/base/net_errors.h" #include "net/cert/cert_net_fetcher.h" #include "net/cert/cert_status_flags.h" @@ -36,6 +37,21 @@ // A certificate issued by the local test root for 127.0.0.1. const char kGoodCertificateFile[] = "ok_cert.pem"; +scoped_refptr<CertVerifyProc> CreateCertVerifyProc() { +#if defined(OS_FUCHSIA) + return CertVerifyProc::CreateBuiltinVerifyProc(/*cert_net_fetcher=*/nullptr); +#elif BUILDFLAG(BUILTIN_CERT_VERIFIER_FEATURE_SUPPORTED) + if (base::FeatureList::IsEnabled(features::kCertVerifierBuiltinFeature)) { + return CertVerifyProc::CreateBuiltinVerifyProc( + /*cert_net_fetcher=*/nullptr); + } else { + return CertVerifyProc::CreateSystemVerifyProc(/*cert_net_fetcher=*/nullptr); + } +#else + return CertVerifyProc::CreateSystemVerifyProc(/*cert_net_fetcher=*/nullptr); +#endif +} + } // namespace // Test basic functionality when adding from an existing X509Certificate. @@ -89,8 +105,7 @@ // certificate should not yet be trusted. int flags = 0; CertVerifyResult bad_verify_result; - scoped_refptr<CertVerifyProc> verify_proc( - CertVerifyProc::CreateDefault(/*cert_net_fetcher=*/nullptr)); + scoped_refptr<CertVerifyProc> verify_proc(CreateCertVerifyProc()); int bad_status = verify_proc->Verify( test_cert.get(), "127.0.0.1", /*ocsp_response=*/std::string(), /*sct_list=*/std::string(), flags, net::CRLSet::BuiltinCRLSet().get(),
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h index a98dddf..401b3c6 100644 --- a/net/log/net_log_event_type_list.h +++ b/net/log/net_log_event_type_list.h
@@ -1327,6 +1327,13 @@ // } EVENT_TYPE(BIDIRECTIONAL_STREAM_FAILED) +// Identifies the NetLogSource() for the QuicSession that handled the stream. +// The event parameters are: +// { +// "source_dependency": <Source identifier for session that was used>, +// } +EVENT_TYPE(BIDIRECTIONAL_STREAM_BOUND_TO_QUIC_SESSION) + // ------------------------------------------------------------------------ // SERVER_PUSH_LOOKUP_TRANSACTION // ------------------------------------------------------------------------ @@ -2080,7 +2087,7 @@ // } EVENT_TYPE(QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM) -// Identifies the NetLogSource() for the QuicSesssion that handled the stream. +// Identifies the NetLogSource() for the QuicSession that handled the stream. // The event parameters are: // { // "source_dependency": <Source identifier for session that was used>,
diff --git a/net/quic/bidirectional_stream_quic_impl.cc b/net/quic/bidirectional_stream_quic_impl.cc index 8e592b8..5d7285e 100644 --- a/net/quic/bidirectional_stream_quic_impl.cc +++ b/net/quic/bidirectional_stream_quic_impl.cc
@@ -76,6 +76,10 @@ DLOG_IF(WARNING, !session_->IsConnected()) << "Trying to start request headers after session has been closed."; + net_log.AddEventReferencingSource( + NetLogEventType::BIDIRECTIONAL_STREAM_BOUND_TO_QUIC_SESSION, + session_->net_log().source()); + send_request_headers_automatically_ = send_request_headers_automatically; delegate_ = delegate; request_info_ = request_info;
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc index 7845dcc..9150434 100644 --- a/net/quic/quic_connection_logger.cc +++ b/net/quic/quic_connection_logger.cc
@@ -56,9 +56,9 @@ NetLogNumberValue(serialized_packet.packet_number.ToUint64())); dict.SetIntKey("size", serialized_packet.encrypted_length); dict.SetKey("sent_time_us", NetLogNumberValue(sent_time.ToDebuggingValue())); - dict.SetStringKey("encryption_level", - quic::QuicUtils::EncryptionLevelToString( - serialized_packet.encryption_level)); + dict.SetStringKey( + "encryption_level", + quic::EncryptionLevelToString(serialized_packet.encryption_level)); return dict; } @@ -250,7 +250,7 @@ bool has_buffer) { base::Value dict(base::Value::Type::DICTIONARY); dict.SetStringKey("encryption_level", - quic::QuicUtils::EncryptionLevelToString(frame->level)); + quic::EncryptionLevelToString(frame->level)); dict.SetIntKey("data_length", frame->data_length); dict.SetKey("offset", NetLogNumberValue(frame->offset)); if (has_buffer) {
diff --git a/net/quic/quic_test_packet_maker.cc b/net/quic/quic_test_packet_maker.cc index 9a815318..b03014b 100644 --- a/net/quic/quic_test_packet_maker.cc +++ b/net/quic/quic_test_packet_maker.cc
@@ -1330,7 +1330,7 @@ long_header_type_ = quic::INVALID_PACKET_TYPE; break; default: - QUIC_BUG << quic::QuicUtils::EncryptionLevelToString(level); + QUIC_BUG << quic::EncryptionLevelToString(level); long_header_type_ = quic::INVALID_PACKET_TYPE; } }
diff --git a/net/reporting/reporting_cache.h b/net/reporting/reporting_cache.h index 1eb28b9..bf8f565f 100644 --- a/net/reporting/reporting_cache.h +++ b/net/reporting/reporting_cache.h
@@ -22,6 +22,7 @@ namespace net { +class NetworkIsolationKey; class ReportingContext; // The cache holds undelivered reports and clients (per-origin endpoint @@ -189,6 +190,7 @@ // name |group| with include_subdomains enabled, this method would return // endpoints from that group from the earliest-inserted origin. virtual std::vector<ReportingEndpoint> GetCandidateEndpointsForDelivery( + const NetworkIsolationKey& network_isolation_key, const url::Origin& origin, const std::string& group_name) = 0;
diff --git a/net/reporting/reporting_cache_impl.cc b/net/reporting/reporting_cache_impl.cc index 8c6df6f..e471f42 100644 --- a/net/reporting/reporting_cache_impl.cc +++ b/net/reporting/reporting_cache_impl.cc
@@ -492,12 +492,14 @@ std::vector<ReportingEndpoint> ReportingCacheImpl::GetCandidateEndpointsForDelivery( + const NetworkIsolationKey& network_isolation_key, const url::Origin& origin, const std::string& group_name) { base::Time now = clock().Now(); SanityCheckClients(); // Look for an exact origin match for |origin| and |group|. + // TODO(mmenke): Respect NetworkIsolationKey. EndpointGroupMap::iterator group_it = FindEndpointGroupIt(ReportingEndpointGroupKey(origin, group_name)); if (group_it != endpoint_groups_.end() && group_it->second.expires > now) {
diff --git a/net/reporting/reporting_cache_impl.h b/net/reporting/reporting_cache_impl.h index ac8ca7b..7e73755 100644 --- a/net/reporting/reporting_cache_impl.h +++ b/net/reporting/reporting_cache_impl.h
@@ -29,6 +29,8 @@ namespace net { +class NetworkIsolationKey; + class ReportingCacheImpl : public ReportingCache { public: ReportingCacheImpl(ReportingContext* context); @@ -80,6 +82,7 @@ std::vector<CachedReportingEndpointGroup> loaded_endpoint_groups) override; std::vector<ReportingEndpoint> GetCandidateEndpointsForDelivery( + const NetworkIsolationKey& network_isolation_key, const url::Origin& origin, const std::string& group_name) override; base::Value GetClientsAsValue() const override;
diff --git a/net/reporting/reporting_cache_unittest.cc b/net/reporting/reporting_cache_unittest.cc index 11c8716..e48c641 100644 --- a/net/reporting/reporting_cache_unittest.cc +++ b/net/reporting/reporting_cache_unittest.cc
@@ -14,6 +14,7 @@ #include "base/test/values_test_util.h" #include "base/time/time.h" #include "base/values.h" +#include "net/base/network_isolation_key.h" #include "net/reporting/mock_persistent_reporting_store.h" #include "net/reporting/reporting_cache_impl.h" #include "net/reporting/reporting_cache_observer.h" @@ -750,15 +751,16 @@ ASSERT_TRUE(SetEndpointInCache(kOrigin2_, kGroup1_, kEndpoint1_, kExpires1_)); ASSERT_TRUE(SetEndpointInCache(kOrigin2_, kGroup2_, kEndpoint2_, kExpires1_)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin1_, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), + kOrigin1_, kGroup1_); ASSERT_EQ(2u, candidate_endpoints.size()); for (const ReportingEndpoint& endpoint : candidate_endpoints) { EXPECT_EQ(kOrigin1_, endpoint.group_key.origin); EXPECT_EQ(kGroup1_, endpoint.group_key.group_name); } - candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin2_, kGroup1_); + candidate_endpoints = cache()->GetCandidateEndpointsForDelivery( + NetworkIsolationKey(), kOrigin2_, kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kOrigin2_, candidate_endpoints[0].group_key.origin); EXPECT_EQ(kGroup1_, candidate_endpoints[0].group_key.group_name); @@ -777,15 +779,16 @@ ASSERT_LT(clock()->Now(), kExpires2_); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin1_, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), + kOrigin1_, kGroup1_); ASSERT_EQ(0u, candidate_endpoints.size()); - candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin2_, kGroup1_); + candidate_endpoints = cache()->GetCandidateEndpointsForDelivery( + NetworkIsolationKey(), kOrigin2_, kGroup1_); ASSERT_EQ(0u, candidate_endpoints.size()); - candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin2_, kGroup2_); + candidate_endpoints = cache()->GetCandidateEndpointsForDelivery( + NetworkIsolationKey(), kOrigin2_, kGroup2_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kEndpoint2_, candidate_endpoints[0].info.url); } @@ -801,7 +804,8 @@ kExpires1_, OriginSubdomains::EXCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(0u, candidate_endpoints.size()); } @@ -816,7 +820,8 @@ kExpires1_, OriginSubdomains::EXCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(0u, candidate_endpoints.size()); } @@ -831,7 +836,8 @@ kExpires1_, OriginSubdomains::INCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kDifferentPortOrigin, candidate_endpoints[0].group_key.origin); } @@ -847,7 +853,8 @@ kExpires1_, OriginSubdomains::INCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kSuperOrigin, candidate_endpoints[0].group_key.origin); } @@ -865,7 +872,8 @@ kExpires1_, OriginSubdomains::INCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kOrigin, candidate_endpoints[0].group_key.origin); } @@ -883,7 +891,8 @@ kExpires1_, OriginSubdomains::INCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kOrigin, candidate_endpoints[0].group_key.origin); } @@ -904,7 +913,8 @@ kExpires1_, OriginSubdomains::INCLUDE)); std::vector<ReportingEndpoint> candidate_endpoints = - cache()->GetCandidateEndpointsForDelivery(kOrigin, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin, + kGroup1_); ASSERT_EQ(1u, candidate_endpoints.size()); EXPECT_EQ(kSuperOrigin, candidate_endpoints[0].group_key.origin); } @@ -1005,7 +1015,8 @@ // Make the group expired (but not stale). clock()->SetNow(kExpires1_ - base::TimeDelta::FromMinutes(1)); - cache()->GetCandidateEndpointsForDelivery(kOrigin1_, kGroup1_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin1_, + kGroup1_); clock()->SetNow(kExpires1_ + base::TimeDelta::FromMinutes(1)); // Insert one more endpoint in a different group (not expired); eviction @@ -1054,7 +1065,7 @@ EXPECT_TRUE(EndpointGroupExistsInCache(kOrigin1_, base::NumberToString(i), OriginSubdomains::DEFAULT)); // Mark group used. - cache()->GetCandidateEndpointsForDelivery(kOrigin1_, + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), kOrigin1_, base::NumberToString(i)); clock()->Advance(base::TimeDelta::FromMinutes(1)); } @@ -1098,7 +1109,8 @@ OriginSubdomains::DEFAULT)); // Count the number of endpoints remaining in kGroup2_. std::vector<ReportingEndpoint> endpoints_in_group = - cache()->GetCandidateEndpointsForDelivery(kOrigin1_, kGroup2_); + cache()->GetCandidateEndpointsForDelivery(NetworkIsolationKey(), + kOrigin1_, kGroup2_); EXPECT_EQ(1u, endpoints_in_group.size()); }
diff --git a/net/reporting/reporting_context.cc b/net/reporting/reporting_context.cc index b74f32d..b959f7fc 100644 --- a/net/reporting/reporting_context.cc +++ b/net/reporting/reporting_context.cc
@@ -19,7 +19,6 @@ #include "net/reporting/reporting_cache_observer.h" #include "net/reporting/reporting_delegate.h" #include "net/reporting/reporting_delivery_agent.h" -#include "net/reporting/reporting_endpoint_manager.h" #include "net/reporting/reporting_garbage_collector.h" #include "net/reporting/reporting_network_change_observer.h" #include "net/reporting/reporting_policy.h" @@ -104,8 +103,7 @@ delegate_(std::move(delegate)), cache_(ReportingCache::Create(this)), store_(store), - endpoint_manager_(ReportingEndpointManager::Create(this, rand_callback)), - delivery_agent_(ReportingDeliveryAgent::Create(this)), + delivery_agent_(ReportingDeliveryAgent::Create(this, rand_callback)), garbage_collector_(ReportingGarbageCollector::Create(this)), network_change_observer_(ReportingNetworkChangeObserver::Create(this)) {}
diff --git a/net/reporting/reporting_context.h b/net/reporting/reporting_context.h index b418868..e0bb4aa 100644 --- a/net/reporting/reporting_context.h +++ b/net/reporting/reporting_context.h
@@ -25,7 +25,6 @@ class ReportingCacheObserver; class ReportingDelegate; class ReportingDeliveryAgent; -class ReportingEndpointManager; class ReportingGarbageCollector; class ReportingNetworkChangeObserver; class ReportingUploader; @@ -51,9 +50,6 @@ ReportingDelegate* delegate() { return delegate_.get(); } ReportingCache* cache() { return cache_.get(); } ReportingCache::PersistentReportingStore* store() { return store_; } - ReportingEndpointManager* endpoint_manager() { - return endpoint_manager_.get(); - } ReportingDeliveryAgent* delivery_agent() { return delivery_agent_.get(); } ReportingGarbageCollector* garbage_collector() { return garbage_collector_.get(); @@ -97,11 +93,8 @@ ReportingCache::PersistentReportingStore* const store_; - // |endpoint_manager_| must come after |tick_clock_| and |cache_|. - std::unique_ptr<ReportingEndpointManager> endpoint_manager_; - // |delivery_agent_| must come after |tick_clock_|, |delegate_|, |uploader_|, - // |cache_|, and |endpoint_manager_|. + // and |cache_|. std::unique_ptr<ReportingDeliveryAgent> delivery_agent_; // |garbage_collector_| must come after |tick_clock_| and |cache_|.
diff --git a/net/reporting/reporting_delivery_agent.cc b/net/reporting/reporting_delivery_agent.cc index 19e6b2e..0c64f3c 100644 --- a/net/reporting/reporting_delivery_agent.cc +++ b/net/reporting/reporting_delivery_agent.cc
@@ -16,8 +16,10 @@ #include "base/time/tick_clock.h" #include "base/timer/timer.h" #include "base/values.h" +#include "net/base/network_isolation_key.h" #include "net/reporting/reporting_cache.h" #include "net/reporting/reporting_cache_observer.h" +#include "net/reporting/reporting_context.h" #include "net/reporting/reporting_delegate.h" #include "net/reporting/reporting_endpoint_manager.h" #include "net/reporting/reporting_report.h" @@ -54,8 +56,16 @@ class ReportingDeliveryAgentImpl : public ReportingDeliveryAgent, public ReportingCacheObserver { public: - ReportingDeliveryAgentImpl(ReportingContext* context) - : context_(context), timer_(std::make_unique<base::OneShotTimer>()) { + ReportingDeliveryAgentImpl(ReportingContext* context, + const RandIntCallback& rand_callback) + : context_(context), + timer_(std::make_unique<base::OneShotTimer>()), + endpoint_manager_( + ReportingEndpointManager::Create(&context->policy(), + &context->tick_clock(), + context->delegate(), + context->cache(), + rand_callback)) { context_->AddCacheObserver(this); } @@ -171,8 +181,10 @@ if (base::Contains(pending_origin_groups_, origin_group)) continue; + // TODO(mmenke): Populate NetworkIsolationKey argument. const ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(report_origin, group); + endpoint_manager_->FindEndpointForDelivery(NetworkIsolationKey(), + report_origin, group); if (!endpoint) { // TODO(chlily): Remove reports for which there are no valid // delivery endpoints. @@ -242,10 +254,14 @@ if (outcome == ReportingUploader::Outcome::SUCCESS) { cache()->RemoveReports(delivery->reports, ReportingReport::Outcome::DELIVERED); - endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, true); + // TODO(mmenke): Populate NetworkIsolationKey argument. + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), + delivery->endpoint, true); } else { cache()->IncrementReportsAttempts(delivery->reports); - endpoint_manager()->InformOfEndpointRequest(delivery->endpoint, false); + // TODO(mmenke): Populate NetworkIsolationKey argument. + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), + delivery->endpoint, false); } if (outcome == ReportingUploader::Outcome::REMOVE_ENDPOINT) @@ -264,9 +280,6 @@ ReportingDelegate* delegate() { return context_->delegate(); } ReportingCache* cache() { return context_->cache(); } ReportingUploader* uploader() { return context_->uploader(); } - ReportingEndpointManager* endpoint_manager() { - return context_->endpoint_manager(); - } ReportingContext* context_; @@ -276,6 +289,8 @@ // (Would be an unordered_set, but there's no hash on pair.) std::set<OriginGroup> pending_origin_groups_; + std::unique_ptr<ReportingEndpointManager> endpoint_manager_; + base::WeakPtrFactory<ReportingDeliveryAgentImpl> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ReportingDeliveryAgentImpl); @@ -285,8 +300,9 @@ // static std::unique_ptr<ReportingDeliveryAgent> ReportingDeliveryAgent::Create( - ReportingContext* context) { - return std::make_unique<ReportingDeliveryAgentImpl>(context); + ReportingContext* context, + const RandIntCallback& rand_callback) { + return std::make_unique<ReportingDeliveryAgentImpl>(context, rand_callback); } ReportingDeliveryAgent::~ReportingDeliveryAgent() = default;
diff --git a/net/reporting/reporting_delivery_agent.h b/net/reporting/reporting_delivery_agent.h index bd15443..b857fd1 100644 --- a/net/reporting/reporting_delivery_agent.h +++ b/net/reporting/reporting_delivery_agent.h
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "net/base/net_export.h" +#include "net/base/rand_callback.h" namespace base { class OneShotTimer; @@ -51,7 +52,8 @@ public: // Creates a ReportingDeliveryAgent. |context| must outlive the agent. static std::unique_ptr<ReportingDeliveryAgent> Create( - ReportingContext* context); + ReportingContext* context, + const RandIntCallback& rand_callback); virtual ~ReportingDeliveryAgent();
diff --git a/net/reporting/reporting_endpoint_manager.cc b/net/reporting/reporting_endpoint_manager.cc index 8ed18fa..bd0d0e2 100644 --- a/net/reporting/reporting_endpoint_manager.cc +++ b/net/reporting/reporting_endpoint_manager.cc
@@ -7,6 +7,7 @@ #include <map> #include <set> #include <string> +#include <utility> #include <vector> #include "base/logging.h" @@ -15,6 +16,7 @@ #include "base/stl_util.h" #include "base/time/tick_clock.h" #include "net/base/backoff_entry.h" +#include "net/base/network_isolation_key.h" #include "net/base/rand_callback.h" #include "net/reporting/reporting_cache.h" #include "net/reporting/reporting_delegate.h" @@ -29,19 +31,33 @@ class ReportingEndpointManagerImpl : public ReportingEndpointManager { public: - ReportingEndpointManagerImpl(ReportingContext* context, + ReportingEndpointManagerImpl(const ReportingPolicy* policy, + const base::TickClock* tick_clock, + const ReportingDelegate* delegate, + ReportingCache* cache, const RandIntCallback& rand_callback) - : context_(context), rand_callback_(rand_callback) {} + : policy_(policy), + tick_clock_(tick_clock), + delegate_(delegate), + cache_(cache), + rand_callback_(rand_callback) { + DCHECK(policy); + DCHECK(tick_clock); + DCHECK(delegate); + DCHECK(cache); + } ~ReportingEndpointManagerImpl() override = default; const ReportingEndpoint FindEndpointForDelivery( + const NetworkIsolationKey& network_isolation_key, const url::Origin& origin, const std::string& group) override { // Get unexpired endpoints that apply to a delivery to |origin| and |group|. // May have been configured by a superdomain of |origin|. std::vector<ReportingEndpoint> endpoints = - cache()->GetCandidateEndpointsForDelivery(origin, group); + cache_->GetCandidateEndpointsForDelivery(network_isolation_key, origin, + group); // Highest-priority endpoint(s) that are not expired, failing, or // forbidden for use by the ReportingDelegate. @@ -50,12 +66,15 @@ int total_weight = 0; for (const ReportingEndpoint endpoint : endpoints) { - if (base::Contains(endpoint_backoff_, endpoint.info.url) && - endpoint_backoff_[endpoint.info.url]->ShouldRejectRequest()) { + auto endpoint_backoff_it = endpoint_backoff_.find( + EndpointBackoffKey(network_isolation_key, endpoint.info.url)); + if (endpoint_backoff_it != endpoint_backoff_.end() && + endpoint_backoff_it->second->ShouldRejectRequest()) { continue; } - if (!delegate()->CanUseClient(endpoint.group_key.origin, - endpoint.info.url)) { + + if (!delegate_->CanUseClient(endpoint.group_key.origin, + endpoint.info.url)) { continue; } @@ -101,21 +120,29 @@ return ReportingEndpoint(); } - void InformOfEndpointRequest(const GURL& endpoint, bool succeeded) override { - if (!base::Contains(endpoint_backoff_, endpoint)) { - endpoint_backoff_[endpoint] = std::make_unique<BackoffEntry>( - &policy().endpoint_backoff_policy, &tick_clock()); + void InformOfEndpointRequest(const NetworkIsolationKey& network_isolation_key, + const GURL& endpoint, + bool succeeded) override { + EndpointBackoffKey endpoint_backoff_key(network_isolation_key, endpoint); + auto endpoint_backoff_it = endpoint_backoff_.find(endpoint_backoff_key); + if (endpoint_backoff_it == endpoint_backoff_.end()) { + endpoint_backoff_it = + endpoint_backoff_ + .emplace(std::move(endpoint_backoff_key), + std::make_unique<BackoffEntry>( + &policy_->endpoint_backoff_policy, tick_clock_)) + .first; } - endpoint_backoff_[endpoint]->InformOfRequest(succeeded); + endpoint_backoff_it->second->InformOfRequest(succeeded); } private: - const ReportingPolicy& policy() const { return context_->policy(); } - const base::TickClock& tick_clock() const { return context_->tick_clock(); } - ReportingDelegate* delegate() { return context_->delegate(); } - ReportingCache* cache() { return context_->cache(); } + using EndpointBackoffKey = std::pair<NetworkIsolationKey, GURL>; - ReportingContext* context_; + const ReportingPolicy* const policy_; + const base::TickClock* const tick_clock_; + const ReportingDelegate* const delegate_; + ReportingCache* const cache_; RandIntCallback rand_callback_; @@ -124,7 +151,8 @@ // to be cleared as well. // TODO(chlily): clear this data when endpoints are deleted to avoid unbounded // growth of this map. - std::map<GURL, std::unique_ptr<net::BackoffEntry>> endpoint_backoff_; + std::map<EndpointBackoffKey, std::unique_ptr<net::BackoffEntry>> + endpoint_backoff_; DISALLOW_COPY_AND_ASSIGN(ReportingEndpointManagerImpl); }; @@ -133,9 +161,13 @@ // static std::unique_ptr<ReportingEndpointManager> ReportingEndpointManager::Create( - ReportingContext* context, + const ReportingPolicy* policy, + const base::TickClock* tick_clock, + const ReportingDelegate* delegate, + ReportingCache* cache, const RandIntCallback& rand_callback) { - return std::make_unique<ReportingEndpointManagerImpl>(context, rand_callback); + return std::make_unique<ReportingEndpointManagerImpl>( + policy, tick_clock, delegate, cache, rand_callback); } ReportingEndpointManager::~ReportingEndpointManager() = default;
diff --git a/net/reporting/reporting_endpoint_manager.h b/net/reporting/reporting_endpoint_manager.h index fca35f1..84d49d0 100644 --- a/net/reporting/reporting_endpoint_manager.h +++ b/net/reporting/reporting_endpoint_manager.h
@@ -11,26 +11,37 @@ #include "base/macros.h" #include "net/base/net_export.h" #include "net/base/rand_callback.h" -#include "net/reporting/reporting_context.h" class GURL; +namespace base { +class TickClock; +} + namespace url { class Origin; } // namespace url namespace net { +class NetworkIsolationKey; +class ReportingCache; +class ReportingDelegate; struct ReportingEndpoint; +struct ReportingPolicy; // Keeps track of which endpoints are pending (have active delivery attempts to // them) or in exponential backoff after one or more failures, and chooses an // endpoint from an endpoint group to receive reports for an origin. class NET_EXPORT ReportingEndpointManager { public: - // |context| must outlive the ReportingEndpointManager. + // The ReportingEndpointManager must not be used after any of the objects + // passed to its constructor are destroyed. static std::unique_ptr<ReportingEndpointManager> Create( - ReportingContext* context, + const ReportingPolicy* policy, + const base::TickClock* tick_clock, + const ReportingDelegate* delegate, + ReportingCache* cache, const RandIntCallback& rand_callback); virtual ~ReportingEndpointManager(); @@ -43,13 +54,16 @@ // If no suitable endpoint was found, returns an endpoint with is_valid() // false. virtual const ReportingEndpoint FindEndpointForDelivery( + const NetworkIsolationKey& network_isolation_key, const url::Origin& origin, const std::string& group) = 0; // Informs the EndpointManager of a successful or unsuccessful request made to // |endpoint| so it can manage exponential backoff of failing endpoints. - virtual void InformOfEndpointRequest(const GURL& endpoint, - bool succeeded) = 0; + virtual void InformOfEndpointRequest( + const NetworkIsolationKey& network_isolation_key, + const GURL& endpoint, + bool succeeded) = 0; }; } // namespace net
diff --git a/net/reporting/reporting_endpoint_manager_unittest.cc b/net/reporting/reporting_endpoint_manager_unittest.cc index fd1361da..68801b4 100644 --- a/net/reporting/reporting_endpoint_manager_unittest.cc +++ b/net/reporting/reporting_endpoint_manager_unittest.cc
@@ -9,6 +9,7 @@ #include "base/test/simple_test_tick_clock.h" #include "base/time/time.h" #include "net/base/backoff_entry.h" +#include "net/base/network_isolation_key.h" #include "net/reporting/reporting_cache.h" #include "net/reporting/reporting_endpoint.h" #include "net/reporting/reporting_policy.h" @@ -20,122 +21,282 @@ namespace net { namespace { -class ReportingEndpointManagerTest : public ReportingTestBase { +class TestReportingCache : public ReportingCache { public: - ReportingEndpointManagerTest() { - ReportingPolicy policy; - policy.endpoint_backoff_policy.num_errors_to_ignore = 0; - policy.endpoint_backoff_policy.initial_delay_ms = 60000; - policy.endpoint_backoff_policy.multiply_factor = 2.0; - policy.endpoint_backoff_policy.jitter_factor = 0.0; - policy.endpoint_backoff_policy.maximum_backoff_ms = -1; - policy.endpoint_backoff_policy.entry_lifetime_ms = 0; - policy.endpoint_backoff_policy.always_use_initial_delay = false; - UsePolicy(policy); + class PersistentReportingStore; + + // Tests using this class only use one origin/group. + TestReportingCache(const url::Origin& expected_origin, + const std::string& expected_group) + : expected_origin_(expected_origin), expected_group_(expected_group) {} + ~TestReportingCache() override = default; + + void SetEndpoint(const NetworkIsolationKey& network_isolation_key, + const ReportingEndpoint& reporting_endpoint) { + reporting_endpoints_[network_isolation_key].push_back(reporting_endpoint); + } + + // ReportingCache implementation: + + std::vector<ReportingEndpoint> GetCandidateEndpointsForDelivery( + const NetworkIsolationKey& network_isolation_key, + const url::Origin& origin, + const std::string& group_name) override { + EXPECT_EQ(expected_origin_, origin); + EXPECT_EQ(expected_group_, group_name); + return reporting_endpoints_[network_isolation_key]; + } + + // Everything below is NOTREACHED. + void AddReport(const GURL& url, + const std::string& user_agent, + const std::string& group_name, + const std::string& type, + std::unique_ptr<const base::Value> body, + int depth, + base::TimeTicks queued, + int attempts) override { + NOTREACHED(); + } + void GetReports( + std::vector<const ReportingReport*>* reports_out) const override { + NOTREACHED(); + } + base::Value GetReportsAsValue() const override { + NOTREACHED(); + return base::Value(); + } + void GetNonpendingReports( + std::vector<const ReportingReport*>* reports_out) const override { + NOTREACHED(); + } + void SetReportsPending( + const std::vector<const ReportingReport*>& reports) override { + NOTREACHED(); + } + void ClearReportsPending( + const std::vector<const ReportingReport*>& reports) override { + NOTREACHED(); + } + void IncrementReportsAttempts( + const std::vector<const ReportingReport*>& reports) override { + NOTREACHED(); + } + void IncrementEndpointDeliveries(const url::Origin& origin, + const std::string& group_name, + const GURL& url, + int reports_delivered, + bool successful) override { + NOTREACHED(); + } + void RemoveReports(const std::vector<const ReportingReport*>& reports, + ReportingReport::Outcome outcome) override { + NOTREACHED(); + } + void RemoveAllReports(ReportingReport::Outcome outcome) override { + NOTREACHED(); + } + size_t GetFullReportCountForTesting() const override { + NOTREACHED(); + return 0; + } + bool IsReportPendingForTesting(const ReportingReport* report) const override { + NOTREACHED(); + return false; + } + bool IsReportDoomedForTesting(const ReportingReport* report) const override { + NOTREACHED(); + return false; + } + void OnParsedHeader( + const url::Origin& origin, + std::vector<ReportingEndpointGroup> parsed_header) override { + NOTREACHED(); + } + std::vector<url::Origin> GetAllOrigins() const override { + NOTREACHED(); + return std::vector<url::Origin>(); + } + void RemoveClient(const url::Origin& origin) override { NOTREACHED(); } + void RemoveAllClients() override { NOTREACHED(); } + void RemoveEndpointGroup(const url::Origin& origin, + const std::string& group_name) override { + NOTREACHED(); + } + void RemoveEndpointsForUrl(const GURL& url) override { NOTREACHED(); } + void AddClientsLoadedFromStore( + std::vector<ReportingEndpoint> loaded_endpoints, + std::vector<CachedReportingEndpointGroup> loaded_endpoint_groups) + override { + NOTREACHED(); + } + base::Value GetClientsAsValue() const override { + NOTREACHED(); + return base::Value(); + } + size_t GetEndpointCount() const override { + NOTREACHED(); + return 0; + } + void Flush() override { NOTREACHED(); } + ReportingEndpoint GetEndpointForTesting(const url::Origin& origin, + const std::string& group_name, + const GURL& url) const override { + NOTREACHED(); + return ReportingEndpoint(); + } + bool EndpointGroupExistsForTesting(const url::Origin& origin, + const std::string& group_name, + OriginSubdomains include_subdomains, + base::Time expires) const override { + NOTREACHED(); + return false; + } + size_t GetEndpointGroupCountForTesting() const override { + NOTREACHED(); + return 0; + } + void SetEndpointForTesting(const url::Origin& origin, + const std::string& group_name, + const GURL& url, + OriginSubdomains include_subdomains, + base::Time expires, + int priority, + int weight) override { + NOTREACHED(); + } + + private: + const url::Origin expected_origin_; + const std::string expected_group_; + + std::map<NetworkIsolationKey, std::vector<ReportingEndpoint>> + reporting_endpoints_; + + DISALLOW_COPY_AND_ASSIGN(TestReportingCache); +}; + +class ReportingEndpointManagerTest : public testing::Test { + public: + ReportingEndpointManagerTest() : cache_(kOrigin, kGroup) { + policy_.endpoint_backoff_policy.num_errors_to_ignore = 0; + policy_.endpoint_backoff_policy.initial_delay_ms = 60000; + policy_.endpoint_backoff_policy.multiply_factor = 2.0; + policy_.endpoint_backoff_policy.jitter_factor = 0.0; + policy_.endpoint_backoff_policy.maximum_backoff_ms = -1; + policy_.endpoint_backoff_policy.entry_lifetime_ms = 0; + policy_.endpoint_backoff_policy.always_use_initial_delay = false; + + clock_.SetNowTicks(base::TimeTicks()); + + endpoint_manager_ = ReportingEndpointManager::Create( + &policy_, &clock_, &delegate_, &cache_, TestReportingRandIntCallback()); } protected: void SetEndpoint( const GURL& endpoint, int priority = ReportingEndpoint::EndpointInfo::kDefaultPriority, - int weight = ReportingEndpoint::EndpointInfo::kDefaultWeight) { - ASSERT_TRUE( - SetEndpointInCache(kOrigin_, kGroup_, endpoint, - base::Time::Now() + base::TimeDelta::FromDays(1), - OriginSubdomains::DEFAULT, priority, weight)); + int weight = ReportingEndpoint::EndpointInfo::kDefaultWeight, + const NetworkIsolationKey& network_isolation_key = + NetworkIsolationKey()) { + cache_.SetEndpoint(network_isolation_key, + ReportingEndpoint(kOrigin, kGroup, + ReportingEndpoint::EndpointInfo{ + endpoint, priority, weight})); } - const url::Origin kOrigin_ = url::Origin::Create(GURL("https://origin/")); - const GURL kEndpoint_ = GURL("https://endpoint/"); - const std::string kGroup_ = "group"; + const url::Origin kOrigin = url::Origin::Create(GURL("https://origin/")); + const std::string kGroup = "group"; + const GURL kEndpoint = GURL("https://endpoint/"); + + ReportingPolicy policy_; + base::SimpleTestTickClock clock_; + TestReportingDelegate delegate_; + TestReportingCache cache_; + std::unique_ptr<ReportingEndpointManager> endpoint_manager_; }; TEST_F(ReportingEndpointManagerTest, NoEndpoint) { - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_FALSE(endpoint); } TEST_F(ReportingEndpointManagerTest, Endpoint) { - SetEndpoint(kEndpoint_); + SetEndpoint(kEndpoint); - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint); - EXPECT_EQ(kEndpoint_, endpoint.info.url); -} - -TEST_F(ReportingEndpointManagerTest, ExpiredEndpoint) { - SetEndpoint(kEndpoint_); - - // Default expiration is "tomorrow", so make sure we're past that. - clock()->Advance(base::TimeDelta::FromDays(2)); - - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); - EXPECT_FALSE(endpoint); + EXPECT_EQ(kEndpoint, endpoint.info.url); } TEST_F(ReportingEndpointManagerTest, BackedOffEndpoint) { - ASSERT_EQ(2.0, policy().endpoint_backoff_policy.multiply_factor); + ASSERT_EQ(2.0, policy_.endpoint_backoff_policy.multiply_factor); base::TimeDelta initial_delay = base::TimeDelta::FromMilliseconds( - policy().endpoint_backoff_policy.initial_delay_ms); + policy_.endpoint_backoff_policy.initial_delay_ms); - SetEndpoint(kEndpoint_); + SetEndpoint(kEndpoint); - endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), kEndpoint, + false); // After one failure, endpoint is in exponential backoff. - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_FALSE(endpoint); // After initial delay, endpoint is usable again. - tick_clock()->Advance(initial_delay); + clock_.Advance(initial_delay); - ReportingEndpoint endpoint2 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint2 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint2); - EXPECT_EQ(kEndpoint_, endpoint2.info.url); + EXPECT_EQ(kEndpoint, endpoint2.info.url); - endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), kEndpoint, + false); // After a second failure, endpoint is backed off again. - ReportingEndpoint endpoint3 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint3 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_FALSE(endpoint3); - tick_clock()->Advance(initial_delay); + clock_.Advance(initial_delay); // Next backoff is longer -- 2x the first -- so endpoint isn't usable yet. - ReportingEndpoint endpoint4 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint4 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_FALSE(endpoint4); - tick_clock()->Advance(initial_delay); + clock_.Advance(initial_delay); // After 2x the initial delay, the endpoint is usable again. - ReportingEndpoint endpoint5 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint5 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint5); - EXPECT_EQ(kEndpoint_, endpoint5.info.url); + EXPECT_EQ(kEndpoint, endpoint5.info.url); - endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true); - endpoint_manager()->InformOfEndpointRequest(kEndpoint_, true); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), kEndpoint, + true); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), kEndpoint, + true); // Two more successful requests should reset the backoff to the initial delay // again. - endpoint_manager()->InformOfEndpointRequest(kEndpoint_, false); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), kEndpoint, + false); - ReportingEndpoint endpoint6 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint6 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_FALSE(endpoint6); - tick_clock()->Advance(initial_delay); + clock_.Advance(initial_delay); - ReportingEndpoint endpoint7 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint7 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); EXPECT_TRUE(endpoint7); } @@ -153,8 +314,8 @@ bool endpoint2_seen = false; for (int i = 0; i < kMaxAttempts; ++i) { - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint); ASSERT_TRUE(endpoint.info.url == kEndpoint1 || endpoint.info.url == kEndpoint2); @@ -181,25 +342,26 @@ SetEndpoint(kBackupEndpoint, 20 /* priority */, ReportingEndpoint::EndpointInfo::kDefaultWeight); - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint); EXPECT_EQ(kPrimaryEndpoint, endpoint.info.url); // The backoff policy we set up in the constructor means that a single failed // upload will take the primary endpoint out of contention. This should cause // us to choose the backend endpoint. - endpoint_manager()->InformOfEndpointRequest(kPrimaryEndpoint, false); - ReportingEndpoint endpoint2 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + endpoint_manager_->InformOfEndpointRequest(NetworkIsolationKey(), + kPrimaryEndpoint, false); + ReportingEndpoint endpoint2 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint2); EXPECT_EQ(kBackupEndpoint, endpoint2.info.url); // Advance the current time far enough to clear out the primary endpoint's // backoff clock. This should bring the primary endpoint back into play. - tick_clock()->Advance(base::TimeDelta::FromMinutes(2)); - ReportingEndpoint endpoint3 = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + clock_.Advance(base::TimeDelta::FromMinutes(2)); + ReportingEndpoint endpoint3 = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint3); EXPECT_EQ(kPrimaryEndpoint, endpoint3.info.url); } @@ -224,8 +386,8 @@ int endpoint2_count = 0; for (int i = 0; i < kTotalEndpointWeight; ++i) { - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint); ASSERT_TRUE(endpoint.info.url == kEndpoint1 || endpoint.info.url == kEndpoint2); @@ -253,8 +415,8 @@ int endpoint2_count = 0; for (int i = 0; i < 10; ++i) { - ReportingEndpoint endpoint = - endpoint_manager()->FindEndpointForDelivery(kOrigin_, kGroup_); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + NetworkIsolationKey(), kOrigin, kGroup); ASSERT_TRUE(endpoint); ASSERT_TRUE(endpoint.info.url == kEndpoint1 || endpoint.info.url == kEndpoint2); @@ -269,5 +431,106 @@ EXPECT_EQ(5, endpoint2_count); } +// Check that ReportingEndpointManager distinguishes NetworkIsolationKeys. +TEST_F(ReportingEndpointManagerTest, NetworkIsolationKey) { + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://origin2/")); + + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin, kOrigin); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + // An Endpoint set for kNetworkIsolationKey1 should not affect + // kNetworkIsolationKey2. + SetEndpoint(kEndpoint, ReportingEndpoint::EndpointInfo::kDefaultPriority, + 0 /* weight */, kNetworkIsolationKey1); + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + kNetworkIsolationKey1, kOrigin, kGroup); + ASSERT_TRUE(endpoint); + EXPECT_EQ(kEndpoint, endpoint.info.url); + EXPECT_FALSE(endpoint_manager_->FindEndpointForDelivery(kNetworkIsolationKey2, + kOrigin, kGroup)); + EXPECT_FALSE(endpoint_manager_->FindEndpointForDelivery(NetworkIsolationKey(), + kOrigin, kGroup)); + + // Set the same Endpoint for kNetworkIsolationKey2, so both should be + // reporting to the same URL. + SetEndpoint(kEndpoint, ReportingEndpoint::EndpointInfo::kDefaultPriority, + 0 /* weight */, kNetworkIsolationKey2); + endpoint = endpoint_manager_->FindEndpointForDelivery(kNetworkIsolationKey1, + kOrigin, kGroup); + ASSERT_TRUE(endpoint); + EXPECT_EQ(kEndpoint, endpoint.info.url); + endpoint = endpoint_manager_->FindEndpointForDelivery(kNetworkIsolationKey2, + kOrigin, kGroup); + ASSERT_TRUE(endpoint); + EXPECT_EQ(kEndpoint, endpoint.info.url); + EXPECT_FALSE(endpoint_manager_->FindEndpointForDelivery(NetworkIsolationKey(), + kOrigin, kGroup)); + + // An error reporting to that URL in the context of kNetworkIsolationKey1 + // should only affect the Endpoint retrieved in the context of + // kNetworkIsolationKey1. + endpoint_manager_->InformOfEndpointRequest(kNetworkIsolationKey1, kEndpoint, + false); + EXPECT_FALSE(endpoint_manager_->FindEndpointForDelivery(kNetworkIsolationKey1, + kOrigin, kGroup)); + endpoint = endpoint_manager_->FindEndpointForDelivery(kNetworkIsolationKey2, + kOrigin, kGroup); + ASSERT_TRUE(endpoint); + EXPECT_EQ(kEndpoint, endpoint.info.url); + EXPECT_FALSE(endpoint_manager_->FindEndpointForDelivery(NetworkIsolationKey(), + kOrigin, kGroup)); +} + +TEST_F(ReportingEndpointManagerTest, NetworkIsolationKeyWithMultipleEndpoints) { + const url::Origin kOrigin2 = url::Origin::Create(GURL("https://origin2/")); + + const NetworkIsolationKey kNetworkIsolationKey1(kOrigin, kOrigin); + const NetworkIsolationKey kNetworkIsolationKey2(kOrigin2, kOrigin2); + + const GURL kEndpoint1("https://endpoint1/"); + const GURL kEndpoint2("https://endpoint2/"); + const GURL kEndpoint3("https://endpoint3/"); + const int kMaxAttempts = 20; + + // Add two Endpoints for kNetworkIsolationKey1, and a different one for + // kNetworkIsolationKey2. + SetEndpoint(kEndpoint1, ReportingEndpoint::EndpointInfo::kDefaultPriority, + ReportingEndpoint::EndpointInfo::kDefaultWeight, + kNetworkIsolationKey1); + SetEndpoint(kEndpoint2, ReportingEndpoint::EndpointInfo::kDefaultPriority, + ReportingEndpoint::EndpointInfo::kDefaultWeight, + kNetworkIsolationKey1); + SetEndpoint(kEndpoint3, ReportingEndpoint::EndpointInfo::kDefaultPriority, + ReportingEndpoint::EndpointInfo::kDefaultWeight, + kNetworkIsolationKey2); + + bool endpoint1_seen = false; + bool endpoint2_seen = false; + + // Make sure that calling FindEndpointForDelivery() with kNetworkIsolationKey1 + // can return both of its endpoints, but not kNetworkIsolationKey2's endpoint. + for (int i = 0; i < kMaxAttempts; ++i) { + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + kNetworkIsolationKey1, kOrigin, kGroup); + ASSERT_TRUE(endpoint); + ASSERT_TRUE(endpoint.info.url == kEndpoint1 || + endpoint.info.url == kEndpoint2); + + if (endpoint.info.url == kEndpoint1) { + endpoint1_seen = true; + } else if (endpoint.info.url == kEndpoint2) { + endpoint2_seen = true; + } + } + + EXPECT_TRUE(endpoint1_seen); + EXPECT_TRUE(endpoint2_seen); + + ReportingEndpoint endpoint = endpoint_manager_->FindEndpointForDelivery( + kNetworkIsolationKey2, kOrigin, kGroup); + ASSERT_TRUE(endpoint); + EXPECT_EQ(kEndpoint3, endpoint.info.url); +} + } // namespace } // namespace net
diff --git a/net/reporting/reporting_test_util.cc b/net/reporting/reporting_test_util.cc index 301f163..5b36fefb 100644 --- a/net/reporting/reporting_test_util.cc +++ b/net/reporting/reporting_test_util.cc
@@ -16,7 +16,6 @@ #include "base/test/simple_test_clock.h" #include "base/test/simple_test_tick_clock.h" #include "base/timer/mock_timer.h" -#include "net/base/rand_callback.h" #include "net/reporting/reporting_cache.h" #include "net/reporting/reporting_context.h" #include "net/reporting/reporting_delegate.h" @@ -25,7 +24,6 @@ #include "net/reporting/reporting_garbage_collector.h" #include "net/reporting/reporting_policy.h" #include "net/reporting/reporting_uploader.h" -#include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" #include "url/origin.h" @@ -85,6 +83,15 @@ } // namespace +RandIntCallback TestReportingRandIntCallback() { + return base::BindRepeating( + [](int* rand_counter, int min, int max) { + DCHECK_LE(min, max); + return min + ((*rand_counter)++ % (max - min + 1)); + }, + base::Owned(std::make_unique<int>(0))); +} + TestReportingUploader::PendingUpload::~PendingUpload() = default; TestReportingUploader::PendingUpload::PendingUpload() = default; @@ -109,8 +116,7 @@ return pending_uploads_.size(); } -TestReportingDelegate::TestReportingDelegate() - : test_request_context_(std::make_unique<TestURLRequestContext>()) {} +TestReportingDelegate::TestReportingDelegate() = default; TestReportingDelegate::~TestReportingDelegate() = default; @@ -157,16 +163,13 @@ const base::TickClock* tick_clock, const ReportingPolicy& policy, ReportingCache::PersistentReportingStore* store) - : ReportingContext( - policy, - clock, - tick_clock, - base::BindRepeating(&TestReportingContext::RandIntCallback, - base::Unretained(this)), - std::make_unique<TestReportingUploader>(), - std::make_unique<TestReportingDelegate>(), - store), - rand_counter_(0), + : ReportingContext(policy, + clock, + tick_clock, + TestReportingRandIntCallback(), + std::make_unique<TestReportingUploader>(), + std::make_unique<TestReportingDelegate>(), + store), delivery_timer_(new base::MockOneShotTimer()), garbage_collection_timer_(new base::MockOneShotTimer()) { garbage_collector()->SetTimerForTesting( @@ -179,11 +182,6 @@ garbage_collection_timer_ = nullptr; } -int TestReportingContext::RandIntCallback(int min, int max) { - DCHECK_LE(min, max); - return min + (rand_counter_++ % (max - min + 1)); -} - ReportingTestBase::ReportingTestBase() : store_(nullptr) { // For tests, disable jitter. ReportingPolicy policy;
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h index c0fd86e..e75a721 100644 --- a/net/reporting/reporting_test_util.h +++ b/net/reporting/reporting_test_util.h
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/test/simple_test_clock.h" #include "base/test/simple_test_tick_clock.h" +#include "net/base/rand_callback.h" #include "net/reporting/reporting_cache.h" #include "net/reporting/reporting_context.h" #include "net/reporting/reporting_delegate.h" @@ -38,7 +39,6 @@ struct ReportingEndpoint; class ReportingGarbageCollector; -class TestURLRequestContext; // A matcher for ReportingReports, which checks that the url of the report is // the given url. @@ -49,6 +49,8 @@ return arg.url == url; } +RandIntCallback TestReportingRandIntCallback(); + // A test implementation of ReportingUploader that holds uploads for tests to // examine and complete with a specified outcome. class TestReportingUploader : public ReportingUploader { @@ -128,7 +130,6 @@ const GURL& endpoint) const override; private: - std::unique_ptr<TestURLRequestContext> test_request_context_; bool disallow_report_uploads_ = false; bool pause_permissions_check_ = false; @@ -162,10 +163,6 @@ } private: - int RandIntCallback(int min, int max); - - int rand_counter_; - // Owned by the DeliveryAgent and GarbageCollector, respectively, but // referenced here to preserve type: @@ -250,9 +247,6 @@ TestReportingUploader* uploader() { return context_->test_uploader(); } ReportingCache* cache() { return context_->cache(); } - ReportingEndpointManager* endpoint_manager() { - return context_->endpoint_manager(); - } ReportingDeliveryAgent* delivery_agent() { return context_->delivery_agent(); }
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc index 7fefb5f..7f404ad 100644 --- a/net/server/http_server_unittest.cc +++ b/net/server/http_server_unittest.cc
@@ -44,11 +44,6 @@ #include "net/test/gtest_util.h" #include "net/test/test_with_task_environment.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_fetcher_delegate.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_test_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -451,37 +446,19 @@ } TEST_F(HttpServerTest, RequestWithTooLargeBody) { - class TestURLFetcherDelegate : public URLFetcherDelegate { - public: - TestURLFetcherDelegate(const base::Closure& quit_loop_func) - : quit_loop_func_(quit_loop_func) {} - ~TestURLFetcherDelegate() override = default; - - void OnURLFetchComplete(const URLFetcher* source) override { - EXPECT_EQ(HTTP_INTERNAL_SERVER_ERROR, source->GetResponseCode()); - quit_loop_func_.Run(); - } - - private: - base::Closure quit_loop_func_; - }; - - base::RunLoop run_loop; - TestURLFetcherDelegate delegate(run_loop.QuitClosure()); - - scoped_refptr<URLRequestContextGetter> request_context_getter( - new TestURLRequestContextGetter(base::ThreadTaskRunnerHandle::Get())); - std::unique_ptr<URLFetcher> fetcher = URLFetcher::Create( - GURL(base::StringPrintf("http://127.0.0.1:%d/test", - server_address_.port())), - URLFetcher::GET, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS); - fetcher->SetRequestContext(request_context_getter.get()); - fetcher->AddExtraRequestHeader( - base::StringPrintf("content-length:%d", 1 << 30)); - fetcher->Start(); - - run_loop.Run(); - ASSERT_EQ(0u, requests_.size()); + TestHttpClient client; + ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + client.Send( + "GET /test HTTP/1.1\r\n" + "Content-Length: 1073741824\r\n\r\n"); + std::string response; + ASSERT_TRUE(client.ReadResponse(&response)); + EXPECT_EQ( + "HTTP/1.1 500 Internal Server Error\r\n" + "Content-Length:42\r\n" + "Content-Type:text/html\r\n\r\n" + "request content-length too big or unknown.", + response); } TEST_F(HttpServerTest, Send200) {
diff --git a/net/tools/cert_verify_tool/cert_verify_tool.cc b/net/tools/cert_verify_tool/cert_verify_tool.cc index 9ae5ddf..b707f70 100644 --- a/net/tools/cert_verify_tool/cert_verify_tool.cc +++ b/net/tools/cert_verify_tool/cert_verify_tool.cc
@@ -199,6 +199,7 @@ base::StringPiece impl_name, scoped_refptr<net::CertNetFetcher> cert_net_fetcher, bool use_system_roots) { +#if !defined(OS_FUCHSIA) if (impl_name == "platform") { if (!use_system_roots) { std::cerr << "WARNING: platform verifier not supported with " @@ -207,9 +208,10 @@ } return std::make_unique<CertVerifyImplUsingProc>( - "CertVerifyProc (default)", - net::CertVerifyProc::CreateDefault(std::move(cert_net_fetcher))); + "CertVerifyProc (system)", net::CertVerifyProc::CreateSystemVerifyProc( + std::move(cert_net_fetcher))); } +#endif if (impl_name == "builtin") { return std::make_unique<CertVerifyImplUsingProc>( @@ -410,8 +412,13 @@ // Parse the ordered list of CertVerifyImpl passed via command line flags into // |impls|. std::string impls_str = command_line.GetSwitchValueASCII("impls"); - if (impls_str.empty()) - impls_str = "platform,builtin,pathbuilder"; // Default value. + if (impls_str.empty()) { + // Default value. +#if !defined(OS_FUCHSIA) + impls_str = "platform,"; +#endif + impls_str += "builtin,pathbuilder"; + } std::vector<std::string> impl_names = base::SplitString( impls_str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
diff --git a/remoting/android/java/src/org/chromium/chromoting/jni/ConnectionListener.java b/remoting/android/java/src/org/chromium/chromoting/jni/ConnectionListener.java index e1b27db..b0accd6 100644 --- a/remoting/android/java/src/org/chromium/chromoting/jni/ConnectionListener.java +++ b/remoting/android/java/src/org/chromium/chromoting/jni/ConnectionListener.java
@@ -73,7 +73,7 @@ case Error.SIGNALING_ERROR: return R.string.error_p2p_failure; case Error.SIGNALING_TIMEOUT: - return R.string.error_p2p_failure; + return R.string.error_host_is_offline; case Error.HOST_OVERLOAD: return R.string.error_host_overload; case Error.MAX_SESSION_LENGTH:
diff --git a/remoting/ios/app/client_connection_view_controller.mm b/remoting/ios/app/client_connection_view_controller.mm index 070f1f2..16eb487 100644 --- a/remoting/ios/app/client_connection_view_controller.mm +++ b/remoting/ios/app/client_connection_view_controller.mm
@@ -552,7 +552,7 @@ message = l10n_util::GetNSString(IDS_ERROR_P2P_FAILURE); break; case SessionErrorSignalingTimeout: - message = l10n_util::GetNSString(IDS_ERROR_SERVICE_UNAVAILABLE); + message = l10n_util::GetNSString(IDS_ERROR_HOST_IS_OFFLINE); break; case SessionErrorHostOverload: message = l10n_util::GetNSString(IDS_ERROR_HOST_OVERLOAD);
diff --git a/services/network/cert_verifier_with_trust_anchors_unittest.cc b/services/network/cert_verifier_with_trust_anchors_unittest.cc index 37dbd9f4..dfcf766 100644 --- a/services/network/cert_verifier_with_trust_anchors_unittest.cc +++ b/services/network/cert_verifier_with_trust_anchors_unittest.cc
@@ -18,6 +18,7 @@ #include "crypto/scoped_test_nss_chromeos_user.h" #include "net/base/test_completion_callback.h" #include "net/cert/cert_net_fetcher.h" +#include "net/cert/cert_verify_proc_builtin.h" #include "net/cert/cert_verify_result.h" #include "net/cert/nss_cert_database_chromeos.h" #include "net/cert/x509_certificate.h" @@ -26,11 +27,12 @@ #include "net/test/cert_test_util.h" #include "net/test/test_data_directory.h" #include "services/network/cert_verify_proc_chromeos.h" +#include "services/network/system_trust_store_provider_chromeos.h" #include "testing/gtest/include/gtest/gtest.h" namespace network { -class CertVerifierWithTrustAnchorsTest : public testing::Test { +class CertVerifierWithTrustAnchorsTest : public testing::TestWithParam<bool> { public: CertVerifierWithTrustAnchorsTest() : trust_anchor_used_(false), @@ -53,8 +55,16 @@ std::make_unique<CertVerifierWithTrustAnchors>(base::BindRepeating( &CertVerifierWithTrustAnchorsTest::OnTrustAnchorUsed, base::Unretained(this))); - cert_verify_proc_ = base::MakeRefCounted<network::CertVerifyProcChromeOS>( - crypto::GetPublicSlotForChromeOSUser(test_nss_user_.username_hash())); + if (GetParam()) { + cert_verify_proc_ = net::CreateCertVerifyProcBuiltin( + /*net_fetcher=*/nullptr, + std::make_unique<SystemTrustStoreProviderChromeOS>( + crypto::GetPublicSlotForChromeOSUser( + test_nss_user_.username_hash()))); + } else { + cert_verify_proc_ = base::MakeRefCounted<network::CertVerifyProcChromeOS>( + crypto::GetPublicSlotForChromeOSUser(test_nss_user_.username_hash())); + } cert_verifier_->InitializeOnIOThread(cert_verify_proc_); test_ca_cert_ = LoadCertificate("root_ca_cert.pem", net::CA_CERT); @@ -135,7 +145,9 @@ base::test::TaskEnvironment task_environment_; }; -TEST_F(CertVerifierWithTrustAnchorsTest, VerifyUntrustedCert) { +INSTANTIATE_TEST_SUITE_P(, CertVerifierWithTrustAnchorsTest, testing::Bool()); + +TEST_P(CertVerifierWithTrustAnchorsTest, VerifyUntrustedCert) { // |test_server_cert_| is untrusted, so Verify() fails. { net::CertVerifyResult verify_result; @@ -163,7 +175,7 @@ EXPECT_FALSE(WasTrustAnchorUsedAndReset()); } -TEST_F(CertVerifierWithTrustAnchorsTest, VerifyTrustedCert) { +TEST_P(CertVerifierWithTrustAnchorsTest, VerifyTrustedCert) { // Make the database trust |test_ca_cert_|. net::NSSCertDatabase::ImportCertFailureList failure_list; ASSERT_TRUE(test_cert_db_->ImportCACerts( @@ -191,7 +203,7 @@ EXPECT_FALSE(WasTrustAnchorUsedAndReset()); } -TEST_F(CertVerifierWithTrustAnchorsTest, VerifyUsingAdditionalTrustAnchor) { +TEST_P(CertVerifierWithTrustAnchorsTest, VerifyUsingAdditionalTrustAnchor) { ASSERT_TRUE(SupportsAdditionalTrustAnchors()); // |test_server_cert_| is untrusted, so Verify() fails. @@ -259,7 +271,7 @@ EXPECT_FALSE(WasTrustAnchorUsedAndReset()); } -TEST_F(CertVerifierWithTrustAnchorsTest, +TEST_P(CertVerifierWithTrustAnchorsTest, VerifyUsesAdditionalTrustAnchorsAfterConfigChange) { ASSERT_TRUE(SupportsAdditionalTrustAnchors());
diff --git a/services/network/network_context.cc b/services/network/network_context.cc index b592f2d..64c7e8b 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc
@@ -1547,10 +1547,8 @@ ->config_client_request), std::move(params_->trial_comparison_cert_verifier_params ->report_client), - net::CertVerifyProc::CreateDefault(cert_net_fetcher_), - net::CreateCertVerifyProcBuiltin( - cert_net_fetcher_, - net::SystemTrustStoreProvider::CreateDefaultForSSL()))); + net::CertVerifyProc::CreateSystemVerifyProc(cert_net_fetcher_), + net::CertVerifyProc::CreateBuiltinVerifyProc(cert_net_fetcher_))); } #endif if (!cert_verifier)
diff --git a/services/network/public/cpp/server/http_server_unittest.cc b/services/network/public/cpp/server/http_server_unittest.cc index a1198944..30b25c2 100644 --- a/services/network/public/cpp/server/http_server_unittest.cc +++ b/services/network/public/cpp/server/http_server_unittest.cc
@@ -26,10 +26,6 @@ #include "net/log/net_log_source.h" #include "net/test/gtest_util.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_fetcher_delegate.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_test_util.h" #include "services/network/public/cpp/server/http_connection.h" #include "services/network/public/cpp/server/http_server_request_info.h" @@ -486,37 +482,19 @@ } TEST_F(HttpServerTest, RequestWithTooLargeBody) { - class TestURLFetcherDelegate : public net::URLFetcherDelegate { - public: - TestURLFetcherDelegate(const base::RepeatingClosure& quit_loop_func) - : quit_loop_func_(quit_loop_func) {} - ~TestURLFetcherDelegate() override = default; - - void OnURLFetchComplete(const net::URLFetcher* source) override { - EXPECT_EQ(net::HTTP_INTERNAL_SERVER_ERROR, source->GetResponseCode()); - quit_loop_func_.Run(); - } - - private: - base::RepeatingClosure quit_loop_func_; - }; - - base::RunLoop run_loop; - TestURLFetcherDelegate delegate(run_loop.QuitClosure()); - - scoped_refptr<net::URLRequestContextGetter> request_context_getter( - new net::TestURLRequestContextGetter( - base::ThreadTaskRunnerHandle::Get())); - std::unique_ptr<net::URLFetcher> fetcher = net::URLFetcher::Create( - GURL(base::StringPrintf("http://[::1]:%d/test", server_address_.port())), - net::URLFetcher::GET, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS); - fetcher->SetRequestContext(request_context_getter.get()); - fetcher->AddExtraRequestHeader( - base::StringPrintf("content-length:%d", 1 << 30)); - fetcher->Start(); - - run_loop.Run(); - ASSERT_EQ(0u, requests_.size()); + TestHttpClient client; + ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + client.Send( + "GET /test HTTP/1.1\r\n" + "Content-Length: 1073741824\r\n\r\n"); + std::string response; + ASSERT_TRUE(client.ReadResponse(&response)); + EXPECT_EQ( + "HTTP/1.1 500 Internal Server Error\r\n" + "Content-Length:53\r\n" + "Content-Type:text/html\r\n\r\n" + "request content-length too big or unknown: 1073741824", + response); } TEST_F(HttpServerTest, Send200) {
diff --git a/services/network/system_trust_store_provider_chromeos.h b/services/network/system_trust_store_provider_chromeos.h index fd7514c..86adefd 100644 --- a/services/network/system_trust_store_provider_chromeos.h +++ b/services/network/system_trust_store_provider_chromeos.h
@@ -8,6 +8,7 @@ #include <certt.h> #include <memory> +#include "base/component_export.h" #include "base/macros.h" #include "crypto/scoped_nss_types.h" #include "net/cert/cert_verify_proc_builtin.h" @@ -22,7 +23,8 @@ // A SystemTrustStoreProvider that supports creating SystemTrustStore instances // which will only consider user-imported certificates trusted if they are on a // specific NSS slot. -class SystemTrustStoreProviderChromeOS : public net::SystemTrustStoreProvider { +class COMPONENT_EXPORT(NETWORK_SERVICE) SystemTrustStoreProviderChromeOS + : public net::SystemTrustStoreProvider { public: // Creates a SystemTrustStoreProvider that will provide SystemTrustStore // instances which will not allow trusting user-imported certififcates.
diff --git a/services/service_manager/sandbox/mac/common.sb b/services/service_manager/sandbox/mac/common.sb index 90e99f14..e6e367a 100644 --- a/services/service_manager/sandbox/mac/common.sb +++ b/services/service_manager/sandbox/mac/common.sb
@@ -22,6 +22,8 @@ (define log-file-path "LOG_FILE_PATH") (define os-version (string->number (param "OS_VERSION"))) (define darwin-user-cache-dir "DARWIN_USER_CACHE_DIR") +(define darwin-user-dir "DARWIN_USER_DIR") +(define darwin-user-temp-dir "DARWIN_USER_TEMP_DIR") (define filter-syscalls "FILTER_SYSCALLS") ; Backwards compatibility for 10.10.
diff --git a/services/service_manager/sandbox/mac/gpu_v2.sb b/services/service_manager/sandbox/mac/gpu_v2.sb index 137dece..ff841a2 100644 --- a/services/service_manager/sandbox/mac/gpu_v2.sb +++ b/services/service_manager/sandbox/mac/gpu_v2.sb
@@ -13,6 +13,7 @@ ; Allow communication between the GPU process and the UI server. (allow mach-lookup + (global-name "com.apple.bsd.dirhelper") (global-name "com.apple.cfprefsd.agent") (global-name "com.apple.cfprefsd.daemon") (global-name "com.apple.CoreServices.coreservicesd") @@ -90,12 +91,15 @@ (allow file-read* (subpath "/Library/GPUBundles") (subpath "/Library/Video/Plug-Ins") + (subpath "/System/Library/CoreServices/RawCamera.bundle") (subpath "/System/Library/Video/Plug-Ins") ) ; crbug.com/980134 (allow file-read* file-write* (subpath (param darwin-user-cache-dir)) + (subpath (param darwin-user-dir)) + (subpath (param darwin-user-temp-dir)) ) (if (param-true? filter-syscalls)
diff --git a/services/viz/public/cpp/compositing/copy_output_result_mojom_traits.cc b/services/viz/public/cpp/compositing/copy_output_result_mojom_traits.cc index 69f6c29..90ebcf9 100644 --- a/services/viz/public/cpp/compositing/copy_output_result_mojom_traits.cc +++ b/services/viz/public/cpp/compositing/copy_output_result_mojom_traits.cc
@@ -206,7 +206,7 @@ *out_p = std::make_unique<viz::CopyOutputTextureResult>( rect, *mailbox, *sync_token, *color_space, viz::SingleReleaseCallback::Create( - base::Bind(&Release, base::Passed(&releaser)))); + base::BindOnce(&Release, std::move(releaser)))); return true; }
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc index 2051d34..65b8eb8b 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -236,12 +236,12 @@ std::unique_ptr<CopyOutputRequest> input(new CopyOutputRequest( result_format, base::BindOnce( - [](const base::Closure& quit_closure, const gfx::Rect& expected_rect, + [](base::OnceClosure quit_closure, const gfx::Rect& expected_rect, std::unique_ptr<CopyOutputResult> result) { EXPECT_EQ(expected_rect, result->rect()); // Note: CopyOutputResult plumbing for bitmap requests is tested in // StructTraitsTest.CopyOutputResult_Bitmap. - quit_closure.Run(); + std::move(quit_closure).Run(); }, run_loop.QuitClosure(), result_rect))); input->SetScaleRatio(scale_from, scale_to); @@ -283,10 +283,10 @@ auto request = std::make_unique<CopyOutputRequest>( CopyOutputRequest::ResultFormat::RGBA_BITMAP, base::BindOnce( - [](const base::Closure& quit_closure, + [](base::OnceClosure quit_closure, std::unique_ptr<CopyOutputResult> result) { EXPECT_TRUE(result->IsEmpty()); - quit_closure.Run(); + std::move(quit_closure).Run(); }, run_loop.QuitClosure())); auto result_sender = mojo::StructTraits< @@ -313,12 +313,12 @@ std::unique_ptr<CopyOutputRequest> input(new CopyOutputRequest( result_format, base::BindOnce( - [](const base::Closure& quit_closure, const gfx::Rect& expected_rect, + [](base::OnceClosure quit_closure, const gfx::Rect& expected_rect, std::unique_ptr<CopyOutputResult> result) { EXPECT_EQ(expected_rect, result->rect()); // Note: CopyOutputResult plumbing for texture requests is tested in // StructTraitsTest.CopyOutputResult_Texture. - quit_closure.Run(); + std::move(quit_closure).Run(); }, run_loop_for_result.QuitClosure(), result_rect))); EXPECT_FALSE(input->is_scaled()); @@ -334,13 +334,13 @@ base::RunLoop run_loop_for_release; output->SendResult(std::make_unique<CopyOutputTextureResult>( result_rect, mailbox, sync_token, gfx::ColorSpace::CreateSRGB(), - SingleReleaseCallback::Create(base::Bind( - [](const base::Closure& quit_closure, + SingleReleaseCallback::Create(base::BindOnce( + [](base::OnceClosure quit_closure, const gpu::SyncToken& expected_sync_token, const gpu::SyncToken& sync_token, bool is_lost) { EXPECT_EQ(expected_sync_token, sync_token); EXPECT_FALSE(is_lost); - quit_closure.Run(); + std::move(quit_closure).Run(); }, run_loop_for_release.QuitClosure(), sync_token)))); @@ -1245,12 +1245,13 @@ 71234838); sync_token.SetVerifyFlush(); base::RunLoop run_loop; - auto callback = SingleReleaseCallback::Create(base::Bind( - [](base::Closure quit_closure, const gpu::SyncToken& expected_sync_token, + auto callback = SingleReleaseCallback::Create(base::BindOnce( + [](base::OnceClosure quit_closure, + const gpu::SyncToken& expected_sync_token, const gpu::SyncToken& sync_token, bool is_lost) { EXPECT_EQ(expected_sync_token, sync_token); EXPECT_TRUE(is_lost); - quit_closure.Run(); + std::move(quit_closure).Run(); }, run_loop.QuitClosure(), sync_token)); gpu::Mailbox mailbox;
diff --git a/services/viz/public/cpp/gpu/gpu_unittest.cc b/services/viz/public/cpp/gpu/gpu_unittest.cc index e7027ec..d4fed86 100644 --- a/services/viz/public/cpp/gpu/gpu_unittest.cc +++ b/services/viz/public/cpp/gpu/gpu_unittest.cc
@@ -100,8 +100,9 @@ base::RunLoop run_loop; io_thread_.task_runner()->PostTask( FROM_HERE, - base::BindOnce([](base::Closure callback) { callback.Run(); }, - run_loop.QuitClosure())); + base::BindOnce( + [](base::OnceClosure callback) { std::move(callback).Run(); }, + run_loop.QuitClosure())); run_loop.Run(); } @@ -173,13 +174,13 @@ base::RunLoop run_loop; // A callback that decrements the counter, and runs the callback when the // counter reaches 0. - auto callback = base::Bind( - [](int* counter, const base::Closure& callback, + auto callback = base::BindRepeating( + [](int* counter, base::OnceClosure callback, scoped_refptr<gpu::GpuChannelHost> channel) { EXPECT_TRUE(channel); --(*counter); if (*counter == 0) - callback.Run(); + std::move(callback).Run(); }, &counter, run_loop.QuitClosure()); gpu()->EstablishGpuChannel(callback); @@ -199,9 +200,8 @@ scoped_refptr<gpu::GpuChannelHost> host; auto callback = base::BindOnce( [](scoped_refptr<gpu::GpuChannelHost>* out_host, - const base::Closure& callback, - scoped_refptr<gpu::GpuChannelHost> host) { - callback.Run(); + base::OnceClosure callback, scoped_refptr<gpu::GpuChannelHost> host) { + std::move(callback).Run(); *out_host = std::move(host); }, &host, run_loop.QuitClosure()); @@ -226,10 +226,9 @@ TEST_F(GpuTest, EstablishRequestResponseSynchronouslyOnSuccess) { base::RunLoop run_loop; gpu()->EstablishGpuChannel(base::BindOnce( - [](const base::Closure& callback, - scoped_refptr<gpu::GpuChannelHost> host) { + [](base::OnceClosure callback, scoped_refptr<gpu::GpuChannelHost> host) { EXPECT_TRUE(host); - callback.Run(); + std::move(callback).Run(); }, run_loop.QuitClosure())); run_loop.Run();
diff --git a/testing/android/native_test/BUILD.gn b/testing/android/native_test/BUILD.gn index b6ee7181..9d2fc8a 100644 --- a/testing/android/native_test/BUILD.gn +++ b/testing/android/native_test/BUILD.gn
@@ -77,6 +77,7 @@ } generate_jni("native_test_jni_headers") { + testonly = true sources = [ "java/src/org/chromium/native_test/MainRunner.java", "java/src/org/chromium/native_test/NativeTest.java", @@ -84,6 +85,7 @@ } generate_jni("native_browser_test_jni_headers") { + testonly = true sources = [ "java/src/org/chromium/native_test/NativeBrowserTest.java", ]
diff --git a/testing/test.gni b/testing/test.gni index 491fa35d..9fa5468 100644 --- a/testing/test.gni +++ b/testing/test.gni
@@ -15,8 +15,8 @@ if (is_fuchsia) { import("//build/config/chromecast_build.gni") + import("//build/config/fuchsia/generate_runner_scripts.gni") import("//build/config/fuchsia/package.gni") - import("//build/config/fuchsia/rules.gni") } if (is_chromeos) {
diff --git a/third_party/blink/perf_tests/display_locking/abs_pos_outer_sizes_change.html b/third_party/blink/perf_tests/display_locking/abs_pos_outer_sizes_change.html index d301f54..9b0bab9 100644 --- a/third_party/blink/perf_tests/display_locking/abs_pos_outer_sizes_change.html +++ b/third_party/blink/perf_tests/display_locking/abs_pos_outer_sizes_change.html
@@ -20,6 +20,7 @@ .container { contain: style layout; width: 200px; + content-size: 100px; } .box { background: blue; @@ -63,8 +64,8 @@ document.getElementById("node_template").content, true).firstElementChild; for (let i = 0; i < n; ++i) { const clone = specimen.cloneNode(true); - if (clone.displayLock && i > 0) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + if (i > 0) + clone.renderSubtree = "invisible"; document.body.appendChild(clone); } }
diff --git a/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html b/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html index 25972c65..b4cd59a 100644 --- a/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html +++ b/third_party/blink/perf_tests/display_locking/forced_layout_on_locked_el.html
@@ -24,7 +24,7 @@ </head> <body> <template id="template"> -<div class="box"> +<div class="box" rendersubtree="invisible"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ante dui, posuere at pretium suscipit, condimentum at augue. </div> @@ -43,9 +43,6 @@ for (let i = 0; i < NUMBER_OF_ELEMENTS; ++i) { const clone = template.content.cloneNode(true).firstElementChild; clone.id = "box" + i; - if (clone.displayLock) { - clone.displayLock.acquire({ timeout: Infinity, size: [10, 10] }); - } container.appendChild(clone); } container.offsetTop;
diff --git a/third_party/blink/perf_tests/display_locking/inner_sizes_change.html b/third_party/blink/perf_tests/display_locking/inner_sizes_change.html index 86579fc5..bf23b0e 100644 --- a/third_party/blink/perf_tests/display_locking/inner_sizes_change.html +++ b/third_party/blink/perf_tests/display_locking/inner_sizes_change.html
@@ -17,6 +17,7 @@ .container { contain: style layout; width: 200px; + content-size: 100px; } .box { background: blue; @@ -49,8 +50,8 @@ document.getElementById("node_template").content, true).firstElementChild; for (let i = 0; i < n; ++i) { const clone = specimen.cloneNode(true); - if (clone.displayLock && i > 0) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + if (i > 0) + clone.renderSubtree = "invisible"; document.body.appendChild(clone); } }
diff --git a/third_party/blink/perf_tests/display_locking/outer_sizes_change.html b/third_party/blink/perf_tests/display_locking/outer_sizes_change.html index 5d0d7a4..58c1f17 100644 --- a/third_party/blink/perf_tests/display_locking/outer_sizes_change.html +++ b/third_party/blink/perf_tests/display_locking/outer_sizes_change.html
@@ -16,6 +16,7 @@ .container { contain: style layout; width: 200px; + content-size: 100px; } .box { background: blue; @@ -48,8 +49,8 @@ document.getElementById("node_template").content, true).firstElementChild; for (let i = 0; i < n; ++i) { const clone = specimen.cloneNode(true); - if (clone.displayLock && i > 0) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + if (i > 0) + clone.renderSubtree = "invisible"; document.body.appendChild(clone); } }
diff --git a/third_party/blink/perf_tests/display_locking/outer_sizes_change_activatable.html b/third_party/blink/perf_tests/display_locking/outer_sizes_change_activatable.html new file mode 100644 index 0000000..ddeeac4 --- /dev/null +++ b/third_party/blink/perf_tests/display_locking/outer_sizes_change_activatable.html
@@ -0,0 +1,88 @@ +<!doctype HTML> + +<!-- +This test appends 30,000 items to the page, locking all of them with the +activatable flag on. It then changes the style of all the locked elements, +causing self-layout for all of them. + +The test works with and without display locking. If display locking is not +enabled, then none of the elements are locked and the performance should +be noticeably worse. +--> + +<head> +<script src="../resources/runner.js"></script> +<style> +.container { + contain: style layout; + width: 200px; + content-size: 100px; +} +.box { + background: blue; + overflow: hidden; + width: 100px; + height: 100px; +} +</style> +</head> + +<body> +<!-- node template from which to construct items --> +<template id="node_template"> +<div class="container" rendersubtree="invisible activatable"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Quisque ante dui, posuere at pretium suscipit, condimentum at augue. + <div class="box"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Quisque ante dui, posuere at pretium suscipit, condimentum at augue. + </div> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Quisque ante dui, posuere at pretium suscipit, condimentum at augue. +</div> +</template> +</body> + +<script> +function construct(n) { + const specimen = document.importNode( + document.getElementById("node_template").content, true).firstElementChild; + for (let i = 0; i < n; ++i) + document.body.appendChild(specimen.cloneNode(true)); +} + +let sizes = ["200px", "250px"]; +let size_index = 0; +function changeStyle() { + document.styleSheets[0].rules[0].style.width = sizes[size_index]; + size_index = 1 - size_index; +} + +let testDone = false; +let startTime; +function runTest() { + if (startTime) { + PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime); + PerfTestRunner.addRunTestEndMarker(); + } + if (testDone) + return; + + startTime = PerfTestRunner.now(); + PerfTestRunner.addRunTestEndMarker(); + + changeStyle(); + requestAnimationFrame(runTest); +} + +construct(30000); + +PerfTestRunner.startMeasureValuesAsync({ + unit: 'ms', + done: () => { testDone = true; }, + run: runTest, + warmUpCount: 3, + iterationCount: 5 +}); + +</script>
diff --git a/third_party/blink/perf_tests/display_locking/outer_sizes_change_iframe.html b/third_party/blink/perf_tests/display_locking/outer_sizes_change_iframe.html index b54a219..7e7d1dfe 100644 --- a/third_party/blink/perf_tests/display_locking/outer_sizes_change_iframe.html +++ b/third_party/blink/perf_tests/display_locking/outer_sizes_change_iframe.html
@@ -71,8 +71,8 @@ document.getElementById("node_template").content, true).firstElementChild; for (let i = 0; i < n; ++i) { const clone = specimen.cloneNode(true); - if (clone.displayLock && i > 0) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + if (i > 0) + clone.renderSubtree = "invisible"; document.body.appendChild(clone); } }
diff --git a/third_party/blink/perf_tests/display_locking/unlock_top_items.html b/third_party/blink/perf_tests/display_locking/unlock_top_items.html index a62ffd5..76872b9e 100644 --- a/third_party/blink/perf_tests/display_locking/unlock_top_items.html +++ b/third_party/blink/perf_tests/display_locking/unlock_top_items.html
@@ -13,6 +13,7 @@ <style> .container { contain: style layout; + content-size: 100px; } .box { background: blue; @@ -46,8 +47,7 @@ for (let i = 0; i < n; ++i) { const clone = specimen.cloneNode(true); clone.id = "id" + i; - if (clone.displayLock) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + clone.renderSubtree = "invisible"; document.body.appendChild(clone); } } @@ -56,8 +56,7 @@ function commitNextLock() { const element = document.getElementById("id" + nextId); ++nextId; - if (element.displayLock) - element.displayLock.commit(); + element.renderSubtree = ""; } let testDone = false;
diff --git a/third_party/blink/perf_tests/display_locking/unlock_top_items_nested.html b/third_party/blink/perf_tests/display_locking/unlock_top_items_nested.html index 797c7de9..7512299 100644 --- a/third_party/blink/perf_tests/display_locking/unlock_top_items_nested.html +++ b/third_party/blink/perf_tests/display_locking/unlock_top_items_nested.html
@@ -37,6 +37,12 @@ .container { contain: style layout; } +.small { + content-size: 100px; +} +.large { + content-size: 100px 100000px; +} .box { background: blue; overflow: hidden; @@ -70,15 +76,15 @@ for (let i = 0; i < n; ++i) { if ((i % 1000) == 0) { currentContainer = document.createElement("div"); - currentContainer.classList = "container"; - if (i > 0 && currentContainer.displayLock) - currentContainer.displayLock.acquire({ timeout: Infinity, size: [100, 100000] }); + currentContainer.classList = "container large"; + if (i > 0) + currentContainer.renderSubtree = "invisible"; document.body.appendChild(currentContainer); } const clone = specimen.cloneNode(true); clone.id = "id" + i; - if (clone.displayLock) - clone.displayLock.acquire({ timeout: Infinity, size: [100, 100] }); + clone.classList = "container small"; + clone.renderSubtree = "invisible"; currentContainer.appendChild(clone); } } @@ -87,8 +93,7 @@ function commitNextLock() { const element = document.getElementById("id" + nextId); ++nextId; - if (element.displayLock) - element.displayLock.commit(); + element.renderSubtree = ""; } let testDone = false;
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h index 287c5c5b..08598ad 100644 --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -189,6 +189,7 @@ BLINK_PLATFORM_EXPORT static void EnableWebVR(bool); BLINK_PLATFORM_EXPORT static void EnableWebXR(bool); BLINK_PLATFORM_EXPORT static void EnableWebXRARModule(bool); + BLINK_PLATFORM_EXPORT static void EnableWebXRARDOMOverlay(bool); BLINK_PLATFORM_EXPORT static void EnableWebXRAnchors(bool); BLINK_PLATFORM_EXPORT static void EnableWebXRHitTest(bool); BLINK_PLATFORM_EXPORT static void EnableWebXRPlaneDetection(bool); @@ -235,8 +236,6 @@ BLINK_PLATFORM_EXPORT static void EnableSkipTouchEventFilter(bool); BLINK_PLATFORM_EXPORT static void EnableSmsReceiver(bool); BLINK_PLATFORM_EXPORT static void EnableDisplayLocking(bool); - BLINK_PLATFORM_EXPORT static void - EnablePauseExecutionContextOnBackgroundFreeze(bool); BLINK_PLATFORM_EXPORT static void EnableConsolidatedMovementXY(bool); BLINK_PLATFORM_EXPORT static void EnableMouseSubframeNoImplicitCapture(bool); BLINK_PLATFORM_EXPORT static void EnableBackForwardCache(bool);
diff --git a/third_party/blink/renderer/bindings/core/v8/trace_wrapper_v8_reference_test.cc b/third_party/blink/renderer/bindings/core/v8/trace_wrapper_v8_reference_test.cc index fd91a6be..d8425c4 100644 --- a/third_party/blink/renderer/bindings/core/v8/trace_wrapper_v8_reference_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/trace_wrapper_v8_reference_test.cc
@@ -14,7 +14,7 @@ using TraceWrapperV8ReferenceTest = BindingTestSupportingGC; -class TraceWrapperV8ReferenceHolder +class TraceWrapperV8ReferenceHolder final : public GarbageCollected<TraceWrapperV8ReferenceHolder> { public: TraceWrapperV8ReferenceHolder() = default;
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc index e441087e..bad20600 100644 --- a/third_party/blink/renderer/core/css/css_selector.cc +++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -291,6 +291,7 @@ case kPseudoSlotted: case kPseudoVideoPersistent: case kPseudoVideoPersistentAncestor: + case kPseudoXrImmersiveDomOverlay: return kPseudoIdNone; } @@ -323,6 +324,8 @@ {"-internal-video-persistent", CSSSelector::kPseudoVideoPersistent}, {"-internal-video-persistent-ancestor", CSSSelector::kPseudoVideoPersistentAncestor}, + {"-internal-xr-immersive-dom-overlay", + CSSSelector::kPseudoXrImmersiveDomOverlay}, {"-webkit-any-link", CSSSelector::kPseudoWebkitAnyLink}, {"-webkit-autofill", CSSSelector::kPseudoAutofill}, {"-webkit-drag", CSSSelector::kPseudoDrag}, @@ -578,6 +581,7 @@ case kPseudoSpatialNavigationInterest: case kPseudoVideoPersistent: case kPseudoVideoPersistentAncestor: + case kPseudoXrImmersiveDomOverlay: if (mode != kUASheetMode) { pseudo_type_ = kPseudoUnknown; break;
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h index 7729ab8..2c4492b 100644 --- a/third_party/blink/renderer/core/css/css_selector.h +++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -250,6 +250,7 @@ kPseudoSlotted, kPseudoVideoPersistent, kPseudoVideoPersistentAncestor, + kPseudoXrImmersiveDomOverlay, }; enum AttributeMatchType {
diff --git a/third_party/blink/renderer/core/css/fullscreen.css b/third_party/blink/renderer/core/css/fullscreen.css index a0982ca..7ed4f77 100644 --- a/third_party/blink/renderer/core/css/fullscreen.css +++ b/third_party/blink/renderer/core/css/fullscreen.css
@@ -65,3 +65,10 @@ background-color: black !important; z-index: 2147483647 !important; } + +/* WebXR DOM Overlay for handheld AR needs a transparent background for both the + fullscreened element and its backdrop. */ +:-internal-xr-immersive-dom-overlay :fullscreen, +:-internal-xr-immersive-dom-overlay :fullscreen::backdrop { + background-color: rgba(0,0,0,0) !important; +}
diff --git a/third_party/blink/renderer/core/css/parser/css_proto_converter.cc b/third_party/blink/renderer/core/css/parser/css_proto_converter.cc index 6936279..68a9bbd 100644 --- a/third_party/blink/renderer/core/css/parser/css_proto_converter.cc +++ b/third_party/blink/renderer/core/css/parser/css_proto_converter.cc
@@ -37,6 +37,7 @@ "-internal-spatial-navigation-focus", "-internal-video-persistent", "-internal-video-persistent-ancestor", + "-internal-xr-immersive-dom-overlay", "-webkit-any-link", "-webkit-autofill", "-webkit-drag",
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc index 0de92743f..5139f78 100644 --- a/third_party/blink/renderer/core/css/rule_feature_set.cc +++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -168,6 +168,7 @@ case CSSSelector::kPseudoSlotted: case CSSSelector::kPseudoVideoPersistent: case CSSSelector::kPseudoVideoPersistentAncestor: + case CSSSelector::kPseudoXrImmersiveDomOverlay: return true; case CSSSelector::kPseudoIs: case CSSSelector::kPseudoWhere: @@ -548,6 +549,7 @@ case CSSSelector::kPseudoDefined: case CSSSelector::kPseudoVideoPersistent: case CSSSelector::kPseudoVideoPersistentAncestor: + case CSSSelector::kPseudoXrImmersiveDomOverlay: case CSSSelector::kPseudoSpatialNavigationInterest: return &EnsurePseudoInvalidationSet(selector.GetPseudoType(), type, position);
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc index cbb437c..abd7049 100644 --- a/third_party/blink/renderer/core/css/selector_checker.cc +++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1046,6 +1046,11 @@ case CSSSelector::kPseudoVideoPersistentAncestor: DCHECK(is_ua_rule_); return element.ContainsPersistentVideo(); + case CSSSelector::kPseudoXrImmersiveDomOverlay: + DCHECK(is_ua_rule_); + // In immersive AR overlay mode, apply a pseudostyle to the root element. + return element.GetDocument().IsImmersiveArOverlay() && + element == element.GetDocument().documentElement(); case CSSSelector::kPseudoInRange: return element.IsInRange(); case CSSSelector::kPseudoOutOfRange:
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 381aadbb..0a082769 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -3182,6 +3182,22 @@ return; } +void Document::SetIsImmersiveArOverlay(bool val) { + if (!documentElement()) + return; + + if (val != is_immersive_ar_overlay_) { + DCHECK(RuntimeEnabledFeatures::WebXRARDOMOverlayEnabled(this)); + is_immersive_ar_overlay_ = val; + + // If the property has changed, apply the pseudo-style change to the root + // element. This will cascade further UA stylesheet changes such as setting + // the fullscreened element and its backdrop transparent. + documentElement()->PseudoStateChanged( + CSSSelector::kPseudoXrImmersiveDomOverlay); + } +} + void Document::ScheduleUseShadowTreeUpdate(SVGUseElement& element) { use_elements_needing_update_.insert(&element); ScheduleLayoutTreeUpdateIfNeeded();
diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h index 8394f74..0f76ca3 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h
@@ -474,6 +474,9 @@ bool IsViewSource() const { return is_view_source_; } void SetIsViewSource(bool); + bool IsImmersiveArOverlay() const { return is_immersive_ar_overlay_; } + void SetIsImmersiveArOverlay(bool); + bool SawElementsInKnownNamespaces() const { return saw_elements_in_known_namespaces_; } @@ -1975,6 +1978,7 @@ DocumentClassFlags document_classes_; bool is_view_source_; + bool is_immersive_ar_overlay_; bool saw_elements_in_known_namespaces_; bool is_srcdoc_document_; bool is_mobile_document_;
diff --git a/third_party/blink/renderer/core/frame/frame.h b/third_party/blink/renderer/core/frame/frame.h index 161fff2..b0f4e14 100644 --- a/third_party/blink/renderer/core/frame/frame.h +++ b/third_party/blink/renderer/core/frame/frame.h
@@ -88,8 +88,6 @@ void Detach(FrameDetachType); void DisconnectOwnerElement(); virtual bool ShouldClose() = 0; - virtual void DidFreeze() = 0; - virtual void DidResume() = 0; virtual void HookBackForwardCacheEviction() = 0; virtual void RemoveBackForwardCacheEviction() = 0;
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 0c69b3a..b54f526 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -482,61 +482,6 @@ Frame::DidChangeVisibilityState(); } -void LocalFrame::DidFreeze() { - DCHECK(IsAttached()); - auto* document_resource_coordinator = GetDocument()->GetResourceCoordinator(); - if (document_resource_coordinator && - !RuntimeEnabledFeatures::BackForwardCacheEnabled()) { - // TODO(yuzus): Skip this block if DidFreeze is triggered by bfcache. - - // Determine if there is a beforeunload handler by dispatching a - // beforeunload that will *not* launch a user dialog. If - // |proceed| is false then there is a non-empty beforeunload - // handler indicating potentially unsaved user state. - bool unused_did_allow_navigation = false; - bool proceed = GetDocument()->DispatchBeforeUnloadEvent( - nullptr, false /* is_reload */, unused_did_allow_navigation); - - // DispatchBeforeUnloadEvent dispatches JS events, which may detatch |this|. - if (!IsAttached()) - return; - document_resource_coordinator->SetHasNonEmptyBeforeUnload(!proceed); - } - - GetDocument()->DispatchFreezeEvent(); - // DispatchFreezeEvent dispatches JS events, which may detatch |this|. - if (!IsAttached()) - return; - // TODO(fmeawad): Move the following logic to the page once we have a - // PageResourceCoordinator in Blink. http://crbug.com/838415 - if (document_resource_coordinator) { - document_resource_coordinator->SetLifecycleState( - resource_coordinator::mojom::LifecycleState::kFrozen); - } -} - -void LocalFrame::DidResume() { - DCHECK(IsAttached()); - const base::TimeTicks resume_event_start = base::TimeTicks::Now(); - GetDocument()->DispatchEvent(*Event::Create(event_type_names::kResume)); - const base::TimeTicks resume_event_end = base::TimeTicks::Now(); - DEFINE_STATIC_LOCAL(CustomCountHistogram, resume_histogram, - ("DocumentEventTiming.ResumeDuration", 0, 10000000, 50)); - resume_histogram.CountMicroseconds(resume_event_end - resume_event_start); - - // DispatchEvent dispatchs JS events, which may detatch |this|. - if (!IsAttached()) - return; - - // TODO(fmeawad): Move the following logic to the page once we have a - // PageResourceCoordinator in Blink - if (auto* document_resource_coordinator = - GetDocument()->GetResourceCoordinator()) { - document_resource_coordinator->SetLifecycleState( - resource_coordinator::mojom::LifecycleState::kRunning); - } -} - void LocalFrame::HookBackForwardCacheEviction() { // Register a callback dispatched when JavaScript is executed on the frame. // The callback evicts the frame. If a frame is frozen by BackForwardCache, @@ -1672,6 +1617,60 @@ Loader().StopAllLoaders(); } +void LocalFrame::DispatchBeforeUnloadEventForFreeze() { + auto* document_resource_coordinator = GetDocument()->GetResourceCoordinator(); + if (document_resource_coordinator && + lifecycle_state_ == mojom::FrameLifecycleState::kRunning && + !RuntimeEnabledFeatures::BackForwardCacheEnabled()) { + // TODO(yuzus): Skip this block if DidFreeze is triggered by bfcache. + + // Determine if there is a beforeunload handler by dispatching a + // beforeunload that will *not* launch a user dialog. If + // |proceed| is false then there is a non-empty beforeunload + // handler indicating potentially unsaved user state. + bool unused_did_allow_navigation = false; + bool proceed = GetDocument()->DispatchBeforeUnloadEvent( + nullptr, false /* is_reload */, unused_did_allow_navigation); + + // DispatchBeforeUnloadEvent dispatches JS events, which may detach |this|. + if (!IsAttached()) + return; + document_resource_coordinator->SetHasNonEmptyBeforeUnload(!proceed); + } +} + +void LocalFrame::DidFreeze() { + DCHECK(IsAttached()); + GetDocument()->DispatchFreezeEvent(); + // DispatchFreezeEvent dispatches JS events, which may detach |this|. + if (!IsAttached()) + return; + // TODO(fmeawad): Move the following logic to the page once we have a + // PageResourceCoordinator in Blink. http://crbug.com/838415 + if (auto* document_resource_coordinator = + GetDocument()->GetResourceCoordinator()) { + document_resource_coordinator->SetLifecycleState( + resource_coordinator::mojom::LifecycleState::kFrozen); + } +} + +void LocalFrame::DidResume() { + DCHECK(IsAttached()); + const base::TimeTicks resume_event_start = base::TimeTicks::Now(); + GetDocument()->DispatchEvent(*Event::Create(event_type_names::kResume)); + const base::TimeTicks resume_event_end = base::TimeTicks::Now(); + DEFINE_STATIC_LOCAL(CustomCountHistogram, resume_histogram, + ("DocumentEventTiming.ResumeDuration", 0, 10000000, 50)); + resume_histogram.CountMicroseconds(resume_event_end - resume_event_start); + // TODO(fmeawad): Move the following logic to the page once we have a + // PageResourceCoordinator in Blink + if (auto* document_resource_coordinator = + GetDocument()->GetResourceCoordinator()) { + document_resource_coordinator->SetLifecycleState( + resource_coordinator::mojom::LifecycleState::kRunning); + } +} + void LocalFrame::PauseContext() { GetDocument()->Fetcher()->SetDefersLoading(true); GetDocument()->SetLifecycleState(lifecycle_state_); @@ -1724,7 +1723,7 @@ if (freeze) { if (lifecycle_state_ != mojom::FrameLifecycleState::kPaused) { DidFreeze(); - // DidFreeze can dispatch JS events, which may detatch |this|. + // DidFreeze can dispatch JS events, which may detach |this|. if (!IsAttached()) return; } @@ -1733,7 +1732,7 @@ UnpauseContext(); if (old_state != mojom::FrameLifecycleState::kPaused) { DidResume(); - // DidResume can dispatch JS events, which may detatch |this|. + // DidResume can dispatch JS events, which may detach |this|. if (!IsAttached()) return; }
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h index 0e571be..cbb431f 100644 --- a/third_party/blink/renderer/core/frame/local_frame.h +++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -140,8 +140,6 @@ bool DetachDocument() override; void CheckCompleted() override; void DidChangeVisibilityState() override; - void DidFreeze() override; - void DidResume() override; void HookBackForwardCacheEviction() override; void RemoveBackForwardCacheEviction() override; // This sets the is_inert_ flag and also recurses through this frame's @@ -272,6 +270,7 @@ void RemoveSpellingMarkersUnderWords(const Vector<String>& words); bool ShouldThrottleRendering() const; + void DispatchBeforeUnloadEventForFreeze(); // Returns frame scheduler for this frame. // FrameScheduler is destroyed during frame detach and nullptr will be @@ -497,6 +496,8 @@ void SetFrameColorOverlay(SkColor color); + void DidFreeze(); + void DidResume(); void PauseContext(); void UnpauseContext();
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index d6a67da6..937308fd 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -1937,6 +1937,17 @@ // backdrop. if (Document* doc = frame_->GetDocument()) { if (Element* element = Fullscreen::FullscreenElementFrom(*doc)) { + if (doc->IsImmersiveArOverlay()) { + // Use the fullscreened element's background directly. Don't bother + // blending with the backdrop since that's transparent. + if (LayoutObject* layout_object = element->GetLayoutObject()) { + return layout_object->ResolveColor(GetCSSPropertyBackgroundColor()); + } + if (LayoutObject* layout_object = + element->PseudoElementLayoutObject(kPseudoIdBackdrop)) { + return layout_object->ResolveColor(GetCSSPropertyBackgroundColor()); + } + } if (LayoutObject* layout_object = element->PseudoElementLayoutObject(kPseudoIdBackdrop)) { return result.Blend(
diff --git a/third_party/blink/renderer/core/frame/remote_frame.cc b/third_party/blink/renderer/core/frame/remote_frame.cc index 39e1716..3ed7f51 100644 --- a/third_party/blink/renderer/core/frame/remote_frame.cc +++ b/third_party/blink/renderer/core/frame/remote_frame.cc
@@ -168,14 +168,6 @@ return true; } -void RemoteFrame::DidFreeze() { - // TODO(fmeawad): Add support for remote frames. -} - -void RemoteFrame::DidResume() { - // TODO(fmeawad): Add support for remote frames. -} - void RemoteFrame::SetIsInert(bool inert) { if (inert != is_inert_) Client()->SetIsInert(inert);
diff --git a/third_party/blink/renderer/core/frame/remote_frame.h b/third_party/blink/renderer/core/frame/remote_frame.h index c124278..45851ef8 100644 --- a/third_party/blink/renderer/core/frame/remote_frame.h +++ b/third_party/blink/renderer/core/frame/remote_frame.h
@@ -39,8 +39,6 @@ bool DetachDocument() override; void CheckCompleted() override; bool ShouldClose() override; - void DidFreeze() override; - void DidResume() override; void HookBackForwardCacheEviction() override {} void RemoveBackForwardCacheEviction() override {} void SetIsInert(bool) override;
diff --git a/third_party/blink/renderer/core/fullscreen/fullscreen.cc b/third_party/blink/renderer/core/fullscreen/fullscreen.cc index 1ad5cbc2..d15f8707 100644 --- a/third_party/blink/renderer/core/fullscreen/fullscreen.cc +++ b/third_party/blink/renderer/core/fullscreen/fullscreen.cc
@@ -46,6 +46,7 @@ #include "third_party/blink/renderer/core/frame/visual_viewport.h" #include "third_party/blink/renderer/core/fullscreen/fullscreen_options.h" #include "third_party/blink/renderer/core/fullscreen/scoped_allow_fullscreen.h" +#include "third_party/blink/renderer/core/html/html_body_element.h" #include "third_party/blink/renderer/core/html/html_iframe_element.h" #include "third_party/blink/renderer/core/html_element_type_helpers.h" #include "third_party/blink/renderer/core/input/event_handler.h" @@ -238,6 +239,19 @@ return true; } + if (document.IsImmersiveArOverlay()) { + // This is a workaround for lack of a user activation when an immersive-ar + // session is starting. If the app sets an element fullscreen in the "Enter + // AR" button click, that gets unfullscreened when the browser shows its AR + // session consent prompt. By the time the session starts, the 5-second + // timer for the initial user activation is likely to have expired. This + // also allows switching the active fullscreen element during the session. + // Note that exiting the immersive-ar session does FullyExitFullscreen to + // ensure a consistent post-session state. + DVLOG(1) << __func__ << ": allowing fullscreen immersive-ar DOM overlay"; + return true; + } + String message = ExceptionMessages::FailedToExecute( "requestFullscreen", "Element", "API can only be initiated by a user gesture.");
diff --git a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc index df4da61..27c534a 100644 --- a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc +++ b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
@@ -343,6 +343,7 @@ DEFINE_STRING_MAPPING(PseudoHostHasAppearance) DEFINE_STRING_MAPPING(PseudoVideoPersistent) DEFINE_STRING_MAPPING(PseudoVideoPersistentAncestor) + DEFINE_STRING_MAPPING(PseudoXrImmersiveDomOverlay) #undef DEFINE_STRING_MAPPING }
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc index 961f989..d1567c7 100644 --- a/third_party/blink/renderer/core/layout/layout_block.cc +++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -308,7 +308,8 @@ // Insert the child into the anonymous block box instead of here. if (new_child->IsInline() || (new_child->IsFloatingOrOutOfFlowPositioned() && - !IsFlexibleBoxIncludingNG() && !IsLayoutGrid()) || + (StyleRef().IsDeprecatedFlexboxUsingFlexLayout() || + (!IsFlexibleBoxIncludingNG() && !IsLayoutGrid()))) || before_descendant->Parent()->SlowFirstChild() != before_descendant) { before_descendant_container->AddChild(new_child, before_descendant); } else { @@ -350,7 +351,8 @@ if (new_child->IsInline() || (new_child->IsFloatingOrOutOfFlowPositioned() && - !IsFlexibleBoxIncludingNG() && !IsLayoutGrid())) { + (StyleRef().IsDeprecatedFlexboxUsingFlexLayout() || + (!IsFlexibleBoxIncludingNG() && !IsLayoutGrid())))) { // If we're inserting an inline child but all of our children are blocks, // then we have to make sure it is put into an anomyous block box. We try to // use an existing anonymous box if possible, otherwise a new one is created
diff --git a/third_party/blink/renderer/core/layout/layout_flexible_box.cc b/third_party/blink/renderer/core/layout/layout_flexible_box.cc index ecbf895..aa5f1aa 100644 --- a/third_party/blink/renderer/core/layout/layout_flexible_box.cc +++ b/third_party/blink/renderer/core/layout/layout_flexible_box.cc
@@ -46,6 +46,7 @@ #include "third_party/blink/renderer/core/style/computed_style.h" #include "third_party/blink/renderer/platform/geometry/length_functions.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" namespace blink { @@ -273,8 +274,10 @@ } void LayoutFlexibleBox::RemoveChild(LayoutObject* child) { - if (!DocumentBeingDestroyed()) + if (!DocumentBeingDestroyed() && + !StyleRef().IsDeprecatedFlexboxUsingFlexLayout()) { MergeAnonymousFlexItems(child); + } LayoutBlock::RemoveChild(child); intrinsic_size_along_main_axis_.erase(child);
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index bfd2a36..c97dac4 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -255,11 +255,8 @@ return LayoutObjectFactory::CreateTableCaption(*element, style, legacy); case EDisplay::kWebkitBox: case EDisplay::kWebkitInlineBox: - if (RuntimeEnabledFeatures::WebkitBoxLayoutUsesFlexLayoutEnabled() && - (!style.HasLineClamp() || - style.BoxOrient() == EBoxOrient::kHorizontal)) { + if (style.IsDeprecatedFlexboxUsingFlexLayout()) return new LayoutFlexibleBox(element); - } return new LayoutDeprecatedFlexibleBox(*element); case EDisplay::kFlex: case EDisplay::kInlineFlex:
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h index 7a453e3..7fc614b 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_physical_line_box_fragment.h
@@ -57,9 +57,9 @@ NGLineHeightMetrics BaselineMetrics(FontBaseline) const; // Scrollable overflow. including contents, in the local coordinate. - // ScrollableOverflow is not precomputed/cached because it cannot be computed - // when LineBox is generated because it needs container dimensions to - // resolve relative position of its children. + // |ScrollableOverflow| is not precomputed/cached because it cannot be + // computed when LineBox is generated because it needs container dimensions + // to resolve relative position of its children. PhysicalRect ScrollableOverflow(const LayoutObject* container, const ComputedStyle* container_style, PhysicalSize container_physical_size) const;
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc index 5561379..4f49e5f3 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc
@@ -107,12 +107,13 @@ if (physical_fragment->Children().empty()) return; - LayoutUnit border_inline_start = - LayoutUnit(Base::StyleRef().BorderStartWidth()); - LayoutUnit border_block_start = - LayoutUnit(Base::StyleRef().BorderBeforeWidth()); - WritingMode writing_mode = Base::StyleRef().GetWritingMode(); - TextDirection direction = Base::StyleRef().Direction(); + const ComputedStyle& style = Base::StyleRef(); + const WritingMode writing_mode = style.GetWritingMode(); + const TextDirection direction = style.Direction(); + const LayoutUnit border_inline_start = LayoutUnit(style.BorderStartWidth()); + const LayoutUnit border_block_start = LayoutUnit(style.BorderBeforeWidth()); + const PhysicalSize& size = physical_fragment->Size(); + // End and under padding are added to scroll overflow of inline children. // https://github.com/w3c/csswg-drafts/issues/129 base::Optional<NGPhysicalBoxStrut> padding_strut; @@ -121,17 +122,17 @@ Base::PaddingUnder()) .ConvertToPhysical(writing_mode, direction); } + // Rectangles not reachable by scroll should not be added to overflow. - auto IsRectReachableByScroll = - [&border_inline_start, &border_block_start, &writing_mode, &direction, - &physical_fragment](const PhysicalRect& rect) { - LogicalOffset rect_logical_end = - rect.offset.ConvertToLogical(writing_mode, direction, - physical_fragment->Size(), rect.size) + - rect.size.ConvertToLogical(writing_mode); - return (rect_logical_end.inline_offset > border_inline_start && - rect_logical_end.block_offset > border_block_start); - }; + auto IsRectReachableByScroll = [&border_inline_start, &border_block_start, + &writing_mode, &direction, + &size](const PhysicalRect& rect) { + LogicalOffset rect_logical_end = + rect.offset.ConvertToLogical(writing_mode, direction, size, rect.size) + + rect.size.ConvertToLogical(writing_mode); + return (rect_logical_end.inline_offset > border_inline_start && + rect_logical_end.block_offset > border_block_start); + }; bool children_inline = Base::ChildrenInline(); PhysicalRect children_overflow; @@ -146,11 +147,13 @@ PhysicalRect child_scrollable_overflow; if (child->IsFloatingOrOutOfFlowPositioned()) { child_scrollable_overflow = child->ScrollableOverflowForPropagation(this); + child_scrollable_overflow.offset += + ComputeRelativeOffset(child->Style(), writing_mode, direction, size); } else if (children_inline && child->IsLineBox()) { DCHECK(child->IsLineBox()); child_scrollable_overflow = - To<NGPhysicalLineBoxFragment>(*child).ScrollableOverflow( - this, Base::Style(), physical_fragment->Size()); + To<NGPhysicalLineBoxFragment>(*child).ScrollableOverflow(this, &style, + size); if (padding_strut) { PhysicalRect linebox_rect(child.Offset(), child->Size()); if (lineboxes_enclosing_rect) @@ -173,8 +176,8 @@ } // LayoutOverflow takes flipped blocks coordinates, adjust as needed. - LayoutRect children_flipped_overflow = children_overflow.ToLayoutFlippedRect( - physical_fragment->Style(), physical_fragment->Size()); + LayoutRect children_flipped_overflow = + children_overflow.ToLayoutFlippedRect(style, size); Base::AddLayoutOverflow(children_flipped_overflow); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h index 3daecb27..19c743c 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -220,6 +220,7 @@ PhysicalRect ScrollableOverflow() const; // ScrollableOverflow(), with transforms applied wrt container if needed. + // This does not include any offsets from the parent (including relpos). PhysicalRect ScrollableOverflowForPropagation( const LayoutObject* container) const;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h index 8dc07e6..5c2ce9d5 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h +++ b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h
@@ -14,9 +14,9 @@ class ComputedStyle; struct PhysicalOffset; -// Implements relative positioning spec: +// Implements the relative positioning spec: // https://www.w3.org/TR/css-position-3/#rel-pos -// Return relative position offset as defined by style. +// Returns the relative position offset as defined by |child_style|. CORE_EXPORT PhysicalOffset ComputeRelativeOffset(const ComputedStyle& child_style, WritingMode container_writing_mode,
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index c3257b04..35c1f53c 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -512,50 +512,27 @@ return; DCHECK_NE(state, PageLifecycleState::kUnknown); - // When background tab freezing was first shipped it didn't pause - // the execution context but froze the frame scheduler. This feature - // flag attempts to bring the two mechanisms to use the same path for - // all pausing and freezing. - // This allows for mojo channels, workers to also be frozen because - // they listen for the page execution context being paused/frozen. - if (RuntimeEnabledFeatures:: - PauseExecutionContextOnBackgroundFreezeEnabled()) { - base::Optional<mojom::FrameLifecycleState> next_state; - if (state == PageLifecycleState::kFrozen) { - next_state = mojom::FrameLifecycleState::kFrozen; - } else if (page_lifecycle_state_ == PageLifecycleState::kFrozen) { - // TODO(fmeawad): Only resume the page that just became visible, blocked - // on task queues per frame. - DCHECK(state == PageLifecycleState::kActive || - state == PageLifecycleState::kHiddenBackgrounded || - state == PageLifecycleState::kHiddenForegrounded); - next_state = mojom::FrameLifecycleState::kRunning; - } + base::Optional<mojom::FrameLifecycleState> next_state; + if (state == PageLifecycleState::kFrozen) { + next_state = mojom::FrameLifecycleState::kFrozen; + } else if (page_lifecycle_state_ == PageLifecycleState::kFrozen) { + // TODO(fmeawad): Only resume the page that just became visible, blocked + // on task queues per frame. + DCHECK(state == PageLifecycleState::kActive || + state == PageLifecycleState::kHiddenBackgrounded || + state == PageLifecycleState::kHiddenForegrounded); + next_state = mojom::FrameLifecycleState::kRunning; + } - if (next_state) { - for (Frame* frame = main_frame_.Get(); frame; - frame = frame->Tree().TraverseNext()) { - if (auto* local_frame = DynamicTo<LocalFrame>(frame)) - local_frame->SetLifecycleState(next_state.value()); - } - } - } else { - // The following code will dispatch the freeze/resume events, - // freeze the frame scheduler but but not pause the execution context. - if (state == PageLifecycleState::kFrozen) { - for (Frame* frame = main_frame_.Get(); frame; - frame = frame->Tree().TraverseNext()) { - frame->DidFreeze(); - } - } else if (page_lifecycle_state_ == PageLifecycleState::kFrozen) { - // TODO(fmeawad): Only resume the page that just became visible, blocked - // on task queues per frame. - DCHECK(state == PageLifecycleState::kActive || - state == PageLifecycleState::kHiddenBackgrounded || - state == PageLifecycleState::kHiddenForegrounded); - for (Frame* frame = main_frame_.Get(); frame; - frame = frame->Tree().TraverseNext()) { - frame->DidResume(); + if (next_state) { + for (Frame* frame = main_frame_.Get(); frame; + frame = frame->Tree().TraverseNext()) { + if (auto* local_frame = DynamicTo<LocalFrame>(frame)) { + // TODO(chrisha): Determine if dispatching the before unload + // makes sense and if so put it into a specification. + if (next_state == mojom::FrameLifecycleState::kFrozen) + local_frame->DispatchBeforeUnloadEventForFreeze(); + local_frame->SetLifecycleState(next_state.value()); } } }
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index 84b5d96..0e99d9f 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -1203,6 +1203,11 @@ return Display() == EDisplay::kWebkitBox || Display() == EDisplay::kWebkitInlineBox; } + bool IsDeprecatedFlexboxUsingFlexLayout() const { + return IsDeprecatedWebkitBox() && + RuntimeEnabledFeatures::WebkitBoxLayoutUsesFlexLayoutEnabled() && + (!HasLineClamp() || BoxOrient() == EBoxOrient::kHorizontal); + } // Variables. bool HasVariables() const; @@ -2091,7 +2096,6 @@ bool IsDisplayFlexibleOrGridBox() const { return IsDisplayFlexibleBox(Display()) || IsDisplayGridBox(Display()); } - bool IsDisplayFlexibleBox() const { return IsDisplayFlexibleBox(Display()); } bool IsDisplayLayoutCustomBox() const { return IsDisplayLayoutCustomBox(Display()); }
diff --git a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc index 19f1709..0019776 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc +++ b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
@@ -31,6 +31,19 @@ namespace blink { +namespace { + +struct PriorityCompare { + PriorityCompare(SMILTime elapsed) : elapsed_(elapsed) {} + bool operator()(const Member<SVGSMILElement>& a, + const Member<SVGSMILElement>& b) { + return b->IsHigherPriorityThan(a, elapsed_); + } + SMILTime elapsed_; +}; + +} // namespace + SMILAnimationSandwich::SMILAnimationSandwich() = default; void SMILAnimationSandwich::Schedule(SVGSMILElement* animation) {
diff --git a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h index e56138e..08a938a 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h +++ b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h
@@ -33,21 +33,6 @@ namespace blink { -struct PriorityCompare { - PriorityCompare(SMILTime elapsed) : elapsed_(elapsed) {} - bool operator()(const Member<SVGSMILElement>& a, - const Member<SVGSMILElement>& b) { - // FIXME: This should also consider possible timing relations between the - // elements. - SMILTime a_begin = a->BeginTimeForPrioritization(elapsed_); - SMILTime b_begin = b->BeginTimeForPrioritization(elapsed_); - if (a_begin == b_begin) - return a->DocumentOrderIndex() < b->DocumentOrderIndex(); - return a_begin < b_begin; - } - SMILTime elapsed_; -}; - // This class implements/helps with implementing the "sandwich model" from SMIL. // https://www.w3.org/TR/SMIL3/smil-animation.html#animationNS-AnimationSandwichModel //
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc index 74526da..ee62347 100644 --- a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc +++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
@@ -524,8 +524,13 @@ // Everything bellow handles "discard" elements. UseCounter::Count(&GetDocument(), WebFeature::kSVGSMILAnimationAppliedEffect); - std::sort(animations_to_apply.begin(), animations_to_apply.end(), - PriorityCompare(elapsed)); + // Sort by location in the document. (Should be based on the target rather + // than the timed element, but often enough they will order the same.) + std::sort( + animations_to_apply.begin(), animations_to_apply.end(), + [](const Member<SVGSMILElement>& a, const Member<SVGSMILElement>& b) { + return a->DocumentOrderIndex() < b->DocumentOrderIndex(); + }); for (const auto& timed_element : animations_to_apply) { if (timed_element->isConnected() && timed_element->IsSVGDiscardElement()) {
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc index a621924..e2ef7946 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
@@ -605,6 +605,17 @@ return interval_.begin; } +bool SVGSMILElement::IsHigherPriorityThan(const SVGSMILElement* other, + SMILTime presentation_time) const { + // FIXME: This should also consider possible timing relations between the + // elements. + SMILTime this_begin = BeginTimeForPrioritization(presentation_time); + SMILTime other_begin = other->BeginTimeForPrioritization(presentation_time); + if (this_begin == other_begin) + return DocumentOrderIndex() > other->DocumentOrderIndex(); + return this_begin > other_begin; +} + SMILTime SVGSMILElement::Dur() const { if (cached_dur_ != kInvalidCachedTime) return cached_dur_;
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h index 16b117a..92cc9e7 100644 --- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h +++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
@@ -82,12 +82,13 @@ SMILTime Elapsed() const; SMILTime IntervalBegin() const { return interval_.begin; } - SMILTime BeginTimeForPrioritization(SMILTime presentation_time) const; SMILTime SimpleDuration() const; bool CurrentIntervalIsActive(SMILTime elapsed); void UpdateInterval(SMILTime presentation_time); void UpdateActiveState(SMILTime elapsed); + bool IsHigherPriorityThan(const SVGSMILElement* other, + SMILTime presentation_time) const; SMILTime NextInterestingTime(SMILTime elapsed) const; SMILTime NextProgressTime(SMILTime elapsed) const; @@ -157,6 +158,7 @@ SMILTime FindInstanceTime(BeginOrEnd, SMILTime minimum_time, bool equals_minimum_ok) const; + SMILTime BeginTimeForPrioritization(SMILTime presentation_time) const; SMILInterval ResolveInterval(SMILTime begin_after, SMILTime end_after) const; bool ResolveFirstInterval();
diff --git a/third_party/blink/renderer/devtools/.gitignore b/third_party/blink/renderer/devtools/.gitignore index b827cf2e..c401c863 100644 --- a/third_party/blink/renderer/devtools/.gitignore +++ b/third_party/blink/renderer/devtools/.gitignore
@@ -13,7 +13,6 @@ /.dev_profile /.test_cache /release -/scripts/local_node/runtimes /scripts/visualize_deps/out /front_end/protocol_externs.js package-lock.json
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn index 6adb8df..a477297 100644 --- a/third_party/blink/renderer/devtools/BUILD.gn +++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -1714,7 +1714,7 @@ ".eslintrc.js", "front_end/", "scripts/lint_javascript.py", - "scripts/local_node.py", + "scripts/devtools_paths.py", "//testing/scripts/common.py", "//testing/scripts/run_devtools_check.py", "//testing/xvfb.py",
diff --git a/third_party/blink/renderer/devtools/PRESUBMIT.py b/third_party/blink/renderer/devtools/PRESUBMIT.py index 1ada106..5c3c6ae 100644 --- a/third_party/blink/renderer/devtools/PRESUBMIT.py +++ b/third_party/blink/renderer/devtools/PRESUBMIT.py
@@ -25,7 +25,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""DevTools JSDoc validator presubmit script +"""DevTools presubmit script See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for more details about the presubmit API built into gcl. @@ -50,7 +50,7 @@ original_sys_path = sys.path try: sys.path = sys.path + [input_api.os_path.join(input_api.PresubmitLocalPath(), "scripts")] - import local_node + import devtools_paths finally: sys.path = original_sys_path @@ -77,7 +77,7 @@ # Use eslint to autofix the braces. # Also fix semicolon to avoid confusing clang-format. - eslint_process = popen([local_node.node_path(), local_node.eslint_path(), '--config', '.eslintrc.js', '--fix'] + affected_files) + eslint_process = popen([devtools_paths.node_path(), devtools_paths.eslint_path(), '--config', '.eslintrc.js', '--fix'] + affected_files) eslint_process.communicate() # Need to run clang-format again to align the braces @@ -228,11 +228,11 @@ original_sys_path = sys.path try: sys.path = sys.path + [input_api.os_path.join(input_api.PresubmitLocalPath(), "scripts")] - import local_node + import devtools_paths finally: sys.path = original_sys_path - node_path = local_node.node_path() + node_path = devtools_paths.node_path() if script_arguments is None: script_arguments = []
diff --git a/third_party/blink/renderer/devtools/karma.conf.js b/third_party/blink/renderer/devtools/karma.conf.js index 916bf48..e31def1 100644 --- a/third_party/blink/renderer/devtools/karma.conf.js +++ b/third_party/blink/renderer/devtools/karma.conf.js
@@ -2,9 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(1011259): switch to true. +let external_devtools_frontend = false; +let node_modules_path = external_devtools_frontend + ? '' + : '../../../../third_party/devtools-node-modules/third_party/node_modules/'; + module.exports = function(config) { const options = { - basePath: "", + basePath: '', files: [{ pattern: 'front_end/**/*.js', @@ -15,33 +21,33 @@ type: 'module' }], - reporters: ["dots", "coverage-istanbul"], + reporters: ['dots', 'coverage-istanbul'], preprocessors: { './tests/**/*.ts': ['karma-typescript'], './front_end/common/*.js': ['karma-coverage-istanbul-instrumenter'] }, - browsers: ["ChromeHeadless"], + browsers: ['ChromeHeadless'], - frameworks: ["mocha", "chai", "karma-typescript"], + frameworks: ['mocha', 'chai', 'karma-typescript'], karmaTypescriptConfig: { compilerOptions: { - target: "esnext", - module: "esnext", - typeRoots: ["../../../../third_party/devtools-node-modules/third_party/node_modules/@types"] + target: 'esnext', + module: 'esnext', + typeRoots: [node_modules_path + '@types'] }, coverageOptions: { instrumentation: false }, bundlerOptions: { resolve: { - directories: ["../../../../third_party/devtools-node-modules/third_party/node_modules"] + directories: [node_modules_path] } }, exclude: [ - "scripts" + 'scripts' ] }, @@ -50,12 +56,12 @@ }, plugins: [ - "karma-chrome-launcher", - "karma-mocha", - "karma-chai", - "karma-typescript", - require('../../../../third_party/devtools-node-modules/third_party/node_modules/karma-coverage-istanbul-instrumenter'), - require('../../../../third_party/devtools-node-modules/third_party/node_modules/karma-coverage-istanbul-reporter') + 'karma-chrome-launcher', + 'karma-mocha', + 'karma-chai', + 'karma-typescript', + require(node_modules_path + 'karma-coverage-istanbul-instrumenter'), + require(node_modules_path + 'karma-coverage-istanbul-reporter') ], coverageIstanbulInstrumenter: { @@ -63,8 +69,8 @@ }, coverageIstanbulReporter: { - reports: ["text", "html"], - dir: "karma-coverage" + reports: ['text', 'html'], + dir: 'karma-coverage' }, singleRun: true
diff --git a/third_party/blink/renderer/devtools/scripts/README.md b/third_party/blink/renderer/devtools/scripts/README.md index e7ac952..183bcdf 100644 --- a/third_party/blink/renderer/devtools/scripts/README.md +++ b/third_party/blink/renderer/devtools/scripts/README.md
@@ -16,7 +16,6 @@ - gulp - experimental build process written in node.js & gulp to remove the dependency on Chromium-specific build tools (i.e. gn and ninja) - hosted_mode - run DevTools on a localhost development server - jsdoc_validator - enforces the use of Closure type annotations -- local_node - installs a local runtime of node.js ### Python Scripts - compile_frontend.py - runs closure compiler to do static type analysis @@ -30,4 +29,4 @@ ## Closure -DevTools manually rolls the closure compiler to ./closure. If you manually roll closure compiler, you will need to re-generate the closure_runner (in ./closure) and jsdoc_validator custom jars using the python scripts in their respective directory. \ No newline at end of file +DevTools manually rolls the closure compiler to ./closure. If you manually roll closure compiler, you will need to re-generate the closure_runner (in ./closure) and jsdoc_validator custom jars using the python scripts in their respective directory.
diff --git a/third_party/blink/renderer/devtools/scripts/devtools_paths.py b/third_party/blink/renderer/devtools/scripts/devtools_paths.py new file mode 100644 index 0000000..14d721c7 --- /dev/null +++ b/third_party/blink/renderer/devtools/scripts/devtools_paths.py
@@ -0,0 +1,73 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +""" +Helper to find the path to the correct third_party directory +""" + +from os import path +import sys + + +# Find the root path of the checkout. +# In the Chromium repository, this is the src/chromium directory. +# In the external repository, standalone build, this is the devtools-frontend directory. +# In the external repository, integrated build, this is the src/chromium directory. +def root_path(): + SCRIPTS_PATH = path.dirname(path.abspath(__file__)) + ABS_DEVTOOLS_PATH = path.dirname(SCRIPTS_PATH) + PARENT_PATH = path.dirname(ABS_DEVTOOLS_PATH) + # TODO(1011259): remove Chromium repository handling + if path.basename(PARENT_PATH) == 'renderer': + # Chromium repository + return path.dirname(path.dirname(path.dirname(PARENT_PATH))) + elif path.basename(PARENT_PATH) == 'third_party': + # External repository, integrated build + return path.dirname(PARENT_PATH) + else: + # External repository, standalone build + return ABS_DEVTOOLS_PATH + + +# This is the third_party path relative to the root of the checkout. +def third_party_path(): + return path.join(root_path(), 'third_party') + + +# This points to the node binary downloaded as part of the checkout. +def node_path(): + try: + old_sys_path = sys.path[:] + sys.path.append(path.join(third_party_path(), 'node')) + import node + finally: + sys.path = old_sys_path + return node.GetBinaryPath() + + +DEVTOOLS_ROOT_PATH = path.join(path.dirname(__file__), '..') + + +def node_modules_path(): + SCRIPTS_PATH = path.dirname(path.abspath(__file__)) + ABS_DEVTOOLS_PATH = path.dirname(SCRIPTS_PATH) + PARENT_PATH = path.dirname(ABS_DEVTOOLS_PATH) + # TODO(1011259): remove Chromium repository handling + if path.basename(PARENT_PATH) == 'renderer': + # While in Chromium repo, node modules are hosted in //third_party/devtools-node-modules. + return path.join(root_path(), 'third_party', 'devtools-node-modules', 'third_party', 'node_modules') + else: + # In the external repo, node modules are hosted in root. + return path.join(root_path(), 'node_modules') + + +def eslint_path(): + return path.join(node_modules_path(), 'eslint', 'bin', 'eslint.js') + + +def karma_path(): + return path.join(node_modules_path(), 'karma', 'bin', 'karma') + + +def package_json_path(): + return path.join(DEVTOOLS_ROOT_PATH, 'package.json')
diff --git a/third_party/blink/renderer/devtools/scripts/lint_javascript.py b/third_party/blink/renderer/devtools/scripts/lint_javascript.py index 4479e58..19d31cd 100755 --- a/third_party/blink/renderer/devtools/scripts/lint_javascript.py +++ b/third_party/blink/renderer/devtools/scripts/lint_javascript.py
@@ -9,7 +9,7 @@ import subprocess import sys -import local_node +import devtools_paths files_to_lint = None @@ -63,8 +63,8 @@ eslintconfig_path = path.join(devtools_path, ".eslintrc.js") eslintignore_path = path.join(devtools_path, ".eslintignore") exec_command = [ - local_node.node_path(), - local_node.eslint_path(), + devtools_paths.node_path(), + devtools_paths.eslint_path(), "--config", to_platform_path_exact(eslintconfig_path), "--ignore-path",
diff --git a/third_party/blink/renderer/devtools/scripts/local_node.py b/third_party/blink/renderer/devtools/scripts/local_node.py deleted file mode 100644 index 25a378c..0000000 --- a/third_party/blink/renderer/devtools/scripts/local_node.py +++ /dev/null
@@ -1,39 +0,0 @@ -# Copyright 2017 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -""" -Thin wrapper around the local node.js installed as part of chromium DEPS -""" - -from os import path -import sys - -SCRIPTS_PATH = path.dirname(path.abspath(__file__)) -THIRD_PARTY_PATH = path.join(SCRIPTS_PATH, '..', '..', '..', '..') -NODE_PATH = path.join(THIRD_PARTY_PATH, 'node') -ESLINT_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules', 'eslint', 'bin', 'eslint.js') -KARMA_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules', 'karma', 'bin', 'karma') -NODE_MODULES_PATH = path.join(THIRD_PARTY_PATH, 'devtools-node-modules', 'third_party', 'node_modules') - -try: - old_sys_path = sys.path[:] - sys.path.append(NODE_PATH) - import node -finally: - sys.path = old_sys_path - - -def node_path(): - return node.GetBinaryPath() - - -def eslint_path(): - return ESLINT_PATH - - -def karma_path(): - return KARMA_PATH - - -def node_modules_path(): - return NODE_MODULES_PATH
diff --git a/third_party/blink/renderer/devtools/scripts/run_tests.py b/third_party/blink/renderer/devtools/scripts/run_tests.py index 5289dcd4..6f95fb0 100755 --- a/third_party/blink/renderer/devtools/scripts/run_tests.py +++ b/third_party/blink/renderer/devtools/scripts/run_tests.py
@@ -9,7 +9,7 @@ import subprocess import sys -import local_node +import devtools_paths is_cygwin = sys.platform == "cygwin" chrome_binary = None @@ -48,9 +48,9 @@ karma_errors_found = False karmaconfig_path = os.path.join(devtools_path, "karma.conf.js") - exec_command = [local_node.node_path(), local_node.karma_path(), "start", to_platform_path_exact(karmaconfig_path)] + exec_command = [devtools_paths.node_path(), devtools_paths.karma_path(), "start", to_platform_path_exact(karmaconfig_path)] - env = {'NODE_PATH': local_node.node_modules_path()} + env = {'NODE_PATH': devtools_paths.node_modules_path()} if (chrome_binary is not None): env['CHROME_BIN'] = chrome_binary
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index 809e3b94..87d82645 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -7516,9 +7516,12 @@ } void WebGLRenderingContextBase::PrintWarningToConsole(const String& message) { - Host()->GetTopExecutionContext()->AddConsoleMessage( - ConsoleMessage::Create(mojom::ConsoleMessageSource::kRendering, - mojom::ConsoleMessageLevel::kWarning, message)); + blink::ExecutionContext* context = Host()->GetTopExecutionContext(); + if (context) { + context->AddConsoleMessage( + ConsoleMessage::Create(mojom::ConsoleMessageSource::kRendering, + mojom::ConsoleMessageLevel::kWarning, message)); + } } bool WebGLRenderingContextBase::ValidateFramebufferFuncParameters(
diff --git a/third_party/blink/renderer/modules/xr/xr.cc b/third_party/blink/renderer/modules/xr/xr.cc index e1975ebf..97cfbc7 100644 --- a/third_party/blink/renderer/modules/xr/xr.cc +++ b/third_party/blink/renderer/modules/xr/xr.cc
@@ -13,8 +13,12 @@ #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" +#include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/fullscreen/fullscreen.h" +#include "third_party/blink/renderer/core/html/html_element.h" #include "third_party/blink/renderer/core/inspector/console_message.h" +#include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/modules/event_modules.h" #include "third_party/blink/renderer/modules/event_target_modules.h" @@ -111,6 +115,7 @@ // unrecognized, returns nullopt. Based on the spec: // https://immersive-web.github.io/webxr/#feature-name base::Optional<device::mojom::XRSessionFeature> StringToXRSessionFeature( + const Document* doc, const String& feature_string) { if (feature_string == "viewer") { return device::mojom::XRSessionFeature::REF_SPACE_VIEWER; @@ -122,6 +127,9 @@ return device::mojom::XRSessionFeature::REF_SPACE_BOUNDED_FLOOR; } else if (feature_string == "unbounded") { return device::mojom::XRSessionFeature::REF_SPACE_UNBOUNDED; + } else if (RuntimeEnabledFeatures::WebXRARDOMOverlayEnabled(doc) && + feature_string == "dom-overlay-for-handheld-ar") { + return device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR; } return base::nullopt; @@ -138,6 +146,8 @@ case device::mojom::XRSessionFeature::REF_SPACE_UNBOUNDED: return mode == XRSession::kModeImmersiveVR || mode == XRSession::kModeImmersiveAR; + case device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR: + return mode == XRSession::kModeImmersiveAR; } } @@ -153,6 +163,7 @@ case device::mojom::XRSessionFeature::REF_SPACE_LOCAL_FLOOR: case device::mojom::XRSessionFeature::REF_SPACE_BOUNDED_FLOOR: case device::mojom::XRSessionFeature::REF_SPACE_UNBOUNDED: + case device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR: return doc->IsFeatureEnabled(mojom::FeaturePolicyFeature::kWebXr, ReportOptions::kReportOnFailure); } @@ -479,6 +490,44 @@ void XR::ExitPresent() { DCHECK(service_); service_->ExitPresent(); + + // If the document was potentially being shown in a DOM overlay via + // fullscreened elements, make sure to clear any fullscreen states on exiting + // the session. This avoids a race condition: + // - browser side ends session and exits fullscreen (i.e. back button) + // - renderer processes WebViewImpl::ExitFullscreen via ChromeClient + // - JS application sets a new element to fullscreen, this is allowed + // because doc->IsImmersiveArOverlay() is still true at this point + // - renderer processes XR session shutdown (this method) + // - browser re-enters fullscreen unexpectedly + LocalFrame* frame = GetFrame(); + if (!frame) + return; + + Document* doc = frame->GetDocument(); + DCHECK(doc); + if (doc->IsImmersiveArOverlay()) { + doc->SetIsImmersiveArOverlay(false); + Element* fullscreen_element = Fullscreen::FullscreenElementFrom(*doc); + if (fullscreen_element) { + // "ua_originated" means that the browser process already exited + // fullscreen. Set it to false because we need the browser process + // to get notified that it needs to exit fullscreen. Use + // FullyExitFullscreen to ensure that we return to non-fullscreen mode. + // ExitFullscreen only unfullscreens a single element, potentially + // leaving others in fullscreen mode. + constexpr bool kUaOriginated = false; + Fullscreen::FullyExitFullscreen(*doc, kUaOriginated); + } + // Restore the FrameView background color that was changed in + // OnRequestSessionReturned. + auto* frame_view = doc->GetLayoutView()->GetFrameView(); + // SetBaseBackgroundColor updates composited layer mappings. + // That DCHECKs IsAllowedToQueryCompositingState which requires + // DocumentLifecycle >= kInCompositingUpdate. + frame_view->UpdateLifecycleToCompositingInputsClean(); + frame_view->SetBaseBackgroundColor(original_base_background_color_); + } } ScriptPromise XR::supportsSession(ScriptState* script_state, @@ -664,7 +713,7 @@ for (const auto& feature : features) { String feature_string; if (feature.ToString(feature_string)) { - auto feature_enum = StringToXRSessionFeature(feature_string); + auto feature_enum = StringToXRSessionFeature(doc, feature_string); if (!feature_enum) { GetExecutionContext()->AddConsoleMessage(ConsoleMessage::Create( @@ -890,6 +939,45 @@ TaskType::kMiscPlatformAPI))); environment_provider_.set_connection_error_handler(WTF::Bind( &XR::OnEnvironmentProviderDisconnect, WrapWeakPersistent(this))); + LocalFrame* frame = GetFrame(); + DCHECK(frame); + + if (enabled_features.Contains( + device::mojom::XRSessionFeature::DOM_OVERLAY_FOR_HANDHELD_AR)) { + // The session is using DOM overlay mode. + Document* doc = frame->GetDocument(); + DCHECK(doc); + doc->SetIsImmersiveArOverlay(true); + + // Save the current base background color (restored in ExitPresent), + // and set a transparent background for the FrameView. + auto* frame_view = doc->GetLayoutView()->GetFrameView(); + // SetBaseBackgroundColor updates composited layer mappings. + // That DCHECKs IsAllowedToQueryCompositingState which requires + // DocumentLifecycle >= kInCompositingUpdate. + frame_view->UpdateLifecycleToCompositingInputsClean(); + original_base_background_color_ = frame_view->BaseBackgroundColor(); + frame_view->SetBaseBackgroundColor(Color::kTransparent); + + // In DOM overlay mode, entering fullscreen mode needs to be triggered + // from the Renderer by actually fullscreening an element. If there + // is no current fullscreen element, fullscreen the <body> element + // for now. The JS application can use enterFullscreen to change this. + // + // A TabObserver on the browser side exits the session if there's + // no longer a fullscreen element, for example if the JS app manually + // unfullscreens the "body" element. That ensures we don't end up in a + // hybrid non-fullscreen AR state. + Element* fullscreen_element = Fullscreen::FullscreenElementFrom(*doc); + if (!fullscreen_element) { + Element* body = doc->body(); + DCHECK(body); + // FIXME: this is the "prefixed" version that doesn't generate a + // fullscreenchange event and auto-hides navigation bars. Should the + // event be generated? + Fullscreen::RequestFullscreen(*body); + } + } } if (query->mode() == XRSession::kModeImmersiveVR &&
diff --git a/third_party/blink/renderer/modules/xr/xr.h b/third_party/blink/renderer/modules/xr/xr.h index 667bbf7..aa1e0137 100644 --- a/third_party/blink/renderer/modules/xr/xr.h +++ b/third_party/blink/renderer/modules/xr/xr.h
@@ -16,6 +16,7 @@ #include "third_party/blink/renderer/core/page/focus_changed_observer.h" #include "third_party/blink/renderer/modules/xr/xr_session.h" #include "third_party/blink/renderer/modules/xr/xr_session_init.h" +#include "third_party/blink/renderer/platform/graphics/color.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h" #include "third_party/blink/renderer/platform/wtf/forward.h" @@ -313,6 +314,9 @@ FrameOrWorkerScheduler::SchedulingAffectingFeatureHandle feature_handle_for_scheduler_; + + // In DOM overlay mode, save and restore the FrameView background color. + Color original_base_background_color_; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc index 230b835..17692db8 100644 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -465,6 +465,10 @@ RuntimeEnabledFeatures::SetWebXRARModuleEnabled(enable); } +void WebRuntimeFeatures::EnableWebXRARDOMOverlay(bool enable) { + RuntimeEnabledFeatures::SetWebXRARDOMOverlayEnabled(enable); +} + void WebRuntimeFeatures::EnableWebXRAnchors(bool enable) { RuntimeEnabledFeatures::SetWebXRAnchorsEnabled(enable); } @@ -668,12 +672,6 @@ RuntimeEnabledFeatures::SetDisplayLockingEnabled(enable); } -void WebRuntimeFeatures::EnablePauseExecutionContextOnBackgroundFreeze( - bool enable) { - RuntimeEnabledFeatures::SetPauseExecutionContextOnBackgroundFreezeEnabled( - enable); -} - void WebRuntimeFeatures::EnableConsolidatedMovementXY(bool enable) { RuntimeEnabledFeatures::SetConsolidatedMovementXYEnabled(enable); }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 96a19d0..4e26722 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1194,10 +1194,6 @@ name: "PassPaintVisualRectToCompositor", }, { - name: "PauseExecutionContextOnBackgroundFreeze", - status: "stable", - }, - { name: "PaymentApp", status: "experimental", }, @@ -1801,6 +1797,11 @@ // depends_on: ["WebXRARModule"], // TODO(https://crbug.com/954679): uncomment once bug is fixed }, { + name: "WebXRARDOMOverlay", + // depends_on: ["WebXRARModule"], // TODO(https://crbug.com/954679): uncomment once bug is fixed + status: "experimental", + }, + { name: "WebXRARModule", // depends_on: ["WebXR"], // TODO(https://crbug.com/954679): uncomment once bug is fixed status: "experimental",
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py index 89c6bb88..d1b67bdd 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -160,8 +160,7 @@ stderr=subprocess.PIPE) package_path = os.path.join(build_path, CONTENT_SHELL_PACKAGE_PATH) - self._target.InstallPackage(package_path, "content_shell", - package_deps=[]) + self._target.InstallPackage([package_path]) # Process will be forked for each worker, which may make QemuTarget # unusable (e.g. waitpid() for qemu process returns ECHILD after
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint index 6343ea3..aba94a8 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint +++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=CompositeAfterPaint
@@ -33,12 +33,15 @@ Bug(none) virtual/android/url-bar/bottom-and-top-fixed-sticks-to-top.html [ Crash ] Bug(none) virtual/android/url-bar/bottom-fixed-adjusted-when-showing-url-bar.html [ Crash ] +# Composited filters are not working. +crbug.com/1008501 compositing/culling/filter-occlusion-blur-large.html [ Failure ] +crbug.com/1008501 compositing/culling/filter-occlusion-blur.html [ Failure ] +crbug.com/1008501 compositing/reflections/deeply-nested-reflections.html [ Failure ] + Bug(none) compositing/animation/hidden-composited.html [ Failure ] Bug(none) compositing/change-preferCompositingToLCDText-setting.html [ Failure ] Bug(none) compositing/contents-opaque/hidden-with-visible-child.html [ Failure ] Bug(none) compositing/contents-opaque/layer-opacity.html [ Failure ] -Bug(none) compositing/culling/filter-occlusion-blur-large.html [ Failure ] -Bug(none) compositing/culling/filter-occlusion-blur.html [ Failure ] Bug(none) compositing/draws-content/canvas-background-layer.html [ Failure ] Bug(none) compositing/draws-content/webgl-background-layer.html [ Failure ] Bug(none) compositing/geometry/bounds-clipped-composited-child.html [ Failure ] @@ -77,7 +80,6 @@ crbug.com/667946 compositing/overflow/scrolls-with-respect-to-nested.html [ Failure ] crbug.com/667946 compositing/overflow/scrolls-with-respect-to-transform.html [ Failure ] crbug.com/667946 compositing/overflow/scrolls-with-respect-to.html [ Failure ] -Bug(none) compositing/reflections/deeply-nested-reflections.html [ Failure ] Bug(none) compositing/reflections/nested-reflection-mask-change.html [ Failure ] Bug(none) compositing/rtl/rtl-iframe-absolute.html [ Failure ] Bug(none) compositing/rtl/rtl-iframe-relative.html [ Failure ] @@ -101,7 +103,6 @@ Bug(none) compositing/video/video-poster.html [ Failure ] Bug(none) compositing/visibility/layer-visible-content.html [ Failure ] Bug(none) compositing/visibility/visibility-image-layers-dynamic.html [ Failure ] -Bug(none) css3/masking/mask-composite-missing-image.html [ Failure ] Bug(none) external/wpt/css/css-transforms/transform3d-backface-visibility-006.html [ Failure ] Bug(none) external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow.html [ Crash ] Bug(none) external/wpt/largest-contentful-paint/invisible-images.html [ Failure ]
diff --git a/third_party/blink/web_tests/FlagExpectations/use-vulkan=native b/third_party/blink/web_tests/FlagExpectations/use-vulkan=native index 4d61824..9138e47 100644 --- a/third_party/blink/web_tests/FlagExpectations/use-vulkan=native +++ b/third_party/blink/web_tests/FlagExpectations/use-vulkan=native
@@ -15,9 +15,6 @@ crbug.com/993384 transforms/transformed-document-element.html [ Skip ] crbug.com/993384 transforms/3d/point-mapping/3d-point-mapping-deep.html [ Skip ] -# Not rendering the rightmost frame. -crbug.com/1001616 media/alpha-video-playback.html [ Skip ] - # OffscreenCanvas not rendering. crbug.com/1002538 fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Skip ] crbug.com/1002538 fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ] @@ -41,10 +38,5 @@ crbug.com/1002547 fast/canvas/imagebitmap/transferFromImageBitmap-no-alpha.html [ Skip ] crbug.com/1002547 fast/canvas/imagebitmap/transferFromImageBitmap.html [ Skip ] -# Canvas not painting correctly. -crbug.com/1003794 fast/canvas/canvas-composite-video-shadow.html [ Skip ] -crbug.com/1003794 fast/canvas/canvas-composite-video.html [ Skip ] -crbug.com/1003794 fast/canvas/canvas-pattern-video.html [ Skip ] - # createImageBitmap fails for HTMLVideoElement crbug.com/1003799 fast/canvas/color-space/canvas-createImageBitmap-p3.html [ Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/use-vulkan=swiftshader b/third_party/blink/web_tests/FlagExpectations/use-vulkan=swiftshader index d721178..d3d8b61b 100644 --- a/third_party/blink/web_tests/FlagExpectations/use-vulkan=swiftshader +++ b/third_party/blink/web_tests/FlagExpectations/use-vulkan=swiftshader
@@ -1,9 +1,6 @@ # Test consistently hitting default timeout. Bug(none) css3/filters/effect-reference-subregion.html [ Skip ] -# Not rendering the rightmost frame. -crbug.com/1001616 media/alpha-video-playback.html [ Skip ] - # OffscreenCanvas not rendering. crbug.com/1002538 fast/canvas/OffscreenCanvas-2d-drawImage-in-worker.html [ Skip ] crbug.com/1002538 fast/canvas/OffscreenCanvas-2d-drawImage.html [ Skip ] @@ -27,10 +24,5 @@ crbug.com/1002547 fast/canvas/imagebitmap/transferFromImageBitmap-no-alpha.html [ Skip ] crbug.com/1002547 fast/canvas/imagebitmap/transferFromImageBitmap.html [ Skip ] -# Canvas not painting correctly. -crbug.com/1003794 fast/canvas/canvas-composite-video-shadow.html [ Skip ] -crbug.com/1003794 fast/canvas/canvas-composite-video.html [ Skip ] -crbug.com/1003794 fast/canvas/canvas-pattern-video.html [ Skip ] - # createImageBitmap fails for HTMLVideoElement crbug.com/1003799 fast/canvas/color-space/canvas-createImageBitmap-p3.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 7743f5d..e0a61ff 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -749,12 +749,10 @@ crbug.com/591099 fast/selectors/shadow-host-div-with-text.html [ Failure ] crbug.com/591099 fast/text/selection/inline-block-in-selection-root.html [ Failure ] crbug.com/591099 paint/invalidation/media-audio-no-spurious-repaints.html [ Failure Timeout ] -crbug.com/591099 paint/invalidation/text-match-document-change.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/composited-float-under-composited-inline-individual.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/composited-float-under-composited-inline.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/float-under-composited-inline.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/stacked-float-under-composited-inline.html [ Failure ] -crbug.com/591099 paint/invalidation/selection/selection-clear.html [ Failure ] crbug.com/591099 virtual/composite-after-paint/paint/background/scrolling-background-with-negative-z-child.html [ Failure Crash ] crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-list-item-002.html [ Failure ] crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/border-radius-clipped-layer.html [ Failure ] @@ -835,10 +833,6 @@ # crbug.com/591099 [ Mac10.11 ] media/track/track-cue-rendering-position-auto-rtl.html [ Failure ] crbug.com/591099 [ Mac10.11 ] virtual/audio-service/media/track/track-cue-rendering-position-auto-rtl.html [ Failure ] crbug.com/591099 [ Mac10.11 ] virtual/scalefactor200/fast/hidpi/static/popup-menu-appearance.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] compositing/geometry/root-layer-update.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] compositing/overlap-blending/reflection-opacity-huge.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] compositing/reflections/reflection-positioning2.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] compositing/reflections/transform-inside-reflection.html [ Failure ] crbug.com/591099 [ Mac10.13 ] css1/basic/inheritance.html [ Failure ] crbug.com/591099 [ Mac10.13 ] css1/box_properties/acid_test.html [ Failure ] crbug.com/591099 [ Mac10.13 ] css1/box_properties/border_bottom.html [ Failure ] @@ -1143,53 +1137,6 @@ crbug.com/591099 [ Mac10.13 ] virtual/audio-service/media/video-colorspace-yuv420.html [ Failure ] crbug.com/591099 [ Mac10.13 ] media/video-empty-source.html [ Failure ] crbug.com/591099 [ Mac10.13 ] virtual/audio-service/media/video-empty-source.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/compositing/layer-repaint-rects.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/crbug-371640.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/flexbox/repaint.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/float-new-in-block.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/forms/details-marker-color-change.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/line-flow-with-floats-7.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/line-flow-with-floats-9.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/list-marker-2.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/outline/focus-continuations.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/outline/focus-ring-on-child-move.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/outline/focus-ring-on-continuation-move.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/outline/outline-continuations.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/overflow/flexible-box-overflow-horizontal.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/overflow/inline-overflow.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/overflow/inline-vertical-rl-overflow.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/overflow/vertical-overflow-child.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/position/positioned-document-element.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/position/positioned-great-grandparent-change-location.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/repaint-across-writing-mode-boundary.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/scale-page-shrink.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/scroll/layout-state-scrolloffset.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/scroll/layout-state-scrolloffset3.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/scroll/overflow-scroll-body-appear.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/selection/invalidation-rect-with-br-includes-newline.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/selection/japanese-rl-selection-clear.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/selection/selection-change-in-iframe-with-relative-parent.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/selection/text-selection-rect-in-overflow-2.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/stacked-diacritics.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/svg/embedded-svg-size-changes.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol.xhtml [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/transform/transform-inline-layered-child.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/vertical-align2.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/invalidation/vertical-rl-as-paint-container.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/active-suggestion-marker-split.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/inline-spelling-markers-hidpi-composited.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/markers/inline_spelling_markers.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/selection/image-writing-modes.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/selection/text-selection-newline-across-blocks-line-beginning-end.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/selection/text-selection-newline-across-blocks.html [ Failure ] -crbug.com/591099 [ Mac10.13 ] paint/selection/text-selection-newline-rtl.html [ Failure ] crbug.com/591099 [ Mac10.13 ] plugins/embed-attributes-style.html [ Failure ] crbug.com/591099 [ Mac10.13 ] svg/custom/clone-element-with-animated-svg-properties.html [ Failure ] crbug.com/591099 [ Mac10.13 ] svg/custom/svg-fonts-in-html.html [ Failure ] @@ -3022,11 +2969,6 @@ crbug.com/552085 external/wpt/css/css-cascade/important-prop.html [ Failure ] -# TODO(chrishtr): rebaseline these -crbug.com/921242 [ Mac ] paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer.html [ Failure ] -crbug.com/921242 [ Mac ] paint/invalidation/scroll/fixed-under-composited-absolute-scrolled.html [ Failure ] -crbug.com/921242 [ Mac ] paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled.html [ Failure ] - # Failures on Mac scrollbars for compositor threaded scrollbar scrolling. crbug.com/953847 [ Mac ] fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html [ Failure ] crbug.com/953847 [ Mac ] fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json index 12d901d..3470a72 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -59687,6 +59687,18 @@ {} ] ], + "css/css-overflow/float-with-relpos-and-transform.html": [ + [ + "css/css-overflow/float-with-relpos-and-transform.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-overflow/input-scrollable-region-001.html": [ [ "css/css-overflow/input-scrollable-region-001.html", @@ -382628,6 +382640,10 @@ "b9ba7acd150e5022de5c5208cd7f5f7d4dde93c3", "support" ], + "css/css-overflow/float-with-relpos-and-transform.html": [ + "6024b7261750e0c5dc4a681dccee2ab72b83abca", + "reftest" + ], "css/css-overflow/inheritance-expected.txt": [ "59864d0f4d185ece259879a299f597b80f9babdc", "support" @@ -439121,15 +439137,15 @@ "testharness" ], "html/dom/idlharness.https.html": [ - "0d3f1160d2819601afb2168bc15bfeeaddfed6f1", + "33ad5c6f6169a7e376aaadeba1b8df4dd6815f7c", "testharness" ], "html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt": [ - "78664a5bbda46b6f424ce8a0fd23145b02385e33", + "246c8152300318511d24cda98c3005c72f5390d3", "support" ], "html/dom/idlharness.https_include=(Document_Window)-expected.txt": [ - "d669b1db8574ee30dd408b074ff3f5a8e1d59c34", + "dc7ef25a1b2b646088fa01b69023aa9d05c125f3", "support" ], "html/dom/idlharness.https_include=HTML._-expected.txt": [ @@ -499313,7 +499329,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ - "290fcff5ab22bd5ca19cedb4d3f38f5b8197768f", + "1763ff44b4e55c14c8f5d753defb3ba39e017262", "support" ], "tools/wptrunner/wptrunner/browsers/firefox_android.py": [
diff --git a/third_party/blink/web_tests/external/wpt/compat/webkit-box-removing-triggering-anonymous-merge.html b/third_party/blink/web_tests/external/wpt/compat/webkit-box-removing-triggering-anonymous-merge.html new file mode 100644 index 0000000..8506425 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/compat/webkit-box-removing-triggering-anonymous-merge.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div style="display: -webkit-box"> + <span><div></div></span> + <div id="target"></div> + text +</div> +<script> +// Force a layout before removing. +document.body.offsetTop; +document.getElementById('target').remove(); +done(); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-overflow/float-with-relpos-and-transform.html b/third_party/blink/web_tests/external/wpt/css/css-overflow/float-with-relpos-and-transform.html new file mode 100644 index 0000000..6024b72 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-overflow/float-with-relpos-and-transform.html
@@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<link rel="help" href="https://drafts.csswg.org/css-overflow/#scrollable"> +<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> +<style> +.container { + background: green; + width: 100px; + height: 100px; + overflow: auto; +} +.float { + float: left; + position: relative; + width: 50px; + height: 50px; + top: calc(50% - 100vh); + transform: translateY(-50%) translateY(100vh); +} +</style> +<p>Test passes if there is a filled green square.</p> +<div class="container"> + <div class="float"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https.html b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https.html index 0d3f116..33ad5c6 100644 --- a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https.html +++ b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https.html
@@ -47,6 +47,7 @@ documentWithHandlers[callback.name] = handler; } } + idlArray.add_untested_idls('typedef Window WindowProxy;'); idlArray.add_objects({ NodeList: ['document.getElementsByName("name")'],
diff --git "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt" "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt" index 78664a5..246c815 100644 --- "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt" +++ "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_exclude=\050Document_Window_HTML._\051-expected.txt"
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 1390 tests; 1353 PASS, 37 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 1390 tests; 1354 PASS, 36 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS idl_test setup PASS idl_test validation PASS Partial interface Document: original interface defined @@ -1117,7 +1117,7 @@ PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "data" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "origin" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "lastEventId" with the proper type -FAIL MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type Unrecognized type WindowProxy +PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "ports" with the proper type PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object])" with the proper type PASS MessageEvent interface: calling initMessageEvent(DOMString, boolean, boolean, any, USVString, DOMString, MessageEventSource, [object Object]) on new MessageEvent("message", { data: 5 }) with too few arguments must throw TypeError
diff --git "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt" "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt" index d669b1d..dc7ef25 100644 --- "a/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt" +++ "b/third_party/blink/web_tests/external/wpt/html/dom/idlharness.https_include=\050Document_Window\051-expected.txt"
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -Found 939 tests; 908 PASS, 31 FAIL, 0 TIMEOUT, 0 NOTRUN. +Found 939 tests; 912 PASS, 27 FAIL, 0 TIMEOUT, 0 NOTRUN. PASS idl_test setup PASS idl_test validation PASS Partial interface Document: original interface defined @@ -316,7 +316,7 @@ PASS Window must be primary interface of window PASS Stringification of window FAIL Window interface: window must have own property "window" assert_false: property descriptor should not have a "value" field expected false got true -FAIL Window interface: window must inherit property "self" with the proper type Unrecognized type WindowProxy +PASS Window interface: window must inherit property "self" with the proper type PASS Window interface: window must have own property "document" PASS Window interface: window must inherit property "name" with the proper type FAIL Window interface: window must have own property "location" assert_false: property descriptor should not have a "value" field expected false got true @@ -334,11 +334,11 @@ PASS Window interface: window must inherit property "stop()" with the proper type PASS Window interface: window must inherit property "focus()" with the proper type PASS Window interface: window must inherit property "blur()" with the proper type -FAIL Window interface: window must inherit property "frames" with the proper type Unrecognized type WindowProxy +PASS Window interface: window must inherit property "frames" with the proper type PASS Window interface: window must inherit property "length" with the proper type FAIL Window interface: window must have own property "top" assert_false: property descriptor should not have a "value" field expected false got true PASS Window interface: window must inherit property "opener" with the proper type -FAIL Window interface: window must inherit property "parent" with the proper type Unrecognized type WindowProxy +PASS Window interface: window must inherit property "parent" with the proper type PASS Window interface: window must inherit property "frameElement" with the proper type PASS Window interface: window must inherit property "open(USVString, DOMString, DOMString)" with the proper type PASS Window interface: calling open(USVString, DOMString, DOMString) on window with too few arguments must throw TypeError @@ -601,7 +601,7 @@ PASS Document interface: calling write(DOMString) on iframe.contentDocument with too few arguments must throw TypeError PASS Document interface: iframe.contentDocument must inherit property "writeln(DOMString)" with the proper type PASS Document interface: calling writeln(DOMString) on iframe.contentDocument with too few arguments must throw TypeError -FAIL Document interface: iframe.contentDocument must inherit property "defaultView" with the proper type Unrecognized type WindowProxy +PASS Document interface: iframe.contentDocument must inherit property "defaultView" with the proper type PASS Document interface: iframe.contentDocument must inherit property "hasFocus()" with the proper type PASS Document interface: iframe.contentDocument must inherit property "designMode" with the proper type PASS Document interface: iframe.contentDocument must inherit property "execCommand(DOMString, boolean, DOMString)" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js index ccb7a00..94031657 100644 --- a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js +++ b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
@@ -187,6 +187,15 @@ // Implements XRFrameDataProvider and XRPresentationProvider. Maintains a mock // for XRPresentationProvider. class MockRuntime { + // Mapping from string feature names to the corresponding mojo types. + // This is exposed as a member for extensibility. + static featureToMojoMap = { + "viewer": device.mojom.XRSessionFeature.REF_SPACE_VIEWER, + "local": device.mojom.XRSessionFeature.REF_SPACE_LOCAL, + "local-floor": device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR, + "bounded-floor": device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR, + "unbounded": device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED }; + constructor(fakeDeviceInit, service) { this.sessionClient_ = new device.mojom.XRSessionClientPtr(); this.presentation_provider_ = new MockXRPresentationProvider(); @@ -456,19 +465,10 @@ setFeatures(supportedFeatures) { function convertFeatureToMojom(feature) { - switch (feature) { - case "viewer": - return device.mojom.XRSessionFeature.REF_SPACE_VIEWER; - case "local": - return device.mojom.XRSessionFeature.REF_SPACE_LOCAL; - case "local-floor": - return device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR; - case "bounded-floor": - return device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR; - case "unbounded": - return device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED; - default: - return device.mojom.XRSessionFeature.INVALID; + if (feature in MockRuntime.featureToMojoMap) { + return MockRuntime.featureToMojoMap[feature]; + } else { + return device.mojom.XRSessionFeature.INVALID; } }
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py index 290fcff..1763ff44 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -181,7 +181,7 @@ def update_properties(): - return (["os", "debug", "webrender", "e10s", "sw-e10s", "processor"], + return (["os", "debug", "webrender", "fisson", "e10s", "sw-e10s", "processor"], {"os": ["version"], "processor": ["bits"]})
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/masking/mask-composite-missing-image-expected.html b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/masking/mask-composite-missing-image-expected.html deleted file mode 100644 index 3897208..0000000 --- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/css3/masking/mask-composite-missing-image-expected.html +++ /dev/null
@@ -1,17 +0,0 @@ -<html> -<head> -<style> -.test { - width: 200px; - height: 200px; - border: 10px solid black; - background-color: lime; -} -</style> -</head> -<body> - <p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=26084">WebKit Bug 26084: Bug 26084: Multiple missing images in webkit-mask-image prevent rendering</a></p> - <div class="test">This text should be visible.</div> - <p>If the test passes, you should be able to see a lime square with a black border. Inside the border, you should see the text: This text should be visible. This test is currently failing.</p> -</body> -</html>
diff --git a/third_party/blink/web_tests/media/encrypted-media/encrypted-media-playback-before-setmediakeys.html b/third_party/blink/web_tests/media/encrypted-media/encrypted-media-playback-before-setmediakeys.html new file mode 100644 index 0000000..e7754a1 --- /dev/null +++ b/third_party/blink/web_tests/media/encrypted-media/encrypted-media-playback-before-setmediakeys.html
@@ -0,0 +1,132 @@ +<!DOCTYPE html> +<html> + <head> + <title>Playback before SetMediaKeys</title> + <script src="encrypted-media-utils.js"></script> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> + </head> + <body> + <video></video> + <script> + promise_test(function(test) + { + var video = document.querySelector('video'); + var content = '../content/test-encrypted.webm'; + var mediaKeys; + var initData; + var initDataType; + var mediaKeySession; + + + // As this code doesn't wait for the 'message' event to avoid + // race conditions with 'waitingforkey', specify the key ID and + // key used by the encrypted content. + var keyId = stringToUint8Array('0123456789012345'); + var rawKey = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, + 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c]); + + return navigator.requestMediaKeySystemAccess('org.w3.clearkey', getConfigurationForFile(content)).then(function(access) { + return access.createMediaKeys(); + }).then(function(result) { + // Store mediaKeys without setting it on the video. + mediaKeys = result; + video.src = content; + video.play(); + return wait_for_encrypted_event(video); + }).then(function(e) { + // Received the 'encrypted' event(s), so keep a copy of + // the initdata for use when creating the session later. + initData = e.initData; + initDataType = e.initDataType; + + // Wait until the video indicates that it needs a key to + // continue. + return wait_for_waitingforkey_event(video); + }).then(function() { + // Make sure the video is NOT paused and not progressing + // before a key is provided. This requires the video + // to NOT have a clear lead. + assert_false(video.paused); + assert_equals(video.currentTime, 0); + + // Create a session. + mediaKeySession = mediaKeys.createSession(); + return mediaKeySession.generateRequest(initDataType, initData); + }).then(function() { + // generateRequest() will cause a 'message' event to + // occur specifying the keyId that is needed, but we + // ignore it since we already know what keyId is needed. + // Add the key needed to decrypt. + var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId, rawKey))); + return mediaKeySession.update(jwkSet); + }).then(function() { + // Now setMediaKeys() and playback should start. + return video.setMediaKeys(mediaKeys); + }).then(function() { + // Video should start playing now that it can decrypt the + // streams, so wait until a little bit of the video has + // played. + return wait_for_timeupdate_event(video); + }); + + // Typical test duration is 6 seconds on release builds + // (12 seconds on debug). Since the test is timing out anyway, + // make the duration 5 seconds so that the timeout function + // is actually called (instead of simply aborting the test). + }, 'Playback before SetMediaKeys', { timeout: 5000 }); + + // Wait for a pair of 'encrypted' events. Promise resolved on + // second event. + function wait_for_encrypted_event(video) + { + var encryptedEventCount = 0; + return new Promise(function(resolve) { + video.addEventListener('encrypted', function listener(e) { + assert_equals(e.target, video); + assert_true(e instanceof window.MediaEncryptedEvent); + assert_equals(e.type, 'encrypted'); + + // The same decryption key is used by both the audio + // and the video streams so wait for the second event + // to ensure we see both events. + if (++encryptedEventCount != 2) + return; + + video.removeEventListener('encrypted', listener); + resolve(e); + }); + }); + }; + + // Wait for a 'waitingforkey' event. Promise resolved when the + // event is received. + function wait_for_waitingforkey_event(video) + { + return new Promise(function(resolve) { + video.addEventListener('waitingforkey', function listener(e) { + assert_equals(e.target, video); + assert_equals(e.type, 'waitingforkey'); + video.removeEventListener('waitingforkey', listener); + resolve(e); + }); + }); + }; + + // Wait for a 'timeupdate' event. Promise resolved if |video| has + // played for more than 0.2 seconds. + function wait_for_timeupdate_event(video) + { + return new Promise(function(resolve) { + video.addEventListener('timeupdate', function listener(e) { + assert_equals(e.target, video); + if (video.currentTime < 0.2) + return; + video.removeEventListener('timeupdate', listener); + resolve(e); + }); + }); + }; + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt index 1a80e5c..b098b4b 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt
@@ -1,39 +1,34 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF" }, { - "name": "LayoutInline (relative positioned) SPAN", - "position": [108, 108], - "drawsContent": false - }, - { - "name": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", - "position": [58, 58], + "name": "LayoutNGBlockFlow (relative positioned) (floating) DIV id='float'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", "paintInvalidations": [ { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", + "object": "LayoutNGBlockFlow (relative positioned) (floating) DIV id='float'", "rect": [0, 0, 100, 100], "reason": "background" } + ], + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [158, 158, 0, 1] ] } ]
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt index 1a80e5c..b098b4b 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt
@@ -1,39 +1,34 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF" }, { - "name": "LayoutInline (relative positioned) SPAN", - "position": [108, 108], - "drawsContent": false - }, - { - "name": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", - "position": [58, 58], + "name": "LayoutNGBlockFlow (relative positioned) (floating) DIV id='float'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", "paintInvalidations": [ { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", + "object": "LayoutNGBlockFlow (relative positioned) (floating) DIV id='float'", "rect": [0, 0, 100, 100], "reason": "background" } + ], + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [158, 158, 0, 1] ] } ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt similarity index 100% rename from third_party/blink/web_tests/platform/win/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt rename to third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/float-under-composited-inline-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/float-under-composited-inline-expected.txt index 06ddd78..991dd77 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/float-under-composited-inline-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/float-under-composited-inline-expected.txt
@@ -1,33 +1,22 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='float'", - "rect": [8, 8, 100, 100], - "reason": "background" - } - ] + "backgroundColor": "#FFFFFF" }, { "name": "LayoutInline (relative positioned) SPAN", "position": [108, 108], - "drawsContent": false + "bounds": [100, 100], + "paintInvalidations": [ + { + "object": "LayoutNGBlockFlow (floating) DIV id='float'", + "rect": [0, 0, 100, 100], + "reason": "background" + } + ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt index 1cd6614..e69dec6a 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt
@@ -1,17 +1,6 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, @@ -19,12 +8,12 @@ }, { "name": "LayoutInline (relative positioned) SPAN", - "position": [58, 58], + "position": [158, 158], "bounds": [100, 100], "contentsOpaque": true, "paintInvalidations": [ { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", + "object": "LayoutNGBlockFlow (relative positioned) (floating) DIV id='float'", "rect": [0, 0, 100, 100], "reason": "background" }
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/paint/invalidation/selection/selection-clear-expected.png similarity index 79% rename from third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-rtl-expected.png rename to third_party/blink/web_tests/paint/invalidation/selection/selection-clear-expected.png index d291c255..4ed1cbca 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-rtl-expected.png +++ b/third_party/blink/web_tests/paint/invalidation/selection/selection-clear-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt index 2bf0911..97d9759d 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt
@@ -1,40 +1,34 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "LayoutBlockFlow DIV id='firstLine'", + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", "rect": [8, 8, 100, 200], - "reason": "full" - }, - { - "object": "InlineTextBox 'FAIL: Test did'", - "rect": [8, 48, 97, 119], "reason": "disappeared" }, { - "object": "InlineTextBox 'not run'", - "rect": [8, 48, 97, 119], + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", + "rect": [8, 8, 100, 100], + "reason": "appeared" + }, + { + "object": "NGPhysicalTextFragment 'FAIL: Test did'", + "rect": [8, 8, 97, 200], "reason": "disappeared" }, { - "object": "InlineTextBox '\u00A0'", - "rect": [8, 48, 8, 19], + "object": "NGPhysicalTextFragment 'not run'", + "rect": [8, 8, 97, 200], + "reason": "disappeared" + }, + { + "object": "NGPhysicalTextFragment '\u00A0'", + "rect": [8, 8, 8, 100], "reason": "appeared" } ]
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/text-match-document-change-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/text-match-document-change-expected.txt index 4a3af0f..75b3f73 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/text-match-document-change-expected.txt
@@ -1,34 +1,23 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "InlineTextBox 'Find-in-page 'findme', then click here)'", + "object": "NGPhysicalTextFragment 'Find-in-page 'findme', then click here)'", "rect": [18, 130, 251, 39], "reason": "disappeared" }, { - "object": "InlineTextBox 'To be changed: findme (Manual testing:'", + "object": "NGPhysicalTextFragment 'To be changed: findme (Manual testing:'", "rect": [18, 130, 251, 39], "reason": "disappeared" }, { - "object": "InlineTextBox 'After change'", + "object": "NGPhysicalTextFragment 'After change'", "rect": [18, 130, 82, 19], "reason": "appeared" },
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/fast/text/trailing-white-space-2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/fast/text/trailing-white-space-2-expected.png deleted file mode 100644 index 9083dbf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.10/fast/text/trailing-white-space-2-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index 365123e..1d9dc3d0 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/blink/web_tests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -1,17 +1,6 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true,
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/geometry/root-layer-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/compositing/geometry/root-layer-update-expected.png deleted file mode 100644 index 05b14b3..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/geometry/root-layer-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/overlap-blending/reflection-opacity-huge-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/compositing/overlap-blending/reflection-opacity-huge-expected.png deleted file mode 100644 index 422646f4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/overlap-blending/reflection-opacity-huge-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/reflection-positioning2-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/reflection-positioning2-expected.png deleted file mode 100644 index 58c07ee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/reflection-positioning2-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/transform-inside-reflection-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/transform-inside-reflection-expected.png deleted file mode 100644 index e08cbe0..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/compositing/reflections/transform-inside-reflection-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png deleted file mode 100644 index 28c4a50..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt deleted file mode 100644 index e794a47..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ /dev/null
@@ -1,73 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [785, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [785, 30020], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "transform": 1 - }, - { - "name": "Squashing Containment Layer", - "drawsContent": false, - "transform": 1 - }, - { - "name": "LayoutBlockFlow DIV class='compositedBehind'", - "bounds": [500, 500], - "contentsOpaque": true, - "backgroundColor": "#00FFFF", - "transform": 2 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')", - "position": [20, 20], - "bounds": [100, 30000], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='fixed'", - "position": [45, 145], - "bounds": [50, 50], - "opacity": 0.990000009536743, - "contentsOpaque": true, - "backgroundColor": "#00FF00", - "transform": 1 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/layer-repaint-rects-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/layer-repaint-rects-expected.png deleted file mode 100644 index ea8a18f7..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/compositing/layer-repaint-rects-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png deleted file mode 100644 index 4f67a0521..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/vertical-overflow-child-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/vertical-overflow-child-expected.png deleted file mode 100644 index ed3e3e6..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/overflow/vertical-overflow-child-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/scale-page-shrink-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/scale-page-shrink-expected.png deleted file mode 100644 index fa7291ed..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/scale-page-shrink-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/svg/embedded-svg-size-changes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/svg/embedded-svg-size-changes-expected.png deleted file mode 100644 index 942612d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/invalidation/svg/embedded-svg-size-changes-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/active-suggestion-marker-split-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/active-suggestion-marker-split-expected.png deleted file mode 100644 index 40a4ad4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/active-suggestion-marker-split-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png deleted file mode 100644 index 681ef8d0..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png deleted file mode 100644 index 0ad476f1..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png deleted file mode 100644 index 9a8e06e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png deleted file mode 100644 index 6d53405..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline-spelling-markers-hidpi-composited-expected.png deleted file mode 100644 index 5d74baf1..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline-spelling-markers-hidpi-composited-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline_spelling_markers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline_spelling_markers-expected.png deleted file mode 100644 index 7c049b64..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/markers/inline_spelling_markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/image-writing-modes-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/image-writing-modes-expected.png deleted file mode 100644 index 5faef797..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/image-writing-modes-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-expected.png deleted file mode 100644 index 6572048..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png deleted file mode 100644 index c7db599b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/compositing/geometry/root-layer-update-expected.png b/third_party/blink/web_tests/platform/mac-retina/compositing/geometry/root-layer-update-expected.png deleted file mode 100644 index 05b14b3..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/compositing/geometry/root-layer-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/compositing/overlap-blending/reflection-opacity-huge-expected.png b/third_party/blink/web_tests/platform/mac-retina/compositing/overlap-blending/reflection-opacity-huge-expected.png deleted file mode 100644 index 422646f4..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/compositing/overlap-blending/reflection-opacity-huge-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/reflection-positioning2-expected.png b/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/reflection-positioning2-expected.png deleted file mode 100644 index 58c07ee..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/reflection-positioning2-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/transform-inside-reflection-expected.png b/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/transform-inside-reflection-expected.png deleted file mode 100644 index e08cbe0..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/compositing/reflections/transform-inside-reflection-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png deleted file mode 100644 index 28c4a50..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt deleted file mode 100644 index e794a47..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ /dev/null
@@ -1,73 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [785, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [785, 30020], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "transform": 1 - }, - { - "name": "Squashing Containment Layer", - "drawsContent": false, - "transform": 1 - }, - { - "name": "LayoutBlockFlow DIV class='compositedBehind'", - "bounds": [500, 500], - "contentsOpaque": true, - "backgroundColor": "#00FFFF", - "transform": 2 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')", - "position": [20, 20], - "bounds": [100, 30000], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='fixed'", - "position": [45, 145], - "bounds": [50, 50], - "opacity": 0.990000009536743, - "contentsOpaque": true, - "backgroundColor": "#00FF00", - "transform": 1 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/layer-repaint-rects-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/layer-repaint-rects-expected.png deleted file mode 100644 index ea8a18f7..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/compositing/layer-repaint-rects-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png deleted file mode 100644 index 4f67a0521..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/vertical-overflow-child-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/vertical-overflow-child-expected.png deleted file mode 100644 index ed3e3e6..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/overflow/vertical-overflow-child-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/scale-page-shrink-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/scale-page-shrink-expected.png deleted file mode 100644 index fa7291ed..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/scale-page-shrink-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/embedded-svg-size-changes-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/embedded-svg-size-changes-expected.png deleted file mode 100644 index 942612d..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/embedded-svg-size-changes-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png deleted file mode 100644 index e1f2fc4..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt deleted file mode 100644 index 838fd69..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ /dev/null
@@ -1,39 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [500, 400], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [485, 400], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [485, 478], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "rect": [8, 68, 402, 402], - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg id='gamesBorder'", - "rect": [45, 103, 328, 330], - "reason": "paint property change" - }, - { - "object": "LayoutSVGViewportContainer svg id='gamesBorder'", - "rect": [18, 227, 82, 83], - "reason": "paint property change" - } - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/remove-background-property-on-root-expected.txt b/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/remove-background-property-on-root-expected.txt deleted file mode 100644 index 220bb464..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/invalidation/svg/remove-background-property-on-root-expected.txt +++ /dev/null
@@ -1,34 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [500, 400], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [500, 400], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [500, 400], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutSVGRoot svg", - "rect": [8, 8, 100, 100], - "reason": "chunk disappeared" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "rect": [8, 8, 100, 100], - "reason": "appeared" - } - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/active-suggestion-marker-split-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/active-suggestion-marker-split-expected.png deleted file mode 100644 index 40a4ad4..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/active-suggestion-marker-split-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png deleted file mode 100644 index 681ef8d0..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png deleted file mode 100644 index 0ad476f1..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png deleted file mode 100644 index 9a8e06e..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png deleted file mode 100644 index 6d53405..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline-spelling-markers-hidpi-composited-expected.png deleted file mode 100644 index 5d74baf1..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline-spelling-markers-hidpi-composited-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline_spelling_markers-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline_spelling_markers-expected.png deleted file mode 100644 index 7c049b64..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/markers/inline_spelling_markers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/selection/image-writing-modes-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/selection/image-writing-modes-expected.png deleted file mode 100644 index 5faef797..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/selection/image-writing-modes-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-expected.png deleted file mode 100644 index 6572048..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png deleted file mode 100644 index c7db599b..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-rtl-expected.png deleted file mode 100644 index d291c255..0000000 --- a/third_party/blink/web_tests/platform/mac-retina/paint/selection/text-selection-newline-rtl-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/geometry/root-layer-update-expected.png b/third_party/blink/web_tests/platform/mac/compositing/geometry/root-layer-update-expected.png index f98d9b3..05b14b3 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/geometry/root-layer-update-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/geometry/root-layer-update-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/overlap-blending/reflection-opacity-huge-expected.png b/third_party/blink/web_tests/platform/mac/compositing/overlap-blending/reflection-opacity-huge-expected.png index 0332b4d..422646f4 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/overlap-blending/reflection-opacity-huge-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/overlap-blending/reflection-opacity-huge-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/reflections/reflection-positioning2-expected.png b/third_party/blink/web_tests/platform/mac/compositing/reflections/reflection-positioning2-expected.png index 8ae03f7..58c07ee 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/reflections/reflection-positioning2-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/reflections/reflection-positioning2-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/reflections/transform-inside-reflection-expected.png b/third_party/blink/web_tests/platform/mac/compositing/reflections/transform-inside-reflection-expected.png index 197bb98..e08cbe0 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/reflections/transform-inside-reflection-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/reflections/transform-inside-reflection-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png deleted file mode 100644 index e0a5163..0000000 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt deleted file mode 100644 index b1862ee1..0000000 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ /dev/null
@@ -1,73 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [500, 400], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [485, 385], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [508, 30020], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "transform": 1 - }, - { - "name": "Squashing Containment Layer", - "drawsContent": false, - "transform": 1 - }, - { - "name": "LayoutBlockFlow DIV class='compositedBehind'", - "bounds": [500, 500], - "contentsOpaque": true, - "backgroundColor": "#00FFFF", - "transform": 2 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')", - "position": [20, 20], - "bounds": [100, 30000], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='fixed'", - "position": [45, 145], - "bounds": [50, 50], - "opacity": 0.990000009536743, - "contentsOpaque": true, - "backgroundColor": "#00FF00", - "transform": 1 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/layer-repaint-rects-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/layer-repaint-rects-expected.png index 3c1890a7..ea8a18f7 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/layer-repaint-rects-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/layer-repaint-rects-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png index f6f264f..4f67a0521 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/flexible-box-overflow-horizontal-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/vertical-overflow-child-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/vertical-overflow-child-expected.png index 1846e5f2..ed3e3e6 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/vertical-overflow-child-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/overflow/vertical-overflow-child-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scale-page-shrink-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/scale-page-shrink-expected.png index 315d97e..fa7291ed 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scale-page-shrink-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scale-page-shrink-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.png new file mode 100644 index 0000000..556d624 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.png new file mode 100644 index 0000000..2538174 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.png deleted file mode 100644 index 51e456f..0000000 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt index 7e0793d3..ea38973 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt
@@ -1,40 +1,34 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "LayoutBlockFlow DIV id='firstLine'", + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", "rect": [8, 8, 100, 200], - "reason": "full" - }, - { - "object": "InlineTextBox 'FAIL: Test did'", - "rect": [8, 49, 98, 118], "reason": "disappeared" }, { - "object": "InlineTextBox 'not run'", - "rect": [8, 49, 98, 118], + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", + "rect": [8, 8, 100, 100], + "reason": "appeared" + }, + { + "object": "NGPhysicalTextFragment 'FAIL: Test did'", + "rect": [8, 8, 98, 200], "reason": "disappeared" }, { - "object": "InlineTextBox '\u00A0'", - "rect": [8, 49, 8, 18], + "object": "NGPhysicalTextFragment 'not run'", + "rect": [8, 8, 98, 200], + "reason": "disappeared" + }, + { + "object": "NGPhysicalTextFragment '\u00A0'", + "rect": [8, 8, 8, 100], "reason": "appeared" } ]
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/embedded-svg-size-changes-expected.png b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/embedded-svg-size-changes-expected.png index c6c8f16..942612d 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/embedded-svg-size-changes-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/embedded-svg-size-changes-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt index 7751a35..2bc2aa2 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
@@ -1,17 +1,6 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true,
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/text-match-document-change-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/text-match-document-change-expected.txt index 1f44ac46..41546a1 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/text-match-document-change-expected.txt
@@ -1,34 +1,23 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "InlineTextBox 'Find-in-page 'findme', then click here)'", + "object": "NGPhysicalTextFragment 'Find-in-page 'findme', then click here)'", "rect": [18, 128, 256, 36], "reason": "disappeared" }, { - "object": "InlineTextBox 'To be changed: findme (Manual testing:'", + "object": "NGPhysicalTextFragment 'To be changed: findme (Manual testing:'", "rect": [18, 128, 256, 36], "reason": "disappeared" }, { - "object": "InlineTextBox 'After change'", + "object": "NGPhysicalTextFragment 'After change'", "rect": [18, 128, 84, 18], "reason": "appeared" },
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/active-suggestion-marker-split-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/active-suggestion-marker-split-expected.png index 212c6db..40a4ad4 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/active-suggestion-marker-split-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/active-suggestion-marker-split-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png index a013e02..681ef8d0 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-ltr-flow-with-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png index dc26be2..0ad476f1 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-ltr-text-in-rtl-flow-with-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png index 1b7d8309..9a8e06e 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-ltr-flow-with-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png index 3a3c7efe..6d53405 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/ellipsis-rtl-text-in-rtl-flow-with-markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png index f99dfd7..5d74baf1 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/inline_spelling_markers-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/inline_spelling_markers-expected.png index 1ca7158..7c049b64 100644 --- a/third_party/blink/web_tests/platform/mac/paint/markers/inline_spelling_markers-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/markers/inline_spelling_markers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/image-writing-modes-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/image-writing-modes-expected.png index b7f772c..5faef797 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/image-writing-modes-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/image-writing-modes-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png index b2b00d51..6572048 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png index 6572048..c7db599b 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-across-blocks-line-beginning-end-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png index f486b96..d291c255 100644 --- a/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png +++ b/third_party/blink/web_tests/platform/mac/paint/selection/text-selection-newline-rtl-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.png b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.png deleted file mode 100644 index 8dee85e..0000000 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.txt index aceabb8..aed94be 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-clear-expected.txt
@@ -1,40 +1,34 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "LayoutBlockFlow DIV id='firstLine'", + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", "rect": [8, 8, 100, 200], - "reason": "full" - }, - { - "object": "InlineTextBox 'FAIL: Test did'", - "rect": [8, 48, 92, 119], "reason": "disappeared" }, { - "object": "InlineTextBox 'not run'", - "rect": [8, 48, 92, 119], + "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", + "rect": [8, 8, 100, 100], + "reason": "appeared" + }, + { + "object": "NGPhysicalTextFragment 'FAIL: Test did'", + "rect": [8, 8, 92, 200], "reason": "disappeared" }, { - "object": "InlineTextBox '\u00A0'", - "rect": [8, 48, 8, 19], + "object": "NGPhysicalTextFragment 'not run'", + "rect": [8, 8, 92, 200], + "reason": "disappeared" + }, + { + "object": "NGPhysicalTextFragment '\u00A0'", + "rect": [8, 8, 8, 100], "reason": "appeared" } ]
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/text-match-document-change-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/text-match-document-change-expected.txt index 8d3dc22..febde0d0 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/text-match-document-change-expected.txt
@@ -1,34 +1,23 @@ { "layers": [ { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { "name": "Scrolling Contents Layer", "bounds": [800, 600], "contentsOpaque": true, "backgroundColor": "#FFFFFF", "paintInvalidations": [ { - "object": "InlineTextBox 'Find-in-page 'findme', then click here)'", + "object": "NGPhysicalTextFragment 'Find-in-page 'findme', then click here)'", "rect": [18, 130, 235, 39], "reason": "disappeared" }, { - "object": "InlineTextBox 'To be changed: findme (Manual testing:'", + "object": "NGPhysicalTextFragment 'To be changed: findme (Manual testing:'", "rect": [18, 130, 235, 39], "reason": "disappeared" }, { - "object": "InlineTextBox 'After change'", + "object": "NGPhysicalTextFragment 'After change'", "rect": [18, 130, 77, 19], "reason": "appeared" },
diff --git a/third_party/blink/web_tests/wpt_internal/webxr/ar_dom_overlay.https.html b/third_party/blink/web_tests/wpt_internal/webxr/ar_dom_overlay.https.html new file mode 100644 index 0000000..467b4ab --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/webxr/ar_dom_overlay.https.html
@@ -0,0 +1,39 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script>let additionalChromiumResources = ["resources/xr-internal-device-mocking.js"];</script> +<script src="/webxr/resources/webxr_util.js"></script> +<script src="/webxr/resources/webxr_test_constants.js"></script> +<script src="/webxr/resources/webxr_test_asserts.js"></script> +<canvas /> + +<script> +// Because AR is not yet in the core webxr spec, this is an internal-chrome only test. +let testName = "Ensures DOM Overlay feature works for immersive-ar"; + +let fakeDeviceInitParams = { supportsImmersive: true, + views: VALID_VIEWS, + supportsEnvironmentIntegration: true, + supportedFeatures: ALL_FEATURES.concat([ + 'dom-overlay-for-handheld-ar'])}; + +let testFunction = function(session, fakeDeviceController, t) { + assert_equals(session.mode, 'immersive-ar'); + assert_not_equals(session.environmentBlendMode, 'opaque'); + + // The <body> element should have a transparent background. + assert_equals(window.getComputedStyle(document.body).backgroundColor, + 'rgba(0, 0, 0, 0)'); + + // Try fullscreening an element. + let elem = document.querySelector('canvas'); + return elem.requestFullscreen().then(() => { + assert_equals(document.fullscreenElement, elem); + }); +}; + +xr_session_promise_test( + testName, testFunction, fakeDeviceInitParams, 'immersive-ar', + {requiredFeatures: ['dom-overlay-for-handheld-ar']}); + +</script>
diff --git a/third_party/blink/web_tests/wpt_internal/webxr/resources/xr-internal-device-mocking.js b/third_party/blink/web_tests/wpt_internal/webxr/resources/xr-internal-device-mocking.js index 99313cd0..6be8bfa 100644 --- a/third_party/blink/web_tests/wpt_internal/webxr/resources/xr-internal-device-mocking.js +++ b/third_party/blink/web_tests/wpt_internal/webxr/resources/xr-internal-device-mocking.js
@@ -37,3 +37,7 @@ MockRuntime.prototype.getMissingFrameCount = function() { return this.presentation_provider_.missing_frame_count_; }; + +// Patch in experimental features. +MockRuntime.featureToMojoMap["dom-overlay-for-handheld-ar"] = + device.mojom.XRSessionFeature.DOM_OVERLAY_FOR_HANDHELD_AR;
diff --git a/third_party/closure_compiler/externs/automation.js b/third_party/closure_compiler/externs/automation.js index 79e3522..03985db 100644 --- a/third_party/closure_compiler/externs/automation.js +++ b/third_party/closure_compiler/externs/automation.js
@@ -1102,9 +1102,9 @@ /** * The ARIA column index as specified by the page author. * @type {(number|undefined)} - * @see https://developer.chrome.com/extensions/automation#type-ariaCellColumnIndex + * @see https://developer.chrome.com/extensions/automation#type-tableCellAriaColumnIndex */ -chrome.automation.AutomationNode.prototype.ariaCellColumnIndex; +chrome.automation.AutomationNode.prototype.tableCellAriaColumnIndex; /** * The number of columns that this cell spans (default is 1). @@ -1123,9 +1123,9 @@ /** * The ARIA row index as specified by the page author. * @type {(number|undefined)} - * @see https://developer.chrome.com/extensions/automation#type-ariaCellRowIndex + * @see https://developer.chrome.com/extensions/automation#type-tableCellAriaRowIndex */ -chrome.automation.AutomationNode.prototype.ariaCellRowIndex; +chrome.automation.AutomationNode.prototype.tableCellAriaRowIndex; /** * The number of rows that this cell spans (default is 1).
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium index 92efcd3..e1d2e623 100644 --- a/third_party/crashpad/README.chromium +++ b/third_party/crashpad/README.chromium
@@ -2,7 +2,7 @@ Short Name: crashpad URL: https://crashpad.chromium.org/ Version: unknown -Revision: eb0c4726f13d06662b0cf82571e5047b386d6dae +Revision: c87486f5951f0b6445730d03e388b1f6f68ef7b8 License: Apache 2.0 License File: crashpad/LICENSE Security Critical: yes
diff --git a/third_party/crashpad/crashpad/client/crashpad_client_linux.cc b/third_party/crashpad/crashpad/client/crashpad_client_linux.cc index 74f1540..00a83fa0 100644 --- a/third_party/crashpad/crashpad/client/crashpad_client_linux.cc +++ b/third_party/crashpad/crashpad/client/crashpad_client_linux.cc
@@ -58,24 +58,31 @@ const std::map<std::string, std::string>& annotations, const std::vector<std::string>& arguments, int socket) { - std::vector<std::string> argv; #if defined(ARCH_CPU_64_BITS) - argv.push_back("/system/bin/app_process64"); + static constexpr char kAppProcess[] = "/system/bin/app_process64"; #else - argv.push_back("/system/bin/app_process32"); + static constexpr char kAppProcess[] = "/system/bin/app_process32"; #endif + + std::vector<std::string> argv; + argv.push_back(kAppProcess); argv.push_back("/system/bin"); argv.push_back("--application"); argv.push_back(class_name); - std::vector<std::string> handler_argv = BuildHandlerArgvStrings( - base::FilePath(), database, metrics_dir, url, annotations, arguments); + std::vector<std::string> handler_argv = + BuildHandlerArgvStrings(base::FilePath(kAppProcess), + database, + metrics_dir, + url, + annotations, + arguments); if (socket != kInvalidFileHandle) { handler_argv.push_back(FormatArgumentInt("initial-client-fd", socket)); } - argv.insert(argv.end(), handler_argv.begin() + 1, handler_argv.end()); + argv.insert(argv.end(), handler_argv.begin(), handler_argv.end()); return argv; }
diff --git a/third_party/jdk/OWNERS b/third_party/jdk/OWNERS new file mode 100644 index 0000000..0b91858 --- /dev/null +++ b/third_party/jdk/OWNERS
@@ -0,0 +1,2 @@ +agrieve@chromium.org +yliuyliu@google.com
diff --git a/third_party/jdk/README.chromium b/third_party/jdk/README.chromium new file mode 100644 index 0000000..7d3ed22 --- /dev/null +++ b/third_party/jdk/README.chromium
@@ -0,0 +1,24 @@ +Name: Java Development Kit +Short Name: JDK +URL: https://www.java.com/ +Version: 11.0.4 +License: GPL v2 +License File: NOT_SHIPPED +Security Critical: no + +Description: +The Java Development Kit (JDK) is a software development environment used for +developing Java applications and applets. (linux-x64) + +How to update: +1. Find the specific version you want to update from + https://www.oracle.com/technetwork/java/javase/downloads/index.html +2. Click DOWNLOAD for specific version +3. Accept License Agreement +4. Download "Linux" version +5. Unzip compressed files to //third_party/jdk/current +6. Run "cipd create --pkg-def cipd.yaml" to create cipd package and get instance ID +7. Update instance ID in //DEPS + +Local Modifications: +None
diff --git a/third_party/jdk/cipd.yaml b/third_party/jdk/cipd.yaml new file mode 100644 index 0000000..a839290 --- /dev/null +++ b/third_party/jdk/cipd.yaml
@@ -0,0 +1,11 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# To create CIPD package run the following command. +# cipd create --pkg-def cipd.yaml +package: chromium/third_party/jdk +description: Java Development Kit +root: ./ +data: + - dir: current
diff --git a/third_party/libvpx/generate_gni.sh b/third_party/libvpx/generate_gni.sh index 6a09ef2..fa8d847 100755 --- a/third_party/libvpx/generate_gni.sh +++ b/third_party/libvpx/generate_gni.sh
@@ -56,9 +56,6 @@ # $1 - Output base name function write_license { echo "# This file is generated. Do not edit." >> $1 - echo "# Copyright (c) 2014 The Chromium Authors. All rights reserved." >> $1 - echo "# Use of this source code is governed by a BSD-style license that can be" >> $1 - echo "# found in the LICENSE file." >> $1 echo "" >> $1 }
diff --git a/third_party/libvpx/libvpx_srcs.gni b/third_party/libvpx/libvpx_srcs.gni index bbe73b89..a864c48 100644 --- a/third_party/libvpx/libvpx_srcs.gni +++ b/third_party/libvpx/libvpx_srcs.gni
@@ -1,7 +1,4 @@ # This file is generated. Do not edit. -# Copyright (c) 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. libvpx_srcs_x86 = [ "//third_party/libvpx/source/libvpx/vp8/common/alloccommon.c",
diff --git a/third_party/webxr_test_pages/webxr-samples/tests/index.html b/third_party/webxr_test_pages/webxr-samples/tests/index.html index 95a1199..2c551505 100644 --- a/third_party/webxr_test_pages/webxr-samples/tests/index.html +++ b/third_party/webxr_test_pages/webxr-samples/tests/index.html
@@ -105,6 +105,10 @@ path: 'cube-sea.html', description: 'All hail the cube sea! Not very interesting to look at, but it\'s fantastic for testing!' }, + { title: 'Unresponsive Page', category: 'Basics', + path: 'unresponsive-page.html', + description: 'A "bad" page that doesn\'t request any frames' }, + { title: 'Pointer Painter', category: 'Input', path: 'pointer-painter.html', description: 'Leaves behind a trail of pointers and cursors on select events.' },
diff --git a/third_party/webxr_test_pages/webxr-samples/tests/unresponsive-page.html b/third_party/webxr_test_pages/webxr-samples/tests/unresponsive-page.html new file mode 100644 index 0000000..df4a865 --- /dev/null +++ b/third_party/webxr_test_pages/webxr-samples/tests/unresponsive-page.html
@@ -0,0 +1,120 @@ +<!doctype html> +<!-- +Copyright 2018 The Immersive Web Community Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +--> +<html> + <head> + <meta charset='utf-8'> + <meta name='viewport' content='width=device-width, initial-scale=1, user-scalable=no'> + <meta name='mobile-web-app-capable' content='yes'> + <meta name='apple-mobile-web-app-capable' content='yes'> + + <title>Unresponsive Page</title> + + <link href='../css/common.css' rel='stylesheet'></link> + + <!--The polyfill is not needed for browser that have native API support, + but is linked by these samples for wider compatibility.--> + <!--script src='https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.js'></script--> + <script src='../js/xrray-polyfill.js' type='module'></script> + <script src='../js/webxr-polyfill.js'></script> + + <script src='../js/webxr-button.js'></script> + </head> + <body> + <header> + <details open> + <summary>Unresponsive Page</summary> + <p> + This page mimics a poorly behaved page which requests a session but + never begins requesting or processing frames. + <a class="back" href="./index.html">Back</a> + </p> + </details> + </header> + <main style='text-align: center;'> + <p>Click 'Enter XR' to see content</p> + </main> + <script type="module"> + import {createWebGLContext} from '../js/cottontail/src/core/renderer.js'; + import {QueryArgs} from '../js/cottontail/src/util/query-args.js'; + + // If requested, initialize the WebXR polyfill + if (QueryArgs.getBool('allowPolyfill', false)) { + var polyfill = new WebXRPolyfill(); + } + + // XR globals. + let xrButton = null; + + // Checks to see if WebXR is available and, if so, queries a list of + // XRDevices that are connected to the system. + function initXR() { + // Adds a helper button to the page that indicates if any XRDevices are + // available and let's the user pick between them if there's multiple. + xrButton = new XRDeviceButton({ + onRequestSession: onRequestSession, + onEndSession: onEndSession, + supportedSessionTypes: ['immersive-vr'] + }); + document.querySelector('header').appendChild(xrButton.domElement); + } + + // Called when the user selects a device to present to. In response we + // will request an exclusive session from that device. + function onRequestSession() { + navigator.xr.requestSession('immersive-vr').then(onSessionStarted); + } + + // Called when we've successfully acquired a XRSession. In response we + // will set up the necessary session state and kick off the frame loop. + function onSessionStarted(session) { + session.mode = 'immersive-vr'; + // This informs the 'Enter XR' button that the session has started and + // that it should display 'Exit XR' instead. + xrButton.setSession(session); + + // Listen for the sessions 'end' event so we can respond if the user + // or UA ends the session for any reason. + session.addEventListener('end', onSessionEnded); + + // Normally we'd set up our context, request a reference space, and then + // start a frame loop here, but we want to pretend to be stalled. + } + + // Called when the user clicks the 'Exit XR' button. In response we end + // the session. + function onEndSession(session) { + session.end(); + } + + // Called either when the user has explicitly ended the session (like in + // onEndSession()) or when the UA has ended the session for any reason. + // At this point the session object is no longer usable and should be + // discarded. + function onSessionEnded(event) { + xrButton.setSession(null); + } + + // Start the XR application. + initXR(); + </script> + </body> +</html>
diff --git a/tools/android/avd/BUILD.gn b/tools/android/avd/BUILD.gn deleted file mode 100644 index 93c51b3..0000000 --- a/tools/android/avd/BUILD.gn +++ /dev/null
@@ -1,13 +0,0 @@ -# Copyright 2019 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/python.gni") - -python_library("avd_py") { - testonly = true - pydeps_file = "avd.pydeps" - data = [ - "proto/", - ] -}
diff --git a/tools/android/avd/avd.py b/tools/android/avd/avd.py index 397b6d5..2889e0c 100755 --- a/tools/android/avd/avd.py +++ b/tools/android/avd/avd.py
@@ -4,476 +4,21 @@ # found in the LICENSE file. import argparse -import contextlib -import json -import logging import os -import socket -import stat -import subprocess import sys -import threading - -from google.protobuf import text_format -from proto import avd_pb2 _SRC_ROOT = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..', '..')) sys.path.append( - os.path.join(_SRC_ROOT, 'third_party', 'catapult', 'common', 'py_utils')) -from py_utils import tempfile_ext - -sys.path.append( os.path.join(_SRC_ROOT, 'third_party', 'catapult', 'devil')) -from devil.android import device_utils -from devil.android.sdk import adb_wrapper from devil.android.tools import script_common -from devil.utils import cmd_helper from devil.utils import logging_common -from devil.utils import timeout_retry sys.path.append( os.path.join(_SRC_ROOT, 'build', 'android')) import devil_chromium - - -_ALL_PACKAGES = object() -_DEFAULT_AVDMANAGER_PATH = os.path.join( - _SRC_ROOT, 'third_party', 'android_sdk', 'public', - 'tools', 'bin', 'avdmanager') - - -class AvdException(Exception): - """Raised when this module has a problem interacting with an AVD.""" - - def __init__(self, summary, command=None, stdout=None, stderr=None): - message_parts = [summary] - if command: - message_parts.append(' command: %s' % ' '.join(command)) - if stdout: - message_parts.append(' stdout:') - message_parts.extend( - ' %s' % line for line in stdout.splitlines()) - if stderr: - message_parts.append(' stderr:') - message_parts.extend( - ' %s' % line for line in stderr.splitlines()) - - super(AvdException, self).__init__('\n'.join(message_parts)) - - -def _Load(avd_proto_path): - """Loads an Avd proto from a textpb file at the given path. - - Should not be called outside of this module. - - Args: - avd_proto_path: path to a textpb file containing an Avd message. - """ - with open(avd_proto_path) as avd_proto_file: - return text_format.Merge(avd_proto_file.read(), avd_pb2.Avd()) - - -class _AvdManagerAgent(object): - """Private utility for interacting with avdmanager.""" - - def __init__(self, avd_home, sdk_root): - """Create an _AvdManagerAgent. - - Args: - avd_home: path to ANDROID_AVD_HOME directory. - Typically something like /path/to/dir/.android/avd - sdk_root: path to SDK root directory. - """ - self._avd_home = avd_home - self._sdk_root = sdk_root - - self._env = dict(os.environ) - - # avdmanager, like many tools that have evolved from `android` - # (http://bit.ly/2m9JiTx), uses toolsdir to find the SDK root. - # Pass avdmanager a fake directory under the directory in which - # we install the system images s.t. avdmanager can find the - # system images. - fake_tools_dir = os.path.join( - self._sdk_root, - 'non-existent-tools') - self._env.update({ - 'ANDROID_AVD_HOME': self._avd_home, - 'AVDMANAGER_OPTS': - '-Dcom.android.sdkmanager.toolsdir=%s' % fake_tools_dir, - }) - - def Create(self, avd_name, system_image, force=False): - """Call `avdmanager create`. - - Args: - avd_name: name of the AVD to create. - system_image: system image to use for the AVD. - force: whether to force creation, overwriting any existing - AVD with the same name. - """ - create_cmd = [ - _DEFAULT_AVDMANAGER_PATH, - '-v', - 'create', - 'avd', - '-n', avd_name, - '-k', system_image, - ] - if force: - create_cmd += ['--force'] - - create_proc = cmd_helper.Popen( - create_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, env=self._env) - output, error = create_proc.communicate(input='\n') - if create_proc.returncode != 0: - raise AvdException( - 'AVD creation failed', - command=create_cmd, - stdout=output, - stderr=error) - - for line in output.splitlines(): - logging.info(' %s', line) - - def Delete(self, avd_name): - """Call `avdmanager delete`. - - Args: - avd_name: name of the AVD to delete. - """ - delete_cmd = [ - _DEFAULT_AVDMANAGER_PATH, - '-v', - 'delete', - 'avd', - '-n', avd_name, - ] - try: - for line in cmd_helper.IterCmdOutputLines(delete_cmd, env=self._env): - logging.info(' %s', line) - except subprocess.CalledProcessError as e: - raise AvdException( - 'AVD deletion failed: %s' % str(e), - command=delete_cmd) - - -class AvdConfig(object): - """Represents a particular AVD configuration. - - This class supports creation, installation, and execution of an AVD - from a given Avd proto message, as defined in - //tools/android/avd/proto/avd.proto. - """ - - def __init__(self, avd_proto_path): - """Create an AvdConfig object. - - Args: - avd_proto_path: path to a textpb file containing an Avd message. - """ - self._config = _Load(avd_proto_path) - - self._emulator_home = os.path.join( - _SRC_ROOT, self._config.avd_package.dest_path) - self._emulator_sdk_root = os.path.join( - _SRC_ROOT, self._config.emulator_package.dest_path) - self._emulator_path = os.path.join( - self._emulator_sdk_root, 'emulator', 'emulator') - - self._initialized = False - self._initializer_lock = threading.Lock() - - def Create(self, force=False, snapshot=False, keep=False, - cipd_json_output=None): - """Create an instance of the AVD CIPD package. - - This method: - - installs the requisite system image - - creates the AVD - - modifies the AVD's ini files to support running chromium tests - in chromium infrastructure - - optionally starts & stops the AVD for snapshotting (default no) - - creates and uploads an instance of the AVD CIPD package - - optionally deletes the AVD (default yes) - - Args: - force: bool indicating whether to force create the AVD. - snapshot: bool indicating whether to snapshot the AVD before creating - the CIPD package. - keep: bool indicating whether to keep the AVD after creating - the CIPD package. - cipd_json_output: string path to pass to `cipd create` via -json-output. - """ - logging.info('Installing required packages.') - self.Install(packages=[ - self._config.emulator_package, - self._config.system_image_package, - ]) - - android_avd_home = os.path.join(self._emulator_home, 'avd') - - if not os.path.exists(android_avd_home): - os.makedirs(android_avd_home) - - avd_manager = _AvdManagerAgent( - avd_home=android_avd_home, - sdk_root=self._emulator_sdk_root) - - logging.info('Creating AVD.') - avd_manager.Create( - avd_name=self._config.avd_name, - system_image=self._config.system_image_name, - force=force) - - try: - logging.info('Modifying AVD configuration.') - - root_ini = os.path.join( - android_avd_home, '%s.ini' % self._config.avd_name) - avd_dir = os.path.join( - android_avd_home, '%s.avd' % self._config.avd_name) - config_ini = os.path.join(avd_dir, 'config.ini') - - with open(root_ini, 'a') as root_ini_file: - root_ini_file.write('path.rel=avd/%s.avd\n' % self._config.avd_name) - - with open(config_ini, 'a') as config_ini_file: - config_ini_file.write('disk.dataPartition.size=4G\n') - - # Start & stop the AVD. - self._Initialize() - instance = _AvdInstance( - self._emulator_path, self._config.avd_name, self._emulator_home) - instance.Start(read_only=not snapshot) - device_utils.DeviceUtils(instance.serial).WaitUntilFullyBooted( - timeout=180, retries=0) - instance.Stop() - - package_def_content = { - 'package': self._config.avd_package.package_name, - 'root': self._emulator_home, - 'install_mode': 'copy', - 'data': [ - {'dir': os.path.relpath(avd_dir, self._emulator_home)}, - {'file': os.path.relpath(root_ini, self._emulator_home)}, - ], - } - - logging.info('Creating AVD CIPD package.') - logging.debug('ensure file content: %s', - json.dumps(package_def_content, indent=2)) - - with tempfile_ext.TemporaryFileName(suffix='.json') as package_def_path: - with open(package_def_path, 'w') as package_def_file: - json.dump(package_def_content, package_def_file) - - logging.info(' %s', self._config.avd_package.package_name) - cipd_create_cmd = [ - 'cipd', 'create', '-pkg-def', package_def_path, - ] - if cipd_json_output: - cipd_create_cmd.extend([ - '-json-output', cipd_json_output, - ]) - try: - for line in cmd_helper.IterCmdOutputLines(cipd_create_cmd): - logging.info(' %s', line) - except subprocess.CalledProcessError as e: - raise AvdException( - 'CIPD package creation failed: %s' % str(e), - command=cipd_create_cmd) - - finally: - if not keep: - logging.info('Deleting AVD.') - avd_manager.Delete(avd_name=self._config.avd_name) - - def Install(self, packages=_ALL_PACKAGES): - """Installs the requested CIPD packages. - - Returns: None - Raises: AvdException on failure to install. - """ - pkgs_by_dir = {} - if packages is _ALL_PACKAGES: - packages = [ - self._config.avd_package, - self._config.emulator_package, - self._config.system_image_package, - ] - for pkg in packages: - if not pkg.dest_path in pkgs_by_dir: - pkgs_by_dir[pkg.dest_path] = [] - pkgs_by_dir[pkg.dest_path].append(pkg) - - for pkg_dir, pkgs in pkgs_by_dir.iteritems(): - logging.info('Installing packages in %s', pkg_dir) - cipd_root = os.path.join(_SRC_ROOT, pkg_dir) - if not os.path.exists(cipd_root): - os.makedirs(cipd_root) - ensure_path = os.path.join(cipd_root, '.ensure') - with open(ensure_path, 'w') as ensure_file: - # Make CIPD ensure that all files are present, even if - # it thinks the package is installed. - ensure_file.write('$ParanoidMode CheckPresence\n\n') - for pkg in pkgs: - ensure_file.write('%s %s\n' % (pkg.package_name, pkg.version)) - logging.info(' %s %s', pkg.package_name, pkg.version) - ensure_cmd = [ - 'cipd', 'ensure', '-ensure-file', ensure_path, '-root', cipd_root, - ] - try: - for line in cmd_helper.IterCmdOutputLines(ensure_cmd): - logging.info(' %s', line) - except subprocess.CalledProcessError as e: - raise AvdException( - 'Failed to install CIPD package %s: %s' % ( - pkg.package_name, str(e)), - command=ensure_cmd) - - # The emulator requires that some files are writable. - for dirname, _, filenames in os.walk(self._emulator_home): - for f in filenames: - path = os.path.join(dirname, f) - if (os.lstat(path).st_mode & - (stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) == stat.S_IRUSR): - os.chmod(path, stat.S_IRUSR | stat.S_IWUSR) - - def _Initialize(self): - if self._initialized: - return - - with self._initializer_lock: - if self._initialized: - return - - # Emulator start-up looks for the adb daemon. Make sure it's running. - adb_wrapper.AdbWrapper.StartServer() - - # Emulator start-up tries to check for the SDK root by looking for - # platforms/ and platform-tools/. Ensure they exist. - # See http://bit.ly/2YAkyFE for context. - required_dirs = [ - os.path.join(self._emulator_sdk_root, 'platforms'), - os.path.join(self._emulator_sdk_root, 'platform-tools'), - ] - for d in required_dirs: - if not os.path.exists(d): - os.makedirs(d) - - def CreateInstance(self): - """Creates an AVD instance without starting it. - - Returns: - An _AvdInstance. - """ - self._Initialize() - return _AvdInstance( - self._emulator_path, self._config.avd_name, self._emulator_home) - - def StartInstance(self): - """Starts an AVD instance. - - Returns: - An _AvdInstance. - """ - instance = self.CreateInstance() - instance.Start() - return instance - - -class _AvdInstance(object): - """Represents a single running instance of an AVD. - - This class should only be created directly by AvdConfig.StartInstance, - but its other methods can be freely called. - """ - - def __init__(self, emulator_path, avd_name, emulator_home): - """Create an _AvdInstance object. - - Args: - emulator_path: path to the emulator binary. - avd_name: name of the AVD to run. - emulator_home: path to the emulator home directory. - """ - self._avd_name = avd_name - self._emulator_home = emulator_home - self._emulator_path = emulator_path - self._emulator_proc = None - self._emulator_serial = None - self._sink = None - - def __str__(self): - return '%s|%s' % (self._avd_name, (self._emulator_serial or id(self))) - - def Start(self, read_only=True): - """Starts the emulator running an instance of the given AVD.""" - with tempfile_ext.TemporaryFileName() as socket_path, (contextlib.closing( - socket.socket(socket.AF_UNIX))) as sock: - sock.bind(socket_path) - emulator_cmd = [ - self._emulator_path, - '-avd', - self._avd_name, - '-report-console', - 'unix:%s' % socket_path, - '-no-window' - ] - if read_only: - emulator_cmd += [ - '-read-only', - ] - emulator_env = {} - if self._emulator_home: - emulator_env['ANDROID_EMULATOR_HOME'] = self._emulator_home - sock.listen(1) - - logging.info('Starting emulator.') - - # TODO(jbudorick): Add support for logging emulator stdout & stderr at - # higher logging levels. - self._sink = open('/dev/null', 'w') - self._emulator_proc = cmd_helper.Popen( - emulator_cmd, - stdout=self._sink, - stderr=self._sink, - env=emulator_env) - - # Waits for the emulator to report its serial as requested via - # -report-console. See http://bit.ly/2lK3L18 for more. - def listen_for_serial(s): - logging.info('Waiting for connection from emulator.') - with contextlib.closing(s.accept()[0]) as conn: - val = conn.recv(1024) - return 'emulator-%d' % int(val) - - try: - self._emulator_serial = timeout_retry.Run( - listen_for_serial, timeout=30, retries=0, args=[sock]) - logging.info('%s started', self._emulator_serial) - except Exception as e: - self.Stop() - raise AvdException('Emulator failed to start: %s' % str(e)) - - def Stop(self): - """Stops the emulator process.""" - if self._emulator_proc: - if self._emulator_proc.poll() is None: - self._emulator_proc.terminate() - self._emulator_proc.wait() - self._emulator_proc = None - if self._sink: - self._sink.close() - self._sink = None - - @property - def serial(self): - return self._emulator_serial +from pylib.local.emulator import avd def main(raw_args): @@ -497,7 +42,7 @@ add_common_arguments(install_parser) def install_cmd(args): - AvdConfig(args.avd_config).Install() + avd.AvdConfig(args.avd_config).Install() return 0 install_parser.set_defaults(func=install_cmd) @@ -526,7 +71,7 @@ 'via -json-output.') def create_cmd(args): - AvdConfig(args.avd_config).Create( + avd.AvdConfig(args.avd_config).Create( force=args.force, snapshot=args.snapshot, keep=args.keep, cipd_json_output=args.cipd_json_output) return 0
diff --git a/tools/android/avd/avd.pydeps b/tools/android/avd/avd.pydeps deleted file mode 100644 index 3aa0c24..0000000 --- a/tools/android/avd/avd.pydeps +++ /dev/null
@@ -1,71 +0,0 @@ -# Generated by running: -# build/print_python_deps.py --root tools/android/avd --output tools/android/avd/avd.pydeps tools/android/avd/avd.py -../../../build/android/devil_chromium.py -../../../build/android/pylib/__init__.py -../../../build/android/pylib/constants/__init__.py -../../../build/android/pylib/constants/host_paths.py -../../../third_party/catapult/common/py_utils/py_utils/__init__.py -../../../third_party/catapult/common/py_utils/py_utils/cloud_storage.py -../../../third_party/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py -../../../third_party/catapult/common/py_utils/py_utils/lock.py -../../../third_party/catapult/common/py_utils/py_utils/tempfile_ext.py -../../../third_party/catapult/dependency_manager/dependency_manager/__init__.py -../../../third_party/catapult/dependency_manager/dependency_manager/archive_info.py -../../../third_party/catapult/dependency_manager/dependency_manager/base_config.py -../../../third_party/catapult/dependency_manager/dependency_manager/cloud_storage_info.py -../../../third_party/catapult/dependency_manager/dependency_manager/dependency_info.py -../../../third_party/catapult/dependency_manager/dependency_manager/dependency_manager_util.py -../../../third_party/catapult/dependency_manager/dependency_manager/exceptions.py -../../../third_party/catapult/dependency_manager/dependency_manager/local_path_info.py -../../../third_party/catapult/dependency_manager/dependency_manager/manager.py -../../../third_party/catapult/dependency_manager/dependency_manager/uploader.py -../../../third_party/catapult/devil/devil/__init__.py -../../../third_party/catapult/devil/devil/android/__init__.py -../../../third_party/catapult/devil/devil/android/apk_helper.py -../../../third_party/catapult/devil/devil/android/constants/__init__.py -../../../third_party/catapult/devil/devil/android/constants/chrome.py -../../../third_party/catapult/devil/devil/android/constants/file_system.py -../../../third_party/catapult/devil/devil/android/decorators.py -../../../third_party/catapult/devil/devil/android/device_blacklist.py -../../../third_party/catapult/devil/devil/android/device_errors.py -../../../third_party/catapult/devil/devil/android/device_signal.py -../../../third_party/catapult/devil/devil/android/device_temp_file.py -../../../third_party/catapult/devil/devil/android/device_utils.py -../../../third_party/catapult/devil/devil/android/install_commands.py -../../../third_party/catapult/devil/devil/android/logcat_monitor.py -../../../third_party/catapult/devil/devil/android/md5sum.py -../../../third_party/catapult/devil/devil/android/ndk/__init__.py -../../../third_party/catapult/devil/devil/android/ndk/abis.py -../../../third_party/catapult/devil/devil/android/sdk/__init__.py -../../../third_party/catapult/devil/devil/android/sdk/aapt.py -../../../third_party/catapult/devil/devil/android/sdk/adb_wrapper.py -../../../third_party/catapult/devil/devil/android/sdk/build_tools.py -../../../third_party/catapult/devil/devil/android/sdk/bundletool.py -../../../third_party/catapult/devil/devil/android/sdk/intent.py -../../../third_party/catapult/devil/devil/android/sdk/keyevent.py -../../../third_party/catapult/devil/devil/android/sdk/split_select.py -../../../third_party/catapult/devil/devil/android/sdk/version_codes.py -../../../third_party/catapult/devil/devil/android/tools/__init__.py -../../../third_party/catapult/devil/devil/android/tools/script_common.py -../../../third_party/catapult/devil/devil/base_error.py -../../../third_party/catapult/devil/devil/constants/__init__.py -../../../third_party/catapult/devil/devil/constants/exit_codes.py -../../../third_party/catapult/devil/devil/devil_env.py -../../../third_party/catapult/devil/devil/utils/__init__.py -../../../third_party/catapult/devil/devil/utils/cmd_helper.py -../../../third_party/catapult/devil/devil/utils/host_utils.py -../../../third_party/catapult/devil/devil/utils/lazy/__init__.py -../../../third_party/catapult/devil/devil/utils/lazy/weak_constant.py -../../../third_party/catapult/devil/devil/utils/logging_common.py -../../../third_party/catapult/devil/devil/utils/lsusb.py -../../../third_party/catapult/devil/devil/utils/parallelizer.py -../../../third_party/catapult/devil/devil/utils/reraiser_thread.py -../../../third_party/catapult/devil/devil/utils/reset_usb.py -../../../third_party/catapult/devil/devil/utils/run_tests_helper.py -../../../third_party/catapult/devil/devil/utils/timeout_retry.py -../../../third_party/catapult/devil/devil/utils/watchdog_timer.py -../../../third_party/catapult/devil/devil/utils/zip_utils.py -../../../third_party/catapult/third_party/zipfile/zipfile_2_7_13.py -avd.py -proto/__init__.py -proto/avd_pb2.py
diff --git a/tools/android/avd/proto/avd_pb2.py b/tools/android/avd/proto/avd_pb2.py deleted file mode 100644 index 96bdac1..0000000 --- a/tools/android/avd/proto/avd_pb2.py +++ /dev/null
@@ -1,153 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: avd.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='avd.proto', - package='tools.android.avd.proto', - syntax='proto3', - serialized_pb=_b('\n\tavd.proto\x12\x17tools.android.avd.proto\"G\n\x0b\x43IPDPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x11\n\tdest_path\x18\x03 \x01(\t\"\xf1\x01\n\x03\x41vd\x12>\n\x10\x65mulator_package\x18\x01 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x42\n\x14system_image_package\x18\x02 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x19\n\x11system_image_name\x18\x03 \x01(\t\x12\x39\n\x0b\x61vd_package\x18\x04 \x01(\x0b\x32$.tools.android.avd.proto.CIPDPackage\x12\x10\n\x08\x61vd_name\x18\x05 \x01(\tb\x06proto3') -) -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - - - - -_CIPDPACKAGE = _descriptor.Descriptor( - name='CIPDPackage', - full_name='tools.android.avd.proto.CIPDPackage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='package_name', full_name='tools.android.avd.proto.CIPDPackage.package_name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='version', full_name='tools.android.avd.proto.CIPDPackage.version', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='dest_path', full_name='tools.android.avd.proto.CIPDPackage.dest_path', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=38, - serialized_end=109, -) - - -_AVD = _descriptor.Descriptor( - name='Avd', - full_name='tools.android.avd.proto.Avd', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='emulator_package', full_name='tools.android.avd.proto.Avd.emulator_package', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='system_image_package', full_name='tools.android.avd.proto.Avd.system_image_package', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='system_image_name', full_name='tools.android.avd.proto.Avd.system_image_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='avd_package', full_name='tools.android.avd.proto.Avd.avd_package', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - _descriptor.FieldDescriptor( - name='avd_name', full_name='tools.android.avd.proto.Avd.avd_name', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=112, - serialized_end=353, -) - -_AVD.fields_by_name['emulator_package'].message_type = _CIPDPACKAGE -_AVD.fields_by_name['system_image_package'].message_type = _CIPDPACKAGE -_AVD.fields_by_name['avd_package'].message_type = _CIPDPACKAGE -DESCRIPTOR.message_types_by_name['CIPDPackage'] = _CIPDPACKAGE -DESCRIPTOR.message_types_by_name['Avd'] = _AVD - -CIPDPackage = _reflection.GeneratedProtocolMessageType('CIPDPackage', (_message.Message,), dict( - DESCRIPTOR = _CIPDPACKAGE, - __module__ = 'avd_pb2' - # @@protoc_insertion_point(class_scope:tools.android.avd.proto.CIPDPackage) - )) -_sym_db.RegisterMessage(CIPDPackage) - -Avd = _reflection.GeneratedProtocolMessageType('Avd', (_message.Message,), dict( - DESCRIPTOR = _AVD, - __module__ = 'avd_pb2' - # @@protoc_insertion_point(class_scope:tools.android.avd.proto.Avd) - )) -_sym_db.RegisterMessage(Avd) - - -# @@protoc_insertion_point(module_scope)
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 8bde3e0..56398c3 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -614,6 +614,7 @@ 'Win x64 Builder': 'gpu_tests_release_bot_minimal_symbols', 'Win x64 Builder (dbg)': 'gpu_tests_debug_bot', 'Windows deterministic': 'release_bot_x86_minimal_symbols', + 'win-celab-builder-rel': 'celab_release_bot', }, 'internal.client.kitchensync': { @@ -899,6 +900,7 @@ 'win10_chromium_x64_rel_ng_exp': 'release_trybot', 'win-annotator-rel': 'release_trybot', 'win-asan': 'asan_clang_fuzzer_static_v8_heap_minimal_symbols_release', + 'win-celab-try-rel': 'celab_release_bot', 'win-jumbo-rel': 'jumbo_large_chunks_release_bot_compile_only', 'win-libfuzzer-asan-rel': 'libfuzzer_windows_asan_release_trybot', 'win7-rel': 'gpu_tests_release_trybot_x86_resource_whitelisting', @@ -1265,6 +1267,10 @@ 'cast', 'cast_audio', 'release_trybot', ], + 'celab_release_bot': [ + 'release_bot', 'minimal_symbols' + ], + 'cfi_full_cfi_icall_cfi_diag_recover_release_static': [ 'cfi_full', 'cfi_icall', 'cfi_diag', 'cfi_recover', 'thin_lto', 'release', 'static', ],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 8fdd729..01c5598 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -36776,6 +36776,7 @@ <int value="317432596" label="DisplayLocking:disabled"/> <int value="319683583" label="ContentSuggestionsDebugLog:enabled"/> <int value="320121752" label="DelegateOverscrollSwipes:disabled"/> + <int value="321366101" label="WebXRARDOMOverlay:enabled"/> <int value="323605372" label="ui-disable-compositor-animation-timelines"/> <int value="324060906" label="enable-experimental-accessibility-language-detection"/> @@ -36901,6 +36902,7 @@ <int value="477967119" label="enable-unified-media-pipeline"/> <int value="479906041" label="RunAllFlashInAllowMode:disabled"/> <int value="480544447" label="NonValidatingReloadOnRefreshContentV2:enabled"/> + <int value="480677983" label="WebXRARDOMOverlay:disabled"/> <int value="481506759" label="ServiceWorkerScriptStreaming:enabled"/> <int value="482232604" label="PercentBasedScrolling:enabled"/> <int value="492113129" label="ExperimentalAppBanners:enabled"/> @@ -53073,6 +53075,7 @@ <int value="3" label="User dismissed the Safety Tip with the esc key"/> <int value="4" label="User dismissed the Safety Tip with the close button"/> <int value="5" label="User dismissed the Safety Tip with the ignore button"/> + <int value="6" label="User opened help center"/> </enum> <enum name="SafetyTipStatus">
diff --git a/tools/metrics/histograms/extract_histograms.py b/tools/metrics/histograms/extract_histograms.py index 0f59390..f45619565 100644 --- a/tools/metrics/histograms/extract_histograms.py +++ b/tools/metrics/histograms/extract_histograms.py
@@ -521,7 +521,12 @@ suffix_nodes = histogram_suffixes.getElementsByTagName(suffix_tag) suffix_labels = {} for suffix in suffix_nodes: - suffix_labels[suffix.getAttribute('name')] = suffix.getAttribute('label') + suffix_name = suffix.getAttribute('name') + if not suffix.hasAttribute('label'): + logging.error('suffix %s in histogram_suffixes %s should have a label', + suffix_name, name) + have_errors = True + suffix_labels[suffix_name] = suffix.getAttribute('label') # Find owners list under current histogram_suffixes tag. owners, _ = _ExtractOwners(histogram_suffixes)
diff --git a/tools/metrics/histograms/extract_histograms_test.py b/tools/metrics/histograms/extract_histograms_test.py index cc2afe3..7a69dbf 100644 --- a/tools/metrics/histograms/extract_histograms_test.py +++ b/tools/metrics/histograms/extract_histograms_test.py
@@ -481,6 +481,34 @@ self.assertEquals('This is a summary with & and " and \'', hists['Test.Histogram']['summary']) + def testNewSuffixWithoutLabel(self): + suffix_without_label = xml.dom.minidom.parseString(""" +<histogram-configuration> +<histogram_suffixes_list> + <histogram_suffixes name="Suffixes" separator="."> + <suffix base="true" name="BaseSuffix"/> + </histogram_suffixes> +</histogram_suffixes_list> +</histogram-configuration> +""") + _, have_errors = extract_histograms.ExtractHistogramsFromDom( + suffix_without_label) + self.assertTrue(have_errors) + + def testNewSuffixWithLabel(self): + suffix_with_label = xml.dom.minidom.parseString(""" +<histogram-configuration> +<histogram_suffixes_list> + <histogram_suffixes name="Suffixes" separator="."> + <suffix base="true" name="BaseSuffix" label="Base"/> + </histogram_suffixes> +</histogram_suffixes_list> +</histogram-configuration> +""") + have_errors = extract_histograms. _UpdateHistogramsWithSuffixes( + suffix_with_label, {}) + self.assertFalse(have_errors) + if __name__ == "__main__": logging.basicConfig(level=logging.ERROR + 1) unittest.main()
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 379f755..73e9681 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -163346,9 +163346,9 @@ </histogram_suffixes> <histogram_suffixes name="AccountManagerMigrationSteps" separator="."> - <suffix name="ArcAccountsMigration"/> - <suffix name="ContentAreaAccountsMigration"/> - <suffix name="DeviceAccountMigration"/> + <suffix name="ArcAccountsMigration" label=""/> + <suffix name="ContentAreaAccountsMigration" label=""/> + <suffix name="DeviceAccountMigration" label=""/> <affected-histogram name="AccountManager.Migrations.StepResult"/> </histogram_suffixes> @@ -163388,8 +163388,8 @@ </histogram_suffixes> <histogram_suffixes name="AdapterDecision" separator="." ordering="prefix,2"> - <suffix name="BrightnessChange"/> - <suffix name="NoBrightnessChange"/> + <suffix name="BrightnessChange" label=""/> + <suffix name="NoBrightnessChange" label=""/> <affected-histogram name="AutoScreenBrightness.AdapterDecisionAtUserChange.Brighten.AlsDelta"/> <affected-histogram @@ -163726,8 +163726,8 @@ <histogram_suffixes name="AlsBrightnessDirection" separator="." ordering="prefix,2"> - <suffix name="Brighten"/> - <suffix name="Darken"/> + <suffix name="Brighten" label=""/> + <suffix name="Darken" label=""/> <affected-histogram name="AutoScreenBrightness.AdapterDecisionAtUserChange.AlsDelta"/> <affected-histogram @@ -163812,14 +163812,14 @@ </histogram_suffixes> <histogram_suffixes name="AndroidDownloadTypes" separator="."> - <suffix name="Audio"/> - <suffix name="Document"/> - <suffix name="Image"/> - <suffix name="OfflinePage"/> - <suffix name="Other"/> - <suffix name="PrefetchedOfflinePage"/> - <suffix name="Total"/> - <suffix name="Video"/> + <suffix name="Audio" label=""/> + <suffix name="Document" label=""/> + <suffix name="Image" label=""/> + <suffix name="OfflinePage" label=""/> + <suffix name="Other" label=""/> + <suffix name="PrefetchedOfflinePage" label=""/> + <suffix name="Total" label=""/> + <suffix name="Video" label=""/> <affected-histogram name="Android.DownloadManager.InitialCount"/> <affected-histogram name="Android.DownloadManager.InitialCount.Viewed"/> <affected-histogram @@ -163911,16 +163911,16 @@ </histogram_suffixes> <histogram_suffixes name="AndroidGATTEvents" separator="."> - <suffix name="onCharacteristicRead.Status"/> - <suffix name="onCharacteristicWrite.Status"/> + <suffix name="onCharacteristicRead.Status" label=""/> + <suffix name="onCharacteristicWrite.Status" label=""/> <suffix name="onConnectionStateChange.Status.Connected" label="While Connected"/> <suffix name="onConnectionStateChange.Status.Disconnected" label="While Disonnected"/> <suffix name="onConnectionStateChange.Status.InvalidState" label="While InvalidState"/> - <suffix name="onDescriptorRead.Status"/> - <suffix name="onDescriptorWrite.Status"/> + <suffix name="onDescriptorRead.Status" label=""/> + <suffix name="onDescriptorWrite.Status" label=""/> <suffix name="onServicesDiscovered.Status.Connected" label="While Connected"/> <suffix name="onServicesDiscovered.Status.Disconnected" label="While Disconnected"/> @@ -163942,23 +163942,23 @@ </histogram_suffixes> <histogram_suffixes name="AndroidTabPersistentStoreTime" separator="."> - <suffix name="CleanupAllEncryptedTime"> + <suffix name="CleanupAllEncryptedTime" label=""> <obsolete> Original code deleted in a refactoring. </obsolete> </suffix> - <suffix name="LoadStateInternalPrefetchTime"/> - <suffix name="LoadStateInternalTime"/> - <suffix name="LoadStateTime"/> - <suffix name="MergeStateInternalFetchTime"/> - <suffix name="MergeStateInternalTime"/> - <suffix name="ReadMergedStateTime"/> - <suffix name="ReadSavedStateTime"/> - <suffix name="RestoreTabPrefetchTime"/> - <suffix name="RestoreTabTime"/> - <suffix name="SaveListTime"/> - <suffix name="SaveStateTime"/> - <suffix name="SaveTabsTime"/> + <suffix name="LoadStateInternalPrefetchTime" label=""/> + <suffix name="LoadStateInternalTime" label=""/> + <suffix name="LoadStateTime" label=""/> + <suffix name="MergeStateInternalFetchTime" label=""/> + <suffix name="MergeStateInternalTime" label=""/> + <suffix name="ReadMergedStateTime" label=""/> + <suffix name="ReadSavedStateTime" label=""/> + <suffix name="RestoreTabPrefetchTime" label=""/> + <suffix name="RestoreTabTime" label=""/> + <suffix name="SaveListTime" label=""/> + <suffix name="SaveStateTime" label=""/> + <suffix name="SaveTabsTime" label=""/> <affected-histogram name="Android.StrictMode.TabPersistentStore"/> </histogram_suffixes> @@ -163979,14 +163979,14 @@ </histogram_suffixes> <histogram_suffixes name="AppListState" separator="."> - <suffix name="Closed"/> - <suffix name="FullscreenAllApps"/> - <suffix name="FullscreenSearch"/> - <suffix name="Half"/> - <suffix name="HomecherAllApps"/> - <suffix name="HomecherClosed"/> - <suffix name="HomecherSearch"/> - <suffix name="Peeking"/> + <suffix name="Closed" label=""/> + <suffix name="FullscreenAllApps" label=""/> + <suffix name="FullscreenSearch" label=""/> + <suffix name="Half" label=""/> + <suffix name="HomecherAllApps" label=""/> + <suffix name="HomecherClosed" label=""/> + <suffix name="HomecherSearch" label=""/> + <suffix name="Peeking" label=""/> <affected-histogram name="Apps.AppListAppLaunchedV2"/> </histogram_suffixes> @@ -164066,8 +164066,8 @@ </histogram_suffixes> <histogram_suffixes name="AsyncDNSPref" separator="_"> - <suffix name="Disabled"/> - <suffix name="Enabled"/> + <suffix name="Disabled" label=""/> + <suffix name="Enabled" label=""/> <affected-histogram name="AsyncDNS.PrefDefaultSource"/> <affected-histogram name="AsyncDNS.PrefSource"/> </histogram_suffixes> @@ -164084,11 +164084,11 @@ <obsolete> Deprecated 2016/03. The async set-as-default experiments are finished. </obsolete> - <suffix name="Abandoned"/> - <suffix name="Failure"/> - <suffix name="NoErrorsNotDefault"/> - <suffix name="Retry"/> - <suffix name="Success"/> + <suffix name="Abandoned" label=""/> + <suffix name="Failure" label=""/> + <suffix name="NoErrorsNotDefault" label=""/> + <suffix name="Retry" label=""/> + <suffix name="Success" label=""/> <affected-histogram name="DefaultBrowser.AsyncSetAsDefault.Duration"/> <affected-histogram name="DefaultBrowser.SetDefaultAsyncDuration"/> </histogram_suffixes> @@ -164598,44 +164598,44 @@ </histogram_suffixes> <histogram_suffixes name="BlinkCanvasDrawImageSizeType" separator="."> - <suffix name="Canvas.CPU"/> - <suffix name="Canvas.GPU"/> - <suffix name="CssImage"/> - <suffix name="ImageBitmap"/> - <suffix name="ImageElement"/> - <suffix name="OffscreenCanvas.CPU"/> - <suffix name="OffscreenCanvas.GPU"/> - <suffix name="SVG"/> - <suffix name="Unknown"/> - <suffix name="Video"/> + <suffix name="Canvas.CPU" label=""/> + <suffix name="Canvas.GPU" label=""/> + <suffix name="CssImage" label=""/> + <suffix name="ImageBitmap" label=""/> + <suffix name="ImageElement" label=""/> + <suffix name="OffscreenCanvas.CPU" label=""/> + <suffix name="OffscreenCanvas.GPU" label=""/> + <suffix name="SVG" label=""/> + <suffix name="Unknown" label=""/> + <suffix name="Video" label=""/> <affected-histogram name="Blink.Canvas.DrawImage.SqrtNumberOfPixels"/> </histogram_suffixes> <histogram_suffixes name="BlinkCanvasDrawImageType" separator="."> - <suffix base="true" name="Canvas"/> - <suffix base="true" name="CssImage"/> - <suffix base="true" name="ImageBitmap"/> - <suffix base="true" name="ImageElement"/> - <suffix base="true" name="OffscreenCanvas"/> - <suffix base="true" name="Others"> + <suffix base="true" name="Canvas" label=""/> + <suffix base="true" name="CssImage" label=""/> + <suffix base="true" name="ImageBitmap" label=""/> + <suffix base="true" name="ImageElement" label=""/> + <suffix base="true" name="OffscreenCanvas" label=""/> + <suffix base="true" name="Others" label=""> <obsolete> Deprecated 10/2018 with the addition of CssImage and Unknown. </obsolete> </suffix> - <suffix base="true" name="SVG"/> - <suffix base="true" name="Unknown"/> - <suffix base="true" name="Video"/> + <suffix base="true" name="SVG" label=""/> + <suffix base="true" name="Unknown" label=""/> + <suffix base="true" name="Video" label=""/> <affected-histogram name="Blink.Canvas.DrawImage.Duration"/> </histogram_suffixes> <histogram_suffixes name="BlinkCanvasDurationBySource" separator="."> - <suffix name="CPU"/> - <suffix name="DisplayList"> + <suffix name="CPU" label=""/> + <suffix name="DisplayList" label=""> <obsolete> Deprecated 11/2017 with removal of Display List Canvas 2D mode. </obsolete> </suffix> - <suffix name="GPU"/> + <suffix name="GPU" label=""/> <affected-histogram name="Blink.Canvas.DrawImage.Duration.Canvas"/> <affected-histogram name="Blink.Canvas.DrawImage.Duration.CssImage"/> <affected-histogram name="Blink.Canvas.DrawImage.Duration.ImageBitmap"/> @@ -164649,28 +164649,28 @@ </histogram_suffixes> <histogram_suffixes name="BlinkCanvasOffscreenCommitType" separator="."> - <suffix name="GPUCanvasGPUCompositingMain"/> - <suffix name="GPUCanvasGPUCompositingWorker"/> - <suffix name="GPUCanvasSoftwareCompositingMain"/> - <suffix name="GPUCanvasSoftwareCompositingWorker"/> - <suffix name="SoftwareCanvasGPUCompositingMain"/> - <suffix name="SoftwareCanvasGPUCompositingWorker"/> - <suffix name="SoftwareCanvasSoftwareCompositingMain"/> - <suffix name="SoftwareCanvasSoftwareCompositingWorker"/> + <suffix name="GPUCanvasGPUCompositingMain" label=""/> + <suffix name="GPUCanvasGPUCompositingWorker" label=""/> + <suffix name="GPUCanvasSoftwareCompositingMain" label=""/> + <suffix name="GPUCanvasSoftwareCompositingWorker" label=""/> + <suffix name="SoftwareCanvasGPUCompositingMain" label=""/> + <suffix name="SoftwareCanvasGPUCompositingWorker" label=""/> + <suffix name="SoftwareCanvasSoftwareCompositingMain" label=""/> + <suffix name="SoftwareCanvasSoftwareCompositingWorker" label=""/> <affected-histogram name="Blink.Canvas.OffscreenCommitTimer"/> </histogram_suffixes> <histogram_suffixes name="BlinkCanvasRasterDurationType" separator="."> - <suffix name="Accelerated.CPU"/> - <suffix name="Accelerated.GPU"/> - <suffix name="Accelerated.Total"/> - <suffix name="Unaccelerated"/> + <suffix name="Accelerated.CPU" label=""/> + <suffix name="Accelerated.GPU" label=""/> + <suffix name="Accelerated.Total" label=""/> + <suffix name="Unaccelerated" label=""/> <affected-histogram name="Blink.Canvas.RasterDuration"/> </histogram_suffixes> <histogram_suffixes name="BlinkCanvasToBlobIdleEncodAndDelayType" separator="."> - <suffix name="JPEG"/> - <suffix name="PNG"/> + <suffix name="JPEG" label=""/> + <suffix name="PNG" label=""/> <affected-histogram name="Blink.Canvas.ToBlob.CompleteEncodingDelay"/> <affected-histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration"> <obsolete> @@ -164681,50 +164681,50 @@ </histogram_suffixes> <histogram_suffixes name="BlinkCanvasToBlobType" separator="."> - <suffix name="JPEG"/> - <suffix name="PNG"/> - <suffix name="WEBP"/> + <suffix name="JPEG" label=""/> + <suffix name="PNG" label=""/> + <suffix name="WEBP" label=""/> <affected-histogram name="Blink.Canvas.ToBlob.ScaledDuration"/> </histogram_suffixes> <histogram_suffixes name="BlinkCanvasToDataURLMimeType" separator="."> - <suffix name="BMP"> + <suffix name="BMP" label=""> <obsolete> Removed in Oct 2016 </obsolete> </suffix> - <suffix name="GIF"> + <suffix name="GIF" label=""> <obsolete> Removed in Oct 2016 </obsolete> </suffix> - <suffix name="ICON"> + <suffix name="ICON" label=""> <obsolete> Removed in Oct 2016 </obsolete> </suffix> - <suffix name="JPEG"/> - <suffix name="PNG"/> - <suffix name="TIFF"> + <suffix name="JPEG" label=""/> + <suffix name="PNG" label=""/> + <suffix name="TIFF" label=""> <obsolete> Removed in Oct 2016 </obsolete> </suffix> - <suffix name="Unknown"> + <suffix name="Unknown" label=""> <obsolete> Removed in Oct 2016 </obsolete> </suffix> - <suffix name="WEBP"/> + <suffix name="WEBP" label=""/> <affected-histogram name="Blink.Canvas.ToDataURLScaledDuration"/> </histogram_suffixes> <histogram_suffixes name="BlinkCompositingLayerCount" separator="."> - <suffix name="ActiveAnimation"/> - <suffix name="AssumedOverlap"/> - <suffix name="IndirectComposited"/> - <suffix name="Overlap"/> - <suffix name="TotalComposited"/> + <suffix name="ActiveAnimation" label=""/> + <suffix name="AssumedOverlap" label=""/> + <suffix name="IndirectComposited" label=""/> + <suffix name="Overlap" label=""/> + <suffix name="TotalComposited" label=""/> <affected-histogram name="Blink.Compositing.LayerPromotionCount"/> </histogram_suffixes> @@ -164807,8 +164807,8 @@ </histogram_suffixes> <histogram_suffixes name="BluetoothPairedStates" separator="."> - <suffix name="NotPaired"/> - <suffix name="Paired"/> + <suffix name="NotPaired" label=""/> + <suffix name="Paired" label=""/> <affected-histogram name="Bluetooth.ChromeOS.DeviceSelectionDuration.Settings"/> <affected-histogram @@ -164816,9 +164816,9 @@ </histogram_suffixes> <histogram_suffixes name="BluetoothTransportTypes" separator="."> - <suffix name="BLE"/> - <suffix name="Classic"/> - <suffix name="Dual"/> + <suffix name="BLE" label=""/> + <suffix name="Classic" label=""/> + <suffix name="Dual" label=""/> <affected-histogram name="Bluetooth.ChromeOS.DeviceSelectionDuration.Settings.NotPaired"/> <affected-histogram @@ -164829,16 +164829,16 @@ </histogram_suffixes> <histogram_suffixes name="BluetoothUISurfaces" separator="."> - <suffix name="Settings"/> - <suffix name="SystemTray"/> + <suffix name="Settings" label=""/> + <suffix name="SystemTray" label=""/> <affected-histogram name="Bluetooth.ChromeOS.DeviceSelectionDuration"/> <affected-histogram name="Bluetooth.ChromeOS.UserInitiatedReconnectionAttempt.Result"/> </histogram_suffixes> <histogram_suffixes name="BrowserRunningMode" separator="."> - <suffix name="FullBrowser"/> - <suffix name="ReducedMode"/> + <suffix name="FullBrowser" label=""/> + <suffix name="ReducedMode" label=""/> <affected-histogram name="Memory.BackgroundTask.Browser.PrivateMemoryFootprint"/> <affected-histogram @@ -165152,8 +165152,8 @@ </histogram_suffixes> <histogram_suffixes name="CertificateTransparencyProtocol" separator="."> - <suffix name="QUIC"/> - <suffix name="SSL"/> + <suffix name="QUIC" label=""/> + <suffix name="SSL" label=""/> <affected-histogram name="Net.CertificateTransparency.ConnectionComplianceStatus2"/> <affected-histogram @@ -165299,15 +165299,15 @@ </histogram_suffixes> <histogram_suffixes name="ChromeOS.Camera.JpegProcessMethod" separator="."> - <suffix name="Hardware"/> - <suffix name="Software"/> + <suffix name="Hardware" label=""/> + <suffix name="Software" label=""/> <affected-histogram name="ChromeOS.Camera.Jpeg.Latency"/> <affected-histogram name="ChromeOS.Camera.Jpeg.Resolution"/> </histogram_suffixes> <histogram_suffixes name="ChromeOS.Camera.JpegProcessType" separator="."> - <suffix name="Decode"/> - <suffix name="Encode"/> + <suffix name="Decode" label=""/> + <suffix name="Encode" label=""/> <affected-histogram name="ChromeOS.Camera.Jpeg.Latency.Hardware"/> <affected-histogram name="ChromeOS.Camera.Jpeg.Latency.Software"/> <affected-histogram name="ChromeOS.Camera.Jpeg.Resolution.Hardware"/> @@ -165330,9 +165330,9 @@ </histogram_suffixes> <histogram_suffixes name="ChromeOS.MachineIdRegen.AgeSeconds" separator="_"> - <suffix name="Network"/> - <suffix name="Periodic"/> - <suffix name="Unknown"/> + <suffix name="Network" label=""/> + <suffix name="Periodic" label=""/> + <suffix name="Unknown" label=""/> <affected-histogram name="ChromeOS.MachineIdRegen.AgeSeconds"/> </histogram_suffixes> @@ -165609,8 +165609,8 @@ <histogram_suffixes name="CompositorTimingHistoryProcess" separator="." ordering="prefix"> - <suffix name="Browser"/> - <suffix name="Renderer"/> + <suffix name="Browser" label=""/> + <suffix name="Renderer" label=""/> <affected-histogram name="Scheduling.BeginImplFrameLatency2"/> <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"/> <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"/> @@ -165626,8 +165626,8 @@ <histogram_suffixes name="CompositorTimingHistoryProcess2" separator="." ordering="prefix"> - <suffix name="Browser"/> - <suffix name="Renderer"/> + <suffix name="Browser" label=""/> + <suffix name="Renderer" label=""/> <affected-histogram name="Scheduling.ImageInvalidationUpdateDuration"/> </histogram_suffixes> @@ -165638,8 +165638,8 @@ an inefficient usage of UMA bandwidth. They have been replaced by new metrics of the same name with a "2" appended to them. </obsolete> - <suffix name="Browser"/> - <suffix name="Renderer"/> + <suffix name="Browser" label=""/> + <suffix name="Renderer" label=""/> <affected-histogram name="Scheduling.ActivateDuration"/> <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical"/> <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical"/> @@ -165741,13 +165741,13 @@ </histogram_suffixes> <histogram_suffixes name="ConnectionMigrationCause" separator="."> - <suffix name="OnMigrateBackToDefaultNetwork"/> - <suffix name="OnNetworkConnected"/> - <suffix name="OnNetworkDisconnected"/> - <suffix name="OnNetworkMadeDefault"/> - <suffix name="OnPathDegrading"/> - <suffix name="OnWriteError"/> - <suffix name="Unknown"/> + <suffix name="OnMigrateBackToDefaultNetwork" label=""/> + <suffix name="OnNetworkConnected" label=""/> + <suffix name="OnNetworkDisconnected" label=""/> + <suffix name="OnNetworkMadeDefault" label=""/> + <suffix name="OnPathDegrading" label=""/> + <suffix name="OnWriteError" label=""/> + <suffix name="Unknown" label=""/> <affected-histogram name="Net.QuicSession.ConnectionMigration"/> <affected-histogram name="Net.QuicSession.ConnectionMigrationProbeSuccess"/> <affected-histogram @@ -165758,8 +165758,8 @@ <obsolete> Deprecated 6/2019. No longer used. </obsolete> - <suffix name="Default"/> - <suffix name="Fallback"/> + <suffix name="Default" label=""/> + <suffix name="Fallback" label=""/> <affected-histogram name="ConnectivityDetector.Probe.HttpResponseCode"/> <affected-histogram name="ConnectivityDetector.Probe.Result"/> </histogram_suffixes> @@ -165782,8 +165782,8 @@ </histogram_suffixes> <histogram_suffixes name="ConnnectBackupJobs" separator="_"> - <suffix name="ConnectBackupJobsDisabled"/> - <suffix name="ConnectBackupJobsEnabled"/> + <suffix name="ConnectBackupJobsDisabled" label=""/> + <suffix name="ConnectBackupJobsEnabled" label=""/> <affected-histogram name="Net.PreconnectUtilization"/> <affected-histogram name="Net.PreconnectUtilization2"/> <affected-histogram name="PLT.Abandoned"/> @@ -166017,12 +166017,12 @@ </histogram_suffixes> <histogram_suffixes name="ContextualSearchQuickActionCategory" separator="."> - <suffix name="Address"/> - <suffix name="Email"/> - <suffix name="Event"/> - <suffix name="None"/> - <suffix name="Phone"/> - <suffix name="Website"/> + <suffix name="Address" label=""/> + <suffix name="Email" label=""/> + <suffix name="Event" label=""/> + <suffix name="None" label=""/> + <suffix name="Phone" label=""/> + <suffix name="Website" label=""/> <affected-histogram name="Search.ContextualSearchQuickActions.Clicked"/> <affected-histogram name="Search.ContextualSearchQuickActions.IntentResolution"/> @@ -166081,9 +166081,9 @@ </histogram_suffixes> <histogram_suffixes name="CrosFirstRunStep" separator=""> - <suffix name="AppList"/> - <suffix name="Help"/> - <suffix name="Tray"/> + <suffix name="AppList" label=""/> + <suffix name="Help" label=""/> + <suffix name="Tray" label=""/> <affected-histogram name="CrosFirstRun.TimeSpentOnStep"/> </histogram_suffixes> @@ -166097,105 +166097,105 @@ </histogram_suffixes> <histogram_suffixes name="CryptohomeAsyncDBusMethod" separator="."> - <suffix name="AsyncTpmAttestationCreateCertRequest"/> - <suffix name="AsyncTpmAttestationCreateEnrollRequest"/> - <suffix name="AsyncTpmAttestationEnroll"/> - <suffix name="AsyncTpmAttestationFinishCertRequest"/> - <suffix name="TpmAttestationRegisterKey"/> - <suffix name="TpmAttestationSignEnterpriseVaChallenge"/> - <suffix name="TpmAttestationSignSimpleChallenge"/> + <suffix name="AsyncTpmAttestationCreateCertRequest" label=""/> + <suffix name="AsyncTpmAttestationCreateEnrollRequest" label=""/> + <suffix name="AsyncTpmAttestationEnroll" label=""/> + <suffix name="AsyncTpmAttestationFinishCertRequest" label=""/> + <suffix name="TpmAttestationRegisterKey" label=""/> + <suffix name="TpmAttestationSignEnterpriseVaChallenge" label=""/> + <suffix name="TpmAttestationSignSimpleChallenge" label=""/> <affected-histogram name="Cryptohome.AsyncDBusRequest"/> <affected-histogram name="Cryptohome.AsyncDBusRequest.Inqueue"/> </histogram_suffixes> <histogram_suffixes name="CryptohomeClientDBusMethod" separator="."> - <suffix name="AddKeyEx"/> - <suffix name="AsyncDoesUsersExist"/> - <suffix name="AsyncMigrateKey"/> - <suffix name="AsyncMount"/> - <suffix name="AsyncMountGuest"/> - <suffix name="AsyncRemove"/> - <suffix name="AsyncRemoveTrackedSubdirectories"/> - <suffix name="AsyncTpmAttestationCreateCertRequest"/> - <suffix name="AsyncTpmAttestationCreateCertRequestByProfile"/> - <suffix name="AsyncTpmAttestationCreateEnrollRequest"/> - <suffix name="AsyncTpmAttestationCreateEnrollRequestNew"/> - <suffix name="AsyncTpmAttestationEnroll"/> - <suffix name="AsyncTpmAttestationEnrollNew"/> - <suffix name="AsyncTpmAttestationFinishCertRequest"/> - <suffix name="CheckKeyEx"/> - <suffix name="FinalizeBootLockbox"/> - <suffix name="FlushAndSignBootAttributes"/> - <suffix name="GetAccountDiskUsage"/> - <suffix name="GetBootAttribute"/> - <suffix name="GetCurrentSpaceForGid"/> - <suffix name="GetCurrentSpaceForUid"/> - <suffix name="GetEndorsementInfo"/> - <suffix name="GetFirmwareManagementParameters"/> - <suffix name="GetKeyDataEx"/> - <suffix name="GetLoginStatus"/> - <suffix name="GetSanitizedUsername"/> - <suffix name="GetStatusString"/> - <suffix name="GetSupportedKeyPolicies"/> - <suffix name="GetSystemSalt"/> - <suffix name="GetTpmStatus"/> - <suffix name="InstallAttributesCount"/> - <suffix name="InstallAttributesFinalize"/> - <suffix name="InstallAttributesGet"/> - <suffix name="InstallAttributesIsFirstInstall"/> - <suffix name="InstallAttributesIsInvalid"/> - <suffix name="InstallAttributesIsReady"/> - <suffix name="InstallAttributesIsSecure"/> - <suffix name="InstallAttributesSet"/> - <suffix name="IsMounted"/> - <suffix name="IsQuotaSupported"/> - <suffix name="MigrateKey"/> - <suffix name="MigrateKeyEx"/> - <suffix name="MigrateToDircrypto"/> - <suffix name="Mount"/> - <suffix name="MountEx"/> - <suffix name="MountGuest"/> - <suffix name="MountGuestEx"/> - <suffix name="NeedsDircryptoMigration"/> - <suffix name="Pkcs11GetTpmTokenInfo"/> - <suffix name="Pkcs11GetTpmTokenInfoForUser"/> - <suffix name="Pkcs11IsTpmTokenReady"/> - <suffix name="RemoveEx"/> - <suffix name="RemoveFirmwareManagementParameters"/> - <suffix name="RemoveKeyEx"/> - <suffix name="RemoveTrackedSubdirectories"/> - <suffix name="RenameCryptohome"/> - <suffix name="SetBootAttribute"/> - <suffix name="SetFirmwareManagementParameters"/> - <suffix name="SignBootLockbox"/> - <suffix name="TpmAttestationCreateCertRequest"/> - <suffix name="TpmAttestationCreateEnrollRequest"/> - <suffix name="TpmAttestationDeleteKeys"/> - <suffix name="TpmAttestationDoesKeyExist"/> - <suffix name="TpmAttestationEnroll"/> - <suffix name="TpmAttestationFinishCertRequest"/> - <suffix name="TpmAttestationGetCertificate"/> - <suffix name="TpmAttestationGetEnrollmentId"/> - <suffix name="TpmAttestationGetKeyPayload"/> - <suffix name="TpmAttestationGetPublicKey"/> - <suffix name="TpmAttestationRegisterKey"/> - <suffix name="TpmAttestationSetKeyPayload"/> - <suffix name="TpmAttestationSignEnterpriseChallenge"/> - <suffix name="TpmAttestationSignEnterpriseVaChallenge"/> - <suffix name="TpmAttestationSignSimpleChallenge"/> - <suffix name="TpmCanAttemptOwnership"/> - <suffix name="TpmClearStoredPassword"/> - <suffix name="TpmGetPassword"/> - <suffix name="TpmGetVersionStructured"/> - <suffix name="TpmIsAttestationEnrolled"/> - <suffix name="TpmIsAttestationPrepared"/> - <suffix name="TpmIsBeingOwned"/> - <suffix name="TpmIsEnabled"/> - <suffix name="TpmIsOwned"/> - <suffix name="TpmIsReady"/> - <suffix name="Unmount"/> - <suffix name="UpdateKeyEx"/> - <suffix name="VerifyBootLockbox"/> + <suffix name="AddKeyEx" label=""/> + <suffix name="AsyncDoesUsersExist" label=""/> + <suffix name="AsyncMigrateKey" label=""/> + <suffix name="AsyncMount" label=""/> + <suffix name="AsyncMountGuest" label=""/> + <suffix name="AsyncRemove" label=""/> + <suffix name="AsyncRemoveTrackedSubdirectories" label=""/> + <suffix name="AsyncTpmAttestationCreateCertRequest" label=""/> + <suffix name="AsyncTpmAttestationCreateCertRequestByProfile" label=""/> + <suffix name="AsyncTpmAttestationCreateEnrollRequest" label=""/> + <suffix name="AsyncTpmAttestationCreateEnrollRequestNew" label=""/> + <suffix name="AsyncTpmAttestationEnroll" label=""/> + <suffix name="AsyncTpmAttestationEnrollNew" label=""/> + <suffix name="AsyncTpmAttestationFinishCertRequest" label=""/> + <suffix name="CheckKeyEx" label=""/> + <suffix name="FinalizeBootLockbox" label=""/> + <suffix name="FlushAndSignBootAttributes" label=""/> + <suffix name="GetAccountDiskUsage" label=""/> + <suffix name="GetBootAttribute" label=""/> + <suffix name="GetCurrentSpaceForGid" label=""/> + <suffix name="GetCurrentSpaceForUid" label=""/> + <suffix name="GetEndorsementInfo" label=""/> + <suffix name="GetFirmwareManagementParameters" label=""/> + <suffix name="GetKeyDataEx" label=""/> + <suffix name="GetLoginStatus" label=""/> + <suffix name="GetSanitizedUsername" label=""/> + <suffix name="GetStatusString" label=""/> + <suffix name="GetSupportedKeyPolicies" label=""/> + <suffix name="GetSystemSalt" label=""/> + <suffix name="GetTpmStatus" label=""/> + <suffix name="InstallAttributesCount" label=""/> + <suffix name="InstallAttributesFinalize" label=""/> + <suffix name="InstallAttributesGet" label=""/> + <suffix name="InstallAttributesIsFirstInstall" label=""/> + <suffix name="InstallAttributesIsInvalid" label=""/> + <suffix name="InstallAttributesIsReady" label=""/> + <suffix name="InstallAttributesIsSecure" label=""/> + <suffix name="InstallAttributesSet" label=""/> + <suffix name="IsMounted" label=""/> + <suffix name="IsQuotaSupported" label=""/> + <suffix name="MigrateKey" label=""/> + <suffix name="MigrateKeyEx" label=""/> + <suffix name="MigrateToDircrypto" label=""/> + <suffix name="Mount" label=""/> + <suffix name="MountEx" label=""/> + <suffix name="MountGuest" label=""/> + <suffix name="MountGuestEx" label=""/> + <suffix name="NeedsDircryptoMigration" label=""/> + <suffix name="Pkcs11GetTpmTokenInfo" label=""/> + <suffix name="Pkcs11GetTpmTokenInfoForUser" label=""/> + <suffix name="Pkcs11IsTpmTokenReady" label=""/> + <suffix name="RemoveEx" label=""/> + <suffix name="RemoveFirmwareManagementParameters" label=""/> + <suffix name="RemoveKeyEx" label=""/> + <suffix name="RemoveTrackedSubdirectories" label=""/> + <suffix name="RenameCryptohome" label=""/> + <suffix name="SetBootAttribute" label=""/> + <suffix name="SetFirmwareManagementParameters" label=""/> + <suffix name="SignBootLockbox" label=""/> + <suffix name="TpmAttestationCreateCertRequest" label=""/> + <suffix name="TpmAttestationCreateEnrollRequest" label=""/> + <suffix name="TpmAttestationDeleteKeys" label=""/> + <suffix name="TpmAttestationDoesKeyExist" label=""/> + <suffix name="TpmAttestationEnroll" label=""/> + <suffix name="TpmAttestationFinishCertRequest" label=""/> + <suffix name="TpmAttestationGetCertificate" label=""/> + <suffix name="TpmAttestationGetEnrollmentId" label=""/> + <suffix name="TpmAttestationGetKeyPayload" label=""/> + <suffix name="TpmAttestationGetPublicKey" label=""/> + <suffix name="TpmAttestationRegisterKey" label=""/> + <suffix name="TpmAttestationSetKeyPayload" label=""/> + <suffix name="TpmAttestationSignEnterpriseChallenge" label=""/> + <suffix name="TpmAttestationSignEnterpriseVaChallenge" label=""/> + <suffix name="TpmAttestationSignSimpleChallenge" label=""/> + <suffix name="TpmCanAttemptOwnership" label=""/> + <suffix name="TpmClearStoredPassword" label=""/> + <suffix name="TpmGetPassword" label=""/> + <suffix name="TpmGetVersionStructured" label=""/> + <suffix name="TpmIsAttestationEnrolled" label=""/> + <suffix name="TpmIsAttestationPrepared" label=""/> + <suffix name="TpmIsBeingOwned" label=""/> + <suffix name="TpmIsEnabled" label=""/> + <suffix name="TpmIsOwned" label=""/> + <suffix name="TpmIsReady" label=""/> + <suffix name="Unmount" label=""/> + <suffix name="UpdateKeyEx" label=""/> + <suffix name="VerifyBootLockbox" label=""/> <affected-histogram name="CryptohomeClient"/> </histogram_suffixes> @@ -166713,12 +166713,12 @@ </histogram_suffixes> <histogram_suffixes name="DataUse.AppTabState.Dimensions" separator="."> - <suffix name="Downstream.AppBackground"/> - <suffix name="Downstream.AppForeground.TabBackground"/> - <suffix name="Downstream.AppForeground.TabForeground"/> - <suffix name="Upstream.AppBackground"/> - <suffix name="Upstream.AppForeground.TabBackground"/> - <suffix name="Upstream.AppForeground.TabForeground"/> + <suffix name="Downstream.AppBackground" label=""/> + <suffix name="Downstream.AppForeground.TabBackground" label=""/> + <suffix name="Downstream.AppForeground.TabForeground" label=""/> + <suffix name="Upstream.AppBackground" label=""/> + <suffix name="Upstream.AppForeground.TabBackground" label=""/> + <suffix name="Upstream.AppForeground.TabForeground" label=""/> <affected-histogram name="DataUse.AppTabState"/> </histogram_suffixes> @@ -166732,18 +166732,18 @@ </histogram_suffixes> <histogram_suffixes name="DataUse.Dimensions" separator="."> - <suffix name="Downstream.Background.Cellular"/> - <suffix name="Downstream.Background.NotCellular"/> - <suffix name="Downstream.Foreground.Cellular"/> - <suffix name="Downstream.Foreground.NotCellular"/> - <suffix name="Downstream.Unknown.Cellular"/> - <suffix name="Downstream.Unknown.NotCellular"/> - <suffix name="Upstream.Background.Cellular"/> - <suffix name="Upstream.Background.NotCellular"/> - <suffix name="Upstream.Foreground.Cellular"/> - <suffix name="Upstream.Foreground.NotCellular"/> - <suffix name="Upstream.Unknown.Cellular"/> - <suffix name="Upstream.Unknown.NotCellular"/> + <suffix name="Downstream.Background.Cellular" label=""/> + <suffix name="Downstream.Background.NotCellular" label=""/> + <suffix name="Downstream.Foreground.Cellular" label=""/> + <suffix name="Downstream.Foreground.NotCellular" label=""/> + <suffix name="Downstream.Unknown.Cellular" label=""/> + <suffix name="Downstream.Unknown.NotCellular" label=""/> + <suffix name="Upstream.Background.Cellular" label=""/> + <suffix name="Upstream.Background.NotCellular" label=""/> + <suffix name="Upstream.Foreground.Cellular" label=""/> + <suffix name="Upstream.Foreground.NotCellular" label=""/> + <suffix name="Upstream.Unknown.Cellular" label=""/> + <suffix name="Upstream.Unknown.NotCellular" label=""/> <affected-histogram name="DataUse.TrafficSize.System"/> <affected-histogram name="DataUse.TrafficSize.User"/> </histogram_suffixes> @@ -166752,86 +166752,86 @@ <obsolete> Replaced by version without network-type breakdown in June, 2018. </obsolete> - <suffix name="Downstream.Background.Cellular"> + <suffix name="Downstream.Background.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Background.CellularKB"/> - <suffix name="Downstream.Background.NotCellular"> + <suffix name="Downstream.Background.CellularKB" label=""/> + <suffix name="Downstream.Background.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Background.NotCellularKB"/> - <suffix name="Downstream.Foreground.Cellular"> + <suffix name="Downstream.Background.NotCellularKB" label=""/> + <suffix name="Downstream.Foreground.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Foreground.CellularKB"/> - <suffix name="Downstream.Foreground.NotCellular"> + <suffix name="Downstream.Foreground.CellularKB" label=""/> + <suffix name="Downstream.Foreground.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Foreground.NotCellularKB"/> - <suffix name="Downstream.Unknown.Cellular"> + <suffix name="Downstream.Foreground.NotCellularKB" label=""/> + <suffix name="Downstream.Unknown.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Unknown.CellularKB"/> - <suffix name="Downstream.Unknown.NotCellular"> + <suffix name="Downstream.Unknown.CellularKB" label=""/> + <suffix name="Downstream.Unknown.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Downstream.Unknown.NotCellularKB"/> - <suffix name="Upstream.Background.Cellular"> + <suffix name="Downstream.Unknown.NotCellularKB" label=""/> + <suffix name="Upstream.Background.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Background.CellularKB"/> - <suffix name="Upstream.Background.NotCellular"> + <suffix name="Upstream.Background.CellularKB" label=""/> + <suffix name="Upstream.Background.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Background.NotCellularKB"/> - <suffix name="Upstream.Foreground.Cellular"> + <suffix name="Upstream.Background.NotCellularKB" label=""/> + <suffix name="Upstream.Foreground.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Foreground.CellularKB"/> - <suffix name="Upstream.Foreground.NotCellular"> + <suffix name="Upstream.Foreground.CellularKB" label=""/> + <suffix name="Upstream.Foreground.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Foreground.NotCellularKB"/> - <suffix name="Upstream.Unknown.Cellular"> + <suffix name="Upstream.Foreground.NotCellularKB" label=""/> + <suffix name="Upstream.Unknown.Cellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Unknown.CellularKB"/> - <suffix name="Upstream.Unknown.NotCellular"> + <suffix name="Upstream.Unknown.CellularKB" label=""/> + <suffix name="Upstream.Unknown.NotCellular" label=""> <obsolete> Replaced by KB version in October, 2017. </obsolete> </suffix> - <suffix name="Upstream.Unknown.NotCellularKB"/> + <suffix name="Upstream.Unknown.NotCellularKB" label=""/> <affected-histogram name="DataUse.MessageSize.AllServices"/> </histogram_suffixes> <histogram_suffixes name="DataUse.Dimensions.AllServicesKB" separator="."> - <suffix name="Downstream.Background"/> - <suffix name="Downstream.Foreground"/> - <suffix name="Upstream.Background"/> - <suffix name="Upstream.Foreground"/> + <suffix name="Downstream.Background" label=""/> + <suffix name="Downstream.Foreground" label=""/> + <suffix name="Upstream.Background" label=""/> + <suffix name="Upstream.Foreground" label=""/> <affected-histogram name="DataReductionProxy.LastWeekAggregateKB.Services"/> <affected-histogram name="DataReductionProxy.ThisWeekAggregateKB.Services"/> <affected-histogram name="DataUse.AllServicesKB"/> @@ -166841,42 +166841,42 @@ <obsolete> Deprecated Oct 2018 </obsolete> - <suffix name="Autofill"/> - <suffix name="DomainReliability"/> - <suffix name="GAIA"/> - <suffix name="GCMDriver"/> - <suffix name="GoogleURLTracker"/> - <suffix name="ImageFetcherUntagged"/> - <suffix name="Invalidation"/> - <suffix name="LargeIconService"/> - <suffix name="MachineIntelligence"/> - <suffix name="NotTagged"/> - <suffix name="NTPSnippets"> + <suffix name="Autofill" label=""/> + <suffix name="DomainReliability" label=""/> + <suffix name="GAIA" label=""/> + <suffix name="GCMDriver" label=""/> + <suffix name="GoogleURLTracker" label=""/> + <suffix name="ImageFetcherUntagged" label=""/> + <suffix name="Invalidation" label=""/> + <suffix name="LargeIconService" label=""/> + <suffix name="MachineIntelligence" label=""/> + <suffix name="NotTagged" label=""/> + <suffix name="NTPSnippets" label=""> <obsolete> Deprecated March 2017 </obsolete> </suffix> - <suffix name="NTPSnippetsSuggestions"/> - <suffix name="NTPSnippetsThumbnails"/> - <suffix name="Omnibox"/> - <suffix name="Policy"/> - <suffix name="ProfileDownloader"/> - <suffix name="Rappor"/> - <suffix name="SafeBrowsing"/> - <suffix name="SpellChecker"/> - <suffix name="Suggestions"/> - <suffix name="Sync"/> - <suffix name="Translate"/> - <suffix name="UMA"/> - <suffix name="UpdateClient"/> - <suffix name="Variations"/> - <suffix name="WebResourceService"/> + <suffix name="NTPSnippetsSuggestions" label=""/> + <suffix name="NTPSnippetsThumbnails" label=""/> + <suffix name="Omnibox" label=""/> + <suffix name="Policy" label=""/> + <suffix name="ProfileDownloader" label=""/> + <suffix name="Rappor" label=""/> + <suffix name="SafeBrowsing" label=""/> + <suffix name="SpellChecker" label=""/> + <suffix name="Suggestions" label=""/> + <suffix name="Sync" label=""/> + <suffix name="Translate" label=""/> + <suffix name="UMA" label=""/> + <suffix name="UpdateClient" label=""/> + <suffix name="Variations" label=""/> + <suffix name="WebResourceService" label=""/> <affected-histogram name="DataUse.MessageSize"/> </histogram_suffixes> <histogram_suffixes name="DataUse.TrafficSource" separator="."> - <suffix name="System"/> - <suffix name="User"/> + <suffix name="System" label=""/> + <suffix name="User" label=""/> <affected-histogram name="DataUse.BackgroundToDataRecievedPerByte"/> <affected-histogram name="DataUse.BackgroundToFirstDownstream"/> </histogram_suffixes> @@ -166924,9 +166924,9 @@ <obsolete> Deprecated as of 12/2013. Default pinned apps trial is finished. </obsolete> - <suffix name="Alternate"/> - <suffix name="Control"/> - <suffix name="Existing"/> + <suffix name="Alternate" label=""/> + <suffix name="Control" label=""/> + <suffix name="Existing" label=""/> <affected-histogram name="Cros.ClickOnShelf"/> </histogram_suffixes> @@ -167204,10 +167204,10 @@ <obsolete> Deprecated 11/2018 in issue 894963. </obsolete> - <suffix name="BookmarksFootNote"/> - <suffix name="BookmarksNewBubble"/> - <suffix name="HistoryPage"/> - <suffix name="SavePasswordsNewBubble"/> + <suffix name="BookmarksFootNote" label=""/> + <suffix name="BookmarksNewBubble" label=""/> + <suffix name="HistoryPage" label=""/> + <suffix name="SavePasswordsNewBubble" label=""/> <affected-histogram name="DesktopIOSPromotion.DismissalReason"/> <affected-histogram name="DesktopIOSPromotion.SMSToSigninTime"/> </histogram_suffixes> @@ -167642,8 +167642,8 @@ </histogram_suffixes> <histogram_suffixes name="DriveCommonTimings" separator="."> - <suffix name="FailTime"/> - <suffix name="SuccessTime"/> + <suffix name="FailTime" label=""/> + <suffix name="SuccessTime" label=""/> <affected-histogram name="DriveCommon.Lifecycle.MountTime"/> <affected-histogram name="DriveCommon.LocalSearch.OfflineSearchTime"/> <affected-histogram name="DriveCommon.LocalSearch.SharedSearchTime"/> @@ -167653,8 +167653,8 @@ </histogram_suffixes> <histogram_suffixes name="DualCertVerifierTrial" separator="_"> - <suffix name="TrialPrimary"/> - <suffix name="TrialSecondary"/> + <suffix name="TrialPrimary" label=""/> + <suffix name="TrialSecondary" label=""/> <affected-histogram name="Net.CertVerifier_First_Job_Latency"/> <affected-histogram name="Net.CertVerifier_Job_Latency"/> </histogram_suffixes> @@ -167713,17 +167713,17 @@ <histogram_suffixes name="EngagementScoreBuckets" separator="_"> <owner>calamity@chromium.org</owner> - <suffix name="0"/> - <suffix name="10"/> - <suffix name="20"/> - <suffix name="30"/> - <suffix name="40"/> - <suffix name="50"/> - <suffix name="60"/> - <suffix name="70"/> - <suffix name="80"/> - <suffix name="90"/> - <suffix name="100"/> + <suffix name="0" label=""/> + <suffix name="10" label=""/> + <suffix name="20" label=""/> + <suffix name="30" label=""/> + <suffix name="40" label=""/> + <suffix name="50" label=""/> + <suffix name="60" label=""/> + <suffix name="70" label=""/> + <suffix name="80" label=""/> + <suffix name="90" label=""/> + <suffix name="100" label=""/> <affected-histogram name="SiteEngagementService.EngagementScoreBucket"/> </histogram_suffixes> @@ -167823,37 +167823,37 @@ </histogram_suffixes> <histogram_suffixes name="EventLatencyOS" separator="."> - <suffix name="MOUSE_WHEEL"/> - <suffix name="TOUCH_MOVED"/> - <suffix name="TOUCH_PRESSED"/> - <suffix name="TOUCH_RELEASED"/> + <suffix name="MOUSE_WHEEL" label=""/> + <suffix name="TOUCH_MOVED" label=""/> + <suffix name="TOUCH_PRESSED" label=""/> + <suffix name="TOUCH_RELEASED" label=""/> <affected-histogram name="Event.Latency.OS"/> </histogram_suffixes> <histogram_suffixes name="ExitFunnels" separator="."> - <suffix name="BackgroundOff"/> - <suffix name="BackgroundOn"/> - <suffix name="BrowserExit"/> - <suffix name="EndSession"/> - <suffix name="ES_CloseApp"/> - <suffix name="ES_Critical"/> - <suffix name="ES_Logoff"/> - <suffix name="ES_Other"/> - <suffix name="HungBrowserTerminated"/> - <suffix name="KillProcess"/> - <suffix name="LastWindowClose"/> - <suffix name="MessageWindowHung"/> - <suffix name="MessageWindowNotFound"/> - <suffix name="MessageWindowVanished"/> - <suffix name="ProcessSingletonIsShuttingDown"/> - <suffix name="RendezvousToHungBrowser"/> - <suffix name="SessionEnding"/> - <suffix name="TraybarEndSession"/> - <suffix name="TraybarExit"/> - <suffix name="WatcherEndSession"/> - <suffix name="WatcherLogoff"/> - <suffix name="WatcherQueryEndSession"/> - <suffix name="WM_ENDSESSION"/> + <suffix name="BackgroundOff" label=""/> + <suffix name="BackgroundOn" label=""/> + <suffix name="BrowserExit" label=""/> + <suffix name="EndSession" label=""/> + <suffix name="ES_CloseApp" label=""/> + <suffix name="ES_Critical" label=""/> + <suffix name="ES_Logoff" label=""/> + <suffix name="ES_Other" label=""/> + <suffix name="HungBrowserTerminated" label=""/> + <suffix name="KillProcess" label=""/> + <suffix name="LastWindowClose" label=""/> + <suffix name="MessageWindowHung" label=""/> + <suffix name="MessageWindowNotFound" label=""/> + <suffix name="MessageWindowVanished" label=""/> + <suffix name="ProcessSingletonIsShuttingDown" label=""/> + <suffix name="RendezvousToHungBrowser" label=""/> + <suffix name="SessionEnding" label=""/> + <suffix name="TraybarEndSession" label=""/> + <suffix name="TraybarExit" label=""/> + <suffix name="WatcherEndSession" label=""/> + <suffix name="WatcherLogoff" label=""/> + <suffix name="WatcherQueryEndSession" label=""/> + <suffix name="WM_ENDSESSION" label=""/> <affected-histogram name="Stability.ExitFunnel"/> </histogram_suffixes> @@ -168027,8 +168027,8 @@ </histogram_suffixes> <histogram_suffixes name="FeedOrHostOlder" separator="."> - <suffix name="FeedIsOlder"/> - <suffix name="HostIsOlder"/> + <suffix name="FeedIsOlder" label=""/> + <suffix name="HostIsOlder" label=""/> <affected-histogram name="ContentSuggestions.Feed.Scheduler.ContentAgeDifference"/> </histogram_suffixes> @@ -168221,8 +168221,8 @@ </histogram_suffixes> <histogram_suffixes name="FileOperations" separator="."> - <suffix name="DeleteFile.NonRecursive"/> - <suffix name="DeleteFile.Recursive"/> + <suffix name="DeleteFile.NonRecursive" label=""/> + <suffix name="DeleteFile.Recursive" label=""/> <affected-histogram name="Windows.FilesystemError"/> <affected-histogram name="Windows.PostOperationState"/> </histogram_suffixes> @@ -168942,8 +168942,8 @@ </histogram_suffixes> <histogram_suffixes name="ImportantFileWriterSuffix" separator="."> - <suffix name="BookmarkStorage"/> - <suffix name="FeedbackReport"/> + <suffix name="BookmarkStorage" label=""/> + <suffix name="FeedbackReport" label=""/> <affected-histogram name="ImportantFile.FileCreateError"/> <affected-histogram name="ImportantFile.FileDeleteError"/> <affected-histogram name="ImportantFile.FileOpenError"/> @@ -169114,8 +169114,8 @@ </histogram_suffixes> <histogram_suffixes name="IOMode" separator="."> - <suffix name="Asynchronous"/> - <suffix name="Synchronous"/> + <suffix name="Asynchronous" label=""/> + <suffix name="Synchronous" label=""/> <affected-histogram name="Net.QuicSession.PacketWriteTime"/> </histogram_suffixes> @@ -169127,10 +169127,10 @@ </histogram_suffixes> <histogram_suffixes name="IOSProductTourScreens" separator=""> - <suffix name="Incognito"/> - <suffix name="Sync"/> - <suffix name="Unknown"/> - <suffix name="VoiceSearch"/> + <suffix name="Incognito" label=""/> + <suffix name="Sync" label=""/> + <suffix name="Unknown" label=""/> + <suffix name="VoiceSearch" label=""/> <affected-histogram name="ProductTour.IOSScreens"/> </histogram_suffixes> @@ -169161,14 +169161,14 @@ </suffix> <suffix name="IPH_ChromeHomePullToRefresh" label="In product help for Chrome Home shown after a pull-to-refresh."/> - <suffix name="IPH_ContextualSearch"> + <suffix name="IPH_ContextualSearch" label=""> <obsolete> Replaced with IPH_ContextualSearchWebSearch. </obsolete> </suffix> <suffix name="IPH_ContextualSearchOptIn" label="In product help for opting-in for contextual search."/> - <suffix name="IPH_ContextualSearchPanel"> + <suffix name="IPH_ContextualSearchPanel" label=""> <obsolete> Replaced with IPH_ContextualSearchPromotePanelOpen. </obsolete> @@ -169177,7 +169177,7 @@ label="In product help for opening the contextual search panel."/> <suffix name="IPH_ContextualSearchPromoteTap" label="In product help for tap trigger for contextual search."/> - <suffix name="IPH_ContextualSearchTap"> + <suffix name="IPH_ContextualSearchTap" label=""> <obsolete> Replaced with IPH_ContextualSearchPromoteTap. </obsolete> @@ -169264,8 +169264,8 @@ </histogram_suffixes> <histogram_suffixes name="IPProtocolType" separator="_"> - <suffix name="TCP"/> - <suffix name="UDP"/> + <suffix name="TCP" label=""/> + <suffix name="UDP" label=""/> <affected-histogram name="WebRTC.PeerConnection.CandidatePairType"/> <affected-histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed"/> <affected-histogram name="WebRTC.SystemPercentPacketsDelayed"/> @@ -169328,8 +169328,8 @@ </histogram_suffixes> <histogram_suffixes name="JSDialogs.UserGestureSinceLoad" separator="."> - <suffix name="NoUserGestureSinceLoad"/> - <suffix name="UserGestureSinceLoad"/> + <suffix name="NoUserGestureSinceLoad" label=""/> + <suffix name="UserGestureSinceLoad" label=""/> <affected-histogram name="JSDialogs.CharacterCount"/> </histogram_suffixes> @@ -169392,22 +169392,22 @@ </histogram_suffixes> <histogram_suffixes name="LECredentialOps" separator="."> - <suffix name="Check"/> - <suffix name="Insert"/> - <suffix name="Remove"/> - <suffix name="Reset"/> - <suffix name="ResetTree"/> - <suffix name="Sync"/> - <suffix name="SyncOutcome"/> + <suffix name="Check" label=""/> + <suffix name="Insert" label=""/> + <suffix name="Remove" label=""/> + <suffix name="Reset" label=""/> + <suffix name="ResetTree" label=""/> + <suffix name="Sync" label=""/> + <suffix name="SyncOutcome" label=""/> <affected-histogram name="Cryptohome.LECredential"/> </histogram_suffixes> <histogram_suffixes name="LECredentialOpsActions" separator="."> - <suffix name="Backend"/> - <suffix name="BackendGetLog"/> - <suffix name="BackendReplayLog"/> - <suffix name="LoadFromDisk"/> - <suffix name="SaveToDisk"/> + <suffix name="Backend" label=""/> + <suffix name="BackendGetLog" label=""/> + <suffix name="BackendReplayLog" label=""/> + <suffix name="LoadFromDisk" label=""/> + <suffix name="SaveToDisk" label=""/> <affected-histogram name="Cryptohome.LECredential.Check"/> <affected-histogram name="Cryptohome.LECredential.Insert"/> <affected-histogram name="Cryptohome.LECredential.Remove"/> @@ -169771,11 +169771,11 @@ </histogram_suffixes> <histogram_suffixes name="LockScreenAppDataItemOperation" separator="."> - <suffix name="DeleteItem"/> - <suffix name="GetRegisteredItems"/> - <suffix name="ReadItem"/> - <suffix name="RegisterItem"/> - <suffix name="WriteItem"/> + <suffix name="DeleteItem" label=""/> + <suffix name="GetRegisteredItems" label=""/> + <suffix name="ReadItem" label=""/> + <suffix name="RegisterItem" label=""/> + <suffix name="WriteItem" label=""/> <affected-histogram name="Apps.LockScreen.DataItemStorage.FailedOperationDuration"/> <affected-histogram name="Apps.LockScreen.DataItemStorage.OperationDuration"/> @@ -169850,9 +169850,9 @@ <histogram_suffixes name="MachineLearningServiceRequests" separator="." ordering="prefix"> - <suffix base="true" name="CreateGraphExecutorResult"/> - <suffix base="true" name="ExecuteResult"/> - <suffix base="true" name="LoadModelResult"/> + <suffix base="true" name="CreateGraphExecutorResult" label=""/> + <suffix base="true" name="ExecuteResult" label=""/> + <suffix base="true" name="LoadModelResult" label=""/> <affected-histogram name="MachineLearningService.CpuTimeMicrosec"/> <affected-histogram name="MachineLearningService.ElapsedTimeMicrosec"/> <affected-histogram name="MachineLearningService.PrivateMemoryDeltaKb"> @@ -169875,13 +169875,13 @@ </histogram_suffixes> <histogram_suffixes name="ManifestProperties" separator="."> - <suffix name="display"/> - <suffix name="gcm_sender_id"/> - <suffix name="icons"/> - <suffix name="name"/> - <suffix name="orientation"/> - <suffix name="short_name"/> - <suffix name="start_url"/> + <suffix name="display" label=""/> + <suffix name="gcm_sender_id" label=""/> + <suffix name="icons" label=""/> + <suffix name="name" label=""/> + <suffix name="orientation" label=""/> + <suffix name="short_name" label=""/> + <suffix name="start_url" label=""/> <affected-histogram name="Manifest.HasProperty"/> </histogram_suffixes> @@ -169996,10 +169996,10 @@ <obsolete> Removed from code as of 07/2019. </obsolete> - <suffix name="FullscreenLandscape"/> - <suffix name="FullscreenPortrait"/> - <suffix name="InlineLandscape"/> - <suffix name="InlinePortrait"/> + <suffix name="FullscreenLandscape" label=""/> + <suffix name="FullscreenPortrait" label=""/> + <suffix name="InlineLandscape" label=""/> + <suffix name="InlinePortrait" label=""/> <affected-histogram name="Media.Timeline.Width"/> </histogram_suffixes> @@ -170104,12 +170104,12 @@ </histogram_suffixes> <histogram_suffixes name="MediaTimelineWidths" separator="."> - <suffix name="32_47"/> - <suffix name="48_79"/> - <suffix name="80_127"/> - <suffix name="128_255"/> - <suffix name="256_511"/> - <suffix name="512_inf"/> + <suffix name="32_47" label=""/> + <suffix name="48_79" label=""/> + <suffix name="80_127" label=""/> + <suffix name="128_255" label=""/> + <suffix name="256_511" label=""/> + <suffix name="512_inf" label=""/> <affected-histogram name="Media.Timeline.DragGestureDuration"/> <affected-histogram name="Media.Timeline.DragPercent"/> <affected-histogram name="Media.Timeline.DragSumAbsTimeDelta"/> @@ -170264,10 +170264,10 @@ </histogram_suffixes> <histogram_suffixes name="MediaWMPIMemoryUsage" separator="."> - <suffix name="Audio"/> - <suffix name="DataSource"/> - <suffix name="Demuxer"/> - <suffix name="Video"/> + <suffix name="Audio" label=""/> + <suffix name="DataSource" label=""/> + <suffix name="Demuxer" label=""/> + <suffix name="Video" label=""/> <affected-histogram name="Media.WebMediaPlayerImpl.Memory"/> </histogram_suffixes> @@ -170298,12 +170298,12 @@ </histogram_suffixes> <histogram_suffixes name="MemoryStateTransition" separator="."> - <suffix name="NormalToSuspended"/> - <suffix name="NormalToThrottled"/> - <suffix name="SuspendedToNormal"/> - <suffix name="SuspendedToThrottled"/> - <suffix name="ThrottledToNormal"/> - <suffix name="ThrottledToSuspended"/> + <suffix name="NormalToSuspended" label=""/> + <suffix name="NormalToThrottled" label=""/> + <suffix name="SuspendedToNormal" label=""/> + <suffix name="SuspendedToThrottled" label=""/> + <suffix name="ThrottledToNormal" label=""/> + <suffix name="ThrottledToSuspended" label=""/> <affected-histogram name="Memory.Coordinator.StateDuration"/> <affected-histogram name="Memory.Coordinator.TotalPrivate"/> </histogram_suffixes> @@ -170322,8 +170322,8 @@ </histogram_suffixes> <histogram_suffixes name="MixedContentDownloadDownloadSecurity" separator="."> - <suffix name="DownloadInsecure"/> - <suffix name="DownloadSecure"/> + <suffix name="DownloadInsecure" label=""/> + <suffix name="DownloadSecure" label=""/> <affected-histogram name="Download.InsecureBlocking.Extensions.InitiatorInsecure"/> <affected-histogram @@ -170333,23 +170333,23 @@ </histogram_suffixes> <histogram_suffixes name="MixedContentDownloadInitiatorSecurity" separator="."> - <suffix base="true" name="InitiatorInsecure"/> - <suffix base="true" name="InitiatorSecure"/> - <suffix base="true" name="InitiatorUnknown"/> + <suffix base="true" name="InitiatorInsecure" label=""/> + <suffix base="true" name="InitiatorSecure" label=""/> + <suffix base="true" name="InitiatorUnknown" label=""/> <affected-histogram name="Download.InsecureBlocking.Extensions"/> </histogram_suffixes> <histogram_suffixes name="MixedContentDownloadMimeSecurity" separator="."> - <suffix name="Insecure"/> - <suffix name="Other"/> - <suffix name="Secure"/> + <suffix name="Insecure" label=""/> + <suffix name="Other" label=""/> + <suffix name="Secure" label=""/> <affected-histogram name="Download.InsecureBlocking.Verification.Item"/> <affected-histogram name="Download.InsecureBlocking.Verification.Manager"/> </histogram_suffixes> <histogram_suffixes name="MixedContentDownloadMimeSource" separator="."> - <suffix base="true" name="Item"/> - <suffix base="true" name="Manager"/> + <suffix base="true" name="Item" label=""/> + <suffix base="true" name="Manager" label=""/> <affected-histogram name="Download.InsecureBlocking.Verification"/> </histogram_suffixes> @@ -170369,27 +170369,27 @@ </histogram_suffixes> <histogram_suffixes name="Mobile.Messages.Password.Type" separator="."> - <suffix name="InfobarTypePasswordSave"/> - <suffix name="InfobarTypePasswordUpdate"/> + <suffix name="InfobarTypePasswordSave" label=""/> + <suffix name="InfobarTypePasswordUpdate" label=""/> <affected-histogram name="Mobile.Messages.Passwords.Modal.Dismiss"/> <affected-histogram name="Mobile.Messages.Passwords.Modal.Event"/> <affected-histogram name="Mobile.Messages.Passwords.Modal.Present"/> </histogram_suffixes> <histogram_suffixes name="Mobile.Messages.Type" separator="."> - <suffix name="InfobarTypeConfirm"/> - <suffix name="InfobarTypePasswordSave"/> - <suffix name="InfobarTypePasswordUpdate"/> + <suffix name="InfobarTypeConfirm" label=""/> + <suffix name="InfobarTypePasswordSave" label=""/> + <suffix name="InfobarTypePasswordUpdate" label=""/> <affected-histogram name="Mobile.Messages.Banner.Dismiss"/> <affected-histogram name="Mobile.Messages.Banner.Event"/> <affected-histogram name="Mobile.Messages.Modal.Event"/> </histogram_suffixes> <histogram_suffixes name="MobileDownloadBytesDownloadedTypes" separator="."> - <suffix name="ChromeNetworkStack.Failure"/> - <suffix name="ChromeNetworkStack.Success"/> - <suffix name="DownloadManager.Failure"/> - <suffix name="DownloadManager.Success"/> + <suffix name="ChromeNetworkStack.Failure" label=""/> + <suffix name="ChromeNetworkStack.Success" label=""/> + <suffix name="DownloadManager.Failure" label=""/> + <suffix name="DownloadManager.Success" label=""/> <affected-histogram name="MobileDownload.BytesDownloaded"/> </histogram_suffixes> @@ -170401,25 +170401,25 @@ </histogram_suffixes> <histogram_suffixes name="MobileDownloadDownloadTimeTypes" separator="."> - <suffix name="ChromeNetworkStack.Cancel"/> - <suffix name="ChromeNetworkStack.Failure"/> - <suffix name="ChromeNetworkStack.Success"/> - <suffix name="DownloadManager.Failure"/> - <suffix name="DownloadManager.Success"/> + <suffix name="ChromeNetworkStack.Cancel" label=""/> + <suffix name="ChromeNetworkStack.Failure" label=""/> + <suffix name="ChromeNetworkStack.Success" label=""/> + <suffix name="DownloadManager.Failure" label=""/> + <suffix name="DownloadManager.Success" label=""/> <affected-histogram name="MobileDownload.DownloadTime"/> </histogram_suffixes> <histogram_suffixes name="MobileDownloadInterruptionsCountTypes" separator="."> - <suffix name="ChromeNetworkStack.Cancel"/> - <suffix name="ChromeNetworkStack.Failure"/> - <suffix name="ChromeNetworkStack.Success"/> + <suffix name="ChromeNetworkStack.Cancel" label=""/> + <suffix name="ChromeNetworkStack.Failure" label=""/> + <suffix name="ChromeNetworkStack.Success" label=""/> <affected-histogram name="MobileDownload.InterruptionsCount"/> </histogram_suffixes> <histogram_suffixes name="MobileDownloadResumptionsCountTypes" separator="."> - <suffix name="Automatic"/> - <suffix name="Manual"/> - <suffix name="Total"/> + <suffix name="Automatic" label=""/> + <suffix name="Manual" label=""/> + <suffix name="Total" label=""/> <affected-histogram name="MobileDownload.ResumptionsCount"/> </histogram_suffixes> @@ -170474,16 +170474,16 @@ </histogram_suffixes> <histogram_suffixes name="NativeFileSystemAPIChooserType" separator="."> - <suffix name="OpenDirectory"/> - <suffix name="OpenFile"/> - <suffix name="OpenMultipleFiles"/> - <suffix name="SaveFile"/> + <suffix name="OpenDirectory" label=""/> + <suffix name="OpenFile" label=""/> + <suffix name="OpenMultipleFiles" label=""/> + <suffix name="SaveFile" label=""/> <affected-histogram name="NativeFileSystemAPI.FileChooserResult"/> </histogram_suffixes> <histogram_suffixes name="NativeFileSystemAPIHandleType" separator="."> - <suffix name="Directory"/> - <suffix name="File"/> + <suffix name="Directory" label=""/> + <suffix name="File" label=""/> <affected-histogram name="NativeFileSystemAPI.WritePermissionRequestOutcome"/> </histogram_suffixes> @@ -170499,10 +170499,10 @@ </histogram_suffixes> <histogram_suffixes name="NatType" separator="."> - <suffix name="NoNAT"/> - <suffix name="NonSymNAT"/> - <suffix name="SymNAT"/> - <suffix name="UnknownNAT"/> + <suffix name="NoNAT" label=""/> + <suffix name="NonSymNAT" label=""/> + <suffix name="SymNAT" label=""/> + <suffix name="UnknownNAT" label=""/> <affected-histogram name="WebRTC.Stun.BatchSuccessPercent"/> <affected-histogram name="WebRTC.Stun.ResponseLatency"/> <affected-histogram name="WebRTC.Stun.SuccessPercent"/> @@ -171986,9 +171986,9 @@ </histogram_suffixes> <histogram_suffixes name="NetHttpContentLengthType" separator="."> - <suffix name="Http"/> - <suffix name="Https"/> - <suffix name="Video"/> + <suffix name="Http" label=""/> + <suffix name="Https" label=""/> + <suffix name="Video" label=""/> <affected-histogram name="Net.HttpContentLength"/> <affected-histogram name="Net.HttpContentLengthV2"/> <affected-histogram name="Net.HttpOriginalContentLength"/> @@ -172191,7 +172191,7 @@ <histogram_suffixes name="NewTabPageProviders" separator="."> <suffix name="client" label="Suggestions coming from the client."/> - <suffix name="client0"> + <suffix name="client0" label=""> <obsolete> Hasn't been used for a while, as of 2016-07. </obsolete> @@ -172212,27 +172212,27 @@ </obsolete> </suffix> <suffix name="server" label="Suggestions coming from the server."/> - <suffix name="server0"> + <suffix name="server0" label=""> <obsolete> Hasn't been used for a while, as of 2016-07. </obsolete> </suffix> - <suffix name="server8"> + <suffix name="server8" label=""> <obsolete> Not used anymore as of 2016-07. </obsolete> </suffix> - <suffix name="server9"> + <suffix name="server9" label=""> <obsolete> Has never been used. </obsolete> </suffix> - <suffix name="server10"> + <suffix name="server10" label=""> <obsolete> Has never been used. </obsolete> </suffix> - <suffix name="server11"> + <suffix name="server11" label=""> <obsolete> Has never been used. </obsolete> @@ -172310,10 +172310,10 @@ <obsolete> Deprecated in June 2019. </obsolete> - <suffix name="ActionIcon"/> - <suffix name="Badge"/> - <suffix name="Icon"/> - <suffix name="Image"/> + <suffix name="ActionIcon" label=""/> + <suffix name="Badge" label=""/> + <suffix name="Icon" label=""/> + <suffix name="Image" label=""/> <affected-histogram name="Notifications.LoadFailTime"/> <affected-histogram name="Notifications.LoadFileSize"/> <affected-histogram name="Notifications.LoadFinishTime"/> @@ -172321,9 +172321,9 @@ </histogram_suffixes> <histogram_suffixes name="NotificationSchedulerClientType" separator="."> - <suffix name="__Test__"/> - <suffix name="Unknown"/> - <suffix name="WebUI"/> + <suffix name="__Test__" label=""/> + <suffix name="Unknown" label=""/> + <suffix name="WebUI" label=""/> <affected-histogram name="Notifications.Scheduler.IhnrActionButtonEvent"/> <affected-histogram name="Notifications.Scheduler.Impression.Count"/> <affected-histogram @@ -172876,43 +172876,43 @@ </histogram_suffixes> <histogram_suffixes name="OmniboxProviderTime" separator="."> - <suffix name="Bookmark"/> - <suffix name="Builtin"/> - <suffix name="Contact"/> - <suffix name="ExtensionApp"/> - <suffix name="HistoryContents"/> - <suffix name="HistoryQuick"/> - <suffix name="HistoryURL"/> - <suffix name="Keyword"/> - <suffix name="Search"/> - <suffix name="Shortcuts"/> - <suffix name="ZeroSuggest"/> + <suffix name="Bookmark" label=""/> + <suffix name="Builtin" label=""/> + <suffix name="Contact" label=""/> + <suffix name="ExtensionApp" label=""/> + <suffix name="HistoryContents" label=""/> + <suffix name="HistoryQuick" label=""/> + <suffix name="HistoryURL" label=""/> + <suffix name="Keyword" label=""/> + <suffix name="Search" label=""/> + <suffix name="Shortcuts" label=""/> + <suffix name="ZeroSuggest" label=""/> <affected-histogram name="Omnibox.ProviderTime"/> <affected-histogram name="Omnibox.ProviderTime2"/> </histogram_suffixes> <histogram_suffixes name="OobeScreenName" separator="."> - <suffix name="App-downloading"/> - <suffix name="Arc_tos"/> - <suffix name="Assistant-optin-flow"/> - <suffix name="Auto-enrollment-check"/> - <suffix name="Demo-preferences"/> - <suffix name="Discover"/> - <suffix name="Enroll"/> - <suffix name="Eula"/> - <suffix name="Fingerprint-setup"/> - <suffix name="Hid-detection"/> - <suffix name="Image"/> - <suffix name="Marketing-opt-in"/> - <suffix name="Multidevice-setup"/> - <suffix name="Network"/> - <suffix name="Network-selection"/> - <suffix name="Recommend-apps"/> - <suffix name="Reset"/> - <suffix name="Sync-consent"/> - <suffix name="Tos"/> - <suffix name="Update"/> - <suffix name="Wrong-hwid"/> + <suffix name="App-downloading" label=""/> + <suffix name="Arc_tos" label=""/> + <suffix name="Assistant-optin-flow" label=""/> + <suffix name="Auto-enrollment-check" label=""/> + <suffix name="Demo-preferences" label=""/> + <suffix name="Discover" label=""/> + <suffix name="Enroll" label=""/> + <suffix name="Eula" label=""/> + <suffix name="Fingerprint-setup" label=""/> + <suffix name="Hid-detection" label=""/> + <suffix name="Image" label=""/> + <suffix name="Marketing-opt-in" label=""/> + <suffix name="Multidevice-setup" label=""/> + <suffix name="Network" label=""/> + <suffix name="Network-selection" label=""/> + <suffix name="Recommend-apps" label=""/> + <suffix name="Reset" label=""/> + <suffix name="Sync-consent" label=""/> + <suffix name="Tos" label=""/> + <suffix name="Update" label=""/> + <suffix name="Wrong-hwid" label=""/> <affected-histogram name="OOBE.StepCompletionTime"/> </histogram_suffixes> @@ -172944,11 +172944,11 @@ </histogram_suffixes> <histogram_suffixes name="OtherActivityProcesses" separator="."> - <suffix name="gpu-process"/> - <suffix name="ppapi"/> - <suffix name="renderer"/> - <suffix name="setup"/> - <suffix name="utility"/> + <suffix name="gpu-process" label=""/> + <suffix name="ppapi" label=""/> + <suffix name="renderer" label=""/> + <suffix name="setup" label=""/> + <suffix name="utility" label=""/> <affected-histogram name="UMA.Histograms.Activity"/> </histogram_suffixes> @@ -173082,11 +173082,11 @@ </histogram_suffixes> <histogram_suffixes name="PageLoadEventConditions" separator="."> - <suffix name="AfterCommit.BeforePaint"/> - <suffix base="true" name="AfterPaint.Before1sDelayedInteraction"/> - <suffix base="true" name="AfterPaint.BeforeInteraction"/> - <suffix name="BeforeCommit"/> - <suffix name="DuringParse"/> + <suffix name="AfterCommit.BeforePaint" label=""/> + <suffix base="true" name="AfterPaint.Before1sDelayedInteraction" label=""/> + <suffix base="true" name="AfterPaint.BeforeInteraction" label=""/> + <suffix name="BeforeCommit" label=""/> + <suffix name="DuringParse" label=""/> <affected-histogram name="PageLoad.AbortTiming.Background"/> <affected-histogram name="PageLoad.AbortTiming.ClientRedirect"/> <affected-histogram name="PageLoad.AbortTiming.Close"/> @@ -173990,7 +173990,7 @@ process"/> <suffix name="UserGesture" label="(experimental) Page load that has a user gesture"/> - <suffix name="UserInputEvent"> + <suffix name="UserInputEvent" label=""> <obsolete> Deprecated in favor of UserGesture. </obsolete> @@ -174113,8 +174113,8 @@ </histogram_suffixes> <histogram_suffixes name="PasswordCustomPassphrase" separator="."> - <suffix name="WithCustomPassphrase"/> - <suffix name="WithoutCustomPassphrase"/> + <suffix name="WithCustomPassphrase" label=""/> + <suffix name="WithoutCustomPassphrase" label=""/> <affected-histogram name="PasswordManager.AccountsPerSite"/> <affected-histogram name="PasswordManager.AccountsPerSite.AutoGenerated"/> <affected-histogram name="PasswordManager.AccountsPerSite.UserCreated"/> @@ -174133,9 +174133,9 @@ </histogram_suffixes> <histogram_suffixes name="PasswordGenerated" separator="."> - <suffix base="true" name="AutoGenerated"/> - <suffix base="true" name="Overall"/> - <suffix base="true" name="UserCreated"/> + <suffix base="true" name="AutoGenerated" label=""/> + <suffix base="true" name="Overall" label=""/> + <suffix base="true" name="UserCreated" label=""/> <affected-histogram name="PasswordManager.AccountsPerSite"/> <affected-histogram name="PasswordManager.TimesPasswordUsed"/> <affected-histogram name="PasswordManager.TotalAccounts"/> @@ -174143,8 +174143,8 @@ </histogram_suffixes> <histogram_suffixes name="PasswordGenerationType" separator="."> - <suffix name="Automatic"/> - <suffix name="Manual"/> + <suffix name="Automatic" label=""/> + <suffix name="Manual" label=""/> <affected-histogram name="KeyboardAccessory.GenerationDialogChoice"/> </histogram_suffixes> @@ -174407,15 +174407,15 @@ </histogram_suffixes> <histogram_suffixes name="PerformanceMonitor" separator="."> - <suffix name="BrowserProcess"/> - <suffix name="GPUProcess"/> - <suffix name="PluginProcess"/> - <suffix name="PPAPIFlashProcess"/> - <suffix name="PPAPIProcess"/> - <suffix name="RendererExtensionEventProcess"/> - <suffix name="RendererExtensionPersistentProcess"/> - <suffix name="RendererProcess"/> - <suffix name="WorkerProcess"/> + <suffix name="BrowserProcess" label=""/> + <suffix name="GPUProcess" label=""/> + <suffix name="PluginProcess" label=""/> + <suffix name="PPAPIFlashProcess" label=""/> + <suffix name="PPAPIProcess" label=""/> + <suffix name="RendererExtensionEventProcess" label=""/> + <suffix name="RendererExtensionPersistentProcess" label=""/> + <suffix name="RendererProcess" label=""/> + <suffix name="WorkerProcess" label=""/> <affected-histogram name="PerformanceMonitor.AverageCPU"/> <affected-histogram name="PerformanceMonitor.AverageDisk"/> <affected-histogram name="PerformanceMonitor.EnergyImpact"/> @@ -175246,8 +175246,8 @@ </histogram_suffixes> <histogram_suffixes name="ProviderPermissionType" separator="."> - <suffix name="READ_HISTORY_BOOKMARKS"/> - <suffix name="WRITE_HISTORY_BOOKMARKS"/> + <suffix name="READ_HISTORY_BOOKMARKS" label=""/> + <suffix name="WRITE_HISTORY_BOOKMARKS" label=""/> <affected-histogram name="Android.ChromeBrowserProvider.CallerHasPermission"/> <affected-histogram name="Android.ChromeBrowserProvider.SignaturePassed"/> </histogram_suffixes> @@ -175422,7 +175422,7 @@ </histogram_suffixes> <histogram_suffixes name="ReadErrorSourceNetwork" separator="."> - <suffix name="AnyNetwork"/> + <suffix name="AnyNetwork" label=""/> <suffix name="CurrentNetwork" label="This metric is for current network only."/> <suffix name="OtherNetworks" @@ -175432,9 +175432,9 @@ </histogram_suffixes> <histogram_suffixes name="RecurrenceRankerModel" separator="."> - <suffix name="QueryBasedMixedTypes"/> - <suffix name="QueryBasedMixedTypesGroup"/> - <suffix name="ZeroStateMixedTypes"/> + <suffix name="QueryBasedMixedTypes" label=""/> + <suffix name="QueryBasedMixedTypesGroup" label=""/> + <suffix name="ZeroStateMixedTypes" label=""/> <affected-histogram name="RecurrenceRanker.InitializationStatus"/> <affected-histogram name="RecurrenceRanker.SerializationStatus"/> <affected-histogram name="RecurrenceRanker.Usage"/> @@ -175448,7 +175448,7 @@ label="Malware interstitial referrer attribution."/> <suffix name="NativeFileSystemWriteAttribution" label="Native File System Write attribution."/> - <suffix name="PasswordEventAttribution"/> + <suffix name="PasswordEventAttribution" label=""/> <suffix name="PhishingInterstitialAttribution" label="Phishing interstitial referrer attribution."/> <suffix name="PPAPIDownloadAttribution" @@ -175796,8 +175796,8 @@ <histogram_suffixes name="RendererScheduler.ProcessVisibilityStateSplit" separator="."> - <suffix name="Background"/> - <suffix name="Foreground"/> + <suffix name="Background" label=""/> + <suffix name="Foreground" label=""/> <affected-histogram name="RendererScheduler.TaskCPUDurationPerThreadType"/> <affected-histogram name="RendererScheduler.TaskCPUDurationPerThreadType2"/> <affected-histogram name="RendererScheduler.TaskDurationPerTaskType"/> @@ -175807,20 +175807,20 @@ </histogram_suffixes> <histogram_suffixes name="RendererScheduler.QueueType" separator="."> - <suffix name="Compositor"/> - <suffix name="Input"/> - <suffix name="Loading"/> - <suffix name="Other"/> + <suffix name="Compositor" label=""/> + <suffix name="Input" label=""/> + <suffix name="Loading" label=""/> + <suffix name="Other" label=""/> <affected-histogram name="RendererScheduler.QueueingDurationPerQueueType"/> </histogram_suffixes> <histogram_suffixes name="RendererScheduler.TaskCountPerTaskLength" separator="."> - <suffix name="LongerThan1s"/> - <suffix name="LongerThan16ms"/> - <suffix name="LongerThan50ms"/> - <suffix name="LongerThan100ms"/> - <suffix name="LongerThan150ms"/> + <suffix name="LongerThan1s" label=""/> + <suffix name="LongerThan16ms" label=""/> + <suffix name="LongerThan50ms" label=""/> + <suffix name="LongerThan100ms" label=""/> + <suffix name="LongerThan150ms" label=""/> <affected-histogram name="RendererScheduler.TaskCountPerFrameType"/> <affected-histogram name="RendererScheduler.TaskCountPerFrameType.HasSafePoint"/> @@ -175829,8 +175829,8 @@ <histogram_suffixes name="RendererScheduler.TaskDurationPerFrameOriginTypeSplit" separator="."> - <suffix name="DedicatedWorker"/> - <suffix name="DedicatedWorker.Background"/> + <suffix name="DedicatedWorker" label=""/> + <suffix name="DedicatedWorker.Background" label=""/> <affected-histogram name="RendererScheduler.TaskDurationPerFrameOriginType"/> </histogram_suffixes> @@ -175902,9 +175902,9 @@ <histogram_suffixes name="RendererScheduler.TaskDurationPerTaskTypeSplit" separator="."> - <suffix name="UseCaseInputHandling"/> - <suffix name="UseCaseLoading"/> - <suffix name="UseCaseNone"/> + <suffix name="UseCaseInputHandling" label=""/> + <suffix name="UseCaseLoading" label=""/> + <suffix name="UseCaseNone" label=""/> <affected-histogram name="RendererScheduler.TaskDurationPerTaskType2"/> </histogram_suffixes> @@ -176165,20 +176165,20 @@ </histogram_suffixes> <histogram_suffixes name="ResourceType" separator="."> - <suffix name="CSSStyleSheet"/> - <suffix name="Font"/> - <suffix name="Image"/> - <suffix name="ImportResource"/> - <suffix name="LinkPrefetch"/> - <suffix name="LinkSubresource"/> - <suffix name="MainResource"/> - <suffix name="Manifest"/> - <suffix name="Media"/> - <suffix name="Raw"/> - <suffix name="Script"/> - <suffix name="SVGDocument"/> - <suffix name="TextTrack"/> - <suffix name="XSLStyleSheet"/> + <suffix name="CSSStyleSheet" label=""/> + <suffix name="Font" label=""/> + <suffix name="Image" label=""/> + <suffix name="ImportResource" label=""/> + <suffix name="LinkPrefetch" label=""/> + <suffix name="LinkSubresource" label=""/> + <suffix name="MainResource" label=""/> + <suffix name="Manifest" label=""/> + <suffix name="Media" label=""/> + <suffix name="Raw" label=""/> + <suffix name="Script" label=""/> + <suffix name="SVGDocument" label=""/> + <suffix name="TextTrack" label=""/> + <suffix name="XSLStyleSheet" label=""/> <affected-histogram name="Blink.MemoryCache.RevalidationPolicy"/> <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"/> <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"/> @@ -176207,20 +176207,20 @@ </histogram_suffixes> <histogram_suffixes name="SafeBrowsing.V4Store.Metrics" separator="."> - <suffix name="CertCsdDownloadWhitelist"/> - <suffix name="ChromeExtMalware"/> - <suffix name="ChromeUrlClientIncident"/> - <suffix name="IpMalware"/> - <suffix name="UrlBilling"/> - <suffix name="UrlCsdDownloadWhitelist"/> - <suffix name="UrlCsdWhitelist"/> - <suffix name="UrlHighConfidenceAllowlist"/> - <suffix name="UrlMalBin"/> - <suffix name="UrlMalware"/> - <suffix name="UrlSoceng"/> - <suffix name="UrlSubresourceFilter"/> - <suffix name="UrlSuspiciousSite"/> - <suffix name="UrlUws"/> + <suffix name="CertCsdDownloadWhitelist" label=""/> + <suffix name="ChromeExtMalware" label=""/> + <suffix name="ChromeUrlClientIncident" label=""/> + <suffix name="IpMalware" label=""/> + <suffix name="UrlBilling" label=""/> + <suffix name="UrlCsdDownloadWhitelist" label=""/> + <suffix name="UrlCsdWhitelist" label=""/> + <suffix name="UrlHighConfidenceAllowlist" label=""/> + <suffix name="UrlMalBin" label=""/> + <suffix name="UrlMalware" label=""/> + <suffix name="UrlSoceng" label=""/> + <suffix name="UrlSubresourceFilter" label=""/> + <suffix name="UrlSuspiciousSite" label=""/> + <suffix name="UrlUws" label=""/> <affected-histogram name="SafeBrowsing.V4Database.Size"/> <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"/> @@ -176257,26 +176257,26 @@ <obsolete> Removed in M73. See https://crbug.com/916192 </obsolete> - <suffix name="Bloom"/> - <suffix name="BloomPrefixSet"/> - <suffix name="CsdWhitelist"/> - <suffix name="Download"/> - <suffix name="DownloadWhitelist"/> - <suffix name="ExtensionBlacklist"/> - <suffix name="InclusionWhitelist"/> - <suffix name="IPBlacklist"/> - <suffix name="ModuleWhitelist"/> - <suffix name="ResourceBlacklist"/> - <suffix name="Side-EffectFreeWhitelist"/> - <suffix name="UwSList"/> - <suffix name="UwSListPrefixSet"/> + <suffix name="Bloom" label=""/> + <suffix name="BloomPrefixSet" label=""/> + <suffix name="CsdWhitelist" label=""/> + <suffix name="Download" label=""/> + <suffix name="DownloadWhitelist" label=""/> + <suffix name="ExtensionBlacklist" label=""/> + <suffix name="InclusionWhitelist" label=""/> + <suffix name="IPBlacklist" label=""/> + <suffix name="ModuleWhitelist" label=""/> + <suffix name="ResourceBlacklist" label=""/> + <suffix name="Side-EffectFreeWhitelist" label=""/> + <suffix name="UwSList" label=""/> + <suffix name="UwSListPrefixSet" label=""/> <affected-histogram name="SafeBrowsing.V4UnusedStoreFileExists.V3"/> </histogram_suffixes> <histogram_suffixes name="SafeBrowsing.V4UnusedStore.Metrics" separator="."> - <suffix name="AnyIpMalware"/> - <suffix name="ChromeFilenameClientIncident"/> - <suffix name="UrlSuspiciousSiteId"/> + <suffix name="AnyIpMalware" label=""/> + <suffix name="ChromeFilenameClientIncident" label=""/> + <suffix name="UrlSuspiciousSiteId" label=""/> <affected-histogram name="SafeBrowsing.V4UnusedStoreFileExists"/> </histogram_suffixes> @@ -176473,8 +176473,8 @@ </histogram_suffixes> <histogram_suffixes name="SchedulerTotalDurationHistograms" separator="."> - <suffix name="Negative"/> - <suffix name="Positive"/> + <suffix name="Negative" label=""/> + <suffix name="Positive" label=""/> <affected-histogram name="Scheduler.Experimental.Renderer.TotalTime.Wall.MainThread"/> </histogram_suffixes> @@ -176529,17 +176529,17 @@ </histogram_suffixes> <histogram_suffixes name="SearchEnginePromoDeviceType" separator="."> - <suffix name="ExistingDevice"/> - <suffix name="NewDevice"/> + <suffix name="ExistingDevice" label=""/> + <suffix name="NewDevice" label=""/> <affected-histogram name="Search.SearchEngineListedInPromoDialog"/> <affected-histogram name="Search.SearchEngineSelectionInPromoDialog"/> </histogram_suffixes> <histogram_suffixes name="SearchEnginePromoOrdering" separator="." ordering="prefix,2"> - <suffix name="First"/> - <suffix name="Second"/> - <suffix name="Third"/> + <suffix name="First" label=""/> + <suffix name="Second" label=""/> + <suffix name="Third" label=""/> <affected-histogram name="Search.SearchEngineListedInPromoDialog.ExistingDevice"/> <affected-histogram name="Search.SearchEngineListedInPromoDialog.NewDevice"/> @@ -176547,7 +176547,7 @@ <histogram_suffixes name="SecurityInterstitialLookalikeType" separator="." ordering="prefix"> - <suffix name="lookalike"/> + <suffix name="lookalike" label=""/> <affected-histogram name="interstitial.decision"/> <affected-histogram name="interstitial.decision.repeat_visit"/> <affected-histogram name="interstitial.interaction"/> @@ -176555,19 +176555,19 @@ <histogram_suffixes name="SecurityInterstitialSBType" separator="." ordering="prefix"> - <suffix name="billing"/> - <suffix name="billing_subresource"/> - <suffix name="harmful"/> - <suffix name="harmful_subresource"/> - <suffix name="malware"/> - <suffix name="malware_subresource"/> - <suffix name="origin_policy"/> - <suffix name="phishing"/> - <suffix name="phishing_subresource"/> - <suffix name="social_engineering_ads"/> - <suffix name="social_engineering_ads_subresource"/> - <suffix name="social_engineering_landing"/> - <suffix name="social_engineering_landing_subresource"/> + <suffix name="billing" label=""/> + <suffix name="billing_subresource" label=""/> + <suffix name="harmful" label=""/> + <suffix name="harmful_subresource" label=""/> + <suffix name="malware" label=""/> + <suffix name="malware_subresource" label=""/> + <suffix name="origin_policy" label=""/> + <suffix name="phishing" label=""/> + <suffix name="phishing_subresource" label=""/> + <suffix name="social_engineering_ads" label=""/> + <suffix name="social_engineering_ads_subresource" label=""/> + <suffix name="social_engineering_landing" label=""/> + <suffix name="social_engineering_landing_subresource" label=""/> <affected-histogram name="interstitial.decision"/> <affected-histogram name="interstitial.decision.repeat_visit"/> <affected-histogram name="interstitial.interaction"/> @@ -176637,9 +176637,9 @@ <histogram_suffixes name="SecurityInterstitialSSLType" separator="." ordering="prefix"> - <suffix name="bad_clock"/> - <suffix name="ssl_nonoverridable"/> - <suffix name="ssl_overridable"/> + <suffix name="bad_clock" label=""/> + <suffix name="ssl_nonoverridable" label=""/> + <suffix name="ssl_overridable" label=""/> <affected-histogram name="interstitial.decision"/> <affected-histogram name="interstitial.decision.repeat_visit"/> <affected-histogram name="interstitial.interaction"/> @@ -176724,10 +176724,10 @@ <histogram_suffixes name="ServiceWorker.EventType" separator="_"> <suffix name="ACTIVATE" label="ACTIVATE"/> - <suffix name="BACKGROUND_FETCH_ABORT"/> - <suffix name="BACKGROUND_FETCH_CLICK"/> - <suffix name="BACKGROUND_FETCH_FAIL"/> - <suffix name="BACKGROUND_FETCH_SUCCESS"/> + <suffix name="BACKGROUND_FETCH_ABORT" label=""/> + <suffix name="BACKGROUND_FETCH_CLICK" label=""/> + <suffix name="BACKGROUND_FETCH_FAIL" label=""/> + <suffix name="BACKGROUND_FETCH_SUCCESS" label=""/> <suffix name="COOKIE_CHANGE" label="COOKIE_CHANGE"/> <suffix name="FETCH_MAIN_FRAME" label="FETCH_MAIN_FRAME"/> <suffix name="FETCH_SHARED_WORKER" label="FETCH_SHARED_WORKER"/> @@ -176846,7 +176846,7 @@ <suffix name="DuringStartup" label="The worker started up during browser startup."/> - <suffix name="ExistingProcess"> + <suffix name="ExistingProcess" label=""> <obsolete> Deprecated as of 07/2017. Replaced by ExistingUnreadyProcess and ExistingReadyProcess. @@ -176877,7 +176877,7 @@ label="The activated worker was already starting up."/> <suffix name="StartWorkerDuringStartup" label="Started a worker during browser startup."/> - <suffix name="StartWorkerExistingProcess"> + <suffix name="StartWorkerExistingProcess" label=""> <obsolete> Deprecated as of 07/2017. Replaced by StartWorkerExistingUnreadyProcess and StartWorkerExistingReadyProcess. @@ -176895,7 +176895,7 @@ </histogram_suffixes> <histogram_suffixes name="ServiceWorkerCache.Cache" separator="."> - <suffix name="Batch"> + <suffix name="Batch" label=""> <obsolete> Deprecated as of 08/2018. Replaced by ServiceWorkerCache.Cache.Put and ServiceWorkerCache.Cache.Delete. @@ -176909,7 +176909,7 @@ ServiceWorkerCache.Cache.Renderer.DeleteOne. </obsolete> </suffix> - <suffix name="Keys"> + <suffix name="Keys" label=""> <obsolete> Deprecated as of 08/2018. Replaced by ServiceWorkerCache.Cache.Keys2 in order to use a larger maximum value. @@ -176923,7 +176923,7 @@ ServiceWorkerCache.Cache.Renderer.Keys. </obsolete> </suffix> - <suffix name="Match"> + <suffix name="Match" label=""> <obsolete> Deprecated as of 08/2018. Replaced by ServiceWorkerCache.Cache.Match2 in order to use a larger maximum value. @@ -176937,7 +176937,7 @@ ServiceWorkerCache.Cache.Renderer.Match.Hit. </obsolete> </suffix> - <suffix name="MatchAll"> + <suffix name="MatchAll" label=""> <obsolete> Deprecated as of 08/2018. Replaced by ServiceWorkerCache.Cache.MatchAll2 in order to use a larger maximum value. @@ -177097,7 +177097,7 @@ ServiceWorkerCache.CacheStorage.Renderer.Keys. </obsolete> </suffix> - <suffix name="Match"> + <suffix name="Match" label=""> <obsolete> Deprecated as of 08/2018. Replaced by ServiceWorkerCache.CacheStorage.Match2 in order to use a larger maximum @@ -177195,20 +177195,20 @@ </histogram_suffixes> <histogram_suffixes name="ServiceWorkerSchedulerOp" separator="."> - <suffix name="Close"/> - <suffix name="Delete"/> - <suffix name="GetAllMatched"/> - <suffix name="Has"/> - <suffix name="Init"/> - <suffix name="Keys"/> - <suffix name="Match"/> - <suffix name="MatchAll"/> - <suffix name="Open"/> - <suffix name="Put"/> - <suffix name="Size"/> - <suffix name="SizeThenClose"/> - <suffix name="WriteIndex"/> - <suffix name="WriteSideData"/> + <suffix name="Close" label=""/> + <suffix name="Delete" label=""/> + <suffix name="GetAllMatched" label=""/> + <suffix name="Has" label=""/> + <suffix name="Init" label=""/> + <suffix name="Keys" label=""/> + <suffix name="Match" label=""/> + <suffix name="MatchAll" label=""/> + <suffix name="Open" label=""/> + <suffix name="Put" label=""/> + <suffix name="Size" label=""/> + <suffix name="SizeThenClose" label=""/> + <suffix name="WriteIndex" label=""/> + <suffix name="WriteSideData" label=""/> <affected-histogram name="ServiceWorkerCache.Cache.Scheduler.IsOperationSlow"/> <affected-histogram @@ -177359,10 +177359,10 @@ </histogram_suffixes> <histogram_suffixes name="SetupInstallWin32Apis" separator="."> - <suffix name="ChangeServiceConfig"/> - <suffix name="CreateService"/> - <suffix name="DeleteService"/> - <suffix name="OpenSCManager"/> + <suffix name="ChangeServiceConfig" label=""/> + <suffix name="CreateService" label=""/> + <suffix name="DeleteService" label=""/> + <suffix name="OpenSCManager" label=""/> <affected-histogram name="Setup.Install.Win32ApiError"/> </histogram_suffixes> @@ -177411,7 +177411,7 @@ </histogram_suffixes> <histogram_suffixes name="Signin.Actions" separator="."> - <suffix name="AllAccessPointActions"/> + <suffix name="AllAccessPointActions" label=""/> <suffix name="AndroidAccountConsistencyFirstRunActions" label="Signin Flow shown on android after Account Consistency flag was enabled."/> @@ -177430,14 +177430,14 @@ <obsolete> Deprecated as of 12/2014. </obsolete> - <suffix name="AppLauncherActions"/> - <suffix name="ExtensionInstallBubbleActions"/> - <suffix name="MenuActions"/> - <suffix name="NTPLinkActions"/> - <suffix name="OneClickActions"/> - <suffix name="SettingsActions"/> - <suffix name="StartPageActions"/> - <suffix name="UnknownActions"/> + <suffix name="AppLauncherActions" label=""/> + <suffix name="ExtensionInstallBubbleActions" label=""/> + <suffix name="MenuActions" label=""/> + <suffix name="NTPLinkActions" label=""/> + <suffix name="OneClickActions" label=""/> + <suffix name="SettingsActions" label=""/> + <suffix name="StartPageActions" label=""/> + <suffix name="UnknownActions" label=""/> <affected-histogram name="Signin"/> </histogram_suffixes> @@ -177519,8 +177519,8 @@ </histogram_suffixes> <histogram_suffixes name="Size" separator="."> - <suffix name="Height"/> - <suffix name="Width"/> + <suffix name="Height" label=""/> + <suffix name="Width" label=""/> <affected-histogram name="BrowserWindow.Resize.StepBoundsChange"/> </histogram_suffixes> @@ -177534,8 +177534,8 @@ </histogram_suffixes> <histogram_suffixes name="SmartLockStatusTypes" separator="."> - <suffix name="Other"/> - <suffix name="Unlockable"/> + <suffix name="Other" label=""/> + <suffix name="Unlockable" label=""/> <affected-histogram name="SmartLock.Performance.AuthenticationToReceiveFirstRemoteStatusDuration.Unlock"/> <affected-histogram @@ -177585,9 +177585,9 @@ </histogram_suffixes> <histogram_suffixes name="SocketOperation" separator="."> - <suffix name="Connect"/> - <suffix name="Read"/> - <suffix name="Write"/> + <suffix name="Connect" label=""/> + <suffix name="Read" label=""/> + <suffix name="Write" label=""/> <affected-histogram name="Net.SSLProtocolErrorCipher"/> <affected-histogram name="Net.SSLProtocolErrorReason"/> </histogram_suffixes> @@ -177621,18 +177621,18 @@ </histogram_suffixes> <histogram_suffixes name="SoftwareReporterEngine" separator="_"> - <suffix name="ESET"/> - <suffix name="Experimental"> + <suffix name="ESET" label=""/> + <suffix name="Experimental" label=""> <obsolete> Deprecated 10/2018. Replaced by ESET suffix. </obsolete> </suffix> - <suffix name="Original"> + <suffix name="Original" label=""> <obsolete> Deprecated 10/2018. Replaced by URZA suffix. </obsolete> </suffix> - <suffix name="URZA"/> + <suffix name="URZA" label=""/> <affected-histogram name="SoftwareReporter.FoundUwSReadError"/> <affected-histogram name="SoftwareReporter.LogsUploadEnabled"/> <affected-histogram name="SoftwareReporter.LogsUploadResult"/> @@ -177697,9 +177697,9 @@ </histogram_suffixes> <histogram_suffixes name="SplitViewResizeModes" separator="."> - <suffix name="TabletMode.MultiWindow"/> - <suffix name="TabletMode.SingleWindow"/> - <suffix name="TabletMode.WithOverview"/> + <suffix name="TabletMode.MultiWindow" label=""/> + <suffix name="TabletMode.SingleWindow" label=""/> + <suffix name="TabletMode.WithOverview" label=""/> <affected-histogram name="Ash.SplitViewResize.PresentationTime"/> <affected-histogram name="Ash.SplitViewResize.PresentationTime.MaxLatency"/> </histogram_suffixes> @@ -177767,8 +177767,8 @@ <obsolete> Removed 2011-06-01. </obsolete> - <suffix name="FalseStart_disabled"/> - <suffix name="FalseStart_enabled"/> + <suffix name="FalseStart_disabled" label=""/> + <suffix name="FalseStart_enabled" label=""/> <affected-histogram name="Net.SSL_Connection_Latency"/> <affected-histogram name="Net.SSL_Connection_Latency_2"/> <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/> @@ -177776,9 +177776,9 @@ </histogram_suffixes> <histogram_suffixes name="StaleWhileRevalidate" separator="."> - <suffix name="Cache"/> - <suffix name="Network"/> - <suffix name="StaleCache"/> + <suffix name="Cache" label=""/> + <suffix name="Network" label=""/> + <suffix name="StaleCache" label=""/> <affected-histogram name="PageLoad.Clients.StaleWhileRevalidate.PaintTiming.FirstContentfulPaint"/> <affected-histogram @@ -178244,52 +178244,52 @@ <obsolete> No longer logged. </obsolete> - <suffix name="PreRead_0"/> - <suffix name="PreRead_5"/> - <suffix name="PreRead_10"/> - <suffix name="PreRead_15"/> - <suffix name="PreRead_20"/> - <suffix name="PreRead_25"/> - <suffix name="PreRead_30"/> - <suffix name="PreRead_35"/> - <suffix name="PreRead_40"/> - <suffix name="PreRead_45"/> - <suffix name="PreRead_50"/> - <suffix name="PreRead_55"/> - <suffix name="PreRead_60"/> - <suffix name="PreRead_65"/> - <suffix name="PreRead_70"/> - <suffix name="PreRead_75"/> - <suffix name="PreRead_80"/> - <suffix name="PreRead_85"/> - <suffix name="PreRead_90"/> - <suffix name="PreRead_95"/> - <suffix name="PreRead_100"/> - <suffix name="PreReadDisabled"/> - <suffix name="PreReadEnabled"/> - <suffix name="XP_PreRead_0"/> - <suffix name="XP_PreRead_5"/> - <suffix name="XP_PreRead_10"/> - <suffix name="XP_PreRead_15"/> - <suffix name="XP_PreRead_20"/> - <suffix name="XP_PreRead_25"/> - <suffix name="XP_PreRead_30"/> - <suffix name="XP_PreRead_35"/> - <suffix name="XP_PreRead_40"/> - <suffix name="XP_PreRead_45"/> - <suffix name="XP_PreRead_50"/> - <suffix name="XP_PreRead_55"/> - <suffix name="XP_PreRead_60"/> - <suffix name="XP_PreRead_65"/> - <suffix name="XP_PreRead_70"/> - <suffix name="XP_PreRead_75"/> - <suffix name="XP_PreRead_80"/> - <suffix name="XP_PreRead_85"/> - <suffix name="XP_PreRead_90"/> - <suffix name="XP_PreRead_95"/> - <suffix name="XP_PreRead_100"/> - <suffix name="XP_PreReadDisabled"/> - <suffix name="XP_PreReadEnabled"/> + <suffix name="PreRead_0" label=""/> + <suffix name="PreRead_5" label=""/> + <suffix name="PreRead_10" label=""/> + <suffix name="PreRead_15" label=""/> + <suffix name="PreRead_20" label=""/> + <suffix name="PreRead_25" label=""/> + <suffix name="PreRead_30" label=""/> + <suffix name="PreRead_35" label=""/> + <suffix name="PreRead_40" label=""/> + <suffix name="PreRead_45" label=""/> + <suffix name="PreRead_50" label=""/> + <suffix name="PreRead_55" label=""/> + <suffix name="PreRead_60" label=""/> + <suffix name="PreRead_65" label=""/> + <suffix name="PreRead_70" label=""/> + <suffix name="PreRead_75" label=""/> + <suffix name="PreRead_80" label=""/> + <suffix name="PreRead_85" label=""/> + <suffix name="PreRead_90" label=""/> + <suffix name="PreRead_95" label=""/> + <suffix name="PreRead_100" label=""/> + <suffix name="PreReadDisabled" label=""/> + <suffix name="PreReadEnabled" label=""/> + <suffix name="XP_PreRead_0" label=""/> + <suffix name="XP_PreRead_5" label=""/> + <suffix name="XP_PreRead_10" label=""/> + <suffix name="XP_PreRead_15" label=""/> + <suffix name="XP_PreRead_20" label=""/> + <suffix name="XP_PreRead_25" label=""/> + <suffix name="XP_PreRead_30" label=""/> + <suffix name="XP_PreRead_35" label=""/> + <suffix name="XP_PreRead_40" label=""/> + <suffix name="XP_PreRead_45" label=""/> + <suffix name="XP_PreRead_50" label=""/> + <suffix name="XP_PreRead_55" label=""/> + <suffix name="XP_PreRead_60" label=""/> + <suffix name="XP_PreRead_65" label=""/> + <suffix name="XP_PreRead_70" label=""/> + <suffix name="XP_PreRead_75" label=""/> + <suffix name="XP_PreRead_80" label=""/> + <suffix name="XP_PreRead_85" label=""/> + <suffix name="XP_PreRead_90" label=""/> + <suffix name="XP_PreRead_95" label=""/> + <suffix name="XP_PreRead_100" label=""/> + <suffix name="XP_PreReadDisabled" label=""/> + <suffix name="XP_PreReadEnabled" label=""/> <affected-histogram name="Startup.BrowserMessageLoopStartTime"/> <affected-histogram name="Startup.BrowserOpenTabs"/> </histogram_suffixes> @@ -178706,7 +178706,7 @@ </histogram_suffixes> <histogram_suffixes name="TeamDrivesSupport" separator="."> - <suffix name="TeamDrives"/> + <suffix name="TeamDrives" label=""/> <affected-histogram name="Drive.DeltaFeedLoadTime"/> <affected-histogram name="Drive.DirectoryFeedLoadTime"/> <affected-histogram name="Drive.FullFeedLoadTime"/> @@ -178834,23 +178834,23 @@ <obsolete> Deprecated as of 11/2017 in Issue 650338. Using a DCHECK instead. </obsolete> - <suffix name="Browser"/> - <suffix name="Renderer"/> + <suffix name="Browser" label=""/> + <suffix name="Renderer" label=""/> <affected-histogram name="Event.TimestampHasValidTimebase"/> </histogram_suffixes> <histogram_suffixes name="TotalTimeToHttpsGoogle" separator="."> - <suffix name="NotQuic"> + <suffix name="NotQuic" label=""> <obsolete> Deprecated as of 08/2015. Use Net.HttpJob.*Secure.NotQuic instead. </obsolete> </suffix> - <suffix name="Quic"> + <suffix name="Quic" label=""> <obsolete> Deprecated as of 08/2015. Use Net.HttpJob.*Secure.Quic instead. </obsolete> </suffix> - <suffix name="Secure.NotQuic"> + <suffix name="Secure.NotQuic" label=""> <obsolete> Deprecated as of 08/2018. No longer used. </obsolete> @@ -179012,10 +179012,10 @@ </histogram_suffixes> <histogram_suffixes name="VideoCaptureFrameDrop" separator="."> - <suffix name="DeviceCapture"/> - <suffix name="DisplayCapture"/> - <suffix name="GumDesktopCapture"/> - <suffix name="GumTabCapture"/> + <suffix name="DeviceCapture" label=""/> + <suffix name="DisplayCapture" label=""/> + <suffix name="GumDesktopCapture" label=""/> + <suffix name="GumTabCapture" label=""/> <affected-histogram name="Media.VideoCapture.FrameDrop"/> <affected-histogram name="Media.VideoCapture.MaxFrameDropExceeded"/> </histogram_suffixes> @@ -179232,9 +179232,9 @@ </histogram_suffixes> <histogram_suffixes name="WebMediaPlayerContentTypes" separator="."> - <suffix name="Audio"/> - <suffix name="AudioVideo"/> - <suffix name="Video"/> + <suffix name="Audio" label=""/> + <suffix name="AudioVideo" label=""/> + <suffix name="Video" label=""/> <affected-histogram name="Media.PreloadMetadataSuspendWasIdeal"/> </histogram_suffixes> @@ -179292,14 +179292,14 @@ <histogram_suffixes name="WebRTCVideoExperimentGroupId" separator="."> <owner>ilnik@chromium.org</owner> - <suffix name="ExperimentGroup0"/> - <suffix name="ExperimentGroup1"/> - <suffix name="ExperimentGroup2"/> - <suffix name="ExperimentGroup3"/> - <suffix name="ExperimentGroup4"/> - <suffix name="S0"/> - <suffix name="S1"/> - <suffix name="S2"/> + <suffix name="ExperimentGroup0" label=""/> + <suffix name="ExperimentGroup1" label=""/> + <suffix name="ExperimentGroup2" label=""/> + <suffix name="ExperimentGroup3" label=""/> + <suffix name="ExperimentGroup4" label=""/> + <suffix name="S0" label=""/> + <suffix name="S1" label=""/> + <suffix name="S2" label=""/> <affected-histogram name="WebRTC.Video.Decoded.Vp8.Qp"/> <affected-histogram name="WebRTC.Video.EndToEndDelayInMs"/> <affected-histogram name="WebRTC.Video.EndToEndDelayMaxInMs"/> @@ -179326,21 +179326,21 @@ </histogram_suffixes> <histogram_suffixes name="WebSocketErrorCodesVariants" separator="_"> - <suffix name="Localhost"/> - <suffix name="NotLocalhost"/> + <suffix name="Localhost" label=""/> + <suffix name="NotLocalhost" label=""/> <affected-histogram name="Net.WebSocket.ErrorCodes"/> </histogram_suffixes> <histogram_suffixes name="WebSocketMessageSizeReceive" separator="."> - <suffix name="ArrayBuffer"/> - <suffix name="Blob"/> + <suffix name="ArrayBuffer" label=""/> + <suffix name="Blob" label=""/> <affected-histogram name="WebCore.WebSocket.MessageSize.Receive"/> </histogram_suffixes> <histogram_suffixes name="WebSocketMessageSizeSend" separator="."> - <suffix name="ArrayBuffer"/> - <suffix name="ArrayBufferView"/> - <suffix name="Blob"/> + <suffix name="ArrayBuffer" label=""/> + <suffix name="ArrayBufferView" label=""/> + <suffix name="Blob" label=""/> <affected-histogram name="WebCore.WebSocket.MessageSize.Send"/> </histogram_suffixes> @@ -179353,13 +179353,13 @@ </histogram_suffixes> <histogram_suffixes name="WeekdayNames" separator="_"> - <suffix name="Friday"/> - <suffix name="Monday"/> - <suffix name="Saturday"/> - <suffix name="Sunday"/> - <suffix name="Thursday"/> - <suffix name="Tuesday"/> - <suffix name="Wednesday"/> + <suffix name="Friday" label=""/> + <suffix name="Monday" label=""/> + <suffix name="Saturday" label=""/> + <suffix name="Sunday" label=""/> + <suffix name="Thursday" label=""/> + <suffix name="Tuesday" label=""/> + <suffix name="Wednesday" label=""/> <affected-histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal"/> </histogram_suffixes> @@ -179388,72 +179388,72 @@ </histogram_suffixes> <histogram_suffixes name="WrenchMenuActionTimings" separator="."> - <suffix name="About"/> - <suffix name="AppInfo"/> - <suffix name="BetaForum"/> - <suffix name="BookmarkAllTabs"/> - <suffix name="BookmarkOpen"> + <suffix name="About" label=""/> + <suffix name="AppInfo" label=""/> + <suffix name="BetaForum" label=""/> + <suffix name="BookmarkAllTabs" label=""/> + <suffix name="BookmarkOpen" label=""> <obsolete> Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenBookmark instead. </obsolete> </suffix> - <suffix name="BookmarkPage"/> - <suffix name="Cast"/> - <suffix name="ChromeOSRestart"/> - <suffix name="ClearBrowsingData"/> - <suffix name="Copy"/> - <suffix name="CopyUrl"/> - <suffix name="CreateHostedApp"/> - <suffix name="CreateShortcuts"> + <suffix name="BookmarkPage" label=""/> + <suffix name="Cast" label=""/> + <suffix name="ChromeOSRestart" label=""/> + <suffix name="ClearBrowsingData" label=""/> + <suffix name="Copy" label=""/> + <suffix name="CopyUrl" label=""/> + <suffix name="CreateHostedApp" label=""/> + <suffix name="CreateShortcuts" label=""> <obsolete> Deprecated as of 04/2017. Replaced by Bookmark Apps (CreateHostedApp). </obsolete> </suffix> - <suffix name="Cut"/> - <suffix name="DevTools"/> - <suffix name="DevToolsConsole"/> - <suffix name="DevToolsDevices"/> - <suffix name="DistillPage"/> - <suffix name="EnterFullScreen"/> - <suffix name="Exit"/> - <suffix name="Feedback"/> - <suffix name="Find"/> - <suffix name="HelpPage"/> - <suffix name="ImportSettings"/> - <suffix name="ManageExtensions"/> - <suffix name="NewIncognitoWindow"/> - <suffix name="NewTab"/> - <suffix name="NewWindow"/> - <suffix name="OpenBookmark"/> - <suffix name="OpenInChrome"/> - <suffix name="OpenRecentTab"/> - <suffix name="Paste"/> - <suffix name="PinToStartScreen"/> - <suffix name="Print"/> - <suffix name="ProfilingEnabled"/> - <suffix name="RecentTab"> + <suffix name="Cut" label=""/> + <suffix name="DevTools" label=""/> + <suffix name="DevToolsConsole" label=""/> + <suffix name="DevToolsDevices" label=""/> + <suffix name="DistillPage" label=""/> + <suffix name="EnterFullScreen" label=""/> + <suffix name="Exit" label=""/> + <suffix name="Feedback" label=""/> + <suffix name="Find" label=""/> + <suffix name="HelpPage" label=""/> + <suffix name="ImportSettings" label=""/> + <suffix name="ManageExtensions" label=""/> + <suffix name="NewIncognitoWindow" label=""/> + <suffix name="NewTab" label=""/> + <suffix name="NewWindow" label=""/> + <suffix name="OpenBookmark" label=""/> + <suffix name="OpenInChrome" label=""/> + <suffix name="OpenRecentTab" label=""/> + <suffix name="Paste" label=""/> + <suffix name="PinToStartScreen" label=""/> + <suffix name="Print" label=""/> + <suffix name="ProfilingEnabled" label=""/> + <suffix name="RecentTab" label=""> <obsolete> Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenRecentTab instead. </obsolete> </suffix> - <suffix name="RequestTabletSite"/> - <suffix name="RestoreTab"/> - <suffix name="SavePage"/> - <suffix name="Settings"/> - <suffix name="ShowBookmarkBar"/> - <suffix name="ShowBookmarkMgr"/> - <suffix name="ShowDownloads"/> - <suffix name="ShowHistory"/> - <suffix name="ShowSyncSetup"/> - <suffix name="SiteSettings"/> - <suffix name="TaskManager"/> - <suffix name="ViewSource"/> - <suffix name="Win8MetroRestart"/> - <suffix name="WinDesktopRestart"/> - <suffix name="ZoomMinus"/> - <suffix name="ZoomPlus"/> + <suffix name="RequestTabletSite" label=""/> + <suffix name="RestoreTab" label=""/> + <suffix name="SavePage" label=""/> + <suffix name="Settings" label=""/> + <suffix name="ShowBookmarkBar" label=""/> + <suffix name="ShowBookmarkMgr" label=""/> + <suffix name="ShowDownloads" label=""/> + <suffix name="ShowHistory" label=""/> + <suffix name="ShowSyncSetup" label=""/> + <suffix name="SiteSettings" label=""/> + <suffix name="TaskManager" label=""/> + <suffix name="ViewSource" label=""/> + <suffix name="Win8MetroRestart" label=""/> + <suffix name="WinDesktopRestart" label=""/> + <suffix name="ZoomMinus" label=""/> + <suffix name="ZoomPlus" label=""/> <affected-histogram name="WrenchMenu.TimeToAction"/> </histogram_suffixes>
diff --git a/tools/perf/benchmarks/blink_perf.py b/tools/perf/benchmarks/blink_perf.py index aa3dce7..9e306350 100644 --- a/tools/perf/benchmarks/blink_perf.py +++ b/tools/perf/benchmarks/blink_perf.py
@@ -563,4 +563,5 @@ return 'blink_perf.display_locking' def SetExtraBrowserOptions(self, options): - options.AppendExtraBrowserArgs(['--enable-blink-features=DisplayLocking']) + options.AppendExtraBrowserArgs( + ['--enable-blink-features=DisplayLocking,CSSContentSize'])
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc index 6587ba0..3e7d499 100644 --- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc +++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
@@ -155,6 +155,14 @@ // is on the next TextUnit boundary, if one exists. switch (unit) { case TextUnit_Character: { + // Sometimes, the start endpoint will be positioned at the end of anchor, + // meaning the end endpoint will be positioned in another anchor. Because + // Windows ATs behave undesirably when the start and end endpoints are not + // in the same anchor (for character and word navigation), move the start + // endpoint to the start of the other anchor. + if (start_->AtEndOfAnchor() && !start_->AtEndOfDocument()) { + start_ = start_->AsPositionBeforeCharacter(); + } // For characters, the start endpoint will always be on a TextUnit // boundary, thus we only need to move the end position. AXPositionInstance end_backup = end_->Clone(); @@ -193,6 +201,12 @@ // in order to move to the next one (stopping at the last anchor's end). end_ = start_->CreateNextWordStartPosition( AXBoundaryBehavior::StopAtLastAnchorBoundary); + // Because Windows ATs behave undesirably when the start and end endpoints + // are not in the same anchor (for character and word navigation), make + // sure to bring back the end endpoint to the end of the start's anchor. + if (start_->anchor_id() != end_->anchor_id()) { + end_ = start_->CreatePositionAtEndOfAnchor(); + } break; case TextUnit_Line: start_ = start_->CreatePreviousLineStartPosition( @@ -205,6 +219,11 @@ AXBoundaryBehavior::StopIfAlreadyAtBoundary); end_ = start_->CreateNextParagraphEndPosition( AXBoundaryBehavior::StopIfAlreadyAtBoundary); + + if (!start_->AtEndOfDocument()) + start_ = start_->AsPositionBeforeCharacter(); + if (!end_->AtEndOfDocument()) + end_ = end_->AsPositionBeforeCharacter(); break; case TextUnit_Page: { // If the document doesn't support pagination, default to document units @@ -227,20 +246,6 @@ return UIA_E_NOTSUPPORTED; } - // Some text positions are equal when compared, but they could be located at - // different anchors, affecting how `GetEnclosingElement` works. Normalize the - // endpoints to correctly enclose characters of the text representation. - AXPositionInstance normalized_start = start_->AsPositionBeforeCharacter(); - AXPositionInstance normalized_end = end_->AsPositionBeforeCharacter(); - - if (!normalized_start->IsNullPosition()) { - DCHECK_EQ(*start_, *normalized_start); - start_ = std::move(normalized_start); - } - if (!normalized_end->IsNullPosition()) { - DCHECK_EQ(*end_, *normalized_end); - end_ = std::move(normalized_end); - } return S_OK; }
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index ff3692c..61cb4cb 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn
@@ -39,6 +39,7 @@ "scoped_enable_unadjusted_mouse_events.h", "scoped_keyboard_hook.h", "scoped_simple_keyboard_hook.h", + "scoped_window_event_targeting_blocker.h", "scoped_window_targeter.h", "window.h", "window_delegate.h", @@ -81,6 +82,7 @@ "null_window_targeter.cc", "scoped_keyboard_hook.cc", "scoped_simple_keyboard_hook.cc", + "scoped_window_event_targeting_blocker.cc", "scoped_window_targeter.cc", "window.cc", "window_delegate.cc",
diff --git a/ui/aura/scoped_window_event_targeting_blocker.cc b/ui/aura/scoped_window_event_targeting_blocker.cc new file mode 100644 index 0000000..219076d --- /dev/null +++ b/ui/aura/scoped_window_event_targeting_blocker.cc
@@ -0,0 +1,42 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/aura/scoped_window_event_targeting_blocker.h" + +#include "ui/aura/window.h" + +namespace aura { + +ScopedWindowEventTargetingBlocker::ScopedWindowEventTargetingBlocker( + Window* window) + : window_(window) { + if (window_->event_targeting_blocker_count_ == 0) { + window_->restore_event_targeting_policy_ = window_->event_targeting_policy_; + window_->SetEventTargetingPolicy(EventTargetingPolicy::kNone); + } + // Increase |Window::event_targeting_blocker_count_| after setting the event + // targeting policy to kNone as Window::SetEventTargetingPolicy() relies on + // |Window::event_targeting_blocker_count_| to see if the policy is allowed + // to be changed. + window_->event_targeting_blocker_count_++; + window_->AddObserver(this); +} + +ScopedWindowEventTargetingBlocker::~ScopedWindowEventTargetingBlocker() { + if (!window_) + return; + window_->RemoveObserver(this); + window_->event_targeting_blocker_count_--; + DCHECK_GE(window_->event_targeting_blocker_count_, 0); + if (window_->event_targeting_blocker_count_ == 0) + window_->SetEventTargetingPolicy(window_->restore_event_targeting_policy_); +} + +void ScopedWindowEventTargetingBlocker::OnWindowDestroying(Window* window) { + DCHECK_EQ(window, window_); + window_->RemoveObserver(this); + window_ = nullptr; +} + +} // namespace aura
diff --git a/ui/aura/scoped_window_event_targeting_blocker.h b/ui/aura/scoped_window_event_targeting_blocker.h new file mode 100644 index 0000000..e240f35 --- /dev/null +++ b/ui/aura/scoped_window_event_targeting_blocker.h
@@ -0,0 +1,34 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_AURA_SCOPED_WINDOW_EVENT_TARGETING_BLOCKER_H_ +#define UI_AURA_SCOPED_WINDOW_EVENT_TARGETING_BLOCKER_H_ + +#include "base/macros.h" +#include "ui/aura/aura_export.h" +#include "ui/aura/window_observer.h" + +namespace aura { + +class Window; + +// Temporarily blocks the event targeting by setting kNone targeting policy to +// |window_|. The original event targeting policy will be restored if all +// targeting blockers are removed from |window_|. +class AURA_EXPORT ScopedWindowEventTargetingBlocker : public WindowObserver { + public: + explicit ScopedWindowEventTargetingBlocker(Window* window); + ~ScopedWindowEventTargetingBlocker() override; + + // WindowObserver: + void OnWindowDestroying(Window* window) override; + + private: + Window* window_; + DISALLOW_COPY_AND_ASSIGN(ScopedWindowEventTargetingBlocker); +}; + +} // namespace aura + +#endif // UI_AURA_SCOPED_WINDOW_EVENT_TARGETING_BLOCKER_H_
diff --git a/ui/aura/window.cc b/ui/aura/window.cc index 4828e77f..88272e4 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc
@@ -108,6 +108,8 @@ delegate_(delegate), event_targeting_policy_( aura::EventTargetingPolicy::kTargetAndDescendants), + restore_event_targeting_policy_( + aura::EventTargetingPolicy::kTargetAndDescendants), // Don't notify newly added observers during notification. This causes // problems for code that adds an observer as part of an observer // notification (such as the workspace code). @@ -570,6 +572,14 @@ } void Window::SetEventTargetingPolicy(EventTargetingPolicy policy) { + // If the event targeting is blocked on the window, do not allow change event + // targeting policy until all event targeting blockers are removed from the + // window. + if (event_targeting_blocker_count_ > 0) { + restore_event_targeting_policy_ = policy; + return; + } + #if DCHECK_IS_ON() const bool old_window_accepts_events = (event_targeting_policy_ == EventTargetingPolicy::kTargetOnly) ||
diff --git a/ui/aura/window.h b/ui/aura/window.h index fcfdd77..8558a5c 100644 --- a/ui/aura/window.h +++ b/ui/aura/window.h
@@ -69,13 +69,13 @@ class LayoutManager; class ScopedKeyboardHook; +class ScopedWindowEventTargetingBlocker; class WindowDelegate; -class WindowObserver; class WindowTargeter; class WindowTreeHost; // Defined in class_property.h (which we do not include) -template<typename T> +template <typename T> using WindowProperty = ui::ClassProperty<T>; namespace test { @@ -110,10 +110,7 @@ static constexpr int kInitialId = -1; // Used when stacking windows. - enum StackDirection { - STACK_ABOVE, - STACK_BELOW - }; + enum StackDirection { STACK_ABOVE, STACK_BELOW }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. @@ -397,7 +394,7 @@ void* GetNativeWindowProperty(const char* key) const; // Type of a function to delete a property that this window owns. - //typedef void (*PropertyDeallocator)(int64_t value); + // typedef void (*PropertyDeallocator)(int64_t value); // Overridden from ui::LayerDelegate: void OnDeviceScaleFactorChanged(float old_device_scale_factor, @@ -513,6 +510,7 @@ friend class HitTestDataProviderAura; friend class LayoutManager; friend class PropertyConverter; + friend class ScopedWindowEventTargetingBlocker; friend class WindowTargeter; friend class test::WindowTestApi; @@ -682,6 +680,10 @@ // Makes the window pass all events through to any windows behind it. EventTargetingPolicy event_targeting_policy_; + // Used to restore to the original event targeting policy after all event + // targeting blockers on this window are removed. + EventTargetingPolicy restore_event_targeting_policy_; + int event_targeting_blocker_count_ = 0; base::ReentrantObserverList<WindowObserver, true> observers_;
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc index b94aa8c..941e2463 100644 --- a/ui/aura/window_unittest.cc +++ b/ui/aura/window_unittest.cc
@@ -24,6 +24,7 @@ #include "ui/aura/client/visibility_client.h" #include "ui/aura/client/window_parenting_client.h" #include "ui/aura/layout_manager.h" +#include "ui/aura/scoped_window_event_targeting_blocker.h" #include "ui/aura/test/aura_test_base.h" #include "ui/aura/test/aura_test_utils.h" #include "ui/aura/test/test_window_delegate.h" @@ -1612,6 +1613,39 @@ EXPECT_TRUE(w111.get()->layer()->accept_events()); } +TEST_F(WindowTest, ScopedEventTargetingBlockerTest) { + // Test only when all event targeting blockers are removed from the window, + // its event targeting policy will restore back to its original value. + std::unique_ptr<Window> window(CreateTestWindowWithDelegate( + nullptr, 1, gfx::Rect(0, 0, 500, 500), root_window())); + EXPECT_EQ(window->event_targeting_policy(), + EventTargetingPolicy::kTargetAndDescendants); + auto event_targeting_blocker1 = + std::make_unique<ScopedWindowEventTargetingBlocker>(window.get()); + EXPECT_EQ(window->event_targeting_policy(), EventTargetingPolicy::kNone); + auto event_targeting_blocker2 = + std::make_unique<ScopedWindowEventTargetingBlocker>(window.get()); + EXPECT_EQ(window->event_targeting_policy(), EventTargetingPolicy::kNone); + event_targeting_blocker2.reset(); + EXPECT_EQ(window->event_targeting_policy(), EventTargetingPolicy::kNone); + event_targeting_blocker1.reset(); + EXPECT_EQ(window->event_targeting_policy(), + EventTargetingPolicy::kTargetAndDescendants); + + // It's possible that the event target policy changes when there is an event + // targeting blocker in place. In this case when the event targeting blocker + // is removed from the window, the window should restore to the changed event + // targeting policy. + auto event_targeting_blocker3 = + std::make_unique<ScopedWindowEventTargetingBlocker>(window.get()); + EXPECT_EQ(window->event_targeting_policy(), EventTargetingPolicy::kNone); + window->SetEventTargetingPolicy(EventTargetingPolicy::kTargetOnly); + EXPECT_EQ(window->event_targeting_policy(), EventTargetingPolicy::kNone); + event_targeting_blocker3.reset(); + EXPECT_EQ(window->event_targeting_policy(), + EventTargetingPolicy::kTargetOnly); +} + // Tests transformation on the root window. TEST_F(WindowTest, Transform) { gfx::Size size = host()->GetBoundsInPixels().size();
diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc index e67b048..8adaa61d 100644 --- a/ui/base/template_expressions.cc +++ b/ui/base/template_expressions.cc
@@ -21,18 +21,18 @@ const size_t kHtmlTemplateStartSize = base::size(kHtmlTemplateStart) - 1; // Currently only legacy _template: html`...`, syntax is supported. -enum HtmlTemplateType { NONE = 0, LEGACY = 1 }; +enum HtmlTemplateType { INVALID = 0, NONE = 1, LEGACY = 2 }; struct TemplatePosition { HtmlTemplateType type; base::StringPiece::size_type position; }; -TemplatePosition FindHtmlTemplateStart(const base::StringPiece& source) { - base::StringPiece::size_type found = source.find(kHtmlTemplateStart); - HtmlTemplateType type = found == base::StringPiece::npos ? NONE : LEGACY; - return {type, found + kHtmlTemplateStartSize}; -} +struct HtmlTemplate { + base::StringPiece::size_type start; + base::StringPiece::size_type length; + HtmlTemplateType type; +}; TemplatePosition FindHtmlTemplateEnd(const base::StringPiece& source) { enum State { OPEN, IN_ESCAPE, IN_TICK }; @@ -62,6 +62,36 @@ return {NONE, base::StringPiece::npos}; } +HtmlTemplate FindHtmlTemplate(const base::StringPiece& source) { + HtmlTemplate out; + base::StringPiece::size_type found = source.find(kHtmlTemplateStart); + + // No template found, return early. + if (found == base::StringPiece::npos) { + out.type = NONE; + return out; + } + + out.start = found + kHtmlTemplateStartSize; + TemplatePosition end = FindHtmlTemplateEnd(source.substr(out.start)); + // Template is not terminated. + if (end.type == NONE) { + out.type = INVALID; + return out; + } + + out.length = end.position; + // Check for a nested template + if (source.substr(out.start, out.length).find(kHtmlTemplateStart) != + base::StringPiece::npos) { + out.type = INVALID; + return out; + } + + out.type = LEGACY; + return out; +} + // Escape quotes and backslashes ('"\). std::string PolymerParameterEscape(const std::string& in_string) { std::string out; @@ -200,42 +230,45 @@ bool ReplaceTemplateExpressionsInJS(base::StringPiece source, const TemplateReplacements& replacements, std::string* formatted) { - // Replacement is only done in JS for the contents of the HTML _template - // string. - TemplatePosition start_result = FindHtmlTemplateStart(source); - if (start_result.type == NONE) { - *formatted = source.as_string(); - return true; + CHECK(formatted->empty()); + base::StringPiece remaining = source; + while (true) { + // Replacement is only done in JS for the contents of HTML _template + // strings. + HtmlTemplate current_template = FindHtmlTemplate(remaining); + + // If there was an error finding a template, return false. + if (current_template.type == INVALID) + return false; + + // If there are no more templates, copy the remaining JS to the output and + // return true. + if (current_template.type == NONE) { + formatted->append(remaining.as_string()); + return true; + } + + // Copy the JS before the template to the output. + formatted->append(remaining.substr(0, current_template.start).as_string()); + + // Retrieve the HTML portion of the source. + base::StringPiece html_template = + remaining.substr(current_template.start, current_template.length); + + // Perform replacements with JS escaping. + std::string formatted_html; + if (!ReplaceTemplateExpressionsInternal(html_template, replacements, true, + &formatted_html)) { + return false; + } + + // Append the formatted HTML template. + formatted->append(formatted_html); + + // Increment to the end of the current template. + remaining = + remaining.substr(current_template.start + current_template.length); } - - // Only one template allowed per file. - TemplatePosition second_start_result = - FindHtmlTemplateStart(source.substr(start_result.position)); - if (second_start_result.type != NONE) - return false; - - TemplatePosition end_result = - FindHtmlTemplateEnd(source.substr(start_result.position)); - - // Template must be properly terminated. - if (start_result.type != end_result.type) - return false; - - // Retrieve the HTML portion of the source. - base::StringPiece html_template = - source.substr(start_result.position, end_result.position); - - // Perform replacements with JS escaping. - std::string formatted_html; - if (!ReplaceTemplateExpressionsInternal(html_template, replacements, true, - &formatted_html)) { - return false; - } - - // Re-assemble the JS file. - *formatted = - source.substr(0, start_result.position).as_string() + formatted_html + - source.substr(start_result.position + end_result.position).as_string(); return true; }
diff --git a/ui/base/template_expressions_unittest.cc b/ui/base/template_expressions_unittest.cc index e254137e..6f82f387f 100644 --- a/ui/base/template_expressions_unittest.cc +++ b/ui/base/template_expressions_unittest.cc
@@ -275,17 +275,6 @@ // All these cases should fail. const TestCase kTestCases[] = { - // 2 HTML template strings are not allowed. - {"Polymer({\n" - " _template: html`\n" - " <span>Hello</span>\n" - " `,\n" - " _template: html`\n" - " <div>World</div>\n" - " `,\n" - " is: 'foo-element',\n" - "});", - ""}, // Nested templates not allowed. {"Polymer({\n" " _template: html`\n" @@ -349,4 +338,54 @@ } } +TEST(TemplateExpressionsTest, JSMultipleTemplates) { + TemplateReplacements substitutions; + substitutions["test"] = "word"; + substitutions["5"] = "number"; + + const TestCase kTestCases[] = { + // Only the second template has substitutions + {"Polymer({\n" + " _template: html`<div>Hello</div>`,\n" + " is: 'foo-element',\n" + "});" + "Polymer({\n" + " _template: html`<div>$i18n{5}$i18n{test}</div>`,\n" + " is: 'bar-element',\n" + "});", + "Polymer({\n" + " _template: html`<div>Hello</div>`,\n" + " is: 'foo-element',\n" + "});" + "Polymer({\n" + " _template: html`<div>numberword</div>`,\n" + " is: 'bar-element',\n" + "});"}, + // 2 templates, both with substitutions. + {"Polymer({\n" + " _template: html`<div>$i18n{test}</div>`,\n" + " is: 'foo-element',\n" + "});" + "Polymer({\n" + " _template: html`<div>$i18n{5}</div>`,\n" + " is: 'bar-element',\n" + "});", + "Polymer({\n" + " _template: html`<div>word</div>`,\n" + " is: 'foo-element',\n" + "});" + "Polymer({\n" + " _template: html`<div>number</div>`,\n" + " is: 'bar-element',\n" + "});"}}; + + std::string formatted; + for (const TestCase test_case : kTestCases) { + ASSERT_TRUE(ReplaceTemplateExpressionsInJS(test_case.js_in, substitutions, + &formatted)); + EXPECT_EQ(test_case.expected_out, formatted); + formatted.clear(); + } +} + } // namespace ui
diff --git a/ui/ozone/demo/BUILD.gn b/ui/ozone/demo/BUILD.gn index e76ca1f..f7530e8 100644 --- a/ui/ozone/demo/BUILD.gn +++ b/ui/ozone/demo/BUILD.gn
@@ -4,7 +4,7 @@ import("//gpu/vulkan/features.gni") if (is_fuchsia) { - import("//build/config/fuchsia/rules.gni") + import("//build/config/fuchsia/generate_runner_scripts.gni") } group("demo") {
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index b92fe5397..1b7d70e8 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -639,6 +639,7 @@ "corewm/tooltip.h", "corewm/tooltip_aura.h", "corewm/tooltip_controller.h", + "corewm/tooltip_win.h", "event_monitor_aura.h", "touchui/touch_selection_controller_impl.h", "touchui/touch_selection_menu_runner_views.h", @@ -666,6 +667,7 @@ "corewm/cursor_height_provider_win.cc", "corewm/tooltip_aura.cc", "corewm/tooltip_controller.cc", + "corewm/tooltip_win.cc", "drag_utils_aura.cc", "event_monitor_aura.cc", "metrics_aura.cc",
diff --git a/ui/views/corewm/tooltip_win.cc b/ui/views/corewm/tooltip_win.cc new file mode 100644 index 0000000..971e0dd --- /dev/null +++ b/ui/views/corewm/tooltip_win.cc
@@ -0,0 +1,178 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/corewm/tooltip_win.h" + +#include "base/i18n/rtl.h" +#include "base/logging.h" +#include "base/win/windowsx_shim.h" +#include "ui/base/l10n/l10n_util_win.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/display/win/screen_win.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/system_fonts_win.h" +#include "ui/views/corewm/cursor_height_provider_win.h" + +namespace views { +namespace corewm { + +TooltipWin::TooltipWin(HWND parent) + : parent_hwnd_(parent), tooltip_hwnd_(nullptr), showing_(false) { + memset(&toolinfo_, 0, sizeof(toolinfo_)); + toolinfo_.cbSize = sizeof(toolinfo_); + toolinfo_.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE; + toolinfo_.uId = reinterpret_cast<UINT_PTR>(parent_hwnd_); + toolinfo_.hwnd = parent_hwnd_; + toolinfo_.lpszText = nullptr; + toolinfo_.lpReserved = nullptr; + SetRectEmpty(&toolinfo_.rect); +} + +TooltipWin::~TooltipWin() { + if (tooltip_hwnd_) + DestroyWindow(tooltip_hwnd_); +} + +bool TooltipWin::HandleNotify(int w_param, NMHDR* l_param, LRESULT* l_result) { + if (tooltip_hwnd_ == nullptr) + return false; + + switch (l_param->code) { + case TTN_POP: + showing_ = false; + return true; + case TTN_SHOW: + *l_result = TRUE; + PositionTooltip(); + showing_ = true; + return true; + default: + break; + } + return false; +} + +bool TooltipWin::EnsureTooltipWindow() { + if (tooltip_hwnd_) + return true; + + tooltip_hwnd_ = + CreateWindowEx(WS_EX_TRANSPARENT | l10n_util::GetExtendedTooltipStyles(), + TOOLTIPS_CLASS, nullptr, TTS_NOPREFIX | WS_POPUP, 0, 0, 0, + 0, parent_hwnd_, nullptr, nullptr, nullptr); + if (!tooltip_hwnd_) { + PLOG(WARNING) << "tooltip creation failed, disabling tooltips"; + return false; + } + + MaybeOverrideFont(); + + SendMessage(tooltip_hwnd_, TTM_ADDTOOL, 0, + reinterpret_cast<LPARAM>(&toolinfo_)); + return true; +} + +void TooltipWin::PositionTooltip() { + gfx::Point screen_point = + display::win::ScreenWin::DIPToScreenPoint(location_); + const int cursoroffset = GetCurrentCursorVisibleHeight(); + screen_point.Offset(0, cursoroffset); + + DWORD tooltip_size = SendMessage(tooltip_hwnd_, TTM_GETBUBBLESIZE, 0, + reinterpret_cast<LPARAM>(&toolinfo_)); + const gfx::Size size(LOWORD(tooltip_size), HIWORD(tooltip_size)); + + const display::Display display( + display::Screen::GetScreen()->GetDisplayNearestPoint(location_)); + + gfx::Rect tooltip_bounds(screen_point, size); + tooltip_bounds.AdjustToFit( + display::win::ScreenWin::DIPToScreenRect(parent_hwnd_, + display.work_area())); + SetWindowPos(tooltip_hwnd_, nullptr, tooltip_bounds.x(), tooltip_bounds.y(), + 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); + + MaybeOverrideFont(); +} + +void TooltipWin::MaybeOverrideFont() { + gfx::win::FontAdjustment font_adjustment; + const HFONT old_font = GetWindowFont(tooltip_hwnd_); + + // Determine if we need to override the font. + if ((!override_font_.get() || override_font_.get() != old_font) && + l10n_util::NeedOverrideDefaultUIFont( + &font_adjustment.font_family_override, &font_adjustment.font_scale)) { + // Determine if we need to regenerate the font. + // There are a number of situations under which Windows can replace the + // font in a tooltip, but we don't actually need to regenerate our override + // font unless the underlying text/DPI scale of the window has changed. + const float current_scale = + display::win::ScreenWin::GetScaleFactorForHWND(tooltip_hwnd_); + if (!override_font_.get() || current_scale != override_scale_) { + override_font_.reset( + gfx::win::AdjustExistingSystemFont(old_font, font_adjustment)); + override_scale_ = current_scale; + } + + // Override the font in the tooltip. + SetWindowFont(tooltip_hwnd_, override_font_.get(), FALSE); + } +} + +int TooltipWin::GetMaxWidth(const gfx::Point& location) const { + const gfx::Point screen_point = + display::win::ScreenWin::DIPToScreenPoint(location); + display::Display display( + display::Screen::GetScreen()->GetDisplayNearestPoint(screen_point)); + const gfx::Rect monitor_bounds = display.bounds(); + return (monitor_bounds.width() + 1) / 2; +} + +void TooltipWin::SetText(aura::Window* window, + const base::string16& tooltip_text, + const gfx::Point& location) { + if (!EnsureTooltipWindow()) + return; + + // See comment in header for details on why |location_| is needed. + location_ = location; + + base::string16 adjusted_text(tooltip_text); + base::i18n::AdjustStringForLocaleDirection(&adjusted_text); + toolinfo_.lpszText = const_cast<WCHAR*>(adjusted_text.c_str()); + SendMessage(tooltip_hwnd_, TTM_SETTOOLINFO, 0, + reinterpret_cast<LPARAM>(&toolinfo_)); + + int max_width = GetMaxWidth(location_); + SendMessage(tooltip_hwnd_, TTM_SETMAXTIPWIDTH, 0, max_width); +} + +void TooltipWin::Show() { + if (!EnsureTooltipWindow()) + return; + + SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, + TRUE, reinterpret_cast<LPARAM>(&toolinfo_)); + + // Bring the window to the front. + SetWindowPos(tooltip_hwnd_, HWND_TOPMOST, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOSIZE); +} + +void TooltipWin::Hide() { + if (!tooltip_hwnd_) + return; + + SendMessage(tooltip_hwnd_, TTM_TRACKACTIVATE, FALSE, + reinterpret_cast<LPARAM>(&toolinfo_)); +} + +bool TooltipWin::IsVisible() { + return showing_; +} + +} // namespace corewm +} // namespace views
diff --git a/ui/views/corewm/tooltip_win.h b/ui/views/corewm/tooltip_win.h new file mode 100644 index 0000000..9ed24d3 --- /dev/null +++ b/ui/views/corewm/tooltip_win.h
@@ -0,0 +1,84 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_VIEWS_COREWM_TOOLTIP_WIN_H_ +#define UI_VIEWS_COREWM_TOOLTIP_WIN_H_ + +#include <windows.h> +#include <commctrl.h> + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "base/optional.h" +#include "base/strings/string16.h" +#include "base/win/scoped_gdi_object.h" +#include "ui/gfx/geometry/point.h" +#include "ui/views/corewm/tooltip.h" + +namespace views { +namespace corewm { + +// Implementation of Tooltip that uses the native win32 control for showing the +// tooltip. +class VIEWS_EXPORT TooltipWin : public Tooltip { + public: + explicit TooltipWin(HWND parent); + ~TooltipWin() override; + + // HandleNotify() is forwarded from DesktopWindowTreeHostWin to keep the + // native tooltip in sync. + bool HandleNotify(int w_param, NMHDR* l_param, LRESULT* l_result); + + private: + // Ensures |tooltip_hwnd_| is valid. Returns true if valid, false if there + // a problem creating |tooltip_hwnd_|. + bool EnsureTooltipWindow(); + + // Sets the position of the tooltip. + void PositionTooltip(); + + // Might override the font size for localization (e.g. Hindi). + void MaybeOverrideFont(); + + // Tooltip: + int GetMaxWidth(const gfx::Point& location) const override; + void SetText(aura::Window* window, + const base::string16& tooltip_text, + const gfx::Point& location) override; + void Show() override; + void Hide() override; + bool IsVisible() override; + + // Font we're currently overriding our UI font with. + // Should outlast |tooltip_hwnd_|. + base::win::ScopedHFONT override_font_; + + // The window |tooltip_hwnd_| is parented to. + HWND parent_hwnd_; + + // Shows the tooltip. + HWND tooltip_hwnd_; + + // Used to modify the tooltip. + TOOLINFO toolinfo_; + + // Is the tooltip showing? + bool showing_; + + // Location to show the tooltip at. In order to position the tooltip we need + // to know the size. The size is only available from TTN_SHOW, so we have to + // cache it. + gfx::Point location_; + + // What the scale was the last time we overrode the font, to see if we can + // re-use our previous override. + float override_scale_ = 0.0f; + + DISALLOW_COPY_AND_ASSIGN(TooltipWin); +}; + +} // namespace corewm +} // namespace views + +#endif // UI_VIEWS_COREWM_TOOLTIP_WIN_H_
diff --git a/ui/views/views_features.cc b/ui/views/views_features.cc index 65609e6..4f2750ce 100644 --- a/ui/views/views_features.cc +++ b/ui/views/views_features.cc
@@ -11,6 +11,12 @@ // Please keep alphabetized. +#if defined(OS_WIN) +// Uses aura tooltips instead of the native comctl32 tooltips on Windows. +const base::Feature kEnableAuraTooltipsOnWindows{ + "EnableAuraTooltipsOnWindows", base::FEATURE_ENABLED_BY_DEFAULT}; +#endif // OS_WIN + // Increases corner radius on Dialogs for the material design refresh. // TODO(sajadm): Remove this feature flag when platform inconsistencies // have been fixed as recorded on: https://crbug.com/932970
diff --git a/ui/views/views_features.h b/ui/views/views_features.h index 3c064f7..de370cbf 100644 --- a/ui/views/views_features.h +++ b/ui/views/views_features.h
@@ -6,12 +6,17 @@ #define UI_VIEWS_VIEWS_FEATURES_H_ #include "base/feature_list.h" +#include "build/build_config.h" #include "ui/views/views_export.h" namespace views { namespace features { // Please keep alphabetized. +#if defined(OS_WIN) +VIEWS_EXPORT extern const base::Feature kEnableAuraTooltipsOnWindows; +#endif // OS_WIN + VIEWS_EXPORT extern const base::Feature kEnableMDRoundedCornersOnDialogs; VIEWS_EXPORT extern const base::Feature kEnableViewPaintOptimization;
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc index 2f78bf6..b5041a5 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
@@ -31,6 +31,8 @@ #include "ui/gfx/native_widget_types.h" #include "ui/gfx/path_win.h" #include "ui/views/corewm/tooltip_aura.h" +#include "ui/views/corewm/tooltip_win.h" +#include "ui/views/views_features.h" #include "ui/views/views_switches.h" #include "ui/views/widget/desktop_aura/desktop_drag_drop_client_win.h" #include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" @@ -92,7 +94,8 @@ drag_drop_client_(nullptr), should_animate_window_close_(false), pending_close_(false), - has_non_client_view_(false) {} + has_non_client_view_(false), + tooltip_(nullptr) {} DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() { desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); @@ -163,7 +166,12 @@ void DesktopWindowTreeHostWin::OnWidgetInitDone() {} std::unique_ptr<corewm::Tooltip> DesktopWindowTreeHostWin::CreateTooltip() { - return std::make_unique<corewm::TooltipAura>(); + if (base::FeatureList::IsEnabled(features::kEnableAuraTooltipsOnWindows)) + return std::make_unique<corewm::TooltipAura>(); + + DCHECK(!tooltip_); + tooltip_ = new corewm::TooltipWin(GetAcceleratedWidget()); + return base::WrapUnique(tooltip_); } std::unique_ptr<aura::client::DragDropClient> @@ -990,6 +998,12 @@ compositor()->ScheduleRedrawRect(invalid_rect); } +bool DesktopWindowTreeHostWin::HandleTooltipNotify(int w_param, + NMHDR* l_param, + LRESULT* l_result) { + return tooltip_ && tooltip_->HandleNotify(w_param, l_param, l_result); +} + void DesktopWindowTreeHostWin::HandleMenuLoop(bool in_menu_loop) { if (in_menu_loop) { tooltip_disabler_ = std::make_unique<wm::ScopedTooltipDisabler>(window());
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.h b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.h index e63ced1..b195b58 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.h +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.h
@@ -37,6 +37,10 @@ class HWNDMessageHandler; class NonClientFrameView; +namespace corewm { +class TooltipWin; +} + namespace test { class DesktopWindowTreeHostWinTestApi; } @@ -209,6 +213,9 @@ void HandleInputLanguageChange(DWORD character_set, HKL input_language_id) override; void HandlePaintAccelerated(const gfx::Rect& invalid_rect) override; + bool HandleTooltipNotify(int w_param, + NMHDR* l_param, + LRESULT* l_result) override; void HandleMenuLoop(bool in_menu_loop) override; bool PreHandleMSG(UINT message, WPARAM w_param, @@ -281,6 +288,10 @@ // True if the window should have the frame removed. bool remove_standard_frame_; + // Owned by TooltipController, but we need to forward events to it so we keep + // a reference. + corewm::TooltipWin* tooltip_; + // Visibility of the cursor. On Windows we can have multiple root windows and // the implementation of ::ShowCursor() is based on a counter, so making this // member static ensures that ::ShowCursor() is always called exactly once
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc index c1dc0c75..a4649b8 100644 --- a/ui/views/win/hwnd_message_handler.cc +++ b/ui/views/win/hwnd_message_handler.cc
@@ -2409,6 +2409,12 @@ return 0; } +LRESULT HWNDMessageHandler::OnNotify(int w_param, NMHDR* l_param) { + LRESULT l_result = 0; + SetMsgHandled(delegate_->HandleTooltipNotify(w_param, l_param, &l_result)); + return l_result; +} + void HWNDMessageHandler::OnPaint(HDC dc) { // Call BeginPaint()/EndPaint() around the paint handling, as that seems // to do more to actually validate the window's drawing region. This only
diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h index a67e0e7..cbc7961 100644 --- a/ui/views/win/hwnd_message_handler.h +++ b/ui/views/win/hwnd_message_handler.h
@@ -444,6 +444,7 @@ CR_MSG_WM_NCCREATE(OnNCCreate) CR_MSG_WM_NCHITTEST(OnNCHitTest) CR_MSG_WM_NCPAINT(OnNCPaint) + CR_MSG_WM_NOTIFY(OnNotify) CR_MSG_WM_PAINT(OnPaint) CR_MSG_WM_SETFOCUS(OnSetFocus) CR_MSG_WM_SETICON(OnSetIcon) @@ -501,6 +502,7 @@ void OnNCPaint(HRGN rgn); LRESULT OnNCUAHDrawCaption(UINT message, WPARAM w_param, LPARAM l_param); LRESULT OnNCUAHDrawFrame(UINT message, WPARAM w_param, LPARAM l_param); + LRESULT OnNotify(int w_param, NMHDR* l_param); void OnPaint(HDC dc); LRESULT OnReflectedMessage(UINT message, WPARAM w_param, LPARAM l_param); LRESULT OnScrollMessage(UINT message, WPARAM w_param, LPARAM l_param);
diff --git a/ui/views/win/hwnd_message_handler_delegate.h b/ui/views/win/hwnd_message_handler_delegate.h index ddc640e..45c4e5b2 100644 --- a/ui/views/win/hwnd_message_handler_delegate.h +++ b/ui/views/win/hwnd_message_handler_delegate.h
@@ -221,6 +221,11 @@ // Called to compel the delegate to paint |invalid_rect| accelerated. virtual void HandlePaintAccelerated(const gfx::Rect& invalid_rect) = 0; + // Called to forward a WM_NOTIFY message to the tooltip manager. + virtual bool HandleTooltipNotify(int w_param, + NMHDR* l_param, + LRESULT* l_result) = 0; + // Invoked on entering/exiting a menu loop. virtual void HandleMenuLoop(bool in_menu_loop) = 0;
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn index c3a7ff4..d463d3ec 100644 --- a/ui/webui/resources/cr_elements/BUILD.gn +++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -91,6 +91,12 @@ html_type = "style-module" } +polymer_modulizer("cr_page_host_style_css") { + js_file = "cr_page_host_style_css.m.js" + html_file = "cr_page_host_style_css.html" + html_type = "style-module" +} + polymer_modulizer("shared_vars_css") { js_file = "shared_vars_css.m.js" html_file = "shared_vars_css.html" @@ -136,6 +142,7 @@ deps = [ ":action_link_css_module", ":cr_icons_css_module", + ":cr_page_host_style_css_module", ":hidden_style_css_module", ":icons_module", ":md_select_css_module",
diff --git a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js index ddc9f58..fb555d65 100644 --- a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js +++ b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.js
@@ -265,14 +265,14 @@ return; } - // Accept Enter keys from either the dialog, or a child input or cr-input - // element (but consider that the event may have been retargeted). - const origTarget = e.composedPath()[0]; - const accept = e.target == this || origTarget.tagName == 'CR-INPUT' || - (origTarget.tagName == 'INPUT' && - // <cr-input> can only be text-like; apply the same limit to <input> so - // that e.g. enter on a checkbox does not submit the dialog. - ['text', 'password', 'number', 'search'].includes(origTarget.type)); + // Accept Enter keys from either the dialog itself, or a child cr-input, + // considering that the event may have been retargeted, for example if the + // cr-input is nested inside another element. Also exclude inputs of type + // 'search', since hitting 'Enter' on a search field most likely intends to + // trigger searching. + const accept = e.target === this || + e.composedPath().some( + el => el.tagName == 'CR-INPUT' && el.type != 'search'); if (!accept) { return; }
diff --git a/ui/webui/resources/cr_elements_resources_v3.grdp b/ui/webui/resources/cr_elements_resources_v3.grdp index 39d855b..4185ee4 100644 --- a/ui/webui/resources/cr_elements_resources_v3.grdp +++ b/ui/webui/resources/cr_elements_resources_v3.grdp
@@ -61,6 +61,11 @@ use_base_dir="false" type="BINDATA" compress="gzip" /> + <include name="IDR_CR_ELEMENTS_CR_PAGE_HOST_STYLE_CSS_M_JS" + file="${root_gen_dir}/ui/webui/resources/cr_elements/cr_page_host_style_css.m.js" + use_base_dir="false" + type="BINDATA" + compress="gzip" /> <include name="IDR_CR_ELEMENTS_CR_LAZY_RENDER_M_JS" file="${root_gen_dir}/ui/webui/resources/cr_elements/cr_lazy_render/cr_lazy_render.m.js" use_base_dir="false"